python基础——数据可视化

本文大纲参考黑马程序员Python系列教程

目录

一、json数据格式

1.python数据转换为json类型数据

2.json字符串转换为python数据类型

二、pyecharts包介绍

1.安装pyecharts包

 2.使用pyecharts绘制简单折线图

3.设置全局配置项

三、折线图的生成

四、地图的生成

1.基础地图显示

 2.国内疫情地图显示

3.河南省疫情显示
​​​​​​​


一、json数据格式

json是一种轻量级的数据交互格式,可以按照指定的格式去组织和封装数据。

json本质上是一种带有特定格式的字符串,负责不同编程语言中数据的传递和交换。

1.python数据转换为json类型数据

将python中的数据转换为json类型数据,我们只需要使用json模块中的dumps函数即可完成。

import json
#准备一个列表,列表中的每一个值都是字典,将其转化为json
data = [{"name":"小A","age":26},{"name":"小B","age":20},{"name":"小C","age":18}]
json_str = json.dumps(data,ensure_ascii=False)#第二个参数的目的是正确的显示中文
print(type(json_str))#类型为str
print(json_str)
#准备一个字典,将其转换为json
data1 = {"name":"Kiku","age":19}
json_str1 = json.dumps(data1)#字典不含中文,不需要加上ensure_ascii
print(type(json_str1))#类型为str
print(json_str1)

2.json字符串转换为python数据类型

将json字符串类型还原为python数据类型,我们可以使用json模块下的loads函数来完成。

import json
#将json字符串类型转换为python列表
exp1 = '[{"name": "小A", "age": 26}, {"name": "小B", "age": 20}, {"name": "小C", "age": 18}]'
py_list = json.loads(exp1)
print(type(py_list))
print(py_list)
#将json字符串类型转换为python字典
exp2 = '{"name": "Kiku", "age": 19}'#注意字符串要用引号表明
py_dict = json.loads(exp2)
print(type(py_dict))
print(py_dict)

二、pyecharts包介绍

1.安装pyecharts包

win+R快捷键打开cmd命令窗口,输入"pip install pyecharts"即可下载pyecharts包,下载完毕后输入python进入python环境中,输入import pyecharts,如果没有报错,说明成功安装。

python基础——数据可视化_第1张图片

 2.使用pyecharts绘制简单折线图

  1. 绘制折线图需要pyecharts包中charts模块的line功能,我们直接导入就可以了。
  2. 创建一个折线图对象,用于存储折线图的html文件。
  3. 使用add_xaxis和add_yaxis函数添加x轴,y轴内容。
  4. 使用render命令生成图表。
#导入包和Line功能
from pyecharts.charts import Line
#得到折线图对象
line = Line()
#添加X轴数据
line.add_xaxis(["中国","美国","英国"])
#添加Y轴数据
line.add_yaxis("GDP",[30,20,10])
#生成图表
line.render()

运行命令后我们会在pycharm文件栏中看到新出现的render文件,打开html文件后选择用浏览器打开,这时候我们就能看到做好的折线图了。

3.设置全局配置项

通过上述方法设计出的图表往往不够美观,所以我们可以使用全局配置项来优化一下。

#导入包和Line功能
from pyecharts.charts import Line
#导入全局配置项所需功能TitleOpts(标题设置),LegendOpts(图例设置),Toolbox(工具箱),VisualMapOpts(视觉映射)
from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts
#得到折线图对象
line = Line()
#添加X轴数据
line.add_xaxis(["中国","美国","英国"])
#添加Y轴数据
line.add_yaxis("GDP",[30,20,10])
#设置全局配置项set_global_opts
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()

python基础——数据可视化_第2张图片

python基础——数据可视化_第3张图片

 结果如图所示

pyecharts网站上还有很多全局配置项,大家有兴趣可以自行查找。


三、折线图的生成

当我们拿到一长串json数据时,我们要将其转化为折线图,方法如下:

  1. 分析数据层级,可以使用ab173.com网站
  2. 分析json数据格式,去除多余部分内容
  3. 将json格式转换为python格式字典
  4. 将字典内容切片,分别作为x轴和y轴
import json
#打开数据文件
f_us = open("D:\桌面\python课件\资料\可视化案例数据\折线图数据\美国.txt",'r',encoding='utf-8')
#获取数据
us_data = f_us.read()
#去掉不合规范的开头和结尾
us_data = us_data.replace("jsonp_1629344292311_69436(","")#使用替换法
us_data = us_data[:-2]#使用切片法将最后两个字符去掉
#json转python字典
us_dict = json.loads(us_data)
#获取trend key,将data中的第一个子字典取出,并取出子字典中trend键的key值
trend_data =us_dict['data'][0]['trend']
#获取日期数据,用于x轴,取前314个值
x_data = trend_data['updateDate'][:314]
#获取确诊数据,用于y轴,取前314个值
y_data = trend_data['list'][0]['data'][:314]
#生成图表

下面来到最后一步,将数据处理和图表生成的代码结合起来,生成最终的折线图。

import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts,LabelOpts
#打开数据文件
f_us = open("D:\桌面\python课件\资料\可视化案例数据\折线图数据\美国.txt",'r',encoding='utf-8')
f_jp = open("D:\桌面\python课件\资料\可视化案例数据\折线图数据\日本.txt",'r',encoding='utf-8')
f_in = open("D:\桌面\python课件\资料\可视化案例数据\折线图数据\印度.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(","")#使用替换法
us_data = us_data[:-2]#使用切片法将最后两个字符去掉

jp_data = jp_data.replace("jsonp_1629350871167_29498(","")#使用替换法
jp_data = jp_data[:-2]#使用切片法将最后两个字符去掉

in_data = in_data.replace("jsonp_1629350745930_63180(","")#使用替换法
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,将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']
#获取日期数据,用于x轴,取前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]
#获取确诊数据,用于y轴,取前314个值
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]
#生成图表
line = Line()
#添加x轴数据(3个国家通用)
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()
#关闭文件
f_us.close()
f_jp.close()
f_in.close()

结果如下所示:

python基础——数据可视化_第4张图片


四、地图的生成

1.基础地图显示

学完折线图的生成以后,下面我们进入地图的学习,地图构建所需的数据很简单:一个包含若干元组的列表就可以了,每个元组中需要包含城市或省份名称以及所对应的数据。如下例所示:

from pyecharts.charts import Map
#准备地图对象
map = Map()
#给定数据
data = [
    ("湖北省",99),
    ("湖南省",199),
    ("台湾省",299),
    ("北京市",399),
    ("上海市",499)
]
#添加数据,第一个数据为地图名称,第二个数据为给定的数据,第三个数据表示地图类型
map.add("中国地图",data,"china")
#构建地图
map.render()

与上例折线图生成基本一致,这里使用的是Map函数。运行以后结果如下:

python基础——数据可视化_第5张图片

 现在的地图很粗糙,没有颜色显示,所以我们下一步使用全局设置项对地图进行美化。

from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
#准备地图对象
map = Map()
#给定数据
data = [
    ("湖北省",99),
    ("湖南省",199),
    ("台湾省",299),
    ("北京市",399),
    ("上海市",499)
]
#添加数据,第一个数据为地图名称,第二个数据为给定的数据,第三个数据表示地图类型
map.add("中国地图",data,"china")
#设置全局设置项
map.set_global_opts(
    visualmap_opts=VisualMapOpts(
        is_show=True,#允许显示颜色
        is_piecewise=True,#允许手动校准
        pieces=[
            {"min":1,"max":9,"label":"1-9","color":"#CCFFFF"},#颜色代码为rgb颜色
            {"min":10,"max":99,"label":"10-99","color":"#FFFF99"},
            {"min":100,"max":500,"label":"100-500","color":"#990033"}
        ]
    )
)
#构建地图
map.render()

生成的地图如下:

python基础——数据可视化_第6张图片

 2.国内疫情地图显示

学完了基础的地图显示功能以后,我们来试一下具体的案例——国内疫情显示。

import json
from pyecharts.charts import Map
from pyecharts.options import *
# 读取json数据文件,并拷贝到data中
f = open("D:\桌面\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))

# 数据处理完成,开始构建地图
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"},
        ]
    )
)
# 生成图表
map.render("全国疫情地图.html")

3.河南省疫情显示

河南省地图显示和全国地图显示基本上一样,只是在数据处理部分略有差别

import json
from pyecharts.charts import Map
from pyecharts.options import *
# 读取json数据文件,并拷贝到data中
f = open("D:\桌面\python课件\资料\可视化案例数据\地图数据\疫情.txt","r",encoding="utf-8")
data = f.read()
f.close()
# 将json类型文件转换为Python的字典类型
data_dict = json.loads(data)
# 读取省份数据
cities_data_list = data_dict["areaTree"][0]["children"][3]["children"]
# 组装每个省份的名称和疫情数据为元组,并将元组封装为列表
data_list = []
for cities_data in cities_data_list:
    cities_name = cities_data["name"]+"市"
    cities_confirm = cities_data["total"]["confirm"]
    data_list.append((cities_name,cities_confirm))
# 手动添加数据
data_list.append(("济源市",5))

# 数据处理完成,开始构建地图
map=Map()
map.add("河南省疫情分布",data_list,"河南")
# 设置全局选项
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"},
        ]
    )
)
# 生成图表
map.render("河南省疫情地图.html")

地图如下所示:

python基础——数据可视化_第7张图片

你可能感兴趣的:(json)