Группировка данных по (широте, долготе) значениям для определения цвета для построения - PullRequest
0 голосов
/ 06 марта 2020

У меня есть набор данных с данными о широте и долготе, как показано ниже. Некоторые координаты широта-долгота одинаковы. Я хочу создать интерактивный точечный график боке, где:

  • желтые точки показывают точки данных координат широты и длины, которые имеют только одну собаку
  • красные точки для координат широты длиной с> 1 собака

Мои данные:

Type Latitude Longitude

Dog  41.9595 82.494997
Dog  41.4388 82.493585
Dog  41.4388 82.493585
Dog  41.3848 82.493739
Dog  41.3838 82.383883
Dog  41.3848 82.493739
Dog  41.3828 82.383838
Dog  41.2747 82.474484
Dog  41.3838 82.393949
Dog  41.3883 82.373848
Dog  41.3828 82.383838

Как мне это сделать в Python? Это мой код, и все точки одного цвета. Тем не менее, я хочу, чтобы дома с более чем одной собакой были другого цвета.

from bokeh.plotting import figure, show, output_notebook
from bokeh.tile_providers import CARTODBPOSITRON
p = figure(x_axis_type="mercator", y_axis_type="mercator")
p.add_tile(CARTODBPOSITRON)

p.circle(x=Pet_Data['Latitude'],
         y=Pet_Data['Longitude'], 
         line_color="#FF0000", 
         fill_color="#FF0000",
         fill_alpha=0.05)

output_notebook()
show(p)

1 Ответ

0 голосов
/ 08 марта 2020

Вот некоторый стартовый код, чтобы вы отклеились, но, пожалуйста, опубликуйте свой собственный код в вопросе. Каждый использует pandas пакет для чтения наборов данных:

import pandas as pd      

# Usually we do pd.read_csv('your.csv'), but since we don't have your CSV file here's code to make this example reproducible (MCVE)
from io import StringIO

df = """Type Latitude Longitude

Dog  41.9595 82.494997
Dog  41.4388 82.493585
Dog  41.4388 82.493585
Dog  41.3848 82.493739
Dog  41.3838 82.383883
Dog  41.3848 82.493739
Dog  41.3828 82.383838
Dog  41.2747 82.474484
Dog  41.3838 82.393949
Dog  41.3883 82.373848
Dog  41.3828 82.383838"""

df = pd.read_csv(StringIO(df), sep='\s+')

Теперь вы можете агрегировать ваш фрейм данных по (широте, долготе) и определить новый столбец color, который будет любым выражением, которое вы хотите, т.е. используйте красные точки для координат, которые имеют> 1 собаку (на том же широте / долготе, иначе желтый:

df.groupby(['Latitude','Longitude']).agg(lambda g: 'r' if g.size > 1 else 'y')

Это групповой элемент pandas, за которым следует агрегат, который использует лямбда-выражение.

Пожалуйста, прочтите их и поиграйте с df.groupby(['Latitude','Longitude']).agg(...) сами.

...