# 翻译｜给数据科学家的10个提示和技巧Vol.1

## 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 4
x1    y1          a      b
<chr> <chr>   <dbl>  <dbl>
1 a     K     -0.841   1.23
2 b     L      1.38   -0.802
3 c     M     -1.26   -1.08
4 d     N      0.0701 -0.158
5 e     O      1.71   -1.07
6 f     P     -0.603  -0.139
7 g     Q     -0.472  -0.597
8 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

```# 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))
df

V1 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 生成随机日期

```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]]
```

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

### 3.3 使用`elif`处理列表问题

• 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]

```

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

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

```\$ ./file.py
```

0 条评论

• ### 翻译|给数据科学家的10个提示和技巧Vol.2

原文：10 Tips And Tricks For Data Scientists Vol.2[1]

• ### 给数据科学家的10个提示和技巧Vol.3

原文：10 Tips And Tricks For Data Scientists Vol.3[1]

• ### 循环神经网络的增强方法：注意力机制以及更多

AI 科技评论按：一提起 RNN，我们最容易想到的实现就是 LSTM + attention。LSTM 作为经典的网络结构可谓是老当益壮，而另一方面注意力机制过...

• ### GitHub 热点速览 Vol.35：Let's Go，Rust 大放异彩

以下内容摘录自微博@HelloGitHub 的 GitHub Trending 及 Hacker News 热帖（简称 HN 热帖），选项标准：新发布 | 实用...

• ### 2019腾讯犀牛鸟精英人才培养计划课题介绍（七）—自然语言处理

? “ 精英人才培养计划是一项校企联合人才培养项目，入选学生将受到业界顶尖技术团队与高校导师的联合指导及培养。培养期间，学生将获得3个月以上到访腾讯开展科研访...

• ### 提高数据科学家讲故事能力的5个小技巧

讲故事是一门艺术。随着时间的推移，讲故事的技巧、方法和工具发生了变化，但主要概念和目标保持不变，即有效地吸引你的观众，使他们能够真正地与你所说的联系起来。

• ### 【系列文章】面向自动驾驶的三维点云处理与学习（6）-完结篇

标题：3D Point Cloud Processing and Learning for Autonomous Driving

• ### 深度学习碰上古文献，西南大学提出基于CNN的古彝文识别方法

摘要：作为世界六大古文字之一的古彝文记录下几千年来人类发展历史。针对古彝文的识别能够将这些珍贵文献材料转换为电子文档，便于保存和传播。由于历史发展，区域限制等多...

• ### 年终收藏! 一文看尽2020年度最「出圈」AI论文合集

疫情之下，通过各种方式，全球的研究者继续积极合作，发表了许许多多有影响力的成果——特别是在人工智能领域。