워드클라우드 - 설치준비
< 한글 형태소 분석 라이브러리 : KoNLPY >
🐤 Java 기반으로 만들어진 라이브러리로 JDK 설치 및 환경 설정
- 환경변수 등록 (파일탐색기>내 pc 마우스 우클릭 > 속성 > 고급시스템설정 > 환경 변수 )
* JAVA_HOME : 경로 - JDK설치 폴더까지
* Path 수정 후 두개 추가 : %JAVA_HOME%, %JAVA_HOME%\bin
- PC 재부팅 후 설정 확인 : command창 open 후 -> java, javac 입력 후 help 내용 나오면 성공



🐤라이브러리 설치
- nltk 설치 : 영어 형태소 분석 라이브러리(KoNLPY의 상위 라이브러리)
* pip install nltk

- nltk 플러그인 추가 설치(다운로드 설치 방식)
→ 플러그인은 최초 한번 설치하면, 추후 다른 가상환경에서도 적용됨
→ 다른 가상환경에서는 pip install nltk 라이브러리만 설치하면 됨
> python
> import nltk
> nltk.download()
> NLTK 창이 Open됨
> All Packages 탭 선택 > punkt 더블클릭, stopwords 더블클릭
※ 마우스로 움직이지 말고 키보드로 위아래 움직이기
> exit()




- 워드클라우드 라이브러리 설치
> pip install wordcloud

- konlpy 설치 전에 파이썬에서 JAVA 라이브러리 인식을 위한 라이브러리 설치( JPype1 )
> pip install JPype1 (끝에는 숫자 1)
> pip install konlpy

- jvm.py 파일 내에 별표시(*) 삭제하기
* 위치 : C:\Users\user\anaconda3\envs\gj_env_01\Lib\site-packages\konlpy\
* 메모장으로 jvm.py 열기
* folder_suffix[] 리스트 내에 별(*) 표시 찾아서 삭제 > 저장 > 닫기


영화 긍정/부정 리뷰데이터 빈도분석 및 워드클라우드 시각화
🐤 라이브러리 정의하기
import pandas as pd
🐤 데이터 읽어들이기
file_path = "./data/df_new.csv"
df_org = pd.read_csv(file_path)
df_org

🐤 긍정 및 부정에 대해서만 각각 데이터 필터링하기
- 긍정 데이터프레임 변수명 : pos_reviews
pos_reviews = df_org[df_org["label"] == 1]
pos_reviews

- 부정 데이터프레임 변수명 : neg_reviews
neg_reviews = df_org[df_org["label"] == 0]
neg_reviews

🐤 리뷰데이터 전처리
- 정규표현식 라이브러리 활용
import re
- 리뷰에서 한글 이외 모두 제거 처리하기
* sub(r"패턴", " ", 변수명) : 변수에서 패턴에 해당하지 않는 모든것을 두번째것으로 바꿔라(한칸 띄어쓰기)
pos_reviews.loc[ : , "comment"] = [re.sub( r"[^ㄱ-ㅣ가-힣+]", " ", data) for data in pos_reviews["comment"]]
pos_reviews

neg_reviews.loc[ : , "comment"] = [re.sub( r"[^ㄱ-ㅣ가-힣+]", " ", data) for data in neg_reviews["comment"]]
neg_reviews

긍정 및 부정 리뷰 형태소 추출하기
🐤 형태소 분석 라이브러리
- jpype : java 라이브러리를 python에서 사용할 수 있도록 도와주는 라이브러리
- konlpy는 java로 만들어진 라이브러리
import jpype
🐤 한국어 형태소 분석 라이브러리
- Okt(Open Korean Text) : 대표적 한글 형태소 분석기
from konlpy.tag import Okt
- 형태소 분석기 객체 생성하기
okt = Okt()
okt
- 긍정 리뷰 데이터에서 → 명사 추출하기( okt.nouns() )
pos_comment_nouns = []
for cmt in pos_reviews["comment"]:
pos_comment_nouns.extend(okt.nouns(cmt))
print(pos_comment_nouns)

- 부정 리뷰 데이터에서 → 명사 추출하기( okt.nouns() )
neg_comment_nouns = []
for cmt in neg_reviews["comment"]:
neg_comment_nouns.extend(okt.nouns(cmt))
print(neg_comment_nouns)

🐤 긍정 및 부정 리뷰 데이터에서 1글자는 모두 제외 시키기
- 긍정 리뷰 데이터에서 1글자 모두 제외하기
pos_comment_nouns2 = [ w for w in pos_comment_nouns if len(w) > 1]
print(pos_comment_nouns2)
- 부정 리뷰 데이터에서 1글자 모두 제외하기
neg_comment_nouns2 = [ w for w in neg_comment_nouns if len(w) > 1]
print(neg_comment_nouns2)

🐤 긍정 및 부정 명사들의 빈도 분석
- 리뷰 명사들에 대한 워드카운드 라이브러리 ( Counter )
from collections import Counter
- 긍정 명사 워드카운드 처리
pos_word_count = Counter(pos_comment_nouns2)
pos_word_count

- 부정 명사 워드카운드 처리
neg_word_count = Counter(neg_comment_nouns2)
neg_word_count

🐤 상위 20개 단어만 추출
- Count()에서 지원하는 함수 중에 내림차순 함수 : most_common(20)
; 내림차순 후에 상위 20개 추출
- 1번 방법
pos_top_20 = {}
for k, v in pos_word_count.most_common(20):
pos_top_20[k] = v
print(pos_top_20)
- 2번 방법
neg_top_20 = { k:v for k,v in neg_word_count.most_common(20) }
print(neg_top_20)

긍정 및 부정 상위 20개 명사에 대한 빈도 시각화
### 시각화 라이브러리
import matplotlib.pyplot as plt
### 폰트 설정 라이브러리
from matplotlib import font_manager, rc
### 폰트 설정
plt.rc("font", family = "Malgun Gothic")
### 마이너스 기호 설정
plt.rcParams["axes.unicode_minus"] = False
### 긍정 리뷰의 단어 상위(20개) 빈도 시각화
### 막대 그래프를 이용한 빈도 시각화
plt.figure(figsize=(10, 5))
### 제목 넣기
plt.title("긍정 리뷰의 단어 상위(20개) 빈도 시각화", fontsize = 17)
### 막대그래프 그리기
for key, value in pos_top_20.items():
# 영화라는 단어는 의미가 없을 것으로 여겨짐, 따라서 제외시키기
if key == "영화":
continue
plt.bar(key, value, color = "pink")
### x축, y축 제목 넣기
plt.xlabel("리뷰 명사")
plt.ylabel("빈도(count)")
### x축 각도 조절
plt.xticks(rotation = 70)
### 그래프 출력
plt.show()

### 부정 리뷰의 단어 상위(20개) 빈도 시각화
### 막대 그래프를 이용한 빈도 시각화
plt.figure(figsize=(10, 5))
### 제목 넣기
plt.title("부정 리뷰의 단어 상위(20개) 빈도 시각화", fontsize = 17)
### 막대그래프 그리기
for key, value in neg_top_20.items():
# 영화라는 단어는 의미가 없을 것으로 여겨짐, 따라서 제외시키기
if key == "영화":
continue
plt.bar(key, value, color = "pink")
### x축, y축 제목 넣기
plt.xlabel("리뷰 명사")
plt.ylabel("빈도(count)")
### x축 각도 조절
plt.xticks(rotation = 70)
### 그래프 출력
plt.show()

긍정 및 부정 리뷰 단어 워드클라우드(wordcloud) 시각화
### 워드클라우드 라이브러리
from wordcloud import WordCloud
- generate_from_frequencies() : 워드클라우드 이미지로 반환해줌
- axis("off") : x y 좌표축 제외시키기
### 긍정 리뷰 단어 워드클라우드 시각화
plt.figure(figsize=(8, 8))
### 그래프 제목
plt.title("[긍정] 리뷰 단어 워드클라우드 시각화")
### 사용할 폰트 파일 지정하기
font_path = "C:/Windows/Fonts/malgunsl.ttf"
wc = WordCloud(
### 폰트 지정
font_path=font_path,
### 배경색 지정
background_color="ivory",
### 그래프 너비
width=800,
### 그래프 높이
height=600
)
### 워드클라우드 그래프에 데이터 넣기
# 긍정 상위 20개 단어만 넣기
# cloud = wc.generate_from_frequencies(pos_top_20)
# 긍정 전체 단어 넣어보기
cloud = wc.generate_from_frequencies(pos_word_count)
### 워드클라우드 이미지 보여주기
plt.imshow(cloud)
### x y 좌표축 제외시키기
plt.axis("off")
### 이미지 저장하기
plt.savefig("./img/긍정_리뷰_단어_워드클라우드_시각화.png")
### 그래프 출력
plt.show()

### 부정 리뷰 단어 워드클라우드 시각화
plt.figure(figsize=(8, 8))
### 그래프 제목
plt.title("[부정] 리뷰 단어 워드클라우드 시각화")
### 사용할 폰트 파일 지정하기
font_path = "c:/windows/fonts/gulim.ttc"
wc = WordCloud(
### 폰트 지정
font_path=font_path,
### 배경색 지정
background_color="black",
### 그래프 너비
width=800,
### 그래프 높이
height=600
)
### 워드클라우드 그래프에 데이터 넣기
# 긍정 상위 20개 단어만 넣기
# cloud = wc.generate_from_frequencies(neg_top_20)
# 긍정 전체 단어 넣어보기
cloud = wc.generate_from_frequencies(neg_word_count)
### 워드클라우드 이미지 보여주기
plt.imshow(cloud)
### x y 좌표축 제외시키기
plt.axis("off")
### 이미지 저장하기
plt.savefig("./img/부정_리뷰_단어_워드클라우드_시각화.png")
### 그래프 출력
plt.show()

'Back-End > 데이터베이스' 카테고리의 다른 글
[DB] 데이터프레임 정리 - 행/열 합치기, 결측치, 중복값, 이상치 처리 (3) | 2023.12.05 |
---|---|
[DB] 데이터 전처리 및 시각화 - 웹크롤링(selenium), 점(분포) 그래프, 원형 그래프 (10) | 2023.12.04 |
[DB] 데이터 수집 - 웹크롤링(selenium) (1) | 2023.12.04 |
[DB] 데이터베이스 실습 - 버스교통카드 데이터 전처리 시각화(히트맵, 막대그래프, 선그래프) (2) | 2023.11.30 |
[DB] 데이터베이스 실습 - 버스교통카드 데이터 수집 가공 (0) | 2023.11.29 |