前言
A change of perspective is worth 80 IQ points Alan Kay
著名计算机科学家、艾伦·凯说过,换一个角度看问题值80点智商。
本期介绍可视化数据周期变化和增加减小的周期。峰谷周期图
例14
df=df_Flying
x = np.arange(df.shape[0])
y_returns = (df.Total.diff().fillna(0)/df.Total.shift(1)).fillna(0) * 100
# Plot
plt.figure(figsize=(16,10), dpi= 80)
plt.fill_between(x[1:], y_returns[1:], 0, where=y_returns[1:] >= 0, facecolor='green', interpolate=True, alpha=0.7)
plt.fill_between(x[1:], y_returns[1:], 0, where=y_returns[1:] <= 0, facecolor='red', interpolate=True, alpha=0.7)
#Decoration
xtickvals=df['id']
plt.gca().set_xticks(x[::3])
plt.gca().set_xticklabels(xtickvals[::3], rotation=90, fontdict={'horizontalalignment': 'center', 'verticalalignment': 'center_baseline'})
# Annotate
plt.annotate('mega Y 喷火龙', xy=(91.0, 110.0), xytext=(70.0, 120),
bbox=dict(boxstyle='square', fc='firebrick'),
arrowprops=dict(facecolor='steelblue', shrink=0.05), fontsize=15, color='white')
图像
解析
图像说明
数据选取了1-6世代所有飞行系宝可梦(PM)的个体值 。x轴表示PM的编号,y表示相邻PM的个体值增长率。
plt.fill_between()给2个函数间区域填充颜色
import numpy as np
import matplotlib.pyplot as plt
n = 1000
x = np.linspace(0, 8 * np.pi, n) #mat
y=x*0
sin_y = np.sin(x)
plt.plot(x, sin_y, c='dodgerblue', label=r'$y=sin(x)$')
plt.plot(x, y, c='dodgerblue', label=r'$y=sin(x)$')
plt.fill_between(x, y, sin_y, where=y < sin_y,
color='green', alpha=0.5)
plt.fill_between(x, y, sin_y, where=y > sin_y,
color='red', alpha=0.5)
y=sin(x) 与 y=0 两个函数围成的区域,where 条件成立的部分上色
df.diff() 计算前后数据差值,可以用于计算微分
#构造数据(0-100-0)
df_x=pd.DataFrame(np.concatenate((x[::-1],x),axis=0))
#增长率
df_diff_y = (df_x.diff().fillna(0)/df_x.shift(1)).fillna(0) * 100
plt.plot(df_x.index, df_x)
plt.plot(df_x.index, df_diff_y)
从图像上看就是对蓝色函数求导求导,注意会有x/0 的情况 用fillna(0) 把未定义的无穷改写为0
应用
这个例子用宝可梦做数据并不是那么合适,如果用来探索魔种按时间周期增长衰减的规律更加合适。
(df.Total.diff().fillna(0)/df.Total.shift(1)).fillna(0) * 100 前值与后置的差值百分比。其实就是离散数据的微分表示方法,当这些数据间隔无限小那就是微分了。
下期预告
排行榜Ranking图 —— 最强传说宝可梦花落谁家
代码地址:见github主页ub3132003/pynotebook
数据表格地址:https://raw.githubusercontent.com/ub3132003/pynotebook/master/data/pokemon.csv
例程来自: machinelearningplus 感谢b站UP "菜菜TsaiTsai" 分享这个博客.