1

我有一个 gps 点的数据框 df。我有划分为网格的地理区域。每个网格单元由数据框中的一对两列(行、列)表示。GPS 点标有其交通方式。我想通过其运输方式计算每个网格单元的概率分布。(有五种交通方式,即步行、自行车、汽车、火车、地铁)。

Row Col   P(Walk)        P(Bike)       P(Car)         P(Train)       P(Subway)
 8   8  Freq(walk)/n  Freq(bike)/n   Freq(car)/n    Freq(train)/n   Freq(subway)/n
 8   9  Freq(walk)/n  Freq(bike)/n   Freq(car)/n    Freq(train)/n   Freq(subway)/n
 8  10  Freq(walk)/n  Freq(bike)/n   Freq(car)/n    Freq(train)/n   Freq(subway)/n

例如,第 8 行的网格单元,第 8 列包含 638 个 gps 点。598 个步行点和 40 个地铁点那么这个特定网格单元的每种交通方式的概率变为

Row Col   P(Walk)        P(Bike)       P(Car)         P(Train)       P(Subway)
 8   8    598/638        0/638         0/638           0/638          40/638
 8   9      ...           ...           ...             ...            ...
 8   10     ...           ...           ...             ...            ...
... ...     ...           ...           ...             ...            ...

'''

grp = df.groupby(['row','col','Transportation_Mode'])

一种方法是使用 for 循环逐个迭代每个组以获取每种运输方式的频率。但我认为他们应该是更容易或更可推广的方式 或库,只需几行就可以解决这个问题。

附上地理区域的图像,以便更好地理解将每个地理区域划分为由行和列表示的网格单元的问题。每个网格单元包含多个标有其运输方式的 GPS 点。

在此处输入图像描述

数据框的 csv 文件可在给定的链接中获得,以使数据更加清晰。 https://drive.google.com/open?id=1R_BBL00G_Dlo-6yrovYJp5zEYLwlMPi9

4

1 回答 1

1

如果我没记错的话,您正在寻找一种更优雅的方式来遍历每个组对象并为每个对象生成一个二维概率分布?

听起来你应该查看这个 pandas 文档(更具体地说是apply函数)。

您可以简单地将可视化应用于每个组,例如此SNS KDE 可视化,然后将各个图重新连接到您提供的网格中。使用一点ax魔法,您可以为每种运输类型构建一个网格。我认为这些是手头最好用的工具。我把逻辑留给你。

于 2018-08-13T15:31:40.280 回答