面试完数据分析师后开始学习data.table包

本文分享了一位数据分析师面试的经历和感悟,强调了勇敢投递简历和积累项目经验的重要性。面试中重点考察了商业分析思维、结构化思维和分析工具(如R的data.table包、SQL)的熟练程度。建议加强data.table、SQL的掌握,并通过实践项目增强数据分析能力。
摘要由CSDN通过智能技术生成

从课程设计转行数据分析的道路并不是特别好走,面试两次,挂了两次。
之前迟迟不肯投简历,是对自己不自信,虽然自己有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
  1. 分组
> ##分组计算
> 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
  1. 连接
> #多个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非常值得学!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值