Python入门学习(十一)---数据可视化
·
1、JSON
1、Json是一种轻量级的数据交互格式。可以按照Json指定的格式去组织和封装数据
2、Json本质上是一个带有特定格式的字符串


3、Json的数据格式

Json的数据格式可以是python中的字典,或者列表里嵌套字典
4、python数据和json数据的相互转化
1.python数据转json数据(dumps方法)
#演示Json数据和python数据的相互转化
#导入json模块
import json
#准备列表,列表里的元素是字典
data=[{"name":"张三","age":18},{"name":"lisi","age":19}]
#通过dumps方法将其转换为json数据,如果想要中文显示出来,则不使用ASCII表,即ensure_ascii=False(默认为True)
json_str=json.dumps(data,ensure_ascii=False)
print(json_str)
print(type(json_str))
2.json数据转python数据(loads方法)
loads方法将json数据转换为python的列表或字典
#准备json数据
json_str='[{"name":"张三","age":18},{"name":"lisi","age":19}]'
data=json.loads(json_str)
print(data)
print(type(data))
2、pyecharts模块
如果想要做出数据可视化效果图,可以借助pyecharts模块来完成
echarts是由百度开源的数据可视化,有着良好的交互性,精巧的图标设计
pyecharts网址:https://pyecharts.org/#/zh-cn/

画廊:https://gallery.pyecharts.org/#/README
画廊是pyecharts提供的,其中有着各种各样的图标供用户挑选使用

pip命令暗转pyecharts模块
pip install pyecharts

在python解释器中测试pyecharts是否下载成功

使用pyecharts
1.构建折线图
#基础折线图
from pyecharts.charts import Line
#创建一个折线图对象
line=Line()
#给折线图对象添加X轴数据
line.add_xaxis(["China","美国","英国"])
#给折线图添加Y轴数据
line.add_yaxis("GDP",[30,20,10])
#通过render方法,将代码生成为图像
line.render()
render方法会生成一个Html文件,为render.html,在浏览器中打开如下图所示:

2.全局配置
做出来的折线图不是太好看,这时候可以使用set_global_opts方法来设置全局配置项
#导入包
from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts
#设置全局配置
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)
)
全局配置可以在pyecharts.org官网查找

配置完全局配置之后,效果图:

基础地图的使用
from pyecharts.charts import Map
#准备地图对象
map=Map()
#准备数据(列表嵌套字典)
data=[
("北京",99),
("Henan",199),
("Dalian",299),
("wuhan",399),
("xian",499)
]
#添加数据
map.add("基础地图",data,"china")
#使用render()方法生成地图(绘图)
map.render("基础地图.html")
效果如下:

地图的全局设置
1.视图映射器
is_piecewise手动校准范围
pieces设置参数

在线懒人工具:www.ab173.com
地图案例:国内疫情地图
import json
from pyecharts.charts import Map
from pyecharts.options import TitleOpts,VisualMapOpts
#读取json数据
f_china=open("C:/Users/25479/Desktop/可视化案例数据/地图数据/疫情.txt","r",encoding="UTF-8")
data_china=f_china.read()
f_china.close()
#得到数据字典
data_dict=json.loads(data_china)
#从字典中取出省份的数据
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"] #省份确诊人数
#使用append方法将元组加入到绘图要用的列表中
data_list.append((province_name,province_confirm))
#给地图添加数据
#创建地图对象
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,"label":"1~99人","color":"#CCFFFF"},
{"min":100,"max":999,"label":"100~999人","color":"#FFFF99"},
{"min":1000,"max":4999,"label":"1000~4999人","color":"#FF9966"},
{"min":5000,"max":9999,"label":"5000~9999人","color":"#FF6666"},
{"min":10000,"max":99999,"label":"10000~99999人","color":"#CC3333"},
{"min":100000,"label":"100000+","color":"#990033"}
]
)
)
#使用render方法生成图表
map.render()
效果图:

地图案例:河南省疫情地图
注意:市名的命名要和pyecharts地图里的命名相一致,否则地图上不显示数据
import json
from pyecharts.charts import Map
from pyecharts.options import *
#河南省疫情地图
#读取json数据
f_yiqing=open("C:/Users/25479/Desktop/可视化案例数据/地图数据/疫情.txt","r",encoding="UTF-8")
f_guonei=f_yiqing.read()
#关闭文件
f_yiqing.close()
#将json数据转为python字典
data_guonei=json.loads(f_guonei)
#获取河南疫情数据
data=[]#map要的数据是一个列表,列表里面的每个元素都是一个元组
#获取到河南每个市的数据
data_guonei["areaTree"][0]["children"][3]["children"][1]["name"]="济源"
data_henan_list=data_guonei["areaTree"][0]["children"][3]["children"]
#获取市名和确诊人数
for data_henan in data_henan_list:
city_name=data_henan["name"]+"市" #市名的命名要和pyecharts地图里的命名相一致,否则地图上不显示数据
city_confirm=data_henan["total"]["confirm"]#各市确诊人数
#通过append方法将上述数据组成元组加入到data列表
data.append((city_name,city_confirm))
#生成map对象
map=Map()
#添加数据
map.add("河南省疫情地图",data,"河南")
#设置全局配置
map.set_global_opts(
title_opts=TitleOpts("河南省疫情地图",pos_left="center",pos_bottom="%1"),
#视觉映射
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True,
pieces=[
{"min": 1, "max": 99, "label": "1~99人", "color": "#CCFFFF"},
{"min": 100, "max": 999, "label": "100~999人", "color": "#FFFF99"},
{"min": 1000, "max": 4999, "label": "1000~4999人", "color": "#FF9966"},
{"min": 5000, "max": 9999, "label": "5000~9999人", "color": "#FF6666"}
]
)
)
#绘图
map.render("河南省疫情地图.html")
效果图:

柱状图Bar

from pyecharts.charts import Bar
from pyecharts.options import *
bar=Bar()
bar.add_xaxis(["china","america","england"])
#label_opts将数值放到柱状图右边
bar.add_yaxis("GDP",[30,60,90,],label_opts=LabelOpts(
position="right"
))
#实现xy轴反转
bar.reversal_axis()
bar.render("基础柱状图.html")


时间线设置


from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
#带有时间线的柱状图表
bar1=Bar()
bar1.add_xaxis(["china","america","england"])
#label_opts将数值放到柱状图右边
bar1.add_yaxis("GDP",[30,60,90,],label_opts=LabelOpts(
position="right"
))
#实现xy轴反转
bar1.reversal_axis()
bar2=Bar()
bar2.add_xaxis(["china","america","england"])
#label_opts将数值放到柱状图右边
bar2.add_yaxis("GDP",[130,160,190,],label_opts=LabelOpts(
position="right"
))
#实现xy轴反转
bar2.reversal_axis()
bar3=Bar()
bar3.add_xaxis(["china","america","england"])
#label_opts将数值放到柱状图右边
bar3.add_yaxis("GDP",[230,260,190,],label_opts=LabelOpts(
position="right"
))
#实现xy轴反转
bar3.reversal_axis()
#创建时间线对象
timeline=Timeline()
#在时间线内添加bar对象
timeline.add(bar1,"点1")
timeline.add(bar2,"点2")
timeline.add(bar3,"点3")
#使用时间线对象绘图
timeline.render("基础时间线柱状图.html")
设置自动播放

timeline.add_schema(
play_interval=1000, #自动播放的时间间隔,单位毫秒
is_timeline_show=True, #在自动播放的时候显示时间线
is_auto_play=True, #是否自动播放
is_loop_play=True #循环播放
)
修改时间线主题

from pyecharts.globals import *
timeline=Timeline({"theme":ThemeType.LIGHT})
补充列表的sort方法

name=[["zhangsan",1],["lisi",3],["wangwu",2]]
def choose_sort_key(element):
return element[1]
name.sort(key=choose_sort_key,reverse=False)
print(name)
#匿名排序lambda
name.sort(key=lambda element:element[1],reverse=False)
print(name)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)