포스팅 목차
[데이터 관리] 1. 변수 변환하여 신규 변수 생성하기
1. Proc SQL
SAS Programming |
options linesize=150;
proc sql;
create table withmooc as
select *,
q1+q2+q3+q4 as totalq,
sum(q1,q2,q3,q4) as totalq1,
log10(q1+q2+q3+q4) as logtot,
(q1+q2+q3+q4)/4 as mean1,
mean(q1,q2,q3,q4) as mean2
from BACK.mydata;
select * from withmooc;
quit;
Results |
id workshop gender q1 q2 q3 q4 totalq totalq1 logtot mean1 mean2
----------------------------------------------------------------------------------------------------
1 1 f 1 1 5 1 8 8 0.90309 2 2
2 2 f 2 1 4 1 8 8 0.90309 2 2
3 1 f 2 2 4 3 11 11 1.041393 2.75 2.75
4 2 f 3 1 . 3 . 7 . . 2.333333
5 1 m 4 5 2 4 15 15 1.176091 3.75 3.75
6 2 m 5 4 5 5 19 19 1.278754 4.75 4.75
7 1 m 5 3 4 4 16 16 1.20412 4 4
8 2 m 4 5 5 5 19 19 1.278754 4.75 4.75
2. SAS Programming
- 변수 연산을 통해서 새로운 변수 생성.;
SAS Programming |
DATA withmooc;
SET BACK.mydata;
totalq = (q1+q2+q3+q4);
totalq1 = sum(of q1-q4);
totalq2 = sum(q1,q2,q3,q4);
logtot = log10(totalq);
mean1 = (q1+q2+q3+q4)/4;
mean2 = mean(of q1-q4);
run;
PROC PRINT data=withmooc;
RUN;
Results |
workshop gender q1 q2 q3 q4 totalq totalq1 totalq2 logtot mean1 mean2
1 f 1 1 5 1 8 8 8 0.90309 2.00 2.00000
2 f 2 1 4 1 8 8 8 0.90309 2.00 2.00000
1 f 2 2 4 3 11 11 11 1.04139 2.75 2.75000
2 f 3 1 . 3 . 7 7 . . 2.33333
1 m 4 5 2 4 15 15 15 1.17609 3.75 3.75000
2 m 5 4 5 5 19 19 19 1.27875 4.75 4.75000
1 m 5 3 4 4 16 16 16 1.20412 4.00 4.00000
2 m 4 5 5 5 19 19 19 1.27875 4.75 4.75000
3. SPSS
SPSS Programming |
* SPSS Program for Transforming Variables.
GET FILE='C:\mydata.sav'.
COMPUTE Totalq=q1+q2+q3+q4.
COMPUTE Logtot=lg10(totalq).
COMPUTE Mean1=(q1+q2+q3+q4)/4.
COMPUTE Mean2=MEAN(q1 TO q4).
SAVE OUTFILE='C:\mydata.sav'.
LIST.
EXECUTE.
4. R Programming (R-PROJECT)
- 변수 변환을 위한 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 Programming |
%%R
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
- q변수의 총합인 totalq 변수 생성.
R Programming |
%%R
withmooc$totalq <- withmooc$q1 + withmooc$q2 + withmooc$q3 + withmooc$q4
withmooc
Results |
workshop gender q1 q2 q3 q4 totalq
1 1 f 1 1 5 1 8
2 2 f 2 1 4 1 8
3 1 f 2 2 4 3 11
4 2 f 3 1 NA 3 NA
5 1 m 4 5 2 4 15
6 2 m 5 4 5 5 19
7 1 m 5 3 4 4 16
8 2 m 4 5 5 5 19
- totalq의 LOG값 구하기.
R Programming |
%%R
withmooc$logtot <- log( withmooc$totalq )
withmooc
Results |
workshop gender q1 q2 q3 q4 totalq logtot
1 1 f 1 1 5 1 8 2.079442
2 2 f 2 1 4 1 8 2.079442
3 1 f 2 2 4 3 11 2.397895
4 2 f 3 1 NA 3 NA NA
5 1 m 4 5 2 4 15 2.708050
6 2 m 5 4 5 5 19 2.944439
7 1 m 5 3 4 4 16 2.772589
8 2 m 4 5 5 5 19 2.944439
- q변수의 평균값을 생성한다.
- 만약 결측치 존재 시, 결과 역시 결측치.
R Programming |
%%R
withmooc$meanq1 <- ( withmooc$q1 + withmooc$q2 + withmooc$q3 + withmooc$q4 )/4
withmooc
Results |
workshop gender q1 q2 q3 q4 totalq logtot meanq1
1 1 f 1 1 5 1 8 2.079442 2.00
2 2 f 2 1 4 1 8 2.079442 2.00
3 1 f 2 2 4 3 11 2.397895 2.75
4 2 f 3 1 NA 3 NA NA NA
5 1 m 4 5 2 4 15 2.708050 3.75
6 2 m 5 4 5 5 19 2.944439 4.75
7 1 m 5 3 4 4 16 2.772589 4.00
8 2 m 4 5 5 5 19 2.944439 4.75
- q변수의 평균 구하기.
- subset함수는 select함수에 선택된 변수를 선택.
R Programming |
%%R
myqs <- subset(withmooc,select=c(q1,q2,q3,q4) )
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
- 결측치를 제외하고, 평균값을 생성한다.
R Programming |
%%R
withmooc$mymeanq2 <- rowMeans( myqs, na.rm=TRUE )
withmooc
Results |
workshop gender q1 q2 q3 q4 totalq logtot meanq1 mymeanq2
1 1 f 1 1 5 1 8 2.079442 2.00 2.000000
2 2 f 2 1 4 1 8 2.079442 2.00 2.000000
3 1 f 2 2 4 3 11 2.397895 2.75 2.750000
4 2 f 3 1 NA 3 NA NA NA 2.333333
5 1 m 4 5 2 4 15 2.708050 3.75 3.750000
6 2 m 5 4 5 5 19 2.944439 4.75 4.750000
7 1 m 5 3 4 4 16 2.772589 4.00 4.000000
8 2 m 4 5 5 5 19 2.944439 4.75 4.750000
- transform함수를 이용하여 동시에 다수 변수 생성.
R Programming |
%%R
withmooc <- transform(withmooc,
sum=q1+q2+q3+q4,
mean=(q1+q2+q3+q4)/4)
withmooc
Results |
workshop gender q1 q2 q3 q4 totalq logtot meanq1 mymeanq2 sum mean
1 1 f 1 1 5 1 8 2.079442 2.00 2.000000 8 2.00
2 2 f 2 1 4 1 8 2.079442 2.00 2.000000 8 2.00
3 1 f 2 2 4 3 11 2.397895 2.75 2.750000 11 2.75
4 2 f 3 1 NA 3 NA NA NA 2.333333 NA NA
5 1 m 4 5 2 4 15 2.708050 3.75 3.750000 15 3.75
6 2 m 5 4 5 5 19 2.944439 4.75 4.750000 19 4.75
7 1 m 5 3 4 4 16 2.772589 4.00 4.000000 16 4.00
8 2 m 4 5 5 5 19 2.944439 4.75 4.750000 19 4.75
- 초기화된 변수를 먼저 생성 후에, 그 변수에 데이터를 대체.
R Programming |
%%R
withmooc <- data.frame(cbind(withmooc,sum=0.))
withmooc[11] <- withmooc$q1+withmooc$q2+Mydata$q3+Mydata$q4
withmooc
Results |
workshop gender q1 q2 q3 q4 totalq logtot meanq1 mymeanq2 sum
1 1 f 1 1 5 1 8 2.079442 2.00 2.000000 8
2 2 f 2 1 4 1 8 2.079442 2.00 2.000000 8
3 1 f 2 2 4 3 11 2.397895 2.75 2.750000 11
4 2 f 3 1 NA 3 NA NA NA 2.333333 NA
5 1 m 4 5 2 4 15 2.708050 3.75 3.750000 15
6 2 m 5 4 5 5 19 2.944439 4.75 4.750000 19
7 1 m 5 3 4 4 16 2.772589 4.00 4.000000 16
8 2 m 4 5 5 5 19 2.944439 4.75 4.750000 19
5. R - Tidyverse
R Programming |
%%R
library(tidyverse)
load(file="C:/work/data/mydata.Rdata")
print(mydata)
Results |
R[write to console]: -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
From cffi callback <function _consolewrite_ex at 0x000001FB64105280>:
Traceback (most recent call last):
File "C:\Users\BACK\anaconda3\lib\site-packages\rpy2\rinterface_lib\callbacks.py", line 131, in _consolewrite_ex
s = conversion._cchar_to_str_with_maxlen(buf, maxlen=n)
File "C:\Users\BACK\anaconda3\lib\site-packages\rpy2\rinterface_lib\conversion.py", line 130, in _cchar_to_str_with_maxlen
s = ffi.string(c, maxlen).decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 0: invalid start byte
R[write to console]: -- Conflicts ------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
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
- q변수의 총합인 totalq 변수 생성.
R Programming |
%%R
mydata <- mydata %>%
mutate(totalq = q1 + q2 + q3 + q4)
- totalq의 LOG값 구하기.
R Programming |
%%R
mydata <- mydata %>%
mutate(logtot = log(totalq))
mydata
Results |
workshop gender q1 q2 q3 q4 totalq logtot
1 1 f 1 1 5 1 8 2.079442
2 2 f 2 1 4 1 8 2.079442
3 1 f 2 2 4 3 11 2.397895
4 2 f 3 1 NA 3 NA NA
5 1 m 4 5 2 4 15 2.708050
6 2 m 5 4 5 5 19 2.944439
7 1 m 5 3 4 4 16 2.772589
8 2 m 4 5 5 5 19 2.944439
- rowMeans 함수
q1~q4 변수의 평균값을 생성한다. 만약 결측치 존재 시, 별도의 옵션이나 함수를 사용하지 않으면 기본적으로 결측값을 반환한다.
R Programming |
%%R
myqs <- subset(mydata,select=c(q1,q2,q3,q4) )
myqs
rowMeans( myqs, na.rm=TRUE )
Results |
1 2 3 4 5 6 7 8
2.000000 2.000000 2.750000 2.333333 3.750000 4.750000 4.000000 4.750000
R Programming |
%%R
mydata <- mydata %>%
dplyr::mutate(meanq1 = (q1 + q2 + q3 + q4) / 4,
meanq2 = rowMeans( myqs, na.rm=TRUE),
sum = (q1 + q2 + q3 + q4))
mydata
Results |
workshop gender q1 q2 q3 q4 totalq logtot meanq1 meanq2 sum
1 1 f 1 1 5 1 8 2.079442 2.00 2.000000 8
2 2 f 2 1 4 1 8 2.079442 2.00 2.000000 8
3 1 f 2 2 4 3 11 2.397895 2.75 2.750000 11
4 2 f 3 1 NA 3 NA NA NA 2.333333 NA
5 1 m 4 5 2 4 15 2.708050 3.75 3.750000 15
6 2 m 5 4 5 5 19 2.944439 4.75 4.750000 19
7 1 m 5 3 4 4 16 2.772589 4.00 4.000000 16
8 2 m 4 5 5 5 19 2.944439 4.75 4.750000 19
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)
- q변수의 총합인 totalq 변수 생성.
Python Programming |
mydata["totalq"] = ( pd.to_numeric(mydata['q1'], errors = 'coerce') +
pd.to_numeric(mydata['q2'], errors = 'coerce') +
pd.to_numeric(mydata['q3'], errors = 'coerce') +
pd.to_numeric(mydata['q4'], errors = 'coerce') )
mydata
Results |
id workshop gender q1 q2 q3 q4 totalq
0 1 1 f 1 1 5.0 1 8.0
1 2 2 f 2 1 4.0 1 8.0
2 3 1 f 2 2 4.0 3 11.0
3 4 2 f 3 1 NaN 3 NaN
4 5 1 m 4 5 2.0 4 15.0
5 6 2 m 5 4 5.0 5 19.0
6 7 1 m 5 3 4.0 4 16.0
7 8 2 m 4 5 5.0 5 19.0
- totalq의 LOG값 구하기.
Python Programming |
mydata["logtot"] = np.log( mydata["totalq"] )
mydata
Results |
id workshop gender q1 q2 q3 q4 totalq logtot
0 1 1 f 1 1 5.0 1 8.0 2.079442
1 2 2 f 2 1 4.0 1 8.0 2.079442
2 3 1 f 2 2 4.0 3 11.0 2.397895
3 4 2 f 3 1 NaN 3 NaN NaN
4 5 1 m 4 5 2.0 4 15.0 2.708050
5 6 2 m 5 4 5.0 5 19.0 2.944439
6 7 1 m 5 3 4.0 4 16.0 2.772589
7 8 2 m 4 5 5.0 5 19.0 2.944439
- q변수의 평균 생성.
- 만약 결측치 존재시, 결과 역시 결측치.
Python Programming |
mydata["meanq1"] = ( pd.to_numeric(mydata['q1'], errors = 'coerce') +
pd.to_numeric(mydata['q2'], errors = 'coerce') +
pd.to_numeric(mydata['q3'], errors = 'coerce') +
pd.to_numeric(mydata['q4'], errors = 'coerce') ) / 4
mydata
Results |
id workshop gender q1 q2 q3 q4 totalq logtot meanq1
0 1 1 f 1 1 5.0 1 8.0 2.079442 2.00
1 2 2 f 2 1 4.0 1 8.0 2.079442 2.00
2 3 1 f 2 2 4.0 3 11.0 2.397895 2.75
3 4 2 f 3 1 NaN 3 NaN NaN NaN
4 5 1 m 4 5 2.0 4 15.0 2.708050 3.75
5 6 2 m 5 4 5.0 5 19.0 2.944439 4.75
6 7 1 m 5 3 4.0 4 16.0 2.772589 4.00
7 8 2 m 4 5 5.0 5 19.0 2.944439 4.75
- q변수의 평균 구하기.
- subset함수는 select함수에 선택된 변수를 선택.
- 결측치를 제외 하고, 평균을 생성
Python Programming |
mydata["meanq2"] = mydata[["q1","q2","q3","q4"]].mean(axis=1,skipna=True)
mydata
Results |
id workshop gender q1 q2 q3 q4 totalq logtot meanq1 meanq2
0 1 1 f 1 1 5.0 1 8.0 2.079442 2.00 2.000000
1 2 2 f 2 1 4.0 1 8.0 2.079442 2.00 2.000000
2 3 1 f 2 2 4.0 3 11.0 2.397895 2.75 2.750000
3 4 2 f 3 1 NaN 3 NaN NaN NaN 2.333333
4 5 1 m 4 5 2.0 4 15.0 2.708050 3.75 3.750000
5 6 2 m 5 4 5.0 5 19.0 2.944439 4.75 4.750000
6 7 1 m 5 3 4.0 4 16.0 2.772589 4.00 4.000000
7 8 2 m 4 5 5.0 5 19.0 2.944439 4.75 4.750000
- transform함수를 이용하여 동시에 다수 변수 생성.
Python Programming |
mydata.assign(sum = mydata['q1']+mydata['q2']+mydata['q3']+mydata['q4'],
mean = (mydata['q1']+mydata['q2']+mydata['q3']+mydata['q4'])/4)
Results |
id workshop gender q1 q2 q3 q4 totalq logtot meanq1 meanq2 sum mean
0 1 1 f 1 1 5.0 1 8.0 2.079442 2.00 2.000000 8.0 2.00
1 2 2 f 2 1 4.0 1 8.0 2.079442 2.00 2.000000 8.0 2.00
2 3 1 f 2 2 4.0 3 11.0 2.397895 2.75 2.750000 11.0 2.75
3 4 2 f 3 1 NaN 3 NaN NaN NaN 2.333333 NaN NaN
4 5 1 m 4 5 2.0 4 15.0 2.708050 3.75 3.750000 15.0 3.75
5 6 2 m 5 4 5.0 5 19.0 2.944439 4.75 4.750000 19.0 4.75
6 7 1 m 5 3 4.0 4 16.0 2.772589 4.00 4.000000 16.0 4.00
7 8 2 m 4 5 5.0 5 19.0 2.944439 4.75 4.750000 19.0 4.75
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)
# 모든 변수 선택하기.
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
- q변수의 총합인 totalq 변수 생성.
Python Programming |
mydata = mydata >> mutate(totalq = X.q1 + X.q2 + X.q3 + X.q4)
mydata
Results |
id workshop gender q1 q2 q3 q4 totalq
0 1 1 f 1 1 5.0 1 8.0
1 2 2 f 2 1 4.0 1 8.0
2 3 1 f 2 2 4.0 3 11.0
3 4 2 f 3 1 NaN 3 NaN
4 5 1 m 4 5 2.0 4 15.0
5 6 2 m 5 4 5.0 5 19.0
6 7 1 m 5 3 4.0 4 16.0
7 8 2 m 4 5 5.0 5 19.0
- totalq의 LOG값 구하기.
Python Programming |
mydata = mydata >> mutate(logtot = np.log(mydata['totalq']))
mydata
Results |
id workshop gender q1 q2 q3 q4 totalq logtot
0 1 1 f 1 1 5.0 1 8.0 2.079442
1 2 2 f 2 1 4.0 1 8.0 2.079442
2 3 1 f 2 2 4.0 3 11.0 2.397895
3 4 2 f 3 1 NaN 3 NaN NaN
4 5 1 m 4 5 2.0 4 15.0 2.708050
5 6 2 m 5 4 5.0 5 19.0 2.944439
6 7 1 m 5 3 4.0 4 16.0 2.772589
7 8 2 m 4 5 5.0 5 19.0 2.944439
Python Programming |
@make_symbolic
def log(series):
return np.log(series)
mydata >> mutate(y_log = log(X.totalq))
Results |
id workshop gender q1 q2 q3 q4 totalq logtot y_log
0 1 1 f 1 1 5.0 1 8.0 2.079442 2.079442
1 2 2 f 2 1 4.0 1 8.0 2.079442 2.079442
2 3 1 f 2 2 4.0 3 11.0 2.397895 2.397895
3 4 2 f 3 1 NaN 3 NaN NaN NaN
4 5 1 m 4 5 2.0 4 15.0 2.708050 2.708050
5 6 2 m 5 4 5.0 5 19.0 2.944439 2.944439
6 7 1 m 5 3 4.0 4 16.0 2.772589 2.772589
7 8 2 m 4 5 5.0 5 19.0 2.944439 2.944439
- q변수의 평균 생성.
- 만약 결측치 존재시, 결과 역시 결측치.
Python Programming |
myqs = mydata >> select([X.q1,X.q2,X.q3,X.q4])
print(myqs)
myqs.mean(axis=1)
myqs.agg([np.mean],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
mean
0 2.000000
1 2.000000
2 2.750000
3 2.333333
4 3.750000
5 4.750000
6 4.000000
7 4.750000
Python Programming |
mydata = mydata >> mutate(meanq1 = (X.q1+X.q2+X.q3+X.q4) / 4 ,meanq2 = X.mean(axis=1), sum = (X.q1+X.q2+X.q3+X.q4))
mydata
Results |
id workshop gender q1 q2 q3 q4 totalq logtot meanq1 meanq2 sum
0 1 1 f 1 1 5.0 1 8.0 2.079442 2.00 3.013240 8.0
1 2 2 f 2 1 4.0 1 8.0 2.079442 2.00 3.013240 8.0
2 3 1 f 2 2 4.0 3 11.0 2.397895 2.75 4.066316 11.0
3 4 2 f 3 1 NaN 3 NaN NaN NaN 2.333333 NaN
4 5 1 m 4 5 2.0 4 15.0 2.708050 3.75 5.451342 15.0
5 6 2 m 5 4 5.0 5 19.0 2.944439 4.75 6.824073 19.0
6 7 1 m 5 3 4.0 4 16.0 2.772589 4.00 5.795431 16.0
7 8 2 m 4 5 5.0 5 19.0 2.944439 4.75 6.824073 19.0
통계프로그램 비교 목록(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 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 |
반응형
'통계프로그램 비교 시리즈 > 데이터 전처리 비교' 카테고리의 다른 글
통계프로그램 비교 시리즈 – [데이터 관리] 3. 결측값 할당을 위한 조건 변환 (0) | 2022.01.10 |
---|---|
통계프로그램 비교 시리즈 – [데이터 관리] 2. 조건문에 의한 변환 (0) | 2022.01.07 |
통계프로그램 비교 시리즈 – [변수와 관측치 선택] 3. 변수와 관측치를 동시에 선택 (0) | 2022.01.07 |
통계프로그램 비교 시리즈 – [변수와 관측치 선택] 2. 관측치 선택( WHERE, IF, SELECT IF ) (0) | 2022.01.07 |
통계프로그램 비교 시리즈 – [변수와 관측치 선택] 1. 변수 선택하기 (0) | 2022.01.06 |
댓글