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