一、案例介绍
效果一:2020年印美日新冠累计确诊人数
效果二:全国疫情地图可视化
效果三:动态GDP增长图
数据来源:
· 本案例数据全部来自《百度疫情实时大数据报告》,及公开的全球各国GDP数据
使用的技术:
· Echarts 是个百度开源的数据可视化,凭借着良好的交互性,精巧的图标设计,得到了众多开发者的认可,而Python 是门富有表达力的语言,很适合用于数据处理,当数据分析遇上数据可视化时pyecharts 诞生了。
二、json数据格式的转化
1、什么是json
· json是一种轻量级的数据交互格式。可以按照json指定的格式去组织和封装数据
· json本质上是一个带有特定格式的字符串
· 主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互,类似于:
· 国际通用语言——英语
· 中国56个民族不同地区的通用语言——普通话
2、json有什么用
· 各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型,而其它语言可能没有对应的字典。
为了让不同的语言都能够相互传递数据,json就是一种非常良好的中转数据格式。如图,以Python和C语言互传数据为例:
3、json格式数据转化
· json格式的数据要求很严格,下面我们看一下它的要求
4、Python数据和json数据的相互转化
· Python数据和json数据的相互转化
# 导入json模块
import json# 准备列表,列表内每一个元素都是字典,将其转换为json
data = [{"name": "老王", "age": 16}, {"name": "张三", "age": 20}]
json_str = json.dumps(data, ensure_ascii=False) # 内容带中文的话,就使用ensure_ascii=False不让它使用ASCII去转化它
print(type(json_str))
print(json_str)# 准备字典,将字典转化为json
data = {"name": "周杰伦", "addr": "台北"}
json_str = json.dumps(data, ensure_ascii=False)
print(type(json_str))
print(json_str)# 通过json.loads(data)方法把json数据转化为了python列表数据
s = '[{"name": "老王", "age": 16}, {"name": "张三", "age": 20}]'
list = json.loads(s)
print(type(list))
print(list)# 通过json.loads(data)方法把json数据转化为了python字典数据
s = '{"name": "周杰伦", "addr": "台北"}'
dict = json.loads(s)
print(type(dict))
print(dict)
三、pyecharts模块简介
1、pyecharts模块
· 如果想要做出数据可视化效果图,可以借助pyecharts模块来完成
· 概况:
Echarts 是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可,而Python 是门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时pyecharts诞生了。
2、开发可视化图表使用的技术是:
Echarts框架的Python版本:PyEcharts包
3、pyecharts模块安装
pip install pyecharts
4、如何查看官方示例
打开官方画廊:https://gallery.pyecharts.org/#/README
四、pyecharts的入门使用
1、pyecharts入门
· 基础折线图
2、pyecharts有哪些配置选项
· pyecharts模块中有很多的配置选项,常用到2个类别的选项:
· 全局配置选项
· 系列配置选项
3、set_global_opts方法
· 这里全局配置选项可以通过set_global_opts方法来进行配置,相应的选项和选项的功能如下:
# 导包,导入Line功能构建折线图对象
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts# 得到折线图对象
line = Line()
# 添加x轴数据
line.add_xaxis(["中国", "美国", "英国"])
# 添加y轴数据
line.add_yaxis("GDP", [30, 20, 10])# 设置全局配置项,通过set_global_opts来设置
line.set_global_opts(title_opts=TitleOpts(title="GDP展示", pos_left="center", pos_bottom="1%"),legend_opts=LegendOpts(is_show=True),toolbox_opts=ToolboxOpts(is_show=True),visualmap_opts=VisualMapOpts(is_show=True)
)# 通过render生成图表
line.render()
五、数据准备
import json
# 处理数据
f_us = open("D:\美国.txt", "r", encoding="utf-8")
us_data = f_us.read() # 美国的全部数据
f_jp = open("D:\日本.txt", "r", encoding="utf-8")
jp_data = f_jp.read() # 日本的全部数据
f_in = open("D:\印度.txt", "r", encoding="utf-8")
in_data = f_in.read() # 印度的全部数据# 去掉不合json规范的开头
us_data = us_data.replace("jsonp_1629344292311_69436(", "")
jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
in_data = in_data.replace("jsonp_1629350745930_63180(", "")# 去掉不合json规范的结尾
us_data = us_data[:-2]
jp_data = jp_data[:-2]
in_data = in_data[:-2]# json转python字典
us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)# 获取trend key
us_trend_data = us_dict["data"][0]["trend"]
jp_trend_data = jp_dict["data"][0]["trend"]
in_trend_data = in_dict["data"][0]["trend"]# 获取日期数据,用于x轴,取2020年(到314下标结束)
us_x_data = us_trend_data["updateDate"][:314]
jp_x_data = jp_trend_data["updateDate"][:314]
in_x_data = in_trend_data["updateDate"][:314]# 获取确诊数据,用于y轴,取2020年(到314下标结束)
us_y_data = us_trend_data["list"][0]["data"][:314]
jp_y_data = jp_trend_data["list"][0]["data"][:314]
in_y_data = in_trend_data["list"][0]["data"][:314]
六、生成折线图
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LabelOpts, LegendOpts, ToolboxOpts# 处理数据
f_us = open("D:\美国.txt", "r", encoding="utf-8")
us_data = f_us.read() # 美国的全部数据
f_jp = open("D:\日本.txt", "r", encoding="utf-8")
jp_data = f_jp.read() # 日本的全部数据
f_in = open("D:\印度.txt", "r", encoding="utf-8")
in_data = f_in.read() # 印度的全部数据# 去掉不合json规范的开头
us_data = us_data.replace("jsonp_1629344292311_69436(", "")
jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
in_data = in_data.replace("jsonp_1629350745930_63180(", "")# 去掉不合json规范的结尾
us_data = us_data[:-2]
jp_data = jp_data[:-2]
in_data = in_data[:-2]# json转python字典
us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)# 获取trend key
us_trend_data = us_dict["data"][0]["trend"]
jp_trend_data = jp_dict["data"][0]["trend"]
in_trend_data = in_dict["data"][0]["trend"]# 获取日期数据,用于x轴,取2020年(到314下标结束)
us_x_data = us_trend_data["updateDate"][:314]
jp_x_data = jp_trend_data["updateDate"][:314]
in_x_data = in_trend_data["updateDate"][:314]# 获取确诊数据,用于y轴,取2020年(到314下标结束)
us_y_data = us_trend_data["list"][0]["data"][:314]
jp_y_data = jp_trend_data["list"][0]["data"][:314]
in_y_data = in_trend_data["list"][0]["data"][:314]# 生成图表
# 构建折线图对象
line = Line()
# 添加x轴数据
line.add_xaxis(us_x_data) # x轴是共用的,所以使用一个国家的数据即可
# 添加y轴数据
line.add_yaxis("美国确诊人数", us_y_data, label_opts=LabelOpts(is_show=False))
line.add_yaxis("日本确诊人数", jp_y_data, label_opts=LabelOpts(is_show=False))
line.add_yaxis("印度确诊人数", in_y_data, label_opts=LabelOpts(is_show=False))
# 设置全局变量
line.set_global_opts(# 标题设置title_opts=TitleOpts(title="2020年美日印三国确诊人数对比图", pos_left="center", pos_bottom="1%"),legend_opts=LegendOpts(is_show=True), # 添加图例toolbox_opts=ToolboxOpts(is_show=True) # 添加工具箱
)
# 调用render方法,生成图表
line.render()# 关闭文件对象
f_us.close()
f_jp.close()
f_in.close()