全文总览:
- 数据是会骗人的,比起绝对数字,比率更适合作为数据指标
- 央视新闻报道中使用了炫酷的动态条形图,展现十年黄金周出行人数和旅游收入的变化,看着每年都在3. 增长,但是情况是否真的变好?
- 使用Python,计算年增长率,使用matplotlib和seaborn库,绘制超级炫酷的动态线形图
前言:
十月一号,央视新闻网发布了一篇报道:《“数”览近十年国庆黄金周!今年“十一”超长假期有这些变化》。
报道中,用两张动态图表,展现了近十年来的黄金周全国接待旅客数量与收入的变化情
首先,读一下这两个图表的内容。
从两张图中可以看出:
- 近十年来国内黄金周的旅游人数和收入的绝对值均不断上升;
其中,2012年不论是旅游人数还是旅游收入,相对于2011年均有大幅度上升。 - 2015年旅游人数的上升幅度,看起来没有旅游收入的上升幅度大,或表示2015年,民众的旅行消费升级。
提出问题:只看数字在变大,真的对吗?
- 从这个案例来说,看动态条形图,每一年的柱子都比上一年高,但是具体高多少?不知道。
- 近几年的增长,是否能跟过去几年的增长比?如果不能,是什么原因?
- 有些年份的旅游人数增长,但是旅游收入是否实现同步增长?因为,收入、挣钱才是关键啊!
显然,想要更确切的看出每年的增长情况,单看绝对数量,是不太明显的。
此时,需要计算一下每年的增长率指标:
增长率指标计算公式:
用Python进行指标计算,和绘制动态折线图:
按照国际惯例,先上结果:
以下代码,以绘制十年内旅行人数增长率变化为例,最终输出上面这个gif图。
1 导入所需库
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as ani
实际中,使用matplotlib和seaborn就已经足够绘制出很漂亮的静态图表。
想要让图片动起来,使用matplotlib中的ainmation对象,配合构建的动态函数,就可以让图表动起来。还可以保存成gif、mp4等多种格式。
2 导入数据,计算增长率指标
# 原始数据
year = np.array([i for i in range(2010, 2020)])
revenue_list = [1166, 1458, 2105, 2233, 2453, 4213, 4822, 5836, 5990.8, 6497.1]
number_list = [2.54, 3.02, 4.25, 4.28, 4.75, 5.26, 5.93, 7.05, 7.26, 7.82]
数据比较少,所以直接敲成列表。
year是年份;revenue_list是旅游年收入(亿元);number_list是年旅行人数(亿/人次)
# 计算增长率,保存为numpy列格式
def cal_rate(cal_list):
list_c = [0] # 临时列表的第一个元素,即2010年,定为0
for i in range(len(cal_list)-1):
list_c.append((cal_list[i+1]-cal_list