關(guān)于
? 學(xué)習(xí)日月光華老師的《Python數(shù)據(jù)分析從入門到機(jī)器學(xué)習(xí)》洼怔,通過(guò)寫該文來(lái)鞏固數(shù)據(jù)分析中使用的知識(shí)點(diǎn)。
主要是針對(duì)鏈家的數(shù)據(jù)進(jìn)行各個(gè)不同方向的分析又官,本文是第二篇,針對(duì)數(shù)據(jù)中各個(gè)房源成交單價(jià)及其總價(jià)的分析延刘。
準(zhǔn)備
工具 :Anaconda、juyter notebook
類庫(kù):numpy六敬、pandas碘赖、matplotlib
分析及代碼實(shí)現(xiàn)
? 首先接上一篇,先讀入整個(gè)的數(shù)據(jù)外构,代碼實(shí)現(xiàn)如下:
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
data_list = []
for i in range(1, 8):
try:
data = pd.read_csv('C:\\Users\\nash.wan\\Desktop\\lianjia\\lianjia{}.csv'.format(i), encoding='GBK')
except:
data = pd.read_csv('C:\\Users\\nash.wan\\Desktop\\lianjia\\lianjia{}.csv'.format(i))
finally:
data_list.append(data)
data = pd.concat(data_list)
??數(shù)據(jù)分組處理普泡,我通過(guò)每個(gè)版塊里面每個(gè)經(jīng)紀(jì)人成交總價(jià)和每個(gè)版塊里面成交單價(jià)的前5名兩個(gè)方面來(lái)介紹。
?一审编,每個(gè)版塊里面每個(gè)經(jīng)紀(jì)人成交總價(jià)撼班,
data.dropna(subset = ['cjzongjia'], inplace = True) //去除cjzongjia缺省的行數(shù)據(jù)
data = data[~data['cjzongjia'].isin([0])] //去除cjzongjia中為0的數(shù)據(jù)
? ? 涉及知識(shí)點(diǎn):
? ? ?pandas.Series.isin(values):判斷values(為list)值是否在Series中,返回bool dtype
接下來(lái)缅阳,對(duì)數(shù)據(jù)按照‘bankuai’和‘xingming’進(jìn)行分組宫静,如下,返回一個(gè)object對(duì)象
data.groupby(by = ['bankuai', 'xingming'])['cjzongjia'].agg('sum')
? ? 涉及知識(shí)點(diǎn):
? ? ?DataFrame.groupby分組計(jì)算
? ? ? ? 1.DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False,observed=False)
? ? ? ? ? by:按照什么來(lái)分組孤里,可以是list
? ? ? ? 2.agg() 可以使用自定義函數(shù)和內(nèi)置函數(shù),比如data.groupby(['bankuai', 'xingming']).agg({'cjdanjia':fun, 'cjzongjia':'max'})(fun為自定義函數(shù))橘洞,可以針對(duì)每一列進(jìn)行函數(shù)計(jì)算,只能返回一個(gè)標(biāo)量值捌袜。
結(jié)算結(jié)果如下:
對(duì)每個(gè)版塊的成交前5名進(jìn)行分析炸枣,首先對(duì)cjdanjia進(jìn)行預(yù)處理虏等,通過(guò)
data.dropna(subset = ['cjdanjia'], inplace = True) //去除缺省值
data['cjdanjia'] = data.cjdanjia.map(lambda x: float(x.replace('元/平', ''))) //轉(zhuǎn)化類型
下面霍衫,我們就可以對(duì)其按照bankuai進(jìn)行分組,并且取每個(gè)版塊中cjdanjia的top5侯养,具體實(shí)現(xiàn)如下:
def top5(group, n=5):
return group.sort_values(by = ['cjdanjia'], ascending = False)[:n] //自定義函數(shù)敦跌,返回cjdanjia的top5
data.groupby(['bankuai']).apply(top5, 5) //計(jì)算得出結(jié)果
部分結(jié)果如下圖:
? ? ?DataFrame.groupby對(duì)象的apply()方法:是一個(gè)更一般化的方法,將一個(gè)數(shù)據(jù)分拆-應(yīng)用-匯總逛揩,跟agg()主要區(qū)別就是apply()不僅僅返回一個(gè)標(biāo)量值柠傍,可以返回多個(gè)或者其他類型。
總結(jié)
? 到目前為止辩稽,對(duì)版塊的每個(gè)經(jīng)紀(jì)人成交總價(jià)和單價(jià)的top5分析到此為止已經(jīng)分析完畢惧笛。
未完,后面寫會(huì)針對(duì)其他的方向?qū)︽溂覕?shù)據(jù)進(jìn)行分析逞泄。
如果對(duì)您有點(diǎn)幫助的話患整,麻煩您給點(diǎn)個(gè)贊,謝謝喷众。
鏈家數(shù)據(jù)分析一--數(shù)據(jù)離散化處理:鏈家數(shù)據(jù)分析一--數(shù)據(jù)離散化處理