【发布时间】:2017-12-13 08:29:04
【问题描述】:
我正在研究 Adobe Analytics 报告/数据仓库 API,以及如何将这些数据处理成行和列(我正在使用 python 和 pandas 来解决这个问题)。只要只使用一个维度,这一切都很好,但是当查询多个维度时,分解的想法就会发挥作用。
例如,当我使用二维时,数据(JSON 格式)看起来像这样:
{
"report":{
"data":[
{
"name":"June 13,2017",
"breakdown":[
{
"name":"nl",
"breakdown":[
{
"name":"not logged in",
"counts":[
"10",
"12"
]
},
{
"name":"logged in",
"counts":[
"30",
"2"
]
}
]
}, ... etc.
详细来说,计数代表一组指标,每个细分代表一个维度(数字和名称是虚构的)。
我想要在这里做的是建立我最终可以在行和列中链接在一起的数据集,因此示例的第一行将是 ("June 13,2017","nl","not登录",10,12)。
在示例情况下,我已经可以使用以下代码做到这一点:
for period in dataObj['report']['data']:
for firstbreakdown in period['breakdown']:
for secondbreakdown in firstbreakdown['breakdown']:
print(period['name'], firstbreakdown['name'], secondbreakdown['name'], secondbreakdown['counts'])
在这里处理计数不是问题,因为我发现我可以很容易地用 pandas 做到这一点。但棘手的部分和我的实际问题出现了:JSON 示例中的细分数量由查询的维度数量决定。
如何自动根据查询的维度数,进行足够多的循环,以连续获取所有维度值和计数?
我更喜欢优雅且始终有效的解决方案,而不是 if else 语句。
【问题讨论】:
-
你想避免递归吗? IE。维度的数量是否会变得非常重要,比如数百甚至更多?
-
是的,递归是我想到的第一个想法——这个答案可以提供灵感:stackoverflow.com/questions/21028979/…
-
我认为这不是问题,因为帐户中实际上不超过 100-150 个维度,而且您永远不会在一份报告中使用所有维度