달력

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/18'에 해당되는 글 2

  1. 2016.11.18 R 스터디 - 텍스트 마이닝 기초 1
  2. 2016.11.18 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.