python空气质量指数计算_Python入门案例(八):空气质量指数(AQI)计算
一、空气质量指数计算V1.0
主要知识点:分支结构、函数、异常处理# -*- coding:utf-8 -*-
"""
@author:Angel
@file:AQI_V1.0.py
@time:2018/11/28 14:29
@1.0功能:AQI计算
"""
def cal_linear(iaqi_lo, iaqi_hi, bp_lo, bp_hi, cp):
# 线性缩放
iaqi = (iaqi_hi - iaqi_lo) * (cp - bp_lo) / (bp_hi - bp_lo) +iaqi_lo
return iaqi
def cal_pm_iaqi(pm_val):
# 计算PM2.5的IAQI
if 0 <= pm_val < 36:
iaqi = cal_linear(0, 50, 0, 35, pm_val)
elif 36 <= pm_val < 76:
iaqi = cal_linear(50, 100, 35, 75, pm_val)
elif 76 <= pm_val < 116:
iaqi = cal_linear(100, 150, 75, 115, pm_val)
elif 116 <= pm_val < 151:
iaqi = cal_linear(150, 200, 115, 150, pm_val)
elif 151 <= pm_val < 251:
iaqi = cal_linear(200, 300, 150, 250, pm_val)
elif 251 <= pm_val < 351:
iaqi = cal_linear(300, 400, 250, 350, pm_val)
elif 351 <= pm_val < 501:
iaqi = cal_linear(400, 500, 350, 500, pm_val)
else:
pass
return iaqi
def cal_co_iaqi(co_val):
# 计算co的IAQI
if 0 <= co_val < 3:
iaqi = cal_linear(0, 50, 0, 2, co_val)
elif 3 <= co_val < 5:
iaqi = cal_linear(50, 100, 2, 4, co_val)
elif 5 <= co_val < 15:
iaqi = cal_linear(100, 150, 4, 14, co_val)
elif 15 <= co_val < 25:
iaqi = cal_linear(150, 200, 14, 24, co_val)
elif 25 <= co_val < 37:
iaqi = cal_linear(200, 300, 24, 36, co_val)
elif 37 <= co_val < 49:
iaqi = cal_linear(300, 400, 36, 48, co_val)
elif 49 <= co_val < 61:
iaqi = cal_linear(400, 500, 48, 60, co_val)
else:
pass
return iaqi
def cal_aqi(param_list):
# AQI计算
pm_val = param_list[0]
co_val = param_list[1]
pm_iaqi = cal_pm_iaqi(pm_val)
co_iaqi = cal_co_iaqi(co_val)
iaqi_list = []
iaqi_list.append(pm_iaqi)
iaqi_list.append(co_iaqi)
AQI = max(iaqi_list)
return AQI
def main():
print('请输入以下信息,用空格分隔:')
input_str = input('(1)PM2.5 (2)co:')
str_list = input_str.split(' ')
pm_val = float(str_list[0])
co_val = float(str_list[1])
param_list = []
param_list.append(pm_val)
param_list.append(co_val)
# 调用AQI计算函数
aqi_val = cal_aqi(param_list)
print('空气质量指数(AQI):{}'.format(aqi_val))
if __name__ == '__main__':
main()
二、空气质量指数计算V2.0
主要知识点:JSON文件格式及操作:JSON是一种轻量级数据交换格式,可以对复杂数据进行表达和存储,易于阅读和理解。数据保存在键值对中,键值对之间由逗号分隔,花括号用于保存键值对数据组成的对象,方括号用户保存键值对数据组成的数组;采用对象、数组方式组织起来的键值对可以表示任何结构的数据JSON库是处理JSON数据格式的Python标准库,两个过程:编码(encoding),将Python数据类型转换成JSON格式的过程;解码(decoding),从JSON格式中解析数据对应到Python数据类型的过程# -*- coding:utf-8 -*-
"""
@author:Angel
@file:AQI_V2.0.py
@time:2018/11/28 14:29
@1.0功能:AQI计算
@2.0功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
"""
import json
def process_json_file(filepath):
# 解码JSON文件
f = open(filepath, mode='r', encoding='utf-8')
city_list = json.load(f)
return city_list
def main():
filepath = input('请输入JSON文件名称:')
city_list = process_json_file(filepath)
city_list.sort(key=lambda city: city['aqi'])
top5_list = city_list[:5]
f = open('top5_aqi.json', mode='w', encoding='utf-8')
json.dump(top5_list, f, ensure_ascii=False)
f.close()
if __name__ == '__main__':
main()
三、空气质量指数计算V3.0
主要知识点:CSV是一种通用的、相对简单的文件格式,以行为单位,每行表示一条记录,以英文逗号分隔每列数据,列名通常放置在文件第一行# -*- coding:utf-8 -*-
"""
@author:Angel
@file:AQI_V3.0.py
@time:2018/11/28 14:29
@1.0功能:AQI计算
@2.0功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
@3.0功能:读取已经获取的JSON数据文件,并将其转换成CSV文件
"""
import json
import csv
def process_json_file(filepath):
# 解码JSON文件
f = open(filepath, mode='r', encoding='utf-8')
city_list = json.load(f)
return city_list
def main():
filepath = input('请输入JSON文件名称:')
city_list = process_json_file(filepath)
city_list.sort(key=lambda city: city['aqi'])
lines = []
# 列名
lines.append(list(city_list[0].keys()))
# 数据
for city in city_list:
lines.append(list(city.values()))
f = open('aqi.csv', 'w', encoding='utf-8', newline='')
writer = csv.writer(f)
for line in lines:
writer.writerow(line)
f.close()
if __name__ == '__main__':
main()
四、空气质量指数计算V4.0
主要知识点:os模块:提供了与系统、目录操作相关的功能,不受平台的限制使用with语句操作文件对象,不管在处理文件过程中是否发生异常,都能保证with语句执行完毕后关闭文件,不需要close()语句# -*- coding:utf-8 -*-
"""
@author:Angel
@file:AQI_V4.0.py
@time:2018/11/28 14:29
@1.0功能:AQI计算
@2.0功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
@3.0功能:读取已经获取的JSON数据文件,并将其转换成CSV文件
@4.0功能:根据输入的文件判断是JSON格式还是CSV格式,并进行相应的操作
"""
import json
import csv
import os
def process_json_file(filepath):
# 处理JSON文件
with open(filepath, mode='r', encoding='utf-8') as f:
city_list = json.load(f)
print(city_list)
def process_csv_file(filepath):
# 处理CSV文件
with open(filepath, mode='r', encoding='utf-8', newline='') as f:
reader = csv.reader(f)
for row in reader:
print(', '.join(row))
def main():
filepath = input('请输入文件名称:')
filename, file_ext = os.path.splitext(filepath)
if file_ext == '.json':
# json文件
process_json_file(filepath)
elif file_ext == '.csv':
# CSV文件
process_csv_file(filepath)
else:
print('不支持该文件格式!')
if __name__ == '__main__':
main()
五、空气质量指数计算V5.0
主要知识点:网络爬虫是自助抓取互联网信息的程序:通过网络链接获取网页内容,对获得的网页内容进行处理requests模块:一个简洁且简单的处理HTTP请求的工具,支持丰富的链接访问功能,包括URL获取,HTTP会话,cookie记录等。# -*- coding:utf-8 -*-
"""
@author:Angel
@file:AQI_V5.0.py
@time:2018/11/28 14:29
@1.0功能:AQI计算
@2.0功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
@3.0功能:读取已经获取的JSON数据文件,并将其转换成CSV文件
@4.0功能:根据输入的文件判断是JSON格式还是CSV格式,并进行相应的操作
@5.0功能:利用网络爬虫实时获取城市的空气质量指数
"""
import requests
def get_html_text(url):
# 返回URL的文本
r = requests.get(url, timeout=30)
# print(r.status_code)
return r.text
def main():
city_pinyin = input('请输入城市拼音:')
url = 'http://pm25.in/' + city_pinyin
url_text = get_html_text(url)
# print(url_text)
aqi_div = '''
'''
index = url_text.find(aqi_div)
begin_index = index + len(aqi_div)
end_index = begin_index + 3
aqi_val = url_text[begin_index: end_index]
print('空气质量为:{}'.format(aqi_val))
if __name__ == '__main__':
main()
六、空气质量指数计算V6.0
主要知识点:BeautifulSoup解析网页:用于解析HTML或XML# -*- coding:utf-8 -*-
"""
@author:Angel
@file:AQI_V6.0.py
@time:2018/11/28 14:29
@1.0功能:AQI计算
@2.0功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
@3.0功能:读取已经获取的JSON数据文件,并将其转换成CSV文件
@4.0功能:根据输入的文件判断是JSON格式还是CSV格式,并进行相应的操作
@5.0功能:利用网络爬虫实时获取城市的空气质量指数
@6.0功能:利用beautifulsoup4获取所有城市的空气质量
"""
import requests
from bs4 import BeautifulSoup
def get_city_aqi(city_pinyin):
# 解析URL,获取城市的AQI
url = 'http://pm25.in/' + city_pinyin
r = requests.get(url, timeout=30)
soup = BeautifulSoup(r.text, 'lxml')
div_list = soup.find_all('div', {'class': 'span1'})
city_aqi = []
for i in range(8):
div_content = div_list[i]
caption = div_content.find('div', {'class': 'caption'}).text.strip() # strip()去空格
value = div_content.find('div', {'class': 'value'}).text.strip()
city_aqi.append((caption, value))
return city_aqi
def main():
city_pinyin = input('请输入城市拼音:')
city_aqi = get_city_aqi(city_pinyin)
print('空气质量为:{}'.format(city_aqi))
if __name__ == '__main__':
main()
七、空气质量指数计算V7.0
主要知识点:BeautifulSoup库的使用# -*- coding:utf-8 -*-
"""
@author:Angel
@file:AQI_V7.0.py
@time:2018/11/28 14:29
@1.0功能:AQI计算
@2.0功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
@3.0功能:读取已经获取的JSON数据文件,并将其转换成CSV文件
@4.0功能:根据输入的文件判断是JSON格式还是CSV格式,并进行相应的操作
@5.0功能:利用网络爬虫实时获取城市的空气质量指数
@6.0功能:利用beautifulsoup4获取所有城市的空气质量
@7.0功能:获取所有城市空气质量数据
"""
import requests
from bs4 import BeautifulSoup
def get_city_aqi(city_pinyin):
# 解析URL,获取城市的AQI
url = 'http://pm25.in/' + city_pinyin
r = requests.get(url, timeout=30)
soup = BeautifulSoup(r.text, 'lxml')
div_list = soup.find_all('div', {'class': 'span1'})
city_aqi = []
for i in range(8):
div_content = div_list[i]
caption = div_content.find('div', {'class': 'caption'}).text.strip() # strip()去空格
value = div_content.find('div', {'class': 'value'}).text.strip()
city_aqi.append((caption, value))
return city_aqi
def get_all_cities():
# 获取所有城市
url = 'http://pm25.in/'
city_list = []
r = requests.get(url, timeout=30)
soup = BeautifulSoup(r.text, 'lxml')
city_div = soup.find_all('div', {'class': 'bottom'})[1]
city_link_list = city_div.find_all('a')
for city_link in city_link_list:
city_name = city_link.text
city_pinyin = city_link['href'][1:]
city_list.append((city_name, city_pinyin))
return city_list
def main():
city_list = get_all_cities()
for city in city_list:
city_name = city[0]
city_pinyin = city[1]
city_aqi = get_city_aqi(city_pinyin)
print(city_name, city_aqi)
if __name__ == '__main__':
main()
八、空气质量指数计算V8.0
主要知识点:BeautifulSoup和CSV结合,实现完整的网络爬虫# -*- coding:utf-8 -*-
"""
@author:Angel
@file:AQI_V8.0.py
@time:2018/11/28 14:29
@1.0功能:AQI计算
@2.0功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
@3.0功能:读取已经获取的JSON数据文件,并将其转换成CSV文件
@4.0功能:根据输入的文件判断是JSON格式还是CSV格式,并进行相应的操作
@5.0功能:利用网络爬虫实时获取城市的空气质量指数
@6.0功能:利用beautifulsoup4获取所有城市的空气质量
@7.0功能:获取所有城市空气质量数据
@8.0功能:将获取的所有城市空气质量保存成CSV数据文件
"""
import requests
from bs4 import BeautifulSoup
import csv
def get_city_aqi(city_pinyin):
# 解析URL,获取城市的AQI
url = 'http://pm25.in/' + city_pinyin
r = requests.get(url, timeout=30)
soup = BeautifulSoup(r.text, 'lxml')
div_list = soup.find_all('div', {'class': 'span1'})
city_aqi = []
for i in range(8):
div_content = div_list[i]
# caption = div_content.find('div', {'class': 'caption'}).text.strip() # strip()去空格
value = div_content.find('div', {'class': 'value'}).text.strip()
city_aqi.append(value)
return city_aqi
def get_all_cities():
# 获取所有城市
url = 'http://pm25.in/'
city_list = []
r = requests.get(url, timeout=30)
soup = BeautifulSoup(r.text, 'lxml')
city_div = soup.find_all('div', {'class': 'bottom'})[1]
city_link_list = city_div.find_all('a')
for city_link in city_link_list:
city_name = city_link.text
city_pinyin = city_link['href'][1:]
city_list.append((city_name, city_pinyin))
return city_list
def main():
city_list = get_all_cities()
header = ['city', 'AQI', 'PM2.5/1h', 'PM10/1h', 'CO/1h', 'NO2/1h', 'O3/1h', 'O3/8h', 'SO2/1h']
with open('china_city_aqi.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(header)
for i, city in enumerate(city_list):
if (i+1) % 10 == 0:
print('已处理第{}条记录,共{}条记录'.format(i+1, len(city_list)))
city_name = city[0]
city_pinyin = city[1]
city_aqi = get_city_aqi(city_pinyin)
row = [city_name] + city_aqi
writer.writerow(row)
if __name__ == '__main__':
main()
九、空气质量指数计算V9.0
主要知识点:pandas模块:强大的分析结构化数据的工具集,基础是numpy,提高了高性能矩阵的运算,主要应用于数据分析和数据挖掘,提供数据清洗功能# -*- coding:utf-8 -*-
"""
@author:Angel
@file:AQI_V9.0.py
@time:2018/11/28 14:29
@1.0功能:AQI计算
@2.0功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
@3.0功能:读取已经获取的JSON数据文件,并将其转换成CSV文件
@4.0功能:根据输入的文件判断是JSON格式还是CSV格式,并进行相应的操作
@5.0功能:利用网络爬虫实时获取城市的空气质量指数
@6.0功能:利用beautifulsoup4获取所有城市的空气质量
@7.0功能:获取所有城市空气质量数据
@8.0功能:将获取的所有城市空气质量保存成CSV数据文件
@9.0功能:利用pandas进行数据处理分析
"""
import pandas as pd
def main():
aqi_data = pd.read_csv('china_city_aqi.csv')
print('基本信息:')
print(aqi_data.info())
print('数据预览:')
print(aqi_data.head(5))
# print(aqi_data[['city', 'AQI']])
# 基本统计
print('AQI最大值', aqi_data['AQI'].max())
print('AQI最小值', aqi_data['AQI'].min())
print('AQI均值', aqi_data['AQI'].mean())
# top10
top10_cities = aqi_data.sort_values(by=['AQI']).head(10) # 默认升序排列
print('空气质量最好的10个城市:')
print(top10_cities)
# bottom10
# bottom10_cities = aqi_data.sort_values(by=['AQI']).tail(10)
bottom10_cities = aqi_data.sort_values(by=['AQI'], ascending=False).head(10)
print('空气质量最差的10个城市:')
print(bottom10_cities)
# 保存CSV文件
top10_cities.to_csv('top10_aqi.csv', index=False)
bottom10_cities.to_csv('bottom10_aqi.csv', index=False)
if __name__ == '__main__':
main()
十、空气质量指数计算V10.0
主要知识点:用pandas模块进行数据可视化数据清洗# -*- coding:utf-8 -*-
"""
@author:Angel
@file:AQI_V10.0.py
@time:2018/11/28 14:29
@1.0功能:AQI计算
@2.0功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
@3.0功能:读取已经获取的JSON数据文件,并将其转换成CSV文件
@4.0功能:根据输入的文件判断是JSON格式还是CSV格式,并进行相应的操作
@5.0功能:利用网络爬虫实时获取城市的空气质量指数
@6.0功能:利用beautifulsoup4获取所有城市的空气质量
@7.0功能:获取所有城市空气质量数据
@8.0功能:将获取的所有城市空气质量保存成CSV数据文件
@9.0功能:利用pandas进行数据处理分析
@10.0功能:数据清洗,利用pandas进行数据可视化
"""
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def main():
aqi_data = pd.read_csv('china_city_aqi.csv')
print('基本信息:')
print(aqi_data.info())
print('数据预览:')
print(aqi_data.head(5))
# print(aqi_data[['city', 'AQI']])
# 数据清洗,只保留AQI大于0的数据
filter_condition = aqi_data['AQI'] > 0
clean_aqi_data = aqi_data[filter_condition]
# 基本统计
print('AQI最大值', clean_aqi_data['AQI'].max())
print('AQI最小值', clean_aqi_data['AQI'].min())
print('AQI均值', clean_aqi_data['AQI'].mean())
# top50
top50_cities = clean_aqi_data.sort_values(by=['AQI']).head(50) # 默认升序排列
top50_cities.plot(kind='bar', x='city', y='AQI', title='空气质量最好的50个城市', figsize=(20, 10))
# 图片保存
plt.savefig('top50_AQI_bar.png')
plt.show()
if __name__ == '__main__':
main()
图形如下:
python空气质量指数计算_Python入门案例(八):空气质量指数(AQI)计算相关推荐
- Python:Scrapy的安装和入门案例
Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...
- python整数加法计算器_Python应用实例赏析2.1简单计算
在日常应用中,我们会经常使用计算器进行计算,有些时候普通计算器的功能不能满足需要,例如使用计算机系统自带的计算器,计算不能超过32位数,手机自带计算器不能超过15位等(我的电脑和手机),也可能计算需要 ...
- python程序设计知识点汇总_Python入门知识点汇总
Python的设计目标之一是让代码具备高度的可阅读性.它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观.它不像其他的静态语言如C.Pascal那样需要重复书写声明语句,也不像 ...
- python中exp函数_python中exp函数如何实现指数计算?
原标题:python中exp函数如何实现指数计算? 之前小编向大家介绍过python中的对数函数log函数(https://www.py.cn/jishu/jichu/21780.html),对于有点 ...
- python起源的故事_Python入门:在红遍全宇宙之前的小故事
原标题:Python入门:在红遍全宇宙之前的小故事 人工智能风靡全宇宙,Python是当今最火的语言,那么小白们了解它台前幕后的小故事吗? 一.python的起源 说到Python,它的诞生是极具戏曲 ...
- python乘法表运算_Python入门教程(三):史上最全的Numpy计算函数总结,建议收藏!...
点击上方 蓝字 关注我们 Numpy提供了灵活的.静态类型的.可编译的程序接口口来优化数组的计算,也被称作向量操作,因此在Python数据科学界Numpy显得尤为重要.Numpy的向量操作是通过通用函 ...
- python汇率程序_Python入门案例(一):汇率兑换
一.汇率兑换V1.0 主要知识点:注释:说明信息,是不被执行的,单行注释用#,多行注释用三个单引号 命名:命名只能使用字母.数字和下划线:且须保证命名的唯一性:且不能以数字开头,Python是区分字母 ...
- python实现循环注册登录_Python入门案例-用户注册和登录
3. import xlwt 4. import re 5. 6. # from xlutils.copy import copy 7. 8. filepath = "./users.xls ...
- python学生名片系统_Python入门教程完整版400集(懂中文就能学会)快来带走
如何入门Python?权威Python大型400集视频,学了Python可以做什么? 小编今天给大家分享一套高老师的python400集视频教程,里面包含入门进阶,源码,实战项目等等,,不管你是正在学 ...
最新文章
- 用JavaScript获取URL中的参数值
- SAP RETAIL WB02 为门店激活物料分类账报错 - ML currencies are not integrated in FI for valuation area m123 NMI1 –
- logo语言linux,用 screenfetch 和 linux_logo 显示带有酷炫 Linux 标志的基本硬件信息
- 姚文详(Joseph Yiu):《ARM Cortex-M0权威指南》中文版目录
- mysql慢查询分析
- VTK:可视化之MovableAxes
- 「禾连健康」轻松实现弹性降本20%以上,竟然是因为使用了它!
- 大话设计模式—中介者模式
- 使用pip安装virtualenv时出现问题
- delphi framerect 画透明_闭上眼睛一起进入彩色画的梦境,幻彩花精灵,彩铅手绘教程...
- 给现有MVC 项目添加 WebAPI
- 算法导论课后习题答案
- R语言报错:Error in scan
- welearn考试切屏会有显示吗_welearn班级测试答案
- 1218. 最长定差子序列【我亦无他唯手熟尔】
- 7-2 养兔子 (20 分)
- 阿里云创始人王坚:别人可以背弃理想,我不可以
- Unity | Unity中UI框架的实现与使用
- 深航App劫持微信;Apple News上线首日遭遇各种崩溃;华为P30“望远镜手机”正式发布 | 雷锋早报...
- 手动修改Spyder的背景颜色(手动配色)