R 15

R, 한국표준산업분류(KSIC) 9차 개정 산업분류표 만들기

우리나라의 산업통계는 2017년부터 KSIC 10차 개정을 쓰고 있다. 그런데 2017년 이전 통계도 쓸 일이 있다 보니 9차 개정을 쓸 일이 있는데 R에서 쓸 수 있는 분류표가 없어서 따로 만들기로 했다. 통계분류포털(kssc.kostat.go.kr) 들어가서 한국표준산업분류>자료실>최신개정 들어가면 제9차 한국표준산업분류 분류항목표라는게 있고 KSIC2007.xls라는 파일을 받을 수 있다. 엑셀로 열어보면 대략 이렇다. 대-중-소-세-세세분류가 하나로 합쳐져 있다. tidy한 데이터가 없는 것이 좀 아쉽긴 한데, 그래도 이 엑셀 파일은 인쇄해서 윗사람에게 바로 보여줄 수도 있고, 약간의 가공을 거치면 R에서도 쓸 수 있으니 통계청은 상당히 효율적으로 일을 한 것이다. 이제부터 R에서 쓸 수 있는 파..

R 2021.07.13

R, split() - factor 값을 기준으로 데이터 분할하기

지난번과 같은 예제를 사용해 보겠다. > fruit weight split(weight,fruit) $apple [1] 3 3 $banana [1] 2 5 5 $orange [1] 2 보는 바와 같이 결과는 리스트 형식으로 나온다. 이제 lapply()를 써서 분할된 각각의 데이터로 평균이든 합이든 구할 수 있다. > lapply(split(weight,fruit),mean) $apple [1] 3 $banana [1] 4 $orange [1] 2 sapply()도 당연히 쓸 수 있다. > sapply(split(weight,fruit),mean) apple banana orange 3 4 2 입력값이 벡터가 아니라 데이터 프레임이라도 상관 없다. 나이 변수를 하나 더 만들어서 컬럼 세 개짜리 데이터 프..

R 2019.09.16

R, apply, lapply, sapply, tapply

1) apply apply() 함수는 행렬이나 데이터 프레임을 행 단위로, 또는 열 단위로 행렬의 합이나 평균, 표준편차 등을 계산할 때 쓴다. 먼저 행렬을 하나 아무렇게나 만든다. > a a [,1] [,2] [,3] [,4] [1,] 2 5 3 4 [2,] 5 2 4 3 [3,] 5 2 1 1 3 x 4 행렬이다. 첫번째 인자는 행렬 변수, 두번째 인자는 1 또는 2인데 1이면 행 단위로 계산한다는 뜻이고, 2이면 열 단위로 계산한다는 뜻이다. 세번째 인자는 연산할 함수 이름이다. 그러니까 위의 3 x 4 행렬의 원소들을 행 단위로 합하고 싶으면 > apply(a,1,sum) [1] 14 14 9 같은 행렬의 원소들 각 열의 평균을 구하고 싶으면 > apply(a,2,mean) [1] 4.000000..

R 2019.09.15

R, ggplot2 - 그래프 예쁘게 그려주는 라이브러리

윈스턴 챙이 쓰고 이제원이 옮긴 O'Reilly의 "R Graphics Cookbook"에 나은 예제를 썼다. 아래 소스를 직접 테스트해 보고 싶으면 데이터 라이브러리를 호출하기 바란다. > install.packages("gcookbook") > library(gcookbook) R에서 두 개의 변수를 각각 x축, y축에 넣고 점으로 된 그래프인 산점도(scatterplot)을 그리려면 일단 기본 그래픽 함수로도 할 수 있다. 코드는 > plot(mtcars$wt, mtcars$mpg) 이렇게 쓰고 그림은 아래와 같이 나온다. 기본적인 요소만 갖춘 매우 심플한 그래프라 할 수 있다. 저 그래프가 너무 심심하다고 생각했는지 누군가 좀 더 예쁘게 그래프를 그려주는 라이브러리를 개발했다. 바로 'ggplot..

R 2018.07.12

R, pdf 문서에서 텍스트 추출하기 (Xpdf)

지금까지의 텍스트 마이닝은 주로 웹으로부터 데이터를 긁어 모아 분석을 하는 거였는데 텍스트 마이닝을 좀 더 유용한 도구로 만들기 위해 웹 텍스트 뿐만 아니라 바이너리 형태로 보관되어 있는 pdf 문서 파일의 텍스트까지 긁을 수 있으면 좋겠다고 생각해서 방법을 찾아 보았다. 오픈소스 도구인 Xpdf는 pdf 파일에서 텍스트 정보를 추출해 txt 파일로 변환해준다. Xpdf를 설치하고 나서 명령 프롬프트에서 pdftotext 명령을 실행시키면 된다. 인터넷에서 알려주는 방법은 Xpdf를 설치한 다음에 R에서 tm 패키지를 설치하고 readPDF() 함수를 쓰라고 나와 있는데 해보면 잘 안된다. 내가 알아낸 방법은 tm 패키지 필요없이 system() 함수를 통해 명령 프롬프트에서 할 일을 R에서 해주는 방식..

R 2018.06.22

R, data sorting하기 order()

R에서 데이터를 특정 변수를 기준으로 정렬(sorting)할 때는 order() 함수를 쓴다. > pop names(pop) pop area population 1 서울특별시 9805506 2 부산광역시 3440484 3 대구광역시 2461002 4 인천광역시 2913024 5 광주광역시 1501557 6 대전광역시 1535445 7 울산광역시 1166033 8 세종특별자치시 242507 9 경기도 12671956 10 강원도 1521751 11 충청북도 1603404 12 충청남도 2132566 13 전라북도 1833168 14 전라남도 1796017 15 경상북도 2682169 16 경상남도 3339633 17 제주특별자치도 623332 > pop1 pop1 area population 10 강원도 ..

R 2018.05.21

R, data에서 특정 변수 제외하기

위에 파일을 다운로드 받아서 R 작업 디렉토리에 복사하고 R을 실행한 후 불러들인다. (지난번 예제의 결과를 저장한 것이다.) head() 명령을 써 보면, > load("nzb.RData") > head(nzb) time CAPITL CENTRL DUNWOD GENESE H Q HUD VL 1 2017-12-01 00:00:00 28.00 8.96 22.16 8.20 6.46 21.73 2 2017-12-01 01:00:00 27.50 8.23 21.54 7.50 5.72 21.11 3 2017-12-01 02:00:00 27.15 7.72 21.11 6.97 5.26 20.69 4 2017-12-01 03:00:00 26.20 7.58 20.42 6.86 5.21 20.01 5 2017-12-01 0..

R 2018.04.12

R 시계열 데이터 변환 aggregate()

Q. 시계열 데이터 분석할 때 hourly data의 날짜별 평균을 구해 daily data로 바꾸려면 어떻게 하면 될까? 본 데이터는 2017년 12월 1일부터 2018년 1월 31일까지 미국 뉴욕주 15개 지역에서 매 시간마다 기록된 전력 가격(단위: $/MWh)이다. 다운 받아서 불러보면 이렇게 생겼다. 관측치는 총 1488개(=62일 x 24시간)이다. (모바일 화면에서는 head()의 결과가 엄청 지저분하게 보이는데 방법이 없다. 양해를.) > load("nzb.RData") > head(nzb) time CAPITL CENTRL DUNWOD GENESE H Q HUD VL 1 2017-12-01 00:00:00 28.00 8.96 22.16 8.20 6.46 21.73 2 2017-12-01 ..

R 2018.03.22

R 데이터 변형하기 - subset(), which()

데이터 파일을 첨부했으니 다운로드 받아서 테스트 해 보기 바란다. 내 컴퓨터의 R 작업 디렉토리에 풀어 놓고 다음 명령으로 데이터를 불러 보자. > ep names(ep) [1] "Time.Stamp" "Name" [3] "PTID" "LBMP....MWHr." [5] "Marginal.Cost.Losses....MWHr." "Marginal.Cost.Congestion....MWHr." 여섯 개의 변수로 구성되어 있는 것을 알 수 있는데, 이름을 보면 통계 분석을 위한 변수명이라기 보다는 문서에 있는 표의 첫 줄 같다. 풀 네임으로 되어 있으니까. 간결한 변수명으로 일단 바꾸고 싶으면 다음과 같이 한다. c("time_stamp","name","ptid","lbmp","mcl","mcc")->names..

R 2018.03.19