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

통계프로그램 비교 시리즈 – [변수와 관측치 선택] 1. 변수 선택하기

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

포스팅 목차

     [변수와 관측치 선택] 1. 변수 선택하기

     


    1. Proc SQL

     

    • 기본적으로 Select구문 안에서 변수 선택이 가능하고, From 절 또는 Create table 절에 지정된 데이터 세트에 Keep, Drop 옵션을 지정하여서 변수 선택 가능.
    SAS Programming
    proc sql;
      select *
      from   BACK.Mydata;
    quit;

     

    Results
    id  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         .         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

     

    • q변수만을 선택 후에 q1, q2, q3, q4변수를 지정하여 출력.
    SAS Programming
    proc sql;
      select q1,q2,q3,q4
      from   BACK.Mydata(keep=q:);
    quit;

     

    Results
    q1        q2        q3        q4
    ---------------------------------
      1         1         5         1
      2         1         4         1
      2         2         4         3
      3         1         .         3
      4         5         2         4
      5         4         5         5
      5         3         4         4
      4         5         5         5

     

     

    • 세 개의 변수를 삭제 후 출력.
    SAS Programming
    proc sql;
      select *
      from   BACK.Mydata(drop=id workshop gender);
    quit;

     

    Results
     q1        q2        q3        q4
    ---------------------------------
      1         1         5         1
      2         1         4         1
      2         2         4         3
      3         1         .         3
      4         5         2         4
      5         4         5         5
      5         3         4         4
      4         5         5         5

     

     

    • q변수 전체를 선택 후 출력.
    SAS Programming
    proc sql;
      select *
      from   BACK.Mydata(keep=q:);
    quit;

     

     

    • 전체 변수 선택후 q변수만을 출력.
    SAS Programming
    proc sql;
      create table Mydata1(keep=q:) as
       select *
       from   BACK.Mydata;
    
       select * from Mydata1;
    quit;

     

    Results
     q1        q2        q3        q4
    --------------------------------
     1         1         5         1
     2         1         4         1
     2         2         4         3
     3         1         .         3
     4         5         2         4
     5         4         5         5
     5         3         4         4
     4         5         5         5

     


    2. SAS Programming

     

    • 변수 선택을 위한 SAS프로그램
    SAS Programming
    * 최종 데이터를 BACK.mydata로 지정;
    
    libname 'c:\data';
    OPTIONS _LAST_=BACK.mydata;
    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
     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;
         VAR workshop gender q1 q2 q3 q4;
    RUN;

     

    Results
    OBS    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     .     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

     

     

    • workshop과 q4사이의 모든 변수 선택
    SAS Programming
    PROC PRINT;
         var workshop--q4;
    RUN;

     

    Results
    OBS    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     .     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

     

     

    • q로 시작되는 변수 선택
    SAS Programming
    PROC PRINT;
         var workshop gender q1-q4;
    RUN;

     

    Results
    OBS    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     .     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

     

     

    • 선택된 변수를 가진 데이터 생성하기.;
    • q로 시작되는 모든 변수 선택;
    SAS Programming
    DATA BACK.myqs;
     SET BACK.mydata(KEEP=q:);
    RUN;
    
    PROC PRINT DATA=BACK.myqs;
    RUN;

     

    Results
    OBS    q1    q2    q3    q4
     1      1     1     5     1
     2      2     1     4     1
     3      2     2     4     3
     4      3     1     .     3
     5      4     5     2     4
     6      5     4     5     5
     7      5     3     4     4
     8      4     5     5     5

     


    3. SPSS

     

    • 변수 선택을 위한 SPSS프로그램.
    SPSS Programming
    LIST.
    LIST VARIABLES=workshop,gender,q1,q2,q3,q4.
    LIST VARIABLES=workshop TO q4.
    
    * 선택된 변수로 데이터 세트 생성.
    SAVE OUTFILE='c:\myqs.sav' /KEEP=q1 TO q4.
    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
    # 데이터 로드하기.
    
    load(file="c://work/data/mydata.Rdata")
    
    # 모든 데이터 출력하기.
    
    print(mydata)

     

    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) INDEX를 사용한 변수 선택

    • 모든 변수 선택하기.
    R Programming
    %%R
    
    print( mydata[ ])
    print( mydata[ , ] )

     

    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

     

     

    • 3번째 변수(q1) 선택.
    R Programming
    %%R
    
    print(mydata[3])

     

    Results
      q1
    1  1
    2  2
    3  2
    4  3
    5  4
    6  5
    7  5
    8  4

     

     

    • 인덱스를 사용하여서 변수 q1, q2, q3, q4 선택하기 위한 방법.
    R Programming
    %%R
    
    print( mydata[ c(3,4,5,6) ] ) # 인덱스 사용.
    print( mydata[ 3:6 ] )        # “:” 인식자 사용하여 인덱스 생성.
    print( mydata[ -c(1,2) ] )    # 첫번째,두번째 변수를 제외.
    print( mydata[ -I(1:2) ] )    # colon 인식자를 사용하여 변수 제외.

     

    Results
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     

     

    • 반복하여서 열의 범위를 이용한다면, Numeric 벡터에 전체 범위를 저장하면 유용.
    R Programming
    %%R
    myindexes <- 3:6
    
    # 인덱스 확인
    print( myindexes )

     

    Results
    [1] 3 4 5 6

     

     

    R Programming
    %%R
    print( mydata[myindexes] )

     

    Results
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     

     

    • 마이너스 부호를 이용하여 3번째부터 6번째(3:6 변수)에 위치한 변수를 제외
    R Programming
    %%R
    print( mydata[-myindexes] )

     

    Results
      workshop gender
    1        1      f
    2        2      f
    3        1      f
    4        2      f
    5        1      m
    6        2      m
    7        1      m
    8        2      m

     

     

    • '%in%' 함수는 이름의 전체 벡터를 비교하여 일치 여부를 반환한다.
    • mydata 데이터 세트에 존재하는 변수 중에서 q1~q4변수 이름과 일치 여부를 반환한다.
    R Programming
    %%R
    
    names(mydata) %in% c("q1","q2","q3","q4")

     

    Results
    [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE

     

     

    • 'which' 함수는 TRUE인 인덱스 번호를 출력한다.
    • myvar 변수에 단일 인덱스를 저장.
    R Programming
    %%R
    
    myvars <- which( names(mydata) %in% c("q1","q2","q3","q4") )
    print(myvars)

     

    Results
    [1] 3 4 5 6

     

     

    R Programming
    %%R
    
    print( mydata[ ,myvars] )

     

    Results
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     

    • 모든 변수에 대한 인덱스를 출력.
    • 열 이름은 문자 벡터로써 mydata에 저장되어 있다.
    • names함수로 변수 이름을 출력하고, data.frame함수로 데이터 프레임을 생성.
    R Programming
    %%R
    
    print( data.frame( myvars=names(mydata) ) )

     

    Results
        myvars
    1 workshop
    2   gender
    3       q1
    4       q2
    5       q3
    6       q4

     


    2) 변수명에 의해 변수 선택하기(minus 부호는 사용 불가)

     

    • q1변수 선택.
    R Programming
    %%R
    
    mydata["q1"]

     

    Results
      q1
    1  1
    2  2
    3  2
    4  3
    5  4
    6  5
    7  5
    8  4

     

     

    • q 변수 선택
    R Programming
    %%R
    
    mydata[ c("q1","q2","q3","q4") ]

     

    Results
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     

     

    • subset함수는 colon 인식자를 이용하여서 쉽게 연속된 변수를 선택한다.
    R Programming
    %%R
    
    print( subset(mydata, select=q1:q4) )

     

    Results
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     

     

    • 변수 명의 리스트를 저장하여 이용.
    R Programming
    %%R
    
    myQnames<-c("q1","q2","q3","q4")
    print(myQnames) #변수명 출력.
    print(mydata[myQnames])

     

    Results
    [1] "q1" "q2" "q3" "q4"
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     

     

    • 이 프로그램 역시 변수 명의 리스트를 저장하는 방법이나,
    • 형태 1:4로부터 자동으로 생성된 연속적인 1,2,3,4를 문자 q에 붙여서 변수명을 생성한다.
    R Programming
    %%R
    
    myQnames <-paste( "q", 1:4, sep="")
    print(myQnames)         # 변수명 출력
    print(mydata[myQnames]) # 선택된 변수 출력

     

    Results
    [1] "q1" "q2" "q3" "q4"
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     

     

    • 인덱스에 의해 연속적인 변수 선택을 다시 설명.
    • 여기서 변수명에 의해 인덱스를 얻는 방법을 다시 반복.
    R Programming
    %%R
    
    print(mydata[,3:6])

     

    Results
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     

     

    • 단독 Number를 가진 numeric 벡터에 단독 인덱스 값을 저장.
    R Programming
    %%R
    
    myA <- which( names(mydata)=="q1" )
    print(myA) #숫자 3 출력.
    
    myZ <- which( names(mydata)=="q4" )
    print(myZ) #숫자 6을 출력.
    
    print(mydata[ ,myA:myZ ]) # 변수 3에서 6번째 변수를 출력.

     

    Results
    [1] 3
    [1] 6
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     


    3) 로직에 의해 변수 선택

    • “==” 인식자는 벡터의 모든 멤버를 값과 비교하여서, TRUE/FALSE 값의 논리 벡터로 반환한다.
    • 벡터는 변수를 선택하기 위해 이용된다.
    • 벡터의 Length는 변수의 수와 일치하여서, 데이터 프레임 mydata에서 변수로써 저장될 수 없다.
    • 단지 워크스페이스에 저장된다.
    • 수동적으로 변수 q1을 가진 벡터를 생성.
    • as.logical함수는 1&0의 논리값을 TRUE & FALSE값으로 변경.
    R Programming
    %%R
    
    myq <- as.logical( c(0,0,1,0,0,0) )
    print(myq)  # TRUE/FALSE 값 출력.
    print( mydata[ myq ] ) #변수 q1출력.

     

    Results
    [1] FALSE FALSE  TRUE FALSE FALSE FALSE
      q1
    1  1
    2  2
    3  2
    4  3
    5  4
    6  5
    7  5
    8  4

     

     

    • 자동적으로 같은 논리 벡터를 생성.
    R Programming
    %%R
    
    myq <- names(mydata)=="q1"
    print(myq)
    print( mydata[ myq ] )

     

    Results
    [1] FALSE FALSE  TRUE FALSE FALSE FALSE
      q1
    1  1
    2  2
    3  2
    4  3
    5  4
    6  5
    7  5
    8  4

     

     

    • OR 인식자(“|”)를 이용하여서 q1에서 q4의 변수 선택,
    • 결과를 myqs에 논리 벡터를 저장.
    R Programming
    %%R
    
    myqs <- names(mydata)=="q1" |
            names(mydata)=="q2" |
            names(mydata)=="q3" |
            names(mydata)=="q4"
    
    print(myqs)
    print( mydata[myqs] )

     

    Results
    [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     

     

    • %in% 연산자를 이용하여서 q1에서 q4의 변수 선택.
    • 위의 OR 연산자를 이용하는 것보다 간단.
    R Programming
    %%R
    
    myqs <- names(mydata) %in% c("q1","q2","q3","q4")
    print(myqs)
    print( mydata[myqs] )

     

    Results
    [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     

     

    • mydata를 접근하기 위해서 attach함수를 이용하면,
    • 단독적으로 변수 q1을 조회할 수 있지만, 후에 data frame을 detach 해야 한다.
    • 데이터를 읽기 위해서는 편하지만, 권장하지 않는 방법.
    R Programming
    %%R
    
    attach(mydata)
    print(gender)
    print(q1)
    print( data.frame(q1,q2,q3,q4) )

     

    Results
    [1] "f" "f" "f" "f" "m" "m" "m" "m"
    [1] 1 2 2 3 4 5 5 4
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     


    4) 선택된 변수의 새 데이터 프레임 생성.

    • 새로운 데이터 프레임에 위에서 선택된 변수를 저장. 아래 4개의 결과는 서로 같다.
    R Programming
    %%R
    
    myqs <- mydata[3:6]
    myqs <- mydata[ c("q1","q2","q3","q4") ]
    myqs <- data.frame(q1,q2,q3,q4)
    myqs <- subset(mydata, select=q1:q4)
    print(myqs)

     

    Results
      q1 q2 q3 q4
    1  1  1  5  1
    2  2  1  4  1
    3  2  2  4  3
    4  3  1 NA  3
    5  4  5  2  4
    6  5  4  5  5
    7  5  3  4  4
    8  4  5  5  5

     


    5. R - Tidyverse

     

    R Programming
    %%R
    
    library(tidyverse)
    library(skimr)
    
    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()
      )
    )

     

     

    • 데이터 기초 분석
    R Programming
    %%R
    
    str(mydata)

     

    Results
    tibble [8 x 7] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
     $ id      : num [1:8] 1 2 3 4 5 6 7 8
     $ workshop: chr [1:8] "1" "2" "1" "2" ...
     $ gender  : chr [1:8] "f" "f" "f" "f" ...
     $ q1      : num [1:8] 1 2 2 3 4 5 5 4
     $ q2      : num [1:8] 1 1 2 1 5 4 3 5
     $ q3      : num [1:8] 5 4 4 NA 2 5 4 5
     $ q4      : num [1:8] 1 1 3 3 4 5 4 5
     - attr(*, "spec")=
      .. cols(
      ..   id = col_double(),
      ..   workshop = col_character(),
      ..   gender = col_character(),
      ..   q1 = col_double(),
      ..   q2 = col_double(),
      ..   q3 = col_double(),
      ..   q4 = col_double()
      .. )

     

     

    R Programming
    %%R
    skim(mydata)

     

    Results
    -- Data Summary ------------------------
                               Values
    Name                       mydata
    Number of rows             8     
    Number of columns          7     
    _______________________          
    Column type frequency:           
      character                2     
      numeric                  5     
    ________________________         
    Group variables            None  
    
    – Variable type: character —————————————————-
    
    A tibble: 2 x 8
    skim_variable n_missing complete_rate min max empty n_unique whitespace
    
    
    1 workshop 0 1 1 1 0 2 0
    2 gender 0 1 1 1 0 2 0
    – Variable type: numeric ——————————————————
    
    A tibble: 5 x 11
    skim_variable n_missing complete_rate mean sd p0 p25 p50 p75
    
    
    1 id 0 1 4.5 2.45 1 2.75 4.5 6.25
    2 q1 0 1 3.25 1.49 1 2 3.5 4.25
    3 q2 0 1 2.75 1.75 1 1 2.5 4.25
    4 q3 1 0.875 4.14 1.07 2 4 4 5
    5 q4 0 1 3.25 1.58 1 2.5 3.5 4.25
    p100 hist
    
    1 8 <U+2587><U+2583><U+2587><U+2583><U+2587>
    2 5 <U+2583><U+2587><U+2583><U+2587><U+2587>
    3 5 <U+2587><U+2582><U+2582><U+2582><U+2585>
    4 5 <U+2582><U+2581><U+2581><U+2587><U+2587>
    5 5 <U+2587><U+2581><U+2587><U+2587><U+2587>

     

    • 모든 변수 선택하기.
    R Programming
    %%R
    # 테이블에 포함된 모든 변수 선택하기.
    
    mydata %>% select(everything())

     

    Results
    # A tibble: 8 x 7
         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    NA     3
    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

     


    1) INDEX를 사용한 변수 선택

    • 3번째 변수(q1) 선택.
    R Programming
    %%R
    
    mydata %>% select(4)

     

    Results
    # A tibble: 8 x 1
         q1
      
    1     1
    2     2
    3     2
    4     3
    5     4
    6     5
    7     5
    8     4

     

     

    • 인덱스를 사용하여서 변수 q1, q2, q3, q4 선택하기 위한 방법.
    R Programming
    %%R
    mydata %>% select(4:7)

     

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

     

     

    • 첫 번째, 두 번째 변수를 제외.
    R Programming
    %%R
    
    mydata %>% dplyr::select(-(1:3))

     

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

     

    • '%in%' 함수는 이름의 전체 벡터를 비교하여 일치 여부를 반환한다.
    R Programming
    %%R
    
    mydata %>% dplyr::select(q1,q2,q3,q4)

     

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

     

     

    R Programming
    %%R
    
    mydata %>% dplyr::select(q1:q4)

     

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

     


    2) 변수명에 의해 변수 선택하기

    • q1변수 선택.
    R Programming
    %%R
    
    mydata %>% dplyr::select(q1)

     

    Results
    # A tibble: 8 x 1
         q1
      
    1     1
    2     2
    3     2
    4     3
    5     4
    6     5
    7     5
    8     4

     

     

    • q 변수 선택
    R Programming
    mydata %>% dplyr::select(num_range("q",1:4))

     

     

    • 변수 명의 리스트를 저장하여 이용.
    R Programming
    %%R
    
    myQnames = c("q1","q2","q3","q4")
    print(myQnames) #변수명 출력.
    
    mydata %>% dplyr::select(myQnames)

     

    Results
    [1] "q1" "q2" "q3" "q4"
    Note: Using an external vector in selections is ambiguous.
    i Use `all_of(myQnames)` instead of `myQnames` to silence this message.
    i See .
    This message is displayed once per session.
    # A tibble: 8 x 4
         q1    q2    q3    q4
         
    1     1     1     5     1
    2     2     1     4     1
    3     2     2     4     3
    4     3     1    NA     3
    5     4     5     2     4
    6     5     4     5     5
    7     5     3     4     4
    8     4     5     5     5

     

     

    • 인덱스에 의해 연속적인 변수 선택을 다시 설명.
    • 여기서 변수명에 의해 인덱스를 얻는 방법을 다시 반복.
    R Programming
    %%R
    mydata %>% select(4:7)

     

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

     


    3) 로직에 의해 변수 선택

    • ==” 인식자는 벡터의 모든 멤버를 값과 비교하여서, TRUE/FALSE 값의 논리 벡터로 반환한다.
    • 벡터는 변수를 선택하기 위해 이용된다.
    • 벡터의 Length는 변수의 수와 일치하여서, 데이터 프레임 mydata에서 변수로써 저장될 수 없다.
    • 단지 워크스페이스에 저장된다.
    • 수동적으로 변수 q1을 가진 벡터를 생성.
    • as.logical함수는 1&0의 논리 값을 TRUE & FALSE값으로 변경.
    R Programming
    %%R
    
    myq <- c(F,F,F,T,F,F,F)
    myq1 <- which(myq == T)
    myq1

     

    Results
    [1] 4

     

     

    • 인덱스를 사용하여서 변수 q1출력.
    R Programming
    %%R
    
    mydata %>% 
      as_tibble() %>%
      select(myq1)

     

    Results
    Note: Using an external vector in selections is ambiguous.
    i Use `all_of(myq1)` instead of `myq1` to silence this message.
    i See .
    This message is displayed once per session.
    # A tibble: 8 x 1
         q1
      
    1     1
    2     2
    3     2
    4     3
    5     4
    6     5
    7     5
    8     4

     

     

    • 수치형 변수 선택
    R Programming
    %%R
    
    mydata %>% 
      as_tibble() %>%
      select(where(is.numeric))

     

    Results
    # A tibble: 8 x 5
         id    q1    q2    q3    q4
          
    1     1     1     1     5     1
    2     2     2     1     4     1
    3     3     2     2     4     3
    4     4     3     1    NA     3
    5     5     4     5     2     4
    6     6     5     4     5     5
    7     7     5     3     4     4
    8     8     4     5     5     5

     

     

    R Programming
    %%R
    
    mydata %>% 
      as_tibble() %>%
      dplyr::select_if(myq)

     

    Results
    # A tibble: 8 x 1
         q1
      
    1     1
    2     2
    3     2
    4     3
    5     4
    6     5
    7     5
    8     4

     

     

    • 참고 : subset 사용
    R Programming
    %%R
    subset(mydata,select=myq)

     

    Results
    # A tibble: 8 x 1
         q1
      
    1     1
    2     2
    3     2
    4     3
    5     4
    6     5
    7     5
    8     4

     

     

    • 자동적으로 같은 논리 벡터를 생성.
    R Programming
    %%R
    
    myq <- names(mydata)=="q1"
    print(myq)
    
    # 인덱스를 사용하여서 변수 q1출력.
    mydata %>% 
      as_tibble() %>%
      dplyr::select_if(myq)

     

    Results
    [1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
    # A tibble: 8 x 1
         q1
      
    1     1
    2     2
    3     2
    4     3
    5     4
    6     5
    7     5
    8     4

     

     

    • OR 인식자(“|”)를 이용하여서 q1에서 q4의 변수 선택,
    • 결과를 myqs에 논리 벡터를 저장.
    R Programming
    %%R
    
    myqs <- names(mydata)=="q1" |
            names(mydata)=="q2" |
            names(mydata)=="q3" |
            names(mydata)=="q4"
    
    myqs
    
    mydata %>% 
      as_tibble() %>%
      dplyr::select_if(myqs)

     

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

     

     

    • %in% 연산자를 이용하여서 q1에서 q4의 변수 선택.
    • 위의 OR 연산자를 이용하는 것보다 간단.
    R Programming
    %%R
    myqs <- names(mydata) %in% c("q1","q2","q3","q4")
    
    print(myqs)
    
    mydata %>% 
      as_tibble() %>%
      dplyr::select_if(myqs)

     

    Results
    [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
    # A tibble: 8 x 4
         q1    q2    q3    q4
         
    1     1     1     5     1
    2     2     1     4     1
    3     2     2     4     3
    4     3     1    NA     3
    5     4     5     2     4
    6     5     4     5     5
    7     5     3     4     4
    8     4     5     5     5

     

     

    • 변수 선택을 위한 다양한 방법. 아래 4개 프로그램은 동일한 결과를 출력한다.
    R Programming
    %%R
    
    mydata %>% 
      dplyr::select(num_range("q",1:4))
    
    mydata %>% 
      select(4:7)
    
    mydata %>% 
      select(q1,q2,q3,q4)
    
    mydata %>% 
      select(contains("q"))
    
    mydata %>% 
      select(starts_with("q"))
    
    mydata %>% 
      select(num_range("q", 1:4))
    
    mydata %>% 
      dplyr::select(matches("^q[[:digit:]]"))

     

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

     


    4) 선택된 변수의 새 데이터 프레임 생성.

     

    R Programming
    %%R
    mydata1 <- mydata %>% 
      select(num_range("q", 1:4))
    
    mydata1

     

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

     


    6. Python - Pandas

     

    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)

     

     

    • 모든 변수 선택하기.
    Python Programming
    mydata

     

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

     


    1) INDEX를 사용한 변수 선택

     

    Python Programming
    mydata[:]

     

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

     

     

    • 3번째 변수(q1) 선택.
    Python Programming
    mydata.iloc[:,3:4]

     

    Results
    	q1
    0	1
    1	2
    2	2
    3	3
    4	4
    5	5
    6	5
    7	4

     

     

    • 인덱스를 사용하여서 변수 q1, q2, q3, q4 선택하기 위한 방법.
    Python Programming
    mydata.iloc[:, [3,4,5,6] ]

     

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

     

     

     

    • 인덱스를 사용하여서 변수 q1, q2, q3, q4 선택하기 위한 방법.
    Python Programming
    mydata.iloc[:, [3,4,5,6] ]

     

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

     

     

    Python Programming
    mydata.iloc[:,3:7]

     

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

     

     

     

    • 첫 번째, 두 번째 변수를 제외.
    Python Programming
    mydata.drop(mydata.columns[[0 ,1, 2]], axis = 1)

     

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

     

    • 반복하여서 열의 범위를 이용한다면, Numeric 벡터에 전체 범위를 저장하면 유용.
    Python Programming
    mydata.iloc[:,3:7]

     

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

     

     

    • '%in%' 함수는 이름의 전체 벡터를 비교하여 일치 여부를 반환한다.
    Python Programming
    mydata.loc[:, ['q1', 'q2', 'q3', 'q4']]

     

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

     

     

    Python Programming
    mydata.loc[ : , 'q1':'q4']

     

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

     


    2) 변수명에 의해 변수 선택하기

     

    • q1변수 선택.
    Python Programming
    mydata["q1"]

     

    Results
    0    1
    1    2
    2    2
    3    3
    4    4
    5    5
    6    5
    7    4
    Name: q1, dtype: int32

     

     

    Python Programming
    mydata.loc[:,['q1']]

     

    Results
    	q1
    0	1
    1	2
    2	2
    3	3
    4	4
    5	5
    6	5
    7	4

     

     

    Python Programming
    mydata.loc[:,'q1']

     

    Results
    0    1
    1    2
    2    2
    3    3
    4    4
    5    5
    6    5
    7    4
    Name: q1, dtype: int32

     

     

    • q 변수 선택
    Python Programming
    mydata[["q1","q2","q3","q4" ]]

     

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

     

     

    Python Programming
    mydata.loc[:,["q1","q2","q3","q4" ]]

     

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

     

     

    • 변수 명의 리스트를 저장하여 이용.
    Python Programming
    myQnames = ["q1","q2","q3","q4"]
    
    print(myQnames) #변수명 출력.
    
    mydata[myQnames]

     

    Results
    ['q1', 'q2', 'q3', 'q4']
    	q1	q2	q3	q4
    0	1	1	5.0	1
    1	2	1	4.0	1
    2	2	2	4.0	3
    3	3	1	NaN	3
    4	4	5	2.0	4
    5	5	4	5.0	5
    6	5	3	4.0	4
    7	4	5	5.0	5

     

     

    • 이 프로그램 역시 변수 명의 리스트를 저장하는 방법이나,
    • 형태 1:4로부터 자동으로 생성된 연속적인 1,2,3,4를 문자 q에 붙여서 변수명을 생성한다.
    Python Programming
    myQnames = ["q" + str(i) for i in range(1,5)]
    
    print(myQnames)  # 변수명 출력
    
    mydata[myQnames] # 선택된 변수 출력

     

    Results
    ['q1', 'q2', 'q3', 'q4']
    	q1	q2	q3	q4
    0	1	1	5.0	1
    1	2	1	4.0	1
    2	2	2	4.0	3
    3	3	1	NaN	3
    4	4	5	2.0	4
    5	5	4	5.0	5
    6	5	3	4.0	4
    7	4	5	5.0	5

     

     

    • 인덱스에 의해 연속적인 변수 선택을 다시 설명.
    • 여기서 변수명에 의해 인덱스를 얻는 방법을 다시 반복.
    Python Programming
    mydata.iloc[:,3:7]

     

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

     

    • 단독 Number를 가진 numeric 벡터에 단독 인덱스 값을 저장.
    Python Programming
    mylist = list(mydata.columns)
    myA = mylist.index("q1")
    print(myA)
    myZ = mylist.index("q4")
    print(myZ)
    
    mydata.iloc[:,myA:myZ + 1] # 변수 3에서 6번째 변수를 출력.

     

    Results
    3
    6

     

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

     


    • 변수의 인덱스를 검색한 후 해당 변수의 위치를 지정하여서 선택
    Python Programming
    mylist = mydata.columns
    myA = [index for index, item in enumerate(mylist) if item == "q1"]
    print(myA)
    # 단독 Number를 가진 numeric 벡터에 단독 인덱스 값을 저장.
    myZ = [index for index, item in enumerate(mylist) if item == "q4"]
    print(myZ)
    
    mydata.iloc[:,myA[0]:myZ[0] + 1] # 변수 3에서 6번째 변수를 출력.

     

    Results
    [3]
    [6]

     

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

     


    3) 로직에 의해 변수 선택

    • “==” 인식자는 벡터의 모든 멤버를 값과 비교하여서, TRUE/FALSE 값의 논리 벡터로 반환한다.
    • 벡터는 변수를 선택하기 위해 이용된다.
    • 벡터의 Length는 변수의 수와 일치하여서, 데이터 프레임 mydata에서 변수로써 저장될 수 없다.
    • 단지 워크스페이스에 저장된다.
    • 수동적으로 변수 q1을 가진 벡터를 생성.
    • as.logical함수는 1&0의 논리값을 TRUE & FALSE값으로 변경.
    Python Programming
    myq = [False,False,False,True,False,False,False]
    
    #변수 q1출력.
    mydata.loc[:, myq ]

     

    Results
    	q1
    0	1
    1	2
    2	2
    3	3
    4	4
    5	5
    6	5
    7	4

     

     

    • 자동적으로 같은 논리 벡터를 생성.
    Python Programming
    myq = (mydata.columns=="q1")
    
    print(myq)
    mydata.loc[:,myq]

     

    Results
    [False False False  True False False False]

     

    Results
    	q1
    0	1
    1	2
    2	2
    3	3
    4	4
    5	5
    6	5
    7	4

     

     

    • OR 인식자(“|”)를 이용하여서 q1에서 q4의 변수 선택,
    • 결과를 myqs에 논리 벡터를 저장.
    Python Programming
    myqs_1 = (mydata.columns == "q1") | (mydata.columns == "q2") | (mydata.columns == "q3") | (mydata.columns == "q4")
    print(myqs_1)
    
    mydata.loc[:,myqs_1]

     

    Results
    [False False False  True  True  True  True]

     

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

     

     

    • isin 연산자를 이용하여서 q1에서 q4의 변수 선택.
    • 위의 OR 연산자를 이용하는 것보다 간단.
    Python Programming
    myqs = mydata.columns.isin (["q1","q2","q3","q4"]) 
    print(myqs)
    
    mydata.loc[:,myqs]

     

    Results
    [False False False  True  True  True  True]

     

    Results
    	q1	q2	q3	q4
    0	1	1	5.0	1
    1	2	1	4.0	1
    2	2	2	4.0	3
    3	3	1	NaN	3
    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개의 결과는 서로 같다.

    4) 선택된 변수로 구성된 새로운 데이터 프레임 생성.

     

    Python Programming
    myqs = mydata.iloc[:,3:7]
    print(myqs)
    
    myqs = mydata.loc[:,["q1","q2","q3","q4" ]]
    print(myqs)

     

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

     


    7. Python - dfply

     

    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)

     

    • 모든 변수 선택하기.
    Python Programming
    mydata

     

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

     

     

     

    • 모든 변수 선택하기.
    Python Programming
    mydata >> select(everything())

     

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

     

     

    1) INDEX를 사용한 변수 선택

    • 모든 변수를 선택하여 출력.
    Python Programming
    mydata >> select(everything())

     

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

     

     

    • 3번째 변수(q1) 선택.
    Python Programming
    mydata >> select(3)

     

    Results
    	q1
    0	1
    1	2
    2	2
    3	3
    4	4
    5	5
    6	5
    7	4

     

     

     

    • 인덱스를 사용하여서 변수 q1, q2, q3, q4 선택하기 위한 방법.
    Python Programming
    mydata >> select(columns_between(3, 7, inclusive=True))

     

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

     

     

     

    • 첫 번째, 두 번째 변수를 제외.
    Python Programming
    mydata >> select(~columns_between(0, 2, inclusive=True))

     

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

     

     

     

    • '%in%' 함수는 이름의 전체 벡터를 비교하여 일치 여부를 반환한다.
    Python Programming
    mydata >> select('q1','q2','q3','q4')

     

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

     

     

    Python Programming
    mydata >> select(range(3,7))

     

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

     

     

    Python Programming
    mydata >> select(columns_between(3, 7, inclusive=True)) 

     

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

     


     

    2) 변수명에 의해 변수 선택하기

    • q1변수 선택.
    Python Programming
    mydata >> select("q1")

     

    Results
    	q1
    0	1
    1	2
    2	2
    3	3
    4	4
    5	5
    6	5
    7	4

     

     

     

    • q 변수 선택
    Python Programming
    mydata >> select(num_range("q", range(1,5)))

     

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

     

     

     

    • 변수명의 리스트를 저장하여 이용.
    Python Programming
    myQnames = ["q1","q2","q3","q4"]
    print(myQnames) #변수명 출력.
    
    mydata >> select(myQnames)

     

    Results
    ['q1', 'q2', 'q3', 'q4']

     

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

     

     

     

    • 인덱스에 의해 연속적인 변수 선택을 다시 설명.
    • 여기서 변수명에 의해 인덱스를 얻는 방법을 다시 반복.
    Python Programming
    mydata >> select(columns_between(3, 7, inclusive=True)) 

     

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

     


    3) 로직에 의해 변수 선택

    • “==” 인식자는 벡터의 모든 멤버를 값과 비교하여서, TRUE/FALSE 값의 논리 벡터로 반환한다.
    • 벡터는 변수를 선택하기 위해 이용된다.
    • 벡터의 Length는 변수의 수와 일치하여서, 데이터 프레임 mydata에서 변수로써 저장될 수 없다.
    • 단지 워크스페이스에 저장된다.
    • [참고] which 함수(위치검색 함수)
    Python Programming
    [index for index, item in enumerate([True,False,True,True,True,False]) if item == True]

     

    Results
    [0, 2, 3, 4]

     

     

    • 수동적으로 변수 q1을 가진 벡터를 생성.
    • as.logical함수는 1&0의 논리값을 TRUE & FALSE값으로 변경.
    Python Programming
    myq = [False,False,False,True,False,False,False]
    myq1 = [index for index, item in enumerate(myq) if item == True]
    myq1

     

    Results
    [3]

     

     

    • 인덱스를 사용하여서 변수 q1출력.
    Python Programming
    mydata >> select(myq1)

     

    Results
    	q1
    0	1
    1	2
    2	2
    3	3
    4	4
    5	5
    6	5
    7	4

     

     

    • [참고] 수치형 변수명 리스트 생성
    Python Programming
    print(mydata._get_numeric_data().columns.tolist())
    
    print(mydata.select_dtypes(include=np.number).columns.tolist())
    
    mydata.select_dtypes(exclude='object').columns.tolist()

     

    Results
    ['q1', 'q2', 'q3', 'q4']
    

     

     

    • 수치형 변수 선택
    Python Programming
    mydata >> select(mydata.select_dtypes(include=np.number).columns.tolist())

     

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

     

     

     

    • select_if 사용.
    Python Programming
    def num_variable(df,serieses):
        result = []
    
        for series in serieses:
            if df[series].dtypes in (["int32","float64"]):
                result.append(series)
    
        return result
    
    mydata >> select(num_variable(mydata,mydata.columns.tolist()))

     

    Results
    ['q1', 'q2', 'q3', 'q4']

     

     

    • 자동적으로 같은 논리 벡터를 생성.
    Python Programming
    myq = (mydata.columns == "q1")
    print(myq)

     

    Results
    [False False False  True False False False]

     

     

    • OR 인식자(“|”)를 이용하여서 q1에서 q4의 변수 선택,
    • 결과를 myqs에 논리 벡터를 저장.
    Python Programming
    myqs_1 = (mydata.columns == "q1") | (mydata.columns == "q2") | (mydata.columns == "q3") | (mydata.columns == "q4")
    print(myqs_1)
    
    myq1 = [index for index, item in enumerate(myqs_1) if item == True]
    print(myq1)
    
    mydata >> select(myq1)

     

    Results
    [False False False  True  True  True  True]
    [3, 4, 5, 6]

     

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

     

     

     

    • %in% 연산자를 이용하여서 q1에서 q4의 변수 선택.
    • 위의 OR 연산자를 이용하는 것보다 간단.
    • isin 연산자를 이용하여서 q1에서 q4의 변수 선택.
    • 위의 OR 연산자를 이용하는 것보다 간단.
    Python Programming
    myqs_2 = mydata.columns.isin (["q1","q2","q3","q4"]) 
    print(myqs_2)
    
    myqs_3 = [index for index, item in enumerate(myqs_2) if item == True]
    print(myqs_3)
    
    mydata >> select(myqs_3)

     

    Results
    [False False False  True  True  True  True]
    [3, 4, 5, 6]

     

    Results
    	q1	q2	q3	q4
    0	1	1	5.0	1
    1	2	1	4.0	1
    2	2	2	4.0	3
    3	3	1	NaN	3
    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
    mydata >> select(num_range("q", range(1,5)))

     

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

     

     

    Python Programming
    mydata >> select(columns_between(3, 7, inclusive=True)) 

     

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

     

     

    Python Programming
    mydata >> select('q1','q2','q3','q4')

     

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

     

     

    Python Programming
    mydata >> select(contains("q"))

     

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

     

     

    Python Programming
    mydata >> select(starts_with("q"))

     

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

     

     

    Python Programming
    mydata >> select(matches("^q[\d]"))

     

    Results
    	q1	q2	q3	q4
    0	1	1	5.0	1
    1	2	1	4.0	1
    2	2	2	4.0	3
    3	3	1	NaN	3
    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
    mydata1 = mydata >> select(num_range("q", range(1,5)))
    
    mydata1

     

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

     

     

     


     

    통계프로그램 비교 목록(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 예제로 만나는 테이블 데이터 처리 방법 리스트 링크

     

    반응형

    댓글