Функция джиттера по географическим координатам (широта / долгота) - PullRequest
0 голосов
/ 20 октября 2019

У меня следующая ситуация:

У меня есть набор данных, в котором каждая строка представляет студента.

Student_ID School_ID School_Lat  School_Long

  12221      14a      -22.7324    -47.6533

  12344      14a      -22.7324    -47.6533

Вы можете заметить, что если учащийся принадлежит к одной и той же школе, школагеокод будет таким же.

Я пытаюсь создать эффект дрожания, чтобы представить всех учеников на карте на основе идентификатора школы.

Пример:

Вместоиз множества точек в одну точку на карте, я хотел бы создать точки вокруг школы, чтобы представить учеников этой школы.

Jitter Effect

Функция, которая может быть применена с использованием панд groupby('School_ID'), которая создает это минимальное изменение координат.

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

Поскольку вы хотите отобразить результаты, вам нужны графические библиотеки. У Seaborn есть функция дрожания внутри.

У меня нет вашего полного набора данных, чтобы попробовать, но я думаю, что вы достигаете того, что вы хотите с этим кодом:

   import seaborn as sns
   import matplotlib.pyplot as plt

   sns.stripplot(x=df['School_Lat'], y=df['School_Long'], data=df, jitter=True)
   sns.despine()

enter image description here

Я добавил еще одну запись к вашим образцам данных, просто чтобы посмотреть, как они будут себя вести. Это синее пятно, если вам интересно.

1 голос
/ 20 октября 2019

Идеально подходит для построения уровня библиотеки.

Но если вы хотите сделать эффект джиттера вручную для карты, вам не нужно группировать по School_ID.

sigma, для нормального искажения необходимо выбрать экспериментально:

sigma = 0.1
df['School_Lat'] = df['School_Lat'].apply(lambda x: x + np.random.normal(x, sigma, 1))
df['School_Long'] = df['School_Long'].apply(lambda x: x + np.random.normal(x, sigma, 1))
...