關(guān)于
? 學(xué)習(xí)日月光華老師的《Python數(shù)據(jù)分析從入門到機(jī)器學(xué)習(xí)》,通過寫該文來鞏固數(shù)據(jù)分析中使用的知識點。
主要是針對鏈家的數(shù)據(jù)進(jìn)行各個不同方向的分析,本文是第二篇,針對數(shù)據(jù)中各個房源成交單價及其總價的分析。
準(zhǔn)備
工具 :Anaconda、juyter notebook
類庫:numpy、pandas、matplotlib
分析及代碼實現(xiàn)
? 首先接上一篇,先讀入整個的數(shù)據(jù),代碼實現(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ù)分組處理,我通過每個版塊里面每個經(jīng)紀(jì)人成交總價和每個版塊里面成交單價的前5名兩個方面來介紹。
?一,每個版塊里面每個經(jīng)紀(jì)人成交總價,

data.dropna(subset = ['cjzongjia'], inplace = True) //去除cjzongjia缺省的行數(shù)據(jù)
data = data[~data['cjzongjia'].isin([0])] //去除cjzongjia中為0的數(shù)據(jù)
? ? 涉及知識點:
? ? ?pandas.Series.isin(values):判斷values(為list)值是否在Series中,返回bool dtype
接下來,對數(shù)據(jù)按照‘bankuai’和‘xingming’進(jìn)行分組,如下,返回一個object對象

data.groupby(by = ['bankuai', 'xingming'])['cjzongjia'].agg('sum')
? ? 涉及知識點:
? ? ?DataFrame.groupby分組計算
? ? ? ? 1.DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False,observed=False)
? ? ? ? ? by:按照什么來分組,可以是list
? ? ? ? 2.agg() 可以使用自定義函數(shù)和內(nèi)置函數(shù),比如data.groupby(['bankuai', 'xingming']).agg({'cjdanjia':fun, 'cjzongjia':'max'})(fun為自定義函數(shù)),可以針對每一列進(jìn)行函數(shù)計算,只能返回一個標(biāo)量值。
結(jié)算結(jié)果如下:

對每個版塊的成交前5名進(jìn)行分析,首先對cjdanjia進(jìn)行預(yù)處理,通過

data.dropna(subset = ['cjdanjia'], inplace = True) //去除缺省值
data['cjdanjia'] = data.cjdanjia.map(lambda x: float(x.replace('元/平', ''))) //轉(zhuǎn)化類型
下面,我們就可以對其按照bankuai進(jìn)行分組,并且取每個版塊中cjdanjia的top5,具體實現(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) //計算得出結(jié)果
部分結(jié)果如下圖:

? ? ?DataFrame.groupby對象的apply()方法:是一個更一般化的方法,將一個數(shù)據(jù)分拆-應(yīng)用-匯總,跟agg()主要區(qū)別就是apply()不僅僅返回一個標(biāo)量值,可以返回多個或者其他類型。
總結(jié)
? 到目前為止,對版塊的每個經(jīng)紀(jì)人成交總價和單價的top5分析到此為止已經(jīng)分析完畢。
未完,后面寫會針對其他的方向?qū)︽溂覕?shù)據(jù)進(jìn)行分析。
如果對您有點幫助的話,麻煩您給點個贊,謝謝。
鏈家數(shù)據(jù)分析一--數(shù)據(jù)離散化處理:鏈家數(shù)據(jù)分析一--數(shù)據(jù)離散化處理