熊猫在Altair中的时间序列特定操作

时间:2020-02-22 17:11:26

标签: python altair

是否可以使用transform_aggregate函数对Altair中的日期时间对象执行分组操作?我试图从Jake VDP的书“ {示例:可视化西雅图自行车计数”示例-https://jakevdp.github.io/PythonDataScienceHandbook/03.11-working-with-time-series.html

中复制一些时间序列图

transform_aggregate是否允许特定于时间序列的操作,例如重采样?

1 个答案:

答案 0 :(得分:4)

Altair使用TimeUnit transform内置了时间分组,可以通过显式转换或编码速记来使用。

这里是从本书的该部分复制一张图表的示例-请注意,当数据增长到成千上万的条目时,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