日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

毕业设计 大数据房价数据分析及可视化 - python 房价分析

發布時間:2023/12/20 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 毕业设计 大数据房价数据分析及可视化 - python 房价分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1 課題背景
  • 2 數據爬取
    • 2.1 爬蟲簡介
    • 2.2 房價爬取
  • 3 數據可視化分析
    • 3.1 ECharts
    • 3.2 相關可視化圖表
  • 4 最后


🧿 選題指導, 項目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md

1 課題背景

房地產是促進我國經濟持續增長的基礎性、主導性產業。如何了解一個城市的房價的區域分布,或者不同的城市房價的區域差異。如何獲取一個城市不同板塊的房價數據?
本項目利用Python實現某一城市房價相關信息的爬取,并對爬取的原始數據進行數據清洗,存儲到數據庫中,利用pyechart庫等工具進行可視化展示。

2 數據爬取

2.1 爬蟲簡介

網絡爬蟲是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。爬蟲對某一站點訪問,如果可以訪問就下載其中的網頁內容,并且通過爬蟲解析模塊解析得到的網頁鏈接,把這些鏈接作為之后的抓取目標,并且在整個過程中完全不依賴用戶,自動運行。若不能訪問則根據爬蟲預先設定的策略進行下一個 URL的訪問。在整個過程中爬蟲會自動進行異步處理數據請求,返回網頁的抓取數據。在整個的爬蟲運行之前,用戶都可以自定義的添加代理,偽 裝 請求頭以便更好地獲取網頁數據。
爬蟲流程圖如下:

實例代碼

# get方法實例import requests #先導入爬蟲的庫,不然調用不了爬蟲的函數 response = requests.get("http://httpbin.org/get") #get方法 print( response.status_code ) #狀態碼 print( response.text )

2.2 房價爬取

累計爬取鏈家深圳二手房源信息累計18906條

  • 爬取各個行政區房源信息;
  • 數據保存為DataFrame;

相關代碼

from bs4 import BeautifulSoup import pandas as pd from tqdm import tqdm import math import requests import lxml import re import timearea_dic = {'羅湖區':'luohuqu','福田區':'futianqu','南山區':'nanshanqu','鹽田區':'yantianqu','寶安區':'baoanqu','龍崗區':'longgangqu','龍華區':'longhuaqu','坪山區':'pingshanqu'}# 加個header以示尊敬 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36','Referer': 'https://sz.lianjia.com/ershoufang/'}# 新建一個會話 sess = requests.session() sess.get('https://sz.lianjia.com/ershoufang/', headers=headers)# url示例:https://sz.lianjia.com/ershoufang/luohuqu/pg2/ url = 'https://sz.lianjia.com/ershoufang/{}/pg{}/'# 當正則表達式匹配失敗時,返回默認值(errif) def re_match(re_pattern, string, errif=None):try:return re.findall(re_pattern, string)[0].strip()except IndexError:return errif# 新建一個DataFrame存儲信息 data = pd.DataFrame()for key_, value_ in area_dic.items():# 獲取該行政區下房源記錄數start_url = 'https://sz.lianjia.com/ershoufang/{}/'.format(value_)html = sess.get(start_url).texthouse_num = re.findall('共找到<span> (.*?) </span>套.*二手房', html)[0].strip()print('💚{}: 二手房源共計「{}」套'.format(key_, house_num))time.sleep(1)# 頁面限制🚫 每個行政區只能獲取最多100頁共計3000條房源信息total_page = int(math.ceil(min(3000, int(house_num)) / 30.0))for i in tqdm(range(total_page), desc=key_):html = sess.get(url.format(value_, i+1)).textsoup = BeautifulSoup(html, 'lxml')info_collect = soup.find_all(class_="info clear")for info in info_collect:info_dic = {}# 行政區info_dic['area'] = key_# 房源的標題info_dic['title'] = re_match('target="_blank">(.*?)</a><!--', str(info))# 小區名info_dic['community'] = re_match('xiaoqu.*?target="_blank">(.*?)</a>', str(info))# 位置info_dic['position'] = re_match('<a href.*?target="_blank">(.*?)</a>.*?class="address">', str(info))# 稅相關,如房本滿5年info_dic['tax'] = re_match('class="taxfree">(.*?)</span>', str(info))# 總價info_dic['total_price'] = float(re_match('class="totalPrice"><span>(.*?)</span>萬', str(info)))# 單價info_dic['unit_price'] = float(re_match('data-price="(.*?)"', str(info)))# 匹配房源標簽信息,通過|切割# 包括面積,朝向,裝修等信息icons = re.findall('class="houseIcon"></span>(.*?)</div>', str(info))[0].strip().split('|')info_dic['hourseType'] = icons[0].strip()info_dic['hourseSize'] = float(icons[1].replace('平米', ''))info_dic['direction'] = icons[2].strip()info_dic['fitment'] = icons[3].strip()# 存入DataFrameif data.empty:data = pd.DataFrame(info_dic,index=[0])else:data = data.append(info_dic,ignore_index=True)

爬取過程

3 數據可視化分析

3.1 ECharts

ECharts(Enterprise Charts)是百度開源的數據可視化工具,底層依賴輕量級Canvas庫ZRender。兼容了幾乎全部常用瀏覽器的特點,使它可廣泛用于PC客戶端和手機客戶端。ECharts能輔助開發者整合用戶數據,創新性的完成個性化設置可視化圖表。支持折線圖(區域圖)、柱狀圖(條狀圖)、散點圖(氣泡圖)、K線圖、餅圖(環形圖)等,通過導入 js 庫在 Java Web 項目上運行。

python安裝

pip install pyecharts

3.2 相關可視化圖表

房源面積-總價散點圖

scatter = (Scatter(init_opts=opts.InitOpts(theme='dark')).add_xaxis(data['hourseSize']).add_yaxis("房價", data['total_price']).set_series_opts(label_opts=opts.LabelOpts(is_show=False),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),])).set_global_opts(legend_opts=opts.LegendOpts(is_show=False),title_opts=opts.TitleOpts(title="深圳二手房 總價-面積 散點圖"),xaxis_opts=opts.AxisOpts(name='面積',# 設置坐標軸為數值類型type_="value", # 不顯示分割線splitline_opts=opts.SplitLineOpts(is_show=False)),yaxis_opts=opts.AxisOpts(name='總價',name_location='middle',# 設置坐標軸為數值類型type_="value",# 默認為False表示起始為0is_scale=True,splitline_opts=opts.SplitLineOpts(is_show=False),),visualmap_opts=opts.VisualMapOpts(is_show=True, type_='color', min_=100, max_=1000)))scatter.render_notebook()

各行政區均價

temp = data.groupby(['area'])['unit_price'].mean().reset_index() data_pair = [(row['area'], round(row['unit_price']/10000, 1)) for _, row in temp.iterrows()]map_ = (Map(init_opts=opts.InitOpts(theme='dark')).add("二手房均價", data_pair, '深圳', is_roam=False).set_series_opts(label_opts=opts.LabelOpts(is_show=True)).set_global_opts(title_opts=opts.TitleOpts(title="深圳各行政區二手房均價"),legend_opts=opts.LegendOpts(is_show=False),tooltip_opts=opts.TooltipOpts(formatter='{b}:{c}萬元'),visualmap_opts=opts.VisualMapOpts(min_=3, max_=10)))map_.render_notebook()

均價最高的10個地段

temp = data.groupby(['position'])['unit_price'].mean().reset_index() data_pair = sorted([(row['position'], round(row['unit_price']/10000, 1))for _, row in temp.iterrows()], key=lambda x: x[1], reverse=True)[:10]bar = (Bar(init_opts=opts.InitOpts(theme='dark')).add_xaxis([x[0] for x in data_pair]).add_yaxis('二手房均價', [x[1] for x in data_pair]).set_series_opts(label_opts=opts.LabelOpts(is_show=True, font_style='italic'),itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""new echarts.graphic.LinearGradient(0, 1, 0, 0, [{offset: 0,color: 'rgb(0,206,209)'}, {offset: 1,color: 'rgb(218,165,32)'}])"""))).set_global_opts(title_opts=opts.TitleOpts(title="深圳二手房均價TOP 10地段"),legend_opts=opts.LegendOpts(is_show=False),tooltip_opts=opts.TooltipOpts(formatter='{b}:{c}萬元')))bar.render_notebook()

戶型分布

temp = data.groupby(['hourseType'])['area'].count().reset_index() data_pair = sorted([(row['hourseType'], row['area'])for _, row in temp.iterrows()], key=lambda x: x[1], reverse=True)[:10]pie = (Pie(init_opts=opts.InitOpts(theme='dark')).add('', data_pair,radius=["30%", "75%"],rosetype="radius").set_global_opts(title_opts=opts.TitleOpts(title="深圳二手房 戶型分布"),legend_opts=opts.LegendOpts(is_show=False),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: ozvdkddzhkzd%")))pie.render_notebook()


詞云圖

word_list = [] stop_words = ['花園','業主','出售'] string = str(''.join([i for i in data['title'] if isinstance(i, str)]))words = psg.cut(string) for x in words:if len(x.word)==1:passelif x.flag in ('m', 'x'):passelif x.word in stop_words:passelse:word_list.append(x.word)data_pair = collections.Counter(word_list).most_common(100)wc = (WordCloud().add("", data_pair, word_size_range=[20, 100], shape='triangle').set_global_opts(title_opts=opts.TitleOpts(title="房源描述詞云圖")))wc.render_notebook()

4 最后

總結

以上是生活随笔為你收集整理的毕业设计 大数据房价数据分析及可视化 - python 房价分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。