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

## 2 R

### 2.1 判断两个数据框之间的相关性

```df1 = data.frame(x11 = c(10,20,30,40,50,55,60),
x12 = c(11,15,20,30,35,60,70)
)
df2 = data.frame(x21 = c(100,150,200,250,300,400,500),
x22 = c(110,150,180,250,300,400,600)
)
```

```> cor(df1,df2)
x21       x22
x11 0.9538727 0.9000503
x12 0.9889076 0.9755973
```

### 2.2 计数神器——“Count(Case When … Else … End)”语句

```library(sqldf)
library(dplyr)
df<-data.frame(id = 1:10,
gender = c("m","m","m","f","f","f","m","f","f","f"),
amt= c(5,20,30,10,20,50,5,20,10,30))
df
```
```> df
id gender amt
1   1      m   5
2   2      m  20
3   3      m  30
4   4      f  10
5   5      f  20
6   6      f  50
7   7      m   5
8   8      f  20
9   9      f  10
10 10      f  30
```

```> sqldf("select count(case when gender='m' then id else null end) as male_cnt,
count(case when gender='f' then id else null end) as female_cnt,
sum(case when gender='m' then amt else 0 end) as male_amt,
sum(case when gender='f' then amt else 0 end) as female_amt
from df")

male_cnt  female_cnt  male_amt female_amt
1        4          6       60        140
>
```

```> df%>%summarise(male_cnt=length(id[gender=="m"]),
female_cnt=length(id[gender=="f"]),
male_amt=sum(amt[gender=="m"]),
female_amt=sum(amt[gender=="f"])
)

male_cnt  female_cnt  male_amt  female_amt
1        4           6        60        140
```

## 3 Python

### 3.1 在pandas中处理JSON文件

```import pandas as pd
import ast
pd.set_option("max_colwidth", 180)
# print the properties column
doc['properties']
```

```dummy = doc['properties'].apply(lambda x: ast.literal_eval(x))
doc['gender'] = dummy.apply(lambda x:x.get('gender'))
doc['nationality'] = dummy.apply(lambda x:x.get('nationality'))
doc['document_type'] = dummy.apply(lambda x:x.get('document_type'))
doc['date_of_expiry'] = dummy.apply(lambda x:x.get('date_of_expiry'))
doc['issuing_country'] = dummy.apply(lambda x:x.get('issuing_country'))
# lets get the columns
doc[['gender', 'nationality', 'document_type', 'date_of_expiry','issuing_country' ]]```

### 3.2 利用applymap改变多个列的值

• If 1, then 0.
• If 2 or 3, then 1.
```df = pd.DataFrame({'A':[1,1,2,2,3,3],
'B':[1,2,3,1,2,3]})
df

A   B
0 1   1
1 1   2
2 2   3
3 2   1
4 3   2
5 3   3
```

```# 创建映射字典
d = {1 : 0, 2: 1, 3: 1}
# 对每一列应用函数
df.applymap(d.get)

A   B
0 0   0
1 0   1
2 1   1
3 1   0
4 1   1
5 1   1
```

### 3.3 利用Plotly建立树形图

```import plotly.express as px
import numpy as np
df = px.data.gapminder().query("year == 2007")
df["world"] = "world" # in order to have a single root node
fig = px.treemap(df, path=['world', 'continent', 'country'], values='pop',
color='lifeExp', hover_data=['iso_alpha'],
color_continuous_scale='RdBu',
color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
fig.show()
```

### 3.4 判断两个数据框之间的相关性

```df1 = pd.DataFrame({'x11' : [10,20,30,40,50,55,60],
'x12' : [11,15,20,30,35,60,70]})
df2 = pd.DataFrame({'x21' : [100,150,200,250,300,400,500],
'x22' : [110,150,180,250,300,400,600]})
pd.concat([df1, df2], axis=1, keys=['df1', 'df2']).corr().loc['df1', 'df2']

x21      x22
x11 0.953873 0.900050
x12 0.988908 0.975597
```

```(df=='a').any()

A     True
B    False
C     True
```

### 3.5 将一个日期值还原到该月的第一天

```import pandas as pd
df = pd.DataFrame({'MyDate': ['2020-03-11', '2021-04-26', '2021-01-17']})
df['MyDate'] = pd.to_datetime(df.MyDate)
df

MyDate
0   2020-03-11
1   2021-04-26
2   2021-01-17
```

```df['Truncated'] = df['MyDate'] + pd.offsets.MonthBegin(-1)
# OR
# df['Truncated'] = df['MyDate'] - pd.offsets.MonthBegin(1)
df

MyDate     Truncated
0 2020-03-11  2020-03-01
1 2021-04-26  2021-04-01
2 2021-01-17  2021-01-01
```

### 3.6 添加多个CSV文件到数据框中

```import os
import pandas as pd
# 创建一个空的数据框
df = pd.DataFrame()
# 遍历 My_Folder中的所有文件
for file in os.listdir("My_Folder"):
if file.endswith(".csv"):
df = pd.concat([df , pd.read_csv(os.path.join("My_Folder", file))], axis=0 )
# 将索引重置
df.reset_index(drop=True, inplace=True)
df
```

### 3.7 连接多个CSV文件并保存到一个CSV文件中

```import os
import pandas as pd
# 遍历 My_Folder中的所有文件
for file in os.listdir("My_Folder"):
if file.endswith(".csv"):
```

### 3.8 连接多个TXT文件并保存到一个TXT文件中

```import os
# 在文件夹中找到所有文件
inputs = []
for file in os.listdir("dataset"):
if file.endswith(".txt"):
inputs.append(os.path.join("dataset", file))
# 将所有文件连接到 merged_file.txt中
with open('merged_file.txt', 'w') as outfile:
for fname in inputs:
with open(fname, encoding="utf-8", errors='ignore') as infile:
```

```with open('merged_file.txt', 'w') as outfile:
for fname in inputs:
with open(fname, encoding="utf-8", errors='ignore') as infile:
for line in infile:
outfile.write(line)
```

### 参考资料

[1]

10 Tips And Tricks For Data Scientists Vol.3: https://predictivehacks.com/10-tips-and-tricks-for-data-scientists-vol-3/

[2]

plotly.express: https://plotly.com/python/plotly-express/

0 条评论

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

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

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

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

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

原博客简介：Predictive Hacks是与数据科学相关的在线资源中心。该博客是由一群数据科学家运营，专注于讲解在各种领域如何运用大数据技术（从机器学习和人...

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

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

• ### 授权首发：徐亦达老师精选论文集和课件下载

徐亦达老师和他的团队精选了70篇论文，其中包括了非参贝叶斯算法的研究和应用，行列式点过程，3D计算机视觉，带约束下几何优化，非负矩阵分解，视频跟踪，GAN的文字...

• ### 数据科学家必看！处理数据的 7 个小技巧

在没有最基本的、必要的、未经处理数据的情况下，我们应该如何为机器学习的概念建立原型并加以验证呢？在资源匮乏的情况下，我们应如何有效地获取并用数据创造价值？

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

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

• ### 第2期 | 国内脑机接口领域专家教授汇总(修改)

第1期分享出来后，很多朋友在后台留言表示，这个汇总真是太有用了。说实话自己做的一些事能给他人带去帮助，是非常的开心。

• ### Smarting：第一款真正意义上的便携式可移动脑电设备

目前市面上有很多脑电设备都号称是便携式可移动的，但是笔者认为，今天我要介绍的Smarting这款脑电设备才是第一款真正意义上的便携式可移动EEG设备。为什么这样...

• ### 自动机器学习：最近进展研究综述

深度学习已经运用到多个领域，为人们生活带来极大便利。然而，为特定任务构造一个高质量的深度学习系统不仅需要耗费大量时间和资源，而且很大程度上需要专业的领域知识。

• ### ICRA 2018奖项全公布，中国香港大学团队获最佳会议论文

ICRA 2018 本周于澳大利亚布里斯班举行。随着会议议程的推进，今天也迎来了本次大会的重头戏——ICRA 相关奖项的颁布仪式

• ### AutoML: A Survey of the state-of-the-art

https://arxiv.org/pdf/1908.00709.pdf​arxiv.org

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

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

• ### GitHub上的7个数据科学项目，以展示机器学习技巧！

轻松应对数据科学项目是一个令人难以置信的方法，以摆脱挑战看看GitHub上的这7个数据科学项目将改善成熟能力范围这些GitHub仓库包含来自各种数据科学领域的项...

• ### 【综述】自动机器学习最近研究进展

本文首先从端到端系统的角度总结了自动机器学习在各个流程中的研究成果，然后着重对最近广泛研究的神经结构搜索进行了总结，最后讨论了一些未来的研究方向。

• ### 自动机器学习：最近进展研究综述

本文首先从端到端系统的角度总结了自动机器学习在各个流程中的研究成果，然后着重对最近广泛研究的神经结构搜索进行了总结，最后讨论了一些未来的研究方向。

• ### 独家起底巧达科技：“玩转”8亿人数据的灰色生意

日前，有消息称招聘数据公司巧达科技被查封，全体员工被警方带走。一位巧达科技前员工告诉燃财经（ID：rancaijing），“（最近）陆续有HR等非核心员工回家，...

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

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