我使用Facebook Python SDK查询Insights端点并且很难做出响应我使用Python和随后的pandas。我做了以下电话:
account = AdAccount('act_id')
params = {
'fields': [Insights.Field.impressions,Insights.Field.clicks,Insights.Field.actions,Insights.Field.spend],
'breakdowns': [Insights.Breakdown.hourly_stats_aggregated_by_advertiser_time_zone],
'time_range': {
'since': 'start',
'until': 'end',
},
'action_attribution_windows': ['7d_click'],
}
result = account.get_insights(params=params)
print (result)
返回如下数据:
[<Insights> {
"actions": [
{
"7d_click": 600,
"action_type": "custom_event_xyz",
"value": 50
},
{
"7d_click": 600,
....
}
],
"clicks": 1500,
"date_start": "start",
"date_stop": "end",
"hourly_stats_aggregated_by_advertiser_time_zone": "00:00:00 - 00:59:59",
"impressions": "60000",
"spend": 60
}, <Insights> {
....
]
在将不包含actionsdata的数据放入pandas DataFrame时,我无法正确地压缩操作数据,以便聚合级别一致(即&#34; actions&#34;键作为列标题)。在线检查并在Stackoverflow上进行检查,使用python加载json并相应地处理它,然后用pandas读取它们都是不起作用的选项。
总结我不知道如何优雅地挖掘响应的更深层嵌套部分,并轻松地使内容与其余部分兼容。
答案 0 :(得分:4)
你刚刚遇到了和我一样的问题。 get_insights返回数据就像json,但事实并非如此。你可以知道它是什么类型只使用类型(结果)。这是facebookads.objects.EdgeIterator。您可以使用result = [x for x in result]来更改它的类型,现在'result'的类型是列表!!!然后你可以使用pandas做你想做的任何事情,pandas.DataFrame(结果)。
答案 1 :(得分:1)
您应该使用append将所有信息保存在一个变量中:
results = []
for item in report:
data = dict(item)
results.append(data)
print(results)
答案 2 :(得分:1)
尽管这个问题专门询问有关Pandas DataFrame的问题,但是当您尝试在PySpark / DataBricks DataFrame中使用Facebook API数据时,您可能已经在Google搜索中找到了这个问题。
对于PySpark,您只需要执行1个步骤:您的列表需要包含PySpark Row
,而不是常规python dict
。
这是一个便捷功能,可以将FB API响应转换为Spark-Friendly形式。
from pyspark.sql import Row
def facebook_result_to_rows(facebook_api_response):
return (Row(**dict(x)) for x in facebook_api_response)
以及我如何使用它的示例:
insights = fb_ad_account.get_insights()
# insights is a python "list" containing many "AdsInsights" objects whose data we want. try print(insights) to see what I mean.
# Those objects are instances of the class AdsInsights found in facebook_business.adobjects.adsinsights. Other API calls have similar response objects.
# Convert said objects into something PySpark can actually work with
frame_data = facebook_result_to_rows(insights)
# Make a dataframe from our transformed data
pyspark_dataframe = spark.createDataFrame(frame_data)
现在您有了一个pyspark_dataframe
,您可以使用它来处理所有这些本机pyspark事情,例如.saveAsTable()
,unionByName()
,加入,过滤等。
答案 3 :(得分:0)
您还可以将其转换为字典项目。
for item in result:
data = dict(item)
print(data)
现在,您可以像键值对一样解析dict对象,甚至可以转换为json。
答案 4 :(得分:0)
假设您只需要点击(或支出)数据,您也可以使用 windsor.ai 来完成此操作,使用起来更简单一些。您只需将您的 facebook 帐户连接到 windsor.ai,然后使用他们的 Python SDK (pywindsorai) 将数据加载到 Pandas 中。
s///
查看此博客文章以了解有关如何将数据加载到 Pandas 的更多信息:https://www.windsor.ai/multichannel-marketing-data-analysis-via-python-using-pywindsorai/