原文:10 Tips And Tricks For Data Scientists Vol.1

译者:赵西西

原博客简介:Predictive Hacks是与数据科学相关的在线资源中心。该博客是由一群数据科学家运营,专注于讲解在各种领域如何运用大数据技术(从机器学习和人工智能到业务领域)。

1 引言

这一系列对数据科学世界中常见的任务提供了一些代码作为参考。本文主要涵盖 Python、R、Unix、Excel、Git和Docker等语言的提示(Tips)。这一期主要展示在不同应用场景下的10个提示。

2  R

2.1 利用dplyr包实现多个列上连接数据框

dplyr包允许我们在多个列上连接两个数据框。只需在by中添加列,这些列称之为“键”,比如by = c("x1" = "x2", "y1" = "y2") ,结果如下所示:

library(dplyr)
set.seed(5)
df1 <- tibble(x1 = letters[1:10],y1 = LETTERS[11:20],a = rnorm(10)
)
df2 <- tibble(x2 = letters[1:10],y2 = LETTERS[11:20],b = rnorm(10)
)
df<-df1%>%inner_join(df2, df2, by = c("x1" = "x2", "y1" = "y2"))
df# A tibble: 10 x 4x1    y1          a      b<chr> <chr>   <dbl>  <dbl>1 a     K     -0.841   1.23 2 b     L      1.38   -0.8023 c     M     -1.26   -1.08 4 d     N      0.0701 -0.1585 e     O      1.71   -1.07 6 f     P     -0.603  -0.1397 g     Q     -0.472  -0.5978 h     R     -0.635  -2.18 9 i     S     -0.286   0.241
10 j     T      0.138  -0.259

2.2 使用for循环在R中存储模型

假设我们想对鸢尾花数据集中的每个物种分别构建不同的回归模型,可以使用以下两种不同的方法:

  • 用一个列表存储模型

my_models<-list()
for (s in unique(iris$Species)) {tmp<-iris[iris$Species==s,]my_models[[s]]<-lm(Sepal.Length~Sepal.Width+Petal.Length+Petal.Width, data=tmp)
}Call:
lm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, data = tmp)Coefficients:(Intercept)   Sepal.Width  Petal.Length   Petal.Width  2.3519        0.6548        0.2376        0.2521
  • 使用assign按名字存储模型

for (s in unique(iris$Species)) {tmp<-iris[iris$Species==s,]assign(s,lm(Sepal.Length~Sepal.Width+Petal.Length+Petal.Width, data=tmp))
}
# get the 'setosa' model
get("setosa")Call:
lm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, data = tmp)Coefficients:(Intercept)   Sepal.Width  Petal.Length   Petal.Width  2.3519        0.6548        0.2376        0.2521

2.3 传递多个参数给sapply

假设我们想在R中运行sapply或lapply,并且输入参数有多个。此时,可以定义一个形参,对形参应用sapply,并将固定的值赋给其余参数:

# this is the function like a linear equation
# of the form y= a + b * x
my_func<- function(a,b,c) {a+b*c
}
# the values of the x
x = c(1,5,10)
# we set a=1 and b=2
sapply(x,my_func,a=1, b=2)[1]  3 11 21

2.4 获得每一行的最大值对应的列名

假设数据框如下:

set.seed(5)
df<-as.data.frame(matrix(sample(1:100,12),ncol=3))
dfV1 V2 V3
1 66 41 19
2 57 85  3
3 79 94 38
4 75 71 58

我们可以按行获取每一行的最大值对应的列名,如下所示:

colnames(df)[max.col(df,ties.method="random")][1] "V1" "V2" "V2" "V1"

2.5 生成随机日期

可以使用均匀分布从特定范围的Unix时间戳生成随机日期。例如,生成10个随机日期:

library(lubridate)lubridate::as_datetime( runif(10, 1546290000, 1577739600))[1] "2019-12-09 15:45:26 UTC" "2019-08-31 19:28:03 UTC" "2019-01-13 12:15:13 UTC" "2019-11-15 00:13:25 UTC"
[5] "2019-01-19 06:31:10 UTC" "2019-11-02 12:46:34 UTC" "2019-09-04 19:16:31 UTC" "2019-07-29 11:53:43 UTC"
[9] "2019-01-25 23:08:20 UTC" "2019-02-03 02:30:21 UTC"

3 Python

3.1 按元素对元组进行排序

假设有以下列表:

l = [(1,2), (4,6), (5,1), (1,0)]

我想按元组的第二个元素来排序:

sorted(l, key=lambda t: t[1])
[(1, 0), (5, 1), (1, 2), (4, 6)]

3.2 扁平化一个由多个列表组成的列表

假设有一个列表:

l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]

我们希望将其扁平化为一个列表。这时,可以利用for循环实现,如下所示:

[item for sublist in l for item in sublist]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

3.3 使用elif处理列表问题

场景:对一个产品进行打分,分数等级为1~5,并将其分为三类,类别如下:

  • Good:评价大于等于4

  • Netural:评价等于3

  • Negative:  评价小于3

x = [1,2,3,4,5,4,3,2,1]
["Good" if i>=4 else "Neutral" if i==3 else "Bad" for i in x]['Bad', 'Bad', 'Neutral', 'Good', 'Good', 'Good', 'Neutral', 'Bad', 'Bad']

3.4 一个shebang行:#!/usr/bin/python3

在许多.py文件中,脚本顶部可能出现shebang行。它的作用是设置解释器的位置。通过在脚本顶部添加#!/usr/bin/python3,即可在Unix系统上运行文件.py,并且系统会自动将其识别为一个Python脚本。或者,也可以将脚本作为python3 file.py运行。例如,假设文件.py是:

#!/usr/bin/python3
print("Hello shebang line")

我们也可以在Unix上运行:

$ ./file.py

推荐: 可以保存以下照片,在b站扫该二维码,或者b站搜索【庄闪闪】观看Rmarkdown系列的视频教程。Rmarkdown视频新增两节视频(写轮眼幻灯片制作)需要视频内的文档,可在公众号回复【rmarkdown

往期精品(点击图片直达文字对应教程)

机器学习

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

翻译|给数据科学家的10个提示和技巧Vol.1相关推荐

  1. 面向数据编程的编程语言_面向数据科学家的10个很棒的编程项目

    面向数据编程的编程语言 Practice is an essential part of learning. But in my experience learning programming, fi ...

  2. ExecutorService – 10个提示和技巧

    从Java 5开始就已经存在ExecutorService抽象.在这里我们谈论的是2004. 提醒一下:Java 5和6不再受支持,Java 7 将不在半年之内 . 之所以提出这一点,是因为许多Jav ...

  3. 「数据科学家」必备的10种机器学习算法

    来源 | 雷克世界(ID:raicworld) 编译 | 嗯~是阿童木呀.KABUDA.EVA 可以说,机器学习从业者都是个性迥异的.虽然其中一些人会说"我是X方面的专家,X可以在任何类型的 ...

  4. 数据分析显示,疫情下数据科学家的薪水几乎未受影响

    来源:大数据文摘 本文约1500字,建议阅读5分钟. 调查发现,数据科学家的薪资和工作不受Covid-19影响. 调查发现,数据科学家的薪资和工作不受Covid-19影响. 您想作为个人贡献者赚取高达 ...

  5. 译文 :图文教程,8步教你变身数据科学家

    转自:灯塔大数据:微信:DTbigdata: 本文已获授权转载,转载请注明原文链接和联系原作者: 原创译文|图文教程,8步教你变身数据科学家! 导读:数据科学家是干什么的呢?哪些地方需要数据科学家?怎 ...

  6. 一篇文章告诉你如何成为数据科学家

    文章讲的是一篇文章告诉你如何成为数据科学家,通常来说,年轻人都很容易立志成为什么,例如成为一名科学家,然后又很快放弃.这一方面是因为摆在他们面前的诱惑太多,也因为成为一名科学家真的很不容易. 这一点放 ...

  7. 数据科学家是干什么的,成为一名数据科学家,主要划分为哪几个步骤?

    数据科学家是干什么的呢?哪些地方需要数据科学家?怎么样才能成为数据科学家?如果你正因为这些问题而犹豫要不要开始学习数据科学,那么我可以告诉你,成为数据科学家其实非常简单 从行业内部的蓬勃发展,到招聘会 ...

  8. python内置函数多少个_每个数据科学家都应该知道的10个Python内置函数

    python内置函数多少个 Python is the number one choice of programming language for many data scientists and a ...

  9. 数据科学之基石:数据科学家必须掌握的10个统计学概念

    2021-01-29 12:29:00 全文共2848字,预计学习时长8分钟 图源:Google 数据科学是一个跨学科领域,其基石之一是统计学.如果没有足够的统计知识,就很难理解或解释数据. 统计学帮 ...

最新文章

  1. Koa 本地搭建 HTTPS 环境
  2. R语言-路径设置与工作目录修改
  3. 【Android】3.19 示例19--全景图HelloWorld
  4. 【OpenCV3】棋盘格角点检测与绘制——cv::findChessboardCorners()与cv::drawChessboardCorners()详解
  5. 【机器学习】使用奇异值分解(SVD)构建推荐系统
  6. [HAOI2008]玩具取名
  7. 线性运算和非线性运算
  8. 宝塔服务器管理助手Linux面版-使用教程
  9. python花式输出_关于python字符串format的一些花式用法
  10. 如何在 macOS 上禁用 Adob​​e 后台进程,保存 CPU、内存和网络活动?
  11. TOMCAT 优化设置
  12. c语言源程序要正确运行必须要有什么函数,c语言习题(带答案)
  13. 实现线程的方式,源码分析:Runnable, Thread, Callable, Future, FutureTask
  14. USB2.0 EMC标准设计
  15. Excel function
  16. Netflix Web 性能案例研究
  17. 【实战】如何在手机上实时接收微信小店订单提醒
  18. 【CVE-2021-4043】Linux本地提权漏洞复现
  19. Excel的Sumif函数
  20. 数商云精细化工行业管理平台一体化信息化解决方案

热门文章

  1. 【操作系统】实验 模拟操作系统的存储系统
  2. 【Java】探究自增运算符++的原理
  3. 【LeetCode】查找只出现一次的数字算法
  4. 马尔可夫网络,(马尔可夫随机场、无向图模型)(Markov Random Field)
  5. JavaScript实现封闭区域布尔运算
  6. 内存对齐还是需要重视的——XMMATRIX 为例
  7. 转:libev和libevent的设计差异
  8. 为什么要重写toString()方法和hashcode()方法
  9. Java EE企业系统性能问题的原因和解决建议
  10. 事件查看器 无法完成应用程序上的操作,接口未知