这里介绍的方法与我们自学习外语的时候使用的方法是有共同之处的,例如我们要学习英语,可以使用以下三个关键的练习帮助我从笨拙地将中文单词翻译成英语,转变为直接用英语思考和回答(英语思维)。
把新的英语单词和我已经知道的中文单词关联起来。把英语和中文的单词作比较,使我能很快地领会这个生词的意思。
重复这个词很多次,并在许多不同的场景中使用它,把这个词深深地刻在我的脑海里。
利用上下文线索使我能够更好地理解这个词在同义词上的用法和原因。
当你第一次学习编码时,重复和语境化是必不可少的。通过不断的重复,你开始记住词汇和语法。通过项目开发,你能够理解如何以及为什么使用不同的功能和技术,并开始看到在不同的上下文环境中如何使用的代码。但是不一定有一种简单的方法可以把新的思维方式和你所说的语言联系起来,这意味着你不仅要记住一个单词,而是要对每一个编程概念有一个新的理解。甚至你写的第一行代码,print(“你好,世界!“)要求您了解print函数的工作原理、编辑器如何返回print语句以及何时使用引号。当你学习第二种编程语言时,你可以将你所知道的语言中的概念翻译成新的语言,从而更有效、更快地学习。
数据科学的世界被Python的拥护者和R的狂热者分割开来。但是,任何学习过其中一种语言的人,都应该充分利用它们的优势,深入到另一种语言中去,而不是宣称自己是一方。Python和R之间有着无限的相似性,而且这两种语言都是您可以使用的,您可以用最好的方式解决挑战,而不是将自己限制在工具库的一半。
下面是一个连接R和Python的简单指南,便于两者之间的转换。通过建立这些连接、反复与新语言交互以及与项目的上下文化,任何理解Python或R的人都可以快速地开始在另一种语言中编程。
基础
可以看到Python和R的功能和外观非常相似,只是语法上的细微差别。
数据类型
# Python # R type() class() type(5) #int class(5) #numeric type(5.5) #float class(5.5) #numeric type('Hello') #string class('Hello') #character type(True) #bool class(True) #logical 赋值 # Python # R a = 5 a <- 5 导包 # Python # R pip install packagename install.packages(packagename) import packagename library(packagename) 数学计算包:数学在所有语言中都是一样的 # Python # R + - / * + - / *# The same goes for logical operators < #less than < #less than > #greater than > #greater than <= #less than or equal to <= #less than or equal to == #is equal to == #is equal to != #is not equal to != #is not equal to & #and & #and | #or | #or 调用函数 # Python # R functionname(args, kwargs) functionname(args, kwargs) print("Hello World!") print("Hello World!") 条件判断 # Python # R if True: if (TRUE) { print('Hello World!') print('Go to sleep!') else: } else { print('Not true!') print('Not true!')
}
列表和向量:这个有点难,但是我发现上面说的关联的方法很有用。
在python中,列表是任何数据类型的有序项的可变集合。Python中的列表索引从0开始,不包括0。
在R中,向量是同一类型的有序项的可变集合。索引R中的向量从1开始,并且是包含的。
Python # R ls = [1, 'a', 3, False] vc <- c(1, 2, 3, 4)# Python indexing starts at 0, R indexing starts at 1 b = ls[0] b = vc[1] print(b) #returns 1 print(b) #returns 1c = ls[0:1] c = vc[1:2] print(c) #returns 1 print(c) #returns 1, 循环 # Python # R for i in range(2, 5): for(i in 1:10) { a = i a <- i }
数据操作
python和R都提供了简单而精简的数据操作包,使它们成为数据科学家必不可少的工具。
这两种语言都配备了能够加载、清理和处理数据的包。
python使用pandas、R使用tidyverse,并且他们的函数基本相同。
两种语言都允许多个操作通过管道(pipe)连接在一起。在python中使用“.” 在R中使用“%>%”组合不同的操作。
读取、写入和查看数据
# Python # R import pandas as pd library(tidyverse) # load and view data df = pd.read_csv('path.csv') df <- read_csv('path.csv') df.head() head(df) df.sample(100) sample(df, 100) df.describe() summary(df) # write to csv df.to_csv('exp_path.csv') write_csv(df, 'exp_path.csv')
重命名和添加列 # Python # R df = df.rename({'a': 'b'}, axis=1) df %>% rename(a = b) df.newcol = [1, 2, 3] df$newcol <- c(1, 2, 3) df['newcol'] = [1, 2, 3] df %>% mutate(newcol = c(1, 2, 3))
选择和筛选列
# Python # R df['col1', 'col2'] df %<% select(col1,col2) df.drop('col1') df %<% select(-col1)
筛选行
# Python # R df.drop_duplicates() df %<% distinct() df[df.col > 3] df %<% filter(col > 3)
排序
# Python # R df.sort_values(by='column') arrange(df, column)
聚合
# Python df.groupby('col1')['agg_col').agg(['mean()']).reset_index() # R df %>% group_by(col1) %>% summarize(mean = mean(agg_col, na.rm=TRUE)) %>% ungroup() #if resetting index 使用筛选器聚合
# Python df.groupby('col1').filter(lambda x: x.col2.mean() > 10) # R df %>% group_by(col1) %>% filter(mean(col2) >10) 合并dataframe # Python pd.merge(df1, df2, left_on="df1_col", right_on="df2_col") # R merge(df1, df2, by.df1="df1_col", by.df2="df2_col")
上面的例子是在Python和R之间创建心理相似性的起点。虽然大多数数据科学家倾向于使用一种语言或另一种语言,但是在这两种语言中都能很好地使用最适合您需要的工具。
我们的最终的目的并不是为了熟练的掌握另一门语言并用它开发,而是能够看懂另一门语言所写的代码,并把它的思想应用到我们自己的项目中去。