
本文共 2895 字,大约阅读时间需要 9 分钟。
沪东二手房数据分析:从无数据开始玩转数据
在数据分析领域,数据通常是分析的核心。而当手头没有数据时,如何在没有数据的情况下开展分析,成为一个颇具挑战性的课题。本文将以上海二手房数据为例,详细讲解在没有数据支持下,如何通过数据抓取、数据清洗、数据建模等技术手段,从零开始完成数据分析工作。
一、数据源的获取
在没有数据的背景下,首先需要找到可靠的数据来源。对于上海二手房数据而言,互联网平台是最直接的数据源。我们可以借助爬虫技术从如链家、房东家等平台抓取相关数据。以下是一些爬虫代码示例:
import requestsfrom bs4 import BeautifulSoupurl = 'https://bj.5i5i.com/chengshiwu/1014/'response = requests.get(url)html = response.textsoup = 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变换和对数变换,我们可以提升模型的稳定性和准确性。
通过上述流程,我们可以从无数据开始完成上海二手房的价格分析,从而为房地产投资提供参考。数据分析是一个持续学习和实践的过程,每天进步一点点,才能在数据分析领域走得更远。关注小号,获取更多实用内容!
发表评论
最新留言
关于作者
