本文旨在帮助R用户增强技能并(从头开始)学习Python以进行高级数据科学。毕竟,R和Python是数据科学从业者必须掌握的最重要的两种编程语言。Python是一种功能强大且用途广泛的编程语言,在过去几年中发展迅速。以前用于web开发和游戏开发,现在也用于数据分析和机器学习。数据分析和机器学习是Python应用程序中相对较新的分支。作为初学者,学习Python做数据分析是比较痛苦的。为什么?谷歌“LearnPython”,你会发现大量的教程,但内容只是关于学习Python用于Web开发应用程序。那你怎么知道呢?在本教程中,我们将探索用于执行数据操作任务的Python基础知识。同时,我们还将比较它在R上的工作方式。这种并排比较有助于您将R和Python上的任务关联起来。***,我们将使用数据集来练习我们新发现的Python技能。注意:阅读本文时,您必须具备一定的R基础知识。内容概要为什么要学习Python(即使你已经了解R)了解Python数据类型和结构(对比R)用Python编写代码(对比R)使用数据集练习Python为什么要学习Python(即使你已经了解R)毫无疑问,R本身就非常强大,事实上,它最初是为统计计算和操作而开发的。强大的社区支持让初学者很容易掌握R。然而,Python正在迎头赶上,无论是老牌公司还是初创企业对Python的接受度都远高于R。根据indeed.com提供的数据(1月2016-2016年12月),“使用Python进行机器学习”的职位发布数量增长速度远远超过“使用R进行机器学习”(约123%)。原因如下:Python以更好的方式支持全面的机器学习覆盖范围。Python不仅支持模型构建,还支持模型部署。相对于R,Python支持keras、convnet、theano、tensorflow等多种强大的深度学习库。Python的库相对独立,每个库都有数据科学家需要的所有功能。您无需像在R中那样在各种包之间来回寻找函数。了解Python数据类型和结构(与R相比)编程语言根据变量和数据类型理解复杂的数据集。是的,假设您有一个包含100万行和50列的数据集。编程语言如何理解这些数据?基本上,R和Python都有未定义的数据类型。自变量和因变量都具有不同的数据类型。解释器根据数据类型分配内存。Python支持的数据类型包括:1.数字——存储值。这些值可以存储为4种类型:Integer、Long、Float和Complex。分开来理解吧。Integer-指整数类型,如10、13、91、102等。相当于R中的整数。Long-指用八进制或十六进制表示的长整数,在R中,使用64位包读取十六进制值。Float——指十进制值,如1.23、9.89等。R中的浮点数都包含在numeric中。复杂(Complex)——它指的是复杂的值,比如2+3i、5i等。不过,这种数据类型在数据中并不常见。2.布尔(Boolean)——布尔只存储两个值(True和False)。在R中,它可以存储为因子类型或字符类型。R和Python布尔值之间存在细微差别。在R中,布尔值存储为TRUE和FALSE。在Python中,它们存储为True和False。字母的大小写不同。3、字符串(Strings)——存储文本(字符)数据,如“大象”、“莲花”等,相当于R的字符类型(character)。4、列表——与R的列表数据相同类型。它能够存储各种变量类型的值,例如字符串、整数、布尔值等。5.元组——R中没有元组类型。把元组想象成R中的一个向量,它的值是不能改变的。即它是不可变的。6.Dictionary——它提供了一个支持键值对的二维结构。简而言之,将键视为列名,将键对视为列值。因为R是一种统计计算语言,所有操作数据和读取变量的函数都是固有的。另一方面,Python的数据分析、处理和可视化功能都是从外部库中调用的。Python有几个用于数据操作和机器学习的库。下面列出了最重要的一些:Numpy-它在Python中用于数值计算。它提供了一个庞大的数学函数库,例如线性代数和统计。它主要用于创建数组。在R中,将数组视为列表。它包含一个类(数字或字符串或布尔值)或多个类。它可以是一维的或多维的。Scipy-在Python中,它用于科学计算。Matplotlib-它用于Python中的数据可视化。在R中,我们使用著名的ggplot2库。Pandas-它对于数据处理任务非常强大。在R中,我们使用dplyr、data.table等包。ScikitLearn-它是实现机器学习算法的强大工具。事实上,它也是python中机器学习的最佳工具。它包含建模所需的所有功能。从某种程度上说,数据科学家最重要的就是掌握上面提到的Python库。但是人们开始使用的高级Python库太多了。因此,出于实际目的,您应该牢记以下几点:数组——这类似于R的列表。它可以是多维的。它可以包含相同或多个类的数据。在多个类的情况下,会发生转换。List-相当于R中的List。DataFrame-是一个包含多个列表的二维结构。R有内置函数data.frame,Python调用pandas库中的Dataframe函数。矩阵-它是一个二维(或多维)结构,包含同一类(或多个类)的所有值。将矩阵视为向量的二维版本。在R中,我们使用矩阵函数。在Python中,我们使用numpy.column_stack函数。至此,我希望您已经了解R和Python中数据类型和数据结构的基础知识。现在,让我们开始应用它们。用Python编写代码(对比R)现在让我们使用我们在前几节中学到的知识并理解它们的实际含义。但在此之前,您必须通过Anaconda的jupyternotebook(以前称为ipythonnotebook)安装Python。您可以点击这里下载。我希望您已经在计算机上安装了RStudio。创建列表在R中,使用列表函数创建列表my_list<-list('monday','specter',24,TRUE)typeof(my_list)[1]"list"在Python中,使用公式Brackets创建列表[].my_list=['monday','specter',24,True]type(my_list)list在pandas库中也可以得到相同的输出,这里的lists被称为sequences。用Python安装pandas,写:#importingpandaslibraryaspdnotation(youcanuseanynotation)#调用pandas库importpandasaspdpd_list=pd.Series(my_list)pd_list0monday1specter2243True数字(0,1,2,3)表示数组索引。你注意到什么了吗?Python索引从0开始,而R的索引从1开始。让我们继续讨论R和Python中子集列表的区别。#createalist#创建列表new_list<-list(roll_number=1:10,Start_Name=LETTERS[1:10])把new_list当作火车。这列火车有两节车厢,名为roll_number和Start_Name。每个隔间里有10个人。所以,在列表构建子集中,我们可以提取车的值,车上的人等等。[1]12345678910#extractonlypeoplesittinginfirstcoach#提取坐在第一节车厢的人new_list[[1]]#ordf$roll_number#[1]12345678910查一下new_list[1]的类型,会发现是一个列表,而new_list[[1]]是一个字符。同样,在Python中,您可以提取列表组件:#createanewlist#Createanewlistnew_list=pd.Series({'Roll_number':range(1,10),'Start_Name':map(chr,range(65,70))})Roll_number[1,2,3,4,5,6,7,8,9]Start_Name[A,B,C,D,E]dtype:object#extractingfirstcoach#extractingfirstcoachnew_list[['Roll_number']]#ornew_list[[0]]Roll_number[1,2,3,4,5,6,7,8,9]dtype:object#extractpeoplesittinginfirstcoach#提取坐在第一位教练的人new_list['Roll_number']#ornew_list.Roll_number[1,2,3,4,5,6,7,8,9]R和Python列表索引之间存在令人困惑的区别。如果您注意到在R中[[]]表示获取汽车的元素,而Python中的[[]]表示获取汽车本身。2.矩阵矩阵是由向量(或数组)组成的二维结构。通常,矩阵包含同一类的元素。但是,即使混合不同类(字符串、布尔值、数字等)的元素,它仍然有效。R和Python在矩阵中构造子集的方式相似,除了索引号。重申一下,Python索引号从0开始,R索引号从1开始。在R中,矩阵可以这样创建:my_mat<-matrix(1:10,nrow=5)my_mat#toselectfirstrow#Select***rowmy_mat[1,]#toselectsecondcolumn#Selectthesecondcolumnmy_mat[,2]在Python中,我们从NumPy数组创建一个矩阵。因此,我们首先需要加载NumPy库。importnumpyasnpa=np.array(range(10,15))b=np.array(range(20,25))c=np.array(range(30,35))my_mat=np.column_stack([a,b,c])#toselectfirstrow#选择***行my_mat[0,]#toselectsecondcolumn#选择第二列my_mat[:,1]3.数据框数据框是从多个来源收集的松散数据,提供了急需的骨架。其类似电子表格的结构让数据科学家可以很好地了解数据集的外观。在R中,我们使用data.frame()函数创建数据框。data_set<-data.frame(Name=c("Sam","Paul","Tracy","Peter"),Hair_Colour=c("Brown","White","Black","Black"),Score=c(45,89,34,39))嗯,我们知道数据框是由向量(列表)的组合创建的。要在Python中创建数据框,我们将创建一个字典(数组的组合)并将该字典附加到pandas库的Dataframe()函数中。data_set=pd.DataFrame({'Name':["Sam","Paul","Tracy","Peter"],'Hair_Colour':["Brown","White","Black","Black"],'Score':[45,89,34,39]})现在,让我们看看操作数据框最关键的部分,构建子集。事实上,大多数数据操作涉及从每个可能的角度切割数据框。让我们一个一个地看任务:#selectfirstcolumninR#Selectrowdata_set$NameinR#ordata_set[["Name]]#ordata_set[1]#selectfirstcolumninPython#Selectcolumndata_set['Name'inPython]#ordata_set.Name#ordata_set[[0]]#selectmultiplecolumnsinR#在R中选择多列data_set[c('Name','Hair_Colour')]#ordata_set[,c('Name','Hair_Colour')]#selectmultiplecolumnsinPython#在Python中选择多行data_set[['Name','Hair_Colour']]#ordata_set.loc[:,['Name','Hair_Colour']].loc函数用于基于标签的索引这里我们大致了解数据类型、结构和格式在R和Python中。让我们使用数据集来探索Python中数据的其他方面。使用数据集练习Python数据集,是做数据分析时非常流行的数据集。#importlibraries#调用库importnumpyasnpimportpandasasdfromsklearn.datasetsimportload_boston#storeinavariable#存储在一个变量中boston=load_boston()变量boston是一个字典。概括地说,字典是键值对的组合。让我看一下关键信息:boston.keys()['data','feature_names','DESCR','target']现在我们知道我们需要数据集驻留在关键数据中。我们还看到函数名称有一个单独的键。我不认为数据集被分配了列名。让我们检查一下我们正在处理的列名。print(boston['feature_names'])['CRIM''ZN''INDUS''CHAS''NOX''RM''AGE''DIS''RAD''TAX''PTRATIO''B''LSTAT']你能看懂这些名字吗?我也不知道。现在,让我们检查数据描述并了解每个变量的含义。print(boston['DESCR'])这个数据集有506行和13列。它包含几个有助于确定波士顿房价的特征。现在,让我们创建一个数据框:bos_data=pd.DataFrame(boston['data'])与R类似,python也有一个head()函数来读取数据:bos_data.head()输出显示数据集没有列名(如上)。将列名称分配给数据框很容易。bos_data.columns=boston['feature_names']bos_data.head()就像R中的dim()函数一样,Python有一个shape()函数来检查数据集的维度。为了获得数据集的统计摘要,我们编写:bos_data.describe()显示数据中列的统计摘要。让我们快速探索此数据的其他方面。#getfirst10rows#获取***10行的bos_data.iloc[:10]#selectfirst5columns#选择***前5列bos_data.loc[:,'CRIM':'NOX']#orbos_data.iloc[:,:5]#filtercolumnsbasedononacondition#基于条件过滤列bos_data.query("CRIM>0.05&CHAS==0")#samplethedataset#构造数据集样本bos_data.sample(n=10)#sortvalues-defaultisascending#分类上升默认值bos_data.sort_values(['CRIM'].head()#orbos_data.sort_values(['CRIM'],ascending=False).head()#renameacolumn#重命名列bos_data.rename(columns={'CRIM':'CRIM_NEW'})#findmeanofselectedcolumns#求所选列的均值bos_data[['ZN','RM']].mean()#transformanumericdataintocategorical#将数值数据转换成类别bos_data['ZN_Cat']=pd.cut(bos_data['ZN'],bins=5,labels=['a','b','c','d','e'])#calculatethemeanageforZN_Catvariable#计算ZN_Cat变量的平均年龄bos_data.groupby('ZN_Cat')['AGE'].sum()此外,Python允许我们创建数据透视表。是的!就像MSExcel或任何其他电子表格软件,您可以创建数据透视表以更仔细地查看数据。不幸的是,在R中创建数据透视表是一个相当复杂的过程。在Python中,数据透视表需要行名、列名和值来计算。如果我们不传递任何列名,结果将与使用groupby函数得到的结果一样。因此,让我们创建另一个分类变量。#createanewcategoricalvariable#创建一个新的分类变量bos_data['NEW_AGE']=pd.cut(bos_data['AGE'],bins=3,labels=['Young','Old','Very_Old'])#createapivottablecalculatingmeanageperZN_Catvariable#创建用于计算每个ZN_Cat变量年龄的数据透视表bos_data.pivot_table(values='DIS',index='ZN_Cat',columns='NEW_AGE',aggfunc='mean')这只是冰山一角。下一步是什么?就像我们使用了波士顿住房数据集一样,现在你可以试试Anderson鸢尾花数据集(鸢尾花数据)。它在sklearn_datasets库中可用。尝试深入挖掘。记住,你练习得越多,投入的时间越多,你就会做得越好。总结总的来说,学习这两种语言会让你有足够的信心来处理任何类型的数据集。其实学习python最好的一点就是它有全面的numpy、pandas、scikitlearn库的文档,足以帮你跨越所有的初始障碍。
