查看原文
其他

R与Python手牵手:数据科学导论系列(包的载入)

黄天元 R语言中文社区 2019-04-22


作者黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。

邮箱:huang.tian-yuan@qq.com


前言:

R与Python是数据科学中两门最常用的开源软件,两者有很多共同点,但是在具体应用中又不太一样。作为熟练的R用户,我一直患有“学习Python困难症”,每当我想要好好学习Python的时候,我总是发现在R中也有相应的解决办法,而且我学起来要更加便捷(R的学习曲线越到后面就是越容易)。但是,现实就是Python的用户其实要更多,从招聘的岗位描述到Kaggle机器学习讨论的资源,数量上来说Python目前都是更多的。我不希望因为少学习一门语言就关上了一扇与外界交流的大门,因此决心开始学习Python。说到底,R与Python都只是解决问题的工具而已,特点有所不同,但是没有高下之分。而我想要聚焦的热点问题,则是数据科学。其实只要抓住数据科学理论的本质,同时学习R与Python并不是难事,计算机编程语言从本质上都是互通的,更何况我们解决的还是同类型的问题。网上很多用户把R与Python对立起来,其实完全没有必要,多学一门语言真的没有这么难。因为R与Python注重的就是可重复实现的函数式编程,也就是说用户在使用大部分功能的时候,可以通过复制粘贴代码并修改少量的参数就完成统计分析和可视化。从某种角度来看,两个语言的竞争合作关系反而促进了彼此的飞速发展。言归正传,将要推出的一个系列是针对数据科学主题,比较R与Python两种语言在实现上的差异,从而揭示两种语言的特点,促进两种语言用户对彼此之间的理解和包容,并推动“双语学习”。当然也欢迎初学者用这个进行数据科学的基础学习,因为我会从最最简单的例子开始。这个系列会选用Howe, Bill. (2017).Introduction to data science. Undergraduate Topics in Computer Science.的一些Python的例子,然后我会用R进行重写,然后进行讨论和比较。工作环境是Jupyter,可以支持两种语言的操作。因为经常转换语言可能会晕头转向,所以每次的内容尽量简短一点,我们细水长流。我R稍微熟一点,Python则没有那么熟,有的地方写的不到位的,欢迎大家邮件联系我,相互交流相互促进。


包的载入(Py)

包(package),或者叫模块(module),是我们在做数据科学中不可不知道的概念。一言以蔽之,就是“站在巨人的肩膀上”。各个大牛孜孜不倦推出的算法,已经可视化实现等功能,只要在开源社区中共享,用户就能免费便捷地调用。这是开源精神的集中体现,有时候想想真是不可思议,那么多大牛如此努力地设计包免费给大家用,这是什么样的情怀?也正因为有一群有情怀的人,他们才能够自由自在地交流看法和意见,相互提高,不断完善自己的包,让人类不断向极限做出挑战。言归正传,在Python中调用包,是非常简单的。

import pandas as pd import numpy as np import matplotlib.pylab as plt

翻译一下 import pandas as pd ,就是,把pandas模块导入(import)进来,然后在我们的环境中,用pd来调用pandas模块里面的内容。或者这么理解,我们把pandas大神请进来了,但是在我们的组织里面,给他的代号是pd. 上面几行代码,我就把Python中最常用的三个数据科学模块加载了进来。需要注意的是,加载包之前是需要安装的,我在Jupyter中是直接再Anaconda中先配置了环境,我知道里面有pandas,numpy和matplotlib三个模块。Jupyter的操作跟别的IDE可能不同,需要注意一下。


包的载入(R)

在R语言中,最常用的载入包的方法当属library().如果没有安装的话,就用install.packages()函数进行安装

install.packages("pacman") library(pacman)

需要注意的是,install.packages只接受字符型的包名称,而library则可以不用双引号(当然加上也是没问题的)。不过如果大家要安装一堆包的时候,就特别麻烦。我们做一个大型任务,往往都要加载一群包,这样就特别麻烦,所以建议大家用pacman这个包,下面给大家看看我的日常操作(如果没有安装这个包,请先用上面的代码安装一下)。

library(pacman) p_load(tidyverse,data.table) #或者直接 pacman::p_load(tidyverse,data.table)

这种操作(p_load函数),首先节省了打双引号的过程;其次,可以放多个包的名称,想放多少放多少;最后,如果这个包以前没有安装过,会自动帮你按照上。这种一步到位的操作确实舒心。


隐含的问题

其实安装和加载包,两种语言并没有什么特别大的差异。但是值得注意的一点是,其实Python在这种加载包的设计上已经引入了命名空间的概念,也就是后面我们要用pandas函数的时候,我们都需要用pd.*格式,如pd.read_csv().而R直接加载了包,是不会注意到这种问题的。为什么会有这个差别呢?因为Python用户有的时候需要做一个大的项目,经常要做很多函数,用很多模块,一旦重名,就会有很多问题。因此用的时候就要告诉大家我用的read_csv函数是pd的read.csv函数,也就是pandas里面的,不要弄错了。R很多时候只是为了解决一些探索性问题的时候,也许不需要加载过多的包,只需要加载少量专注度很高的包就可以了。但是不是说R就没有注意这个问题,R里面同样可以用命名空间调用函数,可以直接不用加载,用命名空间调用即可,我上面的代码就用到了这个概念,就是我要用pacman里面的p_load函数,我的表达就是pacman::p_load.事实上,R的包现在越来越多,重名的问题也非常严重,加载多个包完成任务的时候,函数往往因为重名互相覆盖掉,所以经常要使用这种“::”格式来指明你要用的是哪个包里面的这个名字的函数。不过很多人在用R的时候都是小项目,因为小,所以专精,上面提到的东西可能往往会忽略;Python则一开始就默认大家要进行复杂的操作,这样一来,就算实现一个及其简单的功能,有时候Python的代码也会长得出奇。

 

大家都在看

R语言二分类问题案例分析:以泰坦尼克号沉船为例

无缝对接Spark与R:Sparklyr系列—探讨属于数据科学家的Spark

公众号后台回复关键字即可学习

回复 爬虫             爬虫三大案例实战  
回复 
Python        1小时破冰入门

回复 数据挖掘      R语言入门及数据挖掘
回复 
人工智能      三个月入门人工智能
回复 数据分析师   数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存