版本 3.0
功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
"""
作者:Z_Howe
版本:3.0
功能:计算空气质量指数(Air Quality Index)
新增功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
日期:2019/1/29
· JSON库是处理JSON格式的Python标准库
·两个过程:
· 编码(encoding),将Python数据类型转换成JSON格式的过程
· 解码(decoding),从JSON格式中解析数据对应到Python数据类型的过程
dumps() 将Python数据类型转换为JSON格式(dict->str)
loads() 将JSON格式字符串转换为Python数据类型(str->dict)
dump() 与dumps()功能一致,输出到文件
load() 与loads()功能一致,从文件输入
举个JSON格式例子:
[
{
"aqi":47
"area":"北京"
},
{
"aqi":63
"area":"上海"
}
]
"""
import json
import csv
def process_json_file(filepath):
"""
解析json文件
"""
with open(filepath, mode='r', encoding='utf-8') as f:
city_list = json.load(f) # 解析完成后会变为列表,即type(city_list)=
return city_list # return city_list 即可以在主函数用新的city_list接收数据
def main():
"""
主函数
"""
file_path = input('请输入json文件路径:')
city_list = process_json_file(file_path)
city_list.sort(key=lambda city: city['aqi']) # 以city的aqi值为指标进行排序
lines = []
# 列名
lines.append(list(city_list[0].keys()))
for city in city_list:
lines.append(list(city.values()))
with open('aqi.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
for line in lines:
writer.writerow(line)
if __name__ == '__main__':
main()
版本4.0
功能:辨别文件格式,并读取文件信息
"""
作者:Z_Howe
版本:4.0
功能:计算空气质量指数(Air Quality Index)
新增功能:辨别文件格式,并读取文件信息
日期:2019/1/31
"""
import json
import csv
import os
def process_csv_file(filepath):
"""
解析csv文件
csv.reader()将每行记录作为列表返回
"""
with open(filepath, 'w', encoding='utf-8', newline='') as f:
reader = csv.reader(f)
for i in reader:
print(', '.join(i))
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 main():
"""
主函数
"""
file_path = input('请输入文件名称:')
file_name, file_format = os.path.splitext(file_path)
if file_format == '.json':
process_json_file(file_path)
elif file_format == '.csv':
process_csv_file(file_path)
else:
print('不支持该种格式!')
if __name__ == '__main__':
main()
版本5.0
新增功能:应用爬虫通过网络链接获取网页内容;对获得的网页内容进行处理
"""
作者:Z_Howe
版本:5.0
功能:计算空气质量指数(Air Quality Index)
新增功能:应用爬虫通过网络链接获取网页内容;对获得的网页内容进行处理
日期:2019/1/31
request 介绍:
requests模块是一个简洁且简单的处理HTTP请求的工具
requests网页请求:
get() 对应HTTP的get方式(get(url, timeout=30))
post() 对应HTTP的Post方式,用于传递用户数据
requests对象属性:
states_code: Http请求的返回状态,200表示成功,400表示失败
text: Http相应内容的字符串形式,即url对应的页面内容
"""
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 + 2
aqi_val = url_text[begin_index: end_index]
print('空气质量为:{}'.format(aqi_val))
if __name__ == '__main__':
main()
版本6.0
新增功能:引入BeautifulSoup模块
"""
作者:Z_Howe
版本:6.0
功能:计算空气质量指数(Air Quality Index)
新增功能:应用爬虫通过网络链接获取网页内容;对获得的网页内容进行处理
日期:2019/1/31
BeautifulSoup模块介绍:解析网页
创建对象——查询节点(find-找到第一个满足条件的节点,find_all-找到所有满足条件的节点)
基本形式:bs = BeautifulSoup(url, html_parser-指定编码器, encoding-指定编码形式)
查找节点:
按类型查找节点:
· bs.find_all('a')
按属性查找节点:
· bs.find_all('a', href='a.html')
· bs.find_all('a', href='a.html', string='next page')
· bs.find_all('a', class_='a_link') 注意:是class_
· bs.find_all('a', {'class':'a_link'})
"""
import requests
from bs4 import BeautifulSoup
def get_city_text(city_pinyin):
"""
获取城市的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()
value = div_content.find('div', {'class': 'value'}).text.strip()
city_aqi.append((caption, value))
return city_aqi
def main():
"""
主函数
"""
while True:
city_pinyin = input('请输入城市拼音;')
city_aqi = get_city_text(city_pinyin)
print(city_aqi)
if __name__ == '__main__':
main()
版本7.0
新增功能:一条龙服务——实时获取列表城市的信息
"""
作者:Z_Howe
版本:7.0
功能:计算空气质量指数(Air Quality Index)
新增功能:一条龙服务——实时获取列表城市的信息
日期:2019/1/31
"""
import requests
from bs4 import BeautifulSoup
def get_city_text(city_pinyin):
"""
获取城市的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()
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_text(city_pinyin)
print(city_name, city_aqi)
if __name__ == '__main__':
main()
版本8.0
新增功能:引入Pandas模块
"""
作者:Z_Howe
版本:9.0
功能:计算空气质量指数(Air Quality Index)
新增功能:Pandas
日期:2019/1/31
Pandas:
· 一个强大的分析结构化数据的工具集
· 基础是 NumPy,提供了高性能矩阵的运算
· 应用:数据挖掘,数据分析
学生成绩分析,股票数据分析
· 提供数据清洗功能
Pandas的数据结构:
· 类似多维数组/表格数据(如excel,R中的data.frame)
· 每列数据可以是不同的类型
· DataFrame
· 通过ndarray构建DataFrame
· 通过dict构建DataFrame
· 通过列索引获取数据(Series类型)
· df_obj[col_idx]或df_obj.col_idx
· 增加列数据,类似dict添加key-value
· df_obj[new_col_idx] = data
· 删除列
· del df_obj[col_idx]
索引操作:
· DataFrame索引
· 列索引
· df_obj['label']
· 不连续索引
· df_obj[['labei1', 'label2']]
排序:
· sort_index,索引排序
· 对DataFrame操作时注意轴方向
· 按值排序
· sort_values(by='label')
常用的统计运算
· sum,mean(平均值),max,min,var(方差),std(标准差)...
· axis=0 按列统计,axis=1 按行统计
· skipna排除缺失值,默认为True
· idmax,idmin,cumsum
统计描述
· describe 产生多个统计数据
Pandas数据清洗
· 处理缺失数据
· dropna()丢弃缺失数据
· fillna()填充缺失数据
· 数据过滤
· df[filter_condition]依据filter_condition对数据进行过滤
· Pandas提供了内建的绘图功能(基于matplotlib)
· plot(kind,x,y,title,figsize)
x,y 横纵坐标对应的数据列
title图像名称
figsize图像尺寸
· 保存图片
plt.savefig()
"""
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())
print('基本统计:')
print('AQI最大值:', aqi_data['AQI'].max())
print('AQI最小值:', aqi_data['AQI'].min())
print('AQI均值:', aqi_data['AQI'].mean())
print('top10:')
top10_city = aqi_data.sort_values(by=['AQI']).head(10)
print('空气质量最好的10个城市:')
print(top10_city)
bottom10_city = aqi_data.sort_values(by=['AQI'], ascending=False).head(10)
print('空气质量最差的10个城市:')
print(bottom10_city)
# 数据保存为csv
top10_city.to_csv('top10_aqi.csv', index=False)
bottom10_city.to_csv('bottom10_city.csv', index=False)
if __name__ == '__main__':
main()
版本9.0
新增功能:数据可视化
"""
作者:Z_Howe
版本:9.0
功能:计算空气质量指数(Air Quality Index)
新增功能:Pandas
日期:2019/1/31
"""
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())
# # 数据清洗,只保留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('基本统计:')
print('AQI最大值:', clean_aqi_data['AQI'].max())
print('AQI最小值:', clean_aqi_data['AQI'].min())
print('AQI均值:', clean_aqi_data['AQI'].mean())
top50_city = clean_aqi_data.sort_values(by=['AQI']).head(50)
top50_city.plot(kind='bar', x='City', y='AQI', title='空气质量最好的50个城市',
figsize=(20, 10))
plt.savefig('top50_aqi_bar.png')
plt.show()
if __name__ == '__main__':
main()