Python、R语言Lasso、Ridge岭回归、XGBoost分析Airbnb房屋数据:旅游市场差异、价格预测|数据分享...

全文链接:https://tecdat.cn/?p=37839

分析师:Kefan Yu

在大众旅游蓬勃发展的背景下,乡村旅游已成为推动乡村经济、社会和文化发展的关键力量。当前,乡村旅游接待设施主要以招待所、小宾馆和农家乐等形式存在。然而,一方面这些设施的接待能力有限,另一方面为了维护乡村独特的景观特色,住宿设施也不宜完全照搬城市酒店的规模和形制点击文末“阅读原文”获取完整代码数据)。

民宿作为一种利用自家闲置房屋、以家庭经营为主且能提供多种特色服务的接待设施,恰好能满足上述两项需求。

本文包含:Python分析Airbnb 数据:洞察市场差异、价格因素与旅行价值|附数据代码和房源价格预测模型研究|附数据代码。通过对客户的这些数据的挖掘和研究,旨在揭示 Airbnb 房源在时间序列变化、用户评论情感分析以及房源各方面特征可视化等方面的规律,为乡村旅游接待设施的发展以及 Airbnb 平台的优化提供有价值的参考依据。同时,通过建模与分析过程,探索影响房源价格的关键因素,进一步提升对房源价格预测的准确性,为房东、租客和平台运营者提供决策支持。

Airbnb房屋数据集的房屋现状分析及价格预测

分别针对calendar、reviews和listings三张表查看文末了解数据免费获取方式进行探索性分析。

1.calendar表

时间序列分析

calendar表展示了西雅图2016年1月到2017年1月3818所房子的是否可定状态和每一天的房屋价格,通过对每一天的房屋价格取均值以及对每一天房屋可定状态的计数,我们可以分别得到价格的时间序列图和每日空闲房屋数量的时间序列图。

1e84bec3baec953c9d356ad7af3800d3.pngfe1e4fb062494a78420aa5902a1afed7.png

从这个图中我们可以看到民宿房屋的价格在7、8月达到了一个高峰,可以想见是因为7、8月正值放假外出游玩的时候,房屋的价格也相应上涨。于此同时,空闲房屋的数量在1月、7月分别有所下降,也就是说在这两个时间段订房人数急剧增长。由于空闲房间数量图时间序列特征并不明显,我们在此仅对房屋价格进行时间序列分析和预测。由于我们要进行的ARIMA时间序列分析需要的是一个平稳的序列,当我们得到的时间序列不平稳时,通过做时间序列的差分,直到得到一个平稳的时间序列。

这里分别采用了移动平均法和指数平均法进行平滑处理,得到下图:

1689bc4256279c3307adbc0abd0312fa.png

从上图可以发现窗口为12的移动平均能较好的剔除年周期性因素,而指数平均法是对周期内的数据进行了加权,能在一定程度上减小月周期因素,但并不能完全剔除,如要完全剔除可以进一步进行差分操作。先用pandas将序列差分好,然后在对差分好的序列进行ARIMA拟合。

2a0275df20f5d3a5289d4730e5b658f5.png

148dea8d8939c74b9fcf3858c599956c.png

从上面的统计检验结果可以看出,经过12阶差分和1阶差分后,该序列满足平稳性的要求了。

1.ARMA(0,1)模型:即自相关图在滞后1阶之后缩小为0,且偏自相关缩小至0,则是一个阶数q=1的移动平均模型;

2. ARMA(7,0)模型:即偏自相关图在滞后7阶之后缩小为0,且自相关缩小至0,则是一个阶层p=3的自回归模型;

3. ARMA(7,1)模型:即使得自相关和偏自相关都缩小至零。则是一个混合模型。

4. ARMA(8,0)模型:即偏自相关图在滞后8阶之后缩小为0,且自相关缩小至0,则是一个阶层p=3的自回归模型;

目前选择模型常用如下准则:

* AIC=-2 ln(L) + 2 k 中文名字:赤池信息量 akaike information criterion

* BIC=-2 ln(L) + ln(n)*k 中文名字:贝叶斯信息量 bayesian information criterion

* HQ=-2 ln(L) + ln(ln(n))*k hannan-quinn criterion

以上四个模型得到的AIC、BIC、HQ数值如下:

674c2753be6d91fd0b9966c8d4d7bf4f.png4d774e1f059d0600a798e2087c9f2266.png  2097245f5ded007a3fffb7e76f1f5c82.png64acfc0933ff00f36fa92ab284ff0b09.png

通过比较得到ARMA(8,0)各项数值都最小,因此是最佳模型。

通过ARMA(8,0)进行2017年-2018年房屋价格预测,得到结果如下:

b347353b7ab276a34e8786050c12c03b.png

可以看到房屋均价基本在135-140浮动,将预测数据与原数据进行对比,此处未对原数据进行平稳性处理,但是可以看出预测准确性还是比较好的,

71b1b1f4afb6b8196db172200f02b892.png

2.reviews表

文本处理——针对Airbnb房屋评论的情感分析

在listings、calendar和reviews这三张表中,含有多个文本型属性,但是对最终房屋的价格预测影响最大的还是用户对各房屋的评论内容。所以对reviews表中的comments内容通过情感分析进行量化处理,并用于最终的模型建立(价格预测)。具体过程如下:

2.1.文本一级清洗

首先查看reviews表中comments这一属性的缺失值情况:在84849条数据中,仅有17条评论信息是缺失的,占比很小而且作为文本型数据无法进行填补,故做删除缺失值处理。

cc6c033bcbe31db7ef1da35831a43e6c.jpeg

8c17374cc9ce7767f913458909ef8955.png

删除后,在review这张表中剩余84832条完整评论信息。将comments的类型转变为字符型,并利用removewords这一函数去除comments中的标点符号和stopwords中的停用词,通过tolower这一函数将所有的评论信息变成小写形式,最后输出前五条评论内容进行查看:

34665d1a629ab37279fd1e97c8c0e0fe.png

2744d0efebce52b4e2301433a6a3de9a.png

在利用tolower这一函数时,出现了报错:

996dcb5d7c78753af2e3eeb6f865b8af.png

经查看,发现comments中的文本内容较脏乱,不仅包含英文,还包含中文和日文等多种语言,但是在84832条评论数据中,除英文以外的字符非常少,而且一般形式表现为其他语言掺杂在英文中,英文仍是每条评论的主体,所以将除英文以外以其他语言形式存在的字符作为异常字符进行删除处理。做法是通过removerwords这一函数去除每条comments中除英文(大小写)和空格以外的字符,表现形式是利用正则表达式:[^A-Za-z0-9 _]

c592e823034a6ac1ec44bc8a52ca0174.png

去除异常字符后再将comments中的内容转变为小写形式,并查看前五条评论信息:

a69574d704125805eb3ab15a2d85ba6b.png

从以上两次数据对比可以看出小写转换成功。

2.2.文本二级清洗——词频、词云等可视化展示

为了更方便进行可视化内容,将review表中的comments内容赋给r这一变量。

a.保留词根

首先进行只保留词根(stemming)处理,当同一个单词结尾不同,但是却代表相同的含义的时候,我们通过只保留这些单词词根的方法来去掉冗余。例如argue, argued, argues, 以及 arguing代表的是相同的含义,但是被按照不同的单词来计数,因此可以通过只保留词根的方法,让他们用一个共同的词根argu代替。 故利用tm_map函数通过stemdocument这一功能保留r中的词根:

a8ce1d60e672778491394e2983c3df34.png

b.创建单词频率矩阵

利用documenttermmatrix函数建立单词频率矩阵,其中每一行代表每一条评论信息,每一列代表对应推文中出现的一个单词,矩阵中的数值为每个单词在每个观测值中出现的频率(次数)。具体过程和结果如下:

00d79c3bd5397e71ce1611362c840f22.jpeg

由此可见,frequencies中包含了84807个观测值和45881个单词。

查看第1-10行矩阵内容:

1d986ce296b2eec18ca18b709b766558.jpeg

查看出现至少1000次的高频词汇:

3a27df909f3ce3fd5a87bf079e74d077.jpeg

(部分高频词汇)

我们可以发现,在45881个单词当中,只有504个词出现的频率不少于1000次,因此我们可以去除一些低频词汇,因为这些低频词汇对于模型预测没有较大的帮助,且其存在会导致大量的计算,进而延长模型运算的时间。

fb1cf9688753c4da4ecc96da2541a12d.jpeg

将低频词汇剔除后,sparse中只包含了839个观测值。

c.画制词云

首先利用tm包中的VCorpus函数把comments的内容作为R对象、保存在内存中,建立动态语料库,然后再通过TermDocumentMatrix函数把comments转化为DTM矩阵形式,最后利用wordcloud包中的wordcloud函数画制评论的词云图像,具体过程和结果如下:

c2d2664400ed790ad9a799535947cb62.png

f5b824827280d7fe78dc2863fde95127.png

词云图像:

a6e84554bb716858087cf152c66d62df.png

2.3.情感分析并评分

首先从CSDN网站上下载英文的正负面情感词汇的txt文件,导入R中,分别命名为negative(消极)和positive(积极)。并将negative和positive中的词语加上权重(weight),设置negative中的每一个词语的权重(weight)都为-1,positive中的权重(weight)都为1,这也意味着最终评分结果越大说明该条评论越积极,评分越小说明该条评论越消极。,然后再利用cbind函数将negative 和positive通过term这一列名相同的属性合并起来,得到posneg这一带有权重的最终情感数据集。

Negative中含有1011条数据和term、weight两个变量,positive中含有773条数据和term、weight两个变量,posneg中含有1784条数据和term、weight两个变量。

413475d0d31673876386d0b0858eacd9.png

在posneg数据集中建立pn这一空数值型属性表示每条评论文本的情感得分情况。评分过程是利用两个for循环嵌套的形式,外面的循环是针对每一条评论信息进行搜索,里面的循环表示为针对每一条评论信息,将posneg中所有的词语搜索一遍,如果词语在评论信息中,pn(评分)则加上相应的weight值,若不在,pn(评分)则加上0。具体过程如下:

cdc305193fa65607f34627441d6dc8da.png

由于是双层嵌套,而且数据量较大,在经过10个多小时的等待后,最终在review表中加上了每条评论的情感分析评分值(pn),结果如下:

17080c48b97ecbefbfe55bff30ed9af6.png

2.4.合并listings表

首先将review表中的评分以listing_id为依据对pn(评分)进行分类取均值,并将id和av(平均评分)保存在变量av中。再利用merge函数以id为依据连接listings和av两张表,得到用于最终建立模型的lr数据集。lr中包含3191条数据,与最初的listings数据集相比,少627条数据,说明airbnb网站上的这627个房屋是没有用户对其进行过评论的。

f2e718c13c74609118d40831e24d8c10.png

3.listings表——可视化

利用ggplot函数对listings表中的信息进行可视化展示,主要从房屋整体评分、房东可信度、房屋情况、地理位置和评论情况五个角度出发探寻房屋各方面信息之间的关系。具体过程和结果如下:

3.1.房屋整体评分——主成分分析

主成分(PCA)分析的一般步骤如下:根据变量间的相关性来推导结果。用户可以输入原始数据矩阵或者相关系数矩阵到principal()和fa()函数中进行计算,在计算前请确保数据中没有缺失值。

(1)判断要选择的主成分数目(这里不涉及因子分析)。

(2)选择主成分(这里不涉及旋转)。

(3)解释结果。

(4)计算主成分得分。

接下来就对我们处理好的数据进行主成分分析,对于3190个房屋,我们通过princomp()函数得到27个主成分,接下来对这些主成分进行筛选。

605dc5e98da4ebd3bdea91958c672f71.png

下图中proportion of variance是它本身对原本所有数据的方差的解释程度,你可以理解为,这个成分包含了原始数据中12.38995%的信息;图中的Loadings那个矩阵就是由相关系数矩阵的特征向量按列组成的,比如Comp.1就是y=0.103*host\_since -0.103*host\_total\_listings\_count-0.102*property\_type+0.226*room\_type-0.298*accommodates-0.343*bathrooms-0.428*bedrooms-0.434*beds-0.298*amenities-0.352*guests\_included-0.156*extra\_people。

9284f8ce2763704bcd852b0ce5fb0bc1.png4725ae8c7b3c72451742a6514d83e5c5.pngaa903fd75946f5b64c6cdfbc7e4bd9af.pnge03ae9dce1161cf2dbb366986b0a5e99.png

接下来根据碎石图确定主成分个数,一般选择折线中最陡的作为主成分:

cf1a5c909e028451daa4353b8cd6acf1.png

根据上图,我们可以看到在1.0以上的主成分较多,而且图中并没有显示完整所有的主成分,于是我们简单地将proportion of variance累计加总超过80%的作为我们需要的主成分,经过计算,我们保留comp.1-comp.17。

接下来我们利用predict()函数计算得到各个样本主成分的数据:

ef9f478a41f09e3bd4be1f5146e0e0d4.png

那么最终的指标,就应该是:

Comp.1 + b Comp.2 + c Comp.3的形式,a、b、c的系数根据方差解释度加权计算。每个主成分的方差解释度就是权重。于是最终得到的结果是:0.144685474*comp1+0.103517783*comp2+0.088334388*comp3+0.080439282*comp4+0.064441851*comp5+0.059679916*comp6+0.054120375*comp7+0.049404508*comp8+0.047919824*comp9+0.043365062*comp10+0.042361952*comp11+0.042054807*comp12+0.040463786*comp13+0.038121588*comp14+0.036172379*comp15+0.032646371*comp16+0.032270655comp17。

我们可以直接用comp1-comp17作为变量组合进行后续的回归等分析,也可以直接用上面的式子对房屋状况进行打分,分数越高,房子的评价也就越好,我们对前六所房子的打分如下:

7fd42bc0174d9f6f21c5e7b14f1136b4.png

3.2. 房东可信度

a.利用变量host\_verifications、host\_response\_rate和host\_is\_superhost三个变量绘制点图,host\_verifications作为x轴,host\_response\_rate作为y轴,点的不同颜色表示为host\_is\_superhost不同的值。

a9d8caab92494c6eb2b6ebf1b89b67b0.jpeg

从上图可以看出:房东的认证方式越多,平均反应速度越快,可信度越高,而且普遍来看,大房东的平均反应速度快于二房东的平均反应速度。

b.房东入驻airbnb年份统计:

以对host_since进行年份提取后的变量year作为x轴,统计不同年份入住的房东人数并进行对比,结果如下:

825e576218bf07bf211e3f1c3b74a42d.png

从上图可以看出:airbnb的房东入驻人数是在逐年上升的,这说明该平台在不断的壮大,发展前景和趋势很好。但是增加的幅度却在减小,市场竞争压力大,在一定意义上,提醒着airbnb企业关注房屋资源的饱和度问题。

3.3. 地理位置——地理位置对价格的影响程度:

以经度作为x轴,维度作为y轴绘制点图,在平面图中以点的形式表现房屋的位置信息,并通过“color=price”这一表达式,以点的颜色深浅表示price的变化情况,结果如下:

368b995024b78ecefc1c34d8b3f25ed4.png

从上图可以看出:房屋主要集中在中间地带,而且价格变化并不剧烈,一般都在250美元以下。

3.4. 房屋情况

a.针对不同房屋类型、房间类型的频数展示

以property\_type作为x轴,对3818个房屋的类型进行频数展示,再用不同的颜色表示不同的room\_type(房间类型)对每个房屋类型中的房间类型进行划分,结果如下:

596d2db5dd7306935098e74bdba0d4cc.png

从上图可以看出:apartment和house的房屋类型占比最大,而在不同的房屋类型中,房间类型的分布各不相同,但entire home/apt和private room的分布最为广泛。

b.房屋类型与价格的关系

以room\_type作为x轴,property\_type作为y轴,price作为color,展示房屋、房间的种类对房屋租赁价格的影响,结果如下:

192a12ec53ebebd95008b746a9bcd511.png

虽然价格的变化并不是很明显,但从上图仍可以看出不同的房间、房屋种类对房屋价格的影响程度。例如相对来说,entire home/apt的房间种类的价格偏高一些;Dorm这一房屋类型只包含shared room这一种房间类型,而且租赁价格很低。

c.最多最少居住时间和价格

以价格作为x轴,房屋的最多、最少居住天数之差作为y轴,绘制柱形图,探寻不同价格的房屋所允许的居住天数变化范围大小情况,结果如下:

61217f67153cb9bbcdfe333b36f2288e.png

从上图可以看出:价格越高的房屋允许居住天数的变化范围越小,价格越低的变化范围越大。这说明有些价格低的房屋可能是以居住时间的灵活性作为竞争优势来吸引用户,而价格高的房屋往往是由于自身的房屋条件和质量好,所以对居住时间的要求较严格。

d.房屋所含房间数量和设备数量:

以amenities(电视、空调等设备数量)作为x轴,acoommodates(房屋包含的房间数量)作为y轴,通过绘制点图探寻两者之间的关系,结果如下:

436b0d040e0f8fcf4a0ebccbb32f170a.png

从上图可以看出:amenities和acoommodates之间呈线性正相关的关系,房间的数量越多,房屋的设备越齐全,符合实际情况。

e.房屋价格的频数统计:

以price作为x轴,统计这3818个房屋的价格分布情况。结果如下:

9be2e5307b1860b0d19b1201f1b51c5e.png

从上图可以看出:price的分布确实以较小数值(低价格)为主,80%以上的房屋价格都在200美元以内。

3.5.评论情况

评论平均评分和价格的关系:

通过对reviews表中comment的打分,我们得出用户对listings中3818个房屋的平均评分情况——av。以av为x轴,price为y轴,绘制点图,探寻用户评分对于房屋价格的影响,结果如下:

b9f830a55e792bbaa555a302b28aff6f.png

从上图可以看出:用户评分对价格的影响并不大,影响更多的可能是用户对于同等价位房屋的选择,此外,在airbnb的网站上仍存在用户评分很高,但是价格并不高的物美价廉的房屋。

五、数据进一步处理

主要针对reviews和listings合并后的lr数据集做进一步的处理和填补,为建立最终的预测模型做准备。

1.转换

将分类属性转变为因子型

Lr的28个属性中,还包含一些分类属性,例如:host\_is\_superhost中含有t和f两类,利用factor将其转变为因子型,再通过as.numeric进行数值化转换,最终将分类属性量化成数字形式。由于这些分类属性中所含的类别较少,一般2~3类,故不需进行亚变量处理。此类变量有:is\_location\_exact、host\_identity\_verified、cancellation\_policy和host\_is_superhost。

2.填补

首先因为拿到手的数据集比较脏,里面不仅有明显的含有空值的数据,还有通过文本显示为空的数据,于是我们先将文本型的“NA”、“N/A”统一转化为NA。通过mice包中的md.pattern函数和aggr函数我们可以看到经过变量删除后的缺失值情况:

d8c7ae8fddbb67271bd9a6f296659602.png

可以看到缺失值大概占一个属性的15%左右,这是我们可以接受的;而且缺失值集中地分布在几个属性值中,我们可以推测这几个属性的数据是一起缺失的,具有较高的相关性,经过观察,我们发现这些一起缺失的属性都跟评论有关,或许是因为这些房子刚刚投入Airbnb使用,尚未有人居住过。于是我们先对其他属性中零星的缺失值(仅缺失1-2条的数据)进行简单的删除处理,经过此步还有3190条数据。

接下来通过corrplot包对缺失值之间的相关性进行一个分析,将lr中的数据根据是否缺失转化为0-1矩阵后,在这个矩阵中仅留下含缺失值的列,可视化结果如下:

ffbab0495e8e0216cc3de09ef5d500aa.png

通过图形,我们可以确切地看到所有关于reviews的数据缺失值的相关性已经高度接近1了,但如果采用对所有关于reviews的属性进行补缺,或许得到的完整的数据集可信度不高。经过讨论,我们决定将这些有关评论的属性进行直接删除,因为通过下文的文本挖掘处理,我们能直接得到关于评论的一个平均分数。于是在这一步仅对bedrooms,bathrooms,host\_response\_rate进行缺失值的插补。

对于bedrooms和bathrooms,因缺失值较少,我们仅进行均值插补处理,sub <- which(is.na(lr$bathrooms)),sub中存储了bathrooms中有缺失的行数,lr1存储了bathrooms无缺失值的整个数据集的子集,而lr2中存储了仅有缺失值的子集。

1939a33f1ced48470f0b446768011b68.png  通过avg_sales得到的均值,对lr2中的缺失值进行填补,再将lr1和lr2组合起来,得到补全后的数据集,对bedrooms的补缺同理。

而对于host\_response\_rate,因缺失值高达300余条,我们采用mice包中的函数进行多重插补处理。通过mice()函数利用平均值插补法生成了五个完整的数据集,提取其中的第三个作为我们的最终结果。

六.建模与分析过程

1.自相关分析

对最终数据集lr(listings和reviews连接后)中的28个属性绘制自相关图,结果如下:

ba49b08b080162dbcb19122732a37913.png

从上图可以看出,accommodates和amenities的相关性很大,number\_of\_reviews和reviews\_per\_month的相关性很大,所以在对price进行影响因素分析和预测时,可能存在自相关问题。


点击标题查阅往期内容

127127a7ad1cb8ee11e20d34fc2249c9.png

PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像

outside_default.png

左右滑动查看更多

outside_default.png

01

b832c3445a9a3c066a209e928af6dfa1.png

02

02bfbc9e179baef78668c21c98fcfadd.png

03

e80bb730756c5212bb035b1d8fe2d422.png

04

1f0f3a324c2ac60f6aec76c4e039d067.png

2.影响因素分析

采用线性回归的方式分析l中各变量对price的影响,并分别选取影响程度大的变量组成新的数据集l,用于对两者模型的建立和预测。

503eb79653f6bb0546bec554c1b5d35a.jpeg

aaba6bdc96f73dc0b942ae949de23a56.jpeg

对price影响大的变量有host\_is\_superhost、longitude、property\_type、room\_type、bathrooms、bedrooms、beds、guests\_included、reviews\_per_month这九个变量。整个线性回归模型的R^2为0.5622,调整后为0.5587,并不是很大。此外,在对price的影响自变量进行挑选过程中,剔除掉了自相关性很强的变量,正好解决了上述的自相关问题。

3.划分训练集和测试集

首先进行训练集和测试集的划分,以7:3的比例将数据集listings1分为训练集train和测试集test。

a5f8ee0bf8b58098fa4c4e6e3e203f7d.jpeg

4.建立模型

Price属于连续型数值变量,不能够像分类型变量一样简单地通过table这一操作才评估模型的好坏。因此,在评估price预测模型时,我们选择用R^2和MSE来评估,具体公式如下:

d48253d13deaba4e420fa17098deb6b1.png                  a7ca1a23ce6c4483484f25849bbc936c.png

(MSE)                                     (R^2)

4.1.回归分析

由于price是连续型变量,我们采用线性回归模型进行分析,通过lm()函数对测试集进行预测。

ee245364269da744e1e021d353e1252b.png

调整后的R^2=0,5534,说明线性回归模型的拟合效果一般。

4.2.lasso分析

Lasso回归又称为套索回归,是Robert Tibshirani于1996年提出的一种新的变量选择技术。Lasso是一种收缩估计方法,其基本思想是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而能够产生某些严格等于0的回归系数,进一步得到可以解释的模型。R语言中有多个包可以实现Lasso回归,这里使用lars包实现。

36bd03c173d2271cff44461e068dcfca.png

可以看到lasso回归得到的模型拟合度为0.553,较低。框中部分为自变量加入模型的顺序,下图为这个过程的可视化展示。从这个过程中我们发现很有意思的一点是卧室的数量,其次是床的数量对于房屋的价格有着较高的影响,但是房东本人的一些数据反而对房屋价格影响不大,也就是说一个房屋的价格还是更多收到房屋本身的影响,而不怎么受到房东个人品质等的影响,不过这个结果也是情理之中的。

609673d199bffa6b602e656642fd4333.png

4.3.随机森林

考虑采用随机森林模型对price这一连续型变量进行预测。

首先确定随机森林中包含的最优决策树数量——ntree:

4ed94d6cc50ae5bfbcfaf07ba1543f48.jpeg

f5736b08cafe3260c527393c45fbcfe4.jpeg

根据上图中的结果显示,在决策树的数量等于200时,曲线稍微出现波动,200过后,趋于平缓,所以选择200作为ntree的值。

建立模型并查看模型变量的重要性以及模型的R^2和MSE值

5cb6222c3926d57266adb0512aa30b28.jpeg

1bf16457a5b1fe42ceb80dcdea637db0.jpeg

8d1fb9f3dfe008595f8f7880e8c33cc3.jpeg

结果显示,随机森林模型的R^2为0.615,虽然相比线性回归模型,R^2更大一些,但拟合效果仍不是很好。随机森林在解决回归问题时,确实没有像分类时表现的那么好,可能因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。

Python分析Airbnb 数据:洞察市场差异、价格因素与旅行价值|附数据代码

接下来通过对 Airbnb 数据的深入分析,旨在探讨不同城市间 Airbnb 市场的差异、影响价格的主要因素、评价数据中的趋势和季节性,以及哪个城市提供更高的旅行价值。使用 Python 编程语言和相关数据分析库,对大量的 Airbnb 房源和评价数据进行处理和可视化,以得出有价值的结论。

随着共享经济的兴起,Airbnb 作为全球知名的短租平台,在旅游和住宿领域发挥着重要作用。了解不同城市的 Airbnb 市场特点、价格影响因素以及评价趋势,对于旅行者、房东和平台运营者都具有重要意义。本文将通过对 Airbnb 数据的详细分析,回答以下四个关键问题:

  1. 不同城市的 Airbnb 市场有哪些主要差异?

  2. 哪些属性对价格影响最大?

  3. 能否在评价数据中识别出趋势或季节性?

  4. 哪个城市提供更好的旅行价值?

数据来源与处理

(一)数据

数据涵盖了多个城市的 Airbnb 房源信息和用户评价。

(二)数据处理步骤
  1. 导入库:首先导入必要的 Python 库,包括 numpypandasdatetimematplotlib.pyplot 和 seaborn 等,用于数据处理、分析和可视化。

import numpy as npimport pandas as pdimport datetime as dtimport matplotlib.pyplot as pltimport seaborn as sns
  1. 加载数据集:使用 pandas 库读取房源列表和评价数据文件,设置适当的编码和内存参数,以确保数据能够正确加载。

# 加载房源数据集listings = pd.read\_csv("reviews/Airbnb Data/Listings.csv", encoding='latin', low\_memory=False)# 加载评价数据集reviews = pd.read_csv('/ngs-reviews/Airbnb Data/Reviews.csv')
  1. 数据类型转换和内存优化:检查房源数据的信息,确定数据类型和内存使用情况。将某些列的数据类型转换为分类数据类型,以减少内存占用。

# 查看房源数据信息listings.info()# 将特定列转换为分类数据类型cat\_cols = \['host\_is\_superhost', 'host\_has\_profile\_pic', 'host\_identity\_verified', 'neighbourhood', 'district', 'city', 'property\_type', 'room\_type', 'instant\_bookable'\]listings\[cat\_cols\] = listings\[cat_cols\].astype('category')# 再次查看房源数据信息listings.info()
  1. 检查重复值和空值:检查数据中是否存在重复行和空值。确保数据的完整性和准确性,以便进行后续分析。

# 检查重复行duplicates = listings\[listings.duplicated()\]# 检查特定列中的空值check\_nulls = \['listing\_id', 'name', 'host\_id', 'host\_since', 'host\_location','host\_response\_time', 'host\_response\_rate', 'host\_acceptance\_rate','host\_is\_superhost', 'host\_total\_listings\_count','host\_has\_profile\_pic', 'host\_identity\_verified', 'neighbourhood','district', 'city', 'latitude', 'longitude', 'property\_type','room\_type', 'accommodates', 'bedrooms', 'amenities', 'price','minimum\_nights', 'maximum\_nights', 'review\_scores\_rating','review\_scores\_accuracy', 'review\_scores\_cleanliness','review\_scores\_checkin', 'review\_scores\_communication','review\_scores\_location', 'review\_scores\_value', 'instant\_bookable'\]null\_data = listings\[listings\[check\_nulls\].isnull().all(axis = 1)\]
  1. 日期列处理:将房源数据中的 host_since 列转换为日期时间类型,并添加一个新的 year_month 列,用于后续的时间序列分析。

# 将 host\_since 列转换为日期时间类型listings\['host\_since'\] = pd.to\_datetime(listings\['host\_since'\])# 添加 year\_month 列listings\['year\_month'\] = listings\["host\_since"\].dt.to\_period('M')
  1. 数据合并:将房源数据和评价数据按照 listing_id 进行合并,以便进行综合分析。

# 合并房源和评价数据df  = listings.merge(reviews, how = 'inner', on = 'listing\_id')# 添加月份列df\['month'\] = pd.to\_datetime(df\['date'\]).dt.monthdf.info()

问题分析与结果

(一)不同城市的 Airbnb 市场差异
  1. 分析方法:通过对不同城市的房源按照是否可即时预订进行分组计数,并绘制柱状图,直观地展示不同城市之间的差异。

# 按城市分组统计即时预订房源数量并排序city\_instantbookable = listings.groupby('city')\['instant\_bookable'\].count().sort\_values(ascending=False)print(city\_instantbookable)# 绘制柱状图plt.figure(figsize=(15,8))city\_instantbookable.plot(kind='bar', color='#570eab')plt.title('Number of Listings per City by Instant Bookable')plt.xlabel('City')plt.ylabel('Number of Listings')plt.xticks(rotation=45, ha='right')for i, v in enumerate(city\_instantbookable):plt.text(i, v, str(v), ha='center', va='bottom')plt.show()
  1. 结果解读:巴黎的即时预订房源数量最多,达到 64690 个,而香港的即时预订房源数量最少,为 7087 个。这表明巴黎在 Airbnb 市场上的活跃度较高,而香港的市场相对较小。

ba347dcec95e8ab91cdf931f73e3c7b4.png

(二)影响价格的因素
  1. 分析方法:首先确定与价格相关的数值型列,创建新的数据框。然后计算这些列与价格列之间的相关性矩阵,并对矩阵进行排序,找出与价格相关性最高的属性。同时,绘制热力图,直观地展示各个属性与价格之间的相关性。

# 创建数值型列列表numerics = \['accommodates', 'bedrooms', 'minimum\_nights', 'maximum\_nights','review\_scores\_rating','review\_scores\_accuracy', 'review\_scores\_cleanliness', 'review\_scores\_checkin','review\_scores\_communication', 'review\_scores\_location', 'review\_scores\_value'\]# 创建新的数据框numeric\_df = listings\[numerics + \['price'\]\]# 计算相关性矩阵correlation\_matrix = numeric\_df.corr()# 按价格相关性排序price\_correlation = correlation\_matrix\['price'\].sort\_values(ascending=False)print(price\_correlation)# 绘制热力图plt.figure(figsize=(10,8))sns.heatmap(correlation\_matrix, annot=True, cmap='coolwarm', fmt='.2f')plt.title('Attributes Correlation with Price')plt.show()
  1. 结果解读:从相关性矩阵可以看出,评价分数中的清洁度、可容纳人数和卧室数量与价格的相关性较高。这表明这些因素对 Airbnb 房源的价格有较大的影响。

d31d3e1ac87a000d18dc14930aeb424f.png

(三)评价数据中的趋势和季节性
  1. 分析方法:首先统计每个月加入 Airbnb 的房东数量,绘制时间序列图,观察房东加入的趋势。然后统计每天的预订数量,并按月份绘制预订数量的折线图,分析预订的季节性。

# 统计每个月加入的房东数量hosts\_per\_month = df\['year\_month'\].value\_counts().sort\_index()# 绘制房东加入趋势图plt.figure(figsize=(10,6))hosts\_per\_month.plot(kind='line', marker='.', color='#051399')plt.title('Number of Hosts Joined Airbnb Overtime')plt.xlabel('Year-Month')plt.ylabel('Number of Hosts Joined')plt.xticks(rotation=45)plt.grid(True)plt.show()# 统计每天的预订数量datewise\_bookings = df\['date'\].value\_counts().sort\_values(ascending=False)# 按月份绘制预订数量折线图df.groupby('month').agg('month').count().to_frame().plot(kind='line', figsize=(15,8), linewidth=2, marker='o', color='#e69305')plt.title('Montly Trend of Airbnb Bookings')plt.xlabel('Months')plt.ylabel('No: of Bookings')plt.xticks(range(1,13))plt.show()
  1. 结果解读:从房东加入趋势图可以看出,2015 年和 2017 年有大量房东加入 Airbnb,但在 2017 年出现了下降趋势。从预订数量折线图可以看出,9 月和 10 月的预订数量较多。

69a5d33f0a9d60a4514ca5da0c1276b3.png

598e19c3c0af762b14015e2f3f724e0b.png

(四)哪个城市提供更好的旅行价值
  1. 分析方法:计算每个城市的平均住宿价格,绘制柱状图,比较不同城市的价格水平。

# 计算每个城市的平均价格avg\_price\_city = listings.groupby('city')\['price'\].mean().sort\_values()print(avg\_price\_city)# 绘制平均价格柱状图plt.figure(figsize=(15,8))plt.bar(avg\_price\_city.index, avg\_price_city.values)plt.title('Average Accomodation Price of Airbnb in Each City')plt.ylabel('Average Price of Accomodation')plt.xlabel('City')plt.show()
  1. 结果解读:开普敦的平均住宿价格最高,而罗马的平均住宿价格最低。因此,罗马提供了更好的旅行价值。

e1149615831461932824eb9bce4e06f0.png

评价分数分布与超级房东状态分析:

首先,从listings_table表中选择与评价分数相关的列和房东是否为超级房东的列,创建Q3_df数据框。

然后,使用plotly.graph_objectsmatplotlib.pyplot库分别创建子图和直方图,展示不同超级房东状态下各评价分数的百分比分布。

review\_scores\_columns = \[i for i in listings\_df.columns if 'review\_score' in i\]print(review\_scores\_columns)Q3\_df = duckdb.sql('''SELECThost\_is\_superhost,review\_scores\_rating as review\_scores\_rating,review\_scores\_accuracy,review\_scores\_cleanliness,review\_scores\_checkin,review\_scores\_communication,review\_scores\_location,review\_scores\_valueFROMlistings\_table''').to\_df()# 使用 plotly 创建子图fig = make\_subplots(rows=len(review\_scores\_columns),cols=2,subplot\_titles=('False', 'True'),vertical\_spacing=0.05)# 使用 matplotlib 创建直方图fig, axes = plt.subplots(nrows=len(review\_scores\_columns), ncols=2, figsize=(10, 20))

0226d2f63ae7ef98badf3aafa8160f6d.png

香港地区房源分析

通过查询listings_table表,筛选出城市为香港(Hong Kong)的房源数据,创建hong_kong_listings_df数据框。

使用geopandas库将数据转换为地理数据框,并绘制香港地区的房源分布地图,同时添加底图。

使用folium库创建香港地区的交互式地图,展示房源位置。

duckdb.sql('''SELECT\*FROMlistings\_tableWHERElower(city) like '%hong%'limit 2''').to\_df()hong\_kong\_listings\_df = duckdb.sql('''SELECT\*FROMlistings\_tableWHEREcity = 'Hong Kong'''').to\_df()# 转换为地理数据框并绘制地图gdf = gpd.GeoDataFrame(hong\_kong\_listings\_df, geometry=gpd.points\_from\_xy(hong\_kong\_listings\_df.longitude, hong\_kong\_listings\_df.latitude))gdf.crs = "EPSG:4326"fig, ax = plt.subplots(figsize=(10, 10))gdf.plot(ax=ax, color='blue', marker='o', markersize=10)try:ctx.add\_basemap(ax, crs=gdf.crs.to\_string(), source=ctx.providers.Stamen.Terrain)except AttributeError:ctx.add\_basemap(ax, crs=gdf.crs.to\_string(), source=ctx.providers.OpenStreetMap.Mapnik)ax.set\_xlim(113.8, 114.4)ax.set\_ylim(22.15, 22.6)ax.set\_title("Points over Hong Kong Map")ax.axis('off')plt.show()# 创建交互式地图map\_hk = folium.Map(location=\[22.3193, 114.1694\],zoom\_start=12,tiles='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',attr='Map data © OpenStreetData contributors')for \_, row in hong\_kong\_listings\_df.iterrows():folium.CircleMarker(location=\[row\['latitude'\], row\['longitude'\]\],radius=5,color='blue',fill=True,fill\_color='blue',fill\_opacity=0.7,).add\_to(map\_hk)map\_hk.save('HongKongMap.html')map_hk

f793e003e2376bc5ce40d732a0f8bdba.png

房源价格预测模型研究|附数据代码

随着共享经济的快速发展,Airbnb 作为全球知名的短租平台,其房源价格的合理预测对于房东制定价格策略、租客选择合适房源以及平台的运营管理都具有重要意义。通过对 Airbnb 房源数据的深入分析,构建不同的回归模型,以提高对房源价格预测的准确性。

数据来源与预处理

  1. 数据来源:数据来源于../data/listings_cleaned.csv文件,以房源的唯一标识id作为索引列。

  2. 数据预处理:

  • 删除列:确定要删除的列,如security_depositavailability_365maximum_minimum_nightsminimum_maximum_nights等,通过以下代码实现删除操作:

to\_drop = \['security\_deposit','availability\_365','maximum\_minimum\_nights','minimum\_maximum\_nights'\]data = data.drop(to\_drop,axis=1)
  • 数据标准化:使用StandardScaler对数据进行标准化处理,使不同特征具有相同的尺度。例如:

scaler = StandardScaler()X\_scaled = scaler.fit\_transform(X)y\_scaled = scaler.fit\_transform(y.values.reshape(-1,1))
  • 数据集划分:将数据划分为训练集和测试集,使用train_test_split函数,设置随机种子为 0,测试集比例为 0.25。代码如下:

X\_train, X\_test, y\_train, y\_test = train\_test\_split(X\_scaled,y\_scaled, random\_state=0,test\_size = 0.25)

回归模型构建与评估

线性回归:

使用LinearRegression构建线性回归模型,并在训练集上进行训练,然后在训练集和测试集上分别进行预测。通过计算r2_score评估模型性能。代码如下:

linreg = LinearRegression()linreg.fit(X\_scaled,y\_scaled)y\_train\_pred = linreg.predict(X\_train)y\_test\_pred = linreg.predict(X\_test)print("\\nTraining r2:", round(r2\_score(y\_train, y\_train\_pred),4))print("Validation r2:", round(r2\_score(y\_test, y\_test\_pred),4))
  • 结果显示,训练集和验证集的r2值分别为一定数值,表明线性回归模型在一定程度上能够解释房源价格的变化。

Lasso 回归:

通过LassoCV进行 Lasso 回归,设置不同的alpha值范围进行交叉验证,找到最佳的alpha值。

alphas = 10**np.linspace(-2,4,200)lasso = LassoCV(alphas=alphas,cv=10).fit(X\_train,y\_train.ravel())print("Score without interactions: {:.4f}".format(lasso.score(X\_test, y\_test)))print('Best alpha value: {:.3f}'.format(lasso.alpha_))
  • 还绘制了 LASSO 路径图,展示系数随正则化程度的变化。

alphas, _, coefs = lars\_path(X\_train, y_train.ravel(), method='lasso')xx = np.sum(np.abs(coefs.T), axis=1)xx /= xx\[-1\]plt.figure(figsize=(12,8))plt.plot(xx, coefs.T)ymin, ymax = plt.ylim()plt.vlines(xx, ymin, ymax, linestyle='dashed')plt.xlabel('|coef| / max|coef|')plt.ylabel('Coefficients')plt.title('LASSO Path')plt.axis('tight')plt.legend(X.columns,loc = 'best')plt.show()
  • 结果表明 Lasso 回归在一定程度上能够进行特征选择,提高模型的解释性。

08db88435cd1f2f553ecd30902c46ac9.png

fd05f3dd0c01a35d0aeaeadd572b4bdf.png

带有多项式特征的回归:
  • 分别构建带有多项式特征的 Lasso 回归和 Ridge 回归模型。首先使用PolynomialFeatures生成多项式特征,然后分别使用LassoCVRidgeCV进行回归。

fd2d58d0fc5746d440b8fee8e3763f9e.png

0a9b67830d48bf140e520b8bb61dad1d.png

Ridge 回归:

使用RidgeCV进行 Ridge 回归,设置不同的alpha值范围进行交叉验证。代码如下:

ridge = RidgeCV(normalize=False,alphas=alphas,cv=10).fit(X\_train, y\_train)print("R^2 Score: {:.4f}".format(ridge.score(X\_test, y\_test)))print('Best alpha value: {:.3f}'.format(ridge.alpha_))
  • 结果显示 Ridge 回归也能够在一定程度上提高模型的性能。

带有多项式特征的回归:

分别构建带有多项式特征的 Lasso 回归和 Ridge 回归模型。首先使用PolynomialFeatures生成多项式特征,然后分别使用LassoCVRidgeCV进行回归。代码如下:

poly = PolynomialFeatures(degree=2).fit(X\_train)X\_train\_poly = poly.transform(X\_train)X\_test\_poly = poly.transform(X\_test)alphas = 10\*\*np.linspace(-2,2,100)lasso = LassoCV(alphas=alphas,cv=5,tol=0.5).fit(X\_train\_poly, y\_train.ravel())y\_train\_pred = lasso.predict(X\_train\_poly)y\_test\_pred = lasso.predict(X\_test\_poly)print("Lasso Regression with Polynomial Features")print("\\nTraining r2:", round(r2\_score(y\_train, y\_train\_pred),4))print("Validation r2:", round(r2\_score(y\_test, y\_test\_pred),4))poly = PolynomialFeatures(degree=2).fit(X\_train)X\_train\_poly = poly.transform(X\_train)X\_test\_poly = poly.transform(X\_test)alphas = 10\*\*np.linspace(-2,2,100)ridge = RidgeCV(normalize=True,alphas=alphas,cv=5,).fit(X\_train\_poly, y\_train.ravel())y\_train\_pred = ridge.predict(X\_train\_poly)y\_test\_pred = ridge.predict(X\_test\_poly)print("Ridge Regression with Polynomial Features")print("\\nTraining r2:", round(r2\_score(y\_train, y\_train\_pred),4))print("Validation r2:", round(r2\_score(y\_test, y\_test\_pred),4))

带有多项式特征的回归模型在一定程度上可以提高模型的拟合能力,但也可能存在过拟合的风险。

XGBoost:

使用xgb.XGBRegressor构建 XGBoost 回归模型,设置目标函数为reg:squarederror,学习率、最大深度等参数。代码如下:

xg\_reg = xgb.XGBRegressor(objective ='reg:squarederror', learning\_rate = 0.15, max\_depth = 4, booster='gbtree')xg\_reg.fit(X\_train,y\_train)y\_train\_pred = xg\_reg.predict(X\_train)y\_test\_pred = xg\_reg.predict(X\_test)print("XGBoost")print("\\nTraining r2:", round(r2\_score(y\_train, y\_train\_pred),4))print("Validation r2:", round(r2\_score(y\_test, y\_test\_pred),4))fig, ax = plt.subplots(figsize=(14, 8))plot\_importance(xg\_reg, ax=ax)

XGBoost 模型在训练集和测试集上的表现相对较好,通过绘制特征重要性图,可以了解各个特征对房源价格的影响程度。

19e5d6cc297f6d26096d1fd499d77fb1.png

结论

通过对 Airbnb 房源和评价数据的分析,我们得出以下结论:

  1. 巴黎和纽约的 Airbnb 预订数量最多,香港的预订数量最少。

  2. Airbnb 的价格受到评价分数、清洁度、可容纳人数和卧室数量等因素的影响。

  3. 2015 年至 2017 年期间,加入 Airbnb 的房东数量大幅增加,但在 2017 年出现了下降趋势。9 月和 10 月是 Airbnb 预订的高峰期。

  4. 罗马提供了更好的旅行价值,因为其平均住宿价格相对较低,而开普敦的平均住宿价格最高。

  5. 洗衣机、空调和洗发水是最热门的房源设施。

  6. 不同城市的房东位置信息中包含城市名称的比例有所不同,纽约、巴黎等城市的比例较高。

  7. 超级房东在评价分数方面表现相对较好,不同超级房东状态下的评价分数分布存在差异。

  8. 超级房东的即时预订比例相对较高。

  9. 香港地区的房源分布可以通过地理数据框和交互式地图进行直观展示。

通过对多种回归模型的构建和评估,我们可以得出以下结论:

  1. 线性回归、Lasso 回归、Ridge 回归等传统线性模型在一定程度上能够解释 Airbnb 房源价格的变化,但性能相对有限。

  2. 带有多项式特征的回归模型可以提高模型的拟合能力,但需要注意过拟合的风险。

  3. XGBoost 模型在训练集和测试集上的表现相对较好,具有较高的预测准确性和泛化能力。

分析师

在此对Kefan Yu对本文所作的贡献表示诚挚感谢,她在上海财经大学完成了信息管理与信息系统专业的学位,专注于数据采集、数据清洗和深度学习领域。擅长 R 语言、Python。

数据获取

在公众号后台回复“airbnb数”,可免费获取完整数据。

cf20805625d6aeb992783e4c3f645e8f.jpeg

本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 

9f11f680499b3b5714f47987cdd521a7.png


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

8617a3e0681e148b54ac5c4bc99f4484.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《Python、R语言Lasso、Ridge岭回归、XGBoost分析Airbnb房屋数据:旅游市场差异、价格预测|数据分享》。

点击标题查阅往期内容

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化

R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化

R语言基于树的方法:决策树,随机森林,Bagging,增强树

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

spss modeler用决策树神经网络预测ST的股票

R语言中使用线性模型、回归决策树自动组合特征因子水平

R语言中自编基尼系数的CART回归决策树的实现

R语言用rle,svm和rpart决策树进行时间序列预测

python在Scikit-learn中用决策树和随机森林预测NBA获胜者

python中使用scikit-learn和pandas决策树进行iris鸢尾花数据分类建模和交叉验证

R语言里的非线性模型:多项式回归、局部样条、平滑样条、 广义相加模型GAM分析

R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类

R语言ISLR工资数据进行多项式回归和样条回归分析

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型

R语言用泊松Poisson回归、GAM样条曲线模型预测骑自行车者的数量

R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测

R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化

如何用R语言在机器学习中建立集成模型?

R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测

在python 深度学习Keras中计算神经网络集成模型

R语言ARIMA集成模型预测时间序列分析

R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者

R语言基于树的方法:决策树,随机森林,Bagging,增强树

R语言基于Bootstrap的线性回归预测置信区间估计方法

R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间

R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析

R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化

Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

matlab使用分位数随机森林(QRF)回归树检测异常值

9451a3191efd840f68dd5a7b0a030c4c.jpeg

2e4d1c112fb18a3c88898b52c68895c7.png

4acf1621049415d224b622ea5a9f07ba.png

ad3c14af4e9f24f1af4bc01134639892.jpeg

28684820c39d9bbf4c067744c213f38a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/444971.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业远控私有化部署解决方案-内信互联

内信互联&#xff08;DoLink&#xff09;&#xff0c;是点量软件新推出的企业私有化远程控制系统解决方案。很多朋友对这个产品还不是很了解&#xff0c;今天点量小编就对其基础功能做一些详细说明&#xff0c;如果您想快速拥有自己的企业私有远程控制系统&#xff0c;欢迎联系…

基于SpringBoot+Vue+MySQL的企业招聘管理系统

系统展示 用户前台界面 管理员后台界面 企业后台界面 系统背景 在当今数字化转型的大潮中&#xff0c;企业对于高效、智能化的人力资源管理系统的需求日益增长。招聘作为人力资源管理的首要环节&#xff0c;其效率与效果直接影响到企业的人才储备与竞争力。传统的招聘方式不仅耗…

摩托车一键启动兼容机械钥匙点火

摩托车无钥匙一键启动 工作原理 摩托车无钥匙一键启动系统的工作原理主要依赖于RFID无线射频技术和车辆身份编码识别系统。这种技术能够通过小型化、小功率的射频天线来识别车辆的身份&#xff0c;并与遥控系统结合&#xff0c;实现双重射频系统和双重防盗保护。这意味着&…

《深度学习》【项目】OpenCV 答题卡识别 项目流程详解

目录 一、项目上半部分 1、定义展示图像函数 2、预处理 运行结果&#xff1a; 3、轮廓检测并绘制 运行结果&#xff1a; 4、排序轮廓 5、定义排序点函数 6、透视变换 1&#xff09;定义透视变换处理函数 2&#xff09;执行透视变换 运行结果&#xff1a; 7、二值化…

信息安全工程师(28)机房安全分析与防护

前言 机房安全分析与防护是一个复杂而细致的过程&#xff0c;涉及到物理安全、环境控制、电力供应、数据安全、设备管理、人员管理以及紧急预案等多个方面。 一、机房安全分析 1. 物理安全威胁 非法入侵&#xff1a;未经授权的人员可能通过门窗、通风口等进入机房&#xff0c;…

解决无法安装“vue.volar“扩展,跟vscode版本不兼容问题

问题&#xff1a;安装volar插件的时候提示跟vscode版本不兼容 解决方案 1、进入VSCode插件市场&#xff0c;搜索Vue.volar&#xff08;直达链接&#xff1a;volar下载界面&#xff09; 2、点击download Extension&#xff08;下载插件&#xff09; 3、下载.vsix文件完成后&a…

基于Opencv中的DNN模块实现图像/视频的风格迁移

一、DNN模块的介绍 1、简介 OpenCV中的DNN&#xff08;Deep Neural Network&#xff09;模块是一个功能强大的组件&#xff0c;它支持深度学习网络模型的加载和推理。虽然DNN模块不提供模型的训练功能&#xff0c;但它可以与主流的深度学习框架&#xff08;如TensorFlow、Caf…

Rope – 基于深度学习模型开源的AI换脸技术

Rope是什么 Rope是一款开源的AI换脸工具&#xff0c;基于insightface的inswapper_128模型构建&#xff0c;提供一个用户友好的图形界面。用户通过上传图片或视频&#xff0c;在几秒钟内完成换脸操作&#xff0c;效果逼真。Rope支持多种超分辨率算法&#xff0c;支持用户调整面…

深入探讨B+树索引的基本概念、工作原理以及在MySQL中的应用

文章目录 1. B树的基本概念2. B树在MySQL中的实现3. 示例代码4. 结论 在数据库管理系统中&#xff0c;索引是一种特殊的文件&#xff0c;它能够提高数据检索的速度。MySQL作为最流行的开源关系型数据库之一&#xff0c;提供了多种索引类型来满足不同的性能需求。其中&#xff0…

ARP断网攻击

ARP断网攻击 1.课前准备 kali 作为ARP攻击机&#xff0c;192.168.110.26 MAC地址&#xff1a;00:0c:29:fc:66:46 win10 作为被攻击方&#xff0c;192.168.110.12 MAC地址&#xff1a;1c:69:7a:a4:cf:92 网关&#xff08;路由器&#xff09;&#xff0c;192.168.110.1 MAC地…

[单master节点k8s部署]34.ingress 反向代理(一)

ingress是k8s中的标准API资源&#xff0c;作用是定义外部流量如何进入集群&#xff0c;并根据核心路由规则将流量转发到集群内的服务。 ingress和Istio工作栈中的virtual service都是基于service之上&#xff0c;更细致准确的一种流量规则。每一个pod对应的service是四层代理&…

ESP32接入扣子(Coze) API使用自定义智能体

使用ESP32接入Coze API实现聊天机器人的教程 本示例将使用ESP32开发板通过WiFi接入 Coze API&#xff0c;实现一个简单的聊天机器人功能。用户可以通过串口向机器人输入问题&#xff0c;ESP32将通过Coze API与智能体进行通信&#xff0c;并返回对应的回复。本文将详细介绍了如…

PyCharm打开及配置现有工程(详细图解)

本文详细介绍了如何利用Pycharm打开一个现有的工程&#xff0c;其中包括编译器的配置。 PyCharm打开及配置现有工程 1、打开工程2、配置编译器 1、打开工程 双击PyCharm软件&#xff0c;点击左上角 文件 >> 打开(O)… 选中想要打开的项目之后点击“确定” 2、配置编译器…

[Algorithm][贪心][可被三整除的最大和][距离相等的条形码][重构字符串]详细讲解

目录 1.可被三整除的最大和1.题目链接2.算法原理详解3.代码实现 2.距离相等的条形码1.题目链接2.算法原理详解3.代码实现 3.重构字符串1.题目链接2.算法原理详解3.代码实现 1.可被三整除的最大和 1.题目链接 可被三整除的最大和 2.算法原理详解 思路&#xff1a;正难则反 贪…

326. 3 的幂

文章目录 326. 3 的幂解题思路Go代码 326. 3 的幂 326. 3 的幂 给定一个整数&#xff0c;写一个函数来判断它是否是 3 的幂次方。如果是&#xff0c;返回true&#xff1b;否则&#xff0c;返回 false 。 整数 n 是 3 的幂次方需满足&#xff1a;存在整数 x 使得 n 3 x n …

Android设置状态栏隐藏、固定颜色

设置隐藏效果&#xff1a; <?xml version"1.0" encoding"utf-8"?> <resources><style name"Theme.XiaoShuang" parent"Theme.AppCompat.Light.NoActionBar"><!--设置沉浸式通知栏--><item name"an…

Nullinux:一款针对Linux操作系统的安全检测工具

关于Nullinux Nullinux是一款针对Linux操作系统的安全检测工具&#xff0c;广大研究人员可以利用该工具针对Linux目标设备执行网络侦查和安全检测。 该工具可以通过SMB枚举目标设备的安全状况信息&#xff0c;其中包括操作系统信息、域信息、共享信息、目录信息和用户信息。如…

292. Nim 游戏

文章目录 292. Nim 游戏解题思路Go代码 292. Nim 游戏 292. Nim 游戏 你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a; 桌子上有一堆石头。你们轮流进行自己的回合&#xff0c; 你作为先手 。每一回合&#xff0c;轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的…

Elasticsearch的安装与配置

注意&#xff1a;elasticsearch 禁止安装在/root路径下&#xff01; 1、创建用户组 groupadd elastic 2、创建用户 useradd es -d /home/es -g elastic echo es | passwd es --stdin 3、给新创建的用户进行授权 chown -R es:elastic /home/es chmod -R 775 /home/es 4…

『网络游戏』游戏数据库管理类查询插入账号存储【23】

新建数据库连接 新建数据库 打开数据库 新建表 账号数据 设计表 - 添加属性 对照服务器工程GameMsg增加对应字段 保存后在服务器脚本中操作数据库数据 添加数据层文件夹 创建脚本&#xff1a;DBMgr 编写脚本&#xff1a;DBMgr.cs 修改脚本&#xff1a;ServerRoot.cs 将MySql.d…