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

통계프로그램 비교 시리즈 – 3. 쉼표(,) 구분자 텍스트 파일 읽기

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

포스팅 목차

    3. 쉼표(,) 구분자 텍스트 파일 읽기

     


    1. Proc SQL

     


    2. SAS Programming

     

    • INFILE문을 사용하여서 구분자 데이터 파일 읽기.
    SAS Programming
    libname BACK 'C:\DATA';
    
    DATA BACK.mydata;
         INFILE 'c:\data\mydata.csv' delimiter = ','
                MISSOVER DSD lrecl=32767 firstobs=2 ;
         INPUT id workshop gender $ q1 q2 q3 q4;
    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
     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

     


    3. SPSS

    • 구분자(Delimited) 텍스트 파일을 읽기 위한 SPSS프로그램
    SPSS Programming
    GET DATA  /TYPE = TXT
              /FILE = 'C:\data\mydata.csv'
              /DELCASE = LINE
              /DELIMITERS = ","
              /ARRANGEMENT = DELIMITED
              /FIRSTCASE = 2
              /IMPORTCASE = ALL
              /VARIABLES = id F2.1  workshop F1.0 gender A1.0
                            q1 F1.0  q2 F1.0  q3 F1.0  q4 F1.0 .
    
    LIST.
    
    SAVE OUTFILE='c:\data\mydata.sav'.
    
    EXECUTE.

     


    4. R Programming

    • 구분자(Delimited) 텍스트 파일을 읽기 위한 R-Project프로그램
    R Programming
    # 파이썬 버젼 확인
    !python --version

     

    Results
    Python 3.8.3

     

    R Programming
    # conda 버젼 확인
    !conda --version

     

    Results
    conda 4.8.3

     


    • 필요시 R 패키지 설치
    R Programming
    # %%R
    
    ## 필요시 R 패키지 설치
    # install.packages('tidyverse', repos='http://cran.us.r-project.org')

     


    • 파이썬에서 R 사용하기 위한 환경설정
    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
    # 기본적 구분자는 값 사이의 탭 또는 공백이다.
    # 파일 경로에서 "c:\\"은 오류가 아니다.

     

    R Programming
    mydata <- read.table ("c:/work/data/mydata.csv",header=TRUE, sep=",",row.names="id")
    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

     

     

    R Programming
    %%R
    
    # 변수 q1과 q2위치에 Null을 지정하여서 변수 q1과 q2 생략.
    myCols<-read.table("c:/work/data/mydata.csv",header=TRUE,sep=',' ,   
             row.names="id",
    colClasses=c("integer","integer","character","NULL","NULL","integer","integer") )
    
    print(myCols)
    
    # 디스크에 파일 쓰기.
    save.image(file="c:/work/data/mydata.Rdata")

     

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

     


    5. R - Tidyverse

     

    R Programming
    %%R
    
    # PermissionError: [WinError 32] 다른 프로세스가 파일을 사용 중이기 때문에 프로세스가 액세스 할 수 없습니다: 'C:\\Users\\BACK\\AppData\\Local\\Temp\\tmp6thxr8hg\\Rplots001.png'
    
    # install.packages('tidyverse', repos='http://cran.us.r-project.org')
    # install.packages('remotes', repos='http://cran.us.r-project.org')
    # install.packages('skimr', repos='http://cran.us.r-project.org')

     

    Results
    R[write to console]: Installing package into 'C:/Users/BACK/anaconda3/Lib/site-packages/rpy2/R/win-library/4.0'
    (as 'lib' is unspecified)

     

    R Programming
    %%R
    library(tidyverse)
    library(skimr)

     

    R Programming
    %%R
    # tidyverse의 readr 패키지로 데이터 읽기
    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 함수를 사용하여서 데이터 기초 분석
    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></u+2587></u+2587></u+2587></u+2581></u+2587></u+2587></u+2587></u+2581></u+2581></u+2582></u+2585></u+2582></u+2582></u+2582></u+2587></u+2587></u+2587></u+2583></u+2587></u+2583></u+2587></u+2583></u+2587></u+2583></u+2587>

     

     

    R Programming
    %%R
    # 결측치 기본 대체. q3 열에 결측치가 존재하면 0으로 변경.
    mydata %>%
      mutate(q3 = ifelse(is.na(q3), 0, q3))

     

    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     0     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

     


    6. Python - Pandas

     

    Python Programming
    # !pip install sweetviz

     

    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_t = pd.read_table("C:/work/data/mydata.csv",sep=",",dtype='unicode')

     

    Python Programming
    #mydata['q3'] = pd.to_numeric(mydata['q3'], errors='coerce')
    
    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.info()

     

    Results
    <class 'pandas.core.frame.dataframe'="">
    RangeIndex: 8 entries, 0 to 7
    Data columns (total 7 columns):
     #   Column    Non-Null Count  Dtype  
    ---  ------    --------------  -----  
     0   id        8 non-null      object 
     1   workshop  8 non-null      object 
     2   gender    8 non-null      object 
     3   q1        8 non-null      int32  
     4   q2        8 non-null      int32  
     5   q3        7 non-null      float64
     6   q4        8 non-null      int32  
    dtypes: float64(1), int32(3), object(3)
    memory usage: 480.0+ bytes

     


     

    Python Programming
    # 결측치를 0으로 변경 후 정수로 변환
    mydata['q3'] = mydata['q3'].replace(' ', np.nan).fillna(0).astype(int)
    
    mydata

     

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

    7. Python - dfply

     

    Python Programming
    !pip install dfply

     

     

    Python Programming
    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

     

    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
     
    from dfply import *
    import pandas as pd
    import numpy  as np

     

    Python Programming
    # 데이터 기초 분석
    
    str(mydata)

     

    Results
    '  id workshop gender  q1  q2  q3  q4\n0  
    1        1      f   1   1   5   1\n1  
    2        2      f   2   1   4   1\n2  
    3        1      f   2   2   4   3\n3  
    4        2      f   3   1   0   3\n4  
    5        1      m   4   5   2   4\n5  
    6        2      m   5   4   5   5\n6  
    7        1      m   5   3   4   4\n7  
    8        2      m   4   5   5   5'

     

    Python Programming
    # 결측치 기본 대체 (X['q3'] = X.q3)
    mydata >> mutate(q3=if_else((X.q3.apply(pd.isnull)),0,X.q3))

     

    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	0.0	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
     
    # 결측치 기본 대체 (X['q3'] = X.q3)
    mydata >> mutate(q3=if_else((X.q3.isnull()),0,X.q3))

     

    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	0.0	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

     


     


     

     

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

    댓글