鏈家數(shù)據(jù)分析二-數(shù)據(jù)分組處理

關(guān)于
? 學(xué)習(xí)日月光華老師的《Python數(shù)據(jù)分析從入門(mén)到機(jī)器學(xué)習(xí)》,通過(guò)寫(xiě)該文來(lái)鞏固數(shù)據(jù)分析中使用的知識(shí)點(diǎn)。
主要是針對(duì)鏈家的數(shù)據(jù)進(jìn)行各個(gè)不同方向的分析,本文是第二篇,針對(duì)數(shù)據(jù)中各個(gè)房源成交單價(jià)及其總價(jià)的分析。
準(zhǔn)備
工具 :Anaconda、juyter notebook
類(lèi)庫(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à),

我們要對(duì)成交總價(jià)進(jìn)行分析,首先先查看一個(gè)cjzongjia這個(gè)參數(shù)的類(lèi)型,如下:
image.png
,從上面可知,類(lèi)型為float64,可以直接進(jìn)行計(jì)算。如下,對(duì)cjzongjia進(jìn)行去除缺省值,并且去除cjzongjia為0的數(shù)據(jù)
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ì)象

image.png
對(duì)每個(gè)板塊經(jīng)紀(jì)人的cjzongjia進(jìn)行求和,具體的實(shí)現(xiàn)如下

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é)果如下:

image.png
?二、每個(gè)版塊里面成交單價(jià)的前5名
對(duì)每個(gè)版塊的成交前5名進(jìn)行分析,首先對(duì)cjdanjia進(jìn)行預(yù)處理,通過(guò)
image.png
可以看出cjdanjia為object型,我們需要對(duì)其進(jìn)行處理,如下

data.dropna(subset = ['cjdanjia'], inplace = True) //去除缺省值
data['cjdanjia'] = data.cjdanjia.map(lambda x: float(x.replace('元/平', ''))) //轉(zhuǎn)化類(lèi)型

下面,我們就可以對(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é)果如下圖:

image.png
? ? 涉及知識(shí)點(diǎn):
? ? ?DataFrame.groupby對(duì)象的apply()方法:是一個(gè)更一般化的方法,將一個(gè)數(shù)據(jù)分拆-應(yīng)用-匯總,跟agg()主要區(qū)別就是apply()不僅僅返回一個(gè)標(biāo)量值,可以返回多個(gè)或者其他類(lèi)型。
總結(jié)
? 到目前為止,對(duì)版塊的每個(gè)經(jīng)紀(jì)人成交總價(jià)和單價(jià)的top5分析到此為止已經(jīng)分析完畢。
未完,后面寫(xiě)會(huì)針對(duì)其他的方向?qū)︽溂覕?shù)據(jù)進(jìn)行分析。

如果對(duì)您有點(diǎn)幫助的話,麻煩您給點(diǎn)個(gè)贊,謝謝。

鏈家數(shù)據(jù)分析一--數(shù)據(jù)離散化處理:鏈家數(shù)據(jù)分析一--數(shù)據(jù)離散化處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容