본문 바로가기
통계프로그램 비교 시리즈/데이터 전처리 비교

통계프로그램 비교 시리즈 – [변수와 관측치 선택] 2. 관측치 선택( WHERE, IF, SELECT IF )

by 기서무나구물 2022. 1. 7.

포스팅 목차

    [변수와 관측치 선택] 2. 관측치 선택( WHERE, IF, SELECT IF )

     


    1. Proc SQL

     

    • where 문을 이용하여 해당 관측치 선택;
    SAS Programming
    proc sql;
      create table mydata2_1 as
        select *
        from   BACK.mydata
        where  gender = 'm';
        select * from mydata2_1;
    quit;

     

    Results
    id  workshop  gender          q1        q2        q3        q4
    --------------------------------------------------------------
     5         1  m                4         5         2         4
     6         2  m                5         4         5         5
     7         1  m                5         3         4         4
     8         2  m                4         5         5         5

     

     

    SAS Programming
    proc sql;
      create table mydata2_2 as
        select *
        from   BACK.mydata
        where  gender = 'm' and q4=5;
    
        select * from mydata2_2;
    quit;

     

    Results
    id  workshop  gender          q1        q2        q3        q4
    --------------------------------------------------------------
     6         2  m                5         4         5         5
     8         2  m                4         5         5         5

     


    2. SAS Programming

     

    • 관측치 선택을 위한 SAS 프로그램.
    • Where 구문을 이용한 관측치 선택;
    SAS Programming
    PROC PRINT data=BACK.mydata;
         WHERE gender='m';
    RUN;

     

    Results
    OBS    id    workshop    gender    q1    q2    q3    q4
     5      5        1         m        4     5     2     4
     6      6        2         m        5     4     5     5
     7      7        1         m        5     3     4     4
     8      8        2         m        4     5     5     5

     

     

    SAS Programming
    PROC PRINT data=BACK.mydata;
          WHERE gender="m" & q4=5;
    RUN;

     

    Results
    OBS    id    workshop    gender    q1    q2    q3    q4
     6      6        2         m        5     4     5     5
     8      8        2         m        4     5     5     5

     

    • Where 구문을 이용한 데이터 생성;
    SAS Programming
    DATA BACK.males;
     SET BACK.mydata;
         WHERE gender="m";
    RUN;
    
    PROC PRINT;RUN;

     

    Results
    OBS    id    workshop    gender    q1    q2    q3    q4
     1      5        1         m        4     5     2     4
     2      6        2         m        5     4     5     5
     3      7        1         m        5     3     4     4
     4      8        2         m        4     5     5     5

     

     

    SAS Programming
    DATA BACK.females;
     SET BACK.mydata;
         WHERE gender="f";
    RUN;
    
    PROC PRINT;
    RUN;

     

    Results
    OBS    id    workshop    gender    q1    q2    q3    q4
     1      1        1         f        1     1     5     1
     2      2        2         f        2     1     4     1
     3      3        1         f        2     2     4     3
     4      4        2         f        3     1     .     3

     


    3. SPSS

    • 관측치 선택을 위한 SPSS 프로그램.
    SPSS Programming
    TEMPORARY.
    SELECT IF(gender = "m").
    LIST.
    EXECUTE.
    
    TEMPORARY.
    SELECT IF(gender = "m" & q2 >= 5).
    LIST.
    EXECUTE.
    
    TEMPORARY.
    SELECT IF(gender = "m").
    SAVE OUTFILE='C:\males.sav'.
    EXECUTE .
    
    TEMPORARY.
    SELECT IF(gender = "f").
    SAVE OUTFILE='C:\females.sav'.
    EXECUTE .

     


    4. R Programming (R-PROJECT)

     

    R Programming
    from rpy2.robjects import r
    %load_ext rpy2.ipython

     

    Results
    The rpy2.ipython extension is already loaded. To reload it, use:
      %reload_ext rpy2.ipython

     


    • 관측치 선택을 위한 R-PROJECT 프로그램.
    R Programming
    %%R
    
    library(tidyverse)
    
    load(file="c://work/data/mydata.Rdata")
    withmooc = mydata
    
    attach(withmooc) # mydata를 기본 데이터 세트로 지정.
    
    withmooc

     

    Results
      workshop gender q1 q2 q3 q4
    1        1      f  1  1  5  1
    2        2      f  2  1  4  1
    3        1      f  2  2  4  3
    4        2      f  3  1 NA  3
    5        1      m  4  5  2  4
    6        2      m  5  4  5  5
    7        1      m  5  3  4  4
    8        2      m  4  5  5  5

     


    1) 인덱스를 사용하여 관측치 선택

    • 모든 행(관측치)을 출력
    R Programming
    %%R
    
    withmooc[1:8, ]

     

    Results
      workshop gender q1 q2 q3 q4
    1        1      f  1  1  5  1
    2        2      f  2  1  4  1
    3        1      f  2  2  4  3
    4        2      f  3  1 NA  3
    5        1      m  4  5  2  4
    6        2      m  5  4  5  5
    7        1      m  5  3  4  4
    8        2      m  4  5  5  5

     

     

    • 5번째 행에서 8번째 행 사이에 위치하고 있는 남성 관측치 선택:
    R Programming
    %%R
    
    withmooc[5:8, ]

     

    Results
      workshop gender q1 q2 q3 q4
    5        1      m  4  5  2  4
    6        2      m  5  4  5  5
    7        1      m  5  3  4  4
    8        2      m  4  5  5  5

     

     

    • 음수(-) 기호는 행을 제외 시 이용된다.
    • Isolate 함수는 minus를 적용하기 위해 이용된다. 1행부터 4행을 제외.
    • -1:4는 -1에서 4의 행을 지정(-1,0,1,2,3,4)
    R Programming
    %%R
    
    withmooc[-I(1:4), ]

     

    Results
      workshop gender q1 q2 q3 q4
    5        1      m  4  5  2  4
    6        2      m  5  4  5  5
    7        1      m  5  3  4  4
    8        2      m  4  5  5  5

     

     

    • Which 함수는 True 조건에 해당하는 인덱스 Number를 반환한다. 남성인 관측치의 인덱스 선택.
    R Programming
    %%R
    
    which(gender=="m")

     

    Results
    [1] 5 6 7 8

     

     

    • 인덱스 Number를 이용하여 관측치 선택. 5행에서 8행까지 선택.
    R Programming
    %%R
    
    withmooc[which(gender=="m"), ]

     

    Results
      workshop gender q1 q2 q3 q4
    5        1      m  4  5  2  4
    6        2      m  5  4  5  5
    7        1      m  5  3  4  4
    8        2      m  4  5  5  5

     

     

    • 복잡한 로직을 적용하여 관측치를 선택할 수 있다.
    • 성별이 남성이면서 변수 q4의 관측치가 5인 관측치 선택.
    R Programming
    %%R
    
    withmooc[ which(gender=="m" & q4==5), ]

     

    Results
      workshop gender q1 q2 q3 q4
    6        2      m  5  4  5  5
    8        2      m  4  5  5  5

     

     

    • 원 데이터 프레임에서 외부로 저장할 인덱스를 수치 벡터로 저장할 수 있다.
    • 성별이 남자이면서 q4의 값이 5인 행을 선택.
    R Programming
    %%R
    
    happyGuys <- which(gender=="m" & q4==5)
    
    print(happyGuys)

     

    Results
    [1] 6 8

     

     

    • 관측치를 선택하기 위해 happyGuys벡터를 이용.
    • 비록 happyGuys가 변수명이지만, 따옴표를 이용하지 않는다.
    R Programming
    %%R
    
    withmooc[happyGuys, ]

     

    Results
      workshop gender q1 q2 q3 q4
    6        2      m  5  4  5  5
    8        2      m  4  5  5  5

     


    2) 논리 벡터에 의해 관측치 선택

    • 논리적인 비교는 원 데이터 프레임과 동등한 Length를 가진 논리 벡터를 생성한다.
    • 8개 변수에 대한 논리 벡터를 생성. 성별이 남성인 논리 벡터 생성.
    R Programming
    %%R
    
    print(withmooc$gender=="m")

     

    Results
    [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE

     

     

    • 행 위치에 논리 벡터를 넣어서 남성에 대한 관측치를 선택한다.
    R Programming
    %%R
    
    withmooc[withmooc$gender=="m", ]

     

    Results
      workshop gender q1 q2 q3 q4
    5        1      m  4  5  2  4
    6        2      m  5  4  5  5
    7        1      m  5  3  4  4
    8        2      m  4  5  5  5

     

     

    • mydata를 attach하면, 남성을 선택하기 위해 gender의 접두사로 mydata$를 사용하지 않아도 된다.
    R Programming
    %%R
    
    withmooc[gender=="m", ]

     

    Results
      workshop gender q1 q2 q3 q4
    5        1      m  4  5  2  4
    6        2      m  5  4  5  5
    7        1      m  5  3  4  4
    8        2      m  4  5  5  5

     


    • 복잡한 로직을 적용할수 있다.
    • attach 함수의 사용을 통하여 which함수 도움 없이 바로 조건 추출.
    • 남성이면서 변수 q4가 5인 관측치 선택.
    R Programming
    %%R
    
    withmooc[ gender=="m" & q4==5, ] 

     

    Results
      workshop gender q1 q2 q3 q4
    6        2      m  5  4  5  5
    8        2      m  4  5  5  5

     

     

    • 로직이 복잡할 때, 데이터 세트에 로직 벡터를 저장하기를 원할 것이다.
    • 조건에 대한 변수를 생성(TRUE / FALSE).
    R Programming
    %%R
    
    withmooc$happyGuys <- (gender=="m" & q4==5)
    
    print(withmooc)  # withmooc 데이터 세트에 추가된 변수(happyGuys)를 확인.

     

    Results
      workshop gender q1 q2 q3 q4 happyGuys
    1        1      f  1  1  5  1     FALSE
    2        2      f  2  1  4  1     FALSE
    3        1      f  2  2  4  3     FALSE
    4        2      f  3  1 NA  3     FALSE
    5        1      m  4  5  2  4     FALSE
    6        2      m  5  4  5  5      TRUE
    7        1      m  5  3  4  4     FALSE
    8        2      m  4  5  5  5      TRUE

     

     

    • 관측치 선택을 위해서 저장된 논리 벡터를 이용할 수 있다.
    • 관측치 선택을 위해 저장된 논리 벡터를 이용할 때, 인용부호에 넣지 않는다.
    • 파일이 attach 될 때에 happyGuys가 존재하지 않았기 때문에, 완전한 형태의 mydata$happyGusy를 이용해야 한다.
    R Programming
    %%R
    
    withmooc[withmooc$happyGuys, ] 

     

    Results
      workshop gender q1 q2 q3 q4 happyGuys
    6        2      m  5  4  5  5      TRUE
    8        2      m  4  5  5  5      TRUE

     


    3) 행 이름에 의해 관측치 선택

    • 행 이름을 출력한다.
    • 값들이 인용부호에 있기 때문에, 문자 벡터를 생성한다.
    R Programming
    %%R
    
    row.names(withmooc)

     

    Results
    [1] "1" "2" "3" "4" "5" "6" "7" "8"

     

     

    • 행 이름을 사용하여서 행을 선택할 수 있다.
    • 행 이름에 의해 처음 4개의 관측치를 선택한다.
    R Programming
    %%R
    
    withmooc[ c("1","2","3","4"), ] 

     

    Results
      workshop gender q1 q2 q3 q4 happyGuys
    1        1      f  1  1  5  1     FALSE
    2        2      f  2  1  4  1     FALSE
    3        1      f  2  2  4  3     FALSE
    4        2      f  3  1 NA  3     FALSE

     

     

    • 행 이름으로써 Number를 가지는 것은 좀 불분명하다.
    • 좀 더 확실한 행 이름을 지정한다.
    R Programming
    %%R
    
    mynames <- c("Ann","Cary","Sue","Carla",
                 "Bob","Scott","Mike","Rich")
    
    print(mynames)

     

    Results
    [1] "Ann"   "Cary"  "Sue"   "Carla" "Bob"   "Scott" "Mike"  "Rich" 

     

     

    • mydata에서 row.names함수를 이용하여 새로운 행 이름을 저장.
    R Programming
    %%R
    
    row.names(withmooc) <- mynames
    
    withmooc

     

    Results
          workshop gender q1 q2 q3 q4 happyGuys
    Ann          1      f  1  1  5  1     FALSE
    Cary         2      f  2  1  4  1     FALSE
    Sue          1      f  2  2  4  3     FALSE
    Carla        2      f  3  1 NA  3     FALSE
    Bob          1      m  4  5  2  4     FALSE
    Scott        2      m  5  4  5  5      TRUE
    Mike         1      m  5  3  4  4     FALSE
    Rich         2      m  4  5  5  5      TRUE

     

     

    • 행 이름으로 관측치를 선택. 이 방법이 더 확실하다.
    R Programming
    %%R
    withmooc[ c("Ann","Cary","Sue","Carla"), ] 

     

    Results
          workshop gender q1 q2 q3 q4 happyGuys
    Ann          1      f  1  1  5  1     FALSE
    Cary         2      f  2  1  4  1     FALSE
    Sue          1      f  2  2  4  3     FALSE
    Carla        2      f  3  1 NA  3     FALSE

     

     

    • 만약 자주 이용하는 행 이름의 세트를 가졌다면, 그것을 문자 벡터로 저장하여 이용 가능.
    R Programming
    %%R
    
    myGals <- c("Ann","Cary","Sue","Carla")
    
    print(myGals)

     

    Results
    [1] "Ann"   "Cary"  "Sue"   "Carla"

     

     

    • 행을 선택 시에 myGals를 이용한다. 이 방법에 사용 시 인용부호에 넣을 필요 없다.
    R Programming
    %%R
    
    withmooc[ myGals, ]

     

    Results
          workshop gender q1 q2 q3 q4 happyGuys
    Ann          1      f  1  1  5  1     FALSE
    Cary         2      f  2  1  4  1     FALSE
    Sue          1      f  2  2  4  3     FALSE
    Carla        2      f  3  1 NA  3     FALSE

     

     

    • 그룹이 많은 값을 가졌다고 가정하면, 그 값의 리스트에 의해 단지 몇 개의 선택하기 원할 때 사용.
    R Programming
    %%R
    
    myGals <- row.names(withmooc)=="Ann"  |
              row.names(withmooc)=="Cary" |
              row.names(withmooc)=="Sue"  |
              row.names(withmooc)=="Carla"
    
    print(myGals)

     

    Results
    [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE

     

     

    • %in% 함수는 Or함수보다 더 간단하다.
    R Programming
    %%R
    
    print( row.names(withmooc) %in% c("Ann","Cary","Sue","Carla") )

     

    Results
    [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE

     

     

    • 인덱스 값을 취하기 위해서 “which” 함수를 이용할 수 있다.
    • 행 이름이 Bob과 Rich의 인덱스 값을 찾는다.
    R Programming
    %%R
    
    firstMale <- which( row.names(withmooc)=="Bob" )
    
    print(firstMale)
    
    lastMale <- which( row.names(withmooc)=="Rich" )
    
    print(lastMale)

     

    Results
    [1] 5
    [1] 8

     

     

    • 행과 열을 동시에 선택하는 방법.
    • 5번에서 8번째 행과 변수명이 q1과 q4의 열인 값을 선택.
    R Programming
    %%R
    
    withmooc[firstMale:lastMale, c("q1","q2","q3","q4")]

     

    Results
          q1 q2 q3 q4
    Bob    4  5  2  4
    Scott  5  4  5  5
    Mike   5  3  4  4
    Rich   4  5  5  5

     


    4) 선택된 관측치로 새로운 데이터 프래임 선택.

    • 선택된 관측치를 새로운 데이터 프레임으로 저장.
    • 남성을 선택하여 데이터 프레임 생성.
    R Programming
    %%R
    
    myMales <- withmooc[withmooc$gender=="m", ]
    
    print(myMales)

     

    Results
          workshop gender q1 q2 q3 q4 happyGuys
    Bob          1      m  4  5  2  4     FALSE
    Scott        2      m  5  4  5  5      TRUE
    Mike         1      m  5  3  4  4     FALSE
    Rich         2      m  4  5  5  5      TRUE

     

     

    • 여성을 선택하여 데이터 프레임 생성.
    R Programming
    %%R
    
    myFemales <- withmooc[withmooc$gender=="f", ]
    
    print(myFemales)

     

    Results
          workshop gender q1 q2 q3 q4 happyGuys
    Ann          1      f  1  1  5  1     FALSE
    Cary         2      f  2  1  4  1     FALSE
    Sue          1      f  2  2  4  3     FALSE
    Carla        2      f  3  1 NA  3     FALSE

     


    5. R - Tidyverse

     

     

    R Programming
    from rpy2.robjects import r
    %load_ext rpy2.ipython

     

    Results
    The rpy2.ipython extension is already loaded. To reload it, use:
      %reload_ext rpy2.ipython

     

     

    R Programming
    %%R
    
    library(tidyverse)
    library(psych)
    mydata <- read_csv("C:/work/data/mydata.csv", 
      col_types = cols( id       = col_double(),
                        workshop = col_character(),
                        gender   = col_character(),
                        q1       = col_double(),
                        q2       = col_double(),
                        q3       = col_double(),
                        q4       = col_double()
      )
    )
    
    mydata <- mydata %>% select(-id)
    
    withmooc = mydata
    
    attach(withmooc) # mydata를 기본 데이터 세트로 지정.
    
    withmooc

     

    Results
    # A tibble: 8 x 6
      workshop gender    q1    q2    q3    q4
               
    1 1        f          1     1     5     1
    2 2        f          2     1     4     1
    3 1        f          2     2     4     3
    4 2        f          3     1    NA     3
    5 1        m          4     5     2     4
    6 2        m          5     4     5     5
    7 1        m          5     3     4     4
    8 2        m          4     5     5     5

     

    1) 인덱스에 의해 관측치 선택

     

    R Programming
    %%R
    
    withmooc[ myGals, ]

     

    Results
    # A tibble: 4 x 6
      workshop gender    q1    q2    q3    q4
               
    1 1        f          1     1     5     1
    2 2        f          2     1     4     1
    3 1        f          2     2     4     3
    4 2        f          3     1    NA     3

     

     

    • 모든 행(관측치)을 출력.
    R Programming
    %%R
    
    withmooc %>%
      slice()

     

    Results
    # A tibble: 8 x 6
      workshop gender    q1    q2    q3    q4
               
    1 1        f          1     1     5     1
    2 2        f          2     1     4     1
    3 1        f          2     2     4     3
    4 2        f          3     1    NA     3
    5 1        m          4     5     2     4
    6 2        m          5     4     5     5
    7 1        m          5     3     4     4
    8 2        m          4     5     5     5

     

     

    • 5행에서 8행의 남성 관측치 선택:
    R Programming
    %%R
    
    withmooc %>% 
      slice(5:8)

     

    Results
    # A tibble: 4 x 6
      workshop gender    q1    q2    q3    q4
               
    1 1        m          4     5     2     4
    2 2        m          5     4     5     5
    3 1        m          5     3     4     4
    4 2        m          4     5     5     5

     

     

    • 음수는 행을 제외 시 이용된다.
    • Isolate 함수는 minus를 적용하기 위해 이용된다. 1행부터 4행을 제외.
    • -1:4는 -1에서 4의 행을 지정(-1,0,1,2,3,4)
    R Programming
    %%R
    
    withmooc %>% 
      slice(-(5:8))

     

    Results
    # A tibble: 4 x 6
      workshop gender    q1    q2    q3    q4
               
    1 1        f          1     1     5     1
    2 2        f          2     1     4     1
    3 1        f          2     2     4     3
    4 2        f          3     1    NA     3

     

     

    • Selection는 True 조건의 인덱스 Number를 발견할 수 있다. 남성인 관측치의 인덱스 선택.
    R Programming
    %%R
    
    withmooc$gender == 'm'

     

    Results
    [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE

     

     

    • 인덱스 Number를 이용하여 관측치 선택. 5행에서 8행까지 선택.
    R Programming
    %%R
    
    withmooc %>% 
      filter(gender == 'm')

     

    Results
    # A tibble: 4 x 6
      workshop gender    q1    q2    q3    q4
               
    1 1        m          4     5     2     4
    2 2        m          5     4     5     5
    3 1        m          5     3     4     4
    4 2        m          4     5     5     5

     

     

    • 복잡한 로직을 적용하여 관측치를 선택할 수 있다.
    • 성별이 남성이면서 변수 q4의 관측치가 5인 관측치 선택.
    R Programming
    %%R
    withmooc %>%
      filter(gender=="m" & q4 == "5")

     

    Results
    # A tibble: 2 x 6
      workshop gender    q1    q2    q3    q4
               
    1 2        m          5     4     5     5
    2 2        m          4     5     5     5

     

     

    • 원 데이터 프레임에서 외부로 저장할 인덱스를 수치 벡터로 저장할 수 있다.
    • 성별이 남자이면서 q4의 값이 5인 행을 선택.
    R Programming
    %%R
    
    happyGuys <- which(withmooc$gender=="m" & withmooc$q4==5)
    print(happyGuys)
    
    withmooc %>%
      slice(happyGuys)

     

    Results
    [1] 6 8
    # A tibble: 2 x 6
      workshop gender    q1    q2    q3    q4
               
    1 2        m          5     4     5     5
    2 2        m          4     5     5     5

     


    2) 논리 벡터에 의해 관측치 선택

    • 논리적인 비교는 원 데이터 프레임과 동등한 Length를 가진 논리 벡터를 생성한다.
    • 8개 변수에 대한 논리 벡터를 생성. 성별이 남성인 논리 벡터 생성.
    R Programming
    %%R
    
    print(withmooc$gender=="m")
    
    mydata %>%
      filter(withmooc$gender=="m")

     

    Results
    [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
    # A tibble: 4 x 6
      workshop gender    q1    q2    q3    q4
               
    1 1        m          4     5     2     4
    2 2        m          5     4     5     5
    3 1        m          5     3     4     4
    4 2        m          4     5     5     5

     

     

    • 복잡한 로직을 적용할 수 있다.
    • attach 함수의 사용을 통하여 which함수 도움 없이 바로 조건 추출.
    • 남성이면서 변수 q4가 5인 관측치 선택.
    R Programming
    %%R
    
    withmooc %>%
      filter(withmooc$gender=="m" & withmooc$q4==5)

     

    Results
    # A tibble: 2 x 6
      workshop gender    q1    q2    q3    q4
               
    1 2        m          5     4     5     5
    2 2        m          4     5     5     5

     

     

    • 로직이 복잡할 때, 데이터 세트에 로직 벡터를 저장하기를 원할 것이다.
    • 조건에 대한 변수를 생성(TRUE / FALSE).
    R Programming
    %%R
    
    withmooc <- withmooc %>%
      mutate(happyGuys = (withmooc$gender=="m" & withmooc$q4==5))
    
    withmooc

     

    Results
    # A tibble: 8 x 7
      workshop gender    q1    q2    q3    q4 happyGuys
                    
    1 1        f          1     1     5     1 FALSE    
    2 2        f          2     1     4     1 FALSE    
    3 1        f          2     2     4     3 FALSE    
    4 2        f          3     1    NA     3 FALSE    
    5 1        m          4     5     2     4 FALSE    
    6 2        m          5     4     5     5 TRUE     
    7 1        m          5     3     4     4 FALSE    
    8 2        m          4     5     5     5 TRUE     

     

     

    • 관측치 선택을 위해서 저장된 논리 벡터를 이용할 수 있다.
    • 관측치 선택을 위해 저장된 논리 벡터를 이용할 때, 인용부호에 넣지 않는다.
    • 파일이 attach 될 때에 happyGuys가 존재하지 않았기 때문에, 완전한 형태의 mydata$happyGusy를 이용해야 한다.
    R Programming
    %%R
    
    withmooc %>%
      filter(withmooc$happyGuys)

     

    Results
    # A tibble: 2 x 7
      workshop gender    q1    q2    q3    q4 happyGuys
                    
    1 2        m          5     4     5     5 TRUE     
    2 2        m          4     5     5     5 TRUE     

     


    3) 행 이름에 의해 관측치 선택

    • 행 이름을 출력한다.
    • 값들이 인용부호에 있기 때문에, 문자 벡터를 생성한다.
    R Programming
    %%R
    
    row.names(withmooc)

     

    Results
    [1] "1" "2" "3" "4" "5" "6" "7" "8"

     

     

    • 행 이름을 사용하여서 행을 선택할 수 있다.
    • 행 이름에 의해 처음 4개의 관측치를 선택한다.
    R Programming
    %%R
    
    # slice : 행 index로 행을 선택한다.
    print( withmooc[ c("1","2","3","4"), ] )
    
    # 동일한 결과를 산출하는 프로그램.
    withmooc %>%
      slice(1:4)

     

    Results
    # A tibble: 4 x 7
      workshop gender    q1    q2    q3    q4 happyGuys
                    
    1 1        f          1     1     5     1 FALSE    
    2 2        f          2     1     4     1 FALSE    
    3 1        f          2     2     4     3 FALSE    
    4 2        f          3     1    NA     3 FALSE    
    # A tibble: 4 x 7
      workshop gender    q1    q2    q3    q4 happyGuys
                    
    1 1        f          1     1     5     1 FALSE    
    2 2        f          2     1     4     1 FALSE    
    3 1        f          2     2     4     3 FALSE    
    4 2        f          3     1    NA     3 FALSE    

     

     

    • 행 이름으로써 Number를 가지는 것은 좀 불분명하다.
    • 좀 더 확실한 행 이름을 지정한다.
    R Programming
    %%R
    
    mydata<-read.table ("C:/work/data/mydata.csv",header=TRUE,sep=",",row.names="id")
    
    withmooc = mydata
    
    attach(withmooc) # mydata를 기본 데이터 세트로 지정.
    
    withmooc

     

    Results
      workshop gender q1 q2 q3 q4
    1        1      f  1  1  5  1
    2        2      f  2  1  4  1
    3        1      f  2  2  4  3
    4        2      f  3  1 NA  3
    5        1      m  4  5  2  4
    6        2      m  5  4  5  5
    7        1      m  5  3  4  4
    8        2      m  4  5  5  5

     

     

    R Programming
    %%R
    
    mynames <- c("Ann","Cary","Sue","Carla",
                 "Bob","Scott","Mike","Rich")
    
    withmooc

     

    Results
      workshop gender q1 q2 q3 q4
    1        1      f  1  1  5  1
    2        2      f  2  1  4  1
    3        1      f  2  2  4  3
    4        2      f  3  1 NA  3
    5        1      m  4  5  2  4
    6        2      m  5  4  5  5
    7        1      m  5  3  4  4
    8        2      m  4  5  5  5

     

     

    • mydata에서 row.names함수를 이용하여 새로운 행 이름을 저장.
    R Programming
    %%R
    
    attr(withmooc, "row.names") <- mynames
    
    withmooc

     

    Results
          workshop gender q1 q2 q3 q4
    Ann          1      f  1  1  5  1
    Cary         2      f  2  1  4  1
    Sue          1      f  2  2  4  3
    Carla        2      f  3  1 NA  3
    Bob          1      m  4  5  2  4
    Scott        2      m  5  4  5  5
    Mike         1      m  5  3  4  4
    Rich         2      m  4  5  5  5

     

     

    • 행 이름으로 관측치를 선택. 이 방법이 더 확실하다.
    R Programming
    %%R
    
    withmooc %>%
      filter(row.names(withmooc) %in% c("Ann","Cary","Sue","Carla"))

     

    Results
          workshop gender q1 q2 q3 q4
    Ann          1      f  1  1  5  1
    Cary         2      f  2  1  4  1
    Sue          1      f  2  2  4  3
    Carla        2      f  3  1 NA  3

     

     

    • 만약 자주 이용하는 행 이름의 세트를 가졌다면, 그것을 문자 벡터로 저장하여 이용 가능.
    R Programming
    %%R
    
    myGals = c("Ann","Cary","Sue","Carla")
    
    myGals
    # 행을 선택시에 myGals를 이용한다. 이 방법에 사용시 인용부호에 넣을 필요 없다.
    withmooc %>%
      filter(row.names(withmooc) %in% myGals)

     

    Results
          workshop gender q1 q2 q3 q4
    Ann          1      f  1  1  5  1
    Cary         2      f  2  1  4  1
    Sue          1      f  2  2  4  3
    Carla        2      f  3  1 NA  3

     

     

    • 그룹이 많은 값을 가졌다고 가정하면, 그 값의 리스트에 의해 단지 몇 개의 선택하기 원할 때 사용.
    R Programming
    %%R
    
    myGals <- row.names(withmooc)=="Ann"  |
              row.names(withmooc)=="Cary" |
              row.names(withmooc)=="Sue"  |
              row.names(withmooc)=="Carla"
    
    print(myGals)

     

    Results
    [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE

     

     

    • %in% 함수는 Or함수보다 더 간단하다.
    R Programming
    %%R
    
    row.names(withmooc) %in% c("Ann","Cary","Sue","Carla")

     

    Results
    [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE

     

     

    • 인덱스 값을 취하기 위해서 “which” 함수를 이용할 수 있다.
    • 행 이름이 Bob과 Rich의 인덱스 값을 찾는다.
    R Programming
    %%R
    
    firstMale <- which( row.names(withmooc)=="Bob" )
    print(firstMale)
    
    lastMale <- which( row.names(withmooc)=="Rich" )
    print(lastMale)

     

    Results
    [1] 5
    [1] 8

     

     

    • 행과 열을 동시에 선택하는 방법.
    • 5번에서 8번째 행과 변수명이 q1과 q4의 열인 값을 선택.
    R Programming
    %%R
    
    withmooc[firstMale:lastMale, c("q1","q2","q3","q4")]

     

    Results
          q1 q2 q3 q4
    Bob    4  5  2  4
    Scott  5  4  5  5
    Mike   5  3  4  4
    Rich   4  5  5  5

     

     

    R Programming
    %%R
    
    withmooc %>%
      dplyr::slice(firstMale:lastMale) %>%
      dplyr::select(q1,q2,q3,q4)

     

    Results
          q1 q2 q3 q4
    Bob    4  5  2  4
    Scott  5  4  5  5
    Mike   5  3  4  4
    Rich   4  5  5  5

     


    4) 선택된 관측치로 새로운 데이터 프래임 선택.

    • 선택된 관측치를 새로운 데이터 프레임으로 저장.
    • 남성을 선택하여 데이터 프레임 생성.
    R Programming
    %%R
    
    myMales <- withmooc %>%
      filter(gender == "m")
    
    print(myMales)

     

    Results
          workshop gender q1 q2 q3 q4
    Bob          1      m  4  5  2  4
    Scott        2      m  5  4  5  5
    Mike         1      m  5  3  4  4
    Rich         2      m  4  5  5  5

     

     

    • 여성을 선택하여 데이터 프레임 생성.
    R Programming
    %%R
    
    myFemales <- withmooc %>%
      filter(gender == "f")
    
    print(myFemales)

     

    Results
          workshop gender q1 q2 q3 q4
    Ann          1      f  1  1  5  1
    Cary         2      f  2  1  4  1
    Sue          1      f  2  2  4  3
    Carla        2      f  3  1 NA  3

     


    6. Python - Pandas

     

    1) 인덱스에 의해 관측치 선택

     

    Python Programming
    import pandas as pd
    import numpy as np
    import sweetviz as sv
    
    mydata   = pd.read_csv("C:/work/data/mydata.csv",sep=",",
                           dtype={'id':object,'workshop':object,
                                  'q1':int, 'q2':int, 'q3':float, 'q4':int},
                           na_values=['NaN'],skipinitialspace =True)
    
    mydata =mydata.drop('id',axis=1)
    
    withmooc= mydata.copy()
    
    withmooc

     

    Results
    	workshop	gender	q1	q2	q3	q4
    0	1		f	1	1	5.0	1
    1	2		f	2	1	4.0	1
    2	1		f	2	2	4.0	3
    3	2		f	3	1	NaN	3
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

    • 모든 행(관측치)을 출력.
    Python Programming
    withmooc[0:9]

     

    Results
    	workshop	gender	q1	q2	q3	q4
    0	1		f	1	1	5.0	1
    1	2		f	2	1	4.0	1
    2	1		f	2	2	4.0	3
    3	2		f	3	1	NaN	3
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

    • 5행에서 8행의 남성 관측치 선택:
    Python Programming
    withmooc[4:9]
    
    # 동일한 결과를 산출하는 프로그램
    withmooc.iloc[4:9]

     

    Results
    	workshop	gender	q1	q2	q3	q4
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5
    • Drop 함수는 행을 제외 시 이용된다.
    Python Programming
    withmooc.drop([0,1,2], axis=0)
    
    # 동일한 결과를 반환하는 프로그램
    withmooc.drop(range(0,3), axis=0)

     

    Results
    	workshop	gender	q1	q2	q3	q4
    3	2		f	3	1	NaN	3
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

    • Selection는 True 조건의 인덱스 Number를 발견할 수 있다. 남성인 관측치의 인덱스 선택.
    Python Programming
    print(withmooc.gender=="m")
    
    # 인덱스 Number를 이용하여 관측치 선택. 5행에서 8행까지 선택.
    mydata[withmooc.gender=="m"]

     

    Results
    0    False
    1    False
    2    False
    3    False
    4     True
    5     True
    6     True
    7     True
    Name: gender, dtype: bool

     

    Results
    	workshop	gender	q1	q2	q3	q4
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

    • 복잡한 로직을 적용하여 관측치를 선택할 수 있다.
    • 성별이 남성이면서 변수 q4의 관측치가 5인 관측치 선택.
    Python Programming
    withmooc[(withmooc.gender=="m") & (withmooc.q4 == 5)]

     

    Results
    	workshop	gender	q1	q2	q3	q4
    5	2		m	5	4	5.0	5
    7	2		m	4	5	5.0	5

     

    • 원 데이터 프레임에서 외부로 저장할 인덱스를 수치 벡터로 저장할 수 있다.
    • 성별이 남자이면서 q4의 값이 5인 행을 선택.
    Python Programming
    happyGuys = withmooc[(withmooc.gender=="m") & (withmooc.q4 == 5)].index
    happyGuys

     

    Results
    Int64Index([5, 7], dtype='int64')

     

    • 관측치를 선택하기 위해 happyGuys벡터를 이용.
    • 비록 happyGuys가 변 수명이지만, 따옴표를 이용하지 않는다.
    Python Programming
    withmooc.iloc[happyGuys,]

     

    Results
    	workshop	gender	q1	q2	q3	q4
    5	2		m	5	4	5.0	5
    7	2		m	4	5	5.0	5

     


    2) 논리 벡터에 의해 관측치 선택

    • 논리적인 비교는 원 데이터 프레임과 동등한 Length를 가진 논리 벡터를 생성한다.
    • 8개 변수에 대한 논리 벡터를 생성. 성별이 남성인 논리 벡터 생성.
    Python Programming
    withmooc.gender=="m"

     

    Results
    0    False
    1    False
    2    False
    3    False
    4     True
    5     True
    6     True
    7     True
    Name: gender, dtype: bool

     

     

    • 행 위치에 논리 벡터를 넣어서 남성에 대한 관측치를 선택한다.
    Python Programming
    withmooc[withmooc.gender=="m"]

     

    Results
    	workshop	gender	q1	q2	q3	q4
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

     

     

    Python Programming
    withmooc.loc[withmooc.gender=="m" , ]

     

    Results
    	workshop	gender	q1	q2	q3	q4
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

    • 복잡한 로직을 적용할 수 있다.
    • attach 함수의 사용을 통하여 which함수 도움 없이 바로 조건 추출.
    • 남성이면서 변수 q4가 5인 관측치 선택.
    Python Programming
    withmooc[ (withmooc.gender=="m") & (withmooc.q4==5) ]

     

    Results
    	workshop	gender	q1	q2	q3	q4
    5	2		m	5	4	5.0	5
    7	2		m	4	5	5.0	5

     

    • 로직이 복잡할 때, 데이터 세트에 로직 벡터를 저장하기를 원할 것이다.
    • 조건에 대한 변수를 생성(TRUE / FALSE).
    Python Programming
    withmooc["happyGuys"] = ((withmooc.gender=="m") & (withmooc.q4==5))
    
    withmooc  # mydata에 추가변수(happyGuys)를 확인.

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    0	1		f	1	1	5.0	1	False
    1	2		f	2	1	4.0	1	False
    2	1		f	2	2	4.0	3	False
    3	2		f	3	1	NaN	3	False
    4	1		m	4	5	2.0	4	False
    5	2		m	5	4	5.0	5	True
    6	1		m	5	3	4.0	4	False
    7	2		m	4	5	5.0	5	True

     

    • 관측치 선택을 위해서 저장된 논리 벡터를 이용할 수 있다.
    • 관측치 선택을 위해 저장된 논리 벡터를 이용할 때, 인용부호에 넣지 않는다.
    • 파일이 attach 될 때에 happyGuys가 존재하지 않았기 때문에, 완전한 형태의 mydata$happyGusy를 이용해야 한다.
    Python Programming
    withmooc[withmooc.happyGuys]
    
    # 동일한 결과를 반환하는 프로그램.
    withmooc.loc[withmooc.happyGuys , ]

     

    Results
    	id	workshop	gender	q1	q2	q3	q4	happyGuys
    5	6	2		m	5	4	5.0	5	True
    7	8	2		m	4	5	5.0	5	True

     


    3) 행 이름에 의해 관측치 선택

    • 행 이름을 출력한다.
    • 값들이 인용부호에 있기 때문에, 문자 벡터를 생성한다.
    Python Programming
    print(withmooc.index)
    
    list(withmooc.index)    # Range 확인

     

    Results
    RangeIndex(start=0, stop=8, step=1)
    
    
    
    
    
    [0, 1, 2, 3, 4, 5, 6, 7]

     

     

    • 행 이름을 사용하여서 행을 선택할 수 있다.
    • 행 이름에 의해 처음 4개의 관측치를 선택한다.
    Python Programming
    withmooc.iloc[[0,1,2,3],]

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    0	1		f	1	1	5.0	1	False
    1	2		f	2	1	4.0	1	False
    2	1		f	2	2	4.0	3	False
    3	2		f	3	1	NaN	3	False

     

    • 행 이름으로써 Number를 가지는 것은 좀 불분명하다.
    • 좀 더 확실한 행 이름을 지정한다.
    Python Programming
    mynames = ["Ann","Cary","Sue","Carla","Bob","Scott","Mike","Rich"]
    
    print(mynames)

     

    Results
    ['Ann', 'Cary', 'Sue', 'Carla', 'Bob', 'Scott', 'Mike', 'Rich']

     

     

    • mydata에서 row.names함수를 이용하여 새로운 행 이름을 저장.
    Python Programming
    withmooc.index = mynames
    withmooc

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    Ann	1		f	1	1	5.0	1	False
    Cary	2		f	2	1	4.0	1	False
    Sue	1		f	2	2	4.0	3	False
    Carla	2		f	3	1	NaN	3	False
    Bob	1		m	4	5	2.0	4	False
    Scott	2		m	5	4	5.0	5	True
    Mike	1		m	5	3	4.0	4	False
    Rich	2		m	4	5	5.0	5	True

     

    • 행 이름으로 관측치를 선택. 이 방법이 더 확실하다.
    Python Programming
    withmooc.loc[ ["Ann","Cary","Sue","Carla"], ]

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    Ann	1		f	1	1	5.0	1	False
    Cary	2		f	2	1	4.0	1	False
    Sue	1		f	2	2	4.0	3	False
    Carla	2		f	3	1	NaN	3	False

     

    • 만약 자주 이용하는 행 이름의 세트를 가졌다면, 그것을 문자 벡터로 저장하여 이용 가능.
    Python Programming
    myGals = ["Ann","Cary","Sue","Carla"]
    
    myGals

     

    Results
    ['Ann', 'Cary', 'Sue', 'Carla']

     

    • 행을 선택 시에 myGals를 이용한다. 이 방법에 사용 시 인용부호에 넣을 필요 없다.
    Python Programming
    withmooc.loc[ myGals, ]

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    Ann	1		f	1	1	5.0	1	False
    Cary	2		f	2	1	4.0	1	False
    Sue	1		f	2	2	4.0	3	False
    Carla	2		f	3	1	NaN	3	False

     

    • 그룹이 많은 값을 가졌다고 가정하면, 그 값의 리스트에 의해 단지 몇 개의 선택하기 원할 때 사용.
    Python Programming
    myqs_1 = (withmooc.index == "Ann") | (withmooc.index == "Cary") | 
              (withmooc.index == "Sue") | (withmooc.index == "Carla")
    print(myqs_1)
    
    myGals = withmooc.loc[myqs_1, : ]
    
    myGals

     

    Results
    [ True  True  True  True False False False False]

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    Ann	1		f	1	1	5.0	1	False
    Cary	2		f	2	1	4.0	1	False
    Sue	1		f	2	2	4.0	3	False
    Carla	2		f	3	1	NaN	3	False

     

     

     

    Python Programming
    # isin 함수는 Or함수보다 더 간단하다.
    
    withmooc.index.isin (["Ann","Cary","Sue","Carla"])

     

    Results
    array([ True,  True,  True,  True, False, False, False, False])

     

     

    • 인덱스 값을 취하기 위해서 “which” 함수를 이용할 수 있다.
    • 행 이름이 Bob과 Rich의 인덱스 값을 찾는다.
    Python Programming
    firstMale = withmooc[withmooc.index=="Bob"]
    print(firstMale);print()
    
    lastMale = withmooc[withmooc.index=="Rich"]
    print(lastMale)

     

    Results
        workshop gender  q1  q2   q3  q4  happyGuys
    Bob        1      m   4   5  2.0   4      False
    
         workshop gender  q1  q2   q3  q4  happyGuys
    Rich        2      m   4   5  5.0   5       True

     

     

    • 단독 Number를 가진 numeric 벡터에 단독 인덱스 값을 저장.
    Python Programming
    mylist = withmooc.index
    myA = [index for index, item in enumerate(mylist) if item == "Bob"]
    print(myA)
    
    # 단독 Number를 가진 numeric 벡터에 단독 인덱스 값을 저장.
    myZ = [index for index, item in enumerate(mylist) if item == "Rich"]
    print(myZ)

     

    Results
    [4]
    [7]

     

     

    • 행과 열을 동시에 선택하는 방법.
    • 5번에서 8번째 행과 변수명이 q1과 q4의 열인 값을 선택.
    Python Programming
    # 행과 열을 동시에 선택하는 방법.
    # 5번에서 8번째 행과 변수명이 q1과 q4의 열인 값을 선택.
    withmooc.iloc[myA[0] : myZ[0] + 1 , 2:6]

     

    Results
    	q1	q2	q3	q4
    Bob	4	5	2.0	4
    Scott	5	4	5.0	5
    Mike	5	3	4.0	4
    Rich	4	5	5.0	5

     

     

     

    Python Programming
    mylist = list(withmooc.index)
    myA = mylist.index("Bob")
    print(myA)
    myZ = mylist.index("Rich")
    print(myZ)
    
    withmooc.iloc[myA:myZ + 1, 2:6 ] # 변수 3에서 6번째 변수를 출력.

     

    Results
    4
    7

     

    Results
    	q1	q2	q3	q4
    Bob	4	5	2.0	4
    Scott	5	4	5.0	5
    Mike	5	3	4.0	4
    Rich	4	5	5.0	5

     


    4) 선택된 관측치로 새로운 데이터 프래임 선택.

    • 선택된 관측치를 새로운 데이터 프레임으로 저장.
    • 남성을 선택하여 데이터 프레임 생성.
    Python Programming
    withmooc[withmooc.gender=="m"]
    
    myMales = withmooc.loc[withmooc.gender=="m" , ]
    
    myMales

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    Bob	1		m	4	5	2.0	4	False
    Scott	2		m	5	4	5.0	5	True
    Mike	1		m	5	3	4.0	4	False
    Rich	2		m	4	5	5.0	5	True

     

    • 여성을 선택하여 데이터 프레임 생성.
    Python Programming
    myFemales = withmooc.loc[withmooc.gender=="f" , ]
    myFemales

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    Ann	1		f	1	1	5.0	1	False
    Cary	2		f	2	1	4.0	1	False
    Sue	1		f	2	2	4.0	3	False
    Carla	2		f	3	1	NaN	3	False

     


    7. Python - dfply

     

    1) 인덱스에 의해 관측치 선택

     

    Python Programming
    import pandas as pd
    from dfply import *
    
    mydata   = pd.read_csv("C:/work/data/mydata.csv",sep=",",
                           dtype={'id':object,'workshop':object,
                                  'q1':int, 'q2':int, 'q3':float, 'q4':int},
                           na_values=['NaN'],skipinitialspace =True)
    
    mydata =mydata.drop('id',axis=1)
    
    withmooc= mydata.copy()
    
    withmooc

     

    Results
    	workshop	gender	q1	q2	q3	q4
    0	1		f	1	1	5.0	1
    1	2		f	2	1	4.0	1
    2	1		f	2	2	4.0	3
    3	2		f	3	1	NaN	3
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

    • 모든 행(관측치)을 출력.
    Python Programming
    withmooc >> row_slice(list(range(len(mydata)-1)))

     

    Results
    	workshop	gender	q1	q2	q3	q4
    0	1		f	1	1	5.0	1
    1	2		f	2	1	4.0	1
    2	1		f	2	2	4.0	3
    3	2		f	3	1	NaN	3
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4

     

     

     

    Python Programming
    withmooc >> row_slice(np.arange(len(withmooc)-1))

     

    Results
    	workshop	gender	q1	q2	q3	q4
    0	1		f	1	1	5.0	1
    1	2		f	2	1	4.0	1
    2	1		f	2	2	4.0	3
    3	2		f	3	1	NaN	3
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4

     

    • 5행에서 8행의 남성 관측치 선택:
    Python Programming
    withmooc >> row_slice(list(range(4,8)))
    
    withmooc >> row_slice(np.arange(4,8))

     

    Results
    	workshop	gender	q1	q2	q3	q4
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

     

     

    Python Programming
    withmooc >> tail(len(withmooc)-4)

     

    Results
    	workshop	gender	q1	q2	q3	q4
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

     

     

    Python Programming
    withmooc >> row_slice(X.index >= 4 ) >> row_slice( X.index <= 8)

     

    Results
    	workshop	gender	q1	q2	q3	q4
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

    • 음수는 행을 제외 시 이용된다. 1행부터 4행을 제외.
    Python Programming
    print( list(set(range(len(withmooc))) - set([0,1,2,3])) )
    
    withmooc >> row_slice(list(set(range(len(withmooc))) - set([0,1,2,3])))

     

    Results
    [4, 5, 6, 7]

     

    Results
    	workshop	gender	q1	q2	q3	q4
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

    • Which 함수는 True 조건의 인덱스 Number를 발견할 수 있다.
    • 인덱스 Number를 이용하여 관측치 선택.
    Python Programming
    withmooc >> row_slice(X.gender=="m")

     

    Results
    	workshop	gender	q1	q2	q3	q4
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

    • 매우 복잡한 로직을 적용하여 관측치를 선택할 수 있다.
    • 성별이 남성이면서 변수 q4의 관측치가 5인 관측치 선택.
    Python Programming
    withmooc >> filter_by(X.gender=="m", X.q4==5)

     

    Results
    	workshop	gender	q1	q2	q3	q4
    5	2		m	5	4	5.0	5
    7	2		m	4	5	5.0	5

     

     

     

    Python Programming
    print(withmooc.index[ (withmooc['gender']=='m') & (withmooc['q4'] == 5)].tolist())
    
    withmooc >> row_slice(withmooc.index[ (withmooc['gender']=='m') & (withmooc['q4'] == 5)].tolist())

     

    Results
    [5, 7]

     

    Results
    	workshop	gender	q1	q2	q3	q4
    5	2		m	5	4	5.0	5
    7	2		m	4	5	5.0	5

     

     

     

    Python Programming
    withmooc >> \
        row_slice([index for index, item in enumerate(np.where( (withmooc['gender']=='m') & (withmooc['q4'] == 5), 1, 0)) if item == 1])

     

    Results
    	workshop	gender	q1	q2	q3	q4
    5	2		m	5	4	5.0	5
    7	2		m	4	5	5.0	5

     

    • 로직이 복잡할 때, 데이터 세트에 로직 벡터를 저장하기를 원할 것이다.
    • 조건에 대한 변수를 생성(TRUE / FALSE).
    Python Programming
    withmooc = withmooc >> mutate(happyGuys = ( (X.gender=="m") & (X.q4 == 5)))
    withmooc

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    0	1		f	1	1	5.0	1	False
    1	2		f	2	1	4.0	1	False
    2	1		f	2	2	4.0	3	False
    3	2		f	3	1	NaN	3	False
    4	1		m	4	5	2.0	4	False
    5	2		m	5	4	5.0	5	True
    6	1		m	5	3	4.0	4	False
    7	2		m	4	5	5.0	5	True

     

    • 관측치 선택을 위해서 저장된 논리 벡터를 이용할 수 있다.
    • 관측치 선택을 위해 저장된 논리 벡터를 이용할 때, 인용부호에 넣지 않는다.
    • 파일이 attach 될 때에 happyGuys가 존재하지 않았기 때문에, 완전한 형태의 mydata$happyGusy를 이용해야 한다.
    Python Programming
    withmooc >> filter_by(X.happyGuys)

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    5	2		m	5	4	5.0	5	True
    7	2		m	4	5	5.0	5	True

     

     


    2) 행 이름에 의해 관측치 선택

    • 행 이름을 출력한다.
    • 값들이 인용부호에 있기 때문에, 문자 벡터를 생성한다.
    Python Programming
    withmooc.index

     

    Results
    RangeIndex(start=0, stop=8, step=1)

     

    • 행 이름을 사용하여서 행을 선택할 수 있다.
    • 행 이름에 의해 처음 4개의 관측치를 선택한다.
    Python Programming
    # slice : 행 index로 행을 선택한다.
    
    withmooc >> row_slice([0,1,2,3])

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    0	1		f	1	1	5.0	1	False
    1	2		f	2	1	4.0	1	False
    2	1		f	2	2	4.0	3	False
    3	2		f	3	1	NaN	3	False

     

    • 행 이름으로써 Number를 가지는 것은 좀 불분명하다.
    • 좀 더 확실한 행 이름을 지정한다.
    Python Programming
    mynames = ["Ann","Cary","Sue","Carla","Bob","Scott","Mike","Rich"]
    
    print(withmooc)
    
    # mydata에서 row.names함수를 이용하여 새로운 행 이름을 저장.
    
    withmooc.index = mynames
    withmooc

     

    Results
      workshop gender  q1  q2   q3  q4  happyGuys
    0        1      f   1   1  5.0   1      False
    1        2      f   2   1  4.0   1      False
    2        1      f   2   2  4.0   3      False
    3        2      f   3   1  NaN   3      False
    4        1      m   4   5  2.0   4      False
    5        2      m   5   4  5.0   5       True
    6        1      m   5   3  4.0   4      False
    7        2      m   4   5  5.0   5       True

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    Ann	1		f	1	1	5.0	1	False
    Cary	2		f	2	1	4.0	1	False
    Sue	1		f	2	2	4.0	3	False
    Carla	2		f	3	1	NaN	3	False
    Bob	1		m	4	5	2.0	4	False
    Scott	2		m	5	4	5.0	5	True
    Mike	1		m	5	3	4.0	4	False
    Rich	2		m	4	5	5.0	5	True

     

    • 행 이름으로 관측치를 선택. 이 방법이 더 확실하다.
    Python Programming
    withmooc >> row_slice(withmooc.index.isin (["Ann","Cary","Sue","Carla"]))

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    Ann	1		f	1	1	5.0	1	False
    Cary	2		f	2	1	4.0	1	False
    Sue	1		f	2	2	4.0	3	False
    Carla	2		f	3	1	NaN	3	False

     

    • 만약 자주 이용하는 행 이름의 세트를 가졌다면, 그것을 문자 벡터로 저장하여 이용 가능.
    Python Programming
    myGals = ["Ann","Cary","Sue","Carla"]
    
    print(myGals)
    
    # 행을 선택시에 myGals를 이용한다. 이 방법에 사용시 인용부호에 넣을 필요 없다.
    withmooc >> row_slice(withmooc.index.isin (myGals))

     

    Results
    ['Ann', 'Cary', 'Sue', 'Carla']

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    Ann	1		f	1	1	5.0	1	False
    Cary	2		f	2	1	4.0	1	False
    Sue	1		f	2	2	4.0	3	False
    Carla	2		f	3	1	NaN	3	False

     

    • 그룹이 많은 값을 가졌다고 가정하면, 그 값의 리스트에 의해 단지 몇 개의 선택하기 원할 때 사용.
    Python Programming
    myGals_1 = (withmooc.index == "Ann") | (withmooc.index == "Cary") | (withmooc.index == "Sue") | (withmooc.index == "Carla")
    
    print(myGals_1)
    
    # isin 함수는 Or함수보다 더 간단하다.
    print(withmooc.index.isin (myGals))

     

    Results
    [ True  True  True  True False False False False]
    [ True  True  True  True False False False False]

     

    • 인덱스 값을 취하기 위해서 “which” 함수를 이용할 수 있다.
    • 행 이름이 Bob과 Rich의 인덱스 값을 찾는다.
    Python Programming
    firstMale= [index for index, item in enumerate(withmooc.index) if item == "Bob"]
    
    print(firstMale)
    
    lastMale= [index for index, item in enumerate(withmooc.index) if item == "Rich"]
    
    print(lastMale)

     

    Results
    [4]
    [7]

     

     

    Python Programming
    withmooc >> row_slice(list(range(firstMale[0],lastMale[0]+1)))

     

    Results
    	workshop	gender	q1	q2	q3	q4	happyGuys
    Bob	1		m	4	5	2.0	4	False
    Scott	2		m	5	4	5.0	5	True
    Mike	1		m	5	3	4.0	4	False
    Rich	2		m	4	5	5.0	5	True

     

    • 행과 열을 동시에 선택하는 방법
    • 5번에서 8번째 행과 변수명이 q1과 q4의 열인 값을 선택.
    Python Programming
    withmooc >> row_slice(list(range(firstMale[0],lastMale[0]+1))) >> select(X.q1,X.q2,X.q3,X.q4)

     

    Results
    	q1	q2	q3	q4
    4	4	5	2.0	4
    5	5	4	5.0	5
    6	5	3	4.0	4
    7	4	5	5.0	5

     


    4) 선택된 관측치로 새로운 데이터 프래임 선택.

     

    Python Programming
    myMales = mydata >> filter_by(X.gender=="m")
    myMales

     

    Results
    	workshop	gender	q1	q2	q3	q4
    4	1		m	4	5	2.0	4
    5	2		m	5	4	5.0	5
    6	1		m	5	3	4.0	4
    7	2		m	4	5	5.0	5

     

    • 여성을 선택하여 데이터 프레임 생성.
    Python Programming
    myFemales = mydata >> filter_by(X.gender=="f")
    myFemales

     

    Results
    	workshop	gender	q1	q2	q3	q4
    0	1		f	1	1	5.0	1
    1	2		f	2	1	4.0	1
    2	1		f	2	2	4.0	3
    3	2		f	3	1	NaN	3

     

     

     


     

    통계프로그램 비교 목록(Proc sql, SAS, SPSS, R 프로그래밍, R Tidyverse, Python Pandas, Python Dfply)
    [Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table] 오라클 함수와 R & Python 비교 사전 목록 링크
    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE]
    SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크
    반응형

    댓글