Построение графика в сети x из массива numpy - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть DataFrame в pandas с информацией о местоположении людей во времени. Это около 300+ миллионов строк.

Вот пример, где каждому Name присваивается уникальный index по group.by и sorted по «Имя» и «Год»:

import pandas as pd
inp = [{'Name': 'John', 'Year':2018, 'Address':'Beverly hills'}, {'Name': 'John','Year':2018, 'Address':'Beverly hills'}, {'Name': 'John', 'Year':2019, 'Address':'Beverly hills'}, {'Name': 'John', 'Year':2019, 'Address':'Orange county'}, {'Name': 'John', 'Year':2019, 'Address':'NewYork'}, {'Name': 'Steve', 'Year':2018, 'Address':'Canada'}, {'Name': 'Steve', 'Year':2019, 'Address':'Canada'}, {'Name': 'Steve', 'Year':2019, 'Address':'Canada'}, {'Name': 'Steve', 'Year':2020, 'Address':'California'}, {'Name': 'Steve', 'Year':2020, 'Address':'Canada'}, {'Name': 'John', 'Year':2020, 'Address':'Canada'}, {'Name': 'John', 'Year':2021, 'Address':'Canada'}, {'Name': 'John', 'Year':2021, 'Address':'Beverly hills'}, {'Name': 'Steve', 'Year':2021, 'Address':'California'}, {'Name': 'Steve', 'Year':2022, 'Address':'California'}, {'Name': 'Steve', 'Year':2018, 'Address':'NewYork'}, {'Name': 'Steve', 'Year':2018, 'Address':'California'}, {'Name': 'Steve', 'Year':2022, 'Address':'NewYork'}]
df = pd.DataFrame(inp)
df['Name_Grouped_Index'] = df.groupby(['Name']).ngroup()
df = df.sort_values(['Name', 'Year'], ascending=[False, True])
print (df)

     Name  Year        Address  Name_Grouped_Index
5   Steve  2018         Canada                     1
15  Steve  2018        NewYork                     1
16  Steve  2018     California                     1
6   Steve  2019         Canada                     1
7   Steve  2019         Canada                     1
8   Steve  2020     California                     1
9   Steve  2020         Canada                     1
13  Steve  2021     California                     1
14  Steve  2022     California                     1
17  Steve  2022        NewYork                     1
0    John  2018  Beverly hills                     0
1    John  2018  Beverly hills                     0
2    John  2019  Beverly hills                     0
3    John  2019  Orange county                     0
4    John  2019        NewYork                     0
10   John  2020         Canada                     0
11   John  2021         Canada                     0
12   John  2021  Beverly hills                     0

Благодаря @MarcusRenshaw я теперь могу получить матрицу сетевого графа (матрицу смежности), чтобы увидеть сумму изменений между адресами. Другими словами, например, сколько раз люди переезжали из «Канады» в «Калифорнию». Решение для этого можно найти ЗДЕСЬ .

Вот массив NumPy, который я получаю как «Сетевая матрица» из решения выше:

['Canada', 'NewYork', 'California', 'Beverly hills', 'Orange county']
[[2 1 2 1 0]
 [1 0 1 0 0]
 [2 1 1 0 0]
 [0 0 0 2 1]
 [0 1 0 0 0]]

Я хочу, чтобы plot Сетевая матрица NumPy Массив со следующими характеристиками:

  • Направленный граф сети со стрелками (направление) между узлами.
  • Узел может иметь ребро, так как у меня есть такие пары, как "Канада-Канада", которые важно показать.
  • Размер узла представляет номер входящего ребра / ссылки. Чем больше размер узла, тем больше ссылок.
  • ребро / толщина ссылки представляет собой итерацию изменения между двумя узлами (местоположение). Более толстый край означает более высокие объемы изменения местоположения между узлами.

enter image description here

...