Групповое распределение вероятностей

У меня есть датафрейм точек GPS. У меня был географический регион, который я разделил на сетку. Каждая ячейка сетки представлена ​​парой из двух столбцов (строка, столбец) в кадре данных. Точки 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 точек в секунду. 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-файл dataframe доступен в данной ссылке для большей ясности данных. https://drive.google.com/open?id=1R_BBL00G_Dlo-6yrovYJp5zEYLwlMPi9

1 ответ

Если я не ошибаюсь, вы ищете более элегантный способ зацикливаться на каждом объекте группы и генерировать двумерное распределение вероятностей для каждого?

Похоже, вы должны изучить эту документацию панд (более конкретно apply функция).

Вы можете просто применить визуализацию к каждой группе, такую ​​как эта визуализация SNS KDE, а затем объединить отдельные графики в сетку, подобную той, которую вы предоставили. С небольшим ax магия, вы можете построить сетку для каждого типа транспорта. Я думаю, что это лучшие инструменты под рукой для использования. Я оставлю вам логику.

Другие вопросы по тегам