最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

畢業(yè)設(shè)計 大數(shù)據(jù)住房數(shù)據(jù)分析與可視化

2023-03-28 10:11 作者:丹成學(xué)長  | 我要投稿

0 前言

?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項目系統(tǒng)達不到老師的要求。

為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天要分享的是

?? ?基于大數(shù)據(jù)住房數(shù)據(jù)分析與可視化

??學(xué)長這里給一個題目綜合評分(每項滿分5分)

  • 難度系數(shù):3分

  • 工作量:3分

  • 創(chuàng)新點:2分

畢設(shè)幫助,選題指導(dǎo),技術(shù)解答,歡迎打擾,見B站個人主頁

https://space.bilibili.com/33886978


分析展示

一、北上廣租房房源分布可視化

租房分布,也就是租房房源都在城市的哪個區(qū)域更多。

我們把北上廣深四個城市的房源都以小點的形式投射在地圖上,先來看看北京的。

在這里插入圖片描述

在這里插入圖片描述

結(jié)論:北京的租房房源有18012條,可以看到除了周邊的昌平、順義、通州、大興、房山、門頭溝等區(qū)中心有集中房源外,北京的房子主要集中在二環(huán)外四環(huán)內(nèi),當然這片區(qū)域也是最貴的。其中朝陽區(qū)的房源最多,占了整個北京房源的1/3,要不咋說朝陽群眾666呢。海淀、豐臺次之。

在這里插入圖片描述

在這里插入圖片描述

結(jié)論:上海也一樣,除了周邊的寶山、嘉定、青浦、松江、奉賢等區(qū)中心有房源外,房源主要集中在中心城區(qū)+浦東(地鐵網(wǎng)范圍內(nèi))??偣?7311條房源,浦東就有7000多條,比例超過1/4。

在這里插入圖片描述

在這里插入圖片描述

結(jié)論:廣州房源在四個城市中是最多的,共有39457條,主要集中在白云、天河、越秀、荔灣,以及海珠和番禺。其中白云、天河和番禺房源都超過6000條,選擇豐富,不過看圖也知道,3號線通勤壓力巨大。

在這里插入圖片描述

在這里插入圖片描述

結(jié)論:深圳的房源共有20054條,更集中在各區(qū),除了四個新區(qū)零星分布的房源外,主要還是分布在寶安、南山(科技園)、福田、羅湖、龍崗區(qū)中心,以及坂田、布吉、3號線沿線,11號線沿線(是市中心的租金太貴了吧?)

二、北上廣內(nèi)區(qū)域租金分布可視化

租房房源分布透露出來的信息其實不多,我們更關(guān)心的是各區(qū)域的價格。為此我們計算了各房源每平米每月的租金,并繪制了熱力地圖,先來看北京的。

在這里插入圖片描述

可以看到北京市每平米租金大于100元的房子集中在四環(huán)以內(nèi)以及四環(huán)東北邊。租金最貴的房子集中在西城區(qū)(金融街)、東城區(qū)(王府井)、朝陽區(qū)(朝陽公園)、海淀區(qū)(北大)。想要花2000塊錢租一間20平的房子,要么去五環(huán)外,要么去西南邊上。

在這里插入圖片描述

按商圈來看,每平米平均租金前50的商圈中,北京就占了27個,上海和深圳分別是11和10個,廣州最少,只有2個。

在這里插入圖片描述

北京每平米平均租金前10的商圈,租金在每平米200元左右徘徊。最貴的商圈東單,每平米要239元,也就意味著,在東單租一個30平的房子,一個月需要7170塊錢,租一個80平的房子,一個月需要19120元。

在這里插入圖片描述

可見上海每平米租金大于100元的房源主要集中在靜安、黃浦、長寧、徐匯和浦東。中心市區(qū)幾乎沒有每平米租金低于100元的。出了市區(qū),房價低于100元可選擇的區(qū)域還是比較多的。

在這里插入圖片描述

上海每平米平均租金前10的商圈較北京要好一些,租金在170元左右徘徊。其中租金最高的商圈新天地,每平米租金為213元。

在這里插入圖片描述

相較北京和上海,廣州每平米月租金明顯以100元以下的房源占主導(dǎo)。100元以上的比較零星,主要分布在體育中心、跑馬場、以及崗頂站周圍,荔灣、越秀中心也有一些??磥韽V州還是一個租房比較友好的城市啊。

在這里插入圖片描述

另外可以看到位于南邊的番禺區(qū),房源多,而且基本每平米租金都在50元以內(nèi),2000元內(nèi)能租一個40平的房子,番禺廣場坐地鐵到體育西只需半個小時,票價7元(6折4.2元),這也不失為一個選擇,只是坐3號線可能被擠扁。


在這里插入圖片描述

三、房源距地鐵口租金的關(guān)系可視化

租房,其中一個終點考慮的因素就是距離地鐵的遠近。我們把個城市房源距離最近地鐵站的距離跟每平米租金進行了回歸分析,并且計算了相關(guān)系數(shù)。

在這里插入圖片描述

可以看到,最近地鐵距離和每平米租金之間當然是有相關(guān)性的,距離地鐵越近,租金越貴。北上廣深的相關(guān)系數(shù)分別是-0.13,-0.17,-0.12,-0.13,可見,上海地鐵站的距離對租金的影響最大,廣州最小。


我們還計算了各城市地鐵距離每100米的租金均價。

在這里插入圖片描述

可見,北京市只要地鐵在900以內(nèi),每平米租金變化不大。900米和1000米租金差距為12.5元,也就是說,租一個20平的房子,距離地鐵站900米和1000米的租金差距是250元。


上海市只要地鐵在700以內(nèi),每平米租金變化不大,700以上租金開始明顯下降。


廣州市每平米租金明顯比其它城市低。同樣,只要地鐵在900以內(nèi),租金變化不大。900米和1000米租金差距為12元。


深圳市只要地鐵在400以內(nèi),租金變化不大。400米和500米租金差距為17.6元。也就是說,租一個20平的房子,距離地鐵站400米和500米的租金差距是352元。

四、房屋大小與租金關(guān)系可視化

先來看這么一張圖:

在這里插入圖片描述

我們把各城市房源的面積和每平米均價繪制出關(guān)系圖??梢钥吹?,不管是哪個城市,出租面積在15平米以內(nèi)的房子每平米租金都是最貴的,當然這里不排除租金貴的區(qū)域有更多單獨出租的小房間這個原因。但是還是可以看出來,如果有認識的好友一起租大房子,不僅每平米的租金更便宜,而且還可以有一個大點的公用客廳。

結(jié)論

租個人房源好還是公寓好

現(xiàn)在公寓房越來越多,我們在面臨選擇的時候,都會想是租個人房源好還是公寓好呢?個人房源質(zhì)量參差不齊,遇上好的真不容易。而公寓統(tǒng)一裝修,風(fēng)格現(xiàn)代,但是卻有各種各樣的問題(甲醛、隔音、亂收費等)。


這里給大家提供另一維度的思考:價格。

在這里插入圖片描述

廣州和深圳公寓數(shù)量占總房源數(shù)量的20%和51%(深圳怎么那么多公寓?)。可見廣州和深圳公寓都要比個人房源貴一些,廣州平均每平米貴12元,深圳貴2元。

北上廣深租房時都看重什么

統(tǒng)計了北上廣深各城市房源最多的3種戶型。


在這里插入圖片描述

可見,北上廣都偏愛2室1廳1衛(wèi)的房子,而深圳卻是1室0廳1衛(wèi)的房子最多,看來,在深圳奮斗的人,能住帶廳的房子已經(jīng)不容易了。不過四個城市都是小戶型出租的居多。

最后,我們對每個房源的標簽進行了統(tǒng)計,并且繪制了詞云圖,可以看出各城市租房時思考的側(cè)重點。

數(shù)據(jù)庫爆炸圖

在這里插入圖片描述

部分實現(xiàn)代碼

import os
import re
import time
import requests
from pymongo import MongoClient
from info import rent_type, city_info


class Rent(object):
? ?"""
? ?初始化函數(shù),獲取租房類型(整租、合租)、要爬取的城市分區(qū)信息以及連接mongodb數(shù)據(jù)庫
? ?"""
? ?def __init__(self):
? ? ? ?self.rent_type = rent_type
? ? ? ?self.city_info = city_info

? ? ? ?host = os.environ.get('MONGODB_HOST', '127.0.0.1') ?# 本地數(shù)據(jù)庫
? ? ? ?port = os.environ.get('MONGODB_PORT', '27017') ?# 數(shù)據(jù)庫端口
? ? ? ?mongo_url = 'mongodb://{}:{}'.format(host, port)
? ? ? ?mongo_db = os.environ.get('MONGODB_DATABASE', 'Lianjia')
? ? ? ?client = MongoClient(mongo_url)
? ? ? ?self.db = client[mongo_db]
? ? ? ?self.db['zufang'].create_index('m_url', unique=True) ?# 以m端鏈接為主鍵進行去重

? ?def get_data(self):
? ? ? ?"""
? ? ? ?爬取不同租房類型、不同城市各區(qū)域的租房信息
? ? ? ?:return: None
? ? ? ?"""
? ? ? ?for ty, type_code in self.rent_type.items(): ?# 整租、合租
? ? ? ? ? ?for city, info in self.city_info.items(): ?# 城市、城市各區(qū)的信息
? ? ? ? ? ? ? ?for dist, dist_py in info[2].items(): ?# 各區(qū)及其拼音
? ? ? ? ? ? ? ? ? ?res_bc = requests.get('https://m.lianjia.com/chuzu/{}/zufang/{}/'.format(info[1], dist_py))
? ? ? ? ? ? ? ? ? ?pa_bc = r"data-type=\"bizcircle\" data-key=\"(.*)\" class=\"oneline \">"
? ? ? ? ? ? ? ? ? ?bc_list = re.findall(pa_bc, res_bc.text)
? ? ? ? ? ? ? ? ? ?self._write_bc(bc_list)
? ? ? ? ? ? ? ? ? ?bc_list = self._read_bc() ?# 先爬取各區(qū)的商圈,最終以各區(qū)商圈來爬數(shù)據(jù),如果按區(qū)爬,每區(qū)最多只能獲得2000條數(shù)據(jù)

? ? ? ? ? ? ? ? ? ?if len(bc_list) > 0:
? ? ? ? ? ? ? ? ? ? ? ?for bc_name in bc_list:
? ? ? ? ? ? ? ? ? ? ? ? ? ?idx = 0
? ? ? ? ? ? ? ? ? ? ? ? ? ?has_more = 1
? ? ? ? ? ? ? ? ? ? ? ? ? ?while has_more:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?try:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?url = 'https://app.api.lianjia.com/Rentplat/v1/house/list?city_id={}&condition={}' \
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'/rt{}&limit=30&offset={}&request_ts={}&scene=list'.format(info[0],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bc_name,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? type_code,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? idx*30,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int(time.time()))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?res = requests.get(url=url, timeout=10)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?print('成功爬取{}市{}-{}的{}第{}頁數(shù)據(jù)!'.format(city, dist, bc_name, ty, idx+1))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?item = {'city': city, 'type': ty, 'dist': dist}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?self._parse_record(res.json()['data']['list'], item)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?total = res.json()['data']['total']
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?idx += 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if total/30 <= idx:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?has_more = 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# time.sleep(random.random())
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?except:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?print('鏈接訪問不成功,正在重試!')

? ?def _parse_record(self, data, item):
? ? ? ?"""
? ? ? ?解析函數(shù),用于解析爬回來的response的json數(shù)據(jù)
? ? ? ?:param data: 一個包含房源數(shù)據(jù)的列表
? ? ? ?:param item: 傳遞字典
? ? ? ?:return: None
? ? ? ?"""
? ? ? ?if len(data) > 0:
? ? ? ? ? ?for rec in data:
? ? ? ? ? ? ? ?item['bedroom_num'] = rec.get('frame_bedroom_num')
? ? ? ? ? ? ? ?item['hall_num'] = rec.get('frame_hall_num')
? ? ? ? ? ? ? ?item['bathroom_num'] = rec.get('frame_bathroom_num')
? ? ? ? ? ? ? ?item['rent_area'] = rec.get('rent_area')
? ? ? ? ? ? ? ?item['house_title'] = rec.get('house_title')
? ? ? ? ? ? ? ?item['resblock_name'] = rec.get('resblock_name')
? ? ? ? ? ? ? ?item['bizcircle_name'] = rec.get('bizcircle_name')
? ? ? ? ? ? ? ?item['layout'] = rec.get('layout')
? ? ? ? ? ? ? ?item['rent_price_listing'] = rec.get('rent_price_listing')
? ? ? ? ? ? ? ?item['house_tag'] = self._parse_house_tags(rec.get('house_tags'))
? ? ? ? ? ? ? ?item['frame_orientation'] = rec.get('frame_orientation')
? ? ? ? ? ? ? ?item['m_url'] = rec.get('m_url')
? ? ? ? ? ? ? ?item['rent_price_unit'] = rec.get('rent_price_unit')

? ? ? ? ? ? ? ?try:
? ? ? ? ? ? ? ? ? ?res2 = requests.get(item['m_url'], timeout=5)
? ? ? ? ? ? ? ? ? ?pa_lon = r"longitude: '(.*)',"
? ? ? ? ? ? ? ? ? ?pa_lat = r"latitude: '(.*)'"
? ? ? ? ? ? ? ? ? ?pa_distance = r"<span class=\"fr\">(\d*)米</span>"
? ? ? ? ? ? ? ? ? ?item['longitude'] = re.findall(pa_lon, res2.text)[0]
? ? ? ? ? ? ? ? ? ?item['latitude'] = re.findall(pa_lat, res2.text)[0]
? ? ? ? ? ? ? ? ? ?distance = re.findall(pa_distance, res2.text)
? ? ? ? ? ? ? ? ? ?if len(distance) > 0:
? ? ? ? ? ? ? ? ? ? ? ?item['distance'] = distance[0]
? ? ? ? ? ? ? ? ? ?else:
? ? ? ? ? ? ? ? ? ? ? ?item['distance'] = None
? ? ? ? ? ? ? ?except:
? ? ? ? ? ? ? ? ? ?item['longitude'] = None
? ? ? ? ? ? ? ? ? ?item['latitude'] = None
? ? ? ? ? ? ? ? ? ?item['distance'] = None

? ? ? ? ? ? ? ?self.db['zufang'].update_one({'m_url': item['m_url']}, {'$set': item}, upsert=True)
? ? ? ? ? ? ? ?print('成功保存數(shù)據(jù):{}!'.format(item))

? ?@staticmethod
? ?def _parse_house_tags(house_tag):
? ? ? ?"""
? ? ? ?處理house_tags字段,相當于數(shù)據(jù)清洗
? ? ? ?:param house_tag: house_tags字段的數(shù)據(jù)
? ? ? ?:return: 處理后的house_tags
? ? ? ?"""
? ? ? ?if len(house_tag) > 0:
? ? ? ? ? ?st = ''
? ? ? ? ? ?for tag in house_tag:
? ? ? ? ? ? ? ?st += tag.get('name') + ' '
? ? ? ? ? ?return st.strip()

? ?@staticmethod
? ?def _write_bc(bc_list):
? ? ? ?"""
? ? ? ?把爬取的商圈寫入txt,為了整個爬取過程更加可控
? ? ? ?:param bc_list: 商圈list
? ? ? ?:return: None
? ? ? ?"""
? ? ? ?with open('bc_list.txt', 'w') as f:
? ? ? ? ? ?for bc in bc_list:
? ? ? ? ? ? ? ?f.write(bc+'\n')

? ?@staticmethod
? ?def _read_bc():
? ? ? ?"""
? ? ? ?讀入商圈
? ? ? ?:return: None
? ? ? ?"""
? ? ? ?with open('bc_list.txt', 'r') as f:
? ? ? ? ? ?return [bc.strip() for bc in f.readlines()]


if __name__ == '__main__':
? ?rent = Rent()
? ?rent.get_data()

畢設(shè)幫助,選題指導(dǎo),技術(shù)解答,歡迎打擾,見B站個人主頁

https://space.bilibili.com/33886978

畢業(yè)設(shè)計 大數(shù)據(jù)住房數(shù)據(jù)分析與可視化的評論 (共 條)

分享到微博請遵守國家法律
和林格尔县| 徐州市| 邯郸县| 福建省| 新丰县| 库尔勒市| 尖扎县| 昂仁县| 洛南县| 黎平县| 株洲市| 麻江县| 驻马店市| 佛山市| 丰台区| 宿松县| 鸡泽县| 彝良县| 黄梅县| 金堂县| 如皋市| 白河县| 墨江| 韶山市| 通许县| 肥东县| 延长县| 彭泽县| 资中县| 阳曲县| 潢川县| 泗阳县| 黎平县| 龙州县| 武平县| 大方县| 宽城| 邳州市| 黑龙江省| 平乐县| 红安县|