数据科学家实操之路

更多深度文章,请关注:https://yq.aliyun.com/cloud



Kaggle最近进行了一项旨在评估数据科学和机器学习当前发展状况的调查。 他们收到了将近17000份答卷,并利用这些答卷做出了大量的分析。对于调查结果的分析报告,我并不感兴趣,我只是想看看这些调查结果是否对我这种想知道如何成为数据科学家的人来说是否有用。

如果你对分析过程并不感兴趣,而只想看看17000个行业专业人士的说法,那么请跳到本文的最后一节阅读结论。 否则,请继续阅读下文,看看我是如何得出结论的。

1. 导入和预处理

1.1. 导入数据

library(data.table)library(dplyr, warn.conflicts =FALSE)library(ggplot2)library(tibble)

results <- as.tibble(suppressWarnings(fread("../input/multipleChoiceResponses.csv")))

1.2. 数据预处理

在分析过程中遇到的许多职位和专业的名字都很长,因此,我缩短了其中一些名字的长度,这样可以让图表更具可读性。我删除了其中的非法字符,并将工作满意度转换为数字。

results$CurrentJobTitleSelect[results$CurrentJobTitleSelect =="Software Developer/Software Engineer"]<-"Software Engineer"
results$CurrentJobTitleSelect[results$CurrentJobTitleSelect =="Operations Research Practitioner"]<-"Operations Research"

results$MajorSelect[results$MajorSelect =="Engineering (non-computer focused)"]<-"Engineering"
results$MajorSelect[results$MajorSelect =="Information technology, networking, or system administration"]<-"Information technology"
results$MajorSelect[results$MajorSelect =="Management information systems"]<-"Information systems"

results_names <-names(results)
results_names[results_names =="WorkMethodsFrequencyA/B"]<-"WorkMethodsFrequencyABTesting"
results_names[results_names =="WorkMethodsFrequencyCross-Validation"]<-"WorkMethodsFrequencyCrossValidation"names(results)<- results_names

results$JobSatisfaction <-suppressWarnings(as.numeric(substr(results$JobSatisfaction, start =1, stop =2)))

1.3. 主题

在整个分析过程中,我需要显示多个数据,因此,我这里要提一下这个可以让图表变得更漂亮的东西。我将在大多数的图表中都使用这个主题。

jack_theme <- theme(
    plot.background = element_rect(fill ="#eeeeee"),
    panel.background = element_rect(fill ="#eeeeee"),
    legend.background = element_rect(fill ="#eeeeee"),
    legend.title = element_text(size =12, family ="Helvetica", face ="bold"),
    legend.text = element_text(size =9, family ="Helvetica"),
    panel.grid.major = element_line(size =0.4, linetype ="solid", color ="#cccccc"),
    panel.grid.minor = element_line(size =0),
    plot.title = element_text(size =20, family ="Helvetica", face ="bold", hjust =0.5, margin = margin(b =20)),
    axis.title = element_text(size =14, family ="Helvetica", face ="bold"),
    axis.title.x = element_text(margin = margin(t =20)),
    axis.title.y = element_text(margin = margin(r =20)),
    axis.ticks = element_blank(),
    plot.margin = unit(c(1,1,1,1),"cm"))

2. 开始

2.1. 编程语言

许多新手问自己的第一个问题是他们应该学习哪种编程语言。 在这个图表中,我们可以看到各个职位的被调查者们是如何看待Python和R语言的。

results %>%
    rename(Language = LanguageRecommendationSelect, title = CurrentJobTitleSelect)%>%
    filter(Language =="R"| Language =="Python")%>%
    filter(title !="")%>%
    group_by(title, Language)%>%
    count()%>%
    ggplot(aes(title, n, color = Language))+
    ggtitle("Python vs. R by Job Title")+
    labs(x ="Job Title", y ="Count")+
    geom_point(size =4)+
    jack_theme +
    theme(
        axis.text.x = element_text(angle =330, hjust =0),
        axis.title.x = element_text(margin = margin(t =12)))

正如我们所看到的,在几乎所有的场景中,初学者对Python的喜欢程度都超过了R,对于数据科学家、软件开发人员和机器学习工程师来说,尤其如此。 不过,统计学家更喜欢R。研究员也更喜欢R,但我认为这是由于样本太小的原因导致的。

2.2. 专业和可能的职位

我还没上大学,所以还没有选择专业。 但是,我在直觉上认为,有些专业比其他专业更具担任某些职位的可能性。 下面的图表可以用来证实或反驳我的观点,我们来看下某个专业的人们有多大的比例从事某个职位。

results %>%
    rename(Major = MajorSelect, title = CurrentJobTitleSelect)%>%
    filter(title !="", Major !="")%>%
    group_by(title, Major)%>%
    summarize(n = n())%>%
    mutate(freq = n /sum(n)*100)%>%
    ggplot(aes(x = title, y = freq, fill = Major, label =ifelse(freq >8,round(freq),"")))+
    ggtitle("Major vs. Job Title")+
    labs(x ="Job Title", y ="Frequency (%)")+
    geom_bar(stat ="identity", position = position_stack())+
    geom_text(position = position_stack(vjust =0.5))+
    scale_y_continuous(expand =c(0,0))+
    jack_theme +
    theme(
        axis.title.x = element_text(margin = margin(t =8)),
        axis.text.x = element_text(angle =320, hjust =0))

我的直觉基本上是正确的,专业是预测某人未来会从事哪些工作的最好依据。其中一些趋势是显而易见的:计算机科学专业的人倾向于成为计算机科学家、程序员和软件工程师,而数学专业则倾向于成为统计学家和预测模型师。大部分物理学专业都进入了研究领域,而非计算机科学工程专业的人则称自己为工程师。

我个人非常喜欢这个图表,每个专业的人都涵盖了所有的职位。对我来说,这表明不管你在学校里学的是什么专业,只要有激情,你就可以做好你想做的事。

3. 学什么

3.1. 学习资源

调查问卷中有一个问题是关于学习资源对学习数据科学的用处有多大。在下一张图表中,我绘制了每个学习资源受欢迎程度和有用性之间的关系。受欢迎度是回答这个问题的人数,有用性则是答案和回答者数量的的加权平均值。如果答案是“非常有用”,则权重为1,“有点有用”权重为0.5,如果没有用处,则权重为零。在这个图表中,我们不仅可以看到哪里的资源最有用,而且可以知道哪里的资源被过度使用或利用不足。

# Get all column names that begin with "LearningPlatformUsefulness"
platforms <-grep("^LearningPlatformUsefulness",names(results), value=T)

names <-c()
popularities <-c()
scores <-c()for(platform in platforms){
    usefulness <- results %>%
        group_by_(platform)%>%
        count()# Popularity = the number of people who responded to this question
    popularity <- usefulness[[2]][2]+ usefulness[[2]][3]+ usefulness[[2]][4]# Usefulness = a weighted average determining the usefulness of this platform
    score <-(usefulness[[2]][2]0+ usefulness[[2]][3]0.5+ usefulness[[2]][4]*1)/ popularity

    names <-c(names,gsub("LearningPlatformUsefulness","", platform))
    popularities <-c(popularities, popularity)
    scores <-c(scores, score)}

scores_df <-data.frame(
    Popularity = popularities,
    Usefulness = scores,
    Name =names)

ggplot(scores_df, aes(x = Usefulness, y = Popularity))+
    ggtitle("Effectiveness of Learning Methods")+
    geom_point()+
    geom_text(aes(label = Name, family ="Helvetica"), nudge_y =200)+
    jack_theme

从上图中我们可以看出一些浅显的结果。 播客、时事通讯和会议在有用性方面是最低的,而Kaggle竞赛、Stack Overflow、在线课程,以及项目的得分最高。 我们也可以看到,虽然很多人喜欢看YouTube教程和阅读博客帖子,但这可能并不是学习数据科学最有效的方法。

3.2. 重要的工作技能

对于哪些技能在工作中最重要这个问题,我们可以使用与创建上一个图相类似的方法来创建一张新的图。在这张新图中,我同样绘制了流行度与有用性之间的关系,看看哪些技术在现实世界中使用得最多。

# Get all column names that begin with "JobSkillImportance" and end in a letter
platforms <-grep("^JobSkillImportance.*[A-z]$",names(results), value=T)

names <-c()
popularities <-c()
scores <-c()for(platform in platforms){
    usefulness <- results %>%
        group_by_(platform)%>%
        count()# Popularity = the number of people who responded to this question
    popularity <- usefulness[[2]][2]+ usefulness[[2]][3]+ usefulness[[2]][4]# Usefulness = a weighted average determining the usefulness of this platform
    score <-(usefulness[[2]][2]1+ usefulness[[2]][3]0.5+ usefulness[[2]][4]*0)/ popularity

    names <-c(names,gsub("JobSkillImportance","", platform))
    popularities <-c(popularities, popularity)
    scores <-c(scores, score)}

scores_df <-data.frame(
    Popularity = popularities,
    Usefulness = scores,
    Name =names)

ggplot(scores_df, aes(x = Usefulness, y = Popularity))+
    ggtitle("Important Skills on the Job")+
    geom_point()+
    geom_text(aes(label = Name, family ="Helvetica"), nudge_y =12)+
    jack_theme

有趣的是,MOOC在实用性方面得分最低,即使是在线课程在最后一个问题中也达到了第二高的分数。 因此,虽然课程对学习数据科学很有帮助,但其他一些学习资源对于提高你的工作技能也非常有用。 我们可以看到,对于提高数据科学工作的技能而言,有关Python、高级统计和可视化工具方面的知识的排名最高。

3.3. 现实世界中的工具

调查问卷中有一个问题是询问受访者使用某种技术的频繁程度。 我没有把这个做成一个散点图,而是把数据放在一个有多个职位的表格中,因为这些答案在本质上已经反应了受欢迎水平。

# Get all column names that begin with "WorkToolsFrequency" and end in a letter
platforms <-grep("^WorkToolsFrequency.*[A-z]$",names(results), value=T)
positions <-c("All","Data Scientist","Software Engineer","Researcher","Machine Learning Engineer")

technologies <-matrix("",10,length(positions))colnames(technologies)<- positions
rownames(technologies)<-1:10

i <-1for(position in positions){
    names <-c()
    popularities <-c()if(position =="All"){
        position_results <- results
    }else{
        position_results <- results %>% filter(CurrentJobTitleSelect == position)}for(platform in platforms){
        usefulness <- position_results %>%
            group_by_(platform)%>%
            count()# Popularity = the number of people who responded to this question
        popularity <- usefulness[[2]][2]+ usefulness[[2]][3]+ usefulness[[2]][4]+ usefulness[[2]][5]# Usefulness = a weighted average determining how much this tool was used
        score <-(usefulness[[2]][2]1+ usefulness[[2]][3]0.67+ usefulness[[2]][4]0.33+ usefulness[[2]][5]0)/ popularity

        names <-c(names,as.character(gsub("WorkToolsFrequency","", platform)))
        popularities <-c(popularities, popularity * score)}

    scores_df <-data.frame(
        Popularity = popularities,
        Name =names)

    technologies[, i]<-head(as.character((scores_df %>% arrange(desc(Popularity)))$Name), n =10)
    i <- i +1}

technologies

从这个表格中可以看出,Python、SQL、R、Jupyter、Unix和TensorFlow无处不在。而Spark、Hadoop和Tableau是数据科学家所特有的,NoSQL是软件工程师所特有的,MATLAB只有研究人员和机器学习工程师使用。 虽然其中一些结果可能很容易被猜到,但是对于那些希望在将来从事这些工作的人来说,这确实是一个很有用的表格。

3.4. 重要的工作方法

我们再一次使用了制作之前的表格的方法,但是把工作中使用的技能替换成了方法。 在这里,我们可以看到受访者使用的前10种方法。

# Get all column names that begin with "WorkToolsFrequency" and end in a letter
methods <-grep("^WorkMethodsFrequency.*[A-z]$",names(results), value=T)
positions <-c("All","Data Scientist","Software Engineer","Researcher","Machine Learning Engineer")

technologies <-matrix("",10,length(positions))colnames(technologies)<- positions
rownames(technologies)<-1:10

i <-1for(position in positions){
    names <-c()
    popularities <-c()if(position =="All"){
        position_results <- results
    }else{
        position_results <- results %>% filter(CurrentJobTitleSelect == position)}for(method in methods){
        usefulness <- position_results %>%
            group_by_(method)%>%
            count()# Popularity = the number of people who responded to this question
        popularity <- usefulness[[2]][2]+ usefulness[[2]][3]+ usefulness[[2]][4]+ usefulness[[2]][5]# Usefulness = a weighted average determining how much this tool was used
        score <-(usefulness[[2]][2]1+ usefulness[[2]][3]0.67+ usefulness[[2]][4]0.33+ usefulness[[2]][5]0)/ popularity

        names <-c(names,as.character(gsub("WorkMethodsFrequency","", method)))
        popularities <-c(popularities, popularity * score)}

    scores_df <-data.frame(
        Popularity = popularities,
        Name =names)

    technologies[, i]<-head(as.character((scores_df %>% arrange(desc(Popularity)))$Name), n =10)
    i <- i +1}

technologies
- 所有人 数据科学家 软件工程师 研究人员 机器学习工程师
1 数据可视化 数据可视化 数据可视化 数据可视化 交叉验证
2 交叉验证 交叉验证 交叉验证 交叉验证 神经网络
3 逻辑回归 逻辑回归 神经网络 神经网络 数据可视化
4 决策树 随机森林 逻辑回归 逻辑回归 卷积神经网络
5 随机森林 决策树 决策树 主成分分析 自然语言处理
6 时序分析 时序分析 时序分析 时序分析 逻辑回归
7 神经网络 文本分析 文本分析 卷积神经网络 随机森林
8 主成分分析 集成方法 随机森林 决策树 决策树
9 文本分析 主成分分析 自然语言处理 支持向量机 主成分分析
10 邻近算法 GBM A/B测试 自然语言处理 集成方法

从这个表格中可以看出,每个人都在使用数据可视化、交叉验证、逻辑回归和决策树。自然语言处理和神经网络对于机器学习工程师来说使用更为频繁,而软件工程师是唯一一个经常使用A/B测试的职业。

4. 结论

如果你是一位数据科学新手,并且想入门,那么我们以上的分析为你提供了以下这些建议:

  1. 学习Python。Python和R都已经有数十年的历史了,但是正如我们在第一个图表中看到的那样,Python获得了全胜。这个结果也在第四张图中得到了支持,绝大多数的参与者都认为Python是工作中最重要的技能。我相信你很难找到一家完全不使用Python的公司,所以你应该好好学习。
  2. 计算机科学或数学专业。正如我在“专业和职位图”之后所提到的,任何一个专业在每个工作角色中都存在。然而,从图中的比例来看,计算机科学专业和数学专业的人数几乎在每一个角色中都是最多的。虽然这不是必需的,但拥有这两个专业中的任何一个或同时拥有两个专业的学历会给你带来很大的优势。
  3. 参加项目、参加课程,并参与Kaggle比赛。从“最佳学习资源的图表”中我们可以很清楚的看到,参加项目、参加在线课程以及参与Kaggle比赛是学习数据科学三个最有用的资源。
  4. 了解最流行的工具。数据科学相关的工具和库很多很多,但是这次调查让我们看到了被认为是最重要的工具和库。推荐最多的工具是Python、SQL、R、Jupyter和Unix,最值得推荐的方法是数据可视化、交叉验证逻辑回归决策树随机森林

文章原标题《How to Become a Data Scientist》,作者: Jack Cook,译者:夏天,审校:主题曲。

文章为简译,更为详细的内容请查看原文

时间: 2024-12-01 12:22:28

数据科学家实操之路的相关文章

从商业视角理解数据:数据科学家的思维之路

在过去的几个月内,来自不同行业人不约而同问我能否提供一个端到端的视图,使他们了解成为一个数据科学家的思维过程.为这个问题寻找答案时,我想的不仅仅是提供一个端到端的视图过程,而是面对一个分析问题时我们应该更深入的了解他/她是怎么想的. 接下来我将分五个板块带领大家体验数据科学家的思维之路.文章的前半部分将介绍数据科学家如何进行任务的公式化建模以及数据点的工程化,这样可以为我们后续数据科学之旅提供规范和方向.我们还将深入了解整个生命周期中的另外两个重要因素,即探索性数据分析和特征工程.这些过程在制定

跟着Twitter的数据科学家,体验窥探天机的兴奋

"Robert Chang回顾两年来的心路历程,样本量N=1." Intetix Foundation(英明泰思基金会)由从事数据科学.非营利组织和公共政策研究的中国学者发起成立,致力于通过数据科学改善人类社会和自然环境.通过联络.动员中美最顶尖的数据科学家和社会科学家,以及分布在全球的志愿者,我们创造性地践行着我们的使命:为美好生活洞见数据价值. 2015年6月17日是我在Twitter工作两周年的纪念日.回想起来,两年间,数据科学在Twitter的应用方式和范围发生了很大变化: 工

找不到完美数据科学家?你还可以组建一支数据科学梦之队

提供洞察和分析的公司都在尽力为自己组建完美的数据科学团队,这通常有两条路可以走. 大部分公司都在挣扎中选择了第一条路:寻找这些工资非常贵又很少见的独角兽人才,即同时具备这多种技能的独立个体. 完美的数据科学家完美地掌握了数学.统计学.编程以及沟通技术.这些人不光具备完成复杂工作的专业技术能力,还能够向非技术人员解释这些技术工作可能会带来的影响. 除了这些数据科学家会很昂贵的事实之外,这些天才科学家一周7天,每天24小时连轴工作也是不太可能的. 当然这不是唯一的一条路. 人类史上最早的科学家之一亚

新站实操:疯狂外链与定向投稿的不同性

经过1个月的建站时间,我用两个网站通过不同的方式去推广,至今天观察,似乎已经开始向稳定收录迈进.现在我来说一说我两个网站这一个月的操作经验. 第一个网站:垃圾外链法 先说说第一个网站的基本情况:域名在7月12日购买,已经备/*-案的域名,一周后正式上线,期间改动过title.关键词.内容数次,但是都是在没收录的情况下改动的.该站从建站开始,我进行了一部分采集,但是采集的资源都是百度没有收录的文章,总计400余篇.可以说是个90%的原创网站了. SEO情况:之后每天一篇原创(来自网络,百度没有的)

行业资深专家切身经验——给数据科学家新手的建议

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 本博主关于数据科学的文章有许多篇,系列总结在此博客中: <关于数据科学的那些事> 未来是大数据的时代,成为一名数据科学家是从事这方面研究者梦寐以求的职业,本文是一份给数据科学家新手的建议,关于作者学习数据科学的一些亲身体会. 动力 两年前,我在行业分享了个人从事数据科学的经历.本文原本是为了庆祝自己两年的推特纪念日而写的个人反思,但最终发表在Medium上,这是因为我相信它对许多有抱负的数据科学家是非常有用

数据分析师的基本素养——论如何成为一名数据科学家 Part 2

更多深度文章,请关注: https://yq.aliyun.com/cloud 本文为<数据分析师的基本素养--论如何成为一名数据科学家>文章的第二部分,第一部分请点击这里. Pronojit Saha,数据发烧友 数据科学入门的自学之路 对于那些想要入门数据科学的新手,这里有一份大纲,或许能够为大家提供一些思路.(其内容摘自我的一篇博客:如何获得"基本技能集"-自主学习的方式).我的建议是从下面每项建议中逐一挑选一到两个资料或链接,掌握其中介绍的内容. 基本的先决条件:

想成为数据科学家?你得先读读这篇文章

市场营销学者Kevin Gray对肯纳索州立大学研究生院副院长.统计学及数据科学教授Jennifer Priestley做了一个采访,请教数据科学究竟是什么.一个好数据科学家应具备哪些品质以及如何成为一个好的数据科学家,访谈全文如下. Q:您能否用简单.外行人也能听得懂的话向我们解释数据科学? A:我认为Slack的数据工程总监Josh Wills给出的定义非常恰当--"(数据科学家是)擅长统计学的软件工程师与擅长软件工程的统计学家的混合体.",我还想在这里加上我本人的"Pr

Facebook数据科学家解密数据分析驱动用户增长

本文内容来源于作者在知乎的一场直播,内容关于如何通过数据分析驱动用户增长.由于 Facebook 有严格的保密要求,所以这次直播内容不会透露属于内部消息的数据.产品或者策略.直播里提到的例子如果涉及到 Facebook ,都会是已经公开的信息(一般是 Facebook F8 大会提到过的或者 Engineer blog 上的内容).  先简单介绍一下我自己.我是清华生物系本科和硕士毕业,之后去北卡大学念药物药理学的博士,中间发现自己不适合走生物科研的路,所以在博士开始两年多的时候决定转硕士走人.

电改步入实操 “电改”成两会热议能源关键词

随着3月15日上午李克强总理记者会的结束,轰轰烈烈的2017年全国两会正式落下了帷幕.在过去的半个月内,去产能.环保.新电改."三弃"等攸关能源行业发展战略的问题不断被各个行业的两会代表和委员们提及,话题持续发酵,热度不断升温. 关键词1:煤炭去产能 政府工作报告中明确提出,今年要退出煤炭产能1.5亿吨以上,同时,要淘汰.停建.缓建煤电产能5000万千瓦以上,以防范化解煤电产能过剩风险,提高煤电行业效率,为清洁能源发展腾空间. 全国政协委员.国家发改委副主任.国家统计局局长宁吉喆表示,