【问题标题】:Google Analytics API into CSV将 Google Analytics API 转换为 CSV
【发布时间】:2017-09-14 14:51:28
【问题描述】:

我正在尝试为我的 Google Analytics(分析)帐户构建一个 API,以将数据导出为 CSV。我的身份验证代码正常工作,但我现在正在努力以我想要的格式打印数据。

我暂时只拉维度国家、维度城市、度量会话。 (但是,当我开始工作时,这些会改变。)现在,它会打印:

Date Range(0)
ga:sessions: 2
ga:country:United States
ga:city:Los Angeles
...

但是,我想把它放在一行中:

date Range   sessions    country     city
0            2           USA         Los Angeles
...

我需要使用 Python 中的哪些代码?下面是我所拥有的。

def initialize_analyticsreporting():
  parser = argparse.ArgumentParser(
      formatter_class=argparse.RawDescriptionHelpFormatter,
      parents=[tools.argparser])
  flags = parser.parse_args([])

http = credentials.authorize(httplib2.Http())
service = build('analytics', 'v4', http=http, discoveryServiceUrl=('https://analyticsreporting.googleapis.com/$discovery/rest'))


def get_report(service):
    return service.reports().batchGet(
        body={
            'reportRequests':[
                {
                   "viewId": "ga:52783868",
                   "dimensions": [{
                         "name": "ga:country"},
                        {"name": "ga:city"}],

                    "metrics": [{
                         "expression": "ga:sessions"}],
                     "dateRanges": [{
                         "startDate": "2017-04-10",
                         "endDate": "2017-04-12"}]
                }
            ]
        }
    ).execute()

countries = []
cities = []
val = []

def print_reponse(response):

    for report in response.get('reports', []):
        columnHeader = report.get('columnHeader',{})
        dimensionHeaders=columnHeader.get('columnHeader',[])
        metricHeaders = columnHeader.get('metricHeader',{}).get('metricHeaderEntries',[])
        rows = report.get('data',{}).get('rows',[])

        for row in rows:
            dimensions = row.get('dimensions',[])
            dateRangeValues=row.get('metrics',[])

            for header, dimension in zip(dimensionHeaders,dimensions):
                print(header+':'+dimension)

            for i, values in enumerate(dateRangeValues):           
                for metricHeader, value in zip(metricHeaders, values.get('values')):
                    print(metricHeader.get('name')+':'+value)

def main():
    analytics = initialize_analyticsreporting()
    response = get_report(service)
    print_reponse(response)



if __name__ == '__main__':
    main()

【问题讨论】:

  • 我建议你使用this library。将其放入pandas 数据帧中的一个,您可以执行任何类型的操作,写入csv 将类似于to_csv。干杯。
  • @Irnzcig 你能用 Java 帮忙吗

标签: python csv google-analytics google-api-python-client


【解决方案1】:

按照 lrnzcig 的建议,我们可以用 pandas 解析数据,然后导出到 csv 文件。

首先,导入pandasjson_normalize

import pandas as pd
from pandas.io.json import json_normalize

使用该函数解析数据

def parse_data(response):

  reports = response['reports'][0]
  columnHeader = reports['columnHeader']['dimensions']
  metricHeader = reports['columnHeader']['metricHeader']['metricHeaderEntries']

  columns = columnHeader
  for metric in metricHeader:
    columns.append(metric['name'])

  data = json_normalize(reports['data']['rows'])
  data_dimensions = pd.DataFrame(data['dimensions'].tolist())
  data_metrics = pd.DataFrame(data['metrics'].tolist())
  data_metrics = data_metrics.applymap(lambda x: x['values'])
  data_metrics = pd.DataFrame(data_metrics[0].tolist())
  result = pd.concat([data_dimensions, data_metrics], axis=1, ignore_index=True)

  return result

结果看起来像...

      ga:country         ga:city    ga:sessions
0      (not set)       (not set)             64
1      Argentina       (not set)              1
2      Australia        Adelaide              3
3      Australia        Brisbane              9
...

最后调用to_csv函数将数据保存为csv文件

result.to_csv('result.csv')

【讨论】:

  • 你能推荐一些关于 Java 的东西吗? @杰里
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
相关资源
最近更新 更多