房價影響因素挖掘


 房價影響因素挖掘

 

1、數據清洗、整合
① 將“house_rent”、“house_sell”分別讀取
② 分別計算平方米建築面積的月租金、每平方米建築面積的房價
③ 將數據按照小區名合並
====>>>
① 刪除缺失值
② 按照小區做均值分析

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings('ignore') 
# 不發出警告
'''
(1)讀取數據
'''

import os
os.chdir(r'C:\Users\Administrator\Desktop\python數據分析\項目\10房價')
# 創建工作路徑

df01 = pd.read_csv('house_rent.csv',engine = 'python')
df02 = pd.read_csv('house_sell.csv',engine = 'python')
# 讀取數據

df01.dropna(inplace = True)
df02.dropna(inplace = True)
# 刪除缺失值

'''
(2)計算指標並按照租金、售價匯總
'''
df01['rent_area'] = df01['price']/df01['area']
data_rent = df01[['community','rent_area','lng','lat']].groupby(by = 'community').mean()
data_sell = df02[['property_name','average_price','lng','lat']].groupby(by = 'property_name').mean()
data_rent.reset_index(inplace = True)
data_sell.reset_index(inplace = True)
#數據計算並匯總

data = pd.merge(data_rent,data_sell,left_on ='community',right_on='property_name')
data = data[['community','rent_area','average_price','lng_x','lat_x']]
data.rename(columns={'average_price':'sell_area', 'lng_x':'lng', 'lat_x':'lat'}, inplace = True)  # 調整列名

 

房屋的租售比一般 200--300的區別比較合適

比如100平方米的房子,均價2萬,總共200萬;

假如貸款 3成,即600000萬,按照6%左右的利率去算,貸款140萬,期限30年; 用貸款計算器算下:

140萬貸款30年,6.37%利率,本息合計3142656.29,每月還款8729.6元;租金跑贏每月的還款8729.6,租金假如是8800,

租售比8800/100/20000=0.0044     1/0.0044=227.27;假如你買的房子能跑贏匯率,大概在200--300之間。如果在這個區間內,或者小於200則是非常有投資價值的。

如果大於200,甚至超過500,則可能存在泡沫風險。

 

'''
(3)計算房屋租售比
'''
# 計算“房屋售租比”,並做初步判斷
# “房屋售租比”=“每平方米建築面積的房價”/“每平方米建築面積的月租金” 
# 含義可以簡單理解為:“在保持當前的房價和租金條件不變的情況下,完全收回投資需要多少個月?”
#  **一般而言,按照國際經驗,在一個房產運行情況良好的區域,應該可以在200-300個月內完全回收投資。
#  **如果少於200個月(17年)就能收回投資,說明這個地區有較高的投資價值;
#  **如果一個地區需要高於300個月(25年),比如1200個月(100年)才能回收投資,則說明該地區有潛在的房產泡沫風險。

data['sell_rent'] = data['sell_area']/data['rent_area']
print('上海房屋租售比中位數為%i個月' % data['sell_rent'].median())
# 計算售租比,及中位數

# 繪制直方圖 data['sell_rent'].plot.hist(stacked=True,bins=100,color = 'green',alpha=0.5,grid=True,figsize = (10,4)) plt.title('房屋售租比-直方圖')
# 繪制箱型圖 color = dict(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray') data['sell_rent'].plot.box(vert=False, grid = True,color = color,figsize = (10,4)) plt.title('房屋售租比-箱型圖')

一個尷尬的結論
如果按照中位數725個月來看,假設從25歲研究生一畢業,就立刻全款買了一套房,然后放出去收租
 那么約85歲時,這60年來陸陸續續所收的租金總數就可以達到了25歲時買房所付的錢啦
**這里還沒考慮凈現值折算問題
 ① 如果僅靠租金收入的話,上海全市平均回收投資需要725個月。而這種格局的維持,必須有賴於購房者對上海的房價上升的持續預期。
 也就是說,在上海,投資房產絕不是利率收益,而是預期收益(其實城市越小租金回報反而越高)
 ② 上海不是這么看住房投資的(絕大多數房子房租收入跑不贏商貸利率,否則按照這個思路看那肯定是買一個虧一個)

 

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings('ignore') 
# 不發出警告


'''
(1)導出數據
'''

data.to_csv('pro10data.csv')


print('finish')

 

上海市人口密度、路網密度、餐飲價格和“房屋每平米均價”是否有關系呢?

上海市人口密度、路網密度、餐飲價格和“房屋每平米均價”是否有關系呢?
要求:
① 首先,導出整理好的數據,並qgis中繪制空間格網圖,查看房屋每平米均價、房屋每平米租金及售租比數據的空間分布
② 第二,空間統計,分別按照格網對人口密度、路網密度、餐飲價格進行指標統計並標准化
③ 第三,加載上海中心點point空間數據,計算每個網格到市中心距離
④ 第四,將空間格網的“房屋每平米均價”按照距市中心的距離排序,並制作散點圖,看看能否挖掘出什么信息
   *** 這里市中心點坐標為:lng-353508.848122,lat-3456140.926976 (投影坐標系)
提示:
① 導出csv數據,用dataframe.to_csv()
② qgis加載數據后,以“net_population”為格網數據做空間統計
③ 注意qgis數據都為投影坐標系
④ 人口密度指標 → 已有“net_population”數據
   路網密度指標 → 以格網為空間單元,計算道路長度
   餐飲價格指標 → 以格網為空間單元,計算餐飲設施的人均均價數據
   *** 最后數據導入python中,標准化得分至0-1區間
   *** 導入數據后要填充空值為0
   *** qgis中可以用結果net數據作為下一個分析數據,以此將統計結果匯總在一張屬性表內
   *** 格網數據在導出前,先轉為點數據,並計算經緯度,這里用投影經緯度,好依據中心點坐標計算離市中心距離
⑤ 清洗數據,去除“售租比”為0的數據

 

都轉成投影坐標系 ===>>圖層轉成投影坐標系

 人口的指標已經有了net_polulation

路網密度指標:Z值 

矢量--分析工具---計算線條總長度

餐飲的價格指標

計算多邊形內點的數目

每個單元格內小區里邊租金的均值和房價的均值

datapoin是pro10data的投影坐標系

 

得到net03數據,分別按照不同的指標進行核算,先按照房價sell_area

加載上海市行政區數據,設置下樣式

 

 

再看看它的租金水平:rent_area

 

離市中心的距離,只要算出格網點就可以了

把柵格從網格變成點

 矢量--幾何工具--導出多邊形的點(質心)  得到netpoint,就不把它做投影了,需要的就是它的投影坐標系的點坐標

 添加X、Y坐標,

同理lat

得到:

 導出得到result02.xlsx的數據

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings('ignore') 
# 不發出警告


'''
(1)導出數據
'''

data.to_csv('pro10data.csv')
'''
(2)加載數據
'''
data_q3 = pd.read_csv(r'C:\Users\Administrator\Desktop\python數據分析\項目\10房價\result02.csv',engine = 'python')
data_q3.fillna(0,inplace = True)


'''
(3)指標標准化處理
'''
def f1(data,col):
    return (data[col]-data[col].min())/(data[col].max()-data[col].min())
# 創建函數

data_q3['人口密度指標'] = f1(data_q3,'Z')
data_q3['路網密度指標'] = f1(data_q3,'長度')
data_q3['餐飲價格指標'] = f1(data_q3,'人均消費_')
# 指標標准化

data_q3['離市中心距離'] = ((data_q3['lng'] - 353508.848122)**2 + (data_q3['lat']-3456140.926976)**2)**0.5
# 計算市中心距離

data_q3_test = data_q3[['人口密度指標','路網密度指標','餐飲價格指標','sell_area_','離市中心距離']]
data_q3_test = data_q3_test[data_q3_test['sell_area_']>0].reset_index()
del data_q3_test['index']
# 清洗數據,去除“房屋每平米均價”為0的數據

#查看整個指標相關性
plt.figure(figsize = (15, 6))
plt.scatter(data_q3_test['人口密度指標'],data_q3_test['sell_area_'],s = 2,alpha = 0.2)
plt.figure(figsize = (15, 6))
plt.scatter(data_q3_test['路網密度指標'],data_q3_test['sell_area_'],s = 2,alpha = 0.2)
plt.figure(figsize = (15, 6))
plt.scatter(data_q3_test['餐飲價格指標'],data_q3_test['sell_area_'],s = 2,alpha = 0.2)
plt.figure(figsize = (15, 6))
plt.scatter(data_q3_test['離市中心距離'],data_q3_test['sell_area_'],color = 'red',s = 2,alpha = 0.2)

data_q3_test.corr().loc['sell_area_']  #查看指標之間相關系數

print('finish')

 

 

 

# 結論
① 在上海全市層面,“離市中心距離”與“房屋每平米均價”相關性最強
② “人口密度”及“路網密度”和“房屋每平米均價”為中等相關
③ “餐飲價格”與“房屋每平米均價”為弱相關
 ④ “房屋每平米均價”數據的離散程度卻和空間距離有關 → “房屋每平米均價”越靠近市中心越離散,越遠離市中心則越收斂

 

 

按照離市中心距離每10km,分別再次判斷人口密度、路網密度、餐飲價格和“房屋每平米均價”的相關程度

按照離市中心距離每10km,分別再次判斷人口密度、路網密度、餐飲價格和“房屋每平米均價”的相關程度
要求:
① 按照空間距離分別迭代計算三指標和“房屋每平米均價”的關系
② 繪制折線圖查看:隨着市中心距離增加,不同指標相關系系數變化情況
   *** 用bokeh制圖
====>>>
① 用for循環迭代空間距離,然后篩選數據並計算相關性
② bokeh可以通過多次調用figure.line()來繪制多條折線圖

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings('ignore') 
# 不發出警告
'''
# 按照空間距離分別迭代計算三指標和“房屋每平米均價”的關系
(1)按照市中心距離來分析指標相關性
'''
dis = []                # 距離空列表
rkmd_pearson = []       # 人口密度相關性系數空列表
lwmd_pearson = []       # 路網密度相關性系數空列表
cyjg_pearson = []       # 餐飲價格相關性系數空列表
zxjl_pearson = []       # 中心距離相關性系數空列表

for distance in range(10000,70000,10000):
    datai = data_q3_test[data_q3_test['離市中心距離'] <= distance]
    r_value = datai.corr().loc['sell_area_']
    # 篩選數據並計算相關系數
    dis.append(distance)
    rkmd_pearson.append(r_value.loc['人口密度指標'])
    lwmd_pearson.append(r_value.loc['路網密度指標'])
    cyjg_pearson.append(r_value.loc['餐飲價格指標'])
    zxjl_pearson.append(r_value.loc['離市中心距離'])
    # 添加列表值
    print('離市中心距離小於等於%i米:' % distance)
    print('數據量為%i條' % len(datai))
    print('人口密度與房屋每平米均價的相關系數為:%.3f' % r_value.loc['人口密度指標'])
    print('路網密度與房屋每平米均價的相關系數為:%.3f' % r_value.loc['路網密度指標'])
    print('餐飲價格與房屋每平米均價的相關系數為:%.3f' % r_value.loc['餐飲價格指標'])
    print('離市中心距離與房屋每平米均價的相關系數為:%.3f' % r_value.loc['離市中心距離'])
    print('-------\n')

'''
(2)折線圖繪制
'''
# 繪制折線圖查看:隨着市中心距離增加,不同指標相關性系數變化情況

from bokeh.models import HoverTool

from bokeh.plotting import figure,show,output_file
from bokeh.models import ColumnDataSource


df_r = pd.DataFrame({'rkmd_pearson':rkmd_pearson,
                    'lwmd_pearson':lwmd_pearson,
                    'cyjg_pearson':cyjg_pearson,
                    'zxjl_pearson':zxjl_pearson},
                   index = dis)
source = ColumnDataSource(data=df_r)
# 創建數據

hover = HoverTool(tooltips=[("離市中心距離", "@index"),
                           ("人口密度相關系數", "@rkmd_pearson"),
                           ("道路密度相關系數", "@lwmd_pearson"),
                           ("餐飲價格相關系數", "@cyjg_pearson"),
                           ("中心距離相關系數", "@zxjl_pearson"),])  
# 設置標簽顯示內容

output_file(r'C:\Users\Administrator\Desktop\python數據分析\項目\10房價\pro1001.html')
p = figure(plot_width=900, plot_height=350, title="隨着市中心距離增加,不同指標相關性系數變化情況",
          tools=[hover,'box_select,reset,xwheel_zoom,pan,crosshair'])
# 構建繪圖空間
p.line(x='index',y='rkmd_pearson',source = source,line_alpha = 0.8, line_color = 'green',line_dash = [15,4],legend="人口密度相關系數") 
p.circle(x='index',y='rkmd_pearson',source = source, size = 8,color = 'green',alpha = 0.8,legend="人口密度相關系數")

# 繪制折線圖1
p.line(x='index',y='lwmd_pearson',source = source,line_alpha = 0.8, line_color = 'blue',line_dash = [15,4],legend="道路密度相關系數") 
p.circle(x='index',y='lwmd_pearson',source = source, size = 8,color = 'blue',alpha = 0.8,legend="道路密度相關系數")
# 繪制折線圖2
p.line(x='index',y='cyjg_pearson',source = source,line_alpha = 0.8, line_color = 'black',line_dash = [15,4],legend="餐飲價格相關系數") 
p.circle(x='index',y='cyjg_pearson',source = source, size = 8,color = 'black',alpha = 0.8,legend="餐飲價格相關系數")
# 繪制折線圖3
p.line(x='index',y='zxjl_pearson',source = source,line_alpha = 0.8, line_color = 'red',line_dash = [15,4],legend="中心距離相關系數") 
p.circle(x='index',y='zxjl_pearson',source = source, size = 8,color = 'red',alpha = 0.8,legend="中心距離相關系數")
# 繪制折線圖4
p.legend.location = "center_right"
show(p)
# 繪制折線圖

 

# 結論
# ① “人口密度”、“道路密度”、“離市中心距離”和“房屋均價”有着明顯的相關性,而“餐飲價格”和“房屋均價”相關性較弱
# ② 隨着離市中心的距離越遠,指標的相關性在數據上體現更明顯,而這個分界線大概在20-30km處,這正是上海中心城區和郊區的分界
#    → 上海房價市場的“中心城區-郊區”分化特征
# ③ 中心城區的房產市場對指標因素的影響更加敏銳,而郊區則更遲鈍 → 越靠近市中心,影響因素越復雜

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM