使用chunksize时缺失记录 - Pandas与Google Analytics API集成

3 投票
1 回答
909 浏览
提问于 2025-04-17 14:45

我正在通过pandas和Google Analytics API来自动生成一些报告。当我请求多个维度的数据时,得到的记录集数量远远超过了pandas默认的1万条记录限制。

为了绕过这个限制,我传入了一个很大的数字作为max_results参数,并指定了一个chunksize。我打算遍历这个生成器,创建一个大的DataFrame,这样我就可以在上面进行所有的操作。

from pandas.io import ga
import pandas as pd

max_results = 1000000
chunks = ga.read_ga(metrics=["visits"],
                    dimensions=["date", "browser", "browserVersion",
                    "operatingSystem", "operatingSystemVersion",
                    "isMobile", "mobileDeviceInfo"],
                    start_date="2012-12-01",
                    end_date="2012-12-31",
                    max_results=max_results,
                    chunksize=5000)

stats = pd.concat([chunk for chunk in chunks])
stats.groupby(level="date").sum()

不过,很明显有些记录没有被提取出来,因为每天的访问总数和Google Analytics的数据不一致。

当我只选择几个维度时,就不会遇到这个问题。例如……

test = ga.read_ga(metrics=["visits"], dimensions=["date"],
            start_date="2012-12-01", end_date="2012-12-31")

test.groupby(level="date").sum()

……生成的数字和Google Analytics是一致的。

提前感谢你的帮助。

1 个回答

1

总共的10000行数据是谷歌分析API设定的一个限制,具体可以查看这个链接:https://developers.google.com/analytics/devguides/reporting/core/v3/reference#maxResults

这段代码利用了start_index来发送多个请求,从而绕过这个限制。我在pandas上标记了这个问题:https://github.com/pydata/pandas/issues/2805。我会在有时间的时候去看看。如果你能提供一些你期望的数据和通过pandas得到的数据对比,那会很有帮助。

作为一种解决方法,我建议你可以逐天进行循环,然后每天发送一次请求。

撰写回答