Карта мира + слайдер в Альтаире (Python)Python

Программы на Python
Ответить
Anonymous
 Карта мира + слайдер в Альтаире (Python)

Сообщение Anonymous »

Я хотел бы построить интерактивную диаграмму с картой мира с подтвержденными случаями COVID-19 по странам и ползунком даты, используя библиотеку Altair на Python.
Формат данных:

Код: Выделить всё

"country_region","date","confirmed_cases"
"Afghanistan",2020-01-22,0
"Afghanistan",2020-01-23,0
"Afghanistan",2020-01-24,0
"Afghanistan",2020-01-25,0
Мне удалось построить неинтерактивную диаграмму, но не могу настроить слайдер. Моя диаграмма теперь выглядит так:
Изображение

Я хочу добавить ползунок к выбранной дате, но не могу его правильно настроить.
Я использую метод Transform_lookup, чтобы добавлять цвета странам в соответствии с данными (подтвержденные случаи/население) и Transform_filter насколько я понимаю следует добавить для фильтрации данных при изменении положения ползунка пользователем. Но это не работает. Я предполагаю, что в Transform_lookup всегда используются исходные данные и фильтрация там не работает. Я не нашел примеров или документации по одновременному использованию Transform_lookup и слайдера.
Был бы благодарен услышать любые идеи, которые могут помочь мне решить эту проблему.
Был бы благодарен услышать любые идеи, которые могут помочь мне с этой проблемой.
Был бы благодарен услышать любые идеи, которые могут помочь мне с этой проблемой.
p>
Код:

Код: Выделить всё

import requests
import json

import pandas as pd

import altair as alt
from vega_datasets import data
from altair import datum

df = pd.read_csv('https://raw.githubusercontent.com/MariaKokshaikina/any-data/main/covid19_global_confirmed_cases%20(1).csv')

country_info = requests.get(
'https://raw.githubusercontent.com/MariaKokshaikina/any-data/main/country_info.json'
).json()

df = df[df['country_region'].isin(country_info)]
df = df.sort_values('date', ascending=True)
df = df.tail(5000)

def timestamp(t):
return pd.to_datetime(t).timestamp() * 1000

df['id'] = df['country_region'].map(lambda x: country_info[x]['numericCode'])
df['rate'] = df['confirmed_cases'] / df['country_region'].map(lambda x: country_info[x]['population'])
df['timestamp'] = df['date'].map(timestamp)

countries = alt.topo_feature(data.world_110m.url, 'countries')

slider = alt.binding_range(
step=24 * 60 * 60 * 1000,
min=df['timestamp'].min(),
max=df['timestamp'].max()
)

select_date = alt.selection_single(
name="slider",
fields=['timestamp'],
bind=slider,
)

alt.Chart(countries).mark_geoshape()\
.encode(color='rate:Q')\
.add_selection(select_date)\
.transform_filter(select_date)\
.transform_lookup(
lookup='id',
from_=alt.LookupData(df, key='id', fields=['rate'])
)\
.project('equirectangular')\
.properties(
width=500,
height=300,
title='Title'
)

[*]Вы можете удалить строку .transform_filter(select_date)\, чтобы увидеть рабочую карту со ползунком, который ничего не меняет.

Подробнее здесь: https://stackoverflow.com/questions/642 ... air-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»