同为发展中国家,印度也受到空气质量问题的困扰,本文就以印度的城市为例进行数据分析。利用简单的Python代码,分析城市空气质量及其每天在全国范围内(即印度水平)的排名。
在开始之前,先介绍一下整个分析过程中使用的一些基本原理。印度政府中央污染控制委员会(CPCB)是该国环境空气质量监测的监管机构,每天为那些设有连续环境空气质量监测站的印度城市发布空气质量相关信息公告。该公告包含有特定城市的空气质量指数(AQI)、空气质量类别、标准污染物以及该城市运行的监测站数量相关的信息。本文正是通过分析这个空气质量指数(AQI)来对城市进行排名。
如下所示是对于公告中一些术语的解释:
官员们从AQI公告中实际汇编了感兴趣的城市信息。随着所关注的城市的增加,这项工作变得更加困难,必须在下午6点前报告上级,而公告在每天4点后才发布,这可能会导致无意的人为错误。由于这些原因开发了这套Python代码。这种分析的好处包括减少人工分析的人力,可靠的结果减少了人为的错误,提高了公众的知识水平,提高了政策制定者做出明智选择的能力,包括监测当地空气质量管理的结果等。
导入库numpy、requests、pandas、sys和tabula。requests库是为了从出版商的页面上采集AQI公告。然后tabula库将PDF格式的公告读到数据框中。pandas和numpy用作数据分析和科学计算。
## 导入库
import pandas as pd
import requests
from tabula import read_pdf
import numpy as np
import sys
a)感兴趣的日期(YYYYMMDD格式);
b)下载PDF格式的AQI公告文件的路径;
c)特定城市/感兴趣的城市名单(可选)。
最终分析提供了每日AQI公告中提到的所有城市的排名。然而,在提取特定城市/感兴趣的城市的排名的情况下,可以在c)中提供这些城市的名单。确保与c)中提供的城市相关的信息必须出现于AQI公报中。
## 用户输入
date = input('a) Enter the date of interest (on or after 29th January 2018) in the format YYYYMMDD: ') ##20180129 onwards
pathway = input('b) Define the Pathway address to download the bulletin: ') ##example C:/Users/USER/Downloads
list_of_cities = input('c) Enter the list of cities separated by commas and no space: ') ##Example Mumbai,Bangalore,Kolkata. Disclaimer: Make sure the cities mentioned are present in the Bulletin list
警告:请确保调用的意向日期是在2018年1月29日或之后。
## 日期调用检查
if date<'20180129':
sys.exit('Call the dates on or after 29th January 2018 and re-run the codes')
检查完成后继续进行后续步骤。
使用request库下载AQI公告。使用tabula库以数据帧格式读取下载的pdf文件。如果在用户定义的日期内无法获得AQI公报,运行将被终止。
## 下载公告
k = requests.get('https://cpcb.nic.in//upload/Downloads/AQI_Bulletin_'+str(date)+'.pdf')
if k.status_code==404:
sys.exit('No Bulletin exists for the mentioned date. Please try different date')
with open(pathway+'/AQI_Bulletin_'+str(date)+'.pdf','wb') as f:
f.write(k.content)
## 以数据帧格式读取pdf
pathway = pathway+'/AQI_Bulletin_'+str(date)+'.pdf'
file = read_pdf(pathway,pages='all')
在这里,删除重复的和不适用的数据,重新设置列名,并按AQI的降序对数据框进行排序。包含AQI值的数据框列被命名为“索引”。
## 删除重复的内容
new_file = pd.DataFrame()
for i in range (0, len(file)):
if i%2==0:
extract_file = file[i]
new_file = pd.concat([new_file,extract_file], axis=0)
## 提取列名
k= new_file.loc[0, ]
k.reset_index(inplace=True)
column_names = k.loc[1, ]
column_names = column_names[1: ]
## 重置列
new_file.columns = column_names
##从`new_file`中删除`NA`
new_file.dropna(inplace=True)
## 按AQI的降序对数据帧进行排序
final_file = new_file.loc[(new_file['City']!='City'), ]
final_file['Index Value']= final_file['Index Value'].astype(int)
final_file.sort_values(by='Index Value',ascending=False, inplace=True)
final_file.reset_index(inplace=True)
final_file.drop(columns=['S.No', 'index'], inplace=True)
当天拥有最高AQI值的城市获得最高排名。输出final_file包括根据AQI值在AQI公告中指定的城市的排名。2个或更多具有相同AQI值的城市被提供相同的排名。
## 基于AQI的城市排名
final_file['ranking'] = np.arange(1, len(final_file)+1)
for i in range(0,len(final_file)-1):
if final_file.loc[i,'Index Value']== final_file.loc[(i+1), 'Index Value']:
final_file.loc[(i+1), 'ranking']= final_file.loc[i, 'ranking']
for k in range(i+2,len(final_file)):
final_file.loc[k, 'ranking'] = final_file.loc[k, 'ranking']-1
生成的输出文件名为city_ranking,包含了用户定义的特定城市的所有必要信息。
## 用户定义的城市排名
if len(city_list)> 0:
city_list = list_of_cities.split(',')
city_ranking = final_file.loc[final_file['City'].isin(city_list), ]
首先运行代码。现在输入每个用户定义的预设条件:
输出如下图所示:
输出(city_ranking)显示了用户定义的城市的空气质量状况、指数、主要污染物、监测空气污染的监测站数量和排名。注:在用户定义的分析日期,AQI公报中没有与Bangalore和Vadodara有关的信息,因此没有显示在数据框中。
使用这套代码,可以了解许多有用的内容。例如,使用for循环,就可以使用来自AQI公告库的数据,并查看数据是如何随时间变化的。
本文标题:用Python监控并分析城市空气质量
新闻来源:http://www.shufengxianlan.com/qtweb/news6/340206.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联