时间序列可视化
时间序列的视觉呈现' (Shíjiān xùliè de shìjù chéngxìn)
常见错误
假设您有一个表示一段时间内自由工作小时数的时间序列:
import pandas as pd
import plotly.express as px
import numpy as np
import datetime
link = 'https://raw.githubusercontent.com/ianni-phd/Datasets/main/Timeseries/working_hours.csv'
df = pd.read_csv(link)# 可视化
fig = px.line(df, x='day', y='working_hours', title='工作小时')
fig.show()
我们知道自由职业者没有固定的9点到5点工作时间。
他们一天24小时工作,有时感觉像工作马拉松,有时感觉像工作午休!
然而,这个时间序列看起来相当奇怪… 这是时间序列表示中的一个常见错误。
让我们创建一个更具代表性的图表:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go# 读取数据
link = 'https://raw.githubusercontent.com/ianni-phd/Datasets/main/Timeseries/working_hours.csv'
df = pd.read_csv(link)# 绘图,并添加一些标记
fig = px.line(df, x='day', y='working_hours', title='工作小时')
fig.add_trace(
go.Scatter(x=df['day'], y=df['working_hours'],
mode='markers', marker=dict(size=7, color='darkblue')))
fig.show()
<p我们开始意识到问题所在,但让我们假装仍然困惑。
为了检测出模式,让我们试着弄清楚每周的工作日是否会对该现象产生影响:
# 每周平均值
df['day'] = pd.to_datetime(df['day'])
df['day_of_week'] = df['day'].dt.day_name()
weekly_avg = df.groupby('day_of_week')['working_hours'].mean().reset_index()# 条形图
fig = px.bar(weekly_avg, x='day_of_week', y='working_hours', title='平均值')
# 图形设置
fig.update_traces(marker_color='dodgerblue')
fig.update_layout(template='plotly_dark'…