R语言如何匹配字符串新增标识列,生成回归分析用虚拟变量
R语言房产特征文本清洗与虚拟变量生成方案
针对63000行房产网站爬取数据集的特征列处理需求,适配特征价格法(Hedonic Pricing Method)研究要求,全流程实现文本解析、特征归一、归类合并、虚拟变量生成,代码可直接复用运行。
第一步:原始文本预处理
原始特征列存在JSON转义符、爬取乱码、混合存储格式(既有数组拆分的独立特征,也有逗号拼接在同一字符串内的多特征)问题,先做统一清洗:
- 全量文本转小写,消弭大小写差异
- 修复爬取产生的编码乱码,去除无效特殊符号
- 统一做词形还原,合并单复数、不同时态的同根词
- 拆分所有嵌套、拼接的特征,展平为单个特征条目
# 加载所需依赖包 library(tidyverse) library(jsonlite) library(textstem) clean_df <- raw_df %>% mutate( # 去除特征字符串首尾的括号,解析JSON格式数组 feature_list = map(feature_col, ~fromJSON(gsub("^\\(|\\)$", "", .x))), feature_flat = map(feature_list, function(feat_vec){ feat_vec %>% tolower() %>% # 修复爬取乱码(如â\200\231类编码错误的引号) gsub("â\200\231|â\u0080\u0099", "'", .) %>% # 拆分逗号拼接的多特征条目 str_split(",\\s*") %>% unlist() %>% # 去除前后空格、无效特殊字符 str_trim() %>% gsub("[^a-z0-9\\s/-]", "", .) %>% # 词形还原,统一单复数、时态差异 lemmatize_strings() %>% # 过滤空值 discard(~.x == "") }) )
第二步:特征归类规则配置
通过自定义归类字典实现同类别特征合并,字典键为最终生成的虚拟变量列名,值为该类别下需要匹配的特征关键词。可根据研究需求持续补全规则,实现全量特征覆盖:
# 房产特征归类字典示例,可按需扩展 feature_dict <- list( seaside_location = c("seaside location", "sea view", "coastal location"), security_system = c("emergency call", "video entry", "intruder alarm", "fire detection", "secure entry"), garden_terrace = c("garden", "landscaped garden", "terrace", "outdoor seating"), balcony = c("balcony", "walk out balcony"), parking = c("parking", "car port", "resident parking", "parking space", "on street parking"), wheelchair_access = c("wheelchair access", "disabled access"), lift = c("lift to floor", "elevator"), rural_village_location = c("village location", "rural", "secluded"), bedroom_count = c("bedroom"), central_heating = c("central heating"), double_glazing = c("double glazing"), fireplace = c("fireplace"), shared_lounge = c("lounge", "common room") )
快速补全覆盖特征的技巧:先对所有清洗后的展平特征做词频统计,把高频特征全部纳入归类字典即可,统计代码为
table(unlist(clean_df$feature_flat)) %>% sort(decreasing = T)
第三步:批量生成0/1虚拟变量
遍历归类字典,逐行匹配房源特征,生成取值为0/1的虚拟变量:1代表房源包含对应类别的特征,0代表不包含,生成结果可直接输入回归模型使用。
# 批量生成虚拟变量 for (feat_name in names(feature_dict)) { match_pattern <- paste(feature_dict[[feat_name]], collapse = "|") clean_df[[feat_name]] <- map_dbl( clean_df$feature_flat, ~as.numeric(any(str_detect(.x, match_pattern))) ) }
方案适配说明
- 词形差异兼容:全小写转换+词形还原步骤自动处理
parking/Parking/parkings这类同特征不同写法的问题,不会出现同特征拆分多列的错误 - 混合格式兼容:同时支持数组独立存储、逗号拼接存储的两类特征格式,不会出现解析遗漏
- 扩展性强:仅需在归类字典中补充键值匹配规则即可新增特征维度,配合词频统计可快速覆盖全部爬取到的房产特征,满足特征价格法的变量完备性要求
- 性能达标:63000行规模的数据在普通消费级笔记本上运行耗时不超过20秒,无性能瓶颈
内容的提问来源于stack exchange,提问作者Lucy Kingwell-Meader
相关产品推荐
相关产品推荐

