Pandas спецификация временных рядов c операций на Альтаире - PullRequest
2 голосов
/ 22 февраля 2020

Можно ли выполнять групповые операции для объекта datetime в Altair с помощью функции transform_aggregate? Я пытаюсь воспроизвести часть сюжета временного ряда из примера книги Джейка ВДП «Пример: Визуализация Сиэтлских велосипедов» - https://jakevdp.github.io/PythonDataScienceHandbook/03.11-working-with-time-series.html

Разрешает ли transform_aggregate указывать временные ряды c такие операции, как повторная выборка?

1 Ответ

4 голосов
/ 22 февраля 2020

Altair имеет встроенные временные группировки, использующие TimeUnit преобразование , которое можно использовать либо с помощью явного преобразования, либо с помощью кодирования сокращений.

Вот пример воспроизведения одного из диаграммы из этого раздела книги - обратите внимание, что средство визуализации Vega-Lite становится медленным, когда объем данных увеличивается до десятков тысяч записей, поэтому я использую altair_data_server , чтобы обслуживать данные и ограничивать диаграмму первым годом :

# Load the data
# !curl -o FremontBridge.csv https://data.seattle.gov/api/views/65db-xm6k/rows.csv?accessType=DOWNLOAD

import pandas as pd
data = pd.read_csv('FremontBridge.csv', parse_dates=['Date'])
data.columns = ['Date', 'Total', 'East', 'West']
df = data.iloc[:24 * 365]  # limit to first year of data

# Draw the chart
import altair as alt
alt.data_transformers.enable('data_server')  # handle larger datasets

alt.Chart(df).mark_line().transform_fold(
    ['Total', 'East', 'West'],
).encode(
    x='hours(Date):T',
    y='sum(value):Q',
    color='key:N'
)

enter image description here

Эта грамматика timeUnit достаточно гибкая и позволяет разбивать и группировать по нескольким атрибутам даты в одном графике; например, вот тренд, отмеченный днем ​​недели:

alt.Chart(df).transform_fold(
    ['Total', 'East', 'West']
).mark_line().encode(
    x='hours(Date):T',
    y='sum(value):Q',
    color='key:N',
    facet=alt.Facet('day(Date):O', columns=4)
).properties(width=200, height=150)

enter image description here

...