python空气质量分析与预测_AQI(空气质量指数)分析与预测(一)
任務說明
期望能夠運用數據分析的相關技術,對全國城市空氣質量進行研究與分析,希望能夠解決如下疑問:
哪些城市的空氣質量較好/較差?【描述性統計分析】
空氣質量在地理位置上,是否具有一定的規律?【描述性統計分析】
臨海城市的空氣質量是否有別于內陸城市?【推斷統計分析】
空氣質量主要受哪些因素影響?【相關系數分析】
全國城市空氣質量普遍處于何種水平?【區間估計】
怎樣預測一個城市的空氣質量?【統計建?!?/p>
數據集描述
我們獲取了2015年空氣質量數據集,該數據集包含全國主要城市的相關數據以及空氣質量指數。
讀取數據
導入需要的庫,同時進行一些初始化的設置
#導入相關庫
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')
加載數據集
#加載之后可以使用head/tail/sample等方法查看數據的大致情況
data = pd.read_csv('data.csv')
data.head()
數據清洗
缺失值
1 缺失值探索
我們可以使用如下方法查看缺失值:
info
isnull
data.info()
data.isnull().sum(axis=0) #按列查找空值,并將空值累加
如上兩種方式都可以看出,Precipitation列中有四個空值
2 缺失值處理
對于缺失值,我們可以使用如下方式處理:
刪除缺失值
僅適用于缺失數量很少的情況
填充缺失值
1 數值變量
?均值填充
?中位數填充
2 類別變量
?眾數填充
?單獨作為一個類別
3 額外處理說明
?缺失值小于20%,直接填充
?缺失值在20%-80%,填充變量后,同時增加一列,標記該列是否缺失,方便參與后續建模
?缺失值大于80%,不使用原始列,而是增加一列,標記該列是否缺失,方便參與后續建模
#查看數據分布情況
print(data['Precipitation'].skew()) #查看偏度值,確認左偏或右偏
偏度值大于0,輕微右偏
sns.distplot(data['Precipitation'].dropna())
#distplot中不允許有空值,故使用dropna函數將空值去除
根據偏度值及圖像可知,數據呈右偏分布,故使用中位數填充,代碼如下:
data['Precipitation'].fillna(data[].median(), inplace=True)
異常值
1 異常值探索
我們可以使用如下方式,發現異常值:
通過describe查看數值信息
3σ方式
使用箱線圖輔助
相關異常檢測算法
describe方法
調用DataFrame對象的describe方法,可以顯示數據的統計信息,不過此種方法僅能作為一種簡單的異常探索方式。
data.describe()
3σ方法
根據正態分布的特性,我們可以將3σ之外的數據,視為異常值。我們以GDP為例,首先繪制GDP的分布。
sns.distplot(data['GDP'])
print(data['GDP'].skew()) #偏度值
可以看出此列呈嚴重的右偏分布,也就是存在部分極大的異常值,可以獲取這些異常值。
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[(data['GDP']upper)] #獲取全部異常信息
箱線圖
箱線圖是一種常見的異常檢測方式。
sns.boxplot(data=data['GDP'])
2 異常值處理
對于異常值,我們可以采用如下的方式處理:
刪除異常值
視為缺失值處理
對數轉換
使用臨界值填充
使用分箱法離散化處理
對數轉換
如果數據中存在較大的異常值,我們可以通過取對數來進行轉換,這樣可以得到一定的緩解。例如,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])
取對數的方式比較簡單,不過也存在一些局限:
取對數只能針對正數操作,不過我們可以通過如下的方式進行轉換:
np.sign(X) * np.log(np.abs(X)+1)
適合于右偏分布,不適合左偏分布
使用邊界值替換
我們可以對異常值進行“截斷”處理,即使用臨界值替換異常值。例如:在3σ與箱線圖中,就可以這樣處理。
分箱離散化
有時候,特征對目標值存在一定的影響,但是這種影響可能未必是線性的增加,此時我們就可以使用分箱方式,對特征進行離散化處理。
重復值
1 重復值探索
使用duplicate檢查重復值,可配合keep參數進行調整。
#發現重復值
print(data.duplicated().sum())
#查看哪些記錄出現了重復值
data[data.duplicated(keep=False)] #顯示所有重復值
2 重復值處理
重復值對數據分析通常沒用,直接刪除即可。
data.drop_duplicates(inplace=True) #刪除重復值
data.duplicated().sum() #檢驗重復值是否成功刪除
總結
以上是生活随笔為你收集整理的python空气质量分析与预测_AQI(空气质量指数)分析与预测(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 液晶面板介绍
- 下一篇: 十分钟带你了解阿里、美团、滴滴、头条等互