Данные Google Analytics на Pandas Датафрейм - PullRequest
1 голос
/ 21 января 2020

Я пытаюсь отправить данные аналитики Google на фрейм данных pandas с помощью API Google Analytics. Я следовал за примерами кода, которые доступны в официальной документации, и теперь у меня есть код, который позволяет распечатать нужные мне данные. Мне нужна помощь, чтобы выяснить, как отправить данные на pandas фрейм данных вместо того, чтобы просто распечатать их.

Как только я выполню запрос, я получу необработанный вывод:

{'kind': 'analytics#gaData', 'id': 'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXXXXX&dimensions=ga:date&metrics=ga:sessions,ga:transactions&start-date=7daysAgo&end-date=today', 'query': {'start-date': '7daysAgo', 'end-date': 'today', 'ids': 'ga:XXXXXXX', 'dimensions': 'ga:date', 'metrics': ['ga:sessions', 'ga:transactions'], 'start-index': 1, 'max-results': 1000}, 'itemsPerPage': 1000, 'totalResults': 8, 'selfLink': 'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXXXXX&dimensions=ga:date&metrics=ga:sessions,ga:transactions&start-date=7daysAgo&end-date=today', 'profileInfo': {'profileId': 'XXXXXXX', 'accountId': 'XXXXXXX', 'webPropertyId': 'XXXXXXX', 'internalWebPropertyId': 'XXXXXXX', 'profileName': 'XXXXXXX', 'tableId': 'ga:XXXXXXX'}, 'containsSampledData': False, 'columnHeaders': [{'name': 'ga:date', 'columnType': 'DIMENSION', 'dataType': 'STRING'}, {'name': 'ga:sessions', 'columnType': 'METRIC', 'dataType': 'INTEGER'}, {'name': 'ga:transactions', 'columnType': 'METRIC', 'dataType': 'INTEGER'}], 'totalsForAllResults': {'ga:sessions': '86913', 'ga:transactions': '312'}, 'rows': [['20200114', '11965', '41'], ['20200115', '11052', '51'], ['20200116', '11396', '38'], ['20200117', '11097', '28'], ['20200118', '10490', '46'], ['20200119', '9829', '34'], ['20200120', '12280', '36'], ['20200121', '8804', '38']]}

Документация Google использует эту функцию для вывода этих данных в операторе печати:

def print_results(results):

    # Print header.
    output = []
    for header in results.get('columnHeaders'):
        output.append('%30s' % header.get('name'))
    print(''.join(output))

    # Print data table.
    if results.get('rows', []):
        for row in results.get('rows'):
            output = []
            for cell in row:
                output.append('%30s' % cell)
            print(''.join(output))
    else:
        print('No Rows Found')

Как видите, нам нужно захватить results[columnHeaders][name] в качестве заголовков столбцов и нам нужно захватить results[rows] как данные, которые должны быть переданы в pandas фрейм данных.

Как я могу создать функцию для помещения этих данных в фрейм данных?

1 Ответ

0 голосов
/ 21 января 2020

Попробуйте следующий код:

import pandas as pd
results = {'kind': 'analytics#gaData', 'id': 'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXXXXX&dimensions=ga:date&metrics=ga:sessions,ga:transactions&start-date=7daysAgo&end-date=today', 'query': {'start-date': '7daysAgo', 'end-date': 'today', 'ids': 'ga:XXXXXXX', 'dimensions': 'ga:date', 'metrics': ['ga:sessions', 'ga:transactions'], 'start-index': 1, 'max-results': 1000}, 'itemsPerPage': 1000, 'totalResults': 8, 'selfLink': 'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXXXXX&dimensions=ga:date&metrics=ga:sessions,ga:transactions&start-date=7daysAgo&end-date=today', 'profileInfo': {'profileId': 'XXXXXXX', 'accountId': 'XXXXXXX', 'webPropertyId': 'XXXXXXX', 'internalWebPropertyId': 'XXXXXXX', 'profileName': 'XXXXXXX', 'tableId': 'ga:XXXXXXX'}, 'containsSampledData': False, 'columnHeaders': [{'name': 'ga:date', 'columnType': 'DIMENSION', 'dataType': 'STRING'}, {'name': 'ga:sessions', 'columnType': 'METRIC', 'dataType': 'INTEGER'}, {'name': 'ga:transactions', 'columnType': 'METRIC', 'dataType': 'INTEGER'}], 'totalsForAllResults': {'ga:sessions': '86913', 'ga:transactions': '312'}, 'rows': [['20200114', '11965', '41'], ['20200115', '11052', '51'], ['20200116', '11396', '38'], ['20200117', '11097', '28'], ['20200118', '10490', '46'], ['20200119', '9829', '34'], ['20200120', '12280', '36'], ['20200121', '8804', '38']]}

def print_results(results):
    column_names = []
    for header in results.get('columnHeaders'):
        column_names.append(header.get('name'))
    data = results.get('rows')
    create_dataframe(data, column_names)

def create_dataframe(data, column_names):
    df = pd.DataFrame(data, columns = column_names)
    #prints the dataframe
    print(df)

print_results(results)

#output
    ga:date ga:sessions ga:transactions
0  20200114       11965              41
1  20200115       11052              51
2  20200116       11396              38
3  20200117       11097              28
4  20200118       10490              46
5  20200119        9829              34
6  20200120       12280              36
7  20200121        8804              38


...