달력

11

« 2016/11 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'2016/11'에 해당되는 글 4

  1. 2016.11.18 R 스터디 - 텍스트 마이닝 기초 1
  2. 2016.11.18 R 스터디 - 조건문 , 정규표현식
  3. 2016.11.17 R 스터디 - 함수
  4. 2016.11.17 R 스터디 - 기본
2016. 11. 18. 14:55

R 스터디 - 텍스트 마이닝 기초 카테고리 없음2016. 11. 18. 14:55

.. .. ..

R을 활용한 텍스트 마이닝 기초_1

한글 텍스트 분석하기


1. 패키지 설치

 install.packages("KoNLP")


2. 라이브러리 로드 (Java 필수 필요)

 library(KoNLP)


3.  함수

 - extractNoun (한글 명사 추출)

   - txt1 = readLines("좋아하는 괄일.txt")

   - txt2 = sapply(txt1.extractNoun, USE.NAMEs=F


 - 사전 사용 방법

   - useSejongDic() 

   - 사전에 새로운 단어 추가

     - margeUserDic(data.frame("파인애플","ncn")) # ncn 은 명사, 

   - 자동 추가 방법

     - mergeUserDic(data.frame(readLines("파일명","ncn"))

   - 사전 파일 경로

     - .libPaths() # 로 경로 확인. (KoNLP 경로 아래 있음)

 

- 함수 사용시 UTF-8 에러 처리

  - e

   -

 

- 밀정 테스트

예제 1. 영화 밀정의 리뷰를 분석하여 워드 클라우드 작성하기

################################################################

## 영화의 리뷰를 분석하여 워드 클라우드 그리기

## 영화 밀정 워드 클라우드 그리기

################################################################

setwd("c:\\a_temp")

#install.packages(“KoNLP”)

#install.packages(“wordcloud”)

#install.packages("stringr")

#library(KoNLP)

#library(wordcloud)

#library(stringr)

#Step 1. 분석 파일을 불러 옵니다

data1 <- readLines("영화_밀정.txt")

data1

#Step 2. 문장을 단어로 분리합니다.

data1 <- gsub(" ","-",data1)

data1 <- str_split(data1,"-")

data1 <- str_replace_all(unlist(data1),"[^[:alpha:][:blank:]]","")

tran1 <- Map(extractNoun, data1)

tran1

tran11 <- unique(tran1)

tran2 <- sapply(tran11, unique)

tran2

tran3 <- rapply(tran2, function(x) gsub("리뷰", "", x), how = "replace")

tran3 <- rapply(tran3, function(x) gsub("영화", "", x), how = "replace")

tran3 <- rapply(tran3, function(x) gsub("평점", "", x), how = "replace")

tran3 <- rapply(tran3, function(x) gsub("내용", "", x), how = "replace")

tran3 <- rapply(tran3, function(x) gsub("제외", "", x), how = "replace")

tran3 <- rapply(tran3, function(x) gsub("ㅋㅋㅋ", "", x), how = "replace")

tran3 <- rapply(tran3, function(x) gsub("ㄱㄱㄱ", "", x), how = "replace")

tran3

tran4 <- sapply(tran3, function(x) {Filter(function(y) {nchar(y) <= 6 && nchar(y) > 1},x)} )

tran4


#Step 3. 공백을 제거하기 위해 저장 후 다시 불러 옵니다.

write(unlist(tran4),"밀정_2.txt")

data4 <- read.table("밀정_2.txt")

data4

nrow(data4)


#Step 4. 각 단어별로 집계하여 출현 빈도를 계산합니다 (1차 확인 단계)

wordcount <- table(data4)

wordcount

wordcount <- Filter(function(x) {nchar(x) <= 10} ,wordcount)

head(sort(wordcount, decreasing=T),100)


#Step 5. 필요없는 단어를 제거한 후 공백을 제거하고 다시 집계를 합니다.

# 이 과정을 여러 번 반복하여 필요 없는 단어들은 모두 제거해야 합니다.

txt <- readLines("영화gsub.txt")

txt

cnt_txt <- length(txt)

cnt_txt

for( i in 1:cnt_txt) {

tran3 <- rapply(tran3, function(x) gsub((txt[i]),"", x), how = "replace")

}

tran3

data3 <- sapply(tran3, function(x) {Filter(function(y) { nchar(y) >=2 },x)} )

write(unlist(data3),"밀_2.txt")

data4 <- read.table("밀_2.txt")

data4

nrow(data4)

wordcount <- table(data4)

wordcount

head(sort(wordcount, decreasing=T),100)



#Step 6. 전처리 작업이 모두 완료되면 워드 클라우드를 그립니다.

library(RColorBrewer)

palete <- brewer.pal(7,"Set2")

wordcloud(names(wordcount),freq=wordcount,scale=c(5,1),rot.per=0.25,min.freq=5,

random.order=F,random.color=T,colors=palete)

legend(0.3,1 ,"영화 댓글 분석 - 밀정 ",cex=1.2,fill=NA,border=NA,bg="white" ,

text.col="red",text.font=2,box.col="red")

savePlot("영화_밀정.png",type="png")

.
:
Posted by .07274.
2016. 11. 18. 11:01

R 스터디 - 조건문 , 정규표현식 I.lib()/I.lib(etc)2016. 11. 18. 11:01

.. .. ..

1. 조건문 - IF

 - 문법 : if( 조건식) { 식1 , 식2} else {식3}

 - ifelas(a,b,c) ==> 간지 식 : a 가 참이면 b를 출력하고 거짓이면 c를 출력하기

  - ifelse(no%%2==0,'짝수','홀수')


2. 반복문 : while() , for()

 - 


3. 정규식

 - \\d : Digit, 0,1,2 ... 9

 - \\D : 숫자가아닌것

 - \\s : 공백

 - \\S : 공백이아닌것

 - \\w :  단어

 - \\W : 단어가아닌것

 - \\t : Tab

 - \\n : New line (엔터문자)

 - ^ : 시작되는글자

 - $ : 마지막글자

 - \ : Escape character (탈출문자), e.g. \\ is "\", \+ is "+"

 - | : 두개이상의조건을동시에지정. e.g. /(e|d)n/ matches "en" and "dn"

 - • : 엔터(New line)를제외한모든문자


 - [ab] : a 또는b

 - [^ab] : a 와 b 를제외한모든문자

 - [0-9] : 모든숫자

 - [A-Z] : 영어대문자

 - [a-z] : 영어소문자

 - [A-z] : 모든영문자(대소문자전부)

 - i+ : i 가 최소 1회는 나오는 경우

 - i* : i 가 최소 0회 이상 나오는 경우

 - i? : i가 최소 0회에서 최대 1회만 나오는 경우

 - i{n} : i 가 연속적으로 n 회 나오는 경우

 - i{n1,n2} : i 가 n1 에서 n2 회 나오는 경우

 - i{n,} : i 가 n 회 이상 나오는 경우

 - [:alnum:] : 문자와 숫자가 나오는 경우: [:alpha:] and [:digit:]

 - [:alpha:] : 문자가 나오는 경우: [:lower:] and [:


 - [:cntrl:] : 제어문자가 있는경우

 - [:digit:] : Digits: 0 1 2 3 4 5 6 7 8 9

 - [:graph:] : Graphical characters: [:alnum:] and [:punct:]

 - [:lower:] : 소문자가 있는경우

 - [:print:] : 숫자,문자,특수문자,공백모두: [:alnum:], [:punct:] and space

 - [:punct:] : 특수 문자예: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

 - [:space:] : 공백문자: tab, newline, vertical tab, form feed, carriage return, space

 - [:upper:] : 대문자가 있는경우

 - [:xdigit:] : 16진수가 있는경우: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f


4. 특정 패턴만 골라내기 - grep()

 - grep(pattern,a) 

  - ex.) grep('^ORA-+',char1, value=T)


5. 길이를 알려줘 - nchar()

 - nchar('James Seo') ==> 9


6. 연결해줘 - paste()

 - paste('aa','bb','cc') ==> aa bb cc


7. 특정 부분만 골라줘 - substr()

 - substr('abc123',시작위치,끝나는 위치)

 - substr('abc123',3,3) == > c


8. 패키지로 그래픽 처리 - graphic()

 - plot() 함수

   - plot(x축 데이터 , 옵션)

   - plot(x=3,y=5)

   - plot(x축 데이터 , y 축 데이터 , 옵션)

   - plot(c(1:3) , c(4:6))

   - 옵션

인수

설명

main="메인 제목"

제목 설정

sub="서브 제목"

서브 제목

xlab="문자", ylab="문자"

x , y 축에 사용할 문자열을 지정합니다

ann=F

x , y 축 제목을 지정하지 않습니다.

tmag=2

제목 등에 사용되는 문자의 확대율 지정

axes=F

x,y 축을 표시하지 않습니다

axis

x,y 축을 사용자의 지정값으로 표시합니다

그래프 타입선택

type="p"

점 모양 그래프 (기본값)

type="l"

선 모양 그래프 (꺾은선 그래프)

type="b"

점과 선 모양 그래프

type="c"

"b" 에서 점을 생략한 모양

type="o"

점과 선을 중첩해서 그린 그래프

type="h"

각 점에서 x축 까지의 수직선 그래프

type="s"

왼쪽값을 기초로 계단모양으로 연결한 그래프

type="S"

오른쪽 값을 기초로 계단모양으로 연결한 그래프

type="n"

축 만 그리고 그래프는 그리지 않습니다


선의 모양 선택

lty=0,lty="blank"

투명선

lty=1,lty="solid"

실선

lty=2,lty="dashed"

대쉬선

lty=3,lty="dotted"

점선

lty=4,lty="dotdash"

점선과 대쉬선

lty=5,lty="longdash"

긴 대쉬선

lty=6,lty="twodash"

2개의 대쉬선

색, 기호 등

col=1 ,col="blue"

기호의 색지정 ,1-검정 , 2-빨강 , 3-초록 , 4-파랑 , 5-연파랑

6-보라 , 7-노랑 , 8-회색

pch=0,pch="문자"

점의 모양을 지정합니다 (아래 별도 표 참조)

bg="blue"

그래프의 배경색을 지정합니다

lwd="숫자"

선을 그릴 때 선의 굵기를 지정합니다

cex="숫자"

점이나 문자를 그릴 때 점이나 문자의 굵기를 지정합니다


9. 그래프 새창에 띄우기 

 - dev.new()


10. 최종 창 clear

 - plot.new()


11. 그래프 여백 조정

 - a <-c(1,2,3)

 - plot(a,xlab="aaa")

 - par(mgp=c(0,1,0)) #  mgp=c(제목위치,지표값위치,지표선위치)) 의 순서

 - plot(a,xlab="aaa")


12. 그래프에 범례 추가 

 - legend(x 축 위치 , y 축 위치 , 내용 , cex=글자크기, col = 색상 , pch=크기 , lty=선모양)

 - legend(4,9,c("v1","v2","v3"),cex=0.9,col=c("red","blue","green"),lty=1)


13. 막대 그래프 그래기 - barplot()

 - 옵션

      인수

기능

angle,density,col

막대를 칠하는 선분의 각도, 선분의 수, 선분의 색을 지정합니다

legend

오른쪽 상단에 범례를 그립니다

names

각 막대의 라벨을 정하는 문자열 벡터를 지정합니다

width

각 막대의 상대적인 폭을 벡터로 지정합니다

space

각 막대 사이의 간격을 지정합니다

beside

TRUE 를 지정하면 각각의 값마다 막대를 그립니다

horiz

TRUE 를 지정하면 막대를 옆으로 눕혀서 그립니다


14. 관계도 그리기 - igraph()


15. igraph() 확장판 - d3Network()

 - 문서 내 변경 

install_github("christophergandrud/d3Network") ==> 시험판

install.packages("d3Network") ==> 정식 배포판

library(RCurl) 은 삭제

.
:
Posted by .07274.
2016. 11. 17. 15:55

R 스터디 - 함수 I.lib()/I.lib(etc)2016. 11. 17. 15:55

.. .. ..

1. 기본 중요 함수

 - aggregate( )  다양한 함수를 사용하여 계산결과를 출력함 

 - apply( ) 다양한 기능이 있어서 아래 예를 참고하세요 

 - cor( ) 상관함수 

 - cumsum( ) 설정된 지점까지의 누적합 

 - cumprom( ) 설정된 지점까지의 누적곱 

 - diff( ) 차이 나는 부분을 찾아냄 

 - length( )  요소갯수를 구해서 출력함 

 - max( )  최대값을 출력함 

 - min( )  최소값을 출력함 

 - mean( ) 평균값을 출력함 

 - median( ) 가운데값을 출력함 

 - order( )  각 요소의 원래 위치 

 - prod( ) 누적곱을 출력함 

 - sd()  표준편차

 - var() 분산

 - sum() 합계

 - 


2. 상세

 - 데이터 프레임 상대로 주어진 함수 값 구하기 : aggregate()

  - 문법 : aggregate(계산될 컬럼~기준될컬럼, 데이터, 함수

  - install.packages("googleVis")

  - library(googleVis)

  - aggregate(Sales~Year,Fruits,sum) <-- Year별로 Sales 값을 sum 하라! 


 - 다양한 함수 apply()

  - 문법 :  apply(data  행/열 , 작업함수)   (행 = 1 ,열 =2)

  - 변종

    - lapply(c(list1, list2) , max) --> list 와 list2 값을 구해서 각각의 가장큰 값을 출력

    - sapply(c(list1, list2) , max) --> list1와 list2 값을 구해서 가장 큰값을 한번에 출력

    - tapply(출력값  기준컬럼, 적용함수)

      - tapply(Fruits$Sales ,Fruits$Fruit,sum)

      - attach(Fruits) 명령어를 줄 경우

        tapply(Sales ,Fruit,sum) 로도 원하는 결과 값 추출 가능.


3. 정리

[ aggregate( ) 함수와 apply( ) 계열 함수 정리 ] 

특정 컬럼이나 행을 기준으로 연산 작업을 한다  ==> apply( ) 계열 함수 

특정 값을 기준으로 집계한 후 연산 작업을 한다  ==> aggregate( ) 계열 함수 


[ apply( ) 계열 함수 정리 ] 

연산 결과를 리스트별로 따로 보여준다  ==> lapply( )함수 

연산 결과를 요약해서 보여준다           ==> sapply( )함수 

연산 결과를 가로로 펴서 보여준다       ==>tapply( )함수 

.
:
Posted by .07274.
2016. 11. 17. 14:34

R 스터디 - 기본 I.lib()/I.lib(etc)2016. 11. 17. 14:34

.. .. ..

setwd("D:\\Program Files\\R\\workDir")

getwd()


1. 숫자 변환 : as.numeric('')


2. ' , " 모두 동일하게 인식


3. 알은 날짜도 글자로 인식(class('2016-06-06'))


4. NA : 잘못된 값


5. NULL : 값이 없을 경우

 - na.rm=TRUE   #NA 값을 포함한 모든 값의 합 구하기


6. Factor 형 (요소) - 빈도 분석시 사용


7. summary(xxx) = 요약 함수

 factor = hash 동일 개념 ==> Key 값으로 데이터 관리.

 - summary(as.factor(address))


8. as.POSIXct('2001-01-01') ==> 문자를 날짜로 변환.

 - 졸 불편해. 그래서 R의 헤들리 위켐이라는 영국아재가 패키지 무쟈게 만드렁 배포함.

   날짜를 쉽게 쓰게하는 lubridate 패키지 만듬 짱좋음.


9. lubridate 패키지

 -  year(date) #년도만 출력

 - month(date,label=T) # 월을 출력하되 영문 이름으로 출력

 - month(date,label=F) # 월을 출력하되 숫자로 출력

 - day(date  #일 출력

 - wday(date,label=T) #요일을 출력하되 영문 이름 출력

 - ......


10. var = '11' , var

 - 서로 다른 형태의 변수 선언시 String 으로 모두 변환한다.


11. var = 1:5 는 1,2,3,4,5 가 저장된다. 숫자만 된다.


12. 날짜 함수 as.Data 로 사용해라.


13. 생성한 변수 확인 방법 : objects()


14. 벡터형 (Vector)

 - c(1,2,3,4,5)

 - 벡터 내 인수는 모두 동일해야한다.

 - vac = c(1,2,3,4,5) , 

   vac[3] 3번째만 , 

   vac[-3] 3만 빼고,

   vac(vac,7) 벡터에 새로운 내용 추가

 - 데이터 형이 다른 벡터의 합은 union(var1 , var3)

 - 차집합 : setdiff(var1, var2) var1에는 있는데 var2 에는 없는 요소

 - 교집합 : intersect(var1, var2) 두개 공통으로 있는값

 - 자동증가 벡터 : seq(1,5) => 1,2,3,4,5     , seq (2,-2) => 2,1,0,-1,-2 , seq(1,10,2) 2씩증가하여 10까지

 - 벡터 반복 : rep(1:3,2) ==> 123123 , rep(1:3,each=2=) ==> 112233

 - 벡터 길이 : length(var1)

 - 있나없나 확인 : 3 %in% var7 ==> var7  에서 3있니?? TRUE 리턴


14. 행렬 형 : Matrix()

 - 그래프 그릴때 기초.

 - mat1 = matrix(c(1,2,3,4))

 - mat2 = matrix(c(1,2,3,4), nrow=2     1,3,  2,4

 - mat3 = matrix(c(1,2,3,4), nrow=2, byrow=T)   1 , 2   3,4

 - 출력 : mat3[,1] 모든행 1열만 , mat3[1,] 모든열의 1행만 , mat3[1,1] 1,1 만


15. 배열 : Array


16. 데이터 프레임 (중요!!) 


17. 파일 이름 확인하기. : list.files() , list.files(recursive=T) ==> 하위 디렉토리까지 모두


18. 텍스트 파일 읽어 배열 저장 :  

 - scan = scan("test.txt") , 

 - scan = scan("scan_2.txt",what="")  , 

 - scan = scan() 은 사용자 입력받는것

 - scan = scan(,what="") 문자를 입력할때 사용


19 .파일 읽어 배열 담기

 - input1 = readLine("readfile.exe")


20. 테이블로 파일 읽어오기 read.table()

 - fruits = read.table("file.txt")

 - fruits2 = read.table("fruits.txt",header=T)

 - fruits3 = read.table("인물.txt",skip=5, nrow=3)

 - fruits4 = read.table("fruits.txt",header=T , sep=",")


21. 구분이 , 로되어있으면 csv 함수 사용

 - fruit3 = read.csv("csv파일 읽기.txt")


22. read.csv.sql() 명령 - 원하는 데이터를 SQL 쿼리로 불러 오기

 - install.packages("googleVis")

-library(googleVis)

-install.packages("sqldf")

-library(sqldf)

-Fruits

 - 사용은

  - write.csv(Fruits, "Fruits_sql.csv" ,quote = F , row.names = F)

  - fruits_2 = read.csv.sql("Fruits_sql.csv" , sql="SELECT * FROM DUAL")

  - fruits


23. 엑셀 파일 읽기

 - install.packages("readxl")

 - library(readxl)

 - data1 = read_excel("파일명", sheet=1 , col_names=TRUE , col_types = NULL , na = "" , skip = 0)


24. 파일로 저장

 - write(txt1 , "write.txt")

 - writeLines(txt1 , "text.txt")

 - write.table(txt2, "textt.txt")

.
:
Posted by .07274.