R与Python手牵手:数据框的构建、读取与基本描述
在双11免费Get新知识的人,才是最会花钱的人,也将是最会赚钱的人!
别的专场拼消费,唯有天善学院,投资你的未来!
▲详情点击▲
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。
邮箱:huang.tian-yuan@qq.com
任务目标
这次任务目标是:1.在编程环境内创建数据框;2.在本地导入csv文件;3.进行最基本的数据描述性分析。在开始上代码之前,有必要对数据框这种数据结构进行一定的解释。数据框就是典型的关系型数据库的数据存储形式,每一行是一条记录,每一列是一个属性,最终构成表格的形式,这是数据科学家必须熟悉的最典型的数据结构。
Python
在Python中要使用数据框的类型,需要加载pandas模块。
#加载包
import pandas as pd
构建数据框
data = {'year': [2010, 2011, 2012, 2010, 2011, 2012, 2010, 2011, 2012],
'team': ['FCBarcelona', 'FCBarcelona', 'FCBarcelona', 'RMadrid', 'RMadrid', 'RMadrid', 'ValenciaCF',
'ValenciaCF', 'ValenciaCF'],
'wins': [30, 28, 32, 29, 32, 26, 21, 17, 19],
'draws': [6, 7, 4, 5, 4, 7, 8, 10, 8],
'losses': [2, 3, 2, 4, 2, 5, 9, 11, 11]
}
football = pd.DataFrame(
data, columns=['year', 'team', 'wins', 'draws', 'losses'])
football
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
读取csv文件
下面的csv格式数据可以在以下网址取得:
https://github.com/DataScienceUB/introduction-datascience-python-book
edu = pd.read_csv('G:/Py/introduction-datascience-python-book-master/files/ch02/educ_figdp_1_Data.csv',
na_values=':', usecols=['TIME', 'GEO', 'Value']) #na_values是把“:”符号认为是缺失值的意思
edu
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
.......... .........
384 rows × 3 columns
数据基本描述
#取前几行
edu.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
#取后几行
edu.tail()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
#观察列名称
edu.columns
Index(['TIME', 'GEO', 'Value'], dtype='object')
#观察行名称
edu.index
RangeIndex(start=0, stop=384, step=1)
#汇总统计
edu.describe()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
R
R是面向数据的一门语言,自带数据框类型(data.frame)。不过我们的介绍将会用tidyverse框架下的dplyr介绍,因为它在处理很多问题上更为便捷。
#加载包
pacman::p_load(tidyverse)
构建数据框
year=c(2010, 2011, 2012, 2010, 2011, 2012, 2010, 2011, 2012)
team=c('FCBarcelona', 'FCBarcelona', 'FCBarcelona', 'RMadrid', 'RMadrid', 'RMadrid', 'ValenciaCF',
'ValenciaCF', 'ValenciaCF')
wins=c(30, 28, 32, 29, 32, 26, 21, 17, 19)
draws=c(6, 7, 4, 5, 4, 7, 8, 10, 8)
losses=c(2, 3, 2, 4, 2, 5, 9, 11, 11)
football = tibble(year,team,wins,draws,losses)
football
读取csv文件
read_csv('G:/Py/introduction-datascience-python-book-master/files/ch02/educ_figdp_1_Data.csv',
na=":") %>%#na的设置时把“:”认作缺失值的意思
select(TIME,GEO,Value)-> edu
edu
Parsed with column specification:
cols(
TIME = col_integer(),
GEO = col_character(),
INDIC_ED = col_character(),
Value = col_double(),
`Flag and Footnotes` = col_character()
)
......... .........
数据基本描述
#取前几行
edu %>% head
#取后几行
edu %>% tail
#观察列名称
edu %>% colnames
#观察行名称
edu %>% rownames
(结果太长,在此不展示了~~)
#汇总统计
edu %>% summary
TIME GEO Value
Min. :2000 Length:384 Min. :2.880
1st Qu.:2003 Class :character 1st Qu.:4.620
Median :2006 Mode :character Median :5.060
Mean :2006 Mean :5.204
3rd Qu.:2008 3rd Qu.:5.660
Max. :2011 Max. :8.810
NA's :23
比较分析
首先,从调用的包来说,python没有pandas是不能使用dataframe数据结构的,R则自带有data.frame数据结构,但是在tidyverse生态中的tibble则是增强型的data.frame,能够满足更加便捷的功能。其次,就构造数据框而言,python用了字典来构造(字典即键-值对),其中每个值对应的是一个列表(注意,R和python的列表概念大不相同);在R中,首相通过构造每个属性的向量,然后把同等长度的向量合并,从而构造数据框。再次,读取csv文件的时候,两者其实功能相近,不过pd.read_csv可以在函数中选择要读的列,而在R中我是先读了全数据框再选择这些列。另外需要注意的是,python把缺失值表示为NaN,而R中则是NA。最后,我们发现在描述性数据分析中,两种语言也是大同小异。值得注意的是,python中行名称开头是0,而R则是1.python沿用了计算机的语言,所有开始都是0;而R则更加符合人类的直观理解,开始的一行标注为第1行。
需要提到的是,我在R中用了不一样的编程风格,与传统的R编程也有所不同。比如用“->”来给右边的变量赋值,很多计算机程序员可能会有意见,认为赋值就是右边的东西给左边,其实人类的思考模式向来就是从左到右的,比如“1 + 1 = 2”,再加上管道操作“%>%”也是单向的,这种灵活的编程模式让数据科学家更加自由而富有灵性地在环境中操纵数据。
今日
爆款