세로형
Recent Posts
Recent Comments
Link
11-08 05:22
«   2024/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
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

파이썬 워드클라우드(python wordcloud)와 gensim의 word2vec를 이용한 분석 본문

deep learning(딥러닝)

파이썬 워드클라우드(python wordcloud)와 gensim의 word2vec를 이용한 분석

이수진의 블로그 2018. 6. 19. 10:07
반응형
728x170


이전 글인

http://lsjsj92.tistory.com/350

에서 파이썬으로 머신러닝을 진행해 뉴스 카테고리 분석을 만들었다.

keras(케라스)와 scikit learn(사이킷런)을 이용해서 만든 카테고리 분류이다


이번에는 이 데이터를 이용해서

파이썬에서 wordcloud(워드클라우드)로 시각화를 진행할 것이다.

또한, gensim의 word2vec를 이용해서 연관 단어를 추출해보려고 한다


일단 워드클라우드가 되려면 mapreduce(맵리듀스)가 되어 있어야 한다.

즉, word count(워드 카운트)가 되어 있어야 한다.


그리고 그 워드 카운트는 가장 많이 카운트 된 단어가 위쪽으로 나오게 할 것이다.

이 과정에선 hadoop hdfs와 spark를 이용할 것이다

하둡은 2.7 버전, 스파크는 2.0.3 버전인데, 그 중에서도 pyspark를 사용할 것이다



일단 위와 같이 hdfs 저장소에 은전한닢으로 형태소 분석을 한 카테고리 폴더를 다 올려두었다.

각 디렉토리 안에는 형태소 분류를 마친 텍스트 파일들이 저장되어 있다.



그리고 pyspark를 이용하여 워드 카운팅을 진행했다.

제플린(zeppelin)을 이용한 환경으로 진행하였다.

각 단어를 flatMap으로 ,를 기준으로 잘라서 모으고 그 각각을 초기에 카운팅 값을 1로 셋팅한다.

그리고 reduceByKey를 이용해서 맵리듀스를 진행하였고 sortBy로 카운트가 많이된 애를 위로 두었다.



spark에서 맵리듀스를 성공하면 위 처럼 데이터가 나오게 된다.

파티션을 1개만 주었기 때문에 하나의 파티션에서만 나오게 되고 part-00000 파일에 정보가 들어가있다.




/home/hadoop/아래에 각 맵리듀스 값들이 저장된 것을 확인할 수 있다.



이것들을 local에 다시 get한다

그리고 데이터를 확인하면



위 처럼 잘 되어 있는 것을 확인할 수 있다.

선거, 후보, 한국, 서울 등 데이터가 잘 들어가 있지만

뉴시스, 무단, 배포, 금지, 기자, 연합뉴스등

불필요한 데이터도 들어가 있으므로 이 데이터도 다 제거해준다.


대충 훑어 보니 위와 같은 데이터가 불필요한 데이터였다.

기자, 연합뉴스, 뉴스, 뉴시스, 무단, 배포, 금지, 동아일보 등이다.

이 단어들을 '없'이라는 하나의 글자로 대체하는데

그 이유는 어차피 1글자 데이터는 불필요한 데이터라서 1글자도 이후 지울것이기 때문이다



그리고 한글, 숫자, 띄어쓰기를 제외한 모든 값들을 제거한다.



그 과정을 거치면 이렇게 나오게 된다.

이제 이것을 워드클라우드로 만들어보자

wordcloud는 pytagcloud를 이용하였다.


근데 이 pytagcloud에 들어가려면 데이터 셋이 저렇게 들어가면 안된다.

배열안에 튜플 셋으로 데이터가 들어가 있어야 하는것 같았다

그래서 데이터 모양을 조금 바꿔준다.


위 빨간색 체크 표시된 부분처럼 나오도록 바꿔준다.



그리고 pytagcloud를 이용해서 워드클라우드 이미지를 생성한다

그 결과는 



위와 같이 나온다

근뎈ㅋㅋㅋ 폰트를 아무거나 골라서 했더니 너무 아기자기하게 나왔네


뭐 아무튼 저건 폰트만 바꾸면 되서 저런식으로 나오게 된다!


이제 마지막으로 gensim의 word2vec를 통해서 연관 단어를 추출해보려고 한다!


word2vec는 단어를 벡터화 시키는 작업을 진행해준다.

그래서 벡터 내적이 클수록 단어 유사성이 높아진다

이론적인 설명을 하려면 좀 더 긴 포스팅이 되고, 아직 이해가 100% 된 것이 아니라서 좀 어렵다.


아무튼 파이썬에서는 gensim 라이브러리를 통해서 word2vec를 사용할 수 있다.



이렇게 import해서 사용할 수 있다.



정치 기사를 기준으로 작성해보려 한다

정치 폴더에 있는 모든 텍스트 파일을 가지고 온다.

이 텍스트 파일을 데이터 형태소 분석을 마친 데이터이다.

워드 카운트한 데이터가 아니다!



그리고 word2vec에 적합하게 사용할 수 있는 구조를 만든다.




그리고 나서 학습을 시킨다.

차원은 100개, 앞뒤 10개씩 보면서 200개 미만 카운트 제외, 반복 50회, skip-gram 사용을 지정했다.

개인적으로 size가 궁금하긴 한데,

적당한 size가 좋다. 이건 좀 더 공부가 필요할 것 같았다.



그래서 이제 실행을 해보면

홍준표를 입력하면 사퇴, 판세, 대표 등의 단어가 나오게 된다.

선거를 입력하면 지방, 민주당, 후보 등이 나오고

이재명을 입력하면 김부선, 경기, 스캔들, 경기도가 나오게 된다.

참 신기히다 ㅎㅎ



여기까지 파이썬(python)으로 진행한 wordcloud와 word2vec!

반응형
그리드형
Comments