5. 비정형 데이터 마이닝
(1) 텍스트 마이닝
가) 텍스트 마이닝 기능 요약
– 문서 요약 , 문서 분류 , 문서 군집 ,특성 추출
나) 정보 검색의 적절성
– 정확도 : 판단 긍정 / (판단 긍정 + 판단 부정)
– 재현율 : 판단 긍정 / (판단 긍정 + 전체 긍정)
– Corpus : 더 이상 추가 절차 없이 데이터 마이닝을 진행 할 수 있는 상태
. 패키지 : tm
. Corpus : 메모리에서만 유지
. PCorpus : DB 나 파일로 유지
. R 에서 정의 : Corpus( 비정형 데이터, readerControl=list(language=”lat”))
. R 에서 사용 : Corpus[[1]]
. Vector 읽기 : Corpus(VectorSource(Vector))
. XML 읽기 : (XML -> Text) : tm_map(데이터, as.PlainTextDocument)
. 공백 제거 : tm_map(데이터, stripWhitespace)
. CASE 변경 : tm_map(데이터, tolower)
. 시제등 삭제 : tm_map(데이터, removeWords, stopwords(“english”))
– Create Term-Document Matrix
. 단어별 빈도 테이블 생성 : DocumentTermMatrix(데이터)
. 빈도 이상 단어 조회 : findFreqTerms(빈도 테이블, 10)
. 연관 데이터 탐색 : findAssocs(빈도 테이블, 원하는 단어, 연관 정도)
. 빈도 이상 데이터 삭제 : removeSparseTerms(빈도 테이블, 밀도 )
– Dictionary
. 개인사전 <- Dictionary(c(“aa”, “bb” ,”cc”))
. inspect(DocumentTermMatirx(데이터, list(dictionary=개인사전))
– 감성 분석
. 트위터 패키지 : twitteR
. R 사용 : searchTwitter( 계정, 건수, ?)
. 긍정, 부정 단어 리스트 정의
. laply 사용 : laply( 데이터 , 펑션 )
. 사용할 펑션 정의 (특수 문자등 제거, gsub() -> match 함수 사용 긍정, 부정 List 와 원문 비교 -> 긍정 합 – 부정 합 -> 점수 리턴
– 한글 처리
. KoNLP 사용
. 명사 추출 : extractNoun(데이터)
. 연관 단어 분석 : crossTable (데이터 )
– 워드 클라우드
. 패키지 : wordcloud
. 사용 : wordcloud(테이블 컬럼 명, 각 컬럼 데이터(숫자) , colors = C(색상)))
(2) 사회 연결망 분석
가) 사회 연결망 분석 정의
– SNA 정의
. 개인과 집단들 간의 관계를 노드와 링크로서 모델링해 그것의 위상구조와 확산 및 진화 과정을 계량적을 분석
. 방법 : 집합론적 방법, 그래프를 이용한 방법, 행렬을 이용한 방법
. 연결정도 중심성 : 노드에 연결된 점들의 합
. 근접 중심성 : 간접적으로 연결된 노드들의 거리를 합산
. 매개 중심성 : 자신만 연결할 수 있는 정도에 대한 측정
. 위세 중심성 : 노드에 가중치를 둬 연결된 노드의 가중치의 합
나) R 을 이용한 SNA 그래프 분석
– SNA 적용
. 방향 그래프와 무방향 그래프
. vertex : link , edge : node
. 데이터
| FROM | TO | 속성1 | 속성2|
. 그래프 생성 : plot( graph.data.frame(데이터) )
. 유형별 조회 : get.edge.attribute( 그래프 데이터, 속성 1)
. 방향 제거 : as.undirected(그래프 데이터, mode )
. Vertex 속성 변경 : set.vertex.attribute(그래프 데이터, i , j , 속성)
. E(그래프 데이터) : 에지 접근
. V(그래프 데이터) : Vertex 접근
. Edge 삭제 : delete(그래프 데이터, E(그래프 데이터)[조건])
. 레이아웃 최적화 (Frucheterman-Rheingod 알고리즘) : laout.frucherman.reingold(그래프 데이터)
. vertex 색상 : plot ( 그래프 데이터, layout 지정, vertex.clolor = 그래프 데이터의 색상 속성, vertex.label = 텍스트 속성, edge.arrow.size =화살표 사이즈 , vertex.size = 사이즈 속성 , main = 제목 )
. 그래프 저장 : write.graph(그래프 객체 , file=파일명, format=포맷)
– 노드 레벨 통계 값
. outdegree : 밖으로 나가는 edge ,degree(그래프 데이터, mode=”out”)
. indegree : 안으로 들어오는 edge ,degree(그래프 데이터, mode=”in”)
. 특정 Vertex 에 연결된 Vertex 집합 정보 : subcomponent( i , j , mdoe= m )
. 가장 단거리 경로 : shortest.paths(그래프 데이터, mode=”in”)
– 네트워크 레벨 통계량
. Degree, Shortest Path, density, Reciprocity (상호성) , Transitivity (타동성, 이행성)
– Community Dectection
. degree 가 0인 데이터를 삭제하고 방향성을 삭제 그룹 데이터를 유추
– WALKTRAP (Community Detection Algorithm)
. 각 버택스를 하나의 커뮤니티로 취급하면서 시작해 더 큰 그룹을 병합하면서 반복 수행
. 실행 : walktrap.community(그래프 데이터, steps=수행할 스탭수, modularity=TRUE)
. 그래프 : as.dendrogram(분석 결과 값, use.modalrity=TRUE)
– EDGE BETWEENNESS METHOD
. 그래프에 존재하는 최단거리 중 몇개가 그 에지를 거쳐가는지로 측정 함
. 실행 : edge.betweenness.community(그래프 데이터)
. 그래프 : as.dendrogram(분석 결과 값)
다) 활용 방안
– 단어의 연관성 분석
– 패키지 : IGraph
– 사용 : g <- graph.adjacency( termMatrix, weight=T, mode=”undirected”)
– 단순화 : simplify(g)
– 레이아웃 지정 : layout <- layout.frucherman.reingold(g)
– 그래프 : plot(g, layout = layout)