电子工程师薪酬调查小项目之
清洗HTML数据

R派模思

2022-04-10

工具库准备

## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.6     ✓ dplyr   1.0.8
## ✓ tidyr   1.2.0     ✓ stringr 1.4.0
## ✓ readr   2.1.2     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
## Loading required package: sysfonts
## Loading required package: showtextdb
## 
## Attaching package: 'jsonlite'
## The following object is masked from 'package:purrr':
## 
##     flatten
## 
## Attaching package: 'rvest'
## The following object is masked from 'package:readr':
## 
##     guess_encoding

在提取薪酬最大值与最小值前,核对薪酬数据值长度,如长度不同,需要补齐空缺以致长度相同。
所以,需要先收集不一致值的Index.

## [1] "414,"
## [1] "424,"
## [1] "426,"
## [1] "476,"
## [1] "482,"
## [1] "485,"
## [1] "1232,"
## [1] "1598,"
## [1] "1601,"
## [1] "1602,"
## [1] "1603,"
## [1] "2578,"
## [1] "2579,"
## [1] "3363,"
## [1] "3376,"

提取薪酬最大和最小值

## [1] "岗位薪酬最大值:"
## [1] 2.5 2.0 2.0 1.0 1.5
## [1] "岗位薪酬最小值:"
## [1] 1.6 1.5 1.0 0.8 1.0

转化薪酬单位,统一为月薪

##   providesalary_text salaryMin salaryMax
## 1       1.6-2.5万/月     16000     25000
## 2         1.5-2万/月     15000     20000
## 3           1-2万/月     10000     20000
## 4         0.8-1万/月      8000     10000
## 5         1-1.5万/月     10000     15000
## 6       1.5-2.1万/月     15000     21000

计算平均月薪(元)

##   providesalary_text salaryMin salaryMax salaryAvg
## 1       1.6-2.5万/月     16000     25000     20500
## 2         1.5-2万/月     15000     20000     17500
## 3           1-2万/月     10000     20000     15000
## 4         0.8-1万/月      8000     10000      9000
## 5         1-1.5万/月     10000     15000     12500
## 6       1.5-2.1万/月     15000     21000     18000

提取城市数据

##   workarea_text city
## 1   东莞-厚街镇 东莞
## 2   宁波-慈溪市 宁波
## 3          深圳 深圳
## 4          广州 广州
## 5   东莞-虎门镇 东莞
## 6          昆山 昆山

从attribute_text1中提取数据,如工作地点,经验,学历等,但须确保每行数据长度至少
3以上

y <- c()
for (i in 1:dim(df)[1]){
   x <-  df$attribute_text1[i] %>% str_split(',') %>% unlist
   if (length(x) < 3){
       print(paste(i,x))
       y <- c(y,i)
   }
}
## [1] "138 广州-花都区" "138  1年经验"   
## [1] "306 广州-花都区" "306  大专"      
## [1] "433 南京-溧水区" "433  本科"      
## [1] "462 广州-增城区" "462  无需经验"  
## [1] "490 广州-番禺区" "490  无需经验"  
## [1] "525 东莞-长安镇" "525  3-4年经验" 
## [1] "534 广州-白云区" "534  无需经验"  
## [1] "539 南京-浦口区"
## [1] "688 中山"  "688  本科"
## [1] "704 深圳"     "704  1年经验"
## [1] "798 东莞-南城区" "798  3-4年经验" 
## [1] "898 宁波"  "898  本科"
## [1] "912 宁波-鄞州区" "912  5-7年经验" 
## [1] "922 中山"     "922  2年经验"
## [1] "975 湖州"     "975  1年经验"
## [1] "1026 中山-古镇镇" "1026  3-4年经验" 
## [1] "1138 常州"  "1138  大专"
## [1] "1288 佛山-顺德区" "1288  2年经验"   
## [1] "1753 苏州"  "1753  硕士"
## [1] "1761 青岛-黄岛区" "1761  本科"      
## [1] "1817 南通"  "1817  本科"
## [1] "1898 东莞-石排镇" "1898  3-4年经验" 
## [1] "1912 南京"      "1912  无需经验"
## [1] "2013 江门-江海区" "2013  5-7年经验" 
## [1] "2045 常州"      "2045  无需经验"
## [1] "2111 杭州-富阳区" "2111  5-7年经验" 
## [1] "2195 宁波-江北区" "2195  无需经验"  
## [1] "2204 中山"     "2204  2年经验"
## [1] "2241 苏州-高新区" "2241  2年经验"   
## [1] "2368 惠州"
## [1] "2405 盐城"       "2405  3-4年经验"
## [1] "2451 杭州"       "2451  3-4年经验"
## [1] "2567 广州-黄埔区" "2567  高中"      
## [1] "2601 东莞-黄江镇" "2601  5-7年经验" 
## [1] "2669 苏州-相城区" "2669  无需经验"  
## [1] "2672 宁波"  "2672  本科"
## [1] "2704 扬州"
## [1] "2708 宁波-鄞州区" "2708  1年经验"   
## [1] "2710 杭州-拱墅区" "2710  3-4年经验" 
## [1] "2746 广州-白云区" "2746  1年经验"   
## [1] "2748 青岛-黄岛区"
## [1] "2797 东莞-长安镇" "2797  5-7年经验" 
## [1] "2808 广州-南沙区" "2808  无需经验"  
## [1] "2847 东莞-塘厦镇" "2847  5-7年经验" 
## [1] "2947 广州-黄埔区" "2947  1年经验"   
## [1] "2958 宁波-鄞州区" "2958  1年经验"   
## [1] "3121 佛山"     "3121  1年经验"
## [1] "3128 杭州-余杭区" "3128  2年经验"   
## [1] "3216 佛山"  "3216  大专"
## [1] "3278 广州"
## [1] "3294 惠州-惠城区" "3294  1年经验"   
## [1] "3338 宿州"     "3338  1年经验"
y1 <- c(539,2368,2704,2748,3278) # 缺少经验和学历
y2 <- c(306,433,688,898,1138,1753,1761,1817,2567,2672,3216) # 缺少经验
y3 <- setdiff(y,c(y1,y2)) # 缺少学历
y3
##  [1]  138  462  490  525  534  704  798  912  922  975 1026 1288 1898 1912 2013
## [16] 2045 2111 2195 2204 2241 2405 2451 2601 2669 2708 2710 2746 2797 2808 2847
## [31] 2947 2958 3121 3128 3294 3338

补齐所缺值,如经验或学历

##                attribute_text1
## 1 东莞-厚街镇, 8-9年经验, 本科
## 2 宁波-慈溪市, 5-7年经验, 本科
## 3          深圳, 2年经验, 大专
## 4        广州, 3-4年经验, 大专
## 5   东莞-虎门镇, 2年经验, 大专
## 6        昆山, 3-4年经验, 本科

提取经验和学历,查看表格

##                      attribute_text1 city experience  education
## 3445    无锡-无锡新区, 1年经验, 本科 无锡    1年经验       本科
## 3446 无锡-滨湖区, 1年经验, 中技/中专 无锡    1年经验  中技/中专
## 3447    宁波-慈溪市, 5-7年经验, 大专 宁波  5-7年经验       大专
## 3448      济南-历下区, 1年经验, 大专 济南    1年经验       大专
## 3449    东莞-长安镇, 5-7年经验, 本科 东莞  5-7年经验       本科
## 3450    苏州-吴江区, 3-4年经验, 大专 苏州  3-4年经验       大专

结语

至此,我们把从HTML中提取的数据清洗了一次,整理出了我们需要的数据。在处理薪酬时,要注意统一单位; 在提取经验和学历时,要注意保持数据结构的一致性。

##        jobid    coid                  job_title                   company_name
## 1  139367258 2128929       电子元器件资深工程师       东莞创机电业制品有限公司
## 2  138715966 2244822     电子工程师(智能门锁)           公牛集团股份有限公司
## 3  130759689 5968843  电子工程师/电子硬件工程师     广东智意机器人科技有限公司
## 4  133580078 2918382 电子硬件工程师(手机模组)       广州立景创新科技有限公司
## 5  132227751 6567027                 电子工程师   东莞市恒浩新能源科技有限公司
## 6  139370884 6398290         电子工程师(急招) 珠海达明科技有限公司苏州分公司
## 7  124745795 2732991                 电子工程师       苏州华旃航天电器有限公司
## 8  139370276 4073068                 电子工程师           浙江豪庭灯饰有限公司
## 9  117351389 3855602                 电子工程师           立芯科技股份有限公司
## 10 138786705 7019703                 电子工程师 佛山市三目汽车照明科技有限公司
##    providesalary_text companytype_text
## 1        1.6-2.5万/月   外资(非欧美)
## 2          1.5-2万/月         上市公司
## 3            1-2万/月         民营公司
## 4          0.8-1万/月         民营公司
## 5          1-1.5万/月         民营公司
## 6        1.5-2.1万/月         民营公司
## 7          1-1.5万/月             国企
## 8        0.6-1.2万/月         民营公司
## 9        0.8-1.2万/月         民营公司
## 10       0.9-1.2万/月         民营公司
##                                                                                 jobwelf
## 1                                          五险一金 餐饮补贴 专业培训 年终奖金 定期体检
## 2          带薪年假 包住宿 绩效奖金 全勤奖 节日福利 餐饮补贴 住房补贴 高温补贴 五险一金
## 3                                 带薪年假 五险一金 绩效奖金 专业培训 节日福利 住房补贴
## 4  五险一金 员工旅游 专业培训 绩效奖金 年终奖金 定期体检 节假日福利 带薪年假 加班费另计
## 5                                            五险一金 绩效奖金 包吃包住 年终奖金 下午茶
## 6                                          五险一金 员工旅游 专业培训 绩效奖金 年终奖金
## 7                        通讯补贴 餐饮补贴 专业培训 绩效奖金 年终奖金 定期体检 七险二金
## 8                                                                                      
## 9                                 周末双休 交通补贴 餐饮补贴 五险一金 带薪年假 节日福利
## 10                                                                                     
##    companysize_text          companyind_text salaryMin salaryMax salaryAvg city
## 1       10000人以上           机械/设备/重工     16000     25000     20500 东莞
## 2       10000人以上 电子技术/半导体/集成电路     15000     20000     17500 宁波
## 3       1000-5000人      家具/家电/玩具/礼品     10000     20000     15000 深圳
## 4       1000-5000人 电子技术/半导体/集成电路      8000     10000      9000 广州
## 5         150-500人 电子技术/半导体/集成电路     10000     15000     12500 东莞
## 6          50-150人      仪器仪表/工业自动化     15000     21000     18000 昆山
## 7       1000-5000人 电子技术/半导体/集成电路     10000     15000     12500 苏州
## 8         150-500人       通信/电信/网络设备      6000     12000      9000 嘉兴
## 9         150-500人 电子技术/半导体/集成电路      8000     12000     10000 宁波
## 10         50-150人 电子技术/半导体/集成电路      9000     12000     10500 佛山
##    experience education
## 1   8-9年经验      本科
## 2   5-7年经验      本科
## 3     2年经验      大专
## 4   3-4年经验      大专
## 5     2年经验      大专
## 6   3-4年经验      本科
## 7   3-4年经验      本科
## 8   5-7年经验      大专
## 9     2年经验      大专
## 10  5-7年经验      本科