ITPub博客

首页 > > > R与Python手牵手:数据框的构建、读取与基本描述

R与Python手牵手:数据框的构建、读取与基本描述

作者:浪花小雨滴 时间:2018-10-22 12:15:50 0 删除 编辑

任务目标

这次任务目标是: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

year team wins draws losses 0 2010 FCBarcelona 30 6 2 1 2011 FCBarcelona 28 7 3 2 2012 FCBarcelona 32 4 2 3 2010 RMadrid 29 5 4 4 2011 RMadrid 32 4 2 5 2012 RMadrid 26 7 5 6 2010 ValenciaCF 21 8 9 7 2011 ValenciaCF 17 10 11 8 2012 ValenciaCF 19 8 11

读取csv文件

下面的csv格式数据可以在以下网址取得:github.com/DataScienceU

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

TIME GEO Value 0 2000 European Union (28 countries) NaN 1 2001 European Union (28 countries) NaN 2 2002 European Union (28 countries) 5.00 3 2003 European Union (28 countries) 5.03 4 2004 European Union (28 countries) 4.95 5 2005 European Union (28 countries) 4.92 6 2006 European Union (28 countries) 4.91 7 2007 European Union (28 countries) 4.92 8 2008 European Union (28 countries) 5.04 9 2009 European Union (28 countries) 5.38 10 2010 European Union (28 countries) 5.41 11 2011 European Union (28 countries) 5.25 12 2000 European Union (27 countries) 4.91 13 2001 European Union (27 countries) 4.99 14 2002 European Union (27 countries) 5.00 15 2003 European Union (27 countries) 5.04 16 2004 European Union (27 countries) 4.95 17 2005 European Union (27 countries) 4.92 18 2006 European Union (27 countries) 4.91 19 2007 European Union (27 countries) 4.93 20 2008 European Union (27 countries) 5.04 21 2009 European Union (27 countries) 5.38 22 2010 European Union (27 countries) 5.41 23 2011 European Union (27 countries) 5.25 24 2000 European Union (25 countries) 4.94 25 2001 European Union (25 countries) 5.02 26 2002 European Union (25 countries) 5.03 27 2003 European Union (25 countries) 5.06 28 2004 European Union (25 countries) 4.98 29 2005 European Union (25 countries) 4.95 ... ... ... ... 354 2006 Slovenia 5.72 355 2007 Slovenia 5.15 356 2008 Slovenia 5.20 357 2009 Slovenia 5.69 358 2010 Slovenia 5.68 359 2011 Slovenia 5.68 360 2000 Slovakia 3.92 361 2001 Slovakia 3.99 362 2002 Slovakia 4.31 363 2003 Slovakia 4.30 364 2004 Slovakia 4.19 365 2005 Slovakia 3.85 366 2006 Slovakia 3.80 367 2007 Slovakia 3.62 368 2008 Slovakia 3.61 369 2009 Slovakia 4.09 370 2010 Slovakia 4.22 371 2011 Slovakia 4.06 372 2000 Finland 5.89 373 2001 Finland 6.06 374 2002 Finland 6.22 375 2003 Finland 6.43 376 2004 Finland 6.42 377 2005 Finland 6.30 378 2006 Finland 6.18 379 2007 Finland 5.90 380 2008 Finland 6.10 381 2009 Finland 6.81 382 2010 Finland 6.85 383 2011 Finland 6.76 384 rows × 3 columns

数据基本描述

#取前几行
edu.head()

TIME Value count 384.000000 361.000000 mean 2005.500000 5.203989 std 3.456556 1.021694 min 2000.000000 2.880000 25% 2002.750000 4.620000 50% 2005.500000 5.060000 75% 2008.250000 5.660000 max 2011.000000 8.810000

#取后几行
edu.tail()

TIME GEO Value 379 2007 Finland 5.90 380 2008 Finland 6.10 381 2009 Finland 6.81 382 2010 Finland 6.85 383 2011 Finland 6.76

#观察列名称
edu.columns
Index(['TIME', 'GEO', 'Value'], dtype='object')
#观察行名称
edu.index
RangeIndex(start=0, stop=384, step=1)
#汇总统计
edu.describe()

TIME Value count 384.000000 361.000000 mean 2005.500000 5.203989 std 3.456556 1.021694 min 2000.000000 2.880000 25% 2002.750000 4.620000 50% 2005.500000 5.060000 75% 2008.250000 5.660000 max 2011.000000 8.810000

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

yearteamwinsdrawslosses2010 FCBarcelona30 6 2 2011 FCBarcelona28 7 3 2012 FCBarcelona32 4 2 2010 RMadrid 29 5 4 2011 RMadrid 32 4 2 2012 RMadrid 26 7 5 2010 ValenciaCF 21 8 9 2011 ValenciaCF 17 10 11 2012 ValenciaCF 19 8 11

读取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()
)

TIMEGEOValue2000 European Union (28 countries) NA 2001 European Union (28 countries) NA 2002 European Union (28 countries)5.00 2003 European Union (28 countries)5.03 2004 European Union (28 countries)4.95 2005 European Union (28 countries)4.92 2006 European Union (28 countries)4.91 2007 European Union (28 countries)4.92 2008 European Union (28 countries)5.04 2009 European Union (28 countries)5.38 2010 European Union (28 countries)5.41 2011 European Union (28 countries)5.25 2000 European Union (27 countries)4.91 2001 European Union (27 countries)4.99 2002 European Union (27 countries)5.00 2003 European Union (27 countries)5.04 2004 European Union (27 countries)4.95 2005 European Union (27 countries)4.92 2006 European Union (27 countries)4.91 2007 European Union (27 countries)4.93 2008 European Union (27 countries)5.04 2009 European Union (27 countries)5.38 2010 European Union (27 countries)5.41 2011 European Union (27 countries)5.25 2000 European Union (25 countries)4.94 2001 European Union (25 countries)5.02 2002 European Union (25 countries)5.03 2003 European Union (25 countries)5.06 2004 European Union (25 countries)4.98 2005 European Union (25 countries)4.95 .........2006 Slovenia5.72 2007 Slovenia5.15 2008 Slovenia5.20 2009 Slovenia5.69 2010 Slovenia5.68 2011 Slovenia5.68 2000 Slovakia3.92 2001 Slovakia3.99 2002 Slovakia4.31 2003 Slovakia4.30 2004 Slovakia4.19 2005 Slovakia3.85 2006 Slovakia3.80 2007 Slovakia3.62 2008 Slovakia3.61 2009 Slovakia4.09 2010 Slovakia4.22 2011 Slovakia4.06 2000 Finland 5.89 2001 Finland 6.06 2002 Finland 6.22 2003 Finland 6.43 2004 Finland 6.42 2005 Finland 6.30 2006 Finland 6.18 2007 Finland 5.90 2008 Finland 6.10 2009 Finland 6.81 2010 Finland 6.85 2011 Finland 6.76

数据基本描述

#取前几行
edu %>% head

TIMEGEOValue2000 European Union (28 countries) NA 2001 European Union (28 countries) NA 2002 European Union (28 countries)5.00 2003 European Union (28 countries)5.03 2004 European Union (28 countries)4.95 2005 European Union (28 countries)4.92

#取后几行
edu %>% tail

TIMEGEOValue2006 Finland6.18 2007 Finland5.90 2008 Finland6.10 2009 Finland6.81 2010 Finland6.85 2011 Finland6.76

#观察列名称
edu %>% colnames
  1. 'TIME'
  2. 'GEO'
  3. 'Value'
#观察行名称
edu %>% rownames
  1. '1'
  2. '2'
  3. '3'
  4. ...
  5. '383'
  6. '384'
#汇总统计
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”,再加上管道操作“%>%”也是单向的,这种灵活的编程模式让数据科学家更加自由而富有灵性地在环境中操纵数据。

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39834