新的一年,有房东提出了涨租,也有跳槽的小伙伴,考虑租房换房,趁着这个时点,再来说说租房的事,找到合适的房子是头等大事,接下来让我们通过爬取房天下数据来观察广州房租情况。(结果图在最后面,想看结果图的小伙伴自行往下滑动)
第一步、爬取数据
爬取的时间是2019年12月份,爬取的代码如下
import csv
from selenium import webdriver
chrome_driver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(executable_path=chrome_driver)
with open('Data.csv', 'a+', newline='', encoding='utf8') as f:
writer = csv.writer(f, dialect="excel")
writer.writerow(['标题','详情','位置','价格'])
for i in range(2,101):
url = "https://gz.zu.fang.com/house/i3"+str(i)+"/"
int(i)
i+=1
print(url)
driver.get(url)
titles = driver.find_elements_by_css_selector('div.houseList > dl > dd') # 购房信息
print(titles)
for title in titles:
data = {
'title': title.find_element_by_css_selector('p.title a').text, #标题
'details': title.find_element_by_css_selector("[class='font15 mt12 bold']").text, #详情
'location': title.find_element_by_css_selector('[class="gray6 mt12"]').text, #位置
'price': title.find_element_by_css_selector('[class="price"]').text, #价格
}
print(data)
if data:
writer.writerow([data['title'], data['details'], data['location'], data['price']])
# writer.writerow([data['price']])
第二步、处理数据,代码下
from pandas import read_csv
import csv
import re
data=read_csv('Data.csv')
data[['租房种类','厅室数量','房间面积','房间朝向']]=data['详情'].str.split('|',3,True)
data[['区','县','街道']]=data['位置'].str.split('-',2,True)
data=data.drop(['详情'],axis=1)#删除详情列
data=data.drop(['位置'],axis=1)#删除位置列
def slp(x):
s=re.findall('\d+',x)
return int(s[0])
data['房间面积']=data['房间面积'].apply(slp)
data=data.dropna()
with open('Data2.csv', "w", newline='', encoding='utf8') as f:
writer = csv.writer(f)
writer.writerow(data.columns)
writer.writerows(data.values)
第三步、获取房间面积与房租的关系
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
data = pd.read_csv('Data2.csv')
data=data.sort_values('房间面积')
def getPlt(column):
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 雅黑字体
plt.figure(figsize=(15, 5))
plt.xticks(rotation=40)
plt.plot(data['房间面积'],data['价格'])
# plt.xticks(data['房间面积'],data['价格'])
plt.ylabel("平均房租")
plt.show()
plt.scatter(data['房间面积'],data['价格'])
plt.show()
def main(column):
getPlt(column)#获取column列与房租的关系,并绘制条形图
if __name__ == "__main__":
main('房间面积')
结果如下图
第四步、获取租房种类、厅室数量、房间朝向、地区与房租的关系
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
import numpy as np
data = pd.read_csv('Data2.csv')
sumRent={}#房租总和
sampleSize={}#每个的样本数
dict_vessel=[]#去重后的存放容器
meanRent={}#每个样本的平均房租存储容器
#获取样本种类(样本去重)
def getSpecies(column):
for i in data[column]:
sumRent[i]=0
sampleSize[i]=0
for i in sumRent.keys():
# print(i)
dict_vessel.append(i)
#每个样本价格数据统计用的方法
def priceMean(column,place,index1):
if data[column][index1] == place:
if not pd.isnull(data['价格'][index1]):
# print(data['最低房租'][index1],' ',data['最高房租'][index1])
sumRent[place] += data['价格'][index1]#每类样本的房租汇总
sampleSize[place] += 1#统计每个样本的个数
#获取column列与房租的关系
def relation(column):
for index1 in range(0,len(data)):
try:
for place in dict_vessel :
priceMean(column,place, index1)
except Exception as e:
a=0
# print("error",e)
print('每个样本房租总和:\n',sumRent)
print(dict_vessel)
for place in dict_vessel:
meanRent[place]=sumRent[place]/sampleSize[place]
print('每个样本的平均房租:\n',meanRent)
#并绘制条形图
def plot(column):
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 雅黑字体
plt.bar(meanRent.keys(),meanRent.values())
plt.xticks(rotation=30)
for a,b in zip(meanRent.keys(),meanRent.values()):
plt.text(a, b+0.05, '%.0f' % b, ha='center', va= 'bottom',fontsize=11)
plt.ylabel("平均房租")
plt.xlabel(column)
plt.show()
def main(column):
getSpecies(column)#获取样本种类
relation(column)#获取column列与房租的关系
plot(column)#并绘制条形图
if __name__ == "__main__":
main('租房种类')
main('厅室数量')
main('房间朝向')
main('区')
运行结果如下:
租房种类与房租的关系
厅室数量与房租的关系
这是上图对应的数据
'4室2厅': 11753.518248175182,
'2室1厅': 3906.57614213198,
'5室3厅': 19047.058823529413,
'1室1厅': 3386.3221649484535,
'2室2厅': 4210.963492063492,
'3室2厅': 6260.025089605735,
'5室2厅': 18676.873563218393,
'3室1厅': 4881.433628318584,
'1室2厅': 5004.545454545455,
'1室0厅': 2935.7012987012986,
'3室3厅': 5200.0,
'4室3厅': 22922.11111111111,
'6室2厅': 18714.285714285714,
'9室5厅': 196296.0,
'7室3厅': 30357.14285714286,
'2户合租': 14385.714285714286,
'7室2厅': 11357.142857142857,
'6室4厅': 13500.0,
'5室1厅': 28000.0,
'6室3厅': 23828.571428571428,
'0室1厅': 1680.0,
'0室0厅': 2500.0,
'4室1厅': 6266.666666666667,
'9室2厅': 6200.0
房间朝向与房租的关系
地区与房租的关系
最后,希望这些数据对在广州租房的你有所帮助。
评论