一,JSON数据格式
1.定义:
2. 格式:
{} 双括号表示对象(python中的字典) {“name”: “Michael”}
[] 中括号表示数组(python中的列表)[{“name”: “Michael”},{“name”: “Jerry”}]
3. 主要功能:json是在各种编程语言中流通的格式,负责不同的编程语言中数据传递和交互,类似于:国际通用语言:英语 ,中国的 普通话
4. 格式转换实例图:
5. python与JSON数据格式转换
(1)调用JSON模块中的dumps()方法转换为JSON类型
(2)调用JSON模块中的loads()方法转换为Python数据类型
# 导入json模块
import json
# 准备符合格式json格式要求的python数据列表
data = [{"name": "老王", "age": 16}, {"name": "张三", "age": 20}]#列表
data2={"name":"张三","age":23}#字典
print("测试定义的data数据类型",type(data))
print("测试定义的data2数据类型",type(data2))
# 通过 json.dumps(data) 方法把python数据转化为了 json数据
data = json.dumps(data)
data2 = json.dumps(data2)
print("测试转换后的data数据类型",type(data))
print("测试转换后的data2数据类型",type(data2))
# 通过 json.loads(data) 方法把json数据转化为了 python数据
data = json.loads(data)
data2 = json.loads(data2)
print(type(data))
print(type(data2))
结果:
二,pyecharts模块介绍与安装
- 模块介绍:Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
- 第三方包安装:在Pycharm终端输入命令:
pip(3) install pyecharts
- 其拥有一个画廊网站画廊地址,各种图形实例展示。
三,pyecharts入门
- 创建折线图,运行后目录中出现html文件,用浏览器运行即可。
#导入包构建折线图对象
from pyecharts.charts import Line
#print(pyecharts.__version__)#查看版本
#from pyecharts import options as opts
#2.得到折线图对象,建立空的二维坐标系
line=Line()
#3.添加X,Y轴坐标
line.add_xaxis(["中国","美国","英国"])
line.add_yaxis("GDP",[100,20,50])
#4画出折线图
line.render()
5. 全局配置选项,通过set_global_opts()方法配置。属于通用配置,不管是折线图,柱状图都可以用来设置:标题配置项,图例配置项…
3.line.set_global_opts()方法参数选择使用:
#导入包构建折线图对象
from pyecharts.charts import Line
#print(pyecharts.__version__)#查看版本
from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts
#2.得到折线图对象,建立空的二维坐标系
line=Line()
#3.添加X,Y轴坐标
line.add_xaxis(["中国","美国","英国"])
line.add_yaxis("GDP",[100,20,50])
#设置全局配置项,set_global_opts()方法的参数很多,选择使用
line.set_global_opts(
title_opts=TitleOpts(title="GDP展示",pos_left="10%"),
#设置图例选项
legend_opts=LegendOpts(is_show=True),
# 设置工具箱选项
toolbox_opts=ToolboxOpts(is_show=True),
visualmap_opts=VisualMapOpts(is_show=True)
)
#4画出折线图
line.render()
四,数据处理,创建折线图
-
美国疫情状况数据:
-
(1)选取正确的Json 格式内容到Json数据查看网站,查看数据试图
(2)使用DevToys软件查看:微软商城下载
-
用Python语言根据试图分级情况选取相应数据:
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts,LabelOpts
#1.打开读取,读取文件数据
file1_data=open("F:\Python学习资料\资料\可视化案例数据\折线图数据/美国.txt","r",encoding="UTF-8")
US_data=file1_data.read()
file2_data=open("F:\Python学习资料\资料\可视化案例数据\折线图数据/日本.txt","r",encoding="UTF-8")
JP_data=file2_data.read()
file3_data=open("F:\Python学习资料\资料\可视化案例数据\折线图数据/印度.txt","r",encoding="UTF-8")
In_data=file3_data.read()
#2.数据清理整洁,去掉不规范开头
US_data=US_data.replace("jsonp_1629344292311_69436(","")
JP_data=JP_data.replace("jsonp_1629350871167_29498(","")
In_data=In_data.replace("jsonp_1629350745930_63180(","")
#3.去掉不规范结尾得到规范的JSON格式数据
US_data=US_data[:-2]#取到倒数第二个 ,但不包含倒数第二位
JP_data=JP_data[:-2]#取到倒数第二个 ,但不包含倒数第二位
In_data=In_data[:-2]#取到倒数第二个 ,但不包含倒数第二位
#4.导包JSON,并使用方法转换为Python字典
us_data=json.loads(US_data)
jp_data=json.loads(JP_data)
in_data=json.loads(In_data)
# print(us_data)
# print(jp_data)
# print(in_data)
#5.获取到需要的数据
us_trend_data=us_data['data'][0]['trend']
jp_trend_data=jp_data['data'][0]['trend']
in_trend_data=in_data['data'][0]['trend']
#6.获取日期数据,用于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]
#7.Y轴数据,拿到确诊数据
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]
#8.构建图表,导包
line=Line()#构建折线图对象
line.add_xaxis(Us_X_data)#x轴数据共用且一样所以只需要添加一个国家的数据
line.add_yaxis("美国确诊人数",Us_Y_data,label_opts=LabelOpts(is_show=False))#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()
#9关闭文件
file1_data.close()
file2_data.close()
file3_data.close()
五,地图可视化
5.1基础地图使用
- 简单地图生成测试
#导包
from pyecharts.charts import Map
#准备地图对象
map=Map()
#准备数据
data=[("北京市",99),("上海市",199),("湖南省",299),("台湾省",399),("广东省",499)]
#添加数据
map.add("测试地图",data,"china")
#绘图
map.render()
- set_global_opts设置属性
#导包
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
#准备地图对象
map=Map()
#准备数据
data=[("北京市",567),("上海市",1199),("湖南省",59),("台湾省",11150),("广东省",499)]
#添加数据
map.add("测试地图",data,"china")
#设置全局选项
map.set_global_opts(
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True,#允许手动设置校准范围,空置颜色深度等
pieces=[
{"min":1,"max":9,"lable":"1-9人","color":"#CCFFFF"},
{"min":10,"max":99,"lable":"10-99人","color":"#FFFF99"},
{"min":100,"max":499,"lable":"100-499人","color":"#FF996"},
{"min":500,"max":999,"lable":"500-999人","color":"#FF6666"},
{"min":1000,"max":9999,"lable":"1000-9999人","color":"#CC3333"},
{"min":10000,"lable":"10000以上","color":"#990033"},
]
)
)
#绘图
map.render()
5.2国内疫情地图
- 通过网站中数据格式化查看数据层级关系,以便取得需要的数据。
"""
演示全国疫情可视化地图开发
"""
import json
from pyecharts.charts import Map
from pyecharts.options import *
# 读取数据文件
f = open("F:\Python学习资料\资料\可视化案例数据\地图数据/疫情.txt", "r", encoding="UTF-8")
data = f.read() # 全部数据
# 关闭文件
f.close()
# 取到各省数据
# 将字符串json转换为python的字典
data_dict = json.loads(data) # 基础数据字典
# 从字典中取出省份的数据
province_data_list = data_dict["areaTree"][0]["children"]
# 组装每个省份和确诊人数为元组,并各个省的数据都封装入列表内
data_list = [] # 绘图需要用的数据列表
for province_data in province_data_list:
province_name = province_data["name"] # 省份名称
province_confirm = province_data["total"]["confirm"] # 确诊人数
data_list.append((province_name, province_confirm))
#print(data_list)
# 创建地图对象
map = Map()
# 添加数据
map.add("各省份确诊人数", data_list, "china")
# 设置全局配置,定制分段的视觉映射
map.set_global_opts(
title_opts=TitleOpts(title="全国疫情地图"),
visualmap_opts=VisualMapOpts(
is_show=True, # 是否显示
is_piecewise=True, # 是否分段
pieces=[
{"min": 1, "max": 99, "lable": "1~99人", "color": "#CCFFFF"},
{"min": 100, "max": 999, "lable": "100~9999人", "color": "#FFFF99"},
{"min": 1000, "max": 4999, "lable": "1000~4999人", "color": "#FF9966"},
{"min": 5000, "max": 9999, "lable": "5000~99999人", "color": "#FF6666"},
{"min": 10000, "max": 99999, "lable": "10000~99999人", "color": "#CC3333"},
{"min": 100000, "lable": "100000+", "color": "#990033"},
]
)
)
# 绘图
map.render("全国疫情地图.html")
六,柱状图
6.1基础柱状图
- 竖着表示的柱状图
from pyecharts.charts import Bar
#创建对象
bar=Bar()
#添加数据
bar.add_xaxis(["中国","美国","英国"])
bar.add_yaxis("GDP",[120,30,40])
#绘图
bar.render("基础柱状图.html")
2. 横着表示的柱状图(反转轴)调用reversal_axis()
方法
from pyecharts.charts import Bar
#创建对象
bar=Bar()
#添加数据
bar.add_xaxis(["中国","美国","英国"])
bar.add_yaxis("GDP",[120,30,40])
#反转柱状图轴
bar.reversal_axis()
#绘图
bar.render("基础柱状图.html")
3. 修改标签数字位置
6.2基础时间线柱状图绘制
- 时间线Timeline(),为了实现柱状图动态描述数据变化,在时间线上不同点给出不同的柱状图,时间线运行时柱状图形成动态变化。
from pyecharts.charts import Bar,Timeline
from pyecharts.options import LabelOpts
bar1=Bar()
bar1.add_xaxis(["中国","美国","英国"])
bar1.add_yaxis("GDP",[30,20,10],label_opts=LabelOpts(position="right"))#将数字靠右显示
bar1.reversal_axis()
bar2=Bar()
bar2.add_xaxis(["中国","美国","英国"])
bar2.add_yaxis("GDP",[60,40,30],label_opts=LabelOpts(position="right"))#将数字靠右显示
bar2.reversal_axis()
bar3=Bar()
bar3.add_xaxis(["中国","美国","英国"])
bar3.add_yaxis("GDP",[90,60,50],label_opts=LabelOpts(position="right"))#将数字靠右显示
bar3.reversal_axis()
time_line=Timeline()
time_line.add(bar1,"点1")
time_line.add(bar2,"点2")
time_line.add(bar3,"点3")
#自动播放设置
time_line.add_schema(
play_interval=1000,#自动播放时间间隔,毫秒
is_timeline_show=True,#是否显示自动播放 的时候时间线
is_auto_play=True,#是否自动播放
is_loop_play=True#是否循环播放
)
"""
注意:此时绘图不在用Bar对象绘图,因为有多个Bar对象,用时间线对象绘图time_line,里面包含三个Bar对象
"""
time_line.render("基础时间线柱状图")
- 自动播放设置
#自动播放设置
time_line.add_schema(
play_interval=1000,#自动播放时间间隔,毫秒
is_timeline_show=True,#是否显示自动播放 的时候时间线
is_auto_play=True,#是否自动播放
is_loop_play=True#是否循环播放
)
- 主题设置
主题类型:
6.3GDP动态柱状图绘制
- 列表Sort方法
结果:
Lambda定义匿名函数: