首頁 > 軟體

怎麼利用python程式設計租到便宜又好的房子? 扇貝一篇文說清楚

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,然後成為一個有錢但沒有女朋友的單身狗吧~


IT145.com E-mail:sddin#qq.com