天天看點

案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

1、AQI分析與預測

1.1、背景資訊

AQI(Air Quality Index),指空氣品質指數,衡量空氣清潔或污染的程度,值越小,表示空氣品質越好。

1.2、分析目标

運用分析解決以下問題:

1、哪些城市的空氣品質較好/較差【描述性統計分析】

2、空氣品質在地理位置分布上,是否具有一定的規律性?【描述性統計分析】

3、臨海城市的空氣品質是否有别于内陸城市?【推斷統計分析】

4、全國城市空氣品質普遍處于何種水準?【區間估計】

5、怎樣預測一個城市的空氣品質?【統計模組化】

1.3、資料集描述

本次分析的資料集,包涵全國主要城市的相關資料及空氣品質指數。

city:城市名

AQI:空氣品質指數

Precipitation:降雨量

GDP:城市生産總值

Temperature:溫度

Longitude:經度

Latitude:次元

Aititude:海拔高度

PopulationDensity:人口密度

Coastal:是否沿海

GreenCoverageRate:綠化覆寫率

Incineration(10,000ton):焚燒量(10000噸)

2、資料分析流程

2.1、基本流程

1、明确需求與目的

2、資料收集

(1)内部資料

(2)購買資料

(3)爬取資料

(4)調查問卷

(5)其他收集

3、資料預處理

(1)資料整合:橫向整合、縱向整合

(2)資料清洗:缺失值、異常值、重複值

(3)資料轉換

4、資料分析

(1)描述分析

(2)推斷分析

(3)資料模組化:特征工程、超參數調整

(4)資料可視化

5、編寫報告

3、讀取資料

3.1、導入相關的庫

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

sns.set(style="darkgrid")
plt.rcParams["font.family"]="SimHei"
plt.rcParams["axes.unicode_minus"]=False
warnings.filterwarnings("ignore")
           

3.2、資料集加載

data = pd.read_csv("data.csv")
print(data.shape)
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

資料加載之後,可以用head/tail/sample等方法檢視資料的大緻情況

案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

4、資料清洗

4.1、缺失值

4.1.1、缺失值探索

可使用如下方法檢視缺失值:info、isnull

data.isnull().sum(axis=0)
#data.info()
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

可以看出Precipitation(降雨量)列存在缺失值,需進行處理。

4.1.2、缺失值處理

對缺失值的處理方式主要有以下幾種:

1、删除缺失值:僅适合于缺失數量很少的情況;

2、填充缺失值

(1)數值變量:均值填充、中值填充;

(2)類别變量:衆數填充、單獨作為一個類别;

(3)額外處理說明:

a.缺失值小于20%,直接填充;

b.缺失值在20%-80%,填充變量後,同時增加一列,标記該列是否缺失,參與後續模組化;

c.缺失值大于80%,不使用原始列,而是增加一列,标記該列是否缺失,參與後續模組化。

4.1.2.1、資料分布

print(data["Precipitation"].skew())
sns.distplot(data["Precipitation"].dropna())
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

看出資料存在右偏狀态

4.1.2.2、資料填充

降雨量屬于數值型,這裡采用中值對其缺失值進行填充

data.fillna({"Precipitation":data["Precipitation"].median()},inplace=True)
data.isnull().sum()
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

填充後檢查缺失值,均為0.

4.2、異常值

4.2.1、異常值探索

可使用如下方式,發現異常值:

1、通過describe檢視數值資訊;

2、3σ方式;

3、使用箱線圖輔助;

4、相關異常檢測算法。

4.2.1.1、describe方法

僅能作為一種簡單的異常探索方式

案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

4.2.1.2、3σ方法

依賴于正态分布的原理,在以均值為中心,3倍标準差以内,可以涵蓋99.7%,在3σ以外僅存在0.3%的資料。我們可以将3σ之外的資料,視為異常值。這裡以GDP為例,首先繪制GDP的分布情況。

sns.distplot(data["GDP"])
print(data["GDP"].skew())
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

從結果可以看出,GDP屬于嚴重的右偏型資料,也就是存在很多極大的異常值,我們可以擷取這些異常值。

mean,std=data["GDP"].mean(),data["GDP"].std()
lower,upper=mean-3*std,mean+3*std
print("均值:",mean)
print("标準差:",std)
print("下限:",lower)
print("上限:",upper)
data["GDP"][(data["GDP"]<lower)|(data["GDP"]>upper)]
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

存在以上八條在3σ以外的異常值

4.2.1.3、箱線圖

案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

IQR=Q3-Q1,如果一個值小于(Q1-1.5IQR)或者大于(Q3+1.5IQR),則為箱線圖會檢測出來的異常值

4.2.2、異常值處理

可采取如下方式對異常值進行處理:

1、删除異常值

2、視為缺失值處理

3、對數轉換

4、使用臨界值填充

5、使用分箱法離散化處理

4.2.2.1、對數轉換

如果資料中存在較大的異常值,可以通過取對數來進行轉換,可得到一定的緩解。如GDP的右偏分布

fig,ax=plt.subplots(1,2)
fig.set_size_inches(15,5)
sns.distplot(data["GDP"],ax=ax[0])
sns.distplot(np.log(data["GDP"]),ax=ax[1])
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

取對數的方式比較簡單,但也存在一些局限:

1、僅适合右偏分布,不适合左偏分布;

2、取對數隻能針對正數操作,不夠可以通過轉換方式實作:

np.sign(X)*np.log(np.abs(X)+1)

4.2.2.2、使用邊界值替換

可以對異常值進行“截斷”處理,使用臨界值替換異常值。例如在3σ與箱線圖,就可采用此種方法處理。

4.2.2.3、分箱離散化

适用于資料為非線性的影響,而為階梯式的影響。

4.3、重複值

删!使用duplicate檢查重複值,可配合keep參數進行調整。

4.3.1、重複值探索

#發現重複值
print(data.duplicated().sum())
#檢視哪些記錄出現了重複值
data[data.duplicated(keep=False)]
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

4.3.2、重複值處理

直接删除重複值

data.drop_duplicates(inplace=True)
data.duplicated().sum()
           

5、資料分析

5.1、空氣品質最好/最差的5個城市

5.1.1、最好的5個城市

t=data[["City","AQI"]].sort_values("AQI")
display(t.iloc[:5])
plt.xticks(rotation=45)
sns.barplot(x="City",y="AQI",data=t.iloc[:5])
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

通過分析結果發現,空氣品質最好的5個城市如圖。

5.1.2、最差的5個城市

display(t.iloc[-5:])
plt.xticks(rotation=45)
sns.barplot(x="City",y="AQI",data=t.iloc[-5:])
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

通過分析結果發現,空氣品質最差的5個城市如圖。

5.2、全國城市的空氣品質

5.2.1、城市空氣品質等級統計

對AQI,可以對空氣品質進行等級劃分,劃分标準如下:

案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

根據該标準,這裡統計下全國空氣品質每個等級的數量。

def value_to_level(AQI):
    if AQI>=0 and AQI<=50:
        return "一級"
    elif AQI >= 51 and AQI <= 100:
        return "二級"
    elif AQI>=101 and AQI<=150:
        return "三級"
    elif AQI>=151 and AQI<=200:
        return "四級"
    elif AQI>=201 and AQI<=300:
        return "五級"
    else:
        return "六級"
level = data["AQI"].apply(value_to_level)
display(level.value_counts())
sns.countplot(x=level,order=["一級","二級","三級","四級","五級","六級"])    
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

可見,空氣品質主要以一二三級為主,嚴重污染城市占比較小

5.2.2、空氣品質指數分布

案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

從大緻的地理位置看,南部優于北部,西部優于東部

5.3、臨海城市是否空氣品質優于内陸城市?

5.3.1、數量統計

首先統計下臨海城市與内陸城市數量

display(data["Coastal"].value_counts())
sns.countplot(x="Coastal",data=data)
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

5.3.2、分布統計

散點分布

案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

分組計算空氣品質的均值

display(data.groupby("Coastal")["AQI"].mean())
sns.barplot(x="Coastal",y="AQI",data=data)
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

上圖顯示的值比較少,下面通過箱線圖進行檢視

案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

如果還想顯示資料的分布,可用小提琴圖

案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

小提琴圖和蜂群圖繪制在一起,可如下展示:

sns.violinplot(x="Coastal",y="AQI",data=data,inner=None)
sns.swarmplot(x="Coastal",y="AQI",color="g",data=data)
           
案例資料分析--對城市空氣品質指數的分析1、AQI分析與預測2、資料分析流程3、讀取資料4、資料清洗5、資料分析

5.3.3、差異檢驗

進行兩樣本t檢驗,用于檢驗兩個獨立樣本背後總體的均值是否是一緻。

看所有内陸城市和總體臨海城市均值差異是否顯著。