728x90
반응형

안녕하세요!

오늘은 한국어 데이터 분석을 위해 꼭 필요한 Konlpy(코엔엘파이) 라이브러리에 대해서 포스팅 하겠습니다.

 

  • Konlpy 란?

한국어 자연어 처리를 위한 파이썬 라이브러리 입니다.

 

  • Konlpy의 특징

Konlpy은 다양한 한국어 형태소 분석기를 지원하기 때문에 같은 문장을 다른 방식으로 분석을 하는 것이 가능합니다.

※ Konlpy는 설치 및 사용 환경을 설정하는 과정이 조금 복잡하기 때문에 따로 포스팅을 진행하도록 하겠습니다!

 

  • Konlpy이 제공하는 형태소 분석기 종류

Konlpy은 아래 5가지 형태소 분석기를 제공합니다.

  1. Kkma
  2. Komoran
  3. Hannaum
  4. Okt (구 Twittrer)
  5. Mecab: 일본어 형태소 분석기를 한국어로 변경한 분석기로, 세종 말뭉치로 만들어진 CSV 형태의 사전 (Windows에서 잘 지원이 되지 않음)

Mecab은 Windows에서 잘 지원이 되지 않기 때문에 나머지 4개의 형태소 분석기만 비교를 해보도록 하겠습니다!

 

  • Kkma

서울대 지능형 데이터 시스템 연구실에서 개발한 형태소 분석기 입니다.

비교적 정확한 품사를 구분하는 형태소 분석기로 띄어쓰기 오류에 강하고, 다의어 처리에 효과적이지만, 단어의 수가 증가할수록 분석을 진행하는 시간이 가장 크게 느려지는게 특징입니다.

Kkma는 4가지의 함수를 제공합니다.

아래는 4가지 함수와 코드 예시입니다.

from konlpy.tag import Kkma

kkma = Kkma()
text = "꼬꼬마 형태소 분석기를 사용해 봅시다."

 

  • morphs: 문장을 형태소 단위로 추출
morphs_result = kkma.morphs(text)

Output: ['꼬꼬마', '형태소', '분석', '기', '를', '사용', '하', '어', '보', 'ㅂ시다', '.']

 

  • nouns: 문장을 명사 단위로 추출
nouns_result = kkma.nouns(text)

Output: ['꼬꼬마', '형태소', '분석', '분석기']

 

  • pos: 문장을 형태소 단위로 추출, 각 형태소의 품사와 함께 반환
pos_result = kkma.pos(text)

Output: [('꼬꼬마', 'NNG'), ('형태소', 'NNG'), ('분석', 'NNG'), ('기', 'NNG'), ('를', 'JKO'), ('사용', 'NNG'), ('하', 'XSV'), ('어', 'ECS'), ('보', 'VXV'), ('ㅂ시다', 'EFN'), ('.', 'SF')]

 

  • sentences : 여러 문장으로 이루어진 텍스트를 문장 단위로 추출
text = "꼬꼬마 형태소 분석기를 사용해 봅시다. 이것은 간단한 예시입니다."
sentences_result = kkma.sentences(text)

Output: ['꼬꼬마 형태소 분석기를 사용해 봅시다.', '이것은 간단한 예시입니다.']

 

 

  • Komoran

Shineware에서 개발한 형태소 분석기 입니다.

대용량 말뭉치를 학습하여 품사 태깅에 높은 정확도를 보이며, 빠른 분석 속도높은 성능을 보유하고 있습니다.

Komoran은 3가지의 함수를 제공합니다.

아래는 3가지 함수와 코드 예시입니다.

from konlpy.tag import Komoran

komoran = Komoran()
text = "코모란 형태소 분석기를 사용해 봅시다."

 

  • morphs: 문장을 형태소 단위로 추출
morphs_result = komoran.morphs(text)

Output: ['코모란', '형태소', '분석', '기', '를', '사용', '하', '아', '보', 'ㅂ시다', '.']

 

  • nouns: 문장을 명사 단위로 추출
nouns_result = komoran.nouns(text)

Output: ['코모란', '형태소', '분석', '기']

 

  • pos: 문장을 형태소 단위로 추출, 각 형태소의 품사와 함께 반환
pos_result = komoran.pos(text)

Output: [('코모란', 'NNP'), ('형태소', 'NNG'), ('분석', 'NNG'), ('기', 'NNG'), ('를', 'JKO'), ('사용', 'NNG'), ('하', 'XSV'), ('아', 'EC'), ('보', 'VX'), ('ㅂ시다', 'EF'), ('.', 'SF')]

 

  • Hannaum

국립 국어원에서 개발한 형태소 분석기 입니다.

복합 명사를 적절하게 처리하고, 복잡한 구조의 문장에서도 안정적으로 형태소 분석을 수행합니다.

Hannaum은 3가지의 함수를 제공합니다.

아래는 3가지 함수와 코드 예시입니다.

from konlpy.tag import Hannanum

hannanum = Hannanum()
text = "한나눔 형태소 분석기를 사용해 봅시다."

 

  • morphs: 문장을 형태소 단위로 추출
morphs_result = hannanum.morphs(text)

Output: ['한나눔', '형태소', '분석', '기', '를', '사용', '하', '어', '보', 'ㅂ시다', '.']

 

  • nouns: 문장을 명사 단위로 추출
nouns_result = hannanum.nouns(text)

Output: ['한나눔', '형태소', '분석', '기']

 

  • pos: 문장을 형태소 단위로 추출, 각 형태소의 품사와 함께 반환
pos_result = hannanum.pos(text)

Output: [('한나눔', 'N'), ('형태소', 'N'), ('분석', 'N'), ('기', 'N'), ('를', 'J'), ('사용', 'N'), ('하', 'X'), ('어', 'E'), ('보', 'P'), ('ㅂ시다', 'E'), ('.', 'S')]

 

 

  • Okt

Twitter에서 개발한 형태소 분석기 입니다.

복합 명사 분석에 우수하며, 속도가 빠르고 경량화된 형태로 제공되어 다양한 환경에서 사용할 수 있습니다.

Okt는 4가지의 함수를 제공합니다.

아래는 4가지 함수와 코드 예시입니다.

from konlpy.tag import Okt

okt = Okt()
text = "Okt 형태소 분석기를 사용해 봅시다."

 

  • morphs: 문장을 형태소 단위로 추출
morphs_result = okt.morphs(text)

Output: ['Okt', '형태소', '분석기', '를', '사용', '해', '봅시다', '.']

 

  • nouns: 문장을 명사 단위로 추출
nouns_result = okt.nouns(text)

Output: ['Okt', '형태소', '분석기']

 

  • pos: 문장을 형태소 단위로 추출, 각 형태소의 품사와 함께 반환
pos_result = okt.pos(text)

Output: [('Okt', 'Alpha'), ('형태소', 'Noun'), ('분석기', 'Noun'), ('를', 'Josa'), ('사용', 'Noun'), ('해', 'Verb'), ('봅시다', 'Verb'), ('.', 'Punctuation')]

 

  • phrases: 문장을 어구 단위로 추출
phrases_result = okt.phrases(text)

Output: ['Okt', 'Okt 형태소', '형태소', '분석기', '사용', 'Okt 형태소 분석기', '분석']

 

Konlpy를 활용하여 한국어 데이터 기반 워드 클라우드, 토픽 모델링 데이터 분석을 진행한 예시는 아래 페이지에서 확인하실 수 있습니다!

https://yhj9855.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%ED%95%9C%EA%B8%80%EB%A1%9C-%EC%9B%8C%EB%93%9C%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0-feat%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%89%B4%EC%8A%A4-%ED%81%AC%EB%A1%A4%EB%A7%81

 

[데이터 분석] 한글로 워드클라우드 만들기 (feat.네이버 뉴스 크롤링)

안녕하세요. 오늘은 크롤링 데이터로 워드클라우드(wordcloud)를 만드는 방법에 대해 포스팅 하겠습니다. 크롤링 데이터는 네이버 뉴스 크롤링을 사용할 예정입니다! 네이버 뉴스 크롤링 과정이

yhj9855.com

 

https://yhj9855.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%ED%95%9C%EA%B8%80-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%86%A0%ED%94%BD-%EB%AA%A8%EB%8D%B8%EB%A7%81-%EC%A7%84%ED%96%89%ED%95%98%EA%B8%B0

 

[데이터 분석] 한글 데이터 토픽 모델링 진행하기

안녕하세요! 오늘은 한글 데이터로 토픽 모델링(topic modeling)을 하는 방법에 대해 포스팅 하겠습니다. 한글 데이터는 네이버 뉴스 크롤링 데이터를 사용할 예정입니다. 네이버 뉴스 크롤링 과정

yhj9855.com

 

궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다!

★읽어주셔서 감사합니★

728x90
반응형
728x90
반응형

안녕하세요! 오늘은 데이터 분석에서 자주 활용하는 주피터 노트북(Jupyter Notebook) 을 사용하는 방법에 대해서 포스팅 하겠습니다.

 

  • 주피터 노트북이란?

대화형 컴퓨팅 환경을 제공하는 오픈 소스 웹 기반 플랫폼입니다.

 

  • 주피터 노트북의 장점

1. 주피터 노트북은 대화형 인터페이스를 제공하고 있기 때문에 결과를 즉시 확인할 수 있습니다.

※ 사진 속 예시는 제가 작성한 웹툰 데이터 분석 코드의 일부입니다.

 

2. 주피터 노트북은 시각화 및 그래프를 지원하고 있기 때문에 노트북에 바로 결과가 표시되어 시각적으로 확인하기 쉽습니다.

※ 사진 속 예시는 제가 작성한 웹툰 데이터 분석 코드의 일부입니다.

 

3. 주피터 노트북은 다른 사용자와 공유하기 쉽습니다.

 기본적인 파일 형태인 ipynb는 GitHub 등의 협업 플랫폼에서 공유가 가능하기 때문에 협업하기 어렵지 않습니다.

또한 HTML 파일로 내보내기가 가능하기 때문에 결과물과 함께 공유가 가능하며, HTML 파일이기 때문에 다른 사용자가 열어보기 쉽습니다.

 

 

  • 주피터 노트북의 사용처

주피터 노트북은 데이터 분석 라이브러리를 모두 사용할 수 있고, 분석 후 시각화 작업이 수월하기 때문에 데이터 분석에서 많이 활용되고 있습니다.

또한 머신 러닝, 딥러닝 모델 학습이 가능하기 때문에 해당 분야에서도 자주 활용하고 있습니다.

 

  • 주피터 노트북 설치 및 실행하기

파이썬이 설치되신 분들은 아주 쉽게 주피터 노트북을 설치할 수 있습니다!

설치 및 실행 과정은 아래와 같습니다.

 

1. cmd 창을 여신 후에 pip install jupyter notebook 을 실행해주시면 됩니다.

※ cmd 창은 윈도우 검색에서 cmd라고 검색하시면 나오는 명령 프롬포트를 의미합니다.

 

2. 주피터 노트북을 실행하고자 하는 폴더로 이동합니다.

주피터 노트북은 같은 폴더에 함께 있는 파일만 인식하는 경우가 많기 때문에 폴더를 잘 선택해야 합니다.

 

3. 폴더의 빈 공간에 Shift+마우스 우클릭을 실행한 후, Power Shell 창을 열어줍니다.

※ 높은 버전의 Window에서는 '더 많은 옵션 표시'를 누르면 Power Shell 창 열기 버튼이 나타납니다.

4. Power Shell 창에 jupyter notebook 을 입력 후 실행해주시면 됩니다.

cmd에서 바로 실행하는 경우도 있는데, cmd보다 Power Shell의 기능이 더 강력하고 확장성이 뛰어나기 때문에 Power Shell로 실행하시는 것을 추천합니다!

 

5. 자동으로 주피터 노트북과 연결된 인터넷 창이 뜨면 실행 완료입니다!

만약 자동으로 연결된 인터넷 창이 뜨지 않는다면, Power Shell 창에 나와있는 인터넷 주소를 복사하여 입력하시면 됩니다.

 

 

  • 주피터 노트북에 코드 작성하기

이제 주피터 노트북을 실행하였으니, 코드를 작성해보도록 하겠습니다.

저는 보통 Python(파이썬) 코딩을 진행합니다만, R과 같이 다른 프로그래밍 언어도 사용가능합니다!

하지만 이 글에서는 파이썬 코드를 작성하는 법만 다루도록 하겠습니다.

주피터 노트북에서 파이썬 코드를 작성하는 방법은 아래와 같습니다.

 

1. 'New' 버튼을 클릭하여 파이썬 코드를 작성할 파일을 생성한다.

파일의 이름은 기본적으로 Untitled으로 생성되기 때문에 파일의 이름은 변경해주셔야 합니다.

※ Untitled을 더블 클릭하면 이름을 바로 변경할 수 있습니다.

2. 코드 셀에 원하는 코드를 작성해줍니다.

주피터 노트북은 기본적으로 코드를 실행하는 코드 셀을 제공해주고 있기 때문에 코드를 바로 작성해주시면 됩니다!

만약 코드가 아닌 일반 텍스트로 작성하고 싶은 경우에는 'm' 단축키를 누르거나, 상단의 'Code'를 'Markdown'으로 변경하여 코드 셀을 텍스트 셀로 변환해주시면 됩니다.

 

3. 코드가 작성 완료된 셀을 실행시켜줍니다.

코드 셀을 실행하는 방법은 총 3가지 방법이 있습니다.

  1. Ctrl+Enter: 현재의 코드 셀만 실행을 하고, 새로운 코드 셀을 추가하지 않습니다.
  2. 주피터 노트북의 실행 키를 누르는 방법: 현재의 코드 셀만 실행을 하고, 새로운 코드 셀을 추가합니다.
    ※ ▶Run 버튼이 실행 키 입니다.
  3. Shift+Enter: 현재의 코드 셀만 실행을 하고, 새로운 코드 셀을 추가합니다.

▶▶ 이렇게 생긴 버튼을 누르게 되면 처음 코드 셀부터 마지막 코드 셀까지 순차적으로 실행이 됩니다.

실행된 순서는 In [ ]에서 [ ] 안의 숫자로 확인할 수 있고, 굳이 순서대로가 아닌 제가 원하는 셀만 실행시킬 수 있기 때문에 실행 순서를 잘 이용하면 코드를 효율적으로 작성할 수 있습니다!

 

4. 완성된 코드 저장합니다.

주피터 노트북에 코드를 모두 작성했다면, Ctrl+s 단축키를 사용하여 저장해주면 됩니다.

주피터 노트북은 어느 정도 실시간 저장이 보장되지만, 저장하는 습관 길러두시는 편이 좋습니다!

저장된 파일은 .ipynb 라는 확장자를 가지는데요.

더블 클릭으로 여는 것은 조금 어렵고, 주피터 노트북에서 열어보시거나 Github에 올려서 확인하실 수 있습니다!

 

주피터 노트북은 활용을 잘하면 정말 유용한 코드 플랫폼이기 때문에 사용법을 익혀두시는 걸 정말 추천드립니다!

 

제가 주피터 노트북을 활용하여 워드 클라우드, 토픽 모델링 데이터 분석을 진행한 예시는 아래 페이지에서 확인하실 수 있습니다!

https://yhj9855.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%ED%95%9C%EA%B8%80%EB%A1%9C-%EC%9B%8C%EB%93%9C%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0-feat%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%89%B4%EC%8A%A4-%ED%81%AC%EB%A1%A4%EB%A7%81

 

[데이터 분석] 한글로 워드클라우드 만들기 (feat.네이버 뉴스 크롤링)

안녕하세요. 오늘은 크롤링 데이터로 워드클라우드(wordcloud)를 만드는 방법에 대해 포스팅 하겠습니다. 크롤링 데이터는 네이버 뉴스 크롤링을 사용할 예정입니다! 네이버 뉴스 크롤링 과정이

yhj9855.com

https://yhj9855.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%ED%95%9C%EA%B8%80-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%86%A0%ED%94%BD-%EB%AA%A8%EB%8D%B8%EB%A7%81-%EC%A7%84%ED%96%89%ED%95%98%EA%B8%B0

 

[데이터 분석] 한글 데이터 토픽 모델링 진행하기

안녕하세요! 오늘은 한글 데이터로 토픽 모델링(topic modeling)을 하는 방법에 대해 포스팅 하겠습니다. 한글 데이터는 네이버 뉴스 크롤링 데이터를 사용할 예정입니다. 네이버 뉴스 크롤링 과정

yhj9855.com

 

궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.

★읽어주셔서 감사합니다★

 

728x90
반응형
728x90
반응형

안녕하세요! 오늘은 한글 데이터로 토픽 모델링(topic modeling)을 하는 방법에 대해 포스팅 하겠습니다.

 

한글 데이터는 네이버 뉴스 크롤링 데이터를 사용할 예정입니다.

네이버 뉴스 크롤링 과정이 궁금하신 분은 아래 링크를 확인해주세요:)

https://yhj9855.tistory.com/entry/Crawling-%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%89%B4%EC%8A%A4-%ED%81%AC%EB%A1%A4%EB%A7%81-1

 

[Crawling] 네이버 뉴스 크롤링 - 1

안녕하세요. 크롤링에서 가장 첫 포스팅을 네이버 뉴스 크롤링으로 하게 되었어요. 아무래도 바쁜 일상 속에서 매일 뉴스 기사를 파악하는 부분이 시간적으로 힘들었는데, 크롤링하고 데이터

yhj9855.com


  • 토픽 모델링이란?

비지도 학습으로, 텍스트 문서 집합을 하나 이상의 추상적인 주제(=토픽)로 분류하는 작업을 말합니다.

텍스트의 구조를 파악하거나, 다량의 텍스트를 분석할 때 자주 사용되는 데이터 분석 방법입니다!

 

토픽 모델링을 진행하는 건 Jupyter Notebook에서 하시는 걸 추천드립니다.

Jupyter Notebook를 설치하고 사용하는 방법은 아래 링크에서 확인해주세요!

https://yhj9855.tistory.com/entry/%EC%A3%BC%ED%94%BC%ED%84%B0-%EB%85%B8%ED%8A%B8%EB%B6%81Jupyter-Notebook-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

주피터 노트북(Jupyter Notebook) 사용하기

안녕하세요! 오늘은 데이터 분석에서 자주 활용하는 주피터 노트북(Jupyter Notebook) 을 사용하는 방법에 대해서 포스팅 하겠습니다. 주피터 노트북이란? 대화형 컴퓨팅 환경을 제공하는 오픈 소스

yhj9855.com


  • 필요한 라이브러리 설치

토픽 모델링은 머신러닝 모델 중 LDA 모델을 사용합니다.

LDA 모델에 대한 자세한 설명은 아래 링크에서 확인해주세요!

https://ko.wikipedia.org/wiki/%EC%9E%A0%EC%9E%AC_%EB%94%94%EB%A6%AC%ED%81%B4%EB%A0%88_%ED%95%A0%EB%8B%B9

 

잠재 디리클레 할당 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 자연어 처리에서 잠재 디리클레 할당(Latent Dirichlet allocation, LDA)은 주어진 문서에 대하여 각 문서에 어떤 주제들이 존재하는지를 서술하는 대한 확률적 토픽 모

ko.wikipedia.org

 

저는 머신러닝을 sklearn 라이브러리를 사용했기 때문에 sklearn 라이브러리를 설치해주시면 됩니다!

sklearn 라이브러리 설치가 어려우신 분들은 colab에서 진행해주셔도 됩니다.

colab의 자세한 사용법은 추후 따로 포스팅을 진행하도록 하겠습니다!

 

또한, 한글 텍스트 데이터를 다루고 있기 때문에 이를 다루는 라이브러리가 필요합니다.

저는 한글 텍스트를 다루는 라이브러리 중 Konply 라이브러리를 사용했습니다.

 

Konply 라이브러리와 관련된 자세한 설명은 아래 포스팅을 확인해주세요!

https://yhj9855.tistory.com/entry/%ED%95%9C%EA%B5%AD%EC%96%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%ED%95%84%EC%88%98-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-Konlpy%EC%BD%94%EC%97%94%EC%97%98%ED%8C%8C%EC%9D%B4

 

한국어 데이터 분석 필수 라이브러리 Konlpy(코엔엘파이)

안녕하세요! 오늘은 한국어 데이터 분석을 위해 꼭 필요한 Konlpy(코엔엘파이) 라이브러리에 대해서 포스팅 하겠습니다. Konlpy 란? 한국어 자연어 처리를 위한 파이썬 라이브러리 입니다. Konlpy의

yhj9855.com

 

  • 데이터 로드 후 정제하기

필요한 라이브러리를 설치한 후에는 pandas를 사용하여 데이터를 불러옵니다.

저는 2024년 01월 17일 네이버 게임/리뷰 카테고리의 기사 크롤링 데이터를 불러와 정제를 진행하도록 하겠습니다.

# 파일 이름만 적을 때는 파일이 실행 파일과 같은 곳에 저장되어 있어야 한다.
result = pd.read_excel('파일 이름')
# 기사의 제목 데이터
Title = list(result['title'])
# 기사의 내용 데이터
Information = list(result['information'])
# 기사의 제목과 내용을 하나의 리스트에 담았다.
Total = []
for i in range(len(result)) :
    Total.append(Title[i]+' '+Information[i])

※ Total 데이터의 양이 너무 많아서 데이터 확인은 진행하지 않겠습니다.

명사로 데이터 분류하기

토픽을 제대로 분류하기 위해서는 데이터를 의미 있는 데이터만 남기는 것이 중요합니다.

그 중 가장 빠른 방법이 명사인 데이터만 남기는 것인데요.

 

명사로 분류를 하지 않을 경우, '있다', '있는' 과 같이 보기만 하면 이해하지 못하는 단어들이 높은 비중을 차지하는 경우가 많기 때문에 제대로 데이터 분석이 되지 않는 경우가 많이 발생합니다.

 

명사로 분류하기 위해 Konpy 라이브러리를 사용하려고 하는데요.

Konply가 지원하는 형태소 분석 중 저는 Komoran을 사용하였습니다.

Konply이 지원하는 다른 형태소 분석은 추후에 포스팅 진행하도록 하겠습니다!

 

명사로 형태소 분석을 하는 코드는 아래와 같습니다.

# 형태소 분석기로 Komoran을 사용
komoran = Komoran()
# Total 데이터를 명사로 분류한 후에 띄어쓰기로 붙여넣기 진행
# 줄바꿈으로 진행하도 상관없으나, 줄바꿈으로 진행 시, 이후 띄어쓰기 대신 모두 줄바꿈으로 변경해야한다.
total_nouns = [' '.join(komoran.nouns(doc)) for doc in Total]
  • 추가 전처리 진행하기

total_nouns 데이터는 이제 명사로만 이루어진 데이터입니다.

그대로 토픽 모델링을 진행해도 되지만, 생각보다 의미 없는 데이터가 많이 존재하기 때문에 추가적으로 데이터 전처리를 진행해주는 것이 좋습니다.

예를 들면 '것', '이', '등' 과 같은 단어를 삭제하기 위해서 두 글자 명사만 넣어준다거나, 특정 카테고리의 뉴스이기 때문에 자주 등장하는 명사는 제거한다거나, 기업의 이름들이 명사로 이상하게 분류되어 있는 부분을 원래 기업 이름으로 변경을 해준다거나 하는 방법으로 데이터 전처리를 진행해주시면 됩니다.

 

제가 진행한 전처리 코드는 아래와 같습니다.

# 추가 데이터 전처리 과정
for i in range(len(total_nouns)) :
    
    # 자주 등장하는 단어들을 꾸준히 붙여준다. (기업 이름 등)
    # total_nouns[i]]가 하나의 문자열이기 때문에 reaplace를 통해 변경한다.
    total_nouns[i] = total_nouns[i].replace('위 메이드', '위메이드')
    total_nouns[i] = total_nouns[i].replace('위 믹스', '위믹스')
    total_nouns[i] = total_nouns[i].replace('컴투스 홀', '컴투스홀딩스')
    total_nouns[i] = total_nouns[i].replace('개발 사', '개발사')
    total_nouns[i] = total_nouns[i].replace('펄 어비스', '펄어비스')
    total_nouns[i] = total_nouns[i].replace('콜 라보', '콜라보')
    total_nouns[i] = total_nouns[i].replace('카 테 고리', '카테고리')
    total_nouns[i] = total_nouns[i].replace('확률 형', '확률형')
    total_nouns[i] = total_nouns[i].replace('역대 급', '역대급')
    total_nouns[i] = total_nouns[i].replace('마비 노기', '마비노기')
    total_nouns[i] = total_nouns[i].replace('게임 위', '게임위')
    total_nouns[i] = total_nouns[i].replace('컬 래 버 레이 션', '콜라보레이션')
    total_nouns[i] = total_nouns[i].replace('콜 라보 레이 션', '콜라보레이션')
    total_nouns[i] = total_nouns[i].replace('빅 게임', '빅게임')
    total_nouns[i] = total_nouns[i].replace('엔 씨', '엔씨')
    total_nouns[i] = total_nouns[i].replace('스타트 업', '스타트업')
    total_nouns[i] = total_nouns[i].replace('디바 이스', '디바이스')
    total_nouns[i] = total_nouns[i].replace('선택 지', '선택지')
    total_nouns[i] = total_nouns[i].replace('치지 직', '치지직')
    total_nouns[i] = total_nouns[i].replace('어 플리 케이 션', '어플리케이션')
    total_nouns[i] = total_nouns[i].replace('게임 쇼', '게임쇼')
    total_nouns[i] = total_nouns[i].replace('아스 달', '아스달')
    total_nouns[i] = total_nouns[i].replace('김실 장', '김실장')
    total_nouns[i] = total_nouns[i].replace('행 안부', '행안부')
    
    # 게임 뉴스이기 때문에 게임과 관련된 부분, 뉴스와 관련된 부분은 제거한다.
    total_nouns[i] = total_nouns[i].replace('게임', '')
    total_nouns[i] = total_nouns[i].replace('기자', '')
    total_nouns[i] = total_nouns[i].replace('기사', '')
    total_nouns[i] = total_nouns[i].replace('진행', '')
    total_nouns[i] = total_nouns[i].replace('이용자', '')
    total_nouns[i] = total_nouns[i].replace('플레이', '')
    total_nouns[i] = total_nouns[i].replace('이번', '')

	# 매일매일 기사에서 반복되는 단어들을 삭제한다.
    # 의미가 없는 단어들은 아니지만, 지속적으로 나오면서 의미를 부여하기 어려운 단어가 되었다.
    total_nouns[i] = total_nouns[i].replace('지난해', '')
    total_nouns[i] = total_nouns[i].replace('전년', '')
    total_nouns[i] = total_nouns[i].replace('콘텐츠', '')
    total_nouns[i] = total_nouns[i].replace('출시', '')
    total_nouns[i] = total_nouns[i].replace('서비스', '')
    total_nouns[i] = total_nouns[i].replace('모바일', '')
    total_nouns[i] = total_nouns[i].replace('제공', '')
    total_nouns[i] = total_nouns[i].replace('예정', '')
	
    # 단어가 두 글자 이상인 것만 토픽 모델링을 진행할 데이터에 넣어준다.
	a = total_nouns[i].split(' ')
    data = ''
    for j in a :
        if len(j) >= 2 :
            # 동일한 이유로 띄어쓰기로 붙여 넣는다.
            # 마찬가지로 줄바꿈으로 진행해도 된다.
            data = data+' '+j
    total_nouns[i] = data

저는 total_nouns의 일부를 확인하고 진행을 하고 있기 때문에 여러분들은 여러분들의 데이터에 맞게 전처리를 진행하시면 됩니다!

  • LDA 모델에 학습하기 알맞게 데이터 변형하기

데이터 전처리가 끝난 후에는 LDA 모델에 학습하기 알맞게 데이터를 변형해야 합니다.

데이터를 변형하는 코드는 아래와 같습니다.

# CountVectorizer 객체 생성
# CountVectorizer는 문서에서 단어의 빈도수를 계산하는 도구이다.
CV_vectorizer = CountVectorizer()

# total_nouns에 있는 단어의 빈도수를 행렬로 변경한다.
X = CV_vectorizer.fit_transform(total_nouns)

 

  • LDA 모델 생성 및 데이터 학습

이제 데이터가 완성되었으니, LDA 모델을 만들어 데이터를 학습시키도록 하겠습니다!!

LDA 모델을 만드는 코드는 아래와 같습니다.

# 토픽의 개수를 지정한다.
num_topics = 6

# LDA 모델을 생성한다.
# 동일한 결과물을 얻기 위해서 random_state(난수)를 42로 고정한다.
lda = LatentDirichletAllocation(n_components=num_topics, random_state=42)

# 위에서 만든 데이터 X를 LDA 모델에 학습을 시킨다.
# 이제 lda는 데이터 X가 6개의 토픽으로 분류된 정보가 담겨있다.
lda.fit(X)
  • 각 토픽 내 주요 키워드 찾기

토픽으로 분류를 완료하였으니, 각 토픽이 어떤 키워드를 가지고 있는지 확인해보도록 하겠습니다.

저는 각 토픽마다 7개의 키워드를 추출해서 데이터 프레임을 새로 만들었습니다!

키워드의 수는 원하는대로 지정하시면 됩니다.

키워드를 추출하는 코드는 아래와 같습니다.

# CountVectorizer를 통해 추출된 단어의 목록을 얻는다.
# 단어의 목록은 array로 저장되어 있다.
CV_feature_names = CV_vectorizer.get_feature_names_out()

# 각 토픽의 키워드를 담을 리스트
# 여기에 초기화를 진행해주지 않으면, 다른 날짜의 기사를 진행할 때 진행이 잘 되지 않을 수 있다.
topic_keywords = []

# 토픽 수를 구분하는 변수
topic_index = 1

# 키워드 수를 구분하는 변수
# 키워드 수를 변경하고 싶다면, 숫자를 원하는 키워드 수로 변경하면 된다.
num_word = 7

# lda.components_가 이중 array로 되어 있기 때문에 데이터를 쉽게 다루기 위해수 enumerate로 데이터를 가져온다.
for topic_idx, topic in enumerate(lda.components_):
    # topic에는 단어의 빈도 확률이 들어있기 때문에 가장 높은 빈도 확률 7개의 인덱스를 추출한다.
    top_keywords_idx = topic.argsort()[::-1][:num_word]
    # 단어 목록에서 빈도 확률과 동일한 인덱스를 가진 단어를 추출한다.
    top_keywords = [CV_feature_names[i] for i in top_keywords_idx]
    # 토픽을 구분하는 값을 맨 앞에 삽입해준다.
    top_keywords.insert(0, 'Topic %d' %(topic_index))
    topic_index = topic_index+1
    topic_keywords.append(top_keywords)

# 추출한 7개의 키워드를 데이터 프레임으로 변경한다.
df_topic_keywords = pd.DataFrame(topic_keywords, columns=["Topic"]+ [f"Keyword {i+1}" for i in range(num_word)])

이렇게 만들어진 df_topic_keywords의 결과물은 아래와 같습니다!

저는 6개의 토픽과 7개의 키워드로 진행을 했기 때문에 이런 결과가 나왔습니다.

실제 토픽의 수와 비슷할수록 정확하게 토픽을 구분하지만, 실제 토픽의 수를 알 수 없으니 다양하게 해보시길 바랍니다.

전체코드

import pandas as pd
from konlpy.tag import *
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation

result = pd.read_excel('파일 이름')
Title = list(result['title'])
Information = list(result['information'])

Total = []
for i in range(len(result)) :
    Total.append(Title[i]+' '+Information[i])
    
komoran = Komoran()
total_nouns = [' '.join(komoran.nouns(doc)) for doc in Total]

# 전처리 과정
for i in range(len(total_nouns)) :
    total_nouns[i] = total_nouns[i].replace('위 메이드', '위메이드')
    total_nouns[i] = total_nouns[i].replace('위 믹스', '위믹스')
    total_nouns[i] = total_nouns[i].replace('컴투스 홀', '컴투스홀딩스')
    total_nouns[i] = total_nouns[i].replace('개발 사', '개발사')
    total_nouns[i] = total_nouns[i].replace('펄 어비스', '펄어비스')
    total_nouns[i] = total_nouns[i].replace('콜 라보', '콜라보')
    total_nouns[i] = total_nouns[i].replace('카 테 고리', '카테고리')
    total_nouns[i] = total_nouns[i].replace('확률 형', '확률형')
    total_nouns[i] = total_nouns[i].replace('역대 급', '역대급')
    total_nouns[i] = total_nouns[i].replace('마비 노기', '마비노기')
    total_nouns[i] = total_nouns[i].replace('게임 위', '게임위')
    total_nouns[i] = total_nouns[i].replace('컬 래 버 레이 션', '콜라보레이션')
    total_nouns[i] = total_nouns[i].replace('콜 라보 레이 션', '콜라보레이션')
    total_nouns[i] = total_nouns[i].replace('빅 게임', '빅게임')
    total_nouns[i] = total_nouns[i].replace('엔 씨', '엔씨')
    total_nouns[i] = total_nouns[i].replace('스타트 업', '스타트업')
    total_nouns[i] = total_nouns[i].replace('디바 이스', '디바이스')
    total_nouns[i] = total_nouns[i].replace('선택 지', '선택지')
    total_nouns[i] = total_nouns[i].replace('치지 직', '치지직')
    total_nouns[i] = total_nouns[i].replace('어 플리 케이 션', '어플리케이션')
    total_nouns[i] = total_nouns[i].replace('게임 쇼', '게임쇼')
    total_nouns[i] = total_nouns[i].replace('아스 달', '아스달')
    total_nouns[i] = total_nouns[i].replace('김실 장', '김실장')
    total_nouns[i] = total_nouns[i].replace('행 안부', '행안부')
    total_nouns[i] = total_nouns[i].replace('게임', '')
    total_nouns[i] = total_nouns[i].replace('기자', '')
    total_nouns[i] = total_nouns[i].replace('기사', '')
    total_nouns[i] = total_nouns[i].replace('진행', '')
    total_nouns[i] = total_nouns[i].replace('이용자', '')
    total_nouns[i] = total_nouns[i].replace('플레이', '')
    total_nouns[i] = total_nouns[i].replace('이번', '')
    total_nouns[i] = total_nouns[i].replace('지난해', '')
    total_nouns[i] = total_nouns[i].replace('전년', '')
    total_nouns[i] = total_nouns[i].replace('콘텐츠', '')
    total_nouns[i] = total_nouns[i].replace('출시', '')
    total_nouns[i] = total_nouns[i].replace('서비스', '')
    total_nouns[i] = total_nouns[i].replace('모바일', '')
    total_nouns[i] = total_nouns[i].replace('제공', '')
    total_nouns[i] = total_nouns[i].replace('예정', '')
    a = total_nouns[i].split(' ')
    data = ''
    for j in a :
        if len(j) >= 2 :
            data = data+' '+j
    total_nouns[i] = data
    
CV_vectorizer = CountVectorizer()
X = CV_vectorizer.fit_transform(total_nouns)

num_topics = 6

lda = LatentDirichletAllocation(n_components=num_topics, random_state=42)
lda.fit(X)

CV_feature_names = CV_vectorizer.get_feature_names_out()

topic_keywords = []
topic_index = 1
num_word = 7

for topic_idx, topic in enumerate(lda.components_):
    top_keywords_idx = topic.argsort()[::-1][:num_word]
    top_keywords = [CV_feature_names[i] for i in top_keywords_idx]
    top_keywords.insert(0, 'Topic %d' %(topic_index))
    topic_index = topic_index+1
    topic_keywords.append(top_keywords)

df_topic_keywords = pd.DataFrame(topic_keywords, columns=["Topic"]+ [f"Keyword {i+1}" for i in range(num_word)])
  • 활용하기

제가 개인적으로 토픽 모델링과 다른 시각화를 활용하여 네이버 기사를 분석한 예시입니다.

예시에서 활용한 파이 차트 및 바 차트, 네트워트 분석은 다음 포스팅에서 진행하겠습니다!!

 

한글 데이터로 워드클라우드를 만드는 방법이 궁금하신 분들은 아래 링크를 확인해주세요:)

https://yhj9855.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%ED%95%9C%EA%B8%80%EB%A1%9C-%EC%9B%8C%EB%93%9C%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0-feat%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%89%B4%EC%8A%A4-%ED%81%AC%EB%A1%A4%EB%A7%81

 

[데이터 분석] 한글로 워드클라우드 만들기 (feat.네이버 뉴스 크롤링)

안녕하세요. 오늘은 크롤링 데이터로 워드클라우드(wordcloud)를 만드는 방법에 대해 포스팅 하겠습니다. 크롤링 데이터는 네이버 뉴스 크롤링을 사용할 예정입니다! 네이버 뉴스 크롤링 과정이

yhj9855.com

 

코드에 대해 궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.

★읽어주셔서 감사합니다★

728x90
반응형
728x90
반응형

안녕하세요. 오늘은 크롤링 데이터로 워드클라우드(wordcloud)를 만드는 방법에 대해 포스팅 하겠습니다.

 

크롤링 데이터는 네이버 뉴스 크롤링을 사용할 예정입니다!

네이버 뉴스 크롤링 과정이 궁금하신 분은 아래 링크를 확인해주세요:)

https://yhj9855.com/entry/Crawling-%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%89%B4%EC%8A%A4-%ED%81%AC%EB%A1%A4%EB%A7%81-1

 

[Crawling] 네이버 뉴스 크롤링 - 1

안녕하세요. 크롤링에서 가장 첫 포스팅을 네이버 뉴스 크롤링으로 하게 되었어요. 아무래도 바쁜 일상 속에서 매일 뉴스 기사를 파악하는 부분이 시간적으로 힘들었는데, 크롤링하고 데이터

yhj9855.com


  • 워드클라우드(wordcloud)란?

자료의 빈도를 시각적으로 나타내는 방법 중 하나로, 텍스트 데이터 분석을 진행할 때 많이 사용됩니다.

위의 그림처럼 글자 크기를 빈도수에 비례하여 나타내주기 때문에 어떤 단어가 중요한지 한 눈에 알기 편합니다.

만들기 어려워 보이지만, 파이썬은 워드 클라우드를 만드는 라이브러리를 제공해주기 때문에 굉장히 쉽게 만들 수 있습니다!

 

워드 클라우드를 만드는 건 Jupyter Notebook에서 하시는 걸 추천드립니다.

Jupyter Notebook을 설치하고 사용하는 방법은 아래 링크에서 확인해주세요!

https://yhj9855.com/entry/%EC%A3%BC%ED%94%BC%ED%84%B0-%EB%85%B8%ED%8A%B8%EB%B6%81Jupyter-Notebook-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

주피터 노트북(Jupyter Notebook) 사용하기

안녕하세요! 오늘은 데이터 분석에서 자주 활용하는 주피터 노트북(Jupyter Notebook) 을 사용하는 방법에 대해서 포스팅 하겠습니다. 주피터 노트북이란? 대화형 컴퓨팅 환경을 제공하는 오픈 소스

yhj9855.com

 

그럼 한글 텍스트 데이터로 워드 클라우드를 만들어보도록 하겠습니다.

 


  • 필요한 라이브러리 설치

워드 클라우드는 텍스트 데이터를 다루기 때문에 텍스트 데이터를 다루는 라이브러리가 필요합니다.

파이썬은 텍스트 데이터가 영어냐, 한글이냐에 따라서 필요한 라이브러리가 다른데요.

저희는 한글 텍스트 분석을 진행할 것이기 때문에 Konply 라이브러리를 설치합니다.

 

Konply 라이브러리와 관련된 자세한 설명은 아래 포스팅에서 확인해주세요!
https://yhj9855.com/entry/%ED%95%9C%EA%B5%AD%EC%96%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%ED%95%84%EC%88%98-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-Konlpy%EC%BD%94%EC%97%94%EC%97%98%ED%8C%8C%EC%9D%B4

 

한국어 데이터 분석 필수 라이브러리 Konlpy(코엔엘파이)

안녕하세요! 오늘은 한국어 데이터 분석을 위해 꼭 필요한 Konlpy(코엔엘파이) 라이브러리에 대해서 포스팅 하겠습니다. Konlpy 란? 한국어 자연어 처리를 위한 파이썬 라이브러리 입니다. Konlpy의

yhj9855.com

 

그 다음 워드 클라우드를 만들기 위한 라이브러리 wordcloud를 설치해줍니다.

# cmd 창에서 wordcloud 라이브러리 설치
pip install wordcloud
  • 데이터 로드 후 정제하기

필요한 라이브러리를 설치한 후에는 pandas를 사용하여 데이터를 불러옵니다.

저는 2024년 01월 17일 네이버 게임/리뷰 카테고리의 기사 크롤링 데이터를 불러와 정제를 진행하도록 하겠습니다.

result = pd.read_excel('news_detail_20240117.xlsx')
# 기사의 제목 데이터
Title = list(result['title'])
# 기사의 내용 데이터
Information = list(result['information'])
Total = []
# 기사의 제목과 내용을 하나의 리스트에 담았다.
for i in range(len(result)) :
    Total.append(Title[i]+' '+Information[i])

※ Total 데이터의 양이 너무 많아서 데이터 확인은 진행하지 않겠습니다.

  • 명사로 데이터 분류하기

워드 클라우드를 만들기 위해서는 데이터를 의미 있는 데이터만 남겨야 합니다.

그 중 가장 빠른 방법이 명사인 데이터만 남기는 것인데요.

 

생각보다 동사는 '이다', '한다', '있다', '었다' 와 같이 보기만 하면 이해하지 못하는 단어의 빈도수가 높은 경우가 많습니다.

그 외에 다른 형태소를 사용하거나, 범위를 넓힐 경우 워드 클라우드로 만들었을 때, 깔끔하게 나오지 않는 경우가 많아 명사로 진행하도록 하겠습니다.

 

Konply가 지원하는 형태소 분석 종류가 몇 가지 있는데, 저는 그 중에서 Komoran을 사용하였습니다.

다른 종류나 종류별 차이에 대한 포스팅은 추후에 진행하도록 하겠습니다!

 

명사로 형태소 분석을 하는 코드는 아래와 같습니다.

# 형태소 분석기로 Komoran을 사용
komoran = Komoran()
# Total 데이터를 명사로 분류한 후에 띄어쓰기로 붙여넣기 진행
# 줄바꿈으로 진행해도 상관없으나, 보기에 띄어쓰기가 더 편하기 때문에 띄어쓰기로 진행
total_nouns = [' '.join(komoran.nouns(doc)) for doc in Total]

  • 추가 전처리 진행하기

total_nouns 데이터는 이제 명사로만 이루어진 데이터입니다.

그대로 워드 클라우드로 진행을 해도 되지만, 생각보다 의미 없는 데이터가 워드 클라우드에 들어가는 경우가 많기 때문에 추가적으로 데이터 전처리를 진행하는 것이 좋습니다.

예를 들면 한 글자 '것', '이', '등' 이런 단어의 빈도수가 높은 경우가 많기 때문에 두 글자 명사만 데이터를 넣어준다거나, 특정 카테고리의 뉴스이기 때문에 자주 등장하는 명사는 제거한다거나 하는 방법으로 데이터 전처리를 진행해주시면 됩니다.

제가 진행한 전처리 코드는 아래와 같습니다.

# 추가 데이터 전처리 과정
for i in range(len(total_nouns)) :
    # 게임 뉴스이기 때문에 게임과 관련된 부분, 뉴스와 관련된 부분은 제거한다.
    # total_nouns[i]가 하나의 문자열이기 때문이 replace를 통해 제거한다.
    total_nouns[i] = total_nouns[i].replace('게임', '')
    total_nouns[i] = total_nouns[i].replace('기자', '')
    total_nouns[i] = total_nouns[i].replace('기사', '')
    total_nouns[i] = total_nouns[i].replace('진행', '')
    total_nouns[i] = total_nouns[i].replace('이용자', '')
    total_nouns[i] = total_nouns[i].replace('플레이', '')
    total_nouns[i] = total_nouns[i].replace('이번', '')
    
    # 단어를 구분해야 하기 때문에 띄어쓰기로 나누어준다.
    # 만약 줄바꿈으로 데이터를 붙여 넣었다면, 줄바꿈으로 나누어주어야 한다.
    a = total_nouns[i].split(' ')

	# 단어가 두 글자 이상인 것만 워드 클라우드를 진행할 데이터에 넣어준다.
    data = ''
    for j in a :
        if len(j) >= 2 :
        	# 이전 코드와 동일한 이유로 띄어쓰기로 붙여 넣는다.
            # 마찬가지로 줄바꿈으로 진행해도 상관없다.
            data = data+' '+j
    total_nouns[i] = data
  • 워드 클라우드 만들기

이제 데이터 전처리가 완료되었으니, 워드 클라우드를 만들어보겠습니다!

워드 클라우드를 만드는 코드는 아래와 같습니다.

# 워드 클라우드를 위한 작업
wordcloud = []
for i in total_nouns :
	# 문자열로 된 데이터를 단어로 판단해야 하기 때문에 띄어쓰기로 나눈다.
    # 줄바꿈으로 붙여 넣기를 진행했다면, 줄바꿈으로 나누어야 한다.
    i = i.split(' ')
    # wordcloud라는 리스트에 모든 단어를 넣어준다.
    for j in i :
        wordcloud.append(j)

# Counter 함수를 사용하여 wordcloud 내 단어와 단어의 수를 wordcloud_data에 dictionary 형태로 저장한다.
wordcloud_data = dict(Counter(wordcloud))

# 워드 클라우드의 모양 이미지 변경하고 싶을 경우 파일 경로를 저장한다.
# 기본 네모로 진행할 경우 해당 부분은 지우면 된다.
Naver = np.array(Image.open("파일 경로"))
# 워드 클라우드의 크기를 결정한다.
plt.figure(figsize=(30,30))
wc = WordCloud(        # 워드 클라우드의 모양을 결정한다.
		       # 기본 네모로 진행할 경우 해당 부분을 지우면 된다.
		       relative_scaling=0.2,mask = Naver,
                       # 기본적으로 한글은 지원하지 않기 때문에 한글의 폰트를 지정해야한다.
                       # 워드 클라우드는 함수 안에서 폰트를 지정하기 때문에 다른 그래프보다 폰트 자유도가 높다.
                       font_path="폰트 경로",
                       # 워드 클라우드 배경색
                       background_color="white",
                       # 가장 작은 폰트 사이즈
                       min_font_size=1,
                       # 가장 큰 폰트 사이즈
                       max_font_size=50,
                       # 워드 클라우드 진행하고 싶은 단어의 수
                       max_words=100,
                       colormap = 'coolwarm'
                     ).generate_from_frequencies(wordcloud_data)
plt.imshow(wc)
plt.axis('off')
plt.show()

위의 있는 코드로 실행했을 때의 결과물은 아래와 같습니다!

※ 실행할 때마다 색상이 일부 달라지기 때문에 원하는 색상이 나올 때까지 진행하시면 됩니다.

저는 오른쪽 이미지를 사용했기 때문에 해당 모양의 워드 클라우드가 만들어졌습니다.

생각보다 이미지 적용이 잘되기 때문에 원하시는 이미지로 해보시길 바랍니다.

 

전체코드

import pandas as pd
import numpy as np
from konlpy.tag import *
from collections import Counter
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
from PIL import Image
import matplotlib.pyplot as plt

result = pd.read_excel('파일 이름')
Title = list(result['title'])
Information = list(result['information'])

Total = []
for i in range(len(result)) :
    Total.append(Title[i]+' '+Information[i])

komoran = Komoran()
total_nouns = [' '.join(komoran.nouns(doc)) for doc in Total]

for i in range(len(total_nouns)) :
    total_nouns[i] = total_nouns[i].replace('게임', '')
    total_nouns[i] = total_nouns[i].replace('기자', '')
    total_nouns[i] = total_nouns[i].replace('기사', '')
    total_nouns[i] = total_nouns[i].replace('진행', '')
    total_nouns[i] = total_nouns[i].replace('이용자', '')
    total_nouns[i] = total_nouns[i].replace('플레이', '')
    total_nouns[i] = total_nouns[i].replace('이번', '')
    a = total_nouns[i].split(' ')
    data = ''
    for j in a :
        if len(j) >= 2 :
            data = data+' '+j
    total_nouns[i] = data

wordcloud = []
for i in total_nouns :
    i = i.split(' ')
    for j in i :
        wordcloud.append(j)

wordcloud_data = dict(Counter(wordcloud))

Naver = np.array(Image.open("파일 경로"))
plt.figure(figsize=(30,30))
wc = WordCloud(        relative_scaling=0.2,mask = Naver,
                       font_path="폰트 경로",
                       background_color="white",
                       min_font_size=1,
                       max_font_size=50,
                       max_words=100,
                       colormap = 'coolwarm'
                     ).generate_from_frequencies(wordcloud_data)
plt.imshow(wc)
plt.axis('off')
plt.show()

 

  • 활용하기

제가 개인적으로 워드클라우드와 다른 시각화를 활용하여 네이버 기사를 분석한 예시입니다.

예시에서 사용한 파이 차트 및 바 차트, 네트워크 분석은 다음 포스팅에서 진행하겠습니다!!

 

한글 데이터로 토픽모델링을 하는 방법이 궁금하신 분들은 아래 링크를 확인해주세요:)

https://yhj9855.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%ED%95%9C%EA%B8%80-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%86%A0%ED%94%BD-%EB%AA%A8%EB%8D%B8%EB%A7%81-%EC%A7%84%ED%96%89%ED%95%98%EA%B8%B0

 

[데이터 분석] 한글 데이터 토픽 모델링 진행하기

안녕하세요! 오늘은 한글 데이터로 토픽 모델링(topic modeling)을 하는 방법에 대해 포스팅 하겠습니다. 한글 데이터는 네이버 뉴스 크롤링 데이터를 사용할 예정입니다. 네이버 뉴스 크롤링 과정

yhj9855.com

 

코드에 대해 궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.

★ 읽어주셔서 감사합니다★

728x90
반응형

+ Recent posts