广州空气质量数据分析
廣州空氣質量數據分析
- 一、背景
- 二、提出問題
- 三、數據處理
- 3.1數據獲取
- 3.2數據集描述
- 3.3數據清洗
- 3.3.2 零值處理
- 3.3.3創建季節列
- 四、問題分析及求解
- 4.1問題一 廣州市的空氣質量總體情況如何?
- 4.2問題二 廣州哪個季節的污染最嚴重?
- 4.3問題三 空氣質量主要受哪些因素影響?
- 4.3.1分析方法
- 4.3.2實驗步驟
- 4.3.3 結果分析
- 五、結論
- 六、參考文獻
摘要
通過獲取2017/01/01-2019/12/03三年來廣州空氣質量相關數據,使用python對數據進去數據清洗,使用python的pandas、 matplotlib和seaborn分析廣州近三年空氣質量變化趨勢為2018年空氣質量較2017年有所改善,2019年比2018年的AQI所降低;夏季空氣質量最好,秋季最差;空氣質量總體水平為良;利用SPSS和因子分析法分析影響廣州空氣質量的主要因素為PM10和O3。
一、背景
AQI(Air Quality Index),指空氣質量指數,用來衡量空氣清潔或污染的程度。值越小,表示空氣質量越好。近年來,因為環境問題,空氣質量也越來越受到人們的重視。空氣質量的好壞反映了空氣污染程度,它是依據空氣中污染物濃度的高低來判斷的。參與空氣質量評價的主要污染物為細顆粒物、可吸入顆粒物、二氧化硫、二氧化氮、臭氧、一氧化碳等六項。
以2017-2019年廣州市空氣質量歷史數據作為依據,查看廣州近三年空氣質量的變化趨勢,同時探究影響空氣質量的主要污染物。
二、提出問題
1.廣州市的空氣質量總體情況如何?
2.廣州哪個季節的污染最嚴重?
3.空氣質量主要受哪些因素影響?
三、數據處理
3.1數據獲取
使用python爬取2017-2019年廣州的空氣質量數據,共1035條。代碼如下:
# -*- coding:utf-8-*- #可以利用 webdriver 打開一個瀏覽器 from selenium import webdriver #使時間中止至指定時間 import time import csvdef search(url):#利用get()方法獲取網頁信息并返回return driver.get(url)def parse_one_page(page):#查找出網頁中全部的 tr 標簽并賦給 tr_listtr_list =driver.find_elements_by_tag_name('tr')return tr_listdef write_header():with open(r'd:\data.csv','a',newline="",encoding='utf8') as csvfile:header = ['日期', 'AQI', '質量等級', 'PM2', 'PM10', 'SO2', 'CO', 'NO2', 'O3']csv.writer(csvfile).writerow(header)def save_to_mysql(tr_list):#在 D 盤創建一個 TXT 格式文件with open(r'd:\data.csv','a',newline="",encoding='utf8') as csvfile:for i in range(1, len(tr_list)):#找出 tr_list 中的全部 td 標簽td_list =tr_list[i].find_elements_by_tag_name('td')data = td_list[0].textAQI = td_list[1].textsql = td_list[2].textPM2 = td_list[3].textPM10 = td_list[4].textSO2 = td_list[5].textCO = td_list[6].textNO2 = td_list[7].textO3 = td_list[8].text#將所得原始數據寫入上面建立的 csv 文件csv.writer(csvfile).writerow([data, AQI, sql, PM2, PM10, SO2, CO, NO2, O3]) def main():#實現交互,輸入城市和時間area = input('請輸入一個城市(例如[長春]):')year = input('請輸入一個年份(例如[2018]):')print('正在抓取'+ area + '市' + year + '年' + '空氣質量每日歷史數據:' )print('由于抓取數據較多,請您耐心等待:')#定義全局變量 driverglobal driver#打開 Chrome 瀏覽器driver = webdriver.Chrome()#利用循環獲取一年的原始數據#write_header()for i in range(1,13):if i<10:url ='https://www.aqistudy.cn/historydata/daydata.php?city={}&month={}0{}'.format(area,year,i)else:url ='https://www.aqistudy.cn/historydata/daydata.php?city={}&month={}{}'.format(area,year,i)page = search(url)time.sleep(1)tr_list = parse_one_page(page)save_to_mysql(tr_list)print('抓取完畢')print('文件存儲在D:\{}{}{}.csv'.format(area, year, '空氣質量')) if __name__ =='__main__':main()3.2數據集描述
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline df = pd.read_csv('D:\data.csv',encoding='gbk')df.head() # 查看表格
圖3.2-1 查看表格數據由圖3.2-1可知,數據集主要包括日期、AQI、空氣質量等級和六項污染物質的濃度:PM2.5(粒徑小于等于2.5μm的顆粒物,也稱細顆粒物),PM10(粒徑小于等于10μm的顆粒物,也稱可吸入顆粒物),SO2(二氧化硫),NO2(二氧化氮)以及CO(一氧化碳)的濃度全部為24小時平均值,O3濃度值為8小時的滑動平均值。其中,空氣質量指數標準如下圖2所示。
圖3.2-2 空氣質量指數標準3.3數據清洗
3.3.1.缺失值處理
df.shape # 查看數據數量 df.info() 圖3.3.3-1 查看數據信息由圖3.3-1可知,獲取的數據無缺失值
3.3.2 零值處理
日期,AQI,質量等級,PM2,PM10,SO2,CO,NO2,O3 目前存在0值,可理解為該部分數據缺失,可用廣州市對應數據的平均值進行填充,代碼如下:
df[['日期', 'AQI', '質量等級', 'PM2', 'PM10', 'SO2', 'CO', 'NO2', 'O3']] = df[['日期', 'AQI', '質量等級', 'PM2', 'PM10', 'SO2', 'CO', 'NO2', 'O3']].replace(0, np.NaN) df.isnull().sum() # 將0值替換后缺失值的數量 圖3.3.2-1 將0值替換后缺失值數量的結果截圖由圖3.3.2-1可知,O3有12個缺失值,用其平均值替換,代碼如下
for column in list(df.columns[df.isnull().sum() > 0]):mean_val = df[column].mean()#用均值代替空值df[column].fillna(mean_val, inplace=True) df.isnull().sum() > 0#檢查替換后是否還有空值 圖3.3.2-2 檢查替換后是否還有空值3.3.3創建季節列
#時間數據格式需要進行轉換,創建季節列; df['日期'] = pd.to_datetime(df['日期']) df.info() #查看time列的數據類型# 根據月份創建季節列 seasons = {12: 'Winter',1: 'Winter',2: 'Winter',3: 'Spring',4: 'Spring',5: 'Spring',6: 'Summer',7: 'Summer',8: 'Summer',9: 'Autumn',10: 'Autumn',11: 'Autumn' } df['season'] = df['日期'].apply(lambda x : seasons [x.month]) df.head() 3.3.3-1 由月份創建季節列截圖四、問題分析及求解
4.1問題一 廣州市的空氣質量總體情況如何?
df.describe()#對數據進行簡單統計
圖4.1-1 df. describe()結果截圖由圖4.1-1可知,廣州近三年平均空氣質量指數為72.889855,其處于50~100間,推測其空氣質量大致處于良好,其相關的六項污染物濃度的平均值和標準差中,PM10(mean=51.858937,std=26.208792)和O3(mean=94.326570,std=52.986327)的濃度較其他四項都偏高。
df_label=pd.pivot_table(df,index=['質量等級'],values=['AQI'],aggfunc=np.size,margins=True) df_label.columns=['頻數'] df_label['頻率']=df_label['頻數']/df_label.iloc[-1,0] df_label.sort_values(by=['頻數']) 圖4.1-2 質量等級頻數頻率統計由圖4.1-2可知,廣州市空氣質量等級大多數為良,其次為優。
plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.xlabel('AQI') plt.ylabel('天數') plt.hist(df['AQI'],bins=[i*10 for i in range (1,int(max(df['AQI'])/10))]) 圖4.1-3 AQI頻數分布直方圖
圖4.1-3顯示,近三年,廣州有842天AQI處于20100之間。AQI在5060的天數最多。
由圖4.1-4可知,廣州空氣質量近三年中9~11月較其他月份污染較嚴重,且在這三個月份中,2019年的空氣質量指數(AQI)比2017年和2018年的都高。2017年9月和2019年9、10月AQI>100,空氣質量出現輕度污染的現象。
df.groupby('year').AQI.mean().plot.bar(figsize=(10 ,8)) plt.title('空氣質量年變化') plt.xticks(rotation=0) plt.xlabel('年') plt.ylabel('AQI') plt.ylim(40) plt.legend('AQI') plt.grid(linestyle=':', color='w') plt.show(); 圖4.2-3空氣質量年變化由圖4.2-3可知,2017年的AQI最大,次之為2019年,最小為2018年,且三年的AQI都小于100,空氣質量等級為良。
4.2問題二 廣州哪個季節的污染最嚴重?
pd.DataFrame(df.groupby('season').AQI.mean().sort_values()).plot.barh(figsize=(15,10)) plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.title('不同季節空氣質量情況') plt.xlabel('AQI') plt.ylabel('季節') plt.xlim(60) plt.legend('AQI') plt.grid(linestyle=':', color='w') plt.show() df.groupby('season').AQI.mean().sort_values() 圖4.2-1 不同季節空氣質量情況 圖4.2-2 不同季節空氣質量的均值由圖4.2-1和圖4.2-2可知,廣州在秋季污染較嚴重,其AQI為82.142857,空氣質量等級為良。
4.3問題三 空氣質量主要受哪些因素影響?
4.3.1分析方法
采用主成分分析法對空氣質量數據進行分析,主成分分析主要起到降維和簡化數據結構的作用,可以將原有的多個指標轉化成少數幾個代表性。較好的綜合指標,能夠反映原來指標大部分的信息,且各個指標之間保持獨立,避免出現重疊信息。主成分分析的基本步驟如下(1)原始數據標準化;(2)計算樣本協方差陣和相關陣;(3)計算樣本協方差陣和相關陣的特征值和特征向量;(4)計算貢獻率和累積貢獻率,確定選取主成分個數;(5)列出主成分方程并解釋主成分意義。運用SPSS軟件進行主成分分析。
4.3.2實驗步驟
(1)選擇菜單【分析→降維→因子分析】,出現如圖4.3.2-1所示的窗口。
(2)把參與因子分析的變量選到【變量(V)】框中。
(3)在圖4.3.2-1所示的窗口單擊【描述(D)】按鈕指定輸出結果,出現如圖4.3.2-2所示的窗口,【統計量】選擇【初始解】,【相關矩陣】選擇【系數】和【KMO和Bartlett的球形度檢驗(K)】。
圖4.3.2-2 因子分析描述窗口(4)在圖4.3.2-1所示的窗口單擊【抽取】按鈕,出現如圖4.3.2-3所示的窗口,在【輸出】框中選擇碎石圖,在【提取】框中選擇【基于特征值(E)】
圖4.3.2-3 因子分析的抽取窗口(5)在圖4.3.2-1所示的窗口單擊【得分】按鈕,出現如圖4.3.2-4所示的窗口,選擇【顯示因子得分系數矩陣】。
4.3.2-4 因子分析的得分窗口4.3.3 結果分析
4.3.3-1 原有變量的相關系數矩陣 圖4.3.3-2 KMO 和巴特利特檢驗 圖4.3.3-1可以看到大部分相關系數較高,各變量呈較強的線性關系,能夠從中提取公共因子,適合進行因子分析。圖4.3.3-2的顯著性接近0(<0.05),應拒絕原假設,認為相關系數矩陣與單位矩陣有顯著差異,原有變量適合進行因子分析。
圖4.3.3-3 因子分析的方差分析圖4.3.3-3顯示PM10的提取率最大(達到0.914),次之為O3和PM2.5,提取率分別為0.896和0.891,說明這三個指標對廣州市的空氣污染起主導作用。
圖4.3.3-4 主成分分析顯示的總方差圖4.3.3-4反映了各個成分解釋原始變量的總方差以及提取信息量的情況。因為成分1(方差貢獻率63.850%)、成分2(方差貢獻率19.096%)的初始特征根都大于1,而且它們已經包含了原始6個變量82.946%(>80%)的信息,所以選取成分1、成分2為主成分。
圖4.3.3-5 因子的碎石圖圖4.3.3-5,橫坐標為因子編號,縱坐標為特征值,由圖可知,第一個因子的特征值很高,對解釋原有變量的貢獻度最大;第三個以后的因子特征值都較小,對解釋原有變量的貢獻度很小,表明可以提取兩個主成分。
圖4.3.3-6 因子載荷矩陣圖4.3.3-6,在第一主成分中,PM10得分最高,為0.951,在第二主成分中,O3的分最高為0.893,可認為可認為 PM10和O3是廣州空氣質量的主要污染源。
圖4.3.3-7成分得分系數矩陣由圖4.3.3-7可以得出成分得分方程組:
Y1 = 0.246X1+0.248X2+0.205X3+0.186X4-0.235X5+0.082X 6
Y 2 = -0.017X1+0.087X2-0.167X3-0.462X4-0.127X5+0.779X6
上式中X1 ~X6 表示對應污染物標準化后的樣本數據;Y1 、Y2 表示對應成分得分。由上式可以看出,主成分1中PM10得分系數較高,主成分2中O3得分系數明顯高于其他污染物,代表性顯著。
五、結論
2017年~2019年廣州市空氣質量為良的等級出現的頻率最高,占總天數的53.10%,其次為優,占25.41%,秋季空氣質量差,夏季好,其主要污染物為PM10和O3。
六、參考文獻
[1]張鑫童.滁州市空氣質量影響因素的主成分分析[J].安徽農學通報,2018,24(13):122-124+139.
[2]王未來,李明艷,過偉軍等.全國31個重點城市空氣質量特征分析[J].浙江預防醫學,2015,27(11):1110-1114.
[3]SPSS統計學分析方法及應用 薛薇編制
[4]姜新華,薛河儒,張存厚,張麗娜.基于主成分分析的呼和浩特市空氣質量影響因素研究[J].安全與環境工程,2016,23(01):75-79.
[5]張鑫童,徐姍,金華星,龔年祖.滁州市空氣質量指數(AQI)與氣象條件的關系分析[J].安徽農學通報,2017,25(14):161-165.
總結
以上是生活随笔為你收集整理的广州空气质量数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高内聚低耦合通俗理解_抱歉,请不要把“业
- 下一篇: 蔬菜大棚成本_蔬菜大棚种植成本和利润究竟