【R和Python对比】数据导入和初步整理
2017-07-11 11:03
120 查看
现在为止,大概用半年的时间了解R,包括基础的数据清洗和处理、统计分布、ggplot的画图、机器学习建模以及R的爬虫。可以说到现在为止,R已经成了数据分析不可或缺的工具,并且确实提高了效率和扩展了数据分析的广度。然而正如从小白的excel到excel函数到vba到R的进化一样,尽管电脑的12G内存可以处理千万级数据,正如excel和R的比较:excel只能处理统计性数据,但是R除了可以直接处理数据以外,还可以爬取数据,建模等一系列工作,并且可以修改本地的文件等等,但是还不够,因为python的扩展性更强,可以囊括爬虫、网络后台、数据科学、作图(好像一直是python的弱项?)等一系列功能。
扫过一眼《利用python进行数据分析》,里面讲的应用pandas和numpy包进行数据处理和清洗,但是怎么也看不进去,究其原因是这本书不太适合我;如果我没有学过R,这本书是一本非常好的入门教材,然而对于学习过其他语言的(SPSS/SAS/R)的人来说,基本上有一套数据分析的思路和流程,反而类比来看效果会更好;未来希望可以对比着研究R和python的关系和语法区别,希望三个月内,python可以用的像R一样熟练。
简单来说,数据分析步骤就是:
提取–清洗–探索–挖掘
先说提取数据,这部分主要针对研究的方面,进行数据的提取,提取包含从服务器中进行数据的初步提取,也就是SQL的提取;或者从网络上提取,也就是R的curl或py的scrapy;如果单机版玩家,拿到的数据就是自己推给自己的csv文件,也就有了数据分析的基础。
数据清洗:数据清洗这块是数据分析软件的强项,也是最难的地方之一;数据有不同维度,需要通过各种方式进行整合,判断;需要增添数据,或者去除异常值,或者从数据中提取少量进行分割
数据探索:数据探索是拿到这个数据最后想形成什么样预设结论,方法包括描述性统计、探索性画图找规律,做一些简单的假设检验等等,这块属于浅尝辄止:通过广撒网,确定几个深入研究的方向
最后就是数据挖掘,通过探索判定几个方向,后续可以利用各类建模的方式进行后续数据的预测和分析,或者继续探索数据异常的原因。
接下来就可以通过这些类比R和python了。
先说操作环境,R的Rstudio会对应python的pycharm,二者风格类似,可以无缝切换。
R一般会使用下面这两个函数进行包的安装和载入:
由于我比较懒,一般都是到pycharm搜索包,然后直接安装,原生python可以用pip进行获取,然后载入包,比如pandas
import函数=R的library,但是R有个缺点,很多包的函数相同的时候,会有一些函数被mask,也就是失效;而python这点算是个优点,比如:
以后很多pandas中的函数,都需要加上一个pd.xxx;除非在开头直接导入函数,比如导入了series和dataframe函数,可以不用前缀直接使用。
之前的R中的iris数据集我存到了csv文件中,需要读取,R中有
而python和这个类似:
read_csv函数前面就加了个pd前缀。
那么我们就导入了数据,但是查看数据的时候,我们不可能看数据的全集,太大了,需要看一下头几条,R中是
py中对应:
比如输入iris.head(),默认显示五条数据:
如果想多显示点,可以设定参数:
同时,有head就有tail:
head和tail是针对数据全局的观测,但是毕竟不是很全面,在R中一般会使用两个函数进行数据的整体情况观察:
这两个函数的区别是summary偏向于对所有列的描述性统计,而str主要介绍每个列是什么,对应python的describe和info,比如:
describe可以看到不同列的各类分位数的情况,然后info:
info更偏向于每个列的属性是什么。
然而和R相比,我们的Species这一列,也就是因子这一列,是没有描述性统计的如果硬要统计下:
顺便说一句,
等同于R中的
回到describe,会出来
也就是说,还是没有因子的分布,这块还是比较重要的,所以我们只能手工计算:
得到:
一般在数据分析的时候会选择特定的行和列进行筛选或截取,在R中一般都是:
在py中一般应用iloc函数和loc函数,iloc里面需要有数字,而loc里面可以有具体的行列标,举个例子:
是一样的都是:
初次之外,如果想选择多列,R中是
py中用大括号替代向量,为
结果为:
同样的,后面可以跟着描述性统计的各种值:
比如均值、求和、方差、中位数、分布,分位数等等;
最后就是移除NA,这个R中倒是比较复杂,一般是定位到NA这一行,或者用complete.cases()来判断,相比R,py简单的多:
首先创造一个NA值:
replace函数是替换,就是把1替换成nan:
截取了一部分数据作为base数据集,然后一般情况下是去除这一行:
或者去除一列:
扫过一眼《利用python进行数据分析》,里面讲的应用pandas和numpy包进行数据处理和清洗,但是怎么也看不进去,究其原因是这本书不太适合我;如果我没有学过R,这本书是一本非常好的入门教材,然而对于学习过其他语言的(SPSS/SAS/R)的人来说,基本上有一套数据分析的思路和流程,反而类比来看效果会更好;未来希望可以对比着研究R和python的关系和语法区别,希望三个月内,python可以用的像R一样熟练。
简单来说,数据分析步骤就是:
提取–清洗–探索–挖掘
先说提取数据,这部分主要针对研究的方面,进行数据的提取,提取包含从服务器中进行数据的初步提取,也就是SQL的提取;或者从网络上提取,也就是R的curl或py的scrapy;如果单机版玩家,拿到的数据就是自己推给自己的csv文件,也就有了数据分析的基础。
数据清洗:数据清洗这块是数据分析软件的强项,也是最难的地方之一;数据有不同维度,需要通过各种方式进行整合,判断;需要增添数据,或者去除异常值,或者从数据中提取少量进行分割
数据探索:数据探索是拿到这个数据最后想形成什么样预设结论,方法包括描述性统计、探索性画图找规律,做一些简单的假设检验等等,这块属于浅尝辄止:通过广撒网,确定几个深入研究的方向
最后就是数据挖掘,通过探索判定几个方向,后续可以利用各类建模的方式进行后续数据的预测和分析,或者继续探索数据异常的原因。
接下来就可以通过这些类比R和python了。
先说操作环境,R的Rstudio会对应python的pycharm,二者风格类似,可以无缝切换。
R一般会使用下面这两个函数进行包的安装和载入:
install.package('') library()
由于我比较懒,一般都是到pycharm搜索包,然后直接安装,原生python可以用pip进行获取,然后载入包,比如pandas
from pandas import Series,DataFrame import pandas as pd import numpy as np
import函数=R的library,但是R有个缺点,很多包的函数相同的时候,会有一些函数被mask,也就是失效;而python这点算是个优点,比如:
import pandas as pd
以后很多pandas中的函数,都需要加上一个pd.xxx;除非在开头直接导入函数,比如导入了series和dataframe函数,可以不用前缀直接使用。
之前的R中的iris数据集我存到了csv文件中,需要读取,R中有
read.csv()
而python和这个类似:
import csv iris=pd.read_csv('D:\\python study\\iris.csv')
read_csv函数前面就加了个pd前缀。
那么我们就导入了数据,但是查看数据的时候,我们不可能看数据的全集,太大了,需要看一下头几条,R中是
head(iris)
py中对应:
iris.head()
比如输入iris.head(),默认显示五条数据:
iris.head() Sepal.Length Sepal.Width Petal.Length Petal.Width Species 0 5.1 3.5 1.4 0.2 setosa 1 4.9 3.0 1.4 0.2 setosa 2 4.7 3.2 1.3 0.2 setosa 3 4.6 3.1 1.5 0.2 setosa 4 5.0 3.6 1.4 0.2 setosa
如果想多显示点,可以设定参数:
iris.head(10) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 0 5.1 3.5 1.4 0.2 setosa 1 4.9 3.0 1.4 0.2 setosa 2 4.7 3.2 1.3 0.2 setosa 3 4.6 3.1 1.5 0.2 setosa 4 5.0 3.6 1.4 0.2 s 4000 etosa 5 5.4 3.9 1.7 0.4 setosa 6 4.6 3.4 1.4 0.3 setosa 7 5.0 3.4 1.5 0.2 setosa 8 4.4 2.9 1.4 0.2 setosa 9 4.9 3.1 1.5 0.1 setosa
同时,有head就有tail:
iris.tail(10) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 140 6.7 3.1 5.6 2.4 virginica 141 6.9 3.1 5.1 2.3 virginica 142 5.8 2.7 5.1 1.9 virginica 143 6.8 3.2 5.9 2.3 virginica 144 6.7 3.3 5.7 2.5 virginica 145 6.7 3.0 5.2 2.3 virginica 146 6.3 2.5 5.0 1.9 virginica 147 6.5 3.0 5.2 2.0 virginica 148 6.2 3.4 5.4 2.3 virginica 149 5.9 3.0 5.1 1.8 virginica
head和tail是针对数据全局的观测,但是毕竟不是很全面,在R中一般会使用两个函数进行数据的整体情况观察:
summary() str()
这两个函数的区别是summary偏向于对所有列的描述性统计,而str主要介绍每个列是什么,对应python的describe和info,比如:
iris.describe() Sepal.Length Sepal.Width Petal.Length Petal.Width count 150.000000 150.000000 150.000000 150.000000 mean 5.843333 3.057333 3.758000 1.199333 std 0.828066 0.435866 1.765298 0.762238 min 4.300000 2.000000 1.000000 0.100000 25% 5.100000 2.800000 1.600000 0.300000 50% 5.800000 3.000000 4.350000 1.300000 75% 6.400000 3.300000 5.100000 1.800000 max 7.900000 4.400000 6.900000 2.500000
describe可以看到不同列的各类分位数的情况,然后info:
iris.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 150 entries, 0 to 149 Data columns (total 5 columns): Sepal.Length 150 non-null float64 Sepal.Width 150 non-null float64 Petal.Length 150 non-null float64 Petal.Width 150 non-null float64 Species 150 non-null object dtypes: float64(4), object(1) memory usage: 5.3+ KB
info更偏向于每个列的属性是什么。
然而和R相比,我们的Species这一列,也就是因子这一列,是没有描述性统计的如果硬要统计下:
iris['Species'].describe()
顺便说一句,
iris['Species']
等同于R中的
iris$Species
回到describe,会出来
iris['Species'].describe() count 150 unique 3 top setosa freq 50 Name: Species, dtype: object
也就是说,还是没有因子的分布,这块还是比较重要的,所以我们只能手工计算:
iris['Species'].value_counts() #模拟R的因子分布
得到:
setosa 50 versicolor 50 virginica 50 Name: Species, dtype: int64
一般在数据分析的时候会选择特定的行和列进行筛选或截取,在R中一般都是:
iris$Species #取Species列 iris[,5] #取第五列 iris[1:5,5] #取1:5行,第五列 iris[1:5,3:5] #取1:5行,3:5列
在py中一般应用iloc函数和loc函数,iloc里面需要有数字,而loc里面可以有具体的行列标,举个例子:
iris.iloc[:,4].head() iris.loc[:,'Species'].head()
是一样的都是:
0 setosa 1 setosa 2 setosa 3 setosa 4 setosa Name: Species, dtype: object
初次之外,如果想选择多列,R中是
iris[,c('Sepal.Length','Species')]
py中用大括号替代向量,为
iris.loc[:,{'Sepal.Length','Species'}].head()
结果为:
Sepal.Length Species 0 5.1 setosa 1 4.9 setosa 2 4.7 setosa 3 4.6 setosa 4 5.0 setosa
同样的,后面可以跟着描述性统计的各种值:
iris.iloc[:,1].mean() iris.iloc[:,1].sum() iris.iloc[:,1].var() iris.iloc[:,1].median() iris.iloc[:,1].max() iris.iloc[:,1].min() iris.iloc[:,1].value_counts() iris.iloc[:,1].quantile(0.95) #pandas 95分位数
比如均值、求和、方差、中位数、分布,分位数等等;
最后就是移除NA,这个R中倒是比较复杂,一般是定位到NA这一行,或者用complete.cases()来判断,相比R,py简单的多:
首先创造一个NA值:
iris_na=iris.replace(1,np.nan).loc[20:25,:]
replace函数是替换,就是把1替换成nan:
iris_na Sepal.Length Sepal.Width Petal.Length Petal.Width Species 20 5.4 3.4 1.7 0.2 setosa 21 5.1 3.7 1.5 0.4 setosa 22 4.6 3.6 NaN 0.2 setosa 23 5.1 3.3 1.7 0.5 setosa 24 4.8 3.4 1.9 0.2 setosa 25 5.0 3.0 1.6 0.2 setosa
截取了一部分数据作为base数据集,然后一般情况下是去除这一行:
iris_na.dropna()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species 20 5.4 3.4 1.7 addb 0.2 setosa 21 5.1 3.7 1.5 0.4 setosa 23 5.1 3.3 1.7 0.5 setosa 24 4.8 3.4 1.9 0.2 setosa 25 5.0 3.0 1.6 0.2 setosa
或者去除一列:
iris_na.dropna(1) Sepal.Length Sepal.Width Petal.Width Species 20 5.4 3.4 0.2 setosa 21 5.1 3.7 0.4 setosa 22 4.6 3.6 0.2 setosa 23 5.1 3.3 0.5 setosa 24 4.8 3.4 0.2 setosa 25 5.0 3.0 0.2 setosa
相关文章推荐
- Python实战(6)单线程和多线程导入mysql数据对比测试
- Python实战(6)单线程和多线程导入mysql数据对比测试
- 利用python简化sql server数据导入导出
- 数据导入之前与导入之后的对比
- oracle技术之oracle 10g数据泵和导入导出性能对比(五)
- oracle 10g数据泵和导入导出性能对比(六)
- myisam 和 innodb的导入数据的时间对比
- 【整理】各种Python的IDE(集成开发环境)的总结和对比
- Oracle 数据导入整理
- awk整理数据并导入到数据库
- Oracle中用exp/imp命令快速导入导出数据(整理)
- 使用Python将数据从Access导入到MySQL
- Oracle中用exp/imp命令快速导入导出数据(整理)
- Python > 3.0导入库整理
- Oracle中用exp/imp命令快速导入导出数据(整理)
- 用Python 模块xlrd 操作excel,并将数据导入MySQL
- SQL SERVER使用OpenRowset,、OpenDataSource函数导入、导出数据到Excel 的几种方法(整理)
- oracle 10g数据泵和导入导出性能对比(三)
- oracle 10g数据泵和导入导出性能对比(一)
- 如何将dataSet中的数据导入到Excel文件(*.xls)整理