数据分析~中国五大城市PM2.5数据分析01

本文分析了北京、成都、广州、上海和沈阳五个城市的PM2.5数据,包括各城市的有效数据行数、污染小时数百分比及每月平均PM值。通过数据可以看出各城市不同月份的空气质量状况,相关统计结果已保存为CSV文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1、config.py

import os

# 指定数据集路径
dataset_path='./data'

# 结果保存路径
output_path='./output'

if not os.path.exists(output_path):
    os.mkdir(output_path)

# 公共列
common_cols=['year','month']

# 每个城市对应的文件名及所需分析的列名
# 以字典形式保存,如:{城市:(文件名, 列名)}

data_config_dict={'beijing':('BeijingPM20100101_20151231.csv', ['Dongsi', 'Dongsihuan', 'Nongzhanguan']),
                  'chengdu':('ChengduPM20100101_20151231.csv',['Caotangsi', 'Shahepu']),
                  'guangzhou':('GuangzhouPM20100101_20151231.csv',['City Station', '5th Middle School']),
                  'shanghai':('ShanghaiPM20100101_20151231.csv',['Jingan', 'Xuhui']),
                  'shenyang':('ShenyangPM20100101_20151231.csv',['Taiyuanjie', 'Xiaoheyan'])
                  }

2、main.py

"""

    中国五大城市PM2.5数据分析
    任务:
        - 五城市污染状态
        - 五城市每个区空气质量的月度差异

    数据集来源:https://www.kaggle.com/uciml/pm25-data-for-five-chinese-cities

"""
import csv
import os
import numpy as np
import config

def load_data(data_file,usecols):
    '''
    读取数据文件,加载数据
    :param data_file:文件路径
    :param usecols:所使用的列
    :return:    data_arr:     数据的多维数组表示
    '''

    data=[]
    with open(data_file,'r') as csvfile:
        data_reader=csv.DictReader(csvfile)
        # print(data_reader)
        # === 数据处理 ===
        for row in data_reader:
            # 取出每行数据,组合为一个列表放入数据列表中
            row_data=[]
            # 注意csv模块读入的数据全部为字符串类型
            for col in usecols:
                 str_val=row[col]
                 #数据类型转换为float,如果是'NA',则返回nan
                 row_data.append(float(str_val) if str_val!='NA' else np.nan)
            # 如果行数据中不包含nan才保存该行记录
            if not any(np.isnan(row_data)):
                data.append(row_data)
    # 将data转换为ndarray
    data_arr=np.array(data)
    return data_arr


def get_polluted_perc(data_arr):
    '''
    获取各城市每个区污染占比的小时数
        规则:
            重度污染(heavy)     PM2.5 > 150
            重度污染(medium)    75 < PM2.5 <= 150
            轻度污染(light)     35 < PM2.5 <= 75
            优良空气(good)      PM2.5 <= 35
    :param data_arr:数据的多维数组表示
    :return:    polluted_perc_list: 污染小时数百分比列表
    '''
    # 将每个区的PM值平均后作为该城市小时的PM值
    # 按行取平均值
    hour_val=np.mean(data_arr[:,2:],axis=1)
    # 总小时数
    n_hours=hour_val.shape[0]
    # 重度污染小时数
    n_heavy_hours=hour_val[hour_val>150].shape[0]
    # 中度污染小时数
    n_medium_hours=hour_val[(hour_val>75) & (hour_val<=150)].shape[0]
    # 轻度污染小时数
    n_light_hours = hour_val[(hour_val > 35) & (hour_val <= 75)].shape[0]
    # 优良空气小时数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值