一、空气质量指数计算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)计算相关推荐

  1. Python:Scrapy的安装和入门案例

    Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...

  2. python整数加法计算器_Python应用实例赏析2.1简单计算

    在日常应用中,我们会经常使用计算器进行计算,有些时候普通计算器的功能不能满足需要,例如使用计算机系统自带的计算器,计算不能超过32位数,手机自带计算器不能超过15位等(我的电脑和手机),也可能计算需要 ...

  3. python程序设计知识点汇总_Python入门知识点汇总

    Python的设计目标之一是让代码具备高度的可阅读性.它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观.它不像其他的静态语言如C.Pascal那样需要重复书写声明语句,也不像 ...

  4. python中exp函数_python中exp函数如何实现指数计算?

    原标题:python中exp函数如何实现指数计算? 之前小编向大家介绍过python中的对数函数log函数(https://www.py.cn/jishu/jichu/21780.html),对于有点 ...

  5. python起源的故事_Python入门:在红遍全宇宙之前的小故事

    原标题:Python入门:在红遍全宇宙之前的小故事 人工智能风靡全宇宙,Python是当今最火的语言,那么小白们了解它台前幕后的小故事吗? 一.python的起源 说到Python,它的诞生是极具戏曲 ...

  6. python乘法表运算_Python入门教程(三):史上最全的Numpy计算函数总结,建议收藏!...

    点击上方 蓝字 关注我们 Numpy提供了灵活的.静态类型的.可编译的程序接口口来优化数组的计算,也被称作向量操作,因此在Python数据科学界Numpy显得尤为重要.Numpy的向量操作是通过通用函 ...

  7. python汇率程序_Python入门案例(一):汇率兑换

    一.汇率兑换V1.0 主要知识点:注释:说明信息,是不被执行的,单行注释用#,多行注释用三个单引号 命名:命名只能使用字母.数字和下划线:且须保证命名的唯一性:且不能以数字开头,Python是区分字母 ...

  8. python实现循环注册登录_Python入门案例-用户注册和登录

    3. import xlwt 4. import re 5. 6. # from xlutils.copy import copy 7. 8. filepath = "./users.xls ...

  9. python学生名片系统_Python入门教程完整版400集(懂中文就能学会)快来带走

    如何入门Python?权威Python大型400集视频,学了Python可以做什么? 小编今天给大家分享一套高老师的python400集视频教程,里面包含入门进阶,源码,实战项目等等,,不管你是正在学 ...

最新文章

  1. 用JavaScript获取URL中的参数值
  2. SAP RETAIL WB02 为门店激活物料分类账报错 - ML currencies are not integrated in FI for valuation area m123 NMI1 –
  3. logo语言linux,用 screenfetch 和 linux_logo 显示带有酷炫 Linux 标志的基本硬件信息
  4. 姚文详(Joseph Yiu):《ARM Cortex-M0权威指南》中文版目录
  5. mysql慢查询分析
  6. VTK:可视化之MovableAxes
  7. 「禾连健康」轻松实现弹性降本20%以上,竟然是因为使用了它!
  8. 大话设计模式—中介者模式
  9. 使用pip安装virtualenv时出现问题
  10. delphi framerect 画透明_闭上眼睛一起进入彩色画的梦境,幻彩花精灵,彩铅手绘教程...
  11. 给现有MVC 项目添加 WebAPI
  12. 算法导论课后习题答案
  13. R语言报错:Error in scan
  14. welearn考试切屏会有显示吗_welearn班级测试答案
  15. 1218. 最长定差子序列【我亦无他唯手熟尔】
  16. 7-2 养兔子 (20 分)
  17. 阿里云创始人王坚:别人可以背弃理想,我不可以
  18. Unity | Unity中UI框架的实现与使用
  19. 深航App劫持微信;Apple News上线首日遭遇各种崩溃;华为P30“望远镜手机”正式发布 | 雷锋早报...
  20. 手动修改Spyder的背景颜色(手动配色)

热门文章

  1. dns远程服务器未响应,dns服务器未响应的解决方法
  2. 快速生成不重复的卡号
  3. 高德地图地位获取地址
  4. 【验证码逆向专栏】某片滑块、点选验证码逆向分析
  5. Airwallex 基于 Flink 打造实时风控系统
  6. 天龙3d服务器维护,天龙八部3D4月6日维护服务器公告
  7. 杭电1070--喝牛奶
  8. 微信小程序案例php,微信小程序实现删除处理的案例
  9. win7设置计算机共享的打印机共享的打印机共享,告诉你win7打印机共享设置教程...
  10. 记一次被QQ邮箱钓鱼邮件事件