분석을 위해 데이터를 전처리 하는 것은 언제나 어려운 일이다. 

원하는 결과를 얻기 위해 사용할 수 있는 방법은 여러가지가 있는데, 그중 가장 간단하고 짧은 code를 선택하는 게 여러가지 면에서 좋을 것 같다는 막연한 생각을 가지고 있다.

유사한 패턴을 가지고 있는 데이터를 한번에 추출하는 방법을 찾고 있다가 우연히 '정규표현식'이라는 분야를 접하게 되었는데 coding 초보에게는 완전히 신세계였다. 

수집한 단어 목록중 '제1장', '제2장'...... '제xxx장'같은 단어를 제거하는 문제인데, for 문을 이용해도 되겠지만 code가 길어져서 다소 불만스러워 하고 있었는데, 정규표현식을 이용하면 이걸 한줄짜리 짧은 코드를 이용하여 처리가 가능하다는 것을 보고 그 매력에 푹 빠져 버렸다. 다만 code가 짧아지고 깔끔하게 정리된다는 장점에 비해 너무 어려워 '가까이 하기엔 너무 먼 당신' 이라는 것이 문제

Posted by 화공쟁이
,

R 4.0.2가 출시되었다. R studio도 1.3.1056이 나왔다.

생각난 김에 새 버전을 설치해 보기로 마음먹었다.

"installr"패키지 등을 이용하면 기존버전에서 사용하던 패키지들을 자동으로 옮겨주기도 하지만,  자주 사용하지 않는 패키지 정리도 할겸 패키지 설치도 수동으로 해보려고 한다. R이 3.6에서 4.0으로 major upgrade되어 뭔가 호환되지 않는 패키지가 있을 것 같기도 하고 겸사겸사....

install.packages()로 이것저것 설치해 보는데 별다른 에러없이 설치가 무난히 진행된다.

이번에는 "mosaic"패키지를 설치하면 R에서 미적분을 할 수 있다고 하길래 도전 개시

패키지 설치는 문제 없었는데 library(mosaic)에서 에러가 발생한다. "backports"라는 패키지가 없어서 발생한 에러란다.

install.packages("backports")를 시도해 본다. 다시 에러발생. 대충 해석해보니 rtools40이 없어 source는 download하였지만 컴파일이 안된다는 뜻인 것 같다. 우여곡절 끝에 설치 성공

이번에는 R studio를 실행하여 이것저것 두들겨 본다.

script창에서 한글을 입력해 보는데..... 감동의 물결이 밀려 온다. 뭔가 한글스럽게 입력이 진행된다.

전에는 한글을 입력하는 동안 화면에 외계어같은 것이 보여서  불편했는데, 지금은 한글 입력중에도 한글이 깨지지 않고 자연스럽게 입력된다.

 

Posted by 화공쟁이
,

anova(), shapiro.test()

anova함수를 사용하여 r프로그래밍 하던중 계산이 순조롭게 이루어지지 않고 자꾸 에러가 난다. 도움말을 찾아보니 anova 함수에 사용하는 인수는 model fitting 함수의 결과값이 들어가야 한단다. lm()은 linear model fitting에 사용되는 함수니까 조건을 만족하고, 드디어 에러가 멈췄다.

한편 data가 정규분포를 따르는 지를 확인하는 shapiro.test()는 숫자가 아닌 인수를 처리하지 못한다. 얼핏 교재의 프로그램을 보다가 aov()라는 model fitting 함수가 보여서 잠시 착각했는데 resid()를 이용하여 수치 data로 변환한 것에 주목

market <-  read.table("market-1.txt", header=T)
market.lm = lm(Y ~ X, data=market)
anova(market.lm)
## Analysis of Variance Table
## 
## Response: Y
##           Df Sum Sq Mean Sq F value    Pr(>F)    
## X          1 485.57  485.57   192.9 3.554e-09 ***
## Residuals 13  32.72    2.52                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#anova 분석의 또다른 방법
out = aov(Y~X, data=market) 
out
## Call:
##    aov(formula = Y ~ X, data = market)
## 
## Terms:
##                        X Residuals
## Sum of Squares  485.5726   32.7234
## Deg. of Freedom        1        13
## 
## Residual standard error: 1.586563
## Estimated effects may be unbalanced
summary(out)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## X            1  485.6   485.6   192.9 3.55e-09 ***
## Residuals   13   32.7     2.5                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
shapiro.test(resid(out))
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(out)
## W = 0.93448, p-value = 0.318

lm() 함수 사용 사례

market <-  read.table("market-1.txt", header=T)
market.lm = lm(Y ~ X, data=market)
market.lm
## 
## Call:
## lm(formula = Y ~ X, data = market)
## 
## Coefficients:
## (Intercept)            X  
##      0.3282       2.1497
summary(market.lm)
## 
## Call:
## lm(formula = Y ~ X, data = market)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.02908 -1.35349 -0.05685  0.98903  2.51517 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   0.3282     1.4302   0.229    0.822    
## X             2.1497     0.1548  13.889 3.55e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.587 on 13 degrees of freedom
## Multiple R-squared:  0.9369, Adjusted R-squared:  0.932 
## F-statistic: 192.9 on 1 and 13 DF,  p-value: 3.554e-09
names(market.lm)
##  [1] "coefficients"  "residuals"     "effects"       "rank"         
##  [5] "fitted.values" "assign"        "qr"            "df.residual"  
##  [9] "xlevels"       "call"          "terms"         "model"
Posted by 화공쟁이
,

3개 이상의 집단을 비교할 때는 다음의 조건에 따라 서로 다른 분석방법을 적용한다.

1. 표본이 연속값인가?

연속값이 아니라면 Kruskal-Wallis H test 

 

2. 표본은 정규분포를 따르는가?

정규분포를 따르지 않는다면 Kruskal-Wallis H test 

 

3. 2개의 집단의 분산이 동일한가?

등분산 조건이 아니라면 Welch's anova

 

1~3의 조건을 모두 만족하는 경우라면 anova

 

Posted by 화공쟁이
,

2개의 집단을 비교할 때는 다음의 조건에 따라 서로 다른 분석방법을 적용한다.

1. 표본이 연속값인가?

연속값이 아니라면 Mann-Whitney U test (Wilcoxon rank sum test)

관련자료 [chemineer.tistory.com/26]

 

Mann-Whitney U test

Mann-Whitney U test란 평균이나 분산등의 모수(parameter)를 이용하지 않는 비모수적 검정방법의 하나. 표본이 연속값이 아니거나 정규분포를 따르지 않는 등 t-test를 사용할 수 없는 경우에 사용됨 검��

chemineer.tistory.com

 

2. 표본은 정규분포를 따르는가?

정규분포를 따르지 않는다면 Mann-Whitney U test (Wilcoxon rank sum test)

관련자료 [chemineer.tistory.com/26]

 

3. 2개의 집단의 분산이 동일한가?

등분산 조건이 아니라면 Welch's t-test

 

1~3의 조건을 모두 만족하는 경우라면 Student's t-test

 

Posted by 화공쟁이
,

파이썬은 여러 분야에 사용할 수 있는 다양한 패키지를 가지고 있다는 큰 장점이 있다. 그중 데이터 분석에 많
이 사용되는 몇 가지 유명한 패키지를 소개한다.

NumPy
NumPy("넘파이"라고 읽는다) 패키지는 파이썬에서 수치 해석, 특히 선형 대수(linear algebra) 계산 기능을 제
공한다. 자료형이 고정된 다차원 배열 클래스(n-dimensional array)와 벡터화 연산(vectorized operation)을 지
원하며 수학 연산을 위한 가장 기본적이고 중요한 패키지다.
원래는 파이썬에서 MATLAB과 같은 기능을 구현하고자 Numeric이라는 이름으로 프로젝트가 시작되었으나,
2005년 Travis Oliphant에 의해 Numarray 패키지와 통합되며 NumPy라는 이름으로 바뀌었다. 내부적으로는
BLAS(Basic Linear Algebra Subprograms)와 LAPACK(Linear Algebra Package)이라는 오픈 소스 선형 대수
라이브러리에 의존한다.

SciPy
SciPy("사이파이"라고 읽는다) 패키지는 고급 수학 함수, 수치적 미적분, 미분 방정식 계산, 최적화, 신호 처리
등에 사용하는 다양한 과학 기술 계산 기능을 제공한다. SciPy 패키지는 Numeric 패키지에 기반을 두고 만들
어진 다양한 수치 해석 패키지들을 2001년에 Travis Oliphant와 Pearu Peterson 등이 통합, 재정리하여 만들었
다.


SymPy
SymPy("심파이"라고 읽는다) 패키지는 숫자를 더하거나 빼는 수치 연산이 아니라 인수 분해, 미분, 적분 등 심
볼릭 연산 기능을 제공한다. SymPy 프로젝트는 파이썬의 Mathematica와 같은 심볼릭 연산 기능을 넣고자 하
는 노력으로 2006년에 Ondrej Certik에 의해 시작되었다. SymPy의 기능은 http://live.sympy.org/
(http://live.sympy.org/) 또는 http://www.sympygamma.com/ (http://www.sympygamma.com/) 웹사이트를 방문
하면 브라우저 상에서 바로 확인할 수 있다.


Pandas
Pandas("판다스"라고 읽는다) 패키지는 테이블 형태의 데이터를 다루는 데이터프레임(DataFrame) 자료형을
제공한다. 자료의 탐색이나 정리에 아주 유용하여 데이터 분석에 빠질 수 없는 필수 패키지다. 2008년도에
Wes McKinney에 의해 프로젝트가 시작되었다. 원래는 R 언어에서 제공하는 데이터프레임 자료형을 파이썬
에서 제공할 수 있도록 하는 목적이었으나 더 다양한 기능이 추가되었다.


Matplotlib
Matplotlib("맷플롯리브"라고 읽는다) 패키지는 파이썬에서 각종 그래프나 챠트 등을 그리는 시각화 기능을 제
공한다. Tkinter, wxPython, Qt, GTK+ 등의 다양한 그래픽 엔진을 사용할 수 있다. 또한, MATLAB의 그래프 기
능을 거의 동일하게 사용할 수 있는 pylab이라는 서브패키지를 제공하므로 MATLAB에 익숙한 사람들은 바로
Matplotlib을 사용할 수 있다.


Seaborn
Seaborn("시본"이라고 읽는다) 패키지는 Matplotlib 패키지에서 지원하지 않는 고급 통계 차트를 그리는 통계
용 시각화 기능을 제공한다.


StatsModels
StatsModels("스탯츠모델즈"라고 읽는다) 패키지는 통계 및 회귀 분석이나 시계열 분석용 패키지다.


Scikit-Learn
Scikit-Learn("사이킷런"이라고 읽는다)은 머신러닝 학습용 패키지다. 대부분의 머신러닝 모형을 제공하므로
파이썬으로 머신러닝을 공부하는 데 최적의 학습 도구다.

TensorFlow
TensorFlow("텐서플로우"라고 읽는다)는 신경망 모형 등의 딥러닝 모형을 위한 파이썬 패키지다. 심볼릭 연산
과 그래프 연산 모형, GPGPU를 사용한 연산 등을 제공하므로 대량 연산을 요하는 딥러닝 학습에 필수 패키지
다.

Keras
Keras("케라스"라고 읽는다) 패키지는 TensorFlow 패키지를 쉽게 사용할 수 있도록 도와주는 고수준 패키지
다. Keras를 사용하면 쉽게 신경망 모형을 구현할 수 있다. 원래 독자적인 패키지이지만 지금은 텐서플로에 통
합되었다.

PyTorch
PyTorch("파이토치"라고 읽는다.) 패키지는 딥러닝 라이브러리인 Torch에 기반하여 만들어진 패키지다. 텐서
플로와 같은 저수준 API와 케라스와 같은 고수준 API를 같이 제공한다.

pgmpy
pgmpy("피쥐엠파이"라고 읽는다.) 패키지는 확률론적 그래프 모형을 구현하는 파이썬 패키지다.

Posted by 화공쟁이
,

1. 할당기호

R에서 coding할 때 할당기호 입력하는 것이 키보드를 여러번 두드려야 해서 의외로 성가신 일이다.

RStudio 사용자들을 위한, 할당기호를 간편하게 입력하는 방법이 'R for data science-Hadley Wickham' 에 소개되어 있기에 여기에도 그 방법을 남겨보고자 한다.

use RStudio’s keyboard shortcut: Alt + -

RStudio에서 Alt key와 마이너스부호(-)를 함께 typing하면 할당기호 (<-) 가 입력된다는 말씀.

 

2. 긴 변수명을 다시 입력해야 할 때 - 자동완성기능

this_is_a_really_long_name <- 2.5

이렇게 긴 변수명을 다시 typing하는 것은 독수리타법을 구사하는 사람에게는 무척 어려운 일이다. 이것도 RStudio에서는 간단히 해결되는데...

type “this”, press TAB

3. %>% 입력 (pipe operator)

dplyr이나 magrittr등의 패키지를 사용하는 경우 pipe operator를 많이 사용하게 되는데 이때 사용하는 단축키는 다음과 같다.

use RStudio’s keyboard shortcut: Shift + Ctrl +M

4. 콘솔창과 코드창을 이동할 때

콘솔창-->코드창 : Ctrl +1

코드창-->콘솔창 : Ctrl +2

 

Posted by 화공쟁이
,

사전에서 찾아보니 '소용돌이'란 뜻이다. 작명 의도에 대해서는 짐작하기 쉽지 않지만 R 학습에 도움을 주기 위해 만들어진 package이며 swirl은 수강생용. 강사용 강의자료 작성 package로는 swirlify가 준비되어 있다. (R 학습방법에 있어 돌풍을 일으키겠다는 의미는 아닐지 짐작만 할뿐...)

> install.packages("swirl")

> library("swirl")
> swirl()

문답식으로 실습을 통해 강좌가 진행되며 만약 틀리면 가이드를 해주거나 Help를 찾아보라고 안내해 준다.

다만 강의가 영어 text로 진행되므로 영어 해독능력 필수

Posted by 화공쟁이
,

1. 대화식 실행을 기본으로 함

- R console 창에 필요한 명령문을 입력해서 결과를 얻는 방식

(예) 명령문 입력 --> 결과 수행 --> 명령문 입력 --> 결과 수행

2. 일괄 실행방식도 지원됨

- 명령문의 갯수가 많거나 수정하여 재사용 필요시 편집기를 활용하여 스크립트 작성, 저장 가능

- 나중에 스크립트를 다시 불러와서 재사용 가능 (라인별 실행/일괄실행)

(예시)

#함수실행
source("MyScript.R")
#함수실행 및 source 보기
source("MyScript.R", echo=TRUE) 

3. 자주 사용하는 R코드를 패키지화 하면 단순히 반복 사용이 용이해질 뿐 아니라 코드 공유나 문서화도 용이해짐 

- roxygen2와 devtools 패키지 설치 필요

패키지 작성법은 (https://www.popit.kr/recycled-r/) 참조

 

Posted by 화공쟁이
,