99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀帝都房?jī)r(jià)回調(diào)?帶你用python了解北京二手房市場(chǎng)現(xiàn)狀
帝都房?jī)r(jià)回調(diào)?帶你用python了解北京二手房市場(chǎng)現(xiàn)狀
2020-08-10
收藏

CDA數(shù)據(jù)分析師 出品

作者:Mika

數(shù)據(jù):真達(dá)

后期:澤龍

【導(dǎo)讀】

今天讓我們來(lái)聊一聊北京的二手房市場(chǎng)現(xiàn)狀。

Show me data,用數(shù)據(jù)說(shuō)話

今天我們聊一聊 北京二手房數(shù)據(jù)

對(duì)于許多在一線城市打拼的人群而言,能夠在大城市安家,扎根下來(lái)都是為止奮斗的夢(mèng)想。但一線城市的突破天際房?jī)r(jià)也讓很多人望而卻步。

轉(zhuǎn)眼間2020年已經(jīng)過(guò)半,大家買房子、買房子的愿望實(shí)現(xiàn)了嗎?你關(guān)注的房子降價(jià)了嗎?

之前DT財(cái)經(jīng)的《我只有300萬(wàn)預(yù)算,能在上海買到什么樣的房子?》分析了上海二手房的房?jī)r(jià),引起了很多人的反響。

那么帝都的二手房市場(chǎng)又是怎樣的呢?這次我們用python來(lái)分析下北京的二手房數(shù)據(jù)。

我們使用python獲取了鏈家網(wǎng)上北京市16個(gè)區(qū)的二手房數(shù)據(jù)。首先導(dǎo)入要使用的數(shù)據(jù)處理包pandas,可視化工具pyecharts和plotly。





# 導(dǎo)入所需包
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import os  

from pyecharts.charts import Pie, Map, Bar, Line, Grid, Page
from pyecharts import options as opts 

import plotly as py 
import plotly.graph_objs as go 
import plotly.express as px 

使用循環(huán)讀入數(shù)據(jù)集,然后進(jìn)行去重處理,查看一下數(shù)據(jù)集大小,可以看到去重之后一共有4403條數(shù)據(jù)。

# 讀入數(shù)據(jù) file_list = os.listdir('../data/')

df_all = pd.DataFrame()  for file in file_list:
    file_name = file.split('.')[0]
    df = pd.read_csv(f'../data/{file}')
    df['region_name'] = file_name 
    df_all = df_all.append(df, ignore_index=True# 去重 df_all = df_all.drop_duplicates()
print(df_all.shape) 
(33509, 9)

預(yù)覽以下數(shù)據(jù):

df_all.head(2) 

02數(shù)據(jù)預(yù)處理

我們對(duì)數(shù)據(jù)集的各個(gè)特征進(jìn)行提取和處理,以便后續(xù)的數(shù)據(jù)分析工作,主要處理工作包含:

  1. title:無(wú)需分析,刪除
  2. detail_url:無(wú)需分析,刪除
  3. position:維度過(guò)細(xì)、刪除
  4. houseInfo:提取室、廳、面積、方位、裝修、樓層(高中低)、建筑年份、板塔
  5. followInfo:無(wú)需分析,刪除
  6. tag_info:提取是否靠近地鐵
  7. total_price:提取房屋總價(jià)
  8. unitPrice:房屋單價(jià)
  9. region_name:無(wú)需處理








# 刪除列
df_all = df_all.drop(['title', 'detail_url', 'position', 'followInfo'], axis=1)  

# 提取室廳
df_all['halls'] = df_all['houseInfo'].str.split('|').str[0].str.extract(r'(\d+)室')
df_all['bedrooms'] = df_all['houseInfo'].str.split('|').str[0].str.extract(r'\d室(\d+)廳') 
# 提取面積
df_all['area'] = df_all['houseInfo'].str.split('|').str[1].str.extract(r'(\d+.*\d+)平米')
# 提取朝向
df_all['orient'] = df_all['houseInfo'].str.split('|').str[2]
# 提取裝修類型
df_all['decorate_type'] = df_all['houseInfo'].str.split('|').str[3]
# 提取樓層
df_all['floor'] = df_all['houseInfo'].str.split('|').str[4]
# 提取建筑年份
df_all['built_year'] = df_all['houseInfo'].str.split('|').str[5].str.extract(r'(\d+)')
# 提取板塔
df_all['banta'] = df_all['houseInfo'].str.split('|').str[6]
# 刪除houseInfo
df_all = df_all.drop('houseInfo', axis=1) 

# 提取地鐵
df_all['subway'] = [1 if '地鐵' in i else 0 for i in df_all['tag_info']]
# 刪除tag_info
df_all = df_all.drop('tag_info', axis=1)

# 提取總價(jià)
df_all['total_price'] = df_all['total_price'].str.extract(r'(\d+)')
df_all['unitPrice'] = df_all['unitPrice'].str.extract(r'(\d+)')

# 空值-直接刪除
df_all = df_all.dropna()

# 轉(zhuǎn)換數(shù)據(jù)類型
df_all['total_price'] = df_all['total_price'].astype('int')
df_all['unitPrice'] = df_all['unitPrice'].astype('int')
df_all['halls'] = df_all['halls'].astype('int')
df_all['bedrooms'] = df_all['bedrooms'].astype('int')
df_all['area'] = df_all['area'].astype('float')
df_all['built_year'] = df_all['built_year'].astype('int')
df_all['subway'] = df_all['subway'].astype('int')
df_all.head() 


進(jìn)一步處理樓層、建筑年份和房屋朝向字段。





def transform_floor(x):
    if x == '高樓層' or x == '頂層' or x == '上疊':
        return '高層'
    elif x == '低樓層' or x == '底層' or x == '下疊' or x == '1層' or x == '2層' or x == '3層':
        return '低層'
    elif x == '中樓層' or x == '4層' or x == '5層' or x == '6層':
        return '中層' 
    elif x == '地下室':
        return '地下室'
    else:  # 其他歸為高層
        return '高層'  

# floor一般化
df_all['floor_type'] = df_all['floor'].str.replace(r'\(.*?\)', '').str.strip()
df_all['floor_type'] = df_all.floor_type.apply(transform_floor)
df_all = df_all.drop('floor', axis=1) 

# orient-一般化
df_all['orient'] = df_all['orient'].str.extract(r'([\u4e00-\u9fa5])')

# bulit_year
df_all['built_year'] = 2020 - df_all['built_year']

# banta-一般化
df_all['banta'] = df_all.banta.str.strip()
df_all.head() 

03數(shù)據(jù)探索和可視化

以下僅列出關(guān)鍵部分數(shù)據(jù)可視化分析代碼:

近一年北京二手房房?jī)r(jià)走勢(shì)圖

首先我們看到近一年來(lái),北京二手房房?jī)r(jià)的走勢(shì)圖,可以看到有回調(diào)的趨勢(shì),目前的均價(jià)在每平方米57589的樣子。

北京不同區(qū)域的二手房房源數(shù)量

那么北京各個(gè)區(qū)域的二手房源分布如何呢?

經(jīng)過(guò)統(tǒng)計(jì)可以看到,朝陽(yáng)區(qū)的二手房數(shù)量遙遙領(lǐng)先,達(dá)到25648.其次是豐臺(tái),共11094。之后海淀、昌平、大興緊隨其后。

北京不同區(qū)域的二手房均價(jià)

不同區(qū)域的二手房?jī)r(jià)又是怎樣的呢?西城區(qū)一馬當(dāng)先,以114980元每平米的價(jià)格領(lǐng)跑北京的二手房市場(chǎng)。其次,東城區(qū)以97295每平米排在第二位。海淀區(qū)以85954每平米的價(jià)格排在第三位。

代碼如下:

# 產(chǎn)生數(shù)據(jù) s_region = df_all.groupby('region_name')['unitPrice'].mean().sort_values(ascending=False) 
x_data = [i+'區(qū)' for i in s_region.index.tolist()]
y_data = [round(i) for i in s_region.values.tolist()] 

data_pair = [list(z) for z in zip(x_data, y_data)]

# 地圖
map1 = Map(init_opts=opts.InitOpts(width='1350px', height='750px'))
map1.add('', data_pair, maptype='北京')
map1.set_global_opts(title_opts=opts.TitleOpts(title='北京不同區(qū)域的二手房均價(jià)(元/平米)'), 
                     visualmap_opts=opts.VisualMapOpts(max_=114979))
map1.render() 
條形圖 bar2 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
bar2.add_xaxis(x_data)
bar2.add_yaxis('', y_data)
bar2.set_global_opts(title_opts=opts.TitleOpts(title='北京不同區(qū)域的二手房均價(jià)(元/平米)'), 
                     visualmap_opts=opts.VisualMapOpts(max_=114979))
bar2.render() 

北京二手房都處在什么價(jià)位

那么在北京買一套二手房到底要花多少錢?接著我們分析了二手房的價(jià)位,從圖中可以看到總價(jià)在300-500萬(wàn)內(nèi)的最多,占比達(dá)到35.9%。500-800萬(wàn)的占比26.54%。300萬(wàn)以下的占比19.54%。

代碼如下:

bins = [7430050080010008299]
bins_label = ['300萬(wàn)及以下''300-500萬(wàn)''500-800萬(wàn)''800-1000萬(wàn)''1000萬(wàn)以上'# 新增字段 df_all['price_cut'] = pd.cut(df_all['total_price'], bins=bins, labels=bins_label) 

price_num = df_all.price_cut.value_counts()  # 數(shù)據(jù)對(duì) data_pair = [list(z) for z in zip(price_num.index.tolist(), price_num.values.tolist())]

# 繪制餅圖
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie1.add('', data_pair=data_pair, radius=['30%''60%'], rosetype='radius')
pie1.set_global_opts(title_opts=opts.TitleOpts(title='北京二手房都處在哪些價(jià)位?'), 
                     legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter=":geybsqlxm7mc%"))
pie1.set_colors(['#FF7F0E''#1F77B4''#2CA02C''#D62728''#946C8B'])
pie1.render() 

北京二手房房齡分布

那么這些二手房的房齡都有多久了呢?可以看到房齡在20年以上的最多,有10946套占比33.73%,其次房齡在15-20年的有7835套,占比24.15%。5年以內(nèi)的僅有1441套,占比4.44%。

是否靠近地鐵和房屋單價(jià)的關(guān)系

一般來(lái)說(shuō),靠近地鐵越近的房子房?jī)r(jià)越高,從分布的箱線圖可以看出,以中位數(shù)來(lái)看,靠近地鐵的房子單價(jià)比不不靠近地鐵的房子每平米高12317元。

不同朝向的房屋數(shù)量分布

房屋朝向方面,朝南的自然是最多的,占比達(dá)到68.97%。其次是朝東的,占比18.25%。

不同房屋結(jié)構(gòu)的數(shù)量分布

房屋結(jié)構(gòu)方面,板樓是最多的占比64.39%。其次是塔樓,占比16.85%。板樓塔樓結(jié)合的占比16.45%。

房屋面積和房屋價(jià)格的關(guān)系

散點(diǎn)圖可以看出,房屋的面積和房屋價(jià)格呈現(xiàn)正相關(guān),計(jì)算皮爾遜相關(guān)系數(shù)的值為0.67,為強(qiáng)相關(guān)。

代碼如下:

# 添加軌跡 fig = px.scatter(df_all, x='area', y='total_price')

fig.update_layout(title='房屋面積和房屋價(jià)格的關(guān)系(萬(wàn)元)') 
py.offline.plot(fig, filename='房屋面積和房屋價(jià)格的關(guān)系.html'

臥室數(shù)量和房屋價(jià)格的關(guān)系

從分布的箱線圖可以看出,臥室數(shù)量越多,面積越大,則房屋總價(jià)越高。房?jī)r(jià)呈現(xiàn)右偏分布,且離群值較多。

客廳數(shù)量和房屋價(jià)格的關(guān)系

客廳和臥室一樣反映在房屋的面積上,客廳 數(shù)越多,則房屋總價(jià)越高。

代碼如下:

# 合并 df_all['halls'] = [i if i<=4 else '5及以上' for i in df_all['halls']]
df_all['halls'] = df_all.halls.astype('str') # 添加數(shù)據(jù) y1 = df_all[df_all['halls']=='1']['total_price'].values
y2 = df_all[df_all['halls']=='2']['total_price'].values
y3 = df_all[df_all['halls']=='3']['total_price'].values
y4 = df_all[df_all['halls']=='4']['total_price'].values
y5 = df_all[df_all['halls']=='5及以上']['total_price'].values # 實(shí)例Figure fig = go.Figure()  # 添加軌跡 fig.add_trace(trace=go.Box(y=y1, name='1廳'))
fig.add_trace(trace=go.Box(y=y2, name='2廳'))
fig.add_trace(trace=go.Box(y=y3, name='3廳'))
fig.add_trace(trace=go.Box(y=y4, name='4廳'))
fig.add_trace(trace=go.Box(y=y5, name='5廳及以上')) # 配置項(xiàng) fig.update_layout(title='客廳數(shù)量和房屋價(jià)格的關(guān)系(萬(wàn)元)')
py.offline.plot(fig, filename='客廳數(shù)量和房屋價(jià)格的關(guān)系.html') 

裝修類型和房屋單價(jià)的關(guān)系

不同裝修類型花費(fèi)的成本不同,從裝修類型看,精裝的房子單價(jià)最高,然后是簡(jiǎn)裝、毛坯。

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }