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

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

댓글