疫情对广州房价的影响
上節(jié)我們獲取了廣州的房?jī)r(jià)數(shù)據(jù),并存入了MongoDB中
數(shù)據(jù)展示:
這節(jié)我們的目標(biāo)就是計(jì)算出廣州最高的房?jī)r(jià)、最低的房?jī)r(jià)、平均房?jī)r(jià)以及每個(gè)區(qū)的平均房?jī)r(jià)。
目錄:
1、提取數(shù)據(jù)
2、計(jì)算最高的房?jī)r(jià)、最低的房?jī)r(jià)、平均房?jī)r(jià)
3、計(jì)算每個(gè)區(qū)的平均房?jī)r(jià)
4、數(shù)據(jù)可視化(和2019年12月的房?jī)r(jià)數(shù)據(jù)進(jìn)行對(duì)比)
5、房?jī)r(jià)漲跌幅度
1、提取數(shù)據(jù)
從MongoDB中提取的數(shù)據(jù)是一個(gè)游標(biāo)對(duì)象,而每個(gè)數(shù)據(jù)是以字典的形式存儲(chǔ)的
需要循環(huán)提取數(shù)據(jù)
def output_mongo(self, city):"""提取數(shù)據(jù)"""results = collection.find({'city': city})for i in results:analyze = {}analyze['zone'] = i.get('zone')analyze['price'] = i.get('price')yield analyze這里指定city為廣州,數(shù)據(jù)只要價(jià)格和地區(qū)名
2、計(jì)算最高的房?jī)r(jià)、最低的房?jī)r(jià)、平均房?jī)r(jià)
將output_mongo返回的數(shù)據(jù)傳入analyze_data
def analyze_data(self, data):"""對(duì)全城房?jī)r(jià)數(shù)據(jù)進(jìn)行分析,得出平均房?jī)r(jià)、最高房?jī)r(jià)、最低房?jī)r(jià)"""price = ([i['price'] for i in data])a = []for i in price:a.append(i)# 平均值avg_price = sum(a) / len(a)print('平均房?jī)r(jià)是:' + str(avg_price) + '每平方米')# 最高的價(jià)格max_price = max(a)print('該城市最高的房?jī)r(jià)為' + str(max_price) + '每平方米')# 最低的價(jià)格min_price = min(a)print('該城市最低的房?jī)r(jià)為' + str(min_price) + '每平方米')先將價(jià)格數(shù)據(jù)提取出來(lái),之后計(jì)算最大值、最小值、平均值都很容易了
3、計(jì)算每個(gè)區(qū)的平均房?jī)r(jià)
將output_mongo返回的數(shù)據(jù)傳入analyze_zone
def analyze_zone(self, data):"""分析同城不同地區(qū)的房?jī)r(jià)"""a = []for i in data:a.append(i)zone_name = []house_price = []for i in a:zone_name.append(i.get('zone'))zone_name = set(zone_name) # 對(duì)地區(qū)名進(jìn)行去重for i in zone_name:price = 0zone_num = 0 # 地區(qū)出項(xiàng)的次數(shù)for j in a:if j['zone'] == i:zone_num += 1price += j['price']house_price.append(price//zone_num) # 得到平均房?jī)r(jià)zone_data_dict = dict(zip(zone_name, house_price)) # 得到地區(qū)與價(jià)格的字典z = list(zip(list(zone_data_dict), list(zone_data_dict.values())))zone_price_list = sorted(z, key=lambda x: (x[1]))return zone_price_listanalyze_zone方法會(huì)將每個(gè)地區(qū)的房?jī)r(jià)相加求平均值
4、數(shù)據(jù)可視化(和2019年12月的房?jī)r(jià)數(shù)據(jù)進(jìn)行對(duì)比)
我這里將數(shù)據(jù)都計(jì)算并整理好,房?jī)r(jià)和地區(qū)一一對(duì)應(yīng)
price04 = [16022, 19550, 20176, 22867, 28017, 34064, 47098, 49951, 58837, 68216, 74486] now_price = [16270, 20131, 21563, 25492, 28666, 34259, 46460, 50081, 65994, 62630, 62358] zone = ['從化', '花都', '增城', '南沙', '黃埔', '番禺', '白云', '荔灣', '海珠', '越秀', '天河']怎么對(duì)比比較好呢?這里采用柱狀圖的方式,圖例如下:
將需要對(duì)比的兩組數(shù)據(jù)放在一起,這樣就可以直觀的看出差距
代碼如下:
import numpy as np import matplotlib.pyplot as pltprice04 = [16022, 19550, 20176, 22867, 28017, 34064, 47098, 49951, 58837, 68216, 74486] now_price = [16270, 20131, 21563, 25492, 28666, 34259, 46460, 50081, 65994, 62630, 62358] zone = ['從化', '花都', '增城', '南沙', '黃埔', '番禺', '白云', '荔灣', '海珠', '越秀', '天河'] x = np.array([i for i in range(0, 33, 3)]) x1 = x + 0.9 x2 = x + 2.1 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.bar(x1, price04, label='去年12月份') plt.bar(x2, now_price, label='現(xiàn)在') for i in range(len(x)):plt.text(x1[i], price04[i], price04[i], ha='center')plt.text(x2[i], now_price[i], now_price[i], ha='center') plt.xticks(x + 1.5, zone) plt.legend() plt.show()我們沒有直接將地區(qū)名作為x軸,而是將一個(gè)數(shù)組作為了x軸,但是最后x軸顯示的還是地區(qū)名,這是因?yàn)閤ticks()方法,我們還是先看看xticks()的源碼是如何解釋的吧
xticks()方法的ticks參數(shù)的意思就是,指定刻度放置x軸的標(biāo)簽,labels這個(gè)標(biāo)簽可以覆蓋bar()方法設(shè)置的x軸標(biāo)簽,上圖幫助我們理解,我們?cè)囋嚳慈绻麤]有添加labels參數(shù)會(huì)是什么結(jié)果吧,
將
plt.xticks(x + 1.5, zone)改為plt.xticks(x + 1.5)
圖例:
這次x軸的標(biāo)簽就變?yōu)橐粋€(gè)個(gè)數(shù)字了(這其實(shí)就是x軸的刻度)
通過(guò)圖我們就能比較直觀的看出廣州各個(gè)區(qū)的平均房?jī)r(jià)在這次疫情中的變化,可以看出天河區(qū)、越秀區(qū)的房?jī)r(jià)下降的是比較明顯的,海珠區(qū)的房?jī)r(jià)上漲是比較明顯的。
5、房?jī)r(jià)漲跌幅度(可視化)
上面的圖只能比較直觀的看出漲跌明不明顯,但是我不但想知道誰(shuí)漲了誰(shuí)跌了,而且還要知道具體的漲跌幅度是多少,這才更容易幫助我分析。
計(jì)算方法:漲跌幅 = (現(xiàn)在的房?jī)r(jià)-去年房?jī)r(jià))/去年房?jī)r(jià)
代碼如下:
price04 = [16022, 19550, 20176, 22867, 28017, 34064, 47098, 49951, 58837, 68216, 74486] now_price = [16270, 20131, 21563, 25492, 28666, 34259, 46460, 50081, 65994, 62630, 62358] percent = [] for i in range(len(price04)):percent.append(round(((now_price[i] - price04[i])/price04[i]) * 100, 3)) print(percent)運(yùn)行結(jié)果:
[1.548, 2.972, 6.875, 11.479, 2.316, 0.572, -1.355, 0.26, 12.164, -8.189, -16.282]可視化展示:
代碼如下:
import numpy as np import matplotlib.pyplot as pltprice04 = [16022, 19550, 20176, 22867, 28017, 34064, 47098, 49951, 58837, 68216, 74486] now_price = [16270, 20131, 21563, 25492, 28666, 34259, 46460, 50081, 65994, 62630, 62358] percent = [] for i in range(len(price04)):percent.append(round(((now_price[i] - price04[i])/price04[i]) * 100, 3)) zone = ['從化', '花都', '增城', '南沙', '黃埔', '番禺', '白云', '荔灣', '海珠', '越秀', '天河'] plt.rcParams['font.sans-serif'] = ['SimHei'] plt.bar(zone, percent, color='r', label='漲跌幅度') for i in range(len(percent)):if percent[i] < 0:plt.text(zone[i], percent[i]-1, percent[i], ha='center')else:plt.text(zone[i], percent[i]+1, percent[i], ha='center') plt.legend() plt.show()運(yùn)行結(jié)果:
從這幅圖中我們可以看出在疫情期間只有白云、越秀、天河三個(gè)區(qū)的房?jī)r(jià)有所下降,尤其是天河區(qū)下降了16.282%,南沙區(qū)和海珠區(qū)領(lǐng)漲分別漲了11.479%、12.164%
總結(jié)
以上是生活随笔為你收集整理的疫情对广州房价的影响的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 嵌入式软件单元测试 的必要性和心得
- 下一篇: 机器学习 基于加州房价的线性回归实验