포스팅 목차
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 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 |
반응형
'통계프로그램 비교 시리즈 > 데이터 전처리 비교' 카테고리의 다른 글
통계프로그램 비교 시리즈 – 8. IMPORTING DATA FROM SPSS (0) | 2022.01.06 |
---|---|
통계프로그램 비교 시리즈 – 7. IMPORTING DATA FROM SAS (0) | 2022.01.06 |
통계프로그램 비교 시리즈 – 6. 고정 길이 텍스트 파일 읽기 (두개의 행에 하나의 관측치존재) (0) | 2022.01.05 |
통계프로그램 비교 시리즈 – 5. 고정 길이 텍스트 파일 읽기 (한줄에 하나의 관측치) (0) | 2022.01.05 |
통계프로그램 비교 시리즈 – 4. 프로그램 내에서 TEXT 데이터 읽기 (0) | 2022.01.05 |
댓글