Использование подсказки bqplot с фреймом данных - PullRequest
0 голосов
/ 08 октября 2019

Использование виджета для отображения фрагментов из файла / файла данных csv и подачи в атрибут всплывающей подсказки bqplot

Я пытаюсь отобразить определенную информацию (статистику, такую ​​как возрастная группа, доход, уровни ожирения и т. Д.) Для каждогоштат в США, используя bqplot. Я могу построить карту США, используя примеры, представленные на bqplot github. Но конструктор всплывающей подсказки использует имена столбцов из файла json, который также используется для отображения карты. Я не знаю, как это переопределить, поэтому я решил использовать виджет (в идеале контейнерный виджет) для хранения данных, которые я хочу отображать для каждого состояния, и использовать метод on_hover (), предоставленный в bqplot.map;На самом деле, я только что изменил код по ссылке ниже:

Контейнер, так как подсказка не показывает содержимое

для отображения информации для определенного состояния


import bqplot
import pandas as pd
import ipywidgets as ipw
from IPython.display import display, clear_output

res = pd.read_csv('data_files/clean_data.csv')
df = pd.DataFrame(res)

## using values for only one state
df_temp = df[df['State'] == 'NY']

out = ipw.Output()
def hover_handler(self,Dataframe):
        out.clear_output()
        with out:

            display(ipw.HTML(df_temp.to_html()))


geo = AlbersUSA()
scale_s =  OrdinalColorScale(domain=['Obese', 'Not Obese'], colors=['Red', 'Green'])
st_green = dict(zip(df['State'], list(obesity_list)))

geo = AlbersUSA()
scale_s =  OrdinalColorScale(domain=['Obese', 'Not Obese'], colors=['Red', 'Green'])
map_args = {'color': st_green,
              'scales': {'projection': geo, 'color': scale_s}, 
              'colors': {'default_color': 'Black'}}   

s_map = plt.geo(map_data='USStatesMap', **map_args)
s_map.toolip = out  # I am pointing tooltip to the out object
s_map.on_hover(hover_handler)
s_map
  1. Я не могу понять, как изменить цвет в каждом состоянии на основе значений «Ожирение» и «Не ожирение»;

  2. Я использовал фрагментыкод из примера bqplot и ссылка выше на stackoverflow, но я не знаю, как изменить информацию при переходе в другое состояние;В настоящее время df_temp содержит значения только для одного состояния, и оно отображается везде, где я нахожу курсор на карте. Как я могу заставить виджет извлекать релевантные данные?

2.1 По сути, мне нужно, чтобы результаты отображались в табличном формате:

State:NY
Status: Not Obese
Age_group | Obese | Not_obese
<18       |  %    |  %
19-30     |  %    |  %

У меня есть данные для всех полей выше в виде столбцов в кадре данных для КАЖДОГОгосударство. Я новичок в ipywidgets и bqplot. Так что любая помощь будет принята с благодарностью.

Спасибо!

1 Ответ

0 голосов
/ 08 октября 2019

Для точки 2:

В вашем коде hover_handler необходимо захватить информацию, передаваемую в функцию, и использовать ее для фильтрации вашего основного кадра данных (df). Попробуйте изменить код hover_handler на приведенный ниже, и посмотрите, какая информация передается в функцию. Затем выясните, как использовать эту информацию для фильтрации вашего фрейма данных до соответствующего состояния.

    def hover_handler(map, hover_event):
            out.clear_output()
            with out:
                print(hover_event)
...