python - 使用熊猫数据的概率密度函数
问题描述
鉴于先前事件的存在,我想对事件发生的概率进行建模。
为了给你更多的上下文,我计划按anonymous_id 对我的数据进行分组,按时间戳(ts)对分组数据集的值进行排序,并计算该人经历的源序列(utm_source)的概率。该人由唯一的anonymous_id 表示。因此,期望的最终目标是来自 Facebook 来源的人然后来自 Google 来源等的概率
有人告诉我,像 sci.py gaussian_kde 这样的包将对此有用。然而,从玩它,这需要数字输入。
test_sample = test_sample.groupby('anonymous_id').apply(lambda x: x.sort_values(['ts'])).reset_index(drop=True)
并且不确定接下来要尝试什么。我也试过这个,但我认为它没有多大意义:
stats.gaussian_kde(test_two['utm_source'])
这是我的数据示例
{'Unnamed: 0': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9},
'anonymous_id': {0: '0000f8ea-3aa6-4423-9247-1d9580d378e1',
1: '00015d49-2cd8-41b1-bbe7-6aedbefdb098',
2: '0002226e-26a4-4f55-9578-2eff2999de7e',
3: '00022b83-240e-4ef9-aaad-ac84064bb902',
4: '00022b83-240e-4ef9-aaad-ac84064bb902',
5: '00022b83-240e-4ef9-aaad-ac84064bb902',
6: '00022b83-240e-4ef9-aaad-ac84064bb902',
7: '00022b83-240e-4ef9-aaad-ac84064bb902',
8: '00022b83-240e-4ef9-aaad-ac84064bb902',
9: '0002ed69-4aff-434d-a626-fc9b20ef1b02'},
'ts': {0: '2018-04-11 06:59:20.206000',
1: '2019-05-18 05:59:11.874000',
2: '2018-09-10 18:19:25.260000',
3: '2017-10-11 08:20:18.092000',
4: '2017-10-11 08:20:31.466000',
5: '2017-10-11 08:20:37.345000',
6: '2017-10-11 08:21:01.322000',
7: '2017-10-11 08:21:14.145000',
8: '2017-10-11 08:23:47.526000',
9: '2019-06-12 10:42:50.401000'},
'utm_source': {0: nan,
1: 'facebook',
2: 'facebook',
3: 'google',
4: nan,
5: 'facebook',
6: 'google',
7: 'adwords',
8: 'youtube',
9: nan},
'rank': {0: 1, 1: 1, 2: 1, 3: 1, 4: 2, 5: 3, 6: 4, 7: 5, 8: 6, 9: 1}}
注意:我将数据框转换为字典
解决方案
这是您可以做到的一种方法(如果我理解正确的话):
from itertools import chain
from collections import Counter
groups = (df
.sort_values(by='ts')
.dropna()
.groupby('anonymous_id').utm_source
.agg(list)
.reset_index()
)
groups['transitions'] = groups.utm_source.apply(lambda x: list(zip(x,x[1:])))
all_transitions = Counter(chain(*groups.transitions.tolist()))
这给了你(在你的示例数据上):
In [42]: all_transitions
Out[42]:
Counter({('google', 'facebook'): 1,
('facebook', 'google'): 1,
('google', 'adwords'): 1,
('adwords', 'youtube'): 1})
还是您在寻找不同的东西?
推荐阅读
- javascript - 关于 Canvas 上的 JavaScript 的查询
- angular6 - 如何在 Angular 6 自定义元素中添加第三方脚本
- xml - 如何每 30 秒自动将文件上传到我的 FTP?
- python - 如何在 Zeppelin 中的 Python Pyspark 中打印粗体 - 以及在 Zeppelin 中使用 python-print-function 的其他格式
- python - Python将列表复制到新列表?
- php - Laravel has and orHas not working with where
- html - 如何删除下拉菜单中生成的箭头 Bootstrap 3.3.7
- android - Android Studio 虚拟设备问题
- scala - 猫效应和异步 IO 细节
- reactjs - 如何在没有包装器 div 的情况下使用 dangerouslySetInnerHTML?