从课程设计转行数据分析的道路并不是特别好走,面试两次,挂了两次。
之前迟迟不肯投简历,是对自己不自信,虽然自己有4年的R经验,但没有业界工作经验,没有业界的项目经历。
不过,奉劝各位转行数据分析的小伙伴
第一,要勇敢投出简历,去面试,真正和面试官聊了之后,你会更清楚自己的不足之处和要努力的方向。
第二,没有相关工作经验的话,要有项目经历,比如自己爬取点数据做个小项目,让面试官相信你真的对DA有热情,有兴趣。或者做个kaggle或天池项目,也是极好的
去了某少儿英语教育公司面试,面试官主要考察的是:
1)商业分析思维
比如:分析某个行业的市场空间
2)结构化思维
面试官给我出的一道题:有12个外观一模一样的小球,其中一个和其他11个重量不同,但不知道是比其他的球重还是轻,现在有一个天平,用这个天平找出那个与众不同的小球。
3)分析工具的使用熟练程度
SQL,常用的R包(data.table,magrittr,dplyr,xringan)
这次主要的收获是:
1)一定要熟悉业界进行数据处理常用的R包
2)SQL练习还太少,对join的理解不够深入
3)看看商业分析报告,对商业分析有一定的了解
4)做一个自己的数据分析项目(虽然之前跟着老师做过一个)
前言写的有点多,开始啃张丹的这本《R的极客思想》,其中介绍了data.table, apply, magrittr包的使用。这篇主要介绍下data.table包
众所周知,最常见的数据结构类型便是数据框了data.frame, dataframe可以很方便地对数据进行处理,如切分、分组、聚合等。在数据量不大的情况下,使用起来非常方便。但稍大数据规模下,处理就会变慢。data.table特地增加了索引的设置,提高数据处理的效率。
- 增
> ##增加1列
> dt[,x3:=x1+1]
> dt
x1 x2 x3
1: 1 b 2
2: 2 a 3
3: 3 c 4
4: 4 r 5
5: 5 o 6
6: 6 i 7
> ##增加2列
> dt[,":="(c1=1:6,c2=2:7)]
> dt
x1 x2 x3 c1 c2
1: 1 b 2 1 2
2: 2 a 3 2 3
3: 3 c 4 3 4
4: 4 r 5 4 5
5: 5 o 6 5 6
6: 6 i 7 6 7
- 删
> ##删除列
> dt[,c1:=NULL]
> dt[,c("c2","x3"):=NULL]
> > dt
x1 x2
1: 1 b
2: 2 a
3: 3 c
4: 4 r
5: 5 o
6: 6 i
>
- 查
##data.frame 和 data.table的类型不同
df<-data.frame(x1=1:6,x2=c("b","a","c","r","o","i"))
dt<-data.table(x1=1:6,x2=c("b","a","c","r","o","i"))
> class(df)
[1] "data.frame"
> class(dt)
[1] "data.table" "data.frame"
##查询
#取第二行的数据
> df[2,]
x1 x2
2 2 a
> dt[2,]
x1 x2
1: 1 b
#取第二列数据
> df[2]
x2
1 b
2 a
3 c
4 r
5 o
6 i
> dt[2]
1: 1 b
#还是取出了第二行的数据
> dt$x2#取第二列的数据
[1] "b" "a" "c" "r" "o" "i"
#取第二列数据
> df[,2]
[1] b a c r o i
Levels: a b c i o r
> dt[,2]
x2
1: b
2: a
3: c
4: r
5: o
6: i
#取第二列值为c的行
> df[df$x2=="c",]
x1 x2
3 3 c
> dt[x2=="c",]
x1 x2
1: 3 c
> ##设置x2列为索引行
> setkey(dt,x2)
# 可以看到已经按x2行的字母顺序排好了
> dt
x1 x2
1: 2 a
2: 1 b
3: 3 c
4: 6 i
5: 5 o
6: 4 r
> ##按照自定义的索引进行查询
> dt["b",]
x1 x2
1: 1 b
> dt["c",]
x1 x2
1: 3 c
#设置x1,x2均为索引行
> #设置x1,x2均为索引行
> setkey(dt,x1,x2)
> dt[list(1,"b")]
x1 x2
1: 1 b
- 改
> dt[x1=="2",x2:=20]
> dt[,x2:=ifelse(x1=="3",20,x2)]
> dt
x1 x2
1: 1 b
2: 2 20
3: 3 20
4: 4 r
5: 5 o
6: 6 i
- 分组
> ##分组计算
> dt[,sum(x1)]
[1] 21
> dt[,sum(x1),by=x2]
x2 V1
1: b 1
2: 20 5
3: r 4
4: o 5
5: i 6
- 连接
> #多个data.table进行连接
> student<-data.table(id=1:8,name=c('a','b','c','d','e','f','g','h'))
> score<- data.table(id= 1:16,studentId=rep(1:8,2),score=runif(16,59,100),class=c(rep('A',8),rep('B',8)))
> #设置score数据集,key为stuId
> setkey(score,"studentId")
> #设置student数据集,key为id
> setkey(student,"id")
> #合并两个数据集
> student[score,nomatch=NA,mult="all"]
id name i.id score class
1: 1 a 1 94.75773 A
2: 1 a 9 73.36937 B
3: 2 b 2 77.79461 A
4: 2 b 10 65.77173 B
5: 3 c 3 80.28793 A
6: 3 c 11 94.25439 B
7: 4 d 4 76.12220 A
8: 4 d 12 89.04327 B
9: 5 e 5 90.17662 A
10: 5 e 13 98.75714 B
11: 6 f 6 95.43409 A
12: 6 f 14 89.59397 B
13: 7 g 7 80.06972 A
14: 7 g 15 86.88070 B
15: 8 h 8 59.47521 A
16: 8 h 16 69.55858 B
对于data.frame和data.table的性能对比,在数据量大时,前者比后者快1-2个量级。所以data.table非常值得学!