Python基础综合案例-数据可视化
1. json数据格式
什么是json:
-
JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据
-
JSON本质上是一个带有特定格式的字符串
-
主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互. 类似于
- 国际通用语言-英语
- 中国56个民族不同地区的通用语言-普通话
json有什么用:
- 各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型, 而其它语言可能没有对应的字典
为了让不同的语言都能够相互通用的互相传递数据,JSON就是一种非常良好的中转数据格式。如下图,以Python和C语言互传数据为例:
json格式数据转化
# json数据的格式可以是:
{
"name":"admin","age":18}
# 也可以是:
[{
"name":"admin","age":18},{
"name":"root","age":16},{
"name":"张三","age":20}]
Python数据和Json数据的相互转化
# 导入json模块
import json
# 准备符合格式json格式要求的python数据
data = [{
"name": "老王", "age": 16}, {
"name": "张三", "age": 20}]
# 通过 json.dumps(data) 方法把python数据转化为了 json数据
data = json.dumps(data)
# 通过 json.loads(data) 方法把json数据转化为了 python数据
data = json.loads(data)
1. json:是一种轻量级的数据交互格式, 采用完全独立于编程语言的文本格式来存储和表示数据(就是字符串)
Python语言使用JSON有很大优势,因为:JSON无非就是一个单独的字典或一个内部元素都是字典的列表
所以JSON可以直接和Python的字典或列表进行无缝转换。
------------------------------------------------------------------------------------------------------------------
2. json格式数据转化
通过 json.dumps(data) 方法把python数据转化为了 json数据
data = json.dumps(data)
如果有中文可以带上:ensure_ascii=False参数来确保中文正常转换
通过 json.loads(data) 方法把josn数据转化为了 python列表或字典
data = json.loads(data)
2.pyecharts模块
如果想要做出数据可视化效果图, 可以借助pyecharts模块来完成
概况 :
Echarts 是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可. 而 Python 是门富有表达力的语言,很适合用于数据处理. 当数据分析遇上数据可视化时pyecharts 诞生了.
安装:
pip install pyecharts
如何查看官方示例
打开官方画廊:
https://gallery.pyecharts.org/#/README
3 基础折线图
pyecharts模块中有很多的配置选项, 常用到2个类别的选项:
- 全局配置选项
- 系列配置选项
全局配置选项
这里全局配置选项可以通过set_global_opts方法来进行配置, 相应的选项和选项的功能如下:
from pyecharts.charts import Line
from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts
line = Line()
line.add_xaxis(["中国", "美国", "英国"])
line.add_yaxis("GDP", [50, 40, 30])
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)
)
line.render()
3.1 数据处理
利用第三方网站查看数据格式
http://www.ab173.com/
https://www.json.cn/
https://www.sojson.com/
https://www.jyshare.com/
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LabelOpts
# 处理数据
import json
f_us = open("可视化案例数据/折线图数据/美国.txt", "r", encoding="UTF-8")
f_jp = open("可视化案例数据/折线图数据/日本.txt", "r", encoding="UTF-8")
f_in = open("可视化案例数据/折线图数据/印度.txt", "r", encoding="UTF-8")
us_data = f_us.read()
jp_data = f_jp.read()
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"]
# 获取日期数据 2020年
us_x_data = us_trend_data["updateDate"][:314]
jp_x_data = jp_trend_data["updateDate"][:315]
in_x_data = in_trend_data["updateDate"][:314]
# 获取确认数据
us_y_data = us_trend_data["list"][0]["data"][:314]
jp_y_data = jp_trend_data["list"][0]["data"][:315]
in_y_data = in_trend_data["list"][0]["data"][:314]
# 生成图表
line = Line()
# 添加X轴数据
line.add_xaxis(us_x_data);
# 添加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%")
)
# 生成图表
line.render("折线图开发2.html")
# 关闭文件对象
f_us.close()
f_jp.close()
f_in.close()
以上效果图HTML源码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>折线图开发</title>
<script type="text/javascript" src="https://assets.pyecharts.org/assets/v5/echarts.min.js"></script>
</head>
<body >
<div id="8aa7b7db2ca54836bdbd25e5250e1fe7" class="chart-container" style="width:900px; height:500px; "></div>
<script>
var chart_8aa7b7db2ca54836bdbd25e5250e1fe7 = echarts.init(
document.getElementById('8aa7b7db2ca54836bdbd25e5250e1fe7'), 'white', {
renderer: 'canvas'});
var option_8aa7b7db2ca54836bdbd25e5250e1fe7 = {
"animation": true,
"animationThreshold": 2000,
"animationDuration": 1000,
"animationEasing": "cubicOut",
"animationDelay": 0,
"animationDurationUpdate": 300,
"animationEasingUpdate": "cubicOut",
"animationDelayUpdate": 0,
"aria": {
"enabled": false
},
"color": [
"#5470c6",
"#91cc75",
"#fac858",
"#ee6666",
"#73c0de",
"#3ba272",
"#fc8452",
"#9a60b4",
"#ea7ccc"
],
"series": [
{
"type": "line",
"name": "\u7f8e\u56fd\u786e\u8bca\u4eba\u6570",
"connectNulls": false,
"xAxisIndex": 0,
"symbolSize": 4,
"showSymbol": true,
"smooth": false,
"clip": true,
"step": false,
"data": [
[
"2.22",
34
],
[
"2.23",
34
],
[
"2.24",
34
],
[
"2.25",
53
],
[
"2.26",
57
],
[
"2.27",
60
],
[
"2.28",
60
],
[
"2.29",
64
],
[
"3.1",
69
],
[
"3.2",
89
],
[
"3.3",
106
],
[
"3.4",
125
],
[
"3.5",
161
],
[
"3.6",
233
],
[
"3.7",
345
],
[
"3.8",
445
],
[
"3.9",
572
],
[
"3.10",
717
],
[
"3.11",
1010
],
[
"3.12",
1322
],
[
"3.13",
1264
],
[
"3.14",
1678
],
[
"3.15",
3499
],
[
"3.16",
4629
],
[
"3.17",
5894
],
[
"3.18",
9345
],
[
"3.19",
14250
],
[
"3.20",
19624
],
[
"3.21",
22043
],
[
"3.22",
32717
],
[
"3.23",
46332
],
[
"3.24",
53268
],
[
"3.25",
65285
],
[
"3.26",
83507
],
[
"3.27",
101657
],
[
"3.28",
121117
],
[
"3.29",
139675
],
[
"3.30",
161367
],
[
"3.31",
184183
],
[
"4.1",
206207
],
[
"4.2",
236339
],
[
"4.3",
270473
],
[
"4.4",
312076
],
[
"4.5",
334125
],
[
"4.6",
363349
],
[
"4.7",
394182
],
[
"4.8",
425828
],
[
"4.9",
463433
],
[
"4.10",
498674
],
[
"4.11",
530384
],
[
"4.12",
559245
],
[
"4.13",
586941
],
[
"4.14",
610632
],
[
"4.15",
641397
],
[
"4.16",
674829
],
[
"4.17",
710021
],
[
"4.18",
738697
],
[
"4.19",
762496
],
[
"4.20",
789383
],
[
"4.21",
825306
],
[
"4.22",
844992
],
[
"4.23",
877497
],
[
"4.24",
916348
],
[
"4.25",
955488
],
[
"4.26",
985060
],
[
"4.27",
1004942
],
[
"4.28",
1029878
],
[
"4.29",
1056646
],
[
"4.30",
1092656
],
[
"5.1",
1125305
],
[
"5.2",
1156744
],
[
"5.3",
1185167
],
[
"5.4",
1209702
],
[
"5.5",
1234592
],
[
"5.6",
1256639
],
[
"5.7",
1289028
],
[
"5.8",
1318686
],
[
"5.9",
1342723
],
[
"5.10",
1365308
],
[
"5.11",
1381665
],
[
"5.12",
1406519
],
[
"5.13",
1427587
],
[
"5.14",
1453381
],
[
"5.15",
1480975
],
[
"5.16",
1503684
],
[
"5.17",
1526134
],
[
"5.18",
1532861
],
[
"5.19",
1555133
],
[
"5.20",
1573778
],
[
"5.21",
1597130
],
[
"5.22",
1627409
],
[
"5.23",
1650677
],
[
"5.24",
1672527
],
[
"5.25",
1689727
],
[
"5.26",
1711569
],
[
"5.27",
1730595
],
[
"5.28",
1750377
],
[
"5.29",
1772643
],
[
"5.30",
1797949
],
[
"5.31",
1822117
],
[
"6.1",
1842243
],
[
"6.2",
1862879
],
[
"6.3",
1887708
],
[
"6.4",
1907840
],
[
"6.5",
1928026
],
[
"6.6",
1973883
],
[
"6.7",
1995854
],
[
"6.8",
2012001
],
[
"6.9",
2030323
],
[
"6.10",
2052816
],
[
"6.11",
2072274
],
[
"6.12",
2094368
],
[
"6.13",
2123102
],
[
"6.14",
2150245
],
[
"6.15",
2166685
],
[
"6.16",
2188198
],
[
"6.17",
2215580
],
[
"6.18",
2242914
],
[
"6.19",
2275218
],
[
"6.20",
2303692
],
[
"6.21",
2342597
],
[
"6.22",
2363825
],
[
"6.23",
2396101
],
[
"6.24",
2426500
],
[
"6.25",
2474962
],
[
"6.26",
2511784
],
[
"6.27",
2571448
],
[
"6.28",
2615417
],
[
"6.29",
2649774
],
[
"6.30",
2695685
],
[
"7.1",
2744570
],
[
"7.2",
2797737
],
[
"7.3",
2855961
],
[
"7.4",
2909123
],
[
"7.5",
2948587
],
[
"7.6",
2996027
],
[
"7.7",
3055548
],
[
"7.8",
3116430
],
[
"7.9",
3174924
],
[
"7.10",
3242086
],
[
"7.11",
3311844
],
[
"7.12",
3381274
],
[
"7.13",
3436152
],
[
"7.14",
3490706
],
[
"7.15",
3565476
],
[
"7.16",
3642907
],
[
"7.17",
3719446
],
[
"7.18",
3790373
],
[
"7.19",
3854368
],
[
"7.20",
3901026
],
[
"7.21",
3979579
],
[
"7.22",
4046552
],
[
"7.23",
4118684
],
[
"7.24",
4197515
],
[
"7.25",
4273303
],
[
"7.26",
4333464
],
[
"7.27",
4384069
],
[
"7.28",
4451396
],
[
"7.29",
4515787
],
[
"7.30",
4570103
],
[
"7.31",
4655611
],
[
"8.1",
4729242
],
[
"8.2",
4778177
],
[
"8.3",
4821556
],
[
"8.4",
4873925
],
[
"8.5",
4925454
],
[
"8.6",
4988431
],
[
"8.7",
5041384
],
[
"8.8",
5108144
],
[
"8.9",
5164221
],
[
"8.10",
5212499
],
[
"8.11",
5263777