1.0版本:

具体代码:

'''
空气质量
版本:1.0
'''def cal_aqi(param_list):'''计算AQI'''pm_val = param_list[0]co_val = param_list[1]pm_iaqi = cal_pm_iaqi(pm_val)     #计算pm2.5的IAQI函数co_iaqi = cal_co_iaqi(co_val)     #计算co的IAQI函数aqi_list = []aqi_list.append(pm_iaqi)aqi_list.append(co_iaqi)val_list = max(aqi_list)return val_listdef 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)else:passreturn iaqidef 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)else:passreturn iaqidef cal_linear(iaqi_lo,iaqi_hi,bp_lo,bp_hi,cp):       #具体的范围缩放函数iaqi = (iaqi_hi - iaqi_lo) * (cp - bp_lo) / (bp_hi - bp_lo) + iaqi_loreturn iaqidef 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_val = cal_aqi(param_list)          #调用AQI函数print('空气质量指数为{}:'.format(aqi_val))if __name__ == '__main__':main()

2.0版本:JSON数据文件操作。

案例描述:1.读取已经获取的json数据文件

2.并将aqi前五的数据输出到文件

具体代码:

'''
空气质量
版本:2.0
'''import jsondef process_json_file(filepath):f = open(filepath,mode='r',encoding='utf-8')    #encoding保证文件读取中文不会乱码city_list = json.load(f)return city_listdef main():'''主函数'''filepath= input('请输入json文件名称:')city_list = process_json_file(filepath)city_list.sort(key=lambda city:city['aqi'])    # 默认按照AQI从小到大排序。sort对列表进行排序top5_list = city_list[:5]        #切片操作,拿到前五个#将top5写入json文件中f = open('top5_aqi.json',mode='w',encoding='utf-8')  #模式为写入json.dump(top5_list, f,ensure_ascii=False)   #ensure_ascii保证不会乱码f.close()print(city_list)if __name__ == '__main__':main()

版本3.0:另一种常用的数据格式CSV

案例描述:1.读取已经获取的json数据文件

2.并将其转换成csv文件

具体代码:

'''
空气质量
版本:3.0
'''import csv
import jsondef process_json_file(filepath):       #读取json文件f = open(filepath,mode='r',encoding='utf-8')    #encoding保证文件读取中文不会乱码city_list = json.load(f)return city_listdef main():'''主函数'''filepath= input('请输入json文件名称:')city_list = process_json_file(filepath)     #调用读取json文件函数city_list.sort(key=lambda city: city['aqi'])# 默认按照AQI从小到大排序。sort对列表进行排序#将数据以csv文件规则放入列表lines中lines = []#列名,表头,第一行数据lines.append(list(city_list[0].keys))for city in city_list:lines.append(list(city_list.value))#存入csv文件f = open('aqi_csv','w',encoding='utf-8',newline=' ')#newline意味着每一个新行末尾是不加任何字符的writer = csv.writer(f)for line in lines:writer.writerow(lines)f.close()if __name__ == '__main__':main()

将csv转换成json: 将csv数据一行一行读取,然后构建一个dictionary,然后dump到json中就可以了。

版本4.0:根据文件扩展名判断是json文件还是csv文件,并进行相应的操作

具体代码:

'''
空气质量
版本:4.0
'''import csv
import json
import osdef process_json_file(filepath):       #读取json文件# f = open(filepath,mode='r',encoding='utf-8')    #encoding保证文件读取中文不会乱码# city_list = json.load(f)# return city_listwith open(filepath,mode='r',encoding='utf-8') as f:city_list = json.load(f)print(city_list)def process_csv_file(filepath):with open(filepath, mode='r', encoding='utf-8',newline=' ') as f:reader = csv.reader(f)  #reader是可以遍历的for row in reader:print(','.join(row))      #row是列表。csv每一行是列表。print(city_list)def main():'''主函数'''filepath= input('请输入文件名称:')filename,file_ext = os.path.splitext(filepath)if file_ext == '.json':#json文件process_json_file(filepath)if file_ext == '.csv':process_csv_file(filepath)else:print('不支持的文件格式')if __name__ == '__main__':main()

版本5.0:1.网络爬虫入门

2.实时获取城市的AQI

网络爬虫步骤:1.通过网络链接获取网页内容

2.对获得的网页内容进行处理

1.通过网络链接获取网页内容

代码:

'''
空气质量
版本:5.0
'''import requestsdef get_html_text(url):'''返回url的文本'''r = requests.get(url,timeout = 30) #等待链接30秒。如果30秒没有链接上,就不等了。print(r.status_code)        #看连接是否成功,200成功。400错误return r.textdef main():'''主函数'''city_pinyin = input('请输入城市拼音(小写):')url = 'http://pm25.in/' + city_pinyin        #访问网站的链接#获取网站的字符串(文本信息)url_text = get_html_text(url)       #调用函数print(url_text)if __name__ == '__main__':main()

2.对获得的网页内容进行处理(提取我们需要的信息)

在网站上点击右键---检查---找到你需要的字符串的位置信息:

在网页的代码上(检查之后弹出来的界面),按ctrl+u。弹出代码网页。寻找你需要的位置信息,复制到代码中。

具体代码:

'''
空气质量
版本:5.0
'''import requestsdef get_html_text(url):'''返回url的文本'''r = requests.get(url,timeout = 30) #等待链接30秒。如果30秒没有链接上,就不等了。return r.textdef main():'''主函数'''city_pinyin = input('请输入城市拼音(小写):')url = 'http://pm25.in/' + city_pinyin        #访问网站的链接#获取网站的字符串(文本信息)url_text = get_html_text(url)       #调用函数,得到页面的整体信息(整体字符串)#提取所需要的信息的位置(页面中的部分信息)aqi_div = '''<div class="span12 data"><div class="span1"><div class="value">'''       #找到位置,就可找到AQI的值38。即找到子字符串在整体字符串中的位置。注意空格index = url_text.find(aqi_div)          #会输出aqi_div的index值,即索引号begin_index = index + len(aqi_div)      #开始提取信息的位置,确定开始位置end_index = begin_index + 2             #拿两位。即38 确定结束位置。aqi_val = url_text[begin_index:end_index]         #切片操作,拿出位置之间的值,即38。print('空气质量为:{}'.format(aqi_val))if __name__ == '__main__':main()

版本6.0:高效的解析,处理HTML——>beautifulsoup4

具体代码:

'''
空气质量
版本:6.0
'''import requests
from bs4 import BeautifulSoupdef get_city_aqu(city_pinyin):'''获取城市AQI'''url = 'http://pm25.in/' + city_pinyin  # 访问网站的链接r = requests.get(url,timeout = 30)  #等待链接30秒。如果30秒没有链接上,就不等了。soup = BeautifulSoup(r.text ,'lxml')   #'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()# 拿到的是节点,加上.text拿到节点上的内容.strip为了去掉拿到内容中的空格。value = div_content.find('div', {'class': 'value'}).text.strip()city_aqi.append((caption,value))return city_aqidef main():'''主函数'''city_pinyin = input('请输入城市拼音(小写):')#获取网站的字符串(文本信息)city_aqi = get_city_aqu(city_pinyin)       #调用函数,得到页面的整体信息(整体字符串)print(city_aqi)if __name__ == '__main__':main()

版本7.0:获取所有城市AQI

利用beautifulsoup4获取所有城市的空气质量

案例描述:1.首先获取所有的城市列表,及对应的url

2.根据url获取城市的空气质量(6.0程序)

具体代码:

'''
空气质量
版本:7.0
'''import requests
from bs4 import BeautifulSoupdef get_city_aqu(city_pinyin):'''获取城市AQI'''url = 'http://pm25.in/' + city_pinyin  # 访问网站的链接r = requests.get(url,timeout = 30)  #等待链接30秒。如果30秒没有链接上,就不等了。soup = BeautifulSoup(r.text ,'lxml')   #'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()# 拿到的是节点,加上.text拿到节点上的内容.strip为了去掉拿到内容中的空格。value = div_content.find('div', {'class': 'value'}).text.strip()city_aqi.append((caption,value))return city_aqidef get_all_city():                         #获取所有城市url = 'http://pm25.in/'city_list = []r = requests.get(url, timeout=30)       #等待链接30秒。如果30秒没有链接上,就不等了。soup = BeautifulSoup(r.text, 'lxml')        #'lxml'定义解码器city_div = soup.find_all('div',{'class':'bottom'})[1]#第一个bottom是热门城市,第二个是全部城市。所有取第二个。city_link_list = city_div.find_all('a')      #获取bottom下a标签下的所有城市for city_link in city_link_list:             #遍历所有城市信息city_name = city_link.textcity_pinyin = city_link['href'][1:]      #去掉第一个字符‘/’切片操作city_list.append((city_name,city_pinyin))return city_listdef main():'''主函数'''city_list = get_all_city()for city in city_list:city_name = city[0]city_pinyin = city[1]city_aqi = get_city_aqu(city_pinyin)       #调用函数,得到每个城市AQIprint(city_name,city_aqi)if __name__ == '__main__':main()

版本8.0:将7.0的信息,保存成csv数据文件。

具体代码:

为了看到运行情况(输出处理到第几条数据):为了获取 city_list 里面的编号(索引号),用enumerate

'''
空气质量
版本:8.0
'''import requests
from bs4 import BeautifulSoup
import csvdef get_city_aqu(city_pinyin):'''获取城市AQI'''url = 'http://pm25.in/' + city_pinyin  # 访问网站的链接r = requests.get(url,timeout = 30)  #等待链接30秒。如果30秒没有链接上,就不等了。soup = BeautifulSoup(r.text ,'lxml')   #'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()# 拿到的是节点,加上.text拿到节点上的内容.strip为了去掉拿到内容中的空格。value = div_content.find('div', {'class': 'value'}).text.strip()city_aqi.append(value)  #只需要value,不需要caption.return city_aqidef get_all_city():                         #获取所有城市url = 'http://pm25.in/'city_list = []r = requests.get(url, timeout=30)       #等待链接30秒。如果30秒没有链接上,就不等了。soup = BeautifulSoup(r.text, 'lxml')        #'lxml'定义解码器city_div = soup.find_all('div',{'class':'bottom'})[1]#第一个bottom是热门城市,第二个是全部城市。所有取第二个。city_link_list = city_div.find_all('a')      #获取bottom下a标签下的所有城市for city_link in city_link_list:             #遍历所有城市信息city_name = city_link.textcity_pinyin = city_link['href'][1:]      #去掉第一个字符‘/’切片操作city_list.append((city_name,city_pinyin))return city_listdef main():'''主函数'''city_list = get_all_city()#定义csv第一行列名header = ['City','AQI','PM2.5/h','PM10/h','CO/h','NO2/h','O3/h','O3/8h','SO2/h']#打开。操作文件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):        #i是索引号,city为值city_name = city[0]     #city_name字符串city_pinyin = city[1]city_aqi = get_city_aqu(city_pinyin)  # 调用函数,得到每个城市AQI。city_aqi是列表#为了使字符串与列表相加,将字符串放入列表中即可row = [city_name]+city_aqiwriter.writerow(row)# 每10条输出一次if (i + 1) % 10 == 0:print('已处理{}条记录,共{}条记录'.format(i + 1, len(city_list)))if __name__ == '__main__':main()

版本9.0:利用Pandas进行数据处理,分析

具体代码:

简单基本操作演示:

1.

'''
空气质量
版本:9.0
'''import pandas as pddef main():'''主函数'''aqi_data = pd.read_csv('china_city_aqi.csv')     #读取csv文件(用pandas)# print(aqi_data.head(5))                        #输出前五行数据# print(aqi_data['AQI'])                         #只看AQI这一列数据print(aqi_data[['City','AQI']])                #里面的中括号代表,传入的是列表if __name__ == '__main__':main()

2.

'''
空气质量
版本:9.0
'''import pandas as pddef main():'''主函数'''aqi_data = pd.read_csv('china_city_aqi.csv')     #读取csv文件(用pandas)# print('基本信息:')# print(aqi_data.info())## print('数据预览')# print(aqi_data.head())#基本统计print('AQI最大值:', aqi_data['AQI'].max())print('AQI最小值:', aqi_data['AQI'].min())print('AQI均值:', aqi_data['AQI'].mean())
if __name__ == '__main__':main()

输出结果为:

后面会介绍,怎样清洗掉最小值0这个数据。

3.

'''
空气质量
版本:9.0
'''import pandas as pddef main():'''主函数'''aqi_data = pd.read_csv('china_city_aqi.csv')     #读取csv文件(用pandas)#排序 top10top10_cities = aqi_data.sort_values(by='AQI').head(10)#默认从小到大。(升序排列),拿前10print('空气质量最好十个城市:')print(top10_cities)# # 排序 bottom10(1)。默认从小到大。(升序排列)拿后10# bottom_cities = aqi_data.sort_values(by='AQI').tail(10)# 排序 bottom10(2)。  # 从大到小。(降序排列)拿前10bottom_cities = aqi_data.sort_values(by='AQI', ascending=False).head(10)print('空气质量最差十个城市:')print(bottom_cities)if __name__ == '__main__':main()

4.将3中数据保存成csv文件(用pandas库)

'''
空气质量
版本:9.0
'''import pandas as pddef main():'''主函数'''aqi_data = pd.read_csv('china_city_aqi.csv')     #读取csv文件(用pandas)#排序 top10top10_cities = aqi_data.sort_values(by='AQI').head(10)#默认从小到大。(升序排列),拿前10print('空气质量最好十个城市:')print(top10_cities)# # 排序 bottom10(1)。默认从小到大。(升序排列)拿后10# bottom_cities = aqi_data.sort_values(by='AQI').tail(10)# 排序 bottom10(2)。  # 从大到小。(降序排列)拿前10bottom_cities = aqi_data.sort_values(by='AQI', ascending=False).head(10)print('空气质量最差十个城市:')print(bottom_cities)#数据保存成CSVtop10_cities.to_csv('top10_aqi.csv',index=False)bottom_cities.to_csv('bottom10_aqi.csv', index=False)#保存时会默认带着索引号,index=False,不要索引号。if __name__ == '__main__':main()

版本10.0:简单的数据清洗,即用Pandas进行数据可视化

数据处理、分析步骤:1.数据获取—网络爬虫

2.数据清洗

3.数据统计、分析

具体代码:数据清洗

'''
空气质量
版本:10.0
'''import pandas as pddef main():'''主函数'''aqi_data = pd.read_csv('china_city_aqi.csv')     #读取csv文件(用pandas)print('基本信息:')print(aqi_data.info())print('数据预览')print(aqi_data.head())#数据清洗#只保留AQI>0的数据# filter_condition = aqi_data['AQI'] > 0         #过滤条件# clean_aqi_data = aqi_data[filter_condition]     #清洗后干净数据# 数据清洗,第二种方式clean_aqi_data = aqi_data[aqi_data['AQI'] > 0 ]# 基本统计print('AQI最大值:', clean_aqi_data['AQI'].max())print('AQI最小值:', clean_aqi_data['AQI'].min())print('AQI均值:', clean_aqi_data['AQI'].mean())#排序 top10top10_cities = clean_aqi_data.sort_values(by='AQI').head(10)#默认从小到大。(升序排列),拿前10print('空气质量最好十个城市:')print(top10_cities)# # 排序 bottom10(1)。默认从小到大。(升序排列)拿后10# bottom_cities = clean_aqi_data.sort_values(by='AQI').tail(10)# 排序 bottom10(2)。  # 从大到小。(降序排列)拿前10bottom_cities = clean_aqi_data.sort_values(by='AQI', ascending=False).head(10)print('空气质量最差十个城市:')print(bottom_cities)#数据保存成CSVtop10_cities.to_csv('top10_aqi.csv',index=False)bottom_cities.to_csv('bottom10_aqi.csv', index=False)#保存时会默认带着索引号,index=False,不要索引号。if __name__ == '__main__':main()

具体代码:数据可视化

'''
空气质量
版本:10.0
'''import pandas as pd
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']        #使图中可识别中文
plt.rcParams['axes.unicode_minus'] = False          #对负号处理.不让它显示def main():'''主函数'''aqi_data = pd.read_csv('china_city_aqi.csv')     #读取csv文件(用pandas)print('基本信息:')print(aqi_data.info())print('数据预览')print(aqi_data.head())#数据清洗#只保留AQI>0的数据# filter_condition = aqi_data['AQI'] > 0         #过滤条件# clean_aqi_data = aqi_data[filter_condition]     #清洗后干净数据# 数据清洗,第二种方式clean_aqi_data = aqi_data[aqi_data['AQI'] > 0 ]# 基本统计print('AQI最大值:', clean_aqi_data['AQI'].max())print('AQI最小值:', clean_aqi_data['AQI'].min())print('AQI均值:', clean_aqi_data['AQI'].mean())#排序 top50top50_cities = clean_aqi_data.sort_values(by='AQI').head(50)#数据可视化top50_cities.plot(kind='bar',x='City',y='AQI',title='空气质量最好50城市',figsize=(20,10))#kind='bar'表示画柱状图。figsize图片大小#保存plt.savefig('top50_aqi_bar.png')plt.show()if __name__ == '__main__':main()

小象学院—小象学院—Python学习联盟09—空气质量指数计算相关推荐

  1. python学习笔记(空气质量指数)

    每天30min学习python-空气质量指数 目录 空气质量指数1.0 空气质量指数2.0 空气质量指数3.0 空气质量指数4.0 空气质量指数5.0 空气质量指数6.0+7.0 空气质量指数8.0 ...

  2. Python学习笔记:利用timeit计算函数调用耗时

    Python学习笔记:利用timeit计算函数调用耗时 一.timeit模块简介 Timer对象包含两个参数:第一个参数是你想要计时的Python语句,第二个参数运行一次来建立测试. 默认情况time ...

  3. python空气质量指数计算_Python入门案例(八):空气质量指数(AQI)计算

    一.空气质量指数计算V1.0 主要知识点:分支结构.函数.异常处理# -*- coding:utf-8 -*- """ @author:Angel @file:AQI_V ...

  4. python学习之 利用蒙特卡洛方法计算PI值

    使用环境为python IDLE3.5. #利用蒙特卡洛方法计算PI值 from random import random from math import sqrt from time import ...

  5. python空气质量指数计算_现在,哪个城市的空气最好闻?空气质量指数分布图——Python实例...

    我们要做如下两张图. 空气质量指数AQI的分布图. PM2.5的分布图. 一.获取空气质量指数AQI和PM2.5浓度数据 刚开始想找这个网站,可网页打开的速度太慢,导致代码执行一度停滞. 网站提供的实 ...

  6. python空气质量指数计算_空气质量指数数据分析可视化

    目录 1 数据描述 2 数据预处理 应用日期计算函数 应用匹配查找函数 逻辑判断函数 Python缺失值处理 3 数据分析及可视化 3.1描述统计 3.2 热力图 一.待分析的大数据描述 本例选取的数 ...

  7. python空气质量指数计算_历史空气质量指数查询示例代码

    #!/usr/bin/python # encoding:utf-8 import urllib2, json, urllib # 2.历史空气质量指数查询 data = {} data[" ...

  8. 小象学院—小象学院—Python学习联盟07—判断密码强弱

    案例描述: 密码强度:是指一个密码对抗猜测或暴力破解的有效程度:一般是指一个未授权的访问者得到正确密码的平均尝试次数. 强密码可以降低安全漏洞的整体风险 简易版(常用)规则: 1.    密码长度至少 ...

  9. 小象学院—小象学院—Python学习联盟08—模拟掷骰子

    案例描述: 通过计算机程序模拟掷骰子,并显示各点数出现次数及频率 比如,抛掷两个骰子50次,出现点数为7的次数是8,频率0.16 必备知识点: 如何通过python模拟随机事件?或者生成随机数? ra ...

  10. python小甲鱼爬虫妹子_【Python学习日记】B站小甲鱼:爬虫

    Web Spider Python 如何访问互联网 URL + lib -->urllib URL的一般格式为 protocol://hostname[:port] / /path /[;par ...

最新文章

  1. mysql e 导出数据库_mysql导出数据库几种方法
  2. Scala 递归学习的例子
  3. MusicXML 3.0 (15) - 倚音
  4. String Typing CodeForces - 954B
  5. C#如何控制方法的执行时间,超时则强制退出方法执行
  6. stm32滴答计时器_stm32中的系统滴答定时器使用
  7. Altium designer中高亮元器件或网络时对比度调节
  8. 把字符串分隔成多行的多种方法实践
  9. 机器学习入门-Knn算法
  10. 小程序原生组件调用mpvue父组件方法
  11. SC15 供应商质量管理工程师(武汉)
  12. sublime text3 Package Control 插件安装及推荐(MAC)
  13. opencv+VS2005安装说明
  14. 【AI应用】NVIDIA Tesla T4的详情参数
  15. pwm脉宽调制c语言程序,MCS-51系列单片机C语言编程PWM脉宽调制器程序模板
  16. 小学计算机课教师教学笔记,小学信息技术课老师教育教学随笔
  17. AlphaGo对战李世石谁能赢?两万字长文深挖围棋AI技术(一)
  18. MotoSimEG-VRC软件:多机器人信号交互与PLC功能
  19. 三星s9android recovery,三星手机进入recovery模式的方法_三星各型号手机recovery模式怎么进入...
  20. 神经网络系统图片高清,神经网络系统图片结构

热门文章

  1. 知道焊缝长度如何确定节点板尺寸_必看!手把手教你如何看懂图纸
  2. c语言链表中next作用,C语言链表中q-next=p;表示什么意思?
  3. 上市商业银行手机银行App月活增长及应用对标分析
  4. Heaven of Imaginary(PKUSC2018)
  5. mysql indentify_Database 中 identify relationship 和 non-identify relationship的区别
  6. 蓝桥杯第四届决赛 c++ B组 题目及个人题解 2013年
  7. Python学习笔记之八皇后问题
  8. 原代码审计笔记-安全缺陷
  9. 分享一个商品历史价格查询的网站
  10. 浅谈SSD,eMMC,UFS