博客
关于我
(干货)数据分析案例--以上海二手房为例
阅读量:791 次
发布时间:2023-01-25

本文共 2895 字,大约阅读时间需要 9 分钟。

沪东二手房数据分析:从无数据开始玩转数据

在数据分析领域,数据通常是分析的核心。而当手头没有数据时,如何在没有数据的情况下开展分析,成为一个颇具挑战性的课题。本文将以上海二手房数据为例,详细讲解在没有数据支持下,如何通过数据抓取、数据清洗、数据建模等技术手段,从零开始完成数据分析工作。


一、数据源的获取

在没有数据的背景下,首先需要找到可靠的数据来源。对于上海二手房数据而言,互联网平台是最直接的数据源。我们可以借助爬虫技术从如链家、房东家等平台抓取相关数据。以下是一些爬虫代码示例:

import requests
from bs4 import BeautifulSoup
url = 'https://bj.5i5i.com/chengshiwu/1014/'
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
houses = []
for house in soup.find_all('div', class_='info2'):
house_info = []
for span in house.find_all('span', class_='propPrice'):
house_info.append(span.text.strip())
price = float(house_info[0])
area = float(house_info[1].strip('平方米'))
floors = int(house_info[2].strip('层'"))
houses.append({
'价格': price,
'面积': area,
'层数': floors
})

通过如上代码,我们可以抓取到部分上海二手房的标价、面积和层数等信息。接下来,我们将这些数据清洗和整理,作为后续分析的基础数据。


二、数据探索与清洗

在实际应用中,抓取到的数据必定会存在缺失值、异常值等问题。因此,对数据进行清洗和探索是必不可少的步骤。

1. 户型分布

通过对户型数据的统计分析,我们可以发现上海二手房市场中,1室1厅和2室2厅的户型占据了较大的比重。为了便于后续建模,我们可以对户型进行分类,将低于1000套的户型归类为“其他”。

library(ggplot2)
type_freq <- data.frame(table(housestype))
type_p <- ggplot(data = type_freq, mapping = aes(x = reorder(Var1, -Freq), y = Freq)) +
geom_bar(stat = 'identity', fill = 'steelblue') +
theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) +
xlab('户型') + ylab('套数')
type_p

2. 面积和房价的分布

面积和房价的分布往往偏离正态分布,这对后续的回归建模有较大挑战。以下是对房价的正态性检验结果:

norm.test(house$价格.W.)

检查表明,房价不满足正态分布,因此我们需要采用非参数检验方法或转换方法来处理数据。

3. 楼层分布

楼层是离散变量,但在建模中通常需要将其转换为哑变量。以下是对楼层的分类和分布分析:

floor <- substring(house$楼层, 1,2)
percent <- paste(round(prop.table(table(floor))*100, 2), '%', sep = '')
df <- data.frame(table(floor))
df <- cbind(df, percent)
df

此外,我们还需要对建筑时间进行处理。建筑时间的缺失值往往比较多,我们可以采用众数替补法来处理缺失值。

4. 区域均价

通过对各区域的房价均价进行分析,我们可以发现上海二手房价格在不同区域之间差异较大。以下是一些代码示例:

avg_price <- aggregate(house$单价.平方米., by = list(house$区域), mean)
p <- ggplot(data = avg_price, mapping = aes(x = reorder(Group.1, -x), y = x, group = 1)) +
geom_area(fill = 'lightgreen') +
geom_line(color = 'steelblue', size = 2) +
geom_point() +
xlab('') + ylab('均价')
p

三、模型构建

在数据清洗完成后,我们需要对数据进行建模。由于房价是连续变量,而户型、楼层等是离散变量,因此需要对离散变量进行哑变量处理。

1. 数据预处理

将离散变量转换为因子:

final_house$cluster <- factor(clust$cluster)
final_house$floow <- factor(final_house$floow)
final_house$type.new <- factor(final_house$type.new)

2. 线性回归建模

选择需要建模的数据:

factors <- names(final_house)[sapply(final_house, class) == 'factor']
formula <- as.formula(paste('~', paste(factors, collapse = '+')))
dummy <- dummyVars(formula = formula, data = final_house)
pred <- predict(dummy, newdata = final_house)
head(pred)

3. 模型诊断

通过模型诊断,我们可以检查残差项是否符合正态分布,检查自变量是否满足齐次性和多重共线性假设:

library(car)
toast(powerTransform(fit1))
plot(fit2)

四、模型评估

通过模型诊断和统计指标,我们可以评估建模的效果。例如,R²值表示模型对因变量的解释能力。通过COX-BOX变换和对数变换,我们可以提升模型的稳定性和准确性。


通过上述流程,我们可以从无数据开始完成上海二手房的价格分析,从而为房地产投资提供参考。数据分析是一个持续学习和实践的过程,每天进步一点点,才能在数据分析领域走得更远。关注小号,获取更多实用内容!

转载地址:http://szryk.baihongyu.com/

你可能感兴趣的文章
JAVA- 清除数组重复元素
查看>>
Java---多线程之死锁
查看>>
Java---多线程(工作内存)和内存模型(主内存)分析
查看>>
Java---设计模式app小软件汇总应用
查看>>
java.lang.VerifyError: Stack map does not match the one at exception
查看>>
java--Serializable理解与总结
查看>>
java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present---springcloud工作笔记166
查看>>
Java-JUC(五):闭锁(CountDownLatch)
查看>>
Java-JVM 类的初始化
查看>>
Java-rmi-registry反序列化漏洞复现
查看>>
java-se题目
查看>>
Java-slf4j:sfl4j
查看>>
JAVA-Socket通信笔记
查看>>
JAVA-【1】配置
查看>>
java-信息安全(九)-基于DH,非对称加密,对称加密等理解HTTPS
查看>>
Java-压缩还能这么优化~喜大普奔
查看>>
java-图形用户界面(GUI)之AWT编程-整体思路与代码架构
查看>>
java-如何给表格添加分页
查看>>
Java-环境搭建(Mac版)
查看>>
Java-笔记12
查看>>