Можно ли динамически создавать кадры данных в Python? - PullRequest
0 голосов
/ 04 февраля 2020

Добрый вечер, вроде как новость для Python здесь.

Итак, я работаю над проектом по анализу данных в Facebook, в котором, во-первых, мне нужно получить всю необходимую информацию. Я хочу сделать мой код максимально чистым и «дружелюбным». Несмотря на то, что у меня действительно тяжелые времена, связанные с первым делом (код работает отлично, но он очень медленный, я думаю, что я использую слишком много циклов for), я немного удовлетворен «удобством для пользователя». Прямо сейчас, гипотетический пользователь должен ввести только те метрики / таймфреймы, которые ему нужны, автоматически запрашивается при запуске, и программа извлекает и преобразует в файлы CSV все.

Я использую 4 различных pandas DataFrames для хранения группируем информацию, объект графа которой идентичен, за исключением индекса / переменной, так что я могу легко построить для l oop. Например:

def scrape_insights(insights,post_ids):
data_insights = pd.DataFrame(columns = insights)

i = 0
while i < len(post_ids):
    print('INSIGHTS DATA: Post {0} out of {1} - processed'.format(i+1,len(post_ids)))
    for j in insights:

        temp = graph.get_connections(id = post_ids[i]['id'], connection_name = 'insights', metric = j)      

        if temp['data'][0]['name'] == j:
            data_insights.at[i,j] = temp['data'][0]['values'][0]['value']

    i += 1  

del(i)
del(j)
del(temp)

return data_insights

Эта функция принимает в качестве входных данных список метрик сообщений, необходимых пользователю, + список всех идентификаторов сообщений на соответствующей странице и возвращает фрейм данных, в котором каждый столбец представляет метрику. c. Я делаю это для публикации сообщений, публикации базовой информации c (мне нужно использовать get_object вместо get_connections, потому что я тупой и не могу объединить две вещи), информацию о страницах и информацию о демографии страницы. Теперь у меня есть проблемы относительно последнего. Информация о демографии страницы не приходит как индекс + значение, но для каждого индекса (даты на этот раз) у меня есть МНОГО переменных (по одной для каждой страны или языка или города и т. Д. c). Это означает, что результатом каждого вызова является сам фрейм данных: я не могу составить свой фрейм данных внутри для l oop, как раньше. Но я бы хотел, чтобы код работал так же, как и в других случаях: пользователь вводит необходимые ему метрики, которые передаются в функцию, которая возвращает данные. Это не проблема иметь один полный фрейм данных для каждого показателя c, но я не понимаю, как я могу построить их «все сразу» ...

def scrape_demographics(metric_demo, start_date):
data_cities = pd.DataFrame()
temp = graph.get_connections(id = page_id, connection_name = 'insights', metric = metric_demo, since = start_date)
for i in range(0,len(temp['data'][0]['values'])):
    for j in temp['data'][0]['values'][i]['value'].keys():
        data_cities.at[i,j] = temp['data'][0]['values'][i]['value'][j]
        data_cities.at[i,'Date'] = temp['data'][0]['values'][i]['end_time']

return data_cities

Это работает с каждым демографическим показателем c, я пытался указать страны или языки или что-то еще, при условии, что структура та же самая, она работает. Что я могу сделать сейчас: создать один фрейм данных для каждого показателя c в основном, передавать их функции по одному за раз, без проблем. Что я хотел бы сделать: пользователь вводит 2 разные метрики, поэтому создаются 2 кадра данных с именем metri c (как два столбца были бы созданы, когда метри c был один столбец), каждый из них передается к функции, а затем у меня есть 2 кадра данных для преобразования в CSV.

Возможно ли это сделать? Как я могу? Должен ли я использовать классы?

Большое спасибо заранее, и я прошу прощения за скудные знания Python, которые у меня есть, и за мой английский sh (это не мой родной язык)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...