h5網(wǎng)站建設(shè)機(jī)構(gòu)阿里云模板建站
1,要學(xué)習(xí)Python機(jī)器學(xué)習(xí),第一步就是讀入數(shù)據(jù),這里我們以讀入excel的數(shù)據(jù)為例,利用jupyter notebook來編碼,具體教程看這個視頻
推薦先上傳到j(luò)upyter notebook,再用名字.xlsx來導(dǎo)入
Jupyter notebook導(dǎo)入Excel數(shù)據(jù)的兩種方法介紹_嗶哩嗶哩_bilibili
2,同一目錄下的代碼互相關(guān)聯(lián),也就是你在這個項(xiàng)目里import的庫或者初始化的變量,可以在下一個項(xiàng)目使用,所以提交單個代碼時可能會報錯?
目錄
1,Pandas的數(shù)據(jù)加工處理
2,空氣質(zhì)量監(jiān)測數(shù)據(jù)預(yù)處理
3,空氣質(zhì)量檢測數(shù)據(jù)基本分析
1,Pandas的數(shù)據(jù)加工處理
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
df1 = DataFrame({'key':['a','d','c','a','b','d','c'],'var1':range(7)}) #基于字典建立數(shù)據(jù)框
print('df1的數(shù)據(jù):\n{0}'.format(df1))
df2 = DataFrame({'key':['a','b','c','c'],'var2':[0,1,2,2]})
print('df2的數(shù)據(jù):\n{0}'.format(df2))
df = pd.merge(df1,df2,on='key',how='outer')
df.iloc[0,2]=np.NaN
df.iloc[5,1]=np.NaN
print('合并后的數(shù)據(jù):\n{0}'.format(df))
df = df.drop_duplicates()
print('刪除重復(fù)數(shù)據(jù)行后的數(shù)據(jù):\n{0}'.format(df))
print('判斷是否為缺失值:\n{0}'.format(df.isnull()))
print('判斷是否不為缺失值:\n{0}'.format(df.notnull()))
print('刪除缺失值后的數(shù)據(jù):\n{0}'.format(df.dropna()))
fill_value=df[['var1','var2']].apply(lambda x:x.mean())
print('以均值替代缺失值:\n{0}'.format(df.fillna(fill_value)))
1,
第4,6行,字典的優(yōu)勢在于引入鍵,通過鍵訪問數(shù)據(jù)更靈活
從數(shù)據(jù)集的角度,key和var1兩個鍵對應(yīng)兩個變量(即數(shù)據(jù)集的兩個列)
兩組值則對應(yīng)數(shù)據(jù)集兩列的取值
df1行索引取值范圍0至6,列索引名為key和var1
注意!基于字典建立數(shù)據(jù)庫的“字典”,各組鍵的值的個數(shù)要相等,否則有些樣本觀測在某個變量上沒有具體取值
2,?
第8行,pandas.merge()將兩個數(shù)據(jù)框按指定關(guān)鍵字橫向合并,也就是這個關(guān)鍵字這一列合并了,其他不變,但是個數(shù)會增多
.iloc[]=numpy.NaN指定樣本觀測的某變量為NaN,NaN在Numpy表示缺失值,不參與數(shù)據(jù)建模分析
3,?
.drop_duplicates()剔除在所有變量上都重復(fù)取值的樣本觀測
.isnull(),.notnull(),判斷是否為NaN,輸出True或False
.dropna()剔除取NaN的樣本觀測
.apply() + lambda計(jì)算各變量均值
.apply()實(shí)現(xiàn)循環(huán)處理,lambda告知了循環(huán)處理的步驟
.fillna()將所有NaN替換為指定值
df1的數(shù)據(jù):key var1
0 a 0
1 d 1
2 c 2
3 a 3
4 b 4
5 d 5
6 c 6
df2的數(shù)據(jù):key var2
0 a 0
1 b 1
2 c 2
3 c 2
合并后的數(shù)據(jù):key var1 var2
0 a 0.0 NaN
1 a 3.0 0.0
2 d 1.0 NaN
3 d 5.0 NaN
4 c 2.0 2.0
5 c NaN 2.0
6 c 6.0 2.0
7 c 6.0 2.0
8 b 4.0 1.0
刪除重復(fù)數(shù)據(jù)行后的數(shù)據(jù):key var1 var2
0 a 0.0 NaN
1 a 3.0 0.0
2 d 1.0 NaN
3 d 5.0 NaN
4 c 2.0 2.0
5 c NaN 2.0
6 c 6.0 2.0
8 b 4.0 1.0
判斷是否為缺失值:key var1 var2
0 False False True
1 False False False
2 False False True
3 False False True
4 False False False
5 False True False
6 False False False
8 False False False
判斷是否不為缺失值:key var1 var2
0 True True False
1 True True True
2 True True False
3 True True False
4 True True True
5 True False True
6 True True True
8 True True True
刪除缺失值后的數(shù)據(jù):key var1 var2
1 a 3.0 0.0
4 c 2.0 2.0
6 c 6.0 2.0
8 b 4.0 1.0
以均值替代缺失值:key var1 var2
0 a 0.0 1.4
1 a 3.0 0.0
2 d 1.0 1.4
3 d 5.0 1.4
4 c 2.0 2.0
5 c 3.0 2.0
6 c 6.0 2.0
8 b 4.0 1.0
2,空氣質(zhì)量監(jiān)測數(shù)據(jù)預(yù)處理
import numpy as np
import pandas as pd
from pandas import Series,DataFramedata=pd.read_excel('北京市空氣質(zhì)量數(shù)據(jù).xlsx') #pandas.read_excel()將excel格式數(shù)據(jù)讀入數(shù)據(jù)框
data=data.replace(0,np.NaN) #數(shù)據(jù)框函數(shù).replace(0,numpy.NaN)將0替換為缺失值NaN
data['年']=data['日期'].apply(lambda x:x.year) #.apply(lambda x:x.year)基于'日期'變量得到年份
month=data['日期'].apply(lambda x:x.month)
quarter_month={'1':'一季度','2':'一季度','3':'一季度', #建立一個關(guān)于月份和季度的字典quarter_month'4':'二季度','5':'二季度','6':'二季度','7':'三季度','8':'三季度','9':'三季度','10':'四季度','11':'四季度','12':'四季度'}
data['季度']=month.map(lambda x:quarter_month[str(x)]) #month.map(lambda x:quarter_month...)將month中的1,2,3等月份映射到相應(yīng)季度標(biāo)簽變量
bins=[0,50,100,150,200,300,1000] #生成一個列表bins,用于對后續(xù)AQI分組,它描述了AQI和空氣質(zhì)量等級的數(shù)值對應(yīng)關(guān)系
data['等級']=pd.cut(data['AQI'],bins,labels=['一級優(yōu)','二級良','三級輕度污染','四級中度污染','五級重度污染','六級嚴(yán)重污染'])
print('對AQI的分組結(jié)果:\n{0}'.format(data[['日期','AQI','等級','季度']])) #pandas.cut()對AQI分組
3,空氣質(zhì)量檢測數(shù)據(jù)基本分析
import pandas as pd
data=pd.read_excel('北京市空氣質(zhì)量數(shù)據(jù).xlsx') #pandas.read_excel()將Excel格式數(shù)據(jù)讀入數(shù)據(jù)框
month=data['日期'].apply(lambda x:x.month) #基于日期變量, 得到每個樣本觀測的月份
quarter_month={'1':'一季度','2':'一季度','3':'一季度','4':'二季度','5':'二季度','6':'二季度','7':'三季度','8':'三季度','9':'三季度', #建立一個關(guān)于月份和季度的字典'10':'四季度','11':'四季度','12':'四季度'}
data['季度']=month.map(lambda x:quarter_month[str(x)]) #.map()將序列month中月份映射到對應(yīng)季度標(biāo)簽上
bins=[0,50,100,150,200,300,1000] #列表bins, 描述AQI
data['等級']=pd.cut(data['AQI'],bins,labels=['一級優(yōu)','二級良','三級輕度污染','四級中度污染','五級重度污染','六級嚴(yán)重污染'])
print('各季度的AQI和Pm2.5的均值:\n{0}'.format(data.loc[:,['AQI','PM2.5']].groupby(data['季度']).mean()))
print('各季度AQI和PM2.5的描述統(tǒng)計(jì)量:\n',data.groupby(data['季度'])['AQI','PM2.5'].apply(lambda x:x.describe()))def top(df, n = 10, column='AQI'):return df.sort_values(by=column, ascending=False)[:n]
print('空氣質(zhì)量最差的5天:\n',top(data,n=5)[['日期','AQI','PM2.5','等級']])
print('各季度空氣質(zhì)量最差3天:\n',data.groupby(data['季度']).apply(lambda x:top(x, n=3)[['日期','AQI','PM2.5','等級']]))
print('各季度空氣質(zhì)量情況:\n',pd.crosstab(data['等級'],data['季度'],margins=True,margins_name='總計(jì)',normalize=False))
各季度的AQI和Pm2.5的均值:AQI PM2.5
季度
一季度 109.125693 77.083179
三季度 98.731884 49.438406
二季度 108.766972 54.744954
四季度 109.400387 77.046422
各季度AQI和PM2.5的描述統(tǒng)計(jì)量:AQI PM2.5
季度
一季度 count 541.000000 541.000000mean 109.125693 77.083179std 80.468322 73.141507min 0.000000 0.00000025% 48.000000 24.00000050% 80.000000 53.00000075% 145.000000 109.000000max 470.000000 454.000000
三季度 count 552.000000 552.000000mean 98.731884 49.438406std 45.637813 35.425541min 0.000000 0.00000025% 60.000000 23.00000050% 95.000000 41.00000075% 130.250000 67.000000max 252.000000 202.000000
二季度 count 545.000000 545.000000mean 108.766972 54.744954std 50.129711 36.094890min 0.000000 0.00000025% 71.000000 27.00000050% 98.000000 47.00000075% 140.000000 73.000000max 500.000000 229.000000
四季度 count 517.000000 517.000000mean 109.400387 77.046422std 84.248549 76.652706min 0.000000 0.00000025% 55.000000 25.00000050% 78.000000 51.00000075% 137.000000 101.000000max 485.000000 477.000000
空氣質(zhì)量最差的5天:日期 AQI PM2.5 等級
1218 2017-05-04 500 0 六級嚴(yán)重污染
723 2015-12-25 485 477 六級嚴(yán)重污染
699 2015-12-01 476 464 六級嚴(yán)重污染
1095 2017-01-01 470 454 六級嚴(yán)重污染
698 2015-11-30 450 343 六級嚴(yán)重污染
各季度空氣質(zhì)量最差3天:日期 AQI PM2.5 等級
季度
一季度 1095 2017-01-01 470 454 六級嚴(yán)重污染45 2014-02-15 428 393 六級嚴(yán)重污染55 2014-02-25 403 354 六級嚴(yán)重污染
三季度 186 2014-07-06 252 202 五級重度污染211 2014-07-31 245 195 五級重度污染183 2014-07-03 240 190 五級重度污染
二季度 1218 2017-05-04 500 0 六級嚴(yán)重污染1219 2017-05-05 342 181 六級嚴(yán)重污染103 2014-04-14 279 229 五級重度污染
四季度 723 2015-12-25 485 477 六級嚴(yán)重污染699 2015-12-01 476 464 六級嚴(yán)重污染698 2015-11-30 450 343 六級嚴(yán)重污染
各季度空氣質(zhì)量情況:季度 一季度 三季度 二季度 四季度 總計(jì)
等級
一級優(yōu) 145 96 38 108 387
二級良 170 209 240 230 849
三級輕度污染 99 164 152 64 479
四級中度污染 57 72 96 33 258
五級重度污染 48 10 14 58 130
六級嚴(yán)重污染 21 0 2 23 46
總計(jì) 540 551 542 516 2149
pd.get_dummies(data['等級']) #pandas.get_dummies()得到分類型變量等級的虛擬變量
data.join(pd.get_dummies(data['等級'])) #數(shù)據(jù)框的.join()將原始數(shù)據(jù)與虛擬變量按行索引橫向合并
import numpy as np #導(dǎo)入numpy庫
np.random.seed(123)#隨機(jī)數(shù)種子
sampler=np.random.randint(0,len(data),10) #numpy.random.randint()指定范圍隨機(jī)抽取指定個數(shù)
print(sampler)
sampler=np.random.permutation(len(data))[:10] #numpy.random.permutation()隨機(jī)打亂重排, 再抽取前10個
print(sampler)data.take(sampler) #數(shù)據(jù)框.take()基于指定隨機(jī)數(shù)獲得數(shù)據(jù)集的一個隨機(jī)子集
data.loc[data['質(zhì)量等級']=='優(yōu)',:] #數(shù)據(jù)框訪問方式,抽取滿足指定條件的行的數(shù)據(jù)子集
?