第一阶段-第十章 Python基础的综合案例(数据可视化-折线图可视化)

news2024/11/22 6:24:12

目录

  • 一、本章的案例介绍
    •   1.可视化案例(本章)的学习目标
    •   2.需要实现的效果图
    •   3.数据来源
  • 二、json数据格式
    •   1.学习目标
    •   2.什么是json
    •   3. json的作用
    •   4.json的语法要求
    •   5.Python数据和json数据的相互转化(dumps转json、loads转Python)
    •   6.本节的代码演示
    •   7.本小节的总结
  • 三、pyecharts模块介绍
    •   1. pyecharts模块
    •   2. 安装pyecharts模块
    •   3.本小节的总结
  • 四、pyecharts快速入门
    •   1.学习目标
    •   2. pyecharts入门(以折线图为例)
    •   3. pyecharts的配置的简要介绍
    •   4. 全局配置(set_global_opts方法)
    •   5.本节的代码演示
  • 五、数据处理以及创建折线图
    •   1.学习目标
    •   2.如何查看json文件的层级关系
    •   3.本节的代码演示

  说明:该文章是学习 黑马程序员在B站上分享的视频 黑马程序员python教程,8天python从入门到精通而记录的笔记,笔记来源于本人。 若有侵权,请联系本人删除。笔记难免可能出现错误或笔误,若读者发现笔记有错误,欢迎在评论里批评指正。此笔记对应的doc文件的百度网盘下载链接为 Python入门(黑马)的学习笔记,提取码:1b3k。另外,本次笔记新加了 gif动图,使用免费的potplayer播放器可以控制gif的播放进度。
在这里插入图片描述 在这里插入图片描述

一、本章的案例介绍

  1.可视化案例(本章)的学习目标

通过案例,回忆巩固Python基础的语法;锻炼编程能力,熟练语法的使用。

  2.需要实现的效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  3.数据来源

在这里插入图片描述

二、json数据格式

  1.学习目标

  知道什么是json;掌握如何使用json进行数据转化。

  2.什么是json

在这里插入图片描述

  3. json的作用

在这里插入图片描述

  4.json的语法要求

  从下图中可以看出,json的语法格式相当于由Python的字典或者内嵌字典的列表转换成的字符串。
在这里插入图片描述

  5.Python数据和json数据的相互转化(dumps转json、loads转Python)

在这里插入图片描述

  6.本节的代码演示

  先打开软件,创建一个名为“10_ Python基础的综合案例”的文件夹,创建一个名为“01_json数据格式”的py文件。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  编写代码并运行。代码如下,可参考注释进行理解。

"""
演示JSON数据和Python的相互转换
"""
import json  # 导入内置的json模块

# 准备列表,列表内每一个元素都是字典,将其转换为JS0N
data = [{"name": "张大山", "age": 11}, {"name": "王大锤", "age": 13}, {"name": "赵小虎", "age": 16}]
json_str = json.dumps(data, ensure_ascii=False)
# ensure_ascii=False表示不用转换成ASCII码  如果为了节省空间,请不要写ensure_ascii=False
print(f"json_str的数据类型是:{type(json_str)}")
print(f"json_str的内容是:{json_str}")

# 准备字典,将字典转换为JSON
d = {"name": "周杰轮", "addr": "台北"}
json_str = json.dumps(d, ensure_ascii=False)
print(f"json_str的数据类型是:{type(json_str)}")
print(f"json_str的内容是:{json_str}")

# 将JSON字符串转换为Python数据类型[{k:V,k:V},k:V,k:v}]
s = '[{"name": "张大山", "age": 11}, {"name": "王大锤", "age": 13}, {"name": "赵小虎", "age": 16}]'
l = json.loads(s)
print(f"l的类型为:{type(l)}")
print(f"l的内容为:{l}")

# 将JSON字符串转换为Python数据类型{k:V,K:V}
s = '{"name": "周杰轮", "addr": "台北"}'
d = json.loads(s)
print(f"d的类型为:{type(d)}")
print(f"d的内容为:{d}")

在这里插入图片描述

  7.本小节的总结

在这里插入图片描述

三、pyecharts模块介绍

  1. pyecharts模块

在这里插入图片描述
  Pyecharts的官方网站为:“pyecharts.org”,可以如下图一样操作,还可以将语言选择为中文。
请添加图片描述
  Pyecharts还有一个画廊的网站:“https://gallery.pyecharts.org/”。如下图所示打开这个画廊网站,它是Pyecharts的画廊。为什么要去看它的画廊呢?因为Pyecharts是一个可视化的框架,主要功能就是产生各种各样的图表。在这样一个画廊网站里,就好比美术作品的展览会一样,我们可以在里面找到自己感兴趣的图表,然后查看它们的实现代码。利用这些代码,再更改一些数据,可以得到我们想要的图表。
请添加图片描述

  2. 安装pyecharts模块

在这里插入图片描述
  具体操作如下:首先,如下图,打开“命令提示符”。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
  然后如下图所示进行安装。
在这里插入图片描述

  3.本小节的总结

在这里插入图片描述

四、pyecharts快速入门

  1.学习目标

  构建一个基础的折线图;使用全局配置项设置属性。

  2. pyecharts入门(以折线图为例)

在这里插入图片描述

  3. pyecharts的配置的简要介绍

在这里插入图片描述
  全局配置就是针对我们整个图像来去进行设置,比如图像的标题、图像的图例、工具箱等。对于系列配置,就是针对具体的轴数据进行配置。

  4. 全局配置(set_global_opts方法)

在这里插入图片描述在这里插入图片描述
  title_opts为标题的设置,legend_opts为图例的设置,toolbox_opts为工具箱的设置,用法见演示。

  5.本节的代码演示

  先打开软件,创建一个名为“02_pyecharts基础入门”的py文件。
在这里插入图片描述在这里插入图片描述
  编写代码,代码如下,可参考注释进行理解。然后如下图所示右键运行代码,然后就会产生文件render.html,点击打开该文件,然后再使用浏览器(本次用的是Edge)打开即可看到本次生成的折线图。

"""
演示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", [30, 20, 10])

# 设置全局配置项 - set_global_opts
line.set_global_opts(
    # TitleOpts用来控制标题   pos即位置position  pos_left="center"表示居中     pos_bottom="1%"表示距离底部1%的位置
    title_opts=TitleOpts(title="GDP展示", pos_left="center", pos_bottom="1%"),
    # LegendOpts用来图例
    legend_opts=LegendOpts(is_show=True),
    # ToolboxOpts用来控制工具箱
    toolbox_opts=ToolboxOpts(is_show=True),
    # VisualMapOpts用来控制视觉映射
    visualmap_opts=VisualMapOpts(is_show=True)

)

# 通过render方法,将代码生成为图像
line.render()

在这里插入图片描述
6.本小节的总结
在这里插入图片描述

五、数据处理以及创建折线图

  1.学习目标

  能够通过json模块对数据进行处理;通过pyecharts完成疫情折线图。

  2.如何查看json文件的层级关系

  如下两张图所示,文件“美国.txt”存储了一堆json格式的数据,第二张图是本次json数据的层次关系,至于如何查看json文件的层次关系,本条将给出详细的步骤。
  注:加入黑马程序员的qq群可获得文件“美国.txt”,或者本人也会将文件上传到百度网盘,供大家一起学习使用。
在这里插入图片描述
在这里插入图片描述
  如下图,首先打开存储json数据的文件“美国.txt”,然后将其中的json数据使用Ctr+C进行复制。然后再打开能解析json的网站(本人随便找了个,链接为:“https://c.runoob.com/front-end/53/”),之后将json数据粘贴进去,然后点击“格式化”,点击箭头“→”,就可以查看json数据的层次关系了。
在这里插入图片描述

  3.本节的代码演示

  如下图,在文件夹“10_Python基础的综合案例”处右键,创建一个名为“03_折线图开发”的py文件。
在这里插入图片描述
  如下图,在编写代码时需去掉不符合json规范的内容。
在这里插入图片描述在这里插入图片描述
  在编写代码时还需要根据json文件的层次关系拿到相应的数据。如下图,先边编写代码边验证,得到“trend”的数据。

"""
演示可视化需求1:折线图开发
"""

import json

# 处理数据
f_us = open("D:/test/1-10-3/美国.txt", "r", encoding="UTF-8")
us_data = f_us.read()  # 美国的全部内容

# 去掉不合JS0N规范的开头
us_data = us_data.replace('jsonp_1629344292311_69436(', '')

# 去掉不合JS0N规范的结尾
us_data = us_data[:-2]

# JS0N转Python字典
us_dict = json.loads(us_data)
# print(type(us_dict))
# print(us_dict)

# 获取trend key
trend_data = us_dict['data'][0]['trend']
print(type(trend_data))
print(trend_data)

在这里插入图片描述
  然后将得到的“trend”的数据重新放入json的解析网站中进行解析,由于这些数据有点不符合json的格式规范,于是重新换了个json解析网站(链接:“http://sjson.cn/”)。如下图所示,将鼠标放到“trend”的数据的开头,使用快捷键shift+END选中“trend”的数据(shift+END是选中一行的快捷键),再使用快捷键Ctr+C进行复制。然后打开json网站,把原有数据删除,再使用快捷键Ctr+V把数据粘贴进去,把数据粘贴进去,然后得到“trend”的数据的层次结构。
在这里插入图片描述
  继续编写代码,如下图所示,需根据“trend”的数据的层次关系获取2020年的日期信息、确诊信息。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
  由于第一个画的是美国的疫情图,故将变量trend_data、x_data、y_data改成us_trend_data、us_x_data、us_y_data。之后,日本、印度的疫情数据可同理获得,代码类似。然后,继续编写完代码并右键运行,然后去查看文件render.html。

"""
演示可视化需求1:折线图开发
"""

import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LabelOpts

# 处理数据
f_us = open("D:/test/1-10-3/美国.txt", "r", encoding="UTF-8")
us_data = f_us.read()  # 美国的全部内容

f_jp = open("D:/test/1-10-3/日本.txt", "r", encoding="UTF-8")
jp_data = f_jp.read()  # 日本的全部内容

f_in = open("D:/test/1-10-3/印度.txt", "r", encoding="UTF-8")
in_data = f_in.read()  # 印度的全部内容

# 去掉不合JS0N规范的开头
us_data = us_data.replace('jsonp_1629344292311_69436(', '')
jp_data = jp_data.replace('jsonp_1629350871167_29498(', '')
in_data = in_data.replace('jsonp_1629350745930_63180(', '')

# 去掉不合JS0N规范的结尾
us_data = us_data[:-2]
jp_data = jp_data[:-2]
in_data = in_data[:-2]

# JS0N转Python字典
us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)
# print(type(us_dict))
# print(us_dict)

# 获取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']
# print(type(trend_data))
# print(trend_data)

# 获取日期数据,用于x轴,取2020年(根据数据信息需要取到314)
# - 解释: trend_data['updateDate']表示将字典中关键字为'updateDate'的数据取出来   切片[:314]是将前面313个数据取出来
us_x_data = us_trend_data['updateDate'][:314]  # 查看文档后取314
jp_x_data = jp_trend_data['updateDate'][:315]  # 查看文档后取315
in_x_data = in_trend_data['updateDate'][:269]  # 查看文档后取269
# print(x_data)

# 获取确认数据,用于y轴,取2020年(到314下标结束)
us_y_data = us_trend_data['list'][0]['data'][:314]
jp_y_data = jp_trend_data['list'][0]['data'][:315]
in_y_data = in_trend_data['list'][0]['data'][:269]
# print(y_data)

# 生成图表
line = Line()  # 构建折线图对象
# 添X抽数据
line.add_xaxis(us_x_data)
line.add_xaxis(jp_x_data)
line.add_xaxis(in_x_data)
# 添心抽数据
line.add_yaxis("美国确诊人数", us_y_data,
               label_opts=LabelOpts(is_show=False))  # 添加美国的y轴数摇    label_opts=LabelOpts(is_show=False):标签不显示数字
line.add_yaxis("日本确诊人数", jp_y_data,
               label_opts=LabelOpts(is_show=False))  # 添伽日本的y轴数据
line.add_yaxis("印度确诊人数", in_y_data,
               label_opts=LabelOpts(is_show=False))  # 添加印度的y轴数据

# 设置全局选项
line.set_global_opts(
    # 标题设置
    title_opts=TitleOpts(title="2020年美日印三国确诊人数对比折线图", pos_left="center", pos_bottom="1%"),

)

# 调用render方法,生成图表
line.render()

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

在这里插入图片描述
  注:本次演示存在一个问题,那就是美日印的数据的日期起点不一样,导致本次演示的2020年的x轴的数据个数不一样,所以最后的图还是存在一定的问题的。原视频默认美日印的数据的日期起点一样了,故把21年的部分数据也给取来了,这样就不存在本次个人遇到的问题。目前,个人因能力有限,暂时不会解决这个问题,欢迎大家提出自己的观点。
  好了,本章的笔记到此结束,谢谢大家阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卷积神经网络识别人脸项目—使用百度飞桨ai计算

卷积神经网络识别人脸项目的详细过程 整个项目需要的准备文件: 下载链接: 链接:https://pan.baidu.com/s/1WEndfi14EhVh-8Vvt62I_w 提取码:7777 链接:https://pan.baidu.com/s/10weqx3r_zbS5gNEq-xGrzg 提取码&#x…

❤️创意网页:打造简洁美观的网页轮播图(HTML简单实现轮播图)操作简单可以直接使用

✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(简单好用又好看) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:欢迎踏入…

MQTT协议在物联网环境中的应用及代码实现解析(一)

MQTT协议全称是Message Queuing Telemetry Transport,翻译过来就是消息队列遥测传输协议,它是物联网常用的应用层协议,运行在TCP/IP中的应用层中,依赖TCP协议,因此它具有非常高的可靠性,同时它是基于TCP协议…

macos使用搭建算法竞赛c/c++的g++/gcc编译环境(homebrew,含万能头,改环境变量,vscode/clion可用)

文章目录 1、homebrew安装2、安装g3、改环境变量 1、homebrew安装 我没改镜像,直接网上脚本一键安装的,具体命令忘了,可能是这个 反正装这个的方法很多,网上一搜都有。 成功装上homebrew就行。 /bin/bash -c "$(curl -fsSL…

一款功能强大的子域收集工具OneForAll

简介 借助官方的宣传简介阐述一下: 在渗透测试中信息收集的重要性不言而喻,子域收集是信息收集中必不可少且非常重要的一环,目前网上也开源了许多子域收集的工具,但是总是存在以下部分问题: 不够强大,子域…

基于Cyclone V SoC利用HLS实现卷积手写体数字识别设计

基于Cyclone V SoC利用HLS实现卷积手写体数字识别设计 本文是基于英特尔 Cyclone V SoC 开发板,利用 HLS 技术实现三层卷积两层池化两层全连接推理运算的手写体数字识别设计 硬件环境: Cyclone V SoC开发板 SD卡 电脑 软件环境: Windows 11 Q…

unity3d:YooAsset shader变体收集代码解析

开始收集 YooAsset.Editor.ShaderVariantCollector.Run 创建临时场景 // 创建临时测试场景CreateTempScene();_steps ESteps.Prepare;EditorApplication.update EditorUpdate;准备阶段 反射调用ShaderUtil.ClearCurrentShaderVariantCollection清空当前项目搜集到的变体&…

第52步 深度学习图像识别:Transformer in Transformer建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 (1)Transformer in Transformer Transformer in Transformer(TNT)模型是一种新的图像分类模型,由研究者在2021年提出。这种模型的特点是在传统的Vision Transformer模型的基础…

FreeRTOS源码分析-1创建任务

目录 1 任务的句柄(结构体) 2 创建任务主要工作 2.1 创建任务初始化源码分析 2.2 任务添加到就绪列表源码分析 2.3任务堆栈的初始化源码分析 问:R0为什么要入栈保存?因为作为函数的第一个传入参数,必须也要保存。…

spring复习:(37)ProxyFactoryBean之getObject

该工厂bean的getObject代码如下: public Object getObject() throws BeansException {initializeAdvisorChain();if (isSingleton()) {return getSingletonInstance();}else {if (this.targetName null) {logger.info("Using non-singleton proxies with sing…

4.CSS图文样式

考点:line-height为200%时,font-size为40px

第十五章:DenseASPP for Semantic Segmentation in Street Scenes——在街景语义分割中的DenseASPP

0.摘要 语义图像分割是自动驾驶中的基本街景理解任务,在这个任务中,高分辨率图像中的每个像素被归类为一组语义标签。与其他场景不同,自动驾驶场景中的物体呈现出非常大的尺度变化,这给高级特征表示带来了巨大挑战,因为…

IDEA设置显示行号和方法间的分隔符

IDEA设置显示行号和方法间的分隔符 选择File--Settings--Edotor-General-Apperance,勾选上下图中的选项后点击 OK 即可。 每个函数不迷路~~ Show line numbers:显示行数 Show method separators: 显示方法分隔线。

央视赋能,强势出击——方圆出海与《品牌中国》栏目达成战略合作

2023 央视赋能,强势出击 方圆出海 “日前,深圳市方圆出海科技有限公司与《品牌中国》栏目携手,双方正式达成战略合作协议,央视《品牌中国》栏目负责人正式授予方圆出海“《品牌中国》重点推荐品牌”的荣誉称号。 此次签约标志着…

js的this绑定规则以及箭头函数

目录 调用位置默认绑定隐式绑定隐式丢失 显式绑定callapplybind new绑定装箱绑定优先级this规则之外忽略显式绑定间接函数引用 箭头函数 调用位置 从字面意思上来理解,this似乎是指向自己的 然而在JavaScript中,this并不是绑定到自身的 可以看这一个例子…

蓝牙HID模式下输出中文原理简介

目录 前言一、蓝牙和HID简介二、Unicode编码简介三、Windows下alt键code编码输出中文四、蓝牙HID模式下实现在手机上输入中文的原理 前言 最近在使用蓝牙模组,对于蓝牙模组如何输出中文的原理不太清楚,所以找了一些资料简单学习了下,总结如下…

目标检测——FasterRCNN原理与实现

目录 网络工作流程数据加载模型加载模型预测过程RPN获取候选区域FastRCNN进行目标检测 模型结构详解backboneRPN网络anchorsRPN分类RPN回归Proposal层 ROIPooling目标分类与回归 FasterRCNN的训练RPN网络的训练正负样本标记RPN网络的损失函数训练过程实现正负样本设置损失函数 …

Kubernetes 使用 helm 部署 NFS Provisioner

文章目录 1. 介绍2. 预备条件3. 部署 nfs4. 部署 NFS subdir external provisioner4.1 集群配置 containerd 代理4.2 配置代理堡垒机通过 kubeconfig 部署 1. 介绍 NFS subdir external provisioner 使用现有且已配置的NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久…

大模型基础知识汇总

本文总结大模型相关基础知识,用于大模型学习入门 (持续更新中…) 文章目录 NLP 基础知识传统 NLP 知识NLU 与 NLG 各种任务的差异 Transformer 相关知识Pre Norm与Post Norm的区别?Bert 预训练过程手写 transformer 的 attention …

从0到1:跑团小程序开发心得笔记

背景介绍 随着健康意识的兴起,越来越多的人选择加入跑步俱乐部,不仅体验到了运动的乐趣,也感受到了人生的不同色,那么通过小程序,把俱乐部搬到手机上,通过小程序了解俱乐部动态和运动常识,可以…