python可以做计量分析吗_利用python进行短租房可视化与简单计量分析

本文探讨了如何使用Python进行短租房数据预处理、数据清洗,以及简单的计量分析。通过分析影响短租房价格的因素,如可居住人数、卧室数、浴室数等,发现消费者的评分对价格影响较小,而房源的某些特征如卧室数量和床数对价格有显著影响。
摘要由CSDN通过智能技术生成

1.导入数据,数据预处理

分析目标:探索影响短租房价格的因素,消费者对短租房的评分是否对短租房价格有影响。

%matplotlib inline

import warnings

warnings.filterwarnings("ignore")

import numpy as np

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']='SimHei' # 纠正作图时中文显示错误

from pandas import DataFrame,Series

import pandas as pd

pd.set_option('display.max_columns',100)#显示列数为100列

pd.set_option('display.width', 100

pd.set_option('display.max_colwidth',100))#显示行数为100列,为更好观察数据

1.1选取数据集

输入:

#先查看数据包的数据指标

data = pd.read_csv("listings.csv")#简单数据集

data_detail=pd.read_csv("listings_detail.zip")#全部数据集

通过两表连接汇总,得到一个新的数据集,并将列名改为中文。

输入:

data_detail2=data_detail[['id','listing_url','monthly_price','accommodates','bathrooms','bedrooms',

'beds','review_scores_rating', 'review_scores_accuracy', 'review_scores_cleanliness',

'review_scores_checkin', 'review_scores_communication', 'review_scores_location',

'review_scores_value']]

data3 = pd.merge(data,data_detail2,how = 'left' , on ='id' )#双引号不可用

data3.columns = ["房子id","房名","房主id","房主名","所在地","纬度","经度","房屋类型",

"一日价格","最低居住天数","评论数","最后评论时间","每月评论数","房主房源数",

"一年内的出租天数","房子网址","每月价格","可居住人数","浴室数","卧室数","床数",

"总评分","如实描述评分","清洁度评分","入住顺利评分","交流评分","位置评分","性价比评分"]

输出:

房子id 房名 房主id 房主名 所在地 纬度 经度 房屋类型 一日价格最低居住天数 评论数 最后评论时间 每月评论数 房主房源数 一年内的出租天数 房子网址 每月价格可居住人数 浴室数 卧室数 床数 总评分 如实描述评分 清洁度评分 入住顺利评分 交流评分 位置评分 性价比评分

44054Modern and Comfortable Living in CBD 192875East Apartments朝阳区 39.89503 116.45163Entire home/apt 792 1 89 2019-03-04 0.85 9 341 https://www.airbnb.com/rooms/44054 $26,170.00 9 2.0 3.0 4.0 91.0 9.0 9.0 10.0 10.0 10.0 9.0

1.2数据集清洗

#先简单描述数据集,查看数据空值

print(data3.describe())

print(data3.isnull().sum())

具体清洗思路:

1.2.1最低居住天数极大值为1125不合理。

1.2.2一日价格极值为零或过大可能不合理。

1.2.3删除测试房源以及浴室数,卧室数,床数,为Null的数据。

1.2.4进行计量分析时,为保证数据集评分能反映房客的真实想法,将各项评分为Null的数据删去又为描述北京房源的真实情况,故输出两个数据集,分别进行计量分析与统计性描述。

#1.2.1清洗最低居住天数异常值

data4=data3.loc[(data3['一年内的出租天数']!=0)&(data3["最低居住天数"]<=365)]

#1.2.2清洗一日价格异常值

#画出房源一日价格曲线图

seaborn.distplot(data4['一日价格'].sort_values(),bins=10)

存在大量一日价格为万元以上的房源

查看一日价格大于5000的房源

data4.loc[data4["一日价格"]>5000]

#发现存在一日价格过高而可居住人数过低的不匹配的现象。

#将不匹配房源删除与一日价格为零的房源

data5=data4.loc[~((data4["一日价格"]>=5000) & (data4["可居住人数"]<5)&(data4["一日价格"]!=0))]

#将一日价格过高与可居住人数都较高的房源归为轰趴公寓

data5.loc[(data5["可居住人数"]>5)&(data5["一日价格"]>1000),"房屋类型"] ="boom room"

1.2.3删除测试房源以及浴室数,卧室数,床数为Null的数据并删除每月价格列。

data6=data5.loc[~data5['房名'].str.contains('测试|下架|np.NaN|不能租|下线')]

data7=data6.loc[~(data6['浴室数'].isnull()|data6['卧室数'].isnull()|data6['床数'].isnull())]

data7.drop(columns='每月价格',inplace=True)

1.2.4生成两个不同目标的数据集

#计量数据集

data_calculate = data7.loc[~(data7['浴室数'].isnull()|data7['卧室数'].isnull()|data7['床数'].isnull())]

#描述统计数据集

data_descriptive = data7

1.3简单描述统计

1.3.1查看不同地区房源数

plt.figure(figsize=(15,5))

sns.countplot(x='所在地',data=data_descriptive,hue='房屋类型')

1.3.2查看boom room对整体数据集均值的影响,采用剔除boom room 的方法

nei_price=pd.pivot_table(data_descriptive ,index='所在地',values='一日价格',aggfunc=np.mean)

nei_price.columns = ["含boom room一日价格"]

data_descriptive_1 = data_descriptive .loc[~(data_descriptive ["房屋类型"]=="boom room")]

nei_price_1=pd.pivot_table(data_descriptive_1,index='所在地',values='一日价格',aggfunc=np.mean)

df_2 = nei_price.join(nei_price_1,how = 'outer' )

#整体上看,boom room的数量虽少,但是对短租房均价的贡献较高。

#查看数据集各房屋类型占比

plt.figure(figsize=(10,10),dpi=80)

data_descriptive_pie=data_descriptive['房屋类型'].value_counts()

plt.pie(data_descriptive_pie, labels=data_descriptive_pie.index, autopct='%.2f%%',shadow=False,startangle=130,textprops={'fontsize':15 ,'color':'black'})

plt.title('北京短租房房间类型占比')

plt.legend(loc='best',fontsize=15)

plt.show()

描述统计总结:

shared room(共享房:呈现人数多,房数少人数多的特点)

entire room(整房)

boom room(轰趴公寓:其具有可居住人数多,房间数多的特点)

private room(私人房间,通常是出租单间)

1.从地域上看,朝阳区房源数占首位;从房屋类型来看,entire room出租情况占首位。

2.boom room,对短租房均价的影响巨大,从而使得不同地域房租均值相互之间出现严重偏差,而通过剔除轰趴公寓影响之后,不同地域均值水平出现集中趋势(多集中于300~600元之间)。

1.4简单计量分析

1.4.1查看各变量间的相关系数

data_corr = pd.DataFrame(data_calculate,columns=["一日价格","经度","纬度","评论数","每月评论数","可居住人数",

"一年内的出租天数","卧室数","浴室数","床数","总评分",

"如实描述评分","清洁度评分", "入住顺利评分","交流评分",

"位置评分","性价比评分"])

sns.set_style("dark")

#fig,ax=plt.subplots(211)

plt.figure(figsize=(30,15))

sns.set(font_scale=2,font="simhei")

sns.heatmap(data_corr.corr(),annot=True) # 查看各个变量之间的相关关系,进一步分析相关系数高的变量

结论:一日价格与可居住人数,床数,卧室数的相关度较高,与浴室数有一定相关性,与各项评分均无显著相关性,说行消费者的评分对房主制定价格的影响比较小,所短租房市场极有可能是卖方市场,定价权掌握在商家手中。

1.4.2建立多元回归计量模型

#查看数据集中趋势

index = ["床数","卧室数","可居住人数","浴室数","一日价格"]

from scipy.stats import skew,norm

for i in indexss:

fig,axes=plt.subplots(figsize=(8,7))

sns.distplot(data_calculate[i],fit=norm,color='y')

sns.despine(trim=True,left=True)

plt.show()

发现数据集均出现正偏,为满足计量分析的正态性假设,对数据进行对数变化。

for i in indexss:

data_calculate_log=data_calculate.copy()

data_calculate_log[i]=np.log1p(data_calculate_log[i])

fig,axes=plt.subplots(figsize=(8,7))

sns.distplot(data_calculate_log[i],fit=norm,color='y')

sns.despine(trim=True,left=True)

plt.show()

基本消除偏态影响(检验其正态性需要非参数统计知识,待补)

#建立模型

import statsmodels.api as sm

from sklearn import model_selection

dd_mod=pd.DataFrame(data_calculate_log,columns=['床数','浴室数','卧室数','一日价格',"可居住人数"])

fit = sm.formula.ols(formula='一日价格 ~ 床数 + 浴室数 +卧室数+可居住人数', data=dd_mod).fit()

print(fit.summary())

plt.show()

结论:

1.

equation?tex=R%5E%7B2%7D =0.413说明变量与因变量之间呈中度线性关系,总体通过F检验,线性关系显著。

2.床数,卧室数,可居住人数均通过t检验,卧室数与可居住人数对一日价格的影响是正向的。而床数与一日价格呈负线性关系,是由于在Share room 与Privae room中由大量房数与床数不匹配的情况,且由于高价位与高床数的boom room虽然占到一半以上,但由于还有将近一半呈现低价位与高床数的房屋类型存在,所以床数的增加对一日价格的影响是负的。

3.浴室数未通过t检验说明一日价格与浴室数的关系不显著,这是因为浴室数大多集中于1~3之间,不能灵敏的反应一日价格。

#查看床数大于5的房屋类型占比情况

plt.figure(figsize=(10,10),dpi=80)

data_calculate_pie=data_calculate['房屋类型'].value_counts()

plt.pie(data_calculate_pie, labels=dd_rt.index, autopct='%.2f%%',shadow=False,startangle=130,textprops={'fontsize':15 ,'color':'black'})

plt.title('北京短租房房间类型占比')

plt.legend(loc='best',fontsize=15)

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值