- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在与这个逻辑作斗争。我正在以这种格式从谷歌分析中获取每个用户每个站点的数据。 (因此,这些是一位用户在该网站上执行的所有事件)我无法更改接收数据的格式。
问题:我正在对所有用户运行一个循环,并为每个用户获取此输出。我想将这些数据放入数据框中以便以后使用。我遇到的问题是 'activities':[{.....},{......}] 部分,我无法弄清楚以有意义的方式存储所有这些数据。
{'sampleRate': 1,
'sessions': [{'activities': [{'activityTime': '2020-01-08T16:00:44.399101Z',
'activityType': 'PAGEVIEW',
'campaign': '(not set)',
'channelGrouping': 'Direct',
'customDimension': [{'index': 1}],
'hostname': 'company.domain.com',
'keyword': '(not set)',
'landingPagePath': '/login',
'medium': '(none)',
'pageview': {'pagePath': '/thepath',
'pageTitle': 'thecurrentwebpage'},
'source': '(direct)'},
{'activityTime': '2020-01-08T15:58:43.077293Z',
'activityType': 'PAGEVIEW',
'campaign': '(not set)',
'channelGrouping': 'Direct',
'customDimension': [{'index': 1}],
'hostname': 'company.domain.com',
'keyword': '(not set)',
'landingPagePath': '/login',
'medium': '(none)',
'pageview': {'pagePath': '/theotherpath',
'pageTitle': 'thecurrentwebpage'},
'source': '(direct)'}],
'dataSource': 'web',
'deviceCategory': 'desktop',
'platform': 'Windows',
'sessionDate': '2020-01-08',
'sessionId': '1578491x03d'},
{'activities': [{'activityTime': '2019-12-28T21:58:48.993944Z',
'activityType': 'PAGEVIEW',
'campaign': '(not set)',.....
预期输出:
如果图片中存在一些逻辑错误,我很乐意更改我所拥有的。我只需要数据即可工作。
PS:我需要在 LucidChart 中使用 SQL 和 ERD,我以前从未以这种格式操作数据。任何帮助,将数据(其结构类似于上面的示例)放入数据帧中。编辑:
两种不同类型事件的示例(事件始终分类为“页面浏览”或“事件”):
{'activityTime':
# Pageview activity
'2020-01-08T15:48:38.012671Z',
'activityType': 'PAGEVIEW',
'campaign': '(not set)',
'channelGrouping': 'Direct',
'customDimension': [{'index': 1}],
'hostname': 'company.domain.com',
'keyword': '(not set)',
'landingPagePath': '/login',
'medium': '(none)',
'pageview': {'pagePath': '/login',
'pageTitle': 'titleofthepage'},
'source': '(direct)'},
# Event activity
{'activityTime': '2020-01-08T15:48:37.915105Z',
'activityType': 'EVENT',
'campaign': '(not set)',
'channelGrouping': 'Direct',
'customDimension': [{'index': 1}],
'event': {'eventAction': 'Successfully Logged '
'In',
'eventCategory': 'Auth',
'eventCount': '1',
'eventLabel': '(not set)'},
'hostname': 'company.domain.com',
'keyword': '(not set)',
'landingPagePath': '/login',
'medium': '(none)',
'source': '(direct)'}]
最佳答案
例如,您可以这样做:
import pandas as pd
import json
str = """{"sampleRate": 1,
"sessions": [{"activities": [{"activityTime": "2020-01-08T16:00:44.399101Z",
"activityType": "PAGEVIEW",
"campaign": "(not set)",
"channelGrouping": "Direct",
"customDimension": [{"index": 1}],
"hostname": "company.domain.com",
"keyword": "(not set)",
"landingPagePath": "/login",
"medium": "(none)",
"pageview": {"pagePath": "/thepath",
"pageTitle": "thecurrentwebpage"},
"source": "(direct)"},
{"activityTime": "2020-01-08T15:48:37.915105Z",
"activityType": "EVENT",
"campaign": "(not set)",
"channelGrouping": "Direct",
"customDimension": [{"index": 1}],
"event": {"eventAction": "Successfully Logged In",
"eventCategory": "Auth",
"eventCount": "1",
"eventLabel": "(not set)"},
"hostname": "company.domain.com",
"keyword": "(not set)",
"landingPagePath": "/login",
"medium": "(none)",
"source": "(direct)"}],
"dataSource": "web",
"deviceCategory": "desktop",
"platform": "Windows",
"sessionDate": "2020-01-08",
"sessionId": "1578491x03d"}]}"""
data = json.loads(str)
session_keys = "sessionId,dataSource,deviceCategory,platform,sessionDate,DB_id".split(",")
event_keys = "activityTime,eventCategory,eventCount,eventLabel,eventAction".split(",")
pageview_keys = "activityTime,pageTitle,pagePath".split(",")
sessions = {k:[] for k in session_keys}
events = {k:[] for k in event_keys}
pageviews = {k:[] for k in pageview_keys}
activities = {"sessionId":[],"activityTime":[]}
for session in data["sessions"]:
for easy_key in session_keys[:5]:
sessions[easy_key] += [session[easy_key]]
for activity in session["activities"]:
activity_time = activity["activityTime"]
activities["sessionId"] += [session["sessionId"]]
activities["activityTime"] += [activity_time]
if activity["activityType"] == "PAGEVIEW":
pageviews["activityTime"] += [activity_time]
pageviews["pageTitle"] += [activity["pageview"]["pageTitle"]]
pageviews["pagePath"] += [activity["pageview"]["pagePath"]]
elif activity["activityType"] == "EVENT":
events["activityTime"] += [activity_time]
events["eventAction"] += [activity["event"]["eventAction"]]
events["eventCategory"] += [activity["event"]["eventCategory"]]
events["eventCount"] += [activity["event"]["eventCount"]]
events["eventLabel"] += [activity["event"]["eventLabel"]]
else:
print("Unknown Activity: {}".format(activity["activityType"]))
sessions["DB_id"] += [0]
df_session = pd.DataFrame.from_dict(sessions)
df_session.set_index('sessionId', inplace=True)
df_event = pd.DataFrame.from_dict(events)
df_event.set_index('activityTime', inplace=True)
df_pageview = pd.DataFrame.from_dict(pageviews)
df_pageview.set_index('activityTime', inplace=True)
df_activities = pd.DataFrame.from_dict(activities)
#df_session:
dataSource deviceCategory platform sessionDate DB_id
sessionId
1578491x03d web desktop Windows 2020-01-08 0
#df_activities:
sessionId activityTime
0 1578491x03d 2020-01-08T16:00:44.399101Z
1 1578491x03d 2020-01-08T15:48:37.915105Z
#df_event:
eventCategory eventCount eventLabel eventAction
activityTime
2020-01-08T15:48:37.915105Z Auth 1 (not set) Successfully Logged In
#df_pageview:
pageTitle pagePath
activityTime
2020-01-08T16:00:44.399101Z thecurrentwebpage /thepath
#As example for a join, I only want the event data
df_sa = df_activities.join(df_session, on="sessionId").join(df_event,on="activityTime",how="right")
print(df_sa)
sessionId activityTime dataSource deviceCategory platform sessionDate DB_id eventCategory eventCount eventLabel eventAction
1 1578491x03d 2020-01-08T15:48:37.915105Z web desktop Windows 2020-01-08 0 Auth 1 (not set) Successfully Logged In
与您上面指定的相同,但有 2 处更改:
表 session 不再有列事件。
表 Activity 有一个附加列 sessionId。
如何在 pandas Dataframe 中执行 SQL,您可以在网上查找,这里可能有很多内容需要介绍。例如,请参见此处:Executing an SQL query over a pandas dataset
一些例子:(但如果你想要具体的东西,最后你必须自己弄清楚,我在这里不开设 SQL 类(class))
df_session
df_event
和df_pageview
df_session
withdf_activities
然后加入 df_event
和 df_pageview
没有比这更容易的了。数据框采用“正确”的数据库格式。
session 示例:
for index, row in df_sessions.iterrows():
# for event and pageview the index would be activityTime
# the df activities don't have a specific index
sessionId = index
dataSource = row['dataSource']
deviceCategory = row['deviceCategory']
platform = row['platform']
sessionDate = row['sessionDate']
DB_id = row['DB_id']
# function to save a row in a SQL DB basically:
# INSERT INTO session (sessionId,dataSource,deviceCategory,platform,sessionDate,DB_id) VALUES(x,x,x,x,x,x)
save_to_sql(sessionId,dataSource,deviceCategory,platform,sessionDate,DB_id)
save_to_sql
是您自己的实现,具体取决于您使用的数据库。向您解释这一点不适合这个问题。
DB_id
不知道该值的来源。我把它设置为0。关于python - Pandas 将字典列表(GA 输出)转换为有意义的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59879192/
我正在使用 OUTFILE 命令,但由于权限问题和安全风险,我想将 shell 的输出转储到文件中,但出现了一些错误。我试过的 #This is a simple shell to connect t
我刚刚开始学习 Java,我想克服在尝试为这个“问题”创建 Java 程序时出现的障碍。这是我必须创建一个程序来解决的问题: Tandy 喜欢分发糖果,但只有 n 颗糖果。对于她给第 i 个糖果的人,
你好,我想知道我是否可以得到一些帮助来解决我在 C++ 中打印出 vector 内容的问题 我试图以特定顺序在一个或两个函数调用中输出一个类的所有变量。但是我在遍历 vector 时收到一个奇怪的错误
我正在将 intellij (2019.1.1) 用于 java gradle (5.4.1) 项目,并使用 lombok (1.18.6) 来自动生成代码。 Intellij 将生成的源放在 out
编辑:在与 guest271314 交流后,我意识到问题的措辞(在我的问题正文中)可能具有误导性。我保留了旧版本并更好地改写了新版本 背景: 从远程服务器获取 JSON 时,响应 header 包含一
我的问题可能有点令人困惑。我遇到的问题是我正在使用来自 Java 的 StoredProcedureCall 调用过程,例如: StoredProcedureCall call = new Store
在我使用的一些IDL中,我注意到在方法中标记返回值有2个约定-[in, out]和[out, retval]。 当存在多个返回值时,似乎使用了[in, out],例如: HRESULT MyMetho
当我查看 gar -h 的帮助输出时,它告诉我: [...] gar: supported targets: elf64-x86-64 elf32-i386 a.out-i386-linux [...
我想循环遍历一个列表,并以 HTML 格式打印其中的一部分,以代码格式打印其中的一部分。所以更准确地说:我想产生与这相同的输出 1 is a great number 2 is a great
我有下面的tekton管道,并尝试在Google Cloud上运行。集群角色绑定。集群角色。该服务帐户具有以下权限。。例外。不确定需要为服务帐户设置什么权限。
当尝试从 make 过滤非常长的输出以获取特定警告或错误消息时,第一个想法是这样的: $ make | grep -i 'warning: someone set up us the bomb' 然而
我正在创建一个抽象工具类,该类对另一组外部类(不受我控制)进行操作。外部类在某些接口(interface)点概念上相似,但访问它们相似属性的语法不同。它们还具有不同的语法来应用工具操作的结果。我创建了
这个问题已经有答案了: What do numbers starting with 0 mean in python? (9 个回答) 已关闭 7 年前。 在我的代码中使用按位与运算符 (&) 时,我
我写了这段代码来解析输入文件中的行输入格式:电影 ID 可以有多个条目,所以我们应该计算平均值输出:**没有重复(这是问题所在) import re f = open("ratings2.txt",
我需要处理超过 1000 万个光谱数据集。数据结构如下:大约有 1000 个 .fits(.fits 是某种数据存储格式)文件,每个文件包含大约 600-1000 个光谱,其中每个光谱中有大约 450
我编写了一个简单的 C 程序,它读取一个文件并生成一个包含每个单词及其出现频率的表格。 该程序有效,我已经能够在 Linux 上运行的终端中获得显示的输出,但是,我不确定如何获得生成的显示以生成包含词
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
1.普通的输出: print(str)#str是任意一个字符串,数字··· 2.格式化输出: ?
我无法让 logstash 正常工作。 Basic logstash Example作品。但后来我与 Advanced Pipeline Example 作斗争.也许这也可能是 Elasticsear
这是我想要做的: 我想让用户给我的程序一些声音数据(通过麦克风输入),然后保持 250 毫秒,然后通过扬声器输出。 我已经使用 Java Sound API 做到了这一点。问题是它有点慢。从发出声音到
我是一名优秀的程序员,十分优秀!