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)=<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 = '''<div class="span12 data">
        <div class="span1">
          <div class="value">
            '''
    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()
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
空气质量AQI数据分析与预测可以通过以下几个步骤进行: 1. 首先,可以使用分组计算方法计算不同地区(如沿海和非沿海地区)的空气质量均值。可以使用以下代码实现:\[1\] ```python display(data.groupby('Coastal')\['AQI'\].mean()) ``` 这将显示不同地区的空气质量均值,并使用柱状图进行可视化。 2. 其次,可以找出空气质量最好和最差的城市。可以使用以下代码实现:\[2\] ```python t = data\[\['City', 'AQI'\]\].sort_values('AQI') display(t.iloc\[:5\]) # 最好的5个城市 ``` 这将显示空气质量最好的5个城市,并使用柱状图进行可视化。 3. 此外,可以使用散点图和箱线图或小提琴图来观察不同地区的空气质量分布。可以使用以下代码实现:\[3\] ```python sns.violinplot(x='Coastal', y='AQI', data=data, inner=None) sns.swarmplot(x='Coastal', y='AQI', color='g', data=data) ``` 这将显示不同地区的空气质量分布情况,并将散点图与箱线图或小提琴图组合在一起。 通过以上步骤,可以对空气质量AQI数据进行分析,并根据分析结果进行预测和进一步的研究。 #### 引用[.reference_title] - *1* *2* *3* [python 空气质量AQI数据分析与预测 ---分析(空气质量排名,临海城市空气质量是否优于内陆城市)](https://blog.csdn.net/YmeBtc/article/details/96438896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值