Python案例—AQI 空气质量指数系列总结

版本 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()

你可能感兴趣的:(入门阶段,python)