Python||数据分析与可视化_使用折线图分析各个城市的P.M.2.5月度差异情况(下)及使用堆叠柱状图对各个城市的PM2.5日均值情况进行数据分析与可视化

目录

1.使用Python折线图对各个城市的P.M.2.5月度差异情况进行数据分析与可视化。

2.使用Python堆叠柱状图对各个城市的PM2.5日均值情况进行数据分析与可视化。


1.使用Python折线图对各个城市的P.M.2.5月度差异情况进行数据分析与可视化。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 公共列
common_cols = ['year', 'month', 'day', 'hour']
# 5个城市
citys = ['beijing', 'chengdu', 'guangzhou', 'shanghai', 'shenyang']
# 数据集部分属性
data_config_dict = {'beijing': ('Beijing.csv', ['PM_Dongsi', 'PM_Dongsihuan', 'PM_Nongzhanguan'], '北京'),'chengdu': ('Chengdu.csv', ['PM_Caotangsi', 'PM_Shahepu'], '成都'),'guangzhou': ('Guangzhou.csv', ['PM_City Station', 'PM_5th Middle School'], '广州'),'shanghai': ('Shanghai.csv', ['PM_Jingan', 'PM_Xuhui'], '上海'),'shenyang': ('Shenyang.csv', ['PM_Taiyuanjie', 'PM_Xiaoheyan'], '沈阳')
}
def pct_pol_level(data_arr):level_1 = data_arr[data_arr <= 50].shape[0]level_2 = data_arr[data_arr <= 100].shape[0]level_3 = data_arr[(100 < data_arr) & (data_arr <= 150)].shape[0]level_4 = data_arr[(150 < data_arr) & (data_arr <= 200)].shape[0]level_5 = data_arr[(200 < data_arr) & (data_arr <= 300)].shape[0]level_6 = data_arr[data_arr > 300].shape[0]levels = np.array([level_1, level_2, level_3, level_4, level_5, level_6])print(levels)result = levels / np.sum(levels)print(result)return resultplt.rcParams['font.sans-serif'] = ['SimHei']  # 使得绘图能够显示中文
df = pd.DataFrame()
# 空气质量各个级别标签
level_label = ["优", "良", "轻度", "中度", "重度", "严重"]for city in citys:# 数据准备filepath = data_config_dict[city][0]districts = data_config_dict[city][1]city_name = data_config_dict[city][2]data = pd.read_csv(filepath, usecols=common_cols + districts)# 绘图fig = plt.figure(figsize=(10, 5))# 五城市每个区空气质量的月度差异group = data.groupby(data['month'])[districts]group.mean().plot(marker='^')plt.ylabel('PM2.5')plt.title('月度指数')plt.suptitle(city_name, x=0.05,y=1, fontsize=24,fontweight='bold')plt.grid(alpha=0.4)plt.show()

五城在6月、7月、8月、9月的空气质量最好,从10月份开始空气质量逐渐变差,在12月和1月达到一年中空气质量最差的时期,从2月份开始空气质量逐渐向好发展。

北京市和广州市的全年空气质量走向趋势较为平稳,而成都市的全年空气质量走向趋势则波动较大。

不同的是,北京市的全年空气质量走向平稳,是在“轻度污染”线上徘徊,而广州市的全年空气质量走向平稳,则是在“良”线上行走。换句话来说,北京市的全年空气质量差,广州市的全年空气质量良好。

上海市和广州市的全年空气质量都相对平稳,且波动趋势较为相近。

成都市和沈阳市的全年空气质量相对波动较大,波动趋势较为相近,在6月、7月、8月、9月的空气质量最好,从10月份开始空气质量逐渐变差,在12月和1月达到一年中空气质量最差的时期,从2月份开始空气质量逐渐向好发展。

2.使用Python堆叠柱状图对各个城市的PM2.5日均值情况进行数据分析与可视化。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt#读入文件
cd = pd.read_csv('./Chengdu.csv')
gz = pd.read_csv('./Guangzhou.csv')
bj = pd.read_csv('./Beijing.csv')
sh = pd.read_csv('./Shanghai.csv')
sy = pd.read_csv('./Shenyang.csv')
fig = plt.figure(dpi=48,figsize=(16,11))
year = [2010,2011,2012,2013,2014,2015]
def PM(cd,str2,str3):grade_dist_pm = cd.loc[:, [str3]]grade_dist1_pm = grade_dist_pm.dropna(axis=0, subset=[str3])grade_dist_pm_mean = float(grade_dist1_pm.mean())grade_dist_pm_std = float(grade_dist1_pm.std())pm_Caotangsi = grade_dist_pm[np.abs(grade_dist_pm - grade_dist_pm_mean) <= 3 * grade_dist_pm_std]grade_dist2 = pm_Caotangsi.mean()return grade_dist2
def good(pm):#优degree = pm-35if degree > 0:degree = 35else:degree += 35return degree
def moderate(pm):#良degree = pm-35if degree < 0:degree = 0degree -= 40if degree > 0:degree = 40else:degree += 40return degree
def lightlyP(pm):#轻度污染degree = pm-75if degree < 0:degree = 0degree -= 40if degree > 0:degree = 40else:degree += 40return degree
def moderatelyP(pm):#中度污染degree = pm - 115if degree < 0:degree = 0degree -= 35if degree > 0:degree = 35else:degree += 35return degree
def heavilyP(pm):#重度污染degree = pm - 150if degree < 0:degree = 0degree -= 100if degree > 0:degree = 100else:degree += 100return degree
#成都
#PM_Caotangsi列
cd_cts = PM(cd,'day','PM_Caotangsi')
PM_Caotangsi = np.array(cd_cts['PM_Caotangsi'])
#PM_Shahepu列
cd_shp = PM(cd,'day','PM_Shahepu')
PM_Shahepu = np.array(cd_shp['PM_Shahepu'])
cd_pm = (PM_Shahepu+PM_Caotangsi)/2
cd_pm_good = good(cd_pm)
cd_pm_moderate = moderate(cd_pm)
cd_pm_lightlyP = lightlyP(cd_pm)
cd_pm_moderatelyP = moderatelyP(cd_pm)
cd_pm_heavilyP = heavilyP(cd_pm)
#北京
#PM_Dongsi列
bj_ds = PM(bj,'day','PM_Dongsi')
PM_Dongsi = np.array(bj_ds['PM_Dongsi'])
#PM_Dongsihuan列
bj_dsh = PM(bj,'day','PM_Dongsihuan')
PM_Dongsihuan = np.array(bj_dsh['PM_Dongsihuan'])
#PM_Nongzhanguan列
bj_nzg = PM(bj,'day','PM_Nongzhanguan')
PM_Nongzhanguan = np.array(bj_nzg['PM_Nongzhanguan'])
bj_pm = (PM_Dongsi+PM_Dongsihuan+PM_Nongzhanguan)/3
bj_pm_good = good(bj_pm)
bj_pm_moderate = moderate(bj_pm)
bj_pm_lightlyP = lightlyP(bj_pm)
bj_pm_moderatelyP = moderatelyP(bj_pm)
bj_pm_heavilyP = heavilyP(bj_pm)
#沈阳
#PM_Taiyuanjie列
sy_tyj = PM(sy,'day','PM_Taiyuanjie')
PM_Taiyuanjie = np.array(sy_tyj['PM_Taiyuanjie'])
#PM_Xiaoheyan列
sy_xhy = PM(sy,'day','PM_Xiaoheyan')
PM_Xiaoheyan = np.array(sy_xhy['PM_Xiaoheyan'])
sy_pm = (PM_Taiyuanjie+PM_Xiaoheyan)/2
sy_pm_good = good(sy_pm)
sy_pm_moderate = moderate(sy_pm)
sy_pm_lightlyP = lightlyP(sy_pm)
sy_pm_moderatelyP = moderatelyP(sy_pm)
sy_pm_heavilyP = heavilyP(sy_pm)
#广州
#PM_City Station列
gz_cs = PM(gz,'day','PM_City Station')
PM_CityStation = np.array(gz_cs['PM_City Station'])
#PM_5th Middle School列
gz_ms = PM(gz,'day','PM_5th Middle School')
PM_5thMiddleSchool = np.array(gz_ms['PM_5th Middle School'])
gz_pm = (PM_CityStation+PM_5thMiddleSchool)/2
gz_pm_good = good(gz_pm)
gz_pm_moderate = moderate(gz_pm)
gz_pm_lightlyP = lightlyP(gz_pm)
gz_pm_moderatelyP = moderatelyP(gz_pm)
gz_pm_heavilyP = heavilyP(gz_pm)
#上海
#PM_Jingan列
sh_jg = PM(sh,'day','PM_Jingan')
PM_Jingan = np.array(sh_jg['PM_Jingan'])
#PM_Xuhui列
sh_xh = PM(sh,'day','PM_Xuhui')
PM_Xuhui = np.array(sh_xh['PM_Xuhui'])
sh_pm = (PM_Jingan+PM_Xuhui)/2
sh_pm_good = good(sh_pm)
sh_pm_moderate = moderate(sh_pm)
sh_pm_lightlyP = lightlyP(sh_pm)
sh_pm_moderatelyP = moderatelyP(sh_pm)
sh_pm_heavilyP = heavilyP(sh_pm)
#输出
#条形图bar_width = 0.1
x = [0.2,0.4,0.6,0.8,1]plt.bar(x[0],cd_pm_good, width=bar_width,alpha=0.1,color='teal')
plt.bar(x[0],cd_pm_moderate, width=bar_width,bottom=cd_pm_good,alpha=0.4,color='teal')
plt.bar(x[0],cd_pm_lightlyP, width=bar_width,bottom=cd_pm_good+cd_pm_moderate,alpha=0.6,color='teal')
p1 = plt.bar(x[0],cd_pm_moderatelyP, width=bar_width,bottom=cd_pm_good+cd_pm_moderate+cd_pm_lightlyP,alpha=0.8,color='teal')
plt.bar(x[1],bj_pm, width=bar_width,alpha=0.2,color='seagreen')
plt.bar(x[1],bj_pm_moderate, width=bar_width,bottom=bj_pm_good,alpha=0.4,color='seagreen')
plt.bar(x[1],bj_pm_lightlyP, width=bar_width,bottom=bj_pm_good+bj_pm_moderate,alpha=0.6,color='seagreen')
p2 = plt.bar(x[1],bj_pm_moderatelyP, width=bar_width,bottom=bj_pm_good+bj_pm_moderate+bj_pm_lightlyP,alpha=0.8,color='seagreen')
plt.bar(x[2],sy_pm, width=bar_width,alpha=0.2,color='khaki')
plt.bar(x[2],sy_pm_moderate, width=bar_width,bottom=sy_pm_good,alpha=0.4,color='khaki')
plt.bar(x[2],sy_pm_lightlyP, width=bar_width,bottom=sy_pm_good+sy_pm_moderate,alpha=0.6,color='khaki')
p3 = plt.bar(x[2],sy_pm_moderatelyP, width=bar_width,bottom=sy_pm_good+sy_pm_moderate+sy_pm_lightlyP,alpha=0.8,color='khaki')
plt.bar(x[3],gz_pm, width=bar_width,alpha=0.2,color='orange')
plt.bar(x[3],gz_pm_moderate, width=bar_width,bottom=gz_pm_good,alpha=0.4,color='orange')
plt.bar(x[3],gz_pm_lightlyP, width=bar_width,bottom=gz_pm_good+gz_pm_moderate,alpha=0.6,color='orange')
p4 = plt.bar(x[3],gz_pm_moderatelyP, width=bar_width,bottom=gz_pm_good+gz_pm_moderate+gz_pm_lightlyP,alpha=0.8,color='orange')
plt.bar(x[4],sh_pm, width=bar_width,alpha=0.2,color='lightsalmon')
plt.bar(x[4],sh_pm_moderate, width=bar_width,bottom=sh_pm_good,alpha=0.4,color='lightsalmon')
plt.bar(x[4],sh_pm_lightlyP, width=bar_width,bottom=sh_pm_good+sh_pm_moderate,alpha=0.6,color='lightsalmon')
p5 = plt.bar(x[4],sh_pm_moderatelyP, width=bar_width,bottom=sh_pm_good+sh_pm_moderate+sh_pm_lightlyP,alpha=0.8,color='lightsalmon')
#显示数值
pm = [cd_pm,bj_pm,sy_pm,gz_pm,sh_pm]
for a,b in zip(x,pm):plt.text(a,b+0.5,'%.2f'%b,ha='center',va='bottom',fontsize=20)
# plt.plot(x,pm,color='b', linestyle='--')
plt.legend((p1[0],p2[0],p3[0],p4[0],p5[0]),('成都','北京','沈阳','广州','上海'),fontsize=20)
plt.xticks(x,("成都","北京","沈阳","广州","上海"),fontsize=20)
y = [0,0,35,75,115,150]
plt.yticks(y,("0","优\n(0~35)","良\n(35~75)","轻度污染\n(75~115)","中度污染\n(115~150)","重度污染\n(150~250)"),fontsize=20)
plt.title(u"五城PM2.5日均值",fontsize=23)
plt.xlabel(u'城市',fontsize=22,verticalalignment='top',horizontalalignment='left', x=1,labelpad=-10)
plt.ylabel(u'污染程度',fontsize=23,rotation='horizontal',verticalalignment='top',horizontalalignment='left', y=1.07)
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.grid(alpha=0.4)
plt.show()

从中我们可以看出广州的空气质量是五个城市里最好的,上海仅次于广州;而北京的空气质量是最差的;成都和沈阳的空气质量不相上下,处于中等水平。

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

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

相关文章

Python进程之并行与并发的区别

并行 : 当系统有一个以上CPU时&#xff0c;则进程的操作有可能非并发。当一个CPU执行一个进程时&#xff0c;另一个CPU可以执行另一个进程&#xff0c;两个进程互不抢占CPU资源&#xff0c;可以同时进行&#xff0c;这种方式我们称之为并行。 并发 : 当有多个进程在操作时&…

Optimism Collective 为 Covalent Network(CQT)提供价值 20 万美元的生态系统资助

Covalent Network&#xff08;CQT&#xff09; 是 Web3 生态系统中关键的“数据可用性”层&#xff0c;在与 Optimism Collective 多年的合作中取得了骄人的成果。Covalent Network&#xff08;CQT&#xff09;对于 Optimism 跨链数据的增长产生了直接的影响&#xff0c;而这一…

第三百一十五回

文章目录 1. 概念介绍2. 基本用法3. 补充用法4. 内容总结 我们在上一章回中介绍了"再谈ListView中的分隔线"&#xff0c;本章回中将介绍showMenu的用法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在第一百六十三回中介绍了showMenu相关的内容…

一图窥探RAG技术发展现状

2023年除了大语言模型&#xff0c;听到最多的当属RAG&#xff08;检索增强生成技术了&#xff09;&#xff0c;在实际业务场景落地过程中&#xff0c;由于大模型目前的一定局限和能力现状以及Token限制、训练成本等多种因素的影响下&#xff0c;RAG不得不成为大家选择快速试错、…

学习前端的开始

什么是前端 Web前端&#xff0c;用来直接给用户呈现一个一个的网页一个软件通常情况下是由后端前端完成。 后端通常情况下通过Java,C这样一个编程语言来完成一个相关的逻辑处理&#xff0c;将数据返回给前端。 前端的工作把后端返回给自己的数据进行一系列拼装/组装之后&#…

6、5 门关于 AI 和 ChatGPT 的免费课程,带您从 0-100

5 门关于 AI 和 ChatGPT 的免费课程,带您从 0-100 想在 2024 年免费了解有关 AI 和 ChatGPT 的更多信息吗? 图片由 DALLE 3 提供 活着是多么美好的时光啊。还有什么比现在更适合了解生成式人工智能(尤其是 ChatGPT)等人工智能元素的呢!许多人对这个行业感兴趣,但有些…

RK3588平台开发系列讲解(AI 篇)什么是NPU

文章目录 一、什么是NPU二、什么是RKNPU沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解什么是NPU。 一、什么是NPU 📢什么是 NPU 呢? 在谈这个问题之前,可以先来看看什么是 CPU 和 GPU,CPU 就是中央处理器,中央处理器就好像是人类的大脑,主要负…

MySQL进阶45讲【15】“order by“是怎么工作的?

1 前言 在开发应用的时候&#xff0c;一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例&#xff0c;假设要查询城市是“杭州”的所有人名字&#xff0c;并且按照姓名排序返回前1000个人的姓名、年龄。 假设这个表的部分定义是这样…

政安晨:快速学会~机器学习的Pandas数据技能(三)(重命名与合并)

使用机器学习处理数据的第一步就得先理解它&#xff0c;咱们现在就帮助它们一起理解起来。 &#xff08;本篇文章这次换一套数据集&#xff0c;数据文件可以在文章头部下载&#xff0c;并保存至您的虚拟环境的目录中&#xff09; 不知道如何搭建环境的小伙伴请看我机器学习笔…

文件上传总结:用原生解决前端文件上传操作(单个,多个,大文件切片)

目录 第一章 前言 第二章 理解文件上传的对象 2.1 如何利用原生实现 2.2 认识理解文件上传的四个对象 2.2.1 file对象 2.2.2 blob对象 2.2.3 formData对象 2.2.4 fileReader对象 2.2.4.1 了解fileReader对象基本属性 2.2.4.2 了解 fileReader对象基本方法 2.2.4.3…

【高阶数据结构】位图布隆过滤器

文章目录 1. 位图1.1什么是位图1.2为什么会有位图1.3 实现位图1.4 位图的应用 2. 布隆过滤器2.1 什么是布隆过滤器2.2 为什么会有布隆过滤器2.3 布隆过滤器的插入2.4 布隆过滤器的查找2.5 布隆过滤器的模拟实现2.6 布隆过滤器的优点2.7 布隆过滤器缺陷 3. 海量数据面试题3.1 哈…

mysql 对于null字段排序处理

最近遇到一个需求 &#xff0c;需要对一个报表的多个字段进行多字段复杂条件排序 排序字段为NULL时 Mysql对于排序字段为NULL时&#xff0c;有自身默认的排序规则&#xff0c;默认是认为null 值 是无穷小 ELECT id,script_id,last_modified,live_count,next_show FROM virtua…

Kubernetes 简介

&#x1f4ce;k8s 入门到微服务项目实战.xmindhttps://www.yuque.com/attachments/yuque/0/2024/xmind/35457682/1707117691869-1ea2805d-7218-4223-a0a9-877147ca84b2.xmind 目录 1、概念介绍 应用部署的演变 Kubernetes 架构图 分层架构 2、Kubernetes 组件 控制面板组…

@PostMapping/ @GetMapping等请求格式

目录 1.只传一个参数的 第一种 第二种 第三种:表单 2.传整个对象的 2.1修改实体类就是传整个对象过来 2.2新增实体类就是传整个对象过来新增 1.只传一个参数的 第一种 PostMapping("/add/{newsId}")public Result addOne(PathVariable Integer newsId) {}pos…

【GAMES101】Lecture 19 透镜

目录 理想的薄透镜 模糊 利用透镜模型做光线追踪 景深&#xff08;Depth of Field&#xff09; 理想的薄透镜 在实际的相机中都是用的一组透镜来作为这个镜头 这个因为真实的棱镜无法将光线真正聚焦到一个点上&#xff0c;它只能聚在一堆上 所以方便研究提出了一种理想化的…

vue3 解决ionic安卓版顶部状态栏空白问题

问题展示&#xff1a; 解决&#xff1a;引入capacitor/status-bar npm install capacitor/status-bar npx cap sync在需要设置状态栏的组件上设置背景跟颜色即可

spring boot整合 cache 以redis服务 处理数据缓存 便捷开发

我们常规开发中 就是程序去数据库取数据 然后返回给客户端 但是 如果有些业务业务量非常庞大 不断访问数据库 性能就会非常糟糕 从而造成不好的用户体验 那么 我们自然就可以将数据查到缓存中 然后 用户访问 从缓存中取 这样就会大大提高用户的访问效率 之前 我的文章 java …

vue3集成bpmn

文章目录 前言一、依赖二、汉化配置1.引入文件2.样式文件 总结 前言 vue3 集成bpmn 配置工作流 一、依赖 "bpmn-js": "^7.3.1", "bpmn-js-properties-panel": "^0.37.2", "bpmn-moddle": "^6.0.0", "camu…

C#,聚会数(相遇数,Rencontres Number)的算法与源代码

1 相遇数 相遇数&#xff08;Rencontres Number&#xff0c;partial derangement numbers&#xff09;是指部分扰动的数量&#xff0c;或与独立对象的r相遇的置换数&#xff08;即具有固定点的独立对象的置换数&#xff09;。 看不通。懂的朋友给解释一下哈。 2 源程序 using…

DC-8靶机渗透详细流程

信息收集&#xff1a; 1.存活扫描&#xff1a; arp-scan -I eth0 -l └─# arp-scan -I eth0 -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:dd:ee:6a, IPv4: 192.168.10.129 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.10…