生活随笔
收集整理的這篇文章主要介紹了
python数据分析项目实战—————链家北京租房数据统计分析
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
鏈家北京租房數(shù)據(jù)分析
1、讀取數(shù)據(jù)
import pandas
as pd
import matplotlib
. pyplot
as plt
import numpy
as npdata_dframe
= pd
. read_csv
( '鏈家北京租房數(shù)據(jù).csv' , header
= 0 , encoding
= 'gbk' )
data_dframe
區(qū)域小區(qū)名稱(chēng)戶型面積(㎡)價(jià)格(元/月) 0 東城 萬(wàn)國(guó)城MOMA 1室0廳 59.11平米 10000 1 東城 北官?gòu)d胡同2號(hào)院 3室0廳 56.92平米 6000 2 東城 和平里三區(qū) 1室1廳 40.57平米 6900 3 東城 菊兒胡同 2室1廳 57.09平米 8000 4 東城 交道口北二條35號(hào)院 1室1廳 42.67平米 5500 … … … … … … 8218 順義 怡馨家園 3室1廳 114.03平米 5500 8219 順義 旭輝26街區(qū) 4房間2衛(wèi) 59平米 5000 8220 順義 前進(jìn)花園玉蘭苑 3室1廳 92.41平米 5800 8221 順義 雙裕小區(qū) 2室1廳 71.81平米 4200 8222 順義 櫻花園二區(qū) 1室1廳 35.43平米 2700
8223 rows × 5 columns
2、數(shù)據(jù)預(yù)處理
2.1 刪除數(shù)據(jù)中的重復(fù)值和缺失值
data_dframe
= data_dframe
. dropna
( )
data_dframe
= data_dframe
. drop_duplicates
( )
data_dframe
區(qū)域小區(qū)名稱(chēng)戶型面積(㎡)價(jià)格(元/月) 0 東城 萬(wàn)國(guó)城MOMA 1室0廳 59.11平米 10000 1 東城 北官?gòu)d胡同2號(hào)院 3室0廳 56.92平米 6000 2 東城 和平里三區(qū) 1室1廳 40.57平米 6900 3 東城 菊兒胡同 2室1廳 57.09平米 8000 4 東城 交道口北二條35號(hào)院 1室1廳 42.67平米 5500 … … … … … … 8218 順義 怡馨家園 3室1廳 114.03平米 5500 8219 順義 旭輝26街區(qū) 4房間2衛(wèi) 59平米 5000 8220 順義 前進(jìn)花園玉蘭苑 3室1廳 92.41平米 5800 8221 順義 雙裕小區(qū) 2室1廳 71.81平米 4200 8222 順義 櫻花園二區(qū) 1室1廳 35.43平米 2700
5773 rows × 5 columns 我們可以看到,現(xiàn)在的數(shù)據(jù)中,戶型那一列不太規(guī)范,有4房間2衛(wèi)、3室1廳這種,我們統(tǒng)一改成“x室x廳”格式
2.2 將“戶型”一列統(tǒng)一調(diào)整為“x室x廳”格式
housetype
= data_dframe
[ '戶型' ]
htlist
= [ ]
for i
in housetype
: new_info
= i
. replace
( '房間' , '室' ) htlist
. append
( new_info
)
data_dframe
. loc
[ : , '戶型' ] = htlist
htlist
= [ ]
for i
in housetype
: new_info
= i
. replace
( '衛(wèi)' , '廳' ) htlist
. append
( new_info
)
data_dframe
. loc
[ : , '戶型' ] = htlist
data_dframe
data_dframe
[ '戶型' ] = data_dframe
[ '戶型' ] . str . replace
( '房間' , '室' )
data_dframe
[ '戶型' ] = data_dframe
[ '戶型' ] . str . replace
( '衛(wèi)' , '廳' )
data_dframe
區(qū)域小區(qū)名稱(chēng)戶型面積(㎡)價(jià)格(元/月) 0 東城 萬(wàn)國(guó)城MOMA 1室0廳 59.11平米 10000 1 東城 北官?gòu)d胡同2號(hào)院 3室0廳 56.92平米 6000 2 東城 和平里三區(qū) 1室1廳 40.57平米 6900 3 東城 菊兒胡同 2室1廳 57.09平米 8000 4 東城 交道口北二條35號(hào)院 1室1廳 42.67平米 5500 … … … … … … 8218 順義 怡馨家園 3室1廳 114.03平米 5500 8219 順義 旭輝26街區(qū) 4室2廳 59平米 5000 8220 順義 前進(jìn)花園玉蘭苑 3室1廳 92.41平米 5800 8221 順義 雙裕小區(qū) 2室1廳 71.81平米 4200 8222 順義 櫻花園二區(qū) 1室1廳 35.43平米 2700
5773 rows × 5 columns
2.3 將“面積”一列調(diào)整為數(shù)值格式
data_dframe
[ '面積(㎡)' ] = data_dframe
[ '面積(㎡)' ] . str . replace
( '平米' , ' ' )
data_dframe
[ '面積(㎡)' ] = data_dframe
[ '面積(㎡)' ] . astype
( dtype
= 'float64' )
data_dframe
hsarr
= np
. array
( [ ] )
housesize
= data_dframe
[ '面積(㎡)' ] . values
for i
in housesize
: hsarr
= np
. append
( hsarr
, np
. array
( i
[ : - 2 ] ) )
housesize
= hsarr
. astype
( np
. float64
)
data_dframe
. loc
[ : , '面積(㎡)' ] = housesize
data_dframe
區(qū)域小區(qū)名稱(chēng)戶型面積(㎡)價(jià)格(元/月) 0 東城 萬(wàn)國(guó)城MOMA 1室0廳 59.11 10000 1 東城 北官?gòu)d胡同2號(hào)院 3室0廳 56.92 6000 2 東城 和平里三區(qū) 1室1廳 40.57 6900 3 東城 菊兒胡同 2室1廳 57.09 8000 4 東城 交道口北二條35號(hào)院 1室1廳 42.67 5500 … … … … … … 8218 順義 怡馨家園 3室1廳 114.03 5500 8219 順義 旭輝26街區(qū) 4室2廳 59 5000 8220 順義 前進(jìn)花園玉蘭苑 3室1廳 92.41 5800 8221 順義 雙裕小區(qū) 2室1廳 71.81 4200 8222 順義 櫻花園二區(qū) 1室1廳 35.43 2700
5773 rows × 5 columns
2.4 使用箱形圖檢查“面積”和“價(jià)格”列中是否存在異常數(shù)據(jù)
plt
. rcParams
[ 'font.sans-serif' ] = [ 'SimHei' ]
plt
. figure
( ) . canvas
. set_window_title
( '面積、價(jià)格箱形圖' )
plt
. tick_params
( )
da
. boxplot
( column
= [ '面積(㎡)' , '價(jià)格(元/月)' ] )
plt
. show
( )
3、統(tǒng)計(jì)分析
3.1 使用“區(qū)域”和“小區(qū)名稱(chēng)”新增“位置”一列,形如“北京市xx區(qū)xx”
data_dframe
[ '位置' ] = '北京市' + data_dframe
[ '區(qū)域' ] + '區(qū)' + data_dframe
[ '小區(qū)名稱(chēng)' ]
3.2 對(duì)“戶型”、“面積”和“價(jià)格”以及每平米價(jià)格等信息進(jìn)行簡(jiǎn)要的統(tǒng)計(jì)分析,如每平米價(jià)格的最大值、最小值、平均值,“面積”的分箱區(qū)間統(tǒng)計(jì),“戶型”的種類(lèi)統(tǒng)計(jì)等
data_dframe
[ '價(jià)格(元/㎡)' ] = data_dframe
[ '價(jià)格(元/月)' ] / data_dframe
[ '面積(㎡)' ]
print ( round ( data_dframe
. loc
[ : , '價(jià)格(元/㎡)' ] . mean
( ) , 2 ) )
print ( round ( data_dframe
. loc
[ : , '價(jià)格(元/㎡)' ] . max ( ) , 2 ) )
print ( round ( data_dframe
. loc
[ : , '價(jià)格(元/㎡)' ] . min ( ) , 2 ) )
“面積”的分箱區(qū)間統(tǒng)計(jì)
area_divide
= [ 0 , 50 , 100 , 150 , 200 , 250 , 9999 ]
area_cut_data
= pd
. cut
( list ( data_dframe
[ '面積(㎡)' ] ) , area_divide
) . describe
( )
area_cut_data
categories(類(lèi)別)counts(數(shù)量)freqs(頻率) (0, 50] 751 0.130088 (50, 100] 3218 0.557422 (100, 150] 1070 0.185346 (150, 200] 408 0.070674 (200, 250] 176 0.030487 (250, 9999] 150 0.025983
df_grouped_HuXing
= data_dframe
. groupby
( '戶型' )
for i
, j
in df_grouped_HuXing
: print ( i
, end
= ' ' )
4、分組分析
4.1 按照具體戶型(如3室2廳)或戶型中的室(如3室)進(jìn)行分組,統(tǒng)計(jì)每種戶型的數(shù)量、最高/最低/平均租價(jià)等信息
new_df
= dframe2
new_df
[ '戶型' ] = new_df
[ '戶型' ] . str . replace
( '室[0-9]廳' , '' )
df_grouped_Hx
= new_df
. groupby
( '戶型' )
new_list
= [ ]
for i
, j
in df_grouped_Hx
: new_list
. append
( i
+ '室' )
new_info_list
= [ 0 ] * len ( new_list
)
new_df_Hx
= pd
. DataFrame
( { '戶型' : new_list
, '戶型數(shù)量' : new_info_list
, '最高租價(jià)' : new_info_list
, '最低租價(jià)' : new_info_list
, '平均租價(jià)' : new_info_list
} )
new_df_Hx
[ '戶型數(shù)量' ] = df_grouped_Hx
. count
( ) . values
new_df_Hx
[ '最高租價(jià)' ] = df_grouped_Hx
[ '價(jià)格(元/月)' ] . max ( ) . values
new_df_Hx
[ '最低租價(jià)' ] = df_grouped_Hx
[ '價(jià)格(元/月)' ] . min ( ) . values
new_df_Hx
[ '平均租價(jià)' ] = df_grouped_Hx
[ '價(jià)格(元/月)' ] . mean
( ) . values
new_df_Hx
[ '平均租價(jià)' ] = round ( new_df_Hx
[ '平均租價(jià)' ] , 2 )
new_df_Hx
戶型戶型數(shù)量最高租價(jià)最低租價(jià)平均租價(jià) 0 0室 1 566 566 566.00 1 1室 1237 81000 900 6536.99 2 2室 2681 60000 2100 7138.85 3 3室 1421 85000 2400 12047.22 4 4室 304 120000 3300 22511.84 5 5室 97 150000 5000 30685.57 6 6室 18 90000 13000 36472.22 7 7室 7 108000 15000 45328.57 8 8室 2 126000 30000 78000.00 9 9室 5 60000 22000 44400.00
4.2 按照區(qū)域(如海淀)進(jìn)行分組,統(tǒng)計(jì)房源數(shù)量、最高/最低/平均租價(jià)等信息
df_grouped_area
= dframe
. groupby
( '區(qū)域' )
area_list
= [ ]
for i
, j
in df_grouped_area
: area_list
. append
( i
)
area_info_list
= [ 0 ] * len ( area_list
)
new_df_area
= pd
. DataFrame
( { '區(qū)域' : area_list
, '房源數(shù)量' : area_info_list
, '最高租價(jià)' : area_info_list
, '最低租價(jià)' : area_info_list
, '平均租價(jià)' : area_info_list
} )
new_df_area
[ '房源數(shù)量' ] = df_grouped_area
. count
( ) . values
new_df_area
[ '最高租價(jià)' ] = df_grouped_area
[ '價(jià)格(元/月)' ] . max ( ) . values
new_df_area
[ '最低租價(jià)' ] = df_grouped_area
[ '價(jià)格(元/月)' ] . min ( ) . values
new_df_area
[ '平均租價(jià)' ] = df_grouped_area
[ '價(jià)格(元/月)' ] . mean
( ) . values
new_df_area
[ '平均租價(jià)' ] = round ( new_df_area
[ '平均租價(jià)' ] , 2 )
new_df_area
區(qū)域房源數(shù)量最高租價(jià)最低租價(jià)平均租價(jià) 0 東城 412 60000 3000 13825.36 1 豐臺(tái) 855 95000 2000 7394.03 2 亦莊開(kāi)發(fā)區(qū) 213 45000 3000 8773.24 3 大興 246 30000 2100 4038.42 4 房山 246 30000 2100 4038.42 5 昌平 503 48000 566 7060.60 6 朝陽(yáng) 2360 150000 2500 12515.33 7 海淀 780 126000 2500 11514.81 8 石景山 245 20000 2500 6570.41 9 西城 604 104000 3000 13229.26 10 通州 676 30000 2300 5776.78 11 門(mén)頭溝 392 10000 1750 3657.53 12 順義 419 60000 2200 7287.83
5、數(shù)據(jù)可視化
5.1 將“戶型”按x室繪制為餅圖
plt
. rcParams
[ 'font.sans-serif' ] = [ 'SimHei' ]
plt
. rcParams
[ 'axes.unicode_minus' ] = False
plt
. pie
( new_df_Hx
[ '戶型數(shù)量' ] , labels
= new_df_Hx
[ '戶型' ] , autopct
= '%1.1f%%' , shadow
= False , startangle
= 90 )
plt
. legend
( )
plt
. show
( )
5.2 將“面積”按不同的區(qū)間繪制為餅圖
area_percentage
= ( area_cut_data
[ 'freqs' ] . values
) * 100
area_labels
= [ '50平方米以下' , '50-100平方米' , '100-150平方米' , '150-200平方米' , '200-250平方米' , '250平方米以上' ]
plt
. figure
( figsize
= fig_size
) . canvas
. set_window_title
( '面積' )
plt
. axes
( aspect
= 1 )
plt
. pie
( x
= area_percentage
, labels
= area_labels
, autopct
= '%1.1f %%' , labeldistance
= 1.1 , startangle
= 90 , pctdistance
= 0.7 )
plt
. legend
( )
plt
. show
( )
5.3 將“價(jià)格”按不同的區(qū)間繪制為餅圖
price_divide
= [ 2000 , 3000 , 4000 , 5000 , 6000 , 7000 , 8000 , 9000 , 10000 , 13000 , 150000 ]
price_cut_data
= pd
. cut
( list ( dframe2
[ '價(jià)格(元/月)' ] ) , price_divide
) . describe
( )
price_percentage
= ( price_cut_data
[ 'freqs' ] . values
) * 100
price_labels
= [ '2000元/月以下' , '2000-3000元/月' , '3000-4000元/月' , '4000-5000元/月' , '5000-6000元/月' , '6000-7000元/月' , '7000-8000元/月' , '8000-9000元/月' , '9000-10000元/月' , '10,000-13,0000元/月' , '13,000-15,0000元/月' ]
plt
. figure
( figsize
= fig_size
) . canvas
. set_window_title
( '價(jià)格' )
plt
. axes
( aspect
= 1 )
plt
. pie
( x
= price_percentage
, labels
= price_labels
, autopct
= '%1.1f %%' , labeldistance
= 1.1 , startangle
= 90 , pctdistance
= 0.7 )
plt
. legend
( )
plt
. show
( )
5.4 使用條形圖、折線圖等形式繪制“戶型”(按室,如3室)和區(qū)域(如海淀)分組的房源數(shù)量和平均租金信息
x_Hx
= new_df_Hx
[ '戶型' ]
y1_Hx
= new_df_Hx
[ '戶型數(shù)量' ]
y2_Hx
= new_df_Hx
[ '平均租價(jià)' ]
fig_Hx
, ax1_Hx
= plt
. subplots
( )
ax2_Hx
= ax1_Hx
. twinx
( )
ax1_Hx
. plot
( x_Hx
, y1_Hx
, color
= 'blue' )
ax2_Hx
. plot
( x_Hx
, y2_Hx
, color
= 'red' )
ax1_Hx
. set_xlabel
( '戶型種類(lèi)' )
ax1_Hx
. set_ylabel
( '戶型數(shù)量' , color
= 'blue' )
ax2_Hx
. set_ylabel
( '平均租價(jià)' , color
= 'red' )
plt
. show
( )
x_area
= new_df_area
[ '區(qū)域' ]
y1_area
= new_df_area
[ '房源數(shù)量' ]
y2_area
= new_df_area
[ '平均租價(jià)' ]
fig_area
, ax1_area
= plt
. subplots
( )
ax2_area
= ax1_area
. twinx
( )
ax1_area
. plot
( x_area
, y1_area
, color
= 'blue' )
ax2_area
. plot
( x_area
, y2_area
, color
= 'red' )
ax1_area
. set_xlabel
( '區(qū)域' )
ax1_area
. set_ylabel
( '房源數(shù)量' , color
= 'blue' )
ax2_area
. set_ylabel
( '平均租價(jià)' , color
= 'red' )
plt
. show
( )
總結(jié)
以上是生活随笔 為你收集整理的python数据分析项目实战—————链家北京租房数据统计分析 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。