Python基础综合案例 - 数据可视化(折线图)
一、案例背景
本案例主要涉及数据可视化中的折线图制作,包括2020年印美日新冠累计确诊人数、全国疫情地图可视化、动态GDP增长图等效果展示。案例数据来自<<百度疫情实时大数据报告>>及公开的全球各国GDP数据,使用的技术主要是pyecharts(Python与Echarts结合的数据可视化库)。
二、JSON数据格式
(一)JSON的概念
- 定义
- JSON是一种轻量级的数据交互格式,本质上是一个带有特定格式的字符串。它是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互,类似于国际通用语言(如英语)或中国通用语言(普通话)的作用。
- 数据格式要求
- 例如
{"name":"admin","age":18}
或[{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}]
。
- 例如
(二)Python与JSON数据的相互转化
- 转化方法
- 导入
json
模块,使用json.dumps()
方法把Python数据转化为JSON数据,使用json.loads()
方法把JSON数据转化为Python数据。 - 例如:
- 导入
import json
data = [{"name": "老王", "age": 16}, {"name": "张三", "age": 20}]
# Python数据转JSON数据
json_data = json.dumps(data)
# JSON数据转Python数据
new_data = json.loads(json_data)
- 注意事项
- 如果有中文,在
json.dumps()
方法中可以带上ensure_ascii=False
参数来确保中文正常转换。
- 如果有中文,在
三、pyecharts模块
(一)模块介绍
- 概况
- Echarts是由百度开源的数据可视化库,具有良好的交互性和精巧的图表设计。Python是适合数据处理的语言,当数据分析遇上数据可视化时pyecharts诞生了。
- 安装
- 使用
pip install pyecharts
命令安装。例如在命令提示符中输入C:Usersjavac>pip install pyecharts -i https:/pypi.tuna.tsinghua.edu.cn/simple
可安装pyecharts及其相关依赖。
- 使用
(二)快速入门 - 构建基础折线图
- 代码示例
from pyecharts.charts import Line
# 得到折线图对象
line = Line()
# 添加x轴数据
line.add_xaxis(["中国", "美国", "英国"])
# 添加y轴数据
line.add_yaxis("GDP", [30, 20, 10])
# 生成图表
line.render()
- 配置选项
- 全局配置选项:常用
set_global_opts
方法进行配置,可配置图表的标题、图例、鼠标移动效果、工具栏等整体配置项。例如:
- 全局配置选项:常用
set_global_opts(
title_opts=opts.TitleOpts(title="标题", pos_left="center"),
legend_opts=opts.LegendOpts(pos_left='70%'),
xaxis_opts=opts.AxisOpts(name="时间"),
yaxis_opts=opts.AxisOpts(name="累计确诊人数")
)
- 系列配置选项:例如
.add_yaxis
相关配置选项包括series_name
(设置图例名称)、y_axis
(输入y轴数据)、symbol_size
(设置点的大小)、label_opts
(标签设置项)、linestyle_opts
(线条宽度和样式)等。
四、数据处理
(一)原始数据格式及处理
- 原始数据
- 例如
{"status":0,"msg":"success","data":[{"name":"日本","trend":"updateDate":["2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.28"],"list":[{"name":"确诊","data":[93,105,132,144,156,164,186,210,230,239,254,268,284,...}]}}
。
- 例如
- 处理步骤
- 导入
json
模块,对数据进行整理使其符合JSON格式,然后进行转化和提取。例如:
- 导入
import json
data = data.replace("jsonp_1629350871167_29498(", "")
data = data[:-2]
data = json.loads(data)
data = data["data"][0]['trend']
x1_data = data['updateDate']
y1_data = data['list'][0]["data"]
x1_data = data['updateDate'][:314]
y1_data = data['list'][0]["data"][:314]
五、创建疫情折线图示例
(一)导入模块
from pyecharts.charts import Line
import pyecharts.options as opts
(二)构建折线图
- 创建折线图对象并设置初始化选项
l = Line(init_opts=opts.InitOpts(width="1600px", height="800px"))
- 添加数据
l.add_xaxis(xaxis_data=x1_data[0:-1:2])
l.add_yaxis(
series_name="美国确诊人数",
y_axis=y1_data[0:-1],
symbol_size=10,
label_opts=opts.LabelOpts(is_show=False),
linestyle_opts=opts.LineStyleOpts(width=2)
)
- 设置全局配置选项
l.set_global_opts(
title_opts=opts.TitleOpts(title="2020年 印🇮🇳美🇺🇸日🇯🇵 累计确诊人数对比图",pos_left="center"),
xaxis_opts=opts.AxisOpts(name="时间"),
yaxis_opts=opts.AxisOpts(name="累计确诊人数"),
legend_opts=opts.LegendOpts(pos_left='70%')
)