我们打工仔本来房租就是占每月支出的很大一部分了,那自然是不降低生活幸福感的情况下能省则省,说到这里黄帮主就忍耐不住自己的洪荒之力利用<em>python</em>分析一波南京的租房信息。首先,‘南京租房信息数据分析’,你瞅
2021-05-21 13:00:20
租房真是個頭疼的問題,又想便宜又想靠譜,想要離家近,地鐵四通八達,房子陽光好。這裡給大家推薦一個好方法:提高預算(不是。
我們打工仔本來房租就是佔每月支出的很大一部分了,那自然是不降低生活幸福感的情況下能省則省,說到這裡黃幫主就忍耐不住自己的洪荒之力利用python分析一波南京的租房資訊。
首先,‘南京租房資訊資料分析’,你瞅瞅從一到第六個字是啥,那自然是南京租房資訊啊。沒有資訊的資料分析就彷彿蒼蠅趴在玻璃上——前途一片光明,卻走頭無路。好了,好了,咱不開玩笑了,看看怎麼獲取資料吧。本文資料來源為安居客,用python的requests和bs4庫進行爬取頁面,並解析,將結果寫入csv檔案中。(看不懂沒關係,說實話黃幫主也學了挺久,等你學會了你就看懂了(狗頭保命)
import requests,time,random
from bs4 import BeautifulSoup
import csv
defget_content(url):
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
}
response = requests.get(url,headers= headers)
soup = BeautifulSoup(response.text, 'lxml')
zu_soups = soup.find_all('div',class_="zu-itemmod")
zufang_info = {}
with open('njzf.csv', 'a', newline='', encoding='utf-8') as f:
for zu_soup in zu_soups:
zu_infos = zu_soup.find_all('div',class_='zu-info')
price = zu_soup.find('div',class_='zu-side').text.strip()
for zu_info in zu_infos:
title = zu_info.find('h3').text.strip()
layout = zu_info.find('p',class_="details-item tag").text.split("|")[0].strip()
area = zu_info.find('p', class_="details-item tag").text.split("|")[1].strip()
floor = zu_info.find('p', class_="details-item tag").text.split("|")[2].split('層')[0]
address = zu_info.find('address').text.strip()
address =" ".join(address.split())
rent_type = zu_info.find('p',class_="details-item bot-tag").find_all('span')[0].text
direction = zu_info.find('p', class_="details-item bot-tag").find_all('span')[1].text
try:
subway = zu_info.find('p', class_="details-item bot-tag").find('span', class_="cls-3").text
except:
subway =''
zufang_info['標題'] = title
zufang_info['佈局'] = layout
zufang_info['面積'] = area
zufang_info['樓層'] = floor
zufang_info['地址'] = address
zufang_info['出租方式'] = rent_type
zufang_info['朝向'] = direction
zufang_info['地鐵'] = subway
zufang_info['租金'] = price
table_row = [title,layout,area,floor,address,rent_type,direction,subway,price]
writer = csv.writer(f)
writer.writerow(table_row)
print(zufang_info)
return
if __name__=='__main__':
with open('njzf.csv', 'a',newline='', encoding='utf-8') as f:
writer = csv.writer(f)
table_head = ['標題','佈局','面積','樓層','地址','出租方式','朝向','地鐵','租金']
writer.writerow(table_head)
for i in range(0,50):
url ='https://nj.zu.anjuke.com/fangyuan/p{}/'.format(i +1)
time.sleep(random.randint(1, 6))
get_content(url)
爬啊爬,共爬取了3000條有效租房資料,如下圖所示,一看這個數量,心裡是不是美滋滋,然而看了看自己的錢包,立馬哭了,篩選下來沒幾條。
整體租房價格情況那黃幫主自然和你一樣,也想租個便宜的,那咱們就統計下價格,篩選下自己心儀的價格;
def draw_histogram(x):
x_label = x.name
x = x.dropna()
x = np.array(x)
mu =round(x.mean(), 2)
sigma =round(x.std(), 2)
bins_num =10
n, bins, patches = plt.hist(x, bins_num, density=1, facecolor='blue', alpha=0.5)
y = norm.pdf(bins, mu, sigma)
plt.plot(bins, y, 'r--')
plt.xlabel(x_label)
plt.ylabel('概率密度')
plt.title(r'{}正態分佈: $mu={}$,$sigma={}$'.format(x_label, mu, sigma))
plt.show()
咱們再來看看圖,選取租金一列,進行作圖
f =open('njzf.csv', encoding='utf-8')
data = pd.read_csv(f)
f.close()
price = data['租金'].str.rstrip('元/月').astype('float')
如下圖所示
考慮單位面積的情況,對單位面積的租金再進行分析
area = data['面積'].str.rstrip('平米').astype('float')price_per_m = price/areadata['單位面積租金'] = price_per_mdraw_histogram(data['單位面積租金'])
如下圖
單位面積租金較單純考慮租金更具有代表意義,從圖中可以看出,南京租房平均每平方米需要46元/月。
按地區分析district = data['地址'].str.split(' ').str[1].str.split('-').str[0]
bars = plt.bar(district.value_counts().index, district.value_counts().values, color=['r', 'g', 'b', 'm', 'k', 'y', 'cyan', 'gold'])
values =list(district.value_counts().values)
plt.title('各區房源數量')
for bar, value inzip(bars, values):
plt.text(bar.get_x()+0.5*bar.get_width(),bar.get_height(), value, ha='center', va='bottom')
plt.show()
各區在安居客上的租房資訊條數從高到低如上圖所示,建鄴有著較多的租房資訊,其次是浦口和江寧。
租房佈局layout = data['佈局'].value_counts()
plt.pie(layout, labels=list(layout.index), explode=[0, 0.02, 0.05, 0.1, 0.2, 0.5, 0.8, 1, 1.2, 1.5, 1.7, 2, 2.5], autopct='%1.2f%%', startangle=0)
plt.title('各種佈局佔比')
plt.axis('equal')
plt.show()
從這個花花綠綠的圖上可以看到,安居客上出租的房型有59.47%是屬於3室1廳型,這種極大可能性是三個人合租的,其次是1室1廳,基本就是一個人或者情侶、夫妻這種,再就是3室2廳,屬於家庭型居住了。
看到這個結果,豬豬嘆氣,連安居客都在暗示我該找個女朋友了,而我的女朋友卻不知道在哪裡。作為一個沒錢又沒有女朋友的單身狗,在這個令人心凍的520祝大家520快樂!我還是好好學學python,然後成為一個有錢但沒有女朋友的單身狗吧~
相關文章
我们打工仔本来房租就是占每月支出的很大一部分了,那自然是不降低生活幸福感的情况下能省则省,说到这里黄帮主就忍耐不住自己的洪荒之力利用<em>python</em>分析一波南京的租房信息。首先,‘南京租房信息数据分析’,你瞅
2021-05-21 13:00:20
没错,就是大家都很喜欢的随手拍拍的图片,之所以选择在今天发布,是因为昨天是甜蜜蜜的520,肯定少不了甜甜的照片,因此就在今天发布本文章,帮助大家处理一下甜甜的照片,让照片甜蜜蜜的同时更有趣味。#<em>python</em>豆腐秀#
2021-05-21 13:00:05
其中有别于性能配置方面差异,据悉OPPO Reno6标准版或将搭载天玑900处理器,OPPO Reno6 Pro则可能搭载联发科天玑1200 5G SoC,OPPO Reno6 Pro+可能会搭载<em>高通</em>骁龙870移动平台,性能方面是不用担心了。今年的OPPO Re
2021-05-21 12:31:29
然而对于不支持aptX Adaptive编解码技术的旧款vivo设备,vivo TWS 2针对<em>高通</em>、MTK 和三星平台的机型同样进行优化适配,采用 SBC 编解码,延迟分别降低 105%、100% 和 60%,也可以获得较低的延迟体验。 另外,viv
2021-05-21 12:31:23
最后来说一说他的一些参数吧,其实这些东西都是老生常谈。在这个价位上,所有的参数都是大同小异的:<em>高通</em>888+UFS3.1+DDR5铁三角的配置;6.67英寸AMOLED柔曲屏,分辨率为2400*1080,支持100% DCI P3色域和10bit色深显示
2021-05-21 12:31:17
但荣耀已经具备独立生存的能力,脱离华为后,迅速调整业务规划,并迎来了<em>高通</em>。独立后的荣耀首先要做的第一件事情就是重回供应链,恢复芯片供应,为将来的手机产品发布做准备。而<em>高通</em>,联发科均成为荣耀的主要
2021-05-21 12:31:13