【示例】餐厅定位应用 Open Table 公布的疫情期间餐厅预约数据可视化

DataSci YX ⋅ 于 2020-04-07 16:34:04 ⋅ 400 阅读

微博上有一个博主@yiqin_fu前段时间分享了一组由餐厅定位应用Open Table公布的2-3月期间部分餐厅的预约数据,@yiqin_fu选择了西雅图、旧金山、纽约和波士顿四个程师的用餐人数画了一张图,如下:
file

感觉是个挺不错的学习数据可视化的案例,接下来我们用python尝试画一下这个图。

import pandas as pd
from datetime import datetime, timedelta
# 数据下载之后命名为R.xlsx,header=None是因为默认header=0,但处理不好第一行的时间数据
df = pd.read_excel('R.xlsx',index_col=0,header=None)
# 处理第一行数据,转成时间序列
df.iloc[0,:] = pd.to_datetime(df.iloc[0,:]-2,unit='D',origin=pd.Timestamp('1900-01-01'),dayfirst=True)
df.columns = df.iloc[0,:]
# 去掉第一行
df = df.iloc[1:,:]
# 测试取数据
df['2020-02-18']
df.columns.name = None
df.index.name = None
# 查看columns
df.columns

DatetimeIndex(['2020-02-18', '2020-02-19', '2020-02-20', '2020-02-21',
'2020-02-22', '2020-02-23', '2020-02-24', '2020-02-25',
'2020-02-26', '2020-02-27', '2020-02-28', '2020-02-29',
'2020-03-01', '2020-03-02', '2020-03-03', '2020-03-04',
'2020-03-05', '2020-03-06', '2020-03-07', '2020-03-08',
'2020-03-09', '2020-03-10', '2020-03-11', '2020-03-12',
'2020-03-13', '2020-03-14'],dtype='datetime64[ns]', freq=None)

%matplotlib inline
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
import matplotlib.dates as mdate

fig1 = plt.figure(figsize=(12,6),dpi=80)
ax1 = fig1.add_subplot(1,1,1)
# 配置横坐标为日期格式
ax1.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))
plt.plot(df.loc['Canada',:]*100,label='Canada')
plt.plot(df.loc['Mexico',:]*100,label='Mexico')
# 配置横坐标的刻度,并旋转
plt.xticks(pd.date_range('2020-02-18','2020-03-14',freq='2D'),rotation=20)
plt.title('YoY Change in the Number of Restaurant Dinner (%)')
#plt.legend()
# 配置标注
ax1.annotate('Canada',xy=('2020-02-18',df.loc['Canada','2020-02-18']*100),xycoords='data',bbox=dict(boxstyle='round',fc='none',ec='gray'),xytext=(5,-10),textcoords='offset points',ha='center')
ax1.annotate('Mexico',xy=('2020-02-18',df.loc['Mexico','2020-02-18']*100),xycoords='data',bbox=dict(boxstyle='round',fc='none',ec='orange'),xytext=(5,-10),textcoords='offset points',ha='center')

file

matplotlib关于annotate使用方法的说明文档

原始数据:数据链接

回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter