프로그래밍 Programming
Data Preparation (15) - Clean (Normalise Factors)
2014. 12. 6.일부 변수가 갖고 있는 각각의 레벨을 아래와 같이 normalise 해야한다. > sapply(ds[vars],is.factor) date location min_temp max_temp rainfall FALSE TRUE FALSE FALSE FALSE evaporation sunshine wind_gust_dir wind_gust_speed wind_dir_9am FALSE FALSE TRUE FALSE TRUE wind_dir_3pm wind_speed_9am wind_speed_3pm humidity_9am humidity_3pm TRUE FALSE FALSE FALSE FALSE pressure_9am pressure_3pm cloud_9am cloud_3pm temp_9am FALSE FALS..
Data Preparation (14) - Clean (Omitting Observations)
2014. 12. 6.간단하게 결측값을 가진 관측값을 제거하기를 원할 수도 있다.여기서 na.omit()을 이용하여 생략하고자 하는 행을 확정하고, 리턴된 오브젝트의 na.action 속성에 생략할 행의 목록이 저장된다. 그런 다음 그러한 관측값들을 데이터세트에서 제거한다. 이번에도 역시 원복을 위해 카피본을 만들어놓고 작업한다. > ods omit dim(ds[vars])[1] 366 24> sum(is.na(ds[vars]))[1] 47 // 결측값 47개> attr(na.omit(ds[vars]),"na.action")// na.omit 는 NA 값을 전부 제거한 오브젝트를 반환한다// na.action 는 결측값이 어떻게 처리되었는지를 정의하는 함수 전달// attr(x, which) : x는 속성에 억세스해야하는 오..
Data Preparation (13) - Clean (Deal with Missing Values)
2014. 12. 6.결측값에 대해 새로운 가치를 매기는(impute) 작업 > ods dim(ds[vars])## [1] 366 18> sum(is.na(ds[vars]))## [1] 47 // 결측값(missing value)가 47개> ds[vars] sum(is.na(ds[vars]))## [1] 0 // NA가 0이 되었음> dim(ds[vars])## [1] 366 18> ds
Data Preparation (12) - Clean (Remove Missing Target)
2014. 12. 5.아래는 missing target 을 제거하는 작업이다. > target[1] "rain_tomorrow"> ds[target] rain_tomorrow1 Yes2 Yes3 Yes4 Yes5 No6 No7 No8 No9 Yes10 No11 No12 No> is.na(ds[target]) rain_tomorrow [1,] FALSE [2,] FALSE [3,] FALSE [4,] FALSE [5,] FALSE [6,] FALSE [7,] FALSE [8,] FALSE [9,] FALSE [10,] FALSE> sum(is.na(ds[target]))[1] 0 > ds sum(is.na(ds[target]))[1] 0> dim(ds) // 366 observations, 24 variables[1] 366 ..
Data Preparation (11) - Clean (Feature Selection)
2014. 12. 5.FSelector (Romanski, 2013) 패키지는 주어진 데이터세트에서 속성을 선택할 수 있는 기능을 제공한다. 관련성이 없거나 불필요한 정보를 확정하고 제거하는 기능을 한다. > library(FSelector)> form cfs(form, ds[vars]) // cfs : algorithm finds attribute subset using correlation and entropy measures for continous and discrete data[1] "min_temp" "sunshine" "wind_gust_speed" "humidity_3pm" [5] "pressure_3pm" "cloud_3pm" > information.gain(form, ds[vars]) // informat..
Data Preparation (10) - Clean (Remove the Variables)
2014. 12. 5.무시하기로 한 변수가 정해지면, 사용할 변수 목록에서 아래와 같이 해당 변수를 제거한다. > length(vars)[1] 24> vars length(vars)[1] 21>
lower.tri / upper.tri
2014. 12. 5.lower.tri / upper.tri행렬의 lower triangle 와 upper triangle 를 TRUE 나 FALSE 로 채운다 lower.tri(x, diag = FALSE)upper.tri(x, diag = FALSE)[인수]1) x : 행렬2) diag : TRUE/FALSE [예제]> (m2 > lower.tri(m2) [,1] [,2] [,3] [,4] [,5][1,] FALSE FALSE FALSE FALSE FALSE[2,] TRUE FALSE FALSE FALSE FALSE[3,] TRUE TRUE FALSE FALSE FALSE[4,] TRUE TRUE TRUE FALSE FALSE> upper.tri(m2) [,1] [,2] [,3] [,4] [,5][1,] FALSE TRU..
Correlation : cor()
2014. 12. 5.cor(x, y) : 상관관계 계산 cor(x, use=, method= ) [인수]1) x : 행렬 또는 데이터프레임2) use : 결측값(missing data)를 다루는 방법. (1) all.obs : 결측값이 없다고 가정하는 경우로, 결측값이 존재하면 에러를 발생시킨다. (2) complete.obs (listwise deletion) : 결측값을 사례별로 지우기. 결측값이 하나라도 있는 경우에 그 case 모두를 지운다. (3) pairwise.complete.obs (pairwise deletion) : 한쌍 목록 삭제.3) method : 상관관계의 유형 (pearson, spearman, kendall) (1) pearson : X 와 Y 가 완전히 동일하면 +1, 전혀 다르면 0, 반대방..
apply function (apply/lappy/sapply)
2014. 12. 2.apply 함수는 plyr 패키지가 커버한다. 1. applyapply(array, margin, function) - 행렬의 행이나 열단위로 해당 함수를 적용하고자 할 때 사용함여기서 margin 값이 1이면 행을, 2는 열을 나타낸다. > matrix(seq(1,16), 4, 4) [,1] [,2] [,3] [,4][1,] 1 5 9 13[2,] 2 6 10 14[3,] 3 7 11 15[4,] 4 8 12 16> M apply(M, 1, min) // 각각의 행에서 최소값 리턴[1] 1 2 3 4> apply(M, 1, max) // 각각의 행에서 최대값 리턴[1] 13 14 15 16> apply(M, 2, max) // 각각의 열에서 최대값 리턴[1] 4 8 12 16 > array( seq(3..
Data Preparation (9) - Clean (Deal with Missing Values)
2014. 11. 29.변수의 결측값(missing values)에 대해 randomForest()는 결측값을 다루도록 코딩이 되어있지 않은 반면에, rpart()는 특히 결측값을 다루는데 뛰어나다. randomForest (Breiman et al., 2012)의 na.roughfix()을 통해 결측값을 중앙값 등으로 돌리기도 한다. > ods dim(ds[vars])## [1] 366 18 > sum(is.na(ds[vars])) // is.na(x) # returns TRUE of x is missing## [1] 47 // 결측값이 47개 > ds[vars]
Data Preparation (8) - Clean (Ignore MultiLevel, Constants)
2014. 11. 29.Too Many Levels레벨이 많은 변수는 레벨을 줄이거나 아니면 아예 해당 변수를 배제할 필요가 있다.> factors lvls (many 20)))## character(0)> ignore (constants ignore
Data Preparation (7) - Clean (Ignore IDs, Outputs, Missing)
2014. 11. 29.이제 모델링에 부적절한 일부 변수를 무시하는 작업이다. IDs and Outputs앞에서도 언급했듯이 risk 변수는 아웃풋 변수이다. 이 변수는 모델링에서 할 역할이 없다.항상 조심해야 하는데 아웃풋 변수를 모델링에 인풋으로 넣는 점이다.입문자가 흔히 저지르기 쉬운 실수 중 하나다. > igonre ignore
Data Preparation (6) - Review (Variable Roles)
2014. 11. 29.이제 데이터세트내의 각각의 변수의 역할에 대한 정의가 필요하다. 1) "date"는 변수로 부적합(차라리 계절이라면 낫겠다)2) "location"은 상수이므로 여기서 삭제3) "risk"는 타겟 변수에 관한 관찰의 중요도나 위험의 합을 나타냄으로 아웃풋 변수임 > (vars target risk id
Data Preparation (5) - Review (Data Formats)
2014. 11. 28.Data Formats데이터세트내의 일부 변수의 포맷을 바꿔야 할 경우도 있다. 먼저 각각의 변수의 데이터 타입부터 확인해야 한다. > sapply(ds,class)$date[1] "Date" $location[1] "factor" $min_temp[1] "numeric" $max_temp[1] "numeric" $rainfall[1] "numeric" $evaporation[1] "numeric"lubridate를 이용하여 date 변수의 포맷을 다른 것으로 바꿔보자.> library(lubridate)> head(ds$date)[1] "2007-11-01" "2007-11-02" "2007-11-03" "2007-11-04" "2007-11-05"[6] "2007-11-06"> ds$date as.P..
Data Preparation (4) - Review (Meta Data Cleansing)
2014. 11. 28.Normalise Variable Names 모든 변수를 소문자로 놓고 진행하는 것이 유용한 경우도 있다. 하지만 R은 대소문자를 구별하는 프로그램이다. ncm_tax_PyBl 와 같이 서로 다른 대소문자가 섞여 있는 경우, 그리고 1,000개가 넘는 변수들의 표기를 일일이 기억할 수 없을 때 모든 변수 이름을 정돈할 필요성이 있다. 특히 대소문자를 구별하지 않는 데이터베이스에서 위와 같은 형태의 변수를 종종 발견할 수 있다. 이 경우 rattle 의 normVarNames() 을 이용하여 데이터세트의 변수들을 표준 형태로 변환시킬 수 있다. 아래 예제를 보자. > names(ds) [1] "Date" "Location" "MinTemp" "MaxTemp" [5] "Rainfall" "Evaporatio..
Data Preparation (3) - Review (Observations, Structure, Summary)
2014. 11. 28.1. Observations 데이터 세트를 로딩하고 나서 해야할 일은 데이터 세트의 모양을 이해하는 것이다. head(), tail() 등을 이용해 데이터 세트를 확인해볼 수 있다.> head(ds)Source: local data frame [6 x 24] Date Location MinTemp MaxTemp Rainfall Evaporation Sunshine WindGustDir1 2007-11-01 Canberra 8.0 24.3 0.0 3.4 6.3 NW2 2007-11-02 Canberra 14.0 26.9 3.6 4.4 9.7 ENE3 2007-11-03 Canberra 13.7 23.4 3.6 5.8 3.3 NW4 2007-11-04 Canberra 13.3 15.5 39.8 7.2 9.1..
Data Preparation (2) - Table Data Frame (tbl_df)
2014. 11. 28.테이블 데이터 프레임의 유용성 Convenience of Table Data Frame tbl_df()를 이용하여 데이터 프레임에 복수의 여분 클래스를 만드는 방법이 있다. tbl_df()를 사용하는 주된 장점은 프린팅때문이다. tbl 오브젝트는 스큰린에 맞춰 일부의 행과 열만 프린트해줌으로써 대용량의 데이터를 다룰 때 유용하다. > class(ds)[1] "data.frame"> library(dplyr) // tbl_df 를 사용하려면 dplyr 을 실행해야 한다. > ds class(ds)[1] "tbl_df" "tbl" "data.frame" // tbl 오브젝트 생성프린팅해보자.> dsSource: local data frame [366 x 24] Date Location MinTemp MaxT..
Data Preparation (1) - Load (Dataset, Generic Variables)
2014. 11. 28.이번 게시물부터는 R을 이용하여 모델을 만들기 위해 데이터를 다듬는 과정에 대해 이야기 해보려고 합니다. 데이터세트를 R로 띄우고, 데이터를 관찰하고 변환하는 것에 대해 다룬 후, 예측 모델을 만드는 과정에 대해 다뤄봅니다.이 과정에는 아래의 패키지가 필요합니다. > install.packages("rattle")> library(rattle) # The weather dataset and normVarNames(). > install.packages("randomForest")> library(randomForest) # Impute missing values using na.roughfix(). > install.packages("tidyr")> library(tidyr) # Tidy the data..
01. Rattle 설치 및 실행
2014. 11. 27.rattle 설치 및 실행 > install.packages("rattle")Installing package into ‘C:/Users/fukaeri/Documents/R/win-library/3.1’(as ‘lib’ is unspecified)trying URL 'http://cran.nexr.com/bin/windows/contrib/3.1/rattle_3.3.0.zip'Content type 'application/zip' length 3211032 bytes (3.1 Mb)opened URLdownloaded 3.1 Mb package ‘rattle’ successfully unpacked and MD5 sums checked The downloaded binary packages are inC..
16. 워드 클라우드 Word Clouds - 옵션
2014. 11. 27.Word Clouds 의 기타옵션 Reducing Clutter With Max Words - 표시될 단어의 갯수를 max.words 를 통해 늘리거나 줄일 수 있다.> set.seed(142)> wordcloud(names(freq), freq, max.word= 100) Reducing Clutter With Min Freq - 표시될 갯수를 제한하는 또 다른 방법은 min.freq 를 이용하는 것이다. 아래 예제는 최소 12번 이상 언급되는 단어들만 나타나도록 했다.> set.seed(142)> wordcloud(names(freq), freq, min.freq= 9) Adding Some Colour - Color-Brewer (Neuwirth, 2011)의 brewer.pal() 를 이용하여 색..
15. 워드 클라우드 Word Clouds
2014. 11. 26.아래와 같이 corpus 내의 단어들을 대상으로 빈도 기준으로 워드 클라우드 Word Clouds 를 만들어 본다. > install.packages("wordcloud") // 패키지부터 설치하고Installing package into ‘C:/Users/fukaeri/Documents/R/win-library/3.1’(as ‘lib’ is unspecified)trying URL 'http://cran.nexr.com/bin/windows/contrib/3.1/wordcloud_2.5.zip'Content type 'application/zip' length 466745 bytes (455 Kb)opened URLdownloaded 455 Kb package ‘wordcloud’ successfull..
14. 워드 출현빈도 그래프로 나타내기 Plotting Word Frequencies
2014. 11. 26.sort() 를 이용하여 해당 corpus 내 모든 단어들의 빈도를 카운트할 수 있다. > freq head(freq,14) the and that you have will this but draft 71 56 51 27 15 15 13 11 11 about all strickland: for know 10 10 9 8 8 > wf head(wf) word freqthe the 71and and 56that that 51you you 27have have 15will will 15 > library(ggplot2) Attaching package: ‘ggplot2’ The following object is masked from ‘package:NLP’: annotate > p 10), aes(word,..
13. 상관관계 그래프로 보여주기 Correlations Plots
2014. 11. 26.Rgraphviz 는 corpus 내 선택된 단어들간의 상관관계를 네트워크 그래프로 보여주는 기능을 한다. 아래는 10번 이상 언급된 단어들 중 상관관계가 0.5 이상인 5개의 단어들 간의 관계를 보여주는 그래프이다. 상관도라든지 빈도 등의 옵션이 주어지지 않았을 때 기본값은 20번 이상 언급, 그리고 0.7 의 상관도이다. > plot(dtm, terms=findFreqTerms(dtm, lowfreq=10)[1:5], corThreshold=0.5)Loading required package: RgraphvizLoading required package: graphLoading required package: grid
12. 등장빈도 및 단어간 상관도에 의거한 term 조회 Identifying Frequent Items and Associations
2014. 11. 25.등장빈도에 따른 term 조회는 findFreqTerms()를 이용한다. > findFreqTerms(dtm,lowfreq=1000) // 최소 1,000번 이상 등장한 term, 없다.character(0)> findFreqTerms(dtm,lowfreq=10) // 10번 이상 나온 term [1] "about" "all" "and" "but" "draft" "have" "that" "the" "this" [10] "will" "you" We can also nd associations with a word, specifying a correlation limit.특정 단어와의 상관도를 기준으로한 조회도 가능하다. findAssocs() 를 이용하는 것으로, 두 단어가 항상 같이 등장하면 그 값은 1..
11. Removing Sparse Terms
2014. 11. 25.sparse는 0 또는 등장하지 않는 term 이 얼마나 많은지를 의미하는 것으로, 수많은 0 으로 이루어진 행렬의 경우 알고리즘이 불필요한 수행으로 쓸데없는 시간을 낭비하게 만든다. 이런 경우 sparse term을 제거함으로써 효율적인 데이터 분석을 할 수 있다. removeSparseTerms() 을 이용하여 sparse term 을 제거할 수 있으며, 필요한 것은 얼마만큼의 행을 지워버릴 것인가이다. 현상태에서 보면 sparsity = 90% 이며, 의미있는 actual data values ("non-sparse entities") 는 547개이다. 먼저 sparse 를 70 으로 한 경우는 다음과 같다. > dtm.common.70 inspect(dtm.common.70)해당 corpus 내에..
리눅스 방화벽 설정 iptables
2014. 11. 25.1. 변경내용 적용방법iptables 파일은 아래에서 보시다시피 /etc/sysconfig 에 위치한다. 직접 수정후 업로딩하거나 아래와 같이 콘솔상에서 직접 편집한다. #cd /etc/sysconfig/#vi iptables#service iptables restart#/etc/init.d/iptables save2. 도입부# Firewall configuration written by lokkit# Manual customization of this file is not recommended.# Note: ifup-post will punch the current nameservers through the# firewall; such entries will *not* be listed here.*fi..
ftp 프로그램 파일질라 FileZilla 편집기 설정변경방법
2014. 11. 25.ftp 프로그램 파일질라 FileZilla 편집기 설정변경방법 기본설정과 편집하려는 파일 유형에 따라서는 아래와 같이 보기 불편한 뷰를 선보이는 경우가 있다. 파일 유형에 따라 편집기를 달리 설정하거나 아니면 쓸만한 놈으로 기본편집기를 설정해보자. [편집] - [설정] - [파일편집] 으로 이동하여 아래와 같이 '사용자 편집기 사용'을 체크한 후 찾아보기를 통해 기본 편집기를 선택한다. 여기서는 eclipse 를 사용하기로 한다. 해당 실행파일을 선택한 후 아래 메뉴에서 '항상 기본 편집기 사용'에 체크한 후 [확인]을 누른다. 아래와 같이 이클립스에서 해당 파일이 열리는 것을 볼 수 있다. [파일편집] 서브메뉴인 [파일유형연결]을 통해서는 확장자별로 편집프로그램을 달리 가져갈 수도 있다.텍스트박스에 직..
10. 행렬로 전환하여 CSV 포맷으로 저장하기 Conversion to Matrix and Save to CSV
2014. 11. 22.Document-term matrix 를 다른 툴에서 활용할 수 있도록 CSV 파일로 저장하기 위해 단순 행렬로 변환할 수 있다. 아래와 같은 방법으로 행렬 변환이 가능하다.> m dim(m)[1] 10 531R의 계산한계를 넘어서는 경우에는 아래와 같은 에러 메시지가 출력된다.## Error in vector(typeof(x$v), nr * nc) : vector size cannot be NA## In addition: Warning message:## In nr * nc : NAs produced by integer overflow이런 경우에는 밀도가 희박한 term 을 제거하는 것을 고려해볼 필요가 있다. 일단 표준 행렬로 변환되고 나면, write.csv() 를 이용하여 파일로 저장할 수 있다...
09. term의 출현빈도에 대한 분포 구하기 Distribution of Term Frequencies
2014. 11. 22.앞에서 살펴본 term의 출현 빈도에 대한 분포를 구한다 > head(table(freq),15) // Frequency of frequenciesfreq 1 2 3 4 5 6 7 8 9 10 11 13 15 27 51 // 그러니깐 1번 나오는 용어가 362개, 2번 나오는 용어가 82개와 같은 식362 82 31 16 8 11 6 3 1 2 2 1 2 1 1 > tail(table(freq),15)freq 3 4 5 6 7 8 9 10 11 13 15 27 51 56 71 // 71번 나오는 용어는 1개와 같은 식31 16 8 11 6 3 1 2 2 1 2 1 1 1 1 >
08. Exploring the Document Term Matrix
2014. 11. 22.Document-term matrix 를 행렬로 변환하고, 컬럼끼리 값을 합하여 출현빈도를 구할 수 있다.> freq length(freq)[1] 531위의 freq 를 정렬함으로써, 출현 빈도가 가장 높은 term과 가장 낮은 term을 구할 수 있다. > ord freq[head(ord)] // # Least frequent terms (sample @coordinator @delighted @she @two 10,000. 1 1 1 1 1 1 > freq[tail(ord)] // # most frequent termshave will you that and the 15 15 27 51 56 71 > freq[tail(ord,10)] // 갯수 지정도 가능 all but draft this have ..