链家租房数据分析
以北京链家租房数据为例进行以下数据分析
-
对“户型”、“面积”和“价格”以及每平米价格等信息进行简要的统计分析,如每平米价格的最大值、最小值、平均值,“面积”的分箱区间统计,“户型”的种类统计等。
print("-----------分箱处理----------------") #bins=[0,30,70,100,130] labels=["小","中","微大","大"] dr["面积"]=ls2 dr["范围"]=pd.cut(dr["面积"],bins=4,labels=labels,include_lowest = True) group_1=dr.groupby("地区").agg({"范围":"count"}) print(group_1)
-
按照具体户型(如 3 室 2 厅)或户型中的室(如 3 室)进行分组,统计每种户型的数量、最高 / 最低 / 平均租价等信息;按照区域(如海淀)进行分组,统计房源数量、最高 / 最低 / 平均租价等信息
print("-----------按照区域(如海淀)进行分组,统计房源数量、最高/最低/平均租价----------------") group_3=dr.groupby("地区").agg({"房间":["count"],"价格(元/月)":["max","min","mean"]}) print(group_3)
-
将前两步实验中的信息进行可视化
a. 使用条形图、饼图等形式绘制“户型”、“面积”和“价格”的分布情况:如将“户型”按 x 室绘制为饼图;将“面积”按不同的区间绘制为饼图;将“价格”按不同的区间绘制为饼图;
b. 使用条形图、折线图等形式绘制“户型”(按室,如 3 室)和区域(如海淀)分组的房源数量和平均租金信息。(注释自己可以去除,图形也可以自己美化一下)
#图一 #plt.pie(dr["房间"],labels=dr["房间"],autopct='%3.1f%%') #plt.title('房源的户型占比') #plt.show() #图二 #plt.pie(dr["面积"],labels=dr["户型"],autopct='%3.1f%%') #plt.title('面积按房源范围是否大小') #plt.show() #plt.pie(dr["价格(元/月)"],labels=dr["地区"],autopct='%3.1f%%') #plt.title('价格划图') #plt.show() #价格的条形图 ''' dr.plot.bar('小区名',"价格(元/月)",color="orange",edgecolor="green",width=0.6) plt.legend() plt.xlabel("小区名字") plt.ylabel("价格") plt.title("小区价格比较") plt.show() ''' print(dr) dr["房间"]=pd.to_numeric(dr["房间"]) #将字符串转换为数字 #户型条形图 # dr.plot.bar('户型',"房间",color="orange",edgecolor="green",width=0.6) # plt.legend() # plt.xlabel("户型") # plt.ylabel("室") # plt.title("房间的比较") # plt.show() dr_=dr.groupby(["地区"],as_index=False).agg({'价格(元/月)':"mean"}) #区域条形图 dr_.plot.bar('地区','价格(元/月)',color="orange",edgecolor="green",width=0.6) plt.legend() plt.xlabel("区域") plt.ylabel("平均价格") plt.title("区域平均价格的比较") plt.show()
全部代码
import pandas
import pandas as pd
import requests
import re
import matplotlib.pyplot as plt
#plt.figure(dpi=300,figsize=(24,8))
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示问题
plt.rcParams['axes.unicode_minus'] = False # 解决中文显示问题
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50'}
url='https://bj.lianjia.com/zufang/#contentList'
# for pag_index in range(1,5):
# urls = 'https://bj.lianjia.com/zufang/'+'pg'+str(pag_index)+'/#contentList'
# r_1 = requests.get(urls, headers=headers)
# with open(r'D:\所有.txt','a+') as fp:
# fp.write(r_1.text)
#
with open(r'D:\所有.txt','r') as fp:
r=fp.read()
dr=pd.read_excel('2.xlsx',index_col=0);
r_1=requests.get(r'https://bj.lianjia.com/zufang/')
print(dr.describe()) # 对价格进行简要的统计
group_=dr.groupby("户型") #对户型进行统计分析
for i,j in group_:
print(i)
print(j)
print()
ls1=re.findall(r'<i>\/<\/i>\s*(.+?)㎡',r) # 找面积
ls2=[]
for i in range(len(ls1)):
ls2.append(int(float(ls1[i])))
print("-----------分箱处理----------------")
#bins=[0,30,70,100,130]
labels=["小","中","微大","大"]
dr["面积"]=ls2
dr["范围"]=pd.cut(dr["面积"],bins=4,labels=labels,include_lowest = True)
group_1=dr.groupby("地区").agg({"范围":"count"})
print(group_1)
ls4=re.findall(r'<i>\/<\/i>\s*(.+?[室,房间])',r) #找户型
ls5=re.findall(r'<i>\/<\/i>\s*(\d?)[室,房间]',r) #找室,然后取数字
print(len(ls5))
dr["室"]=ls4
dr["房间"]=ls5
print("-----------统计每种户型的数量、最高/最低/平均租价----------------")
group_2=dr.groupby("室").agg({"房间":["count"],"价格(元/月)":["max","min","mean"]})
print(group_2)
print("-----------按照区域(如海淀)进行分组,统计房源数量、最高/最低/平均租价----------------")
group_3=dr.groupby("地区").agg({"房间":["count"],"价格(元/月)":["max","min","mean"]})
print(group_3)
#图一
#plt.pie(dr["房间"],labels=dr["房间"],autopct='%3.1f%%')
#plt.title('房源的户型占比')
#plt.show()
#图二
#plt.pie(dr["面积"],labels=dr["户型"],autopct='%3.1f%%')
#plt.title('面积按房源范围是否大小')
#plt.show()
#plt.pie(dr["价格(元/月)"],labels=dr["地区"],autopct='%3.1f%%')
#plt.title('价格划图')
#plt.show()
#价格的条形图
'''
dr.plot.bar('小区名',"价格(元/月)",color="orange",edgecolor="green",width=0.6)
plt.legend()
plt.xlabel("小区名字")
plt.ylabel("价格")
plt.title("小区价格比较")
plt.show()
'''
print(dr)
dr["房间"]=pd.to_numeric(dr["房间"]) #将字符串转换为数字
#户型条形图
# dr.plot.bar('户型',"房间",color="orange",edgecolor="green",width=0.6)
# plt.legend()
# plt.xlabel("户型")
# plt.ylabel("室")
# plt.title("房间的比较")
# plt.show()
dr_=dr.groupby(["地区"],as_index=False).agg({'价格(元/月)':"mean"})
#区域条形图
dr_.plot.bar('地区','价格(元/月)',color="orange",edgecolor="green",width=0.6)
plt.legend()
plt.xlabel("区域")
plt.ylabel("平均价格")
plt.title("区域平均价格的比较")
plt.show()