武汉市房价数据挖掘与可视化分析(Python)
?引言
本文使用Python Matplotlib、Pyecharts、Seaborn、Plotl,以及百度提供的繪制可視化地圖接口BMap等工具,對(duì)武漢市14個(gè)區(qū)的房?jī)r(jià)數(shù)據(jù)進(jìn)行可視化分析,繪制了房?jī)r(jià)分布熱力地圖、房?jī)r(jià)分布旭日?qǐng)D等眾多圖表,數(shù)據(jù)來源為使用Python Scrapy 和 Selenium 從鏈家、貝殼網(wǎng)上爬取的房?jī)r(jià)及其相關(guān)數(shù)據(jù),共5056條數(shù)據(jù)。
數(shù)據(jù)預(yù)覽:
?數(shù)據(jù)地址:
武漢市各區(qū)房?jī)r(jià)分布數(shù)據(jù)集-數(shù)據(jù)挖掘文檔類資源-CSDN下載本數(shù)據(jù)集為使用PythonScrapy、Selenium從鏈家、貝殼網(wǎng)爬取的武漢市房?jī)r(jià)及其相關(guān)數(shù)據(jù)更多下載資源、學(xué)習(xí)資料請(qǐng)?jiān)L問CSDN下載頻道.https://download.csdn.net/download/qq_52181283/85863824數(shù)據(jù)字段:
作者:A WHU SIMer
目錄
?引言
一、運(yùn)用的可視化工具簡(jiǎn)介
1.1 Matplotlib
?1.2 Pyecharts
1.3?Seaborn
1.4?Plotly
1.5?BMap
二、數(shù)據(jù)預(yù)處理
2.1?導(dǎo)入相關(guān)包、讀取數(shù)據(jù)并查看數(shù)據(jù)基本情況
2.2 地鐵字段處理
2.3?建筑年代字段處理
2.4?建筑類型字段處理
2.5?物業(yè)費(fèi)用字段處理
2.6 樓棟總數(shù)與房屋總數(shù)字段處理
2.7?保存處理好的數(shù)據(jù)并查看其信息
三、數(shù)據(jù)分析可視化
3.1?全市房?jī)r(jià)總體分布地圖
3.2?全市房?jī)r(jià)總體分布直方圖
3.3?各區(qū)房?jī)r(jià)分布箱型圖
3.4?各區(qū)房?jī)r(jià)中位數(shù)柱形圖
3.5?房源到市中心距離、建筑類型、物業(yè)費(fèi)用與房?jī)r(jià)關(guān)系散點(diǎn)圖
3.6?各區(qū)各板塊房?jī)r(jià)分布旭日?qǐng)D
3.7?全市房?jī)r(jià)分布熱力地圖
四、月收入1萬左右的買房建議
一、運(yùn)用的可視化工具簡(jiǎn)介
1.1 Matplotlib
Matplotlib 是一個(gè) Python 2D 繪圖庫(kù),同時(shí)它也提供了一部分 3D 繪圖接口。 Matplotlib 是 Python 中最受歡迎的數(shù)據(jù)可視化軟件包之一,通常與 NumPy、 Pandas 一起使用,只需幾行代碼就可以生成圖表、直方圖、功率譜、條形圖、 誤差圖、散點(diǎn)圖等,是數(shù)據(jù)分析中不可或缺的重要工具之一。本文使用matplotlib參與繪制房?jī)r(jià)直方圖、箱型圖、條形圖、散點(diǎn)圖。
Matplotlib — Visualization with Pythonhttps://matplotlib.org/
?1.2 Pyecharts
Pyecharts ( https://pyecharts.org )是一個(gè) Python Echarts 繪圖庫(kù),Python 是一門富有表達(dá)力的語言,很適合用于數(shù)據(jù)處理,Echarts 是一個(gè)由百度開源的用于 快速構(gòu)建基于 Web 的可視化的聲明式框架,憑借著其良好的交互性,精巧的圖 表設(shè)計(jì),得到了眾多開發(fā)者的認(rèn)可,當(dāng)數(shù)據(jù)分析遇上數(shù)據(jù)可視化時(shí),pyecharts 便 誕生了。Pyecharts 囊括了 30 多種常見圖表,可以說應(yīng)有盡有,通過高度靈活的 配置項(xiàng),可輕松搭配出精美的圖表。本文使用Pyecharts繪制了全市房?jī)r(jià)總體分布地圖。
pyecharts - A Python Echarts Plotting Library built with love.Descriptionhttps://pyecharts.org/#/zh-cn/intro
1.3?Seaborn
Seaborn是基于matplotlib的圖形可視化python包。它提供了一種高度交互式界面,便于用戶能夠做出各種有吸引力的統(tǒng)計(jì)圖表。Seaborn是在Matplotlib的基礎(chǔ)上進(jìn)行了更高級(jí)的API封裝,從而使得作圖更加容易,在大多數(shù)情況下使用seaborn能做出很具有吸引力的圖。同時(shí)它能高度兼容numpy與pandas數(shù)據(jù)結(jié)構(gòu)以及scipy與statsmodels等統(tǒng)計(jì)模式。本文使用Seaborn繪制了全市房?jī)r(jià)總體分布直方圖、各區(qū)房?jī)r(jià)分布箱型圖、各區(qū)房?jī)r(jià)中位數(shù)柱形圖、樓房離市中心的距離與價(jià)格關(guān)系散點(diǎn)圖。
seaborn: statistical data visualization — seaborn 0.11.2 documentationhttps://seaborn.pydata.org/
1.4?Plotly
Plotly是一個(gè)在快速完善并崛起的交互式、開源的繪圖庫(kù),Python plotly庫(kù)是它的一個(gè)重要分支。現(xiàn)已支持超過40種獨(dú)特的圖表類型,涵蓋了廣泛的統(tǒng)計(jì)、金融、地理、科學(xué)和三維用例。Plotly 通過JavaScript構(gòu)建,能基于Web顯示實(shí)現(xiàn)交互式的可視化效果,所以它的圖形可以方便地顯示在Jupyter notebook以及獨(dú)立的html中。本文使用plotly繪制了各區(qū)各板塊房?jī)r(jià)分布旭日?qǐng)D。
Plotly: The front end for ML and data science modelsDash apps go where traditional BI cannot: NLP, object detection, predictive analytics, and more. With 1M+ downloads/month, Dash is the new standard for AI & data science apps.https://plotly.com/
1.5?BMap
BMap是百度地圖提供的繪制地圖可視化圖表接口,需要在百度地圖中注冊(cè)應(yīng)用并獲取密鑰后才可調(diào)用百度map API來繪制地圖熱力圖。使用BMap的方法有兩種:一是使用python.pyecharts.charts 中BMap庫(kù),二是在html頁面中使用JavaScript創(chuàng)建BMap對(duì)象。本文使用方式二來繪制全市房?jī)r(jià)分布熱力地圖。
jspopularGL | 百度地圖API SDKhttps://lbsyun.baidu.com/index.php?title=jspopularGL
<script type="text/javascript" src="http://api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js"></script>二、數(shù)據(jù)預(yù)處理
2.1?導(dǎo)入相關(guān)包、讀取數(shù)據(jù)并查看數(shù)據(jù)基本情況
數(shù)據(jù)預(yù)處理部分,只需要用到pandas,即可完成對(duì)各字段數(shù)據(jù)的處理,如缺失值、更改數(shù)據(jù)格式等。
import pandas as pd # 讀取數(shù)據(jù) data = pd.read_excel("武漢市房?jī)r(jià)數(shù)據(jù).xlsx") #查看數(shù)據(jù)基本信息 print(data) print(data.info())?
?可以看到總共有5056條樓房樣本信息,共有17個(gè)字段,用小區(qū)樓房的平均價(jià)格來代表該小區(qū)樓價(jià)水平。其中地鐵字段存在較多缺失值,“樓棟總數(shù)”、“房屋總數(shù)”字段的數(shù)據(jù)類型本應(yīng)為數(shù)值型,但是從上圖中兩者的數(shù)據(jù)類型為對(duì)象,說明存在一些問題,其他字段在用于可視化之前也或多或少存在需要修改的地方,下文將描述具體修改措施。
2.2 地鐵字段處理
# 地鐵字段處理,提取地鐵線路數(shù)字: metro = [] for i in range(len(data["地鐵"])):metroStation = data["地鐵"][i]if pd.isnull(metroStation): # 當(dāng)不存在地鐵時(shí)metro.append(0) # 0 表示附近無地鐵站else: # 當(dāng)存在地鐵時(shí),提取地鐵編號(hào)lineNum = metroStation[metroStation.index("鐵") + 1: metroStation.index("號(hào)")]metro.append(int(lineNum)) data["metro"] = metro data.drop('地鐵',axis=1,inplace=True) # 刪除原有的“地鐵字段” print(data[0:10]) print(data.info())由于地鐵字段存在較多缺失值,若將缺失值刪除,則會(huì)使樣本數(shù)據(jù)量大大降低,遂采取補(bǔ)的方式,用0代替缺失值。并對(duì)有地鐵的單元格提取地鐵編號(hào),如“近地鐵3號(hào)線王家灣站”提取的地鐵編號(hào)為3,保存在新字段metro中。
2.3?建筑年代字段處理
year = [] for i in range(len(data["建筑年代"])):yearNum = data["建筑年代"][i]if yearNum == "暫無信息":year.append(0) # 0 代表未知else:year.append(int(yearNum[0:-1])) data["year"] = year data.drop('建筑年代',axis=1,inplace=True) print(data[["小區(qū)名稱","year"]][0:10]) print(data.info())?建筑年代字段原格式為“***年”,而且存在間接意義上的缺失值“暫無信息”,所以用0表示“暫無信息”,提取年份來表示“***年”,這樣便于可視化時(shí)的計(jì)算。
2.4?建筑類型字段處理
?可以看到建筑類型字段存在多種值:“板樓”、“塔樓”、“板樓/塔板結(jié)合”、“未知類型”、“塔板結(jié)合”、“塔樓/板樓”······但是歸根究底是只有四種值,即未知類型、板樓、塔樓、板塔結(jié)合。所以分別用0,1,2,3分別表示這四種值。
buildingType = [] for i in range(len(data["建筑類型"])):type = data["建筑類型"][i]if type == "未知類型":buildingType.append(0)# print(0)elif type == "板樓":buildingType.append(1)# print(1)elif type == "塔樓":buildingType.append(2)# print(2)else:buildingType.append(3)# print(3) data["buildingType"] = buildingType data.drop('建筑類型',axis=1,inplace=True) print(data[["小區(qū)名稱","buildingType"]][0:10]) print(data.info())2.5?物業(yè)費(fèi)用字段處理
?可以看到“物業(yè)費(fèi)用”字段的值存在一定的規(guī)律性,即以“元/平米/月”結(jié)尾,存在固定費(fèi)用和區(qū)間費(fèi)用兩者形式。所以對(duì)于固定費(fèi)用,提取固定費(fèi)用數(shù)值,對(duì)于區(qū)間費(fèi)用,用中間值代表,對(duì)于“暫無信息”則用-1代表(不用0表示,是因?yàn)榭紤]到物業(yè)費(fèi)為0的情況,而且0在此處也不適合表示缺失值)。
propertyExpense = [] for i in range(len(data["物業(yè)費(fèi)用"])):expense = data["物業(yè)費(fèi)用"][i]if expense == "暫無信息":propertyExpense.append(-1)# print(-1)elif "至" in expense:minPrice = float(expense[0 : expense.index("至")])maxPrice = float(expense[expense.index("至")+1 : expense.index("元")])price = round((minPrice+maxPrice)/2, 2)propertyExpense.append(price)# print(price)else:price = float(expense[0 : expense.index("元")])propertyExpense.append(price)# print(price) data["propertyExpense"] = propertyExpense data.drop('物業(yè)費(fèi)用',axis=1,inplace=True) print(data[["小區(qū)名稱","propertyExpense"]][0:10]) print(data.info())2.6 樓棟總數(shù)與房屋總數(shù)字段處理
?可以看到“樓棟總數(shù)”與“房屋總數(shù)”字段的數(shù)據(jù)分別以“棟”和“戶”字結(jié)尾,為方便計(jì)算,遂刪除這兩字,并將數(shù)據(jù)改為數(shù)值型。
# 樓棟總數(shù)字段處理,去掉”棟“字,將字段值的類型改為數(shù)值型 data["樓棟總數(shù)"] = data["樓棟總數(shù)"].apply(lambda x: int(x[0:-1])) # 房屋總數(shù)字段處理,去掉”戶“字,將字段值的類型改為數(shù)值型 data["房屋總數(shù)"] = data["房屋總數(shù)"].apply(lambda x: int(x[0:-1])) print(data.info()) print(data[["小區(qū)名稱","樓棟總數(shù)", "房屋總數(shù)"]])2.7?保存處理好的數(shù)據(jù)并查看其信息
保存預(yù)處理后的數(shù)據(jù)是為了方便在可視化時(shí)直接讀取新數(shù)據(jù)文件,而不用每次用時(shí)都得再進(jìn)行一次數(shù)據(jù)預(yù)處理過程。
data.to_csv("WuHan.csv", encoding="utf8",index=False) newData = pd.read_csv("WuHan.csv") print(newData.info())三、數(shù)據(jù)分析可視化
【注意】:以下房?jī)r(jià)簡(jiǎn)稱x,具體含義為:x元/平方米,如1萬,表示1萬元/平方米。
3.1?全市房?jī)r(jià)總體分布地圖
繪制pyecharts.charts.Geo用于地圖,所用的坐標(biāo)為“經(jīng)度_百度坐標(biāo)”和“緯度_百度坐標(biāo)”,繪制的圖表如下:
?從上圖,可以總體看出房源集中在近長(zhǎng)江的武昌區(qū)、漢陽區(qū)、硚口區(qū)、江漢區(qū)、江岸區(qū)、洪山區(qū)。位于武漢市中部長(zhǎng)江兩岸的房?jī)r(jià)是相對(duì)較高的,在3、4萬以上。1萬到2萬的房源是最多的,并且緊圍著中心高價(jià)房區(qū)。1萬以下的房源主要分布在蔡甸區(qū)、黃陂區(qū)、新洲區(qū)和江夏區(qū),距離武漢市中心較遠(yuǎn),并且這四個(gè)區(qū)中,江夏區(qū)的房?jī)r(jià)較高,這也側(cè)面說明江夏區(qū)的經(jīng)濟(jì)實(shí)力要高于其他三個(gè)。
?代碼:
import pyecharts import pandas as pd from pyecharts.charts import Geo from pyecharts import options as opts from pyecharts.datasets import register_url from pyecharts.globals import ThemeType from pyecharts.globals import GeoTypedata = pd.read_csv("WuHan.csv", encoding="utf8") dataList = data.to_dict(orient='records') try:register_url("https://echarts-maps.github.io/echarts-china-counties-js/") except Exception:import sslssl._create_default_https_context = ssl._create_unverified_contextregister_url("https://echarts-maps.github.io/echarts-china-counties-js/") geo=Geo(init_opts=opts.InitOpts(theme=ThemeType.DARK,width="100%",height="700px",page_title="武漢市2018年房?jī)r(jià)數(shù)據(jù)可視化",bg_color="black"))geo.add_schema(maptype='武漢',label_opts=opts.LabelOpts(is_show=True),itemstyle_opts=opts.ItemStyleOpts(color="black", border_color="#1E90FF", border_width=1.5))data_pair = [] for item in dataList:name = item["小區(qū)名稱"]value = item["均價(jià)"]longitude = item["經(jīng)度_百度坐標(biāo)"]latitude = item["緯度_百度坐標(biāo)"]# 將樓房坐標(biāo)添加到地圖中g(shù)eo.add_coordinate(name, longitude, latitude)data_pair.append((name, value)) # 添加數(shù)據(jù)項(xiàng),即為地圖中樓房位置賦值 geo.add("房?jī)r(jià)",data_pair=data_pair,type_="scatter",symbol_size=1.5,is_large=True,) # 配置分組顏色 pricePieces = [{"max": 10000, "label":"1W以下", "color": "#F0F0BF"},{"min": 10000, "max": 20000, "label": "1W~2W", "color": "#08830A"},{"min": 20000, "max": 30000, "label": "2W~3W", "color": "#EA760F"},{"min": 30000, "max": 40000, "label": "3W~4W", "color": "#E800FF"},{"min": 40000, "label": "4W以上", "color": "#FF0005"}, ] geo.js_dependencies.add("echarts-gl") geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts(title_opts=opts.TitleOpts(title="武漢市2018年房?jī)r(jià)數(shù)據(jù)可視化", pos_left="left", title_textstyle_opts=opts.TextStyleOpts(color="red")),visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=pricePieces)) geo.render("武漢Geo.html")3.2?全市房?jī)r(jià)總體分布直方圖
使用seaborn繪制的全部樣本房?jī)r(jià)分布直方圖如下。從下圖可以估計(jì)出武漢市房?jī)r(jià)集中在4千~4萬的區(qū)間內(nèi),其中1萬到2.5萬的房源占多數(shù)。4萬以上的房源鳳毛麟角,最高的接近8萬,結(jié)合3.1圖1可知這些高價(jià)房源位于武昌區(qū)、漢陽區(qū)、硚口區(qū)、江漢區(qū)、江岸區(qū)。
?代碼:
print(data["均價(jià)"].max()) # 查看總體房?jī)r(jià)直方圖---------------------------- sns.displot(data["均價(jià)"],kde_kws={"color": "r", "lw": 1, "label": "KDE"},color="purple") plt.title("全市房?jī)r(jià)總體分布直方圖") plt.show()3.3?各區(qū)房?jī)r(jià)分布箱型圖
使用seaborn繪制的武漢市各區(qū)房?jī)r(jià)分布箱型圖如下。圖表中已按各區(qū)房?jī)r(jià)中位數(shù)的大小對(duì)各區(qū)進(jìn)行降序排序,因此可以直觀看出房?jī)r(jià)中位數(shù)排名前三的區(qū)分別為:武昌區(qū)、洪山區(qū)、江岸區(qū),其房?jī)r(jià)中位數(shù)接近2萬。
從異常值角度上分析,可以得出洪山區(qū)、江岸區(qū)、江漢區(qū)各自區(qū)域內(nèi)房?jī)r(jià)差異較大,高價(jià)的房源價(jià)格甚至可以達(dá)到7萬或8萬,而低價(jià)的房源最低約在5千左右。從下圖中還可以確定本次統(tǒng)計(jì)的全部樣本中,房?jī)r(jià)最高的房源在江漢區(qū)。
?代碼:
my_order = data.groupby(by=["區(qū)域"])["均價(jià)"].median().sort_values(ascending=False).index print(data.groupby(by=["區(qū)域"])["均價(jià)"].median().sort_values(ascending=False)) print(my_order) # sns.catplot(x='區(qū)域', y='均價(jià)', data=data, order=my_order, kind="violin") # 繪制小提琴圖 sns.boxplot(x='區(qū)域', y='均價(jià)', data=data, order=my_order) plt.title("各區(qū)房?jī)r(jià)箱型圖") plt.show()3.4?各區(qū)房?jī)r(jià)中位數(shù)柱形圖
使用seaborn繪制的武漢市各區(qū)房?jī)r(jià)中位數(shù)柱形圖如下。由于當(dāng)一組數(shù)據(jù)差異性較大時(shí),中位數(shù)比平均數(shù)能更好地代表這組數(shù)據(jù)的中等水平,遂使用中位數(shù)作為評(píng)價(jià)指標(biāo)。從下圖中,不僅能直觀看出各區(qū)房?jī)r(jià)中位數(shù)的排名情況,也能直觀比較它們房?jī)r(jià)中位數(shù)之間的差距。此外,在武漢市的14個(gè)區(qū)中,只有蔡甸區(qū)和新洲區(qū)的房?jī)r(jià)中位數(shù)在1萬以下,說明武漢房?jī)r(jià)總體偏高。
?代碼:
x = data.groupby(by=["區(qū)域"])["均價(jià)"].median().sort_values(ascending=False).index y = data.groupby(by=["區(qū)域"])["均價(jià)"].median().sort_values(ascending=False).values ax = sns.barplot(x,y) print(data.groupby(by=["區(qū)域"])["均價(jià)"].median().sort_values(ascending=False).reset_index()) for index,row in data.groupby(by=["區(qū)域"])["均價(jià)"].median().sort_values(ascending=False).reset_index().iterrows():ax.text(row.name, row["均價(jià)"], row["均價(jià)"],color="red", ha="center") plt.title("各區(qū)房?jī)r(jià)中位數(shù)柱形圖") plt.show()3.5?房源到市中心距離、建筑類型、物業(yè)費(fèi)用與房?jī)r(jià)關(guān)系散點(diǎn)圖
使用seaborn繪制的武漢市房源到市中心距離、建筑類型、物業(yè)費(fèi)用與房?jī)r(jià)關(guān)系散點(diǎn)圖如下。本文設(shè)定武漢市政府所在位置為武漢市中心,其百度坐標(biāo)為:(114.311754, 30.598604)。利用房源的百度坐標(biāo)和武漢市政府位置坐標(biāo)來計(jì)算房源到武漢市政府的實(shí)際距離,其計(jì)算公式如下:
設(shè)地球上任意兩個(gè)點(diǎn)的坐標(biāo)分別為(X1,Y1)、(X2,Y2),其中X1、X2為經(jīng)度,Y1、Y2為緯度,且已知地球赤道半徑R= 6371.0 km,則這兩點(diǎn)之間的距離d計(jì)算式為:
d= R*arcos[cos(Y1)*cos(Y2)*cos(X1-X2)+sin(Y1)*sin(Y2)]
利用“黃金口岸”小區(qū)來驗(yàn)證計(jì)算結(jié)果的正確性,計(jì)算結(jié)果與測(cè)距結(jié)果一致。
?
?
從上圖可以看出房?jī)r(jià)與房源到武漢中心的距離成負(fù)相關(guān)關(guān)系,大部分房源到武漢市中心的距離在20km以內(nèi)。此外,板樓結(jié)構(gòu)的房源較多,價(jià)格在4萬以上的房源幾乎均為板樓或者塔板結(jié)合結(jié)構(gòu),說明板樓更受買房者的青睞。這與板樓的特性有直接聯(lián)系。板樓大多是正南北方向,南北通透,便于采光與通風(fēng),而且戶型方正,平面布局合理,各功能空間尺度適宜,其相對(duì)于塔樓有著采光好、密度低、管理成本低的優(yōu)點(diǎn),這就意味著板樓的售價(jià)往往要高于塔樓,上圖也可以證明這一點(diǎn)。
代碼:
centerPoint = (114.311754, 30.598604) R = 6371 data["distance"] = data[["經(jīng)度_百度坐標(biāo)", "緯度_百度坐標(biāo)"]].apply(lambda x: math.fabs(R*math.acos(math.cos(x["緯度_百度坐標(biāo)"]*math.pi/180)*math.cos(centerPoint[1]*math.pi/180)*math.cos(x["經(jīng)度_百度坐標(biāo)"]*math.pi/180-centerPoint[0]*math.pi/180)+math.sin(x["緯度_百度坐標(biāo)"]*math.pi/180)*math.sin(centerPoint[1]*math.pi/180))),axis=1) print(data[["經(jīng)度_百度坐標(biāo)", "緯度_百度坐標(biāo)", "distance"]]) data["buildingType"].loc[data["buildingType"] == 0] = "未知類型" data["buildingType"].loc[data["buildingType"] == 1] = "板樓" data["buildingType"].loc[data["buildingType"] == 2] = "塔樓" data["buildingType"].loc[data["buildingType"] == 3] = "板塔結(jié)合" sns.scatterplot(data=data,x='distance',y='均價(jià)',hue="buildingType", # 設(shè)置分組顏色style='區(qū)域', # 設(shè)置分組樣式size='propertyExpense' # 設(shè)置分組大小) plt.title("樓房離市中心的距離與價(jià)格散點(diǎn)圖") plt.show()3.6?各區(qū)各板塊房?jī)r(jià)分布旭日?qǐng)D
使用plotly繪制的武漢市各區(qū)各板塊房?jī)r(jià)分布旭日?qǐng)D如下。從圖1中可以一眼看出武昌區(qū)的水果湖板塊房?jī)r(jià)中位數(shù)值最大,其次是洪山區(qū)的楚河漢街板塊和武昌區(qū)的楚河漢街板塊。點(diǎn)擊“洪山”,查看洪山區(qū)各板塊房?jī)r(jià)中位數(shù)占比情況,如圖2,可以看到,隨著板塊到武漢市中心的距離的增大,板塊內(nèi)的房?jī)r(jià)在逐步下降。
?
?代碼:
newdata = data.groupby(["區(qū)域", "板塊"])["均價(jià)"].median().reset_index() print(newdata) chart = express.sunburst(newdata,path=["區(qū)域", "板塊"], values="均價(jià)", color="均價(jià)", title="各區(qū)各板塊房?jī)r(jià)中位數(shù)旭日?qǐng)D") chart.show()3.7?全市房?jī)r(jià)分布熱力地圖
為了更加直觀地展現(xiàn)每一個(gè)房源的地理與價(jià)格之間的關(guān)系,本文調(diào)用了百度JavaScript開發(fā)API,來在html頁面中繪制武漢市地圖,并根據(jù)各房源的百度坐標(biāo)將房源展示在地圖上,并用顏色的深淺來表示其價(jià)格的高低,以此形成全市的房?jī)r(jià)分布熱力地圖。
繪制結(jié)果如下:
(圖1)
?(圖2)
?(圖3)
從圖1中可以總體上看出房源主要分布在武漢市四環(huán)線以內(nèi),外圍的房源集中區(qū)域則分布在黃陂區(qū)、蔡甸區(qū)、江夏區(qū)和新洲區(qū),這與3.1圖1的顯示結(jié)果一致。
從圖2中可以看出,長(zhǎng)江北岸的高價(jià)房源要多于南岸的高價(jià)房源。長(zhǎng)江北岸的高價(jià)房源分布在北岸的幾個(gè)商業(yè)區(qū)中,而南岸的高級(jí)房源分布在高校和商業(yè)區(qū)之間。長(zhǎng)江南岸的房源明顯分布在地鐵線路的兩邊。
從圖3中可以看出,緊靠政府機(jī)構(gòu)、教育機(jī)構(gòu)、醫(yī)療機(jī)構(gòu)、主干道等的房源價(jià)格要比一般的房源價(jià)格高。
代碼:
HTML,(ak=你的密鑰)
<!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=*****************9C"></script><script type="text/javascript" src="http://api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js"></script><script src="https://code.jquery.com/jquery-3.1.1.min.js"></script><script src="jquery-csv.js"></script><script src="getData.js"></script><title>武漢市房?jī)r(jià)分布熱力地圖</title><style type="text/css">ul,li {list-style: none;margin: 0;padding: 0;float: left;}html {height: 100%}body {height: 100%;margin: 0px;padding: 0px;font-family: "微軟雅黑";}#container {height: 90%;width: 100%;}#r-result {width: 100%;}</style> </head><body><div id="container"></div><div id="r-result"><input type="button" onclick="openHeatmap();" value="顯示熱力圖" /><input type="button" onclick="closeHeatmap();"value="關(guān)閉熱力圖" /></div> </body></html> <script type="text/javascript">var map = new BMap.Map("container"); // 創(chuàng)建地圖實(shí)例var point = new BMap.Point(114.311754, 30.598604);map.centerAndZoom(point, 12); // 初始化地圖,設(shè)置中心點(diǎn)坐標(biāo)和地圖級(jí)別map.enableScrollWheelZoom(); // 允許滾輪縮放var data = getData()console.log(data)var points = dataif (!isSupportCanvas()) {alert('熱力圖目前只支持有canvas支持的瀏覽器,您所使用的瀏覽器不能使用熱力圖功能~')}heatmapOverlay = new BMapLib.HeatmapOverlay({ "radius": 10 });map.addOverlay(heatmapOverlay);heatmapOverlay.setDataSet({ data: points, max: 90000 });//是否顯示熱力圖function openHeatmap() {heatmapOverlay.show();}function closeHeatmap() {heatmapOverlay.hide();}closeHeatmap();function setGradient() {var gradient = {};var colors = document.querySelectorAll("input[type='color']");colors = [].slice.call(colors, 0);colors.forEach(function (ele) {gradient[ele.getAttribute("data-key")] = ele.value;});heatmapOverlay.setOptions({ "gradient": gradient });}//判斷瀏覽區(qū)是否支持canvasfunction isSupportCanvas() {var elem = document.createElement('canvas');return !!(elem.getContext && elem.getContext('2d'));} </script>getData.js
function getData() {var points = [ {'lat': 30.590072, 'lng': 114.176442, 'count': 10001} , {'lat': 30.590072, 'lng': 114.176442, 'count': 10001} , {'lat': 30.881746472273, 'lng': 114.39374109924, 'count': 10008} , {'lat': 30.881746472273, 'lng': 114.39374109924, 'count': 10008} , {'lat': 30.49259, 'lng': 114.292619, 'count': 10078} , {'lat': 30.49259, 'lng': 114.292619, 'count': 10078} , {'lat': 30.585092, 'lng': 114.048935, 'count': 10084} , ......... .........] // 5056 條房源經(jīng)緯度值,以及房?jī)r(jià):countreturn points }四、月收入1萬左右的買房建議
武漢市只有蔡甸區(qū)和新洲區(qū)的房?jī)r(jià)中位數(shù)在1萬以下,若要在四環(huán)線以內(nèi)買房,房?jī)r(jià)大概率會(huì)高于1萬元,再結(jié)合實(shí)際月收入,可以考慮購(gòu)買中等水平房?jī)r(jià)的房源,即房?jī)r(jià)在1萬~2萬之間。在這個(gè)房?jī)r(jià)區(qū)間內(nèi)的房源數(shù)量最多,則可選擇性多,而且在4環(huán)線以內(nèi),離市中心不算太遠(yuǎn)。再深入分析,可以發(fā)現(xiàn)長(zhǎng)江北岸的綠色房源均位于商業(yè)區(qū)外圍,而南岸的綠色房源有少數(shù)甚至在中心商業(yè)區(qū)內(nèi),而且南岸高校眾多,文化氣息更加濃厚。因此建議在長(zhǎng)江南岸、靠近高校、離主干道較近的位置購(gòu)買房?jī)r(jià)在1萬到2萬的房子。若購(gòu)買面積為100平方米,則總費(fèi)用在100萬到200萬之間,則不吃不喝工作約8年到17年可以付清。
?
總結(jié)
以上是生活随笔為你收集整理的武汉市房价数据挖掘与可视化分析(Python)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 调试LCD反被调戏了
- 下一篇: Python 定时任务框架