Python基础:20、Python基础综合案例

news/2024/10/17 10:12:28/

数据可视化 - 折线图可视化

数据可视化 - 地图

数据可视化 - 动态柱状图

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

  • JSON本质上是一个带有特定格式的字符串

主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互. 类似于:

  • 国际通用语言-英语

  • 中国56个民族不同地区的通用语言-普通话

python">"""演示JSON数据和Python字典的相互转换
"""
import json
​
# 准备列表,列表内每一个元素都是字典,将其转换为JSON      Python ————>  JSON :  dumps
data = [{"name": "王大锤", "age": 26}, {"name": "诸葛孔明", "age": 48}, {"name": "狄仁杰", "age": 29}]
json_str = json.dumps(data, ensure_ascii=False)  # ensure_ascii=False 表明不使用ASCII码去转换,直接输出
print(type(json_str))
print(json_str)
​
# 准备字典,将字典转换成JSON     Python ————>  JSON :  dumps
Data = {"name": "豹豹", "age": 25}
json_str = json.dumps(Data, ensure_ascii=False)  # ensure_ascii=False 表明不使用ASCII码去转换,直接输出
print(type(json_str))
print(json_str)
​
# 将JSON字符串转换为Python数据类型[{k: v, k: v}, {k: v, k: v}]       JSON ————>  Python :  loads
Str = '[{"name": "豹豹11", "age": 11}, {"name": "豹豹22", "age": 22}]'
l = json.loads(Str)
print(type(l))
print(l)
​
# 将JSON字符串转换为Python数据类型{k: v, k: v}       JSON ————>  Python :  loads
Str = '{"name": "豹豹33", "age": 33}'
l = json.loads(Str)
print(type(l))
print(l)

总结:

1. json:是一种轻量级的数据交互格式, 采用完全独立于编程语言的文本格式来存储和表示数据(就是字符串)

Python语言使用JSON有很大优势,因为:JSON无非就是一个单独的字典或一个内部元素都是字典的列表

所以JSON可以直接和Python的字典或列表进行无缝转换。

2. json格式数据转化

通过 json.dumps(data) 方法把python数据转化为了 json数据

python">data = json.dumps(data)

如果有中文可以带上:ensure_ascii=False参数来确保中文正常转换

通过 json.loads(data) 方法把josn数据转化为了 python列表或字典

python">data = json.loads(data)

2.pyecharts模块介绍

官网:pyecharts.org

画廊:Document

画廊的功能:产生各种各样的图表,可供学习

  • 开发可视化图表使用的技术栈是:

Echarts框架的Python版本:PyEcharts包

  • 如何安装PyEcharts包:

python">pip install pyecharts
  • 如何查看官方示例

打开官方画廊:

https://gallery.pyecharts.org/#/README

3.pyecharts快速入门
  1. pyecharts模块中有很多的配置选项, 常用到三个类别的选项:

  • 全局配置选项

  • 系列配置选项

  1. 全局配置项能做什么?

  • 配置图表的标题

  • 配置图例

  • 配置鼠标移动效果

  • 配置工具栏

  • 等整体配置项

4.数据处理
python">"""演示JSON数据和Python字典的相互转换
"""
import json
​
# 准备列表,列表内每一个元素都是字典,将其转换为JSON      Python ————>  JSON :  dumps
data = [{"name": "王大锤", "age": 26}, {"name": "诸葛孔明", "age": 48}, {"name": "狄仁杰", "age": 29}]
json_str = json.dumps(data, ensure_ascii=False)  # ensure_ascii=False 表明不使用ASCII码去转换,直接输出
print(type(json_str))
print(json_str)
​
# 准备字典,将字典转换成JSON     Python ————>  JSON :  dumps
Data = {"name": "豹豹", "age": 25}
json_str = json.dumps(Data, ensure_ascii=False)  # ensure_ascii=False 表明不使用ASCII码去转换,直接输出
print(type(json_str))
print(json_str)
​
# 将JSON字符串转换为Python数据类型[{k: v, k: v}, {k: v, k: v}]       JSON ————>  Python :  loads
Str = '[{"name": "豹豹11", "age": 11}, {"name": "豹豹22", "age": 22}]'
l = json.loads(Str)
print(type(l))
print(l)
​
# 将JSON字符串转换为Python数据类型{k: v, k: v}       JSON ————>  Python :  loads
Str = '{"name": "豹豹33", "age": 33}'
l = json.loads(Str)
print(type(l))
print(l)
 
5.创建折线图
1.折线图的基本使用
python"># 演示pyecharts的基础入门
​
# 导入一个包
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts
​
# 创建一个折线图对象
line = Line()
​
# 给折线图对象添加x轴的数据
line.add_xaxis(["四川", "贵阳", "云南"])
​
# 给折线图对象添加y轴的数据
line.add_yaxis("GDP", [84, 65, 58])
​
# 设置全局配置项 set_global_opts来设置
line.set_global_opts(title_opts=TitleOpts(title="GDP展示", pos_left="center", pos_bottom="%1"), # 标题,左右居中,上下占1%的位置legend_opts=LegendOpts(is_show=True),  # 图例toolbox_opts=ToolboxOpts(is_show=True),  # 工具箱visualmap_opts=VisualMapOpts(is_show=True),  # 视觉映射
)
​
# 通过render方法,将代码生成图像
line.render()
 
2.折线图开发
python">import json
​
# 导入一个包
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts, LabelOpts
​
# 处理数据
f_us = open("F:/资料/可视化案例数据/折线图数据/美国.txt", "r", encoding="UTF-8")
us_data = f_us.read()
​
f_jp = open("F:/资料/可视化案例数据/折线图数据/日本.txt", "r", encoding="UTF-8")
jp_data = f_jp.read()
​
f_in = open("F:/资料/可视化案例数据/折线图数据/印度.txt", "r", encoding="UTF-8")
in_data = f_in.read()
​
# 去掉不合JSON规范的开头
us_data = us_data.replace("jsonp_1629344292311_69436(", "")
jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
in_data = in_data.replace("jsonp_1629350745930_63180(", "")
​
# 去掉不合JSON规范的结尾
us_data = us_data[:-2]
jp_data = jp_data[:-2]
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
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轴,取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]
​
# 获取确认数据,用于x轴,取2020年(到下标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轴的数据
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))
​
# 设置全局配置项 set_global_opts来设置
line.set_global_opts(title_opts=TitleOpts(title="2020年美日印三国确诊人数折线图", pos_left="center", pos_bottom="1%"), # 标题,左右居中,上下占1%的位置# legend_opts=LegendOpts(is_show=True),  # 图例# toolbox_opts=ToolboxOpts(is_show=True),  # 工具箱# visualmap_opts=VisualMapOpts(is_show=True),  # 视觉映射
)
​
# 通过render方法,将代码生成图像
line.render()
​
# 关闭文件
f_us.close()
f_jp.close()
f_in.close()
 
6.创建地图
1.地图可视化的基本使用
python">from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
​
# 准备地图对象
map = Map()
​
# 准备数据
data = [("北京市", 99),("上海市", 199),("湖南省", 256),("台湾省", 345),("广东省", 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": 199, "lable": "100-199", "color": "#FF9966"},{"min": 200, "max": 299, "lable": "200-299", "color": "#FF6666"},{"min": 300, "max": 399, "lable": "300-399", "color": "#CC3333"},{"min": 400, "max": 499, "lable": "400-499", "color": "#990033"}])
)
​
# 绘图
map.render()
 
2.全国疫情可视化地图开发
python">import json
from pyecharts.charts import Map
from pyecharts.options import TitleOpts, VisualMapOpts
​
# 读取数据文件
f = open("F:/资料/可视化案例数据/地图数据/疫情.txt", "r", encoding="UTF-8")
data = f.read()
​
# 关闭文件
f.close()
​
# JSON数据转换为python字典
dict_data = json.loads(data)
​
# 读取到各个省份的数据
province_data_list = dict_data["areaTree"][0]["children"]
​
# 组装每个省份和确诊人数为元组,并将各个省份的数据都封装到列表内
data_list = []   # 绘图需要用的数据列表
​
for province_data in province_data_list:name = province_data["name"]                           # 省份名称province_confirm = province_data["total"]["confirm"]   # 确诊人数data_list.append((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": 9, "lable": "1-9", "color": "#CCFFFF"},{"min": 10, "max": 99, "lable": "10-99", "color": "#FFFF99"},{"min": 100, "max": 999, "lable": "100-999", "color": "#FF9966"},{"min": 1000, "max": 9999, "lable": "1000-9999", "color": "#FF6666"},{"min": 10000, "max": 99999, "lable": "10000-99999", "color": "#CC3333"},{"min": 100000, "max": 999999, "lable": "100000-999999", "color": "#990033"}])
)
​
# 绘图
map.render("全国疫情地图.html")
​
3.省级疫情可视化地图开发
python">"""演示河南省疫情地图开发
"""
import json
from pyecharts.charts import Map
from pyecharts.options import TitleOpts, VisualMapOpts
​
# 读取文件
f = open("F:/资料/可视化案例数据/地图数据/疫情.txt", "r", encoding="UTF-8")
data = f.read()
​
# 关闭文件
f.close()
​
# 获取数据
data_dict = json.loads(data)
province_data_list = data_dict["areaTree"][0]["children"][3]["children"]
​
# 准备数据
data_list = []
for city_data in province_data_list:name = city_data["name"] + "市"Data_List = city_data["total"]["confirm"]data_list.append((name, Data_List))
​
# 手动添加城市的数据
data_list.append(("济源市", 5))
​
# print(data_list)
​
# 构建地图
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": 10, "lable": "1-9", "color": "#CCFFFF"},{"min": 11, "max": 20, "lable": "10-20", "color": "#FFFF99"},{"min": 21, "max": 50, "lable": "21-50", "color": "#FF9966"},{"min": 51, "max": 100, "lable": "51-100", "color": "#FF6666"},{"min": 100, "max": 200, "lable": "100-200", "color": "#CC3333"},{"min": 200, "max": 500, "lable": "200-500", "color": "#990033"}])
)
​
# 绘图
map.render("河南省疫情地图.html")
7.创建动态柱状图
1.基础柱状图的使用
python"># 演示柱状图的基本使用
from pyecharts.charts import Bar
from pyecharts.options import LabelOpts
​
# 使用Bar构建基础柱状图
bar = Bar()
​
# 添加X轴的数据
bar.add_xaxis(["中国", "美国", "英国"])
​
# 添加Y轴的数据
bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right"))  #标签在右侧
​
# 反转X轴和Y轴
bar.reversal_axis()
​
# 设置数值标签在右侧
# 在Y轴里添加:label_opts=LabelOpts(position="right")
# 绘图
bar.render("基础柱状图演示.html")
​
2.基础时间线柱状图的使用
python"># 创建时间线对象
timeline = Timeline({"theme": ThemeType.LIGHT}   # 主图设置颜色
)
 
python"># 设置自动播放
timeline.add_schema(play_interval=1000,      # 自动播放时间间隔,msis_timeline_show=True,   # 是否自动播放的时候,显示时间线is_auto_play=True,       # 是否自动播放is_loop_play=True        # 是否循环自动播放
)
python"># 演示基础时间线柱状图的使用
from pyecharts.charts import Bar, Timeline
from pyecharts.options import LabelOpts
from pyecharts.globals import ThemeType
​
# 使用Bar构建基础柱状图
bar = Bar()
bar2 = Bar()
bar3 = Bar()
​
# 添加X轴的数据
bar.add_xaxis(["中国", "美国", "英国"])
# 添加Y轴的数据
bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right"))  #标签在右侧
# 反转X轴和Y轴
bar.reversal_axis()
​
# 添加X轴的数据
bar2.add_xaxis(["中国", "美国", "英国"])
# 添加Y轴的数据
bar2.add_yaxis("GDP", [50, 10, 30], label_opts=LabelOpts(position="right"))  #标签在右侧
# 反转X轴和Y轴
bar2.reversal_axis()
​
# 添加X轴的数据
bar3.add_xaxis(["中国", "美国", "英国"])
# 添加Y轴的数据
bar3.add_yaxis("GDP", [80, 30, 50], label_opts=LabelOpts(position="right"))  #标签在右侧
# 反转X轴和Y轴
bar3.reversal_axis()
​
​
# 创建时间线对象
timeline = Timeline({"theme": ThemeType.LIGHT}   # 主图设置颜色
)
​
# timeline 对象添加bar柱状图
timeline.add(bar, "2021年GDP")
timeline.add(bar2, "2022年GDP")
timeline.add(bar3, "2023年GDP")
​
# 设置自动播放
timeline.add_schema(play_interval=1000,      # 自动播放时间间隔,msis_timeline_show=True,   # 是否自动播放的时候,显示时间线is_auto_play=True,       # 是否自动播放is_loop_play=True        # 是否循环自动播放
)
​
# 绘图
timeline.render("基础时间线柱状图演示.html")
 
3.动态时间线主状态的使用
python">"""拓展列表的sort使用学习将函数作为参数传递之后,可以学习列表的sort方法来对列表进行自定义排序
"""
# 准备列表
my_list = [["a", 33], ["b", 55], ["c", 11]]
​
# 排序,基于带名函数   reverse:是否反转
# def choose_sort_key(element):
#     return element[1]
#
# my_list.sort(key=choose_sort_key, reverse=True)
​
# print(my_list)
​
# 排序,基于;lambda匿名函数
my_list.sort(key=lambda element:element[1], reverse=True)
print(my_list)
python">[['b', 55], ['a', 33], ['c', 11]]

 

python">"""演示:GDP动态时间线柱状图的开发
"""
from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType# 读取数据
f = open("F:/学习/1.笔记/Python/资料/资料/可视化案例数据/动态柱状图数据/1960-2019全球GDP数据.csv", "r", encoding="GB2312")
data_lines = f.readlines()  # 读取每一行数据
# print(data_lines)# 关闭文件
f.close()# 删除第一条(行)数据
data_lines.pop(0)# 将数据转换成字典存储,格式wei:
# {年份: [[国家,gdp], [[国家,gdp],...], 年份: [[国家,gdp], [[国家,gdp],...]}
data_dict = {}
for line in data_lines:year = int(line.split(",")[0])    # 年份  这里要转换一下country = line.split(",")[1]      # 国家gdp = float(line.split(",")[2])   # gdp数据   float可以将科学计数法的数字转换出来# 如何判断字典里有没有指定的key呢try:data_dict[year].append([country, gdp])except KeyError:data_dict[year] = []data_dict[year].append([country, gdp])# print(data_dict)
# 创建时间线对象
timeline = Timeline({"theme": ThemeType.LIGHT}   # 主图设置颜色
)# 排序年份
sorted_year_list = sorted(data_dict.keys())
for year in sorted_year_list:data_dict[year].sort(key=lambda element: element[1], reverse=True)# 取出本年份前8名的国家year_data = data_dict[year][0: 8]x_data = []y_data = []# print(year_data)# for循环每一年的数据,基于每一年的数据,创建每一年的bar对象# 在for循环里将每一年的bar对象添加到时间线里for country_gdp in year_data:x_data.append(country_gdp[0])      # x轴添加国家y_data.append(country_gdp[1] / 1000000000)      # y轴添加GDP数据# print(x_data)# print(y_data)# 构建柱状图x_data.reverse()y_data.reverse()bar = Bar()bar.add_xaxis(x_data)bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right"))# 反转x轴和y轴bar.reversal_axis()# 设置每一年的标题bar.set_global_opts(title_opts=TitleOpts(title=f"{year}年全球前8国家GDP数据"))timeline.add(bar, str(year))# 设置自动播放
timeline.add_schema(play_interval=1000,      # 自动播放时间间隔,msis_timeline_show=True,   # 是否自动播放的时候,显示时间线is_auto_play=True,       # 是否自动播放is_loop_play=True        # 是否循环自动播放
)# 绘图
timeline.render("1960-2019年GDP前8国家.html")


http://www.ppmy.cn/news/1539681.html

相关文章

双目标定的原理

标定目的:建立相机成像几何模型并矫正透镜畸变。 建立相机成像几何模型:计算机视觉的首要任务就是要通过拍摄到的图像信息获取到物体在真实三维世界里相对应的信息,于是,建立物体从三维世界映射到相机成像平面这一过程中的几何模…

ppt基础设置介绍

目录 1、字体1.1 西文1.2 中文 1、字体 1.1 西文 在汇报 PPT 中,常用的西文字体包括: Arial:无衬线字体,简洁易读,适合各类报告。Calibri:现代感强,适合正式场合,通常作为默认字体…

泛癌热门靶点TROP2及研究工具试剂

前 言 TROP2属于肿瘤相关抗原之一,在多种肿瘤中表达升高,促进肿瘤细胞生长、增殖和转移。TROP2已经成为近年来NEJM、肿瘤学期刊、药物研发的多重热点。通过PubMed检索到477篇相关文献,自2020年文献数量逐步增加,2022年达81篇&am…

海外代理如何助力企业跨境选品

在全球化趋势的推动下,越来越多的企业将目光投向国际市场,跨境电子商务成为了企业拓展业务的重要方向。然而,成功的跨境选品策略不仅需要充分了解全球市场的信息,还需要应对各类复杂的网络限制。本文将探讨海外代理如何在这一过程…

网络爬虫-数美滑块验证码

仅供研究学习使用。 今天带来的是数美滑块验证码的逆向 目标站 --> 传送门 解决此类验证码 首先要解决滑动距离的判定 无论是使用selenium还是使用协议的方式来破解 都绕不开滑动距离的识别 滑动距离可以参考以前我博客上的方式,或者找一找开源的一些算法&am…

第四届计算建模、仿真与数据分析国际学术会议(CMSDA 2024)

大会简介 第四届计算建模、仿真与数据分析国际学术会议(CMSDA 2024)将于2024年12月6-8日即将在中国浙江省杭州市召开。计算建模、仿真与数据分析国际学术会议至今已成功举办三届,吸引了近300名计算机与大数据等领域的专家学者参会,多所国内外高等院校、…

QT--单选按钮(QRadioButton)和复选按钮(QCheckBox)

在Qt中,单选按钮(QRadioButton)和复选按钮(QCheckBox)是两种常用的用户界面控件,它们的主要区别在于选择行为和用途: QRadioButton(单选按钮) 选择行为:单选…

Android Jetpack Compose中UI刷新的几种方式

Android Jetpack Compose中UI刷新的几种方式 在 Jetpack Compose 中,如果你想强制刷新 UI,可以使用 remember 和 mutableStateOf 来创建一个可观察的状态。当这个状态变化时,Compose 会自动重组 UI。以下是一些常见的方法来实现这一点: 1. 使用 mutableStateOf 你可以使…