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方法

sh

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)



Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐