Python-Python基础综合案例:数据可视化 - 折线图可视化

版本说明

当前版本号[20230729]。

版本 修改说明
20230729 初版

目录

文章目录

知识总览图

Python基础综合案例:数据可视化 - 折线图可视化

效果一:2020年印美日新冠累计确诊人数

​ 2020年是新冠疫情爆发的一年, 随着疫情的爆发, 国内外确诊人数成了大家关心的热点, 相信大家都有看过类似的疫情报告. 本案例对印度美国日本三个国家确诊人数的进行了可视化处理, 形成了可视化的疫情确诊人数报告.

效果二:全国疫情地图可视化

效果三:动态GDP增长图

数据来源

本案例数据全部来自 <<百度疫情实时大数据报告>>,及公开的全球各国GDP数据

使用的技术

Echarts 是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可. 而 Python 是门富有表达力的语言,很适合用于数据处理. 当数据分析遇上数据可视化时pyecharts 诞生了.

json数据格式

什么是json

  • JSON是一种轻量级的数据交互格式 。可以按照JSON指定的格式去组织和封装数据
  • JSON本质上是一个带有特定格式字符串

主要功能 :json就是一种在各个编程语言中流通的数据格式 ,负责不同编程语言中的数据传递和交互. 类似于:

  • 国际通用语言-英语
  • 中国56个民族不同地区的通用语言-普通话

json有什么用

​ 各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型, 而其它语言可能没有对应的字典。

​ 为了让不同的语言都能够相互通用的互相传递数据,JSON就是一种非常良好的中转数据格式。如下图,以Python和C语言互传数据为例:

json格式数据转化

json格式的数据要求很严格, 下面我们看一下他的要求

# json数据的格式可以是: 
{"name":"admin","age":18} 

# 也可以是:  
[{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}] 

Python数据和Json数据的相互转化

python 复制代码
# 导入json模块
import json

# 准备符合格式json格式要求的python数据
data = [{"name": "老王", "age": 16}, {"name": "张三", "age": 20}]

# 通过 json.dumps(data) 方法把python数据转化为了 json数据
json_data = json.dumps(data, ensure_ascii=False)
print(type(json_data))
print(f"python数据转化为了json数据的结果:{json_data}")

# 通过 json.loads(data) 方法把json数据转化为了 python数据 
python_data = json.loads(json_data)
print(type(python_data))
print(f"json数据转化为了python数据的结果:{python_data}")

结果如下:(可见json和python里面对元素要求的格式也不一样,一个双引号一个单引号)

注:

通过 json.dumps(data) 方法把python数据转化为了 json数据

data = json.dumps(data)

如果有中文可以带上:ensure_ascii=False参数来确保中文正常转换

通过 json.loads(data) 方法把josn数据转化为了 python列表或字典

data = json.loads(data)

pyecharts模块介绍

​ 如果想要做出数据可视化效果图, 可以借助pyecharts模块来完成

概况

Echarts 是个由百度 开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可. 而 Python 是门富有表达力的语言,很适合用于数据处理.

​ 当数据分析遇上数据可视化时pyecharts 诞生了.

如何查看官方示例

打开官方画廊:

https://gallery.pyecharts.org/#/README

使用在前面学过的pip命令即可快速安装PyEcharts模块

pip install pyecharts

pyecharts快速入门

基础折线图

示例代码:

from pyecharts.charts import Line
line = Line()
line.add_xaxis(["炸鸡", "薯条", "汉堡"])
line.add_yaxis("价格", [45, 33, 23])
line.render()

生成图表:

pyecharts有哪些配置选项

lpyecharts模块中有很多的配置选项, 常用到2个类别的选项:

  • 全局配置选项
  • 系列配置选项

set_global_opts方法

​ 这里全局配置选项 可以通过set_global_opts方法来进行配置, 相应的选项和选项的功能如下:

​ 全局配置项能做什么?

  • 配置图表的标题

  • 配置图例

  • 配置鼠标移动效果

  • 配置工具栏

  • 等整体配置项

    ​ 系列配置项,我们在后面构建案例时讲解

数据处理

原始数据格式:

导入模块:

再根据层级,一步步地去获取:

对数据进行整理, 让数据符合json格式:

python 复制代码
import json
f_us = open("F:/美国.txt", "r", encoding="UTF-8")//打开文件
us_data = f_us.read()//全部读出来

# 把不符合json数据格式的 "jsonp_1629344292311_69436(" 去掉 ,再赋值回us_data
us_data = us_data.replace("jsonp_1629344292311_69436(", "")

# 把不符合json数据格式的 ");" 去掉,从后往前数去掉最后两个字节
us_data = us_data[:-2]

# 数据格式符合json格式后,对数据进行转化成字典
us_dict = json.loads(us_data)

# 获取美国的疫情数据 
trend_data = us_dict['data'][0]['trend']

# x1_data存放2020年日期数据 
x_data = trend_data['updateDate'][:314]

# y1_data存放2020年人数数据 
y_data = trend_data['list'][0]['data'][:314]

print(x_data)
print(y_data)

创建折线图

导入模块

折线图相关配置项

创建折线图

  • 这里的Line()是构建类对象,我们先不必理解是什么意思,后续在Python高阶中进行详细讲解。
  • 目前我们简单的会用即可

添加数据

.add_yaxis相关配置选项

set_global_opts全局配置选项

python 复制代码
.set_global_opts(
	# 设置图标题和位置 
	title_opts=opts.TitleOpts(title="2020年 印🇮🇳美🇺🇸日🇯🇵 累计确诊人数对比图",pos_left="center"), 
	# x轴配置项 
	xaxis_opts=opts.AxisOpts(name="时间"),    # 轴标题 
	# y轴配置项 
	yaxis_opts=opts.AxisOpts(name="累计确诊人数"),    # 轴标题 
	# 图例配置项 
	legend_opts=opts.LegendOpts(pos_left='70%'),    # 图例的位置 
)

示例代码:

python 复制代码
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LabelOpts, LegendOpts, ToolboxOpts, AxisPointerOpts

f_us = open("F:/美国.txt", "r", encoding="UTF-8")
f_jp = open("F:/日本.txt", "r", encoding="UTF-8")
f_in = open("F:/印度.txt", "r", encoding="UTF-8")

us_data = f_us.read()
jp_data = f_jp.read()
in_data = f_in.read()

us_data = us_data.replace("jsonp_1629344292311_69436(", "")
jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
in_data = in_data.replace("jsonp_1629350745930_63180(", "")

us_data = us_data[:-2]
jp_data = jp_data[:-2]
in_data = in_data[:-2]

us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)

trendus_data = us_dict['data'][0]['trend']
trendjp_data = jp_dict['data'][0]['trend']
trendin_data = in_dict['data'][0]['trend']

us_x_data = trendus_data['updateDate'][:314]
jp_x_data = trendjp_data['updateDate'][:314]
in_x_data = trendin_data['updateDate'][:314]

us_y_data = trendus_data['list'][0]['data'][:314]
jp_y_data = trendjp_data['list'][0]['data'][:314]
in_y_data = trendin_data['list'][0]['data'][:314]

epidemic_line = Line()  //构建折线图对象
epidemic_line.add_xaxis(us_x_data)  //x轴上的数据是共用的,所以使用一个国家的数据即可
epidemic_line.add_yaxis("美国确诊人数", us_y_data, label_opts=LabelOpts(is_show=False))
epidemic_line.add_yaxis("日本确诊人数", jp_y_data, label_opts=LabelOpts(is_show=False))
epidemic_line.add_yaxis("印度确诊人数", in_y_data, label_opts=LabelOpts(is_show=False))
//label_opts=LabelOpts(is_show=False) 是指不显示标签上的数字,看起来就不会那么杂

epidemic_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),
    axispointer_opts=AxisPointerOpts()
)

#调用方法,生成图表
epidemic_line.render()

#关闭文件对象
f_us.close()
f_jp.close()
f_in.close()

折现图以下:

相关推荐
一颗花生米。17 分钟前
深入理解JavaScript 的原型继承
java·开发语言·javascript·原型模式
问道飞鱼17 分钟前
Java基础-单例模式的实现
java·开发语言·单例模式
学习使我快乐0121 分钟前
JS进阶 3——深入面向对象、原型
开发语言·前端·javascript
通信仿真实验室1 小时前
(10)MATLAB莱斯(Rician)衰落信道仿真1
开发语言·matlab
勿语&1 小时前
Element-UI Plus 暗黑主题切换及自定义主题色
开发语言·javascript·ui
belldeep2 小时前
python:reportlab 将多个图片合并成一个PDF文件
python·pdf·reportlab
吾爱星辰5 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
ChinaDragonDreamer5 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
FreakStudio5 小时前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
IT良5 小时前
c#增删改查 (数据操作的基础)
开发语言·c#