python基础——json数据及pyecharts入门使用【用pyecharts生成折线图,地图,和动态柱状图】

本文详细介绍了如何使用Python的pyecharts库来生成GDP折线图和疫情地图,包括数据格式转换、json与python数据交互,以及动态时间线图表的制作过程。
部署运行你感兴趣的模型镜像

📝前言:
这篇文章主要记录一下使用pyecharts生成GDP折线图的步骤和过程

🎬个人简介:努力学习ing
📋个人专栏:C语言入门基础以及python入门基础
🎀优快云主页 愚润求学
🌄每日鸡汤:anything is possible


一,json数据

1,json数据的特点

什么是json数据?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它是基于 JavaScript 的对象表示法,但也可以在其他编程语言中使用。

很抽象,对于我们初学python来说只需要了解:
它就像一个中转站,其他语言如C语言,python可以转换成json数据,而json数据又可以被转换成其他语言
(从而实现把C语言的数据转换成python的数据)

json本质上就是有特定格式的字符串,它的类型是字符串
json的数据格式要求很严格,一般是下面两种:
在这里插入图片描述
(这看起来就像是:1,字典;2,以字典为元素的列表)

2,json数据与python数据间的转换

使用 dumps(转json)和loads(转python)
json数据规范的时候(像上面两种形式),我们就可以将其转换成python数据
python数据符合json的格式的时候,我们也可以将其转换成json数据

方法如下:
在这里插入图片描述
(注意:python数据转换成json的时候,中文会被转换成Unicode的字符)
如果想要显示中文,则需要把dumps中的第二个参数ensure_ascii设置成False

import json
# 将python数据转换成json
dict = {"张三":33, "李四":42}
j1 = json.dumps(dict)
print(j1) # 第一行输出的

j2 = json.dumps(dict, ensure_ascii=False)
print(j2) # 第二行输出的

输出结果:
在这里插入图片描述
下面有个好用的网址:
懒人工具(用于json格式化):http://www.kuquidc.com/ 或者(搜索:ab173)

二,pyecharts

pyecharts是一个用来做数据可视化的模块,在这里不过多介绍。
可以看下它的官网:pyecharts.org
以及pyecharts-gallery:gallery.pyecharts.org

三,生成折线图

# 导包
import json # json
from pyecharts.charts import Line # 折线图对象
from pyecharts.options import LabelOpts, TitleOpts # 配置项

# 读取文件,拿数据(json数据的本质是特殊字符串)
f_us = open("D:/美国.txt","r",encoding="UTF-8")
us_data = f_us.read()
f_jp = open("D:/日本.txt","r",encoding="UTF-8")
jp_data = f_jp.read()
f_in = open("D:/印度.txt","r",encoding="UTF-8")
in_data = f_in.read()

# 处理json数据中不规范的内容
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数据转换成字典
us_data = json.loads(us_data)
jp_data = json.loads(jp_data)
in_data = json.loads(in_data)

# 拿到获取 确诊人数和日期数据 trend 的key
us_key = us_data["data"][0]["trend"]
jp_key = jp_data["data"][0]["trend"]
in_key = in_data["data"][0]["trend"]

# 获取x轴数据
us_x = us_key["updateDate"][:314]
jp_x = jp_key["updateDate"][:314]
in_x = in_key["updateDate"][:314]

# 获取y轴数据
us_y = us_key["list"][0]["data"][:314]
jp_y = jp_key["list"][0]["data"][:314]
in_y = in_key["list"][0]["data"][:314]

# 数据获取完成,接下来就可以生成折线图
# 生成折线图对象
line = Line()

# 设置x轴
line.add_xaxis(us_x) # x轴只需要一个国家的数据就可以

# 设置y轴
line.add_yaxis("美国确诊人数",us_y,label_opts=LabelOpts(is_show=False)) # 这是让每个点的数据不出现
line.add_yaxis("日本确诊人数",jp_y,label_opts=LabelOpts(is_show=False))
line.add_yaxis("印度确诊人数",in_y,label_opts=LabelOpts(is_show=False))

# 设置全局配置项 标题和标题的位置
line.set_global_opts(
    title_opts=TitleOpts(title="2020年美日印三国疫情确诊人数",pos_left="center",pos_bottom="1%"))

# 生成图像
line.render("自主完成折线图.html") # 不要忘记加:html

# 关闭文件
f_us.close()
f_jp.close()
f_in.close()

效果:
在这里插入图片描述
(以上非真实数据)

四,生成地图

# 导包
import json
from pyecharts.charts import Map
from pyecharts.options import * # 一次性导入配置项的所有包

# 读取json数据
f = open("D:/疫情.txt","r",encoding="UTF-8")
data = f.read()
f.close()

# 将json数据转换成字典
data = json.loads(data)

# 拿到用于组成数据中元组的键
city_data = data["areaTree"][0]["children"][3]["children"]

# 键与值配对,设置好数据
# (因为需要的数据是:每个元素是元组的列表,这个元组的键是地区,值是每个地区的数据)
data_list =[]
for city_data_name in city_data:
    city_name = city_data_name["name"] + "市"  # 在每个城市后面加上个“市”
    city_comfirm = city_data_name["total"]["confirm"]  # 每个城市的确诊人数
    data_list.append((city_name,city_comfirm))  # 生成元组,加入到列表中

# 手动添加济源市的数据
data_list.append(("济源市",5))

# 生成地图对象
map = Map()

# 加入数据
map.add("河南省疫情地图",data_list,maptype="河南")

# 设置配置项
map.set_global_opts(
    title_opts=TitleOpts(
        title="河南省疫情地图"),  # 地图的title
    visualmap_opts=VisualMapOpts(
        is_show=True,  # 是否显示地图
        is_piecewise=True,  # 是否设置分段,下面就是如何分段(包括min,max,label,color)
        pieces= [
                {"min":1,"max": 9, "lable": "1~99人", "color": "#CCFFFF"},
                {"min": 10, "max": 99, "lable": "10~999人", "color": "#FFFF99"},
                {"min": 100, "max": 499, "lable": "100~499人", "color": "#FF9966"},
                {"min": 500, "max": 999, "lable": "500~9999人", "color": "#FF6666"},
                        ]
    )
)
# 生成地图
map.render("河南省疫情地图.html")

rgb颜色对照表(找颜色的16位代码):可以在AB173(网站)——前端去找

效果:
在这里插入图片描述
(以上非真实数据)

五,动态GDP图

时间图就是:不同的图片放在不同的位置,然后播放

# 动态GDP开发
# 导包
from pyecharts.charts import Bar, Timeline
from pyecharts.options import *  # 导入配置项
from pyecharts.globals import ThemeType  #导入主题

# 读取数据
f = open("D:/1960-2019全球GDP数据.csv","r",encoding="GB2312")
data = f.readlines()
f.close()

# 删除第一行无效数据
data.pop(0)
# 现在的数据是:[句子,句子]
# 我们希望得到的是:{year1:[[country1,gdp1],[country2,gdp2],[]],year2:[[],[]...}
data_dict = {}
for sentence in data:  # sentence 是字符串
    year = int(sentence.split(",")[0])
    country = sentence.split(",")[1]
    gdp = float(sentence.split(",")[2])
    # dict[key] = value 如果key不存在会创建
    # 我们用append在值(列表上追加),但是列表不存在会报错
    try:
        data_dict[year].append([country,gdp])  # 尝试追加
    except KeyError:
        data_dict[year] = []  # 如果列表不存在就创建,再追加
        data_dict[year].append([country, gdp])
# 上面我们的字典就创建好了
# 生成时间线对象,并且设置主题
timeline = Timeline({"theme":ThemeType.LIGHT})
# 把字典中的元素按时间排序
sorted_year_list = sorted(data_dict.keys())  # 得到的是[year1,year2...]
# 按时间遍历字典,获取信息,添加bar图
# 这是字典的结构:{year1:[[country1,gdp1],[country2,gdp2],[]],year2:[[],[]...}
for year in sorted_year_list:
    data_dict[year].sort(key=lambda element: element[1],reverse=True)
    top_country = data_dict[year][0:8]  # 截取前8个国家,已经是:[[],[]...]
    # 获取前八个国家的数据,添加到列表里面,准备给x轴和y轴使用
    x_data = []
    y_data = []
    for county_data in top_country:  # 这里拿到的是列表里面的元素[county,gdp]
        x_data.append(county_data[0])
        y_data.append(county_data[1]/100000000)
    # 创建柱状图
    bar = Bar()
    x_data.reverse()
    y_data.reverse()
    bar.add_xaxis(x_data)
    bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right"))
    bar.reversal_axis()
    bar.set_global_opts(
        title_opts=TitleOpts(title=f"{year}年世界top8国家GDP排名")
    )
    # 往时间线里面添加图表
    timeline.add(bar,str(year))

# 设置自动播放
timeline.add_schema(
    play_interval=500,
    is_timeline_show=True,
    is_loop_play=False,
    is_auto_play=True
)
# 生成图标
timeline.render("GDP动态图.html")

效果(就想象一下动态吧),以下是两张截图:
在这里插入图片描述
在这里插入图片描述
(以上非真实数据)


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

内容概要:本文主要介绍了数据可视化中折线图的绘制方法以及JSON数据处理。首先讲解了JSON基础知识,包括其作为跨语言数据交换格式的作用、格式特点(类似于字典列表的字符串形式),并详细演示了PythonJSON之间的数据转换方法,提供了具体的代码示例。接着介绍了Pyecharts库用于创建折线图的基本步骤,从简单的折线图绘制到带有更多配置选项(如标题、图例、工具箱、视觉映射等)的进阶版本,最后还展示了如何利用Timeline类制作具有时间序列特征的数据展示动画,实现了多张柱状图按照设定的时间间隔自动播放。 适合人群:对数据可视化感兴趣的初学者,尤其是有一定Python编程基础并希望学习如何使用Python进行简单数据可视化的人员。 使用场景及目标:①掌握JSON数据格式及其在Python中的应用,学会将Python数据结构转化为JSON格式以便于网络传输或存储;②能够使用Pyecharts库快速绘制基础折线图,熟悉图表的各种配置选项以满足不同的展示需求;③理解时间线播放的概念,能够创建动态变化的数据展示效果,适用于展示随时间变化的数据趋势。 阅读建议:本文提供了大量实际操作的例子,在学习过程中应跟随示例代码逐步练习,同时可以参考官方文档获取更多信息。对于JSON部分,建议多尝试不同类型的数据转换练习;而对于Pyecharts部分,则应该关注不同图表类型的特性及应用场景,结合自己的项目需求灵活运用。
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚润泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值