1. 워드 클라우드(Word Cloud)란
- 텍스트 분석에서 가장 많이 등장하는 시각화 기법입니다. 자주 등장하는 단어의 빈도를 크기와 색상으로 표현하는 시각화 기법으로 단어의 빈도수가 높을수록 큰 글씨로 표현되며, 데이터의 주요 키워드를 빠르게 파악할 수 있습니다.
- 워드 클라우드 활용의 예는 아래와 같습니다.
- 뉴스 기사 분석: 특정 시기나 주제의 핵심 단어 파악
- 소셜 미디어 분석: 트위터, 블로그 등에서 자주 언급되는 키워드 시각화
- 고객 리뷰 분석: 제품 리뷰에서 자주 등장하는 단어 확인
2. 워드 클라우드를 위한 주요 라이브러리
| 라이브러리 | 주요기능 |
| wordcloud | 텍스트 데이터를 워드 클라우드 형태로 시각화 |
| konlpy | 한국어 자연어 처리(형태소 분석, 명사 추출 등) |
| re | 정규 표현식 활용(텍스트 전처리) |
| collections | Counter, defaultdic 등 다양한 자료구조를 제공 |
(1) wordcloud 라이브러리
- 자주 등장하는 단어일수록 크기가 크게 표시되며, 텍스트 데이터의 핵심 키워드를 쉽게 시각화할 수 있는 모듈 임
- 주요 기능
- 텍스트 데이터에서 단어 빈도수를 계산하여 워드 클라우드를 생성
- 특정 단어를 제외하는 불용어(stopwords) 설정 가능
- 한글 폰트 설정 가능(기본적으로 영어 폰트만 지원)
- 다양한 모양과 색상 적용 가능
- 기본 사용법
| pip install wordcloud #라이브러리 설치 |
박노해 시인의 "다시"라는 시를 파이썬으로 wordcloud 프로그램을 작성해 보도록 하겠습니다.
| from wordcloud import WordCloud import matplotlib.pyplot as plt text = """희망찬 사람은 그 자신이 희망이다. 길 찾는 사람은 그 자신이 새 길이다. 참 좋은 사람은 그 자신이 이미 좋은 세상이다. 사람 속에 들어있다. 사람에서 시작된다. 다시, 사람이 희망이다.""" #박노해 시인의 다시라는 # 워드 클라우드 생성 wordcloud = WordCloud(font_path="malgun.ttf", background_color="white").generate(text) #malgun.ttf는 한글 폰트입니다. # 시각화 plt.figure(figsize=(8, 6)) plt.imshow(wordcloud, interpolation="spline16") plt.axis("off") plt.show() |

(2) konlpy 라이브러리
- 한국어 형태소 분석을 지원하는 자연어 처리 라이브러리 입니다.
- 주요 기능
- 형태소 분석 (명사, 동사, 형용사 등)
- 품사 태깅 (POS Tagging)
- 불용어 제거
- 한국어 텍스트 전처리에 유용
- 기본 사용법
| pip install konlpy #라이브러리 설치 |
박노해 시인의 "다시"라는 시를 파이썬으로 형태소 분석을 하여 명사면 출력하는 프로그램을 작합니다.
| from konlpy.tag import Okt okt = Okt() text = text = """희망찬 사람은 그 자신이 희망이다. 길 찾는 사람은 그 자신이 새 길이다. 참 좋은 사람은 그 자신이 이미 좋은 세상이다. 사람 속에 들어있다. 사람에서 시작된다. 다시, 사람이 희망이다.""" # 형태소 분석 tokens = okt.morphs(text) print(tokens) # 형태소 분석한 결과를 출력함 # 명사 추출 nouns = okt.nouns(text) print(nouns) # 명사만 추출한 결과를 출력함 |
- 결과

(3) re 라이브러리
- re는 파이썬의 정규 표현식 (Regular Expression, Regex) 처리를 위한 내장 라이브러리입니다.
- 주요 기능
- 텍스트에서 특정 패턴 찾기
- 특정 문자/단어 제거
- 문자열 치환 및 분리
- 정규 표현식 활용 예제
| 패턴 | 설명 |
| \d+ | 숫자(0-9) 찾기 |
| \w+ | 문자(알파벳, 숫자 등) 찾기 |
| \s+ | 공백(스페이스, 탭, 줄바꿈) 찾기 |
| [\^가-힝] | 한글이 아니 문자 제거 |
| [^\w\s가-힣]" | 특수문자 제거 |
| (.)\1{2,} | 같은 문자 반복 시 2개만 남기기(ㅋㅋㅋㅋㅋ -> ㅋㅋ) |
| import re def clean_korean_text(text): text = text.lower() # 소문자 변환 (필요한 경우) text = re.sub(r"https?://\S+|www\.\S+", "", text) # URL 제거 text = re.sub(r"[^\w\s가-힣]", " ", text) # 특수 문자 제거 (한글, 숫자, 영어만 남기기) text = re.sub(r"\d+", "", text) # 숫자 제거 text = re.sub(r"[a-zA-Z]+", "", text) # 영어 제거 text = re.sub(r"\s+", " ", text) # 여러 개의 공백을 하나로 변환 text = re.sub(r"(.)\1{2,}", r"\1\1", text) # 같은 문자 반복 시 2개만 남기기 (ㅋㅋㅋㅋ → ㅋㅋ) return text.strip() # 앞뒤 공백 제거 text = """ 안녕하세요!! 😊😊 저는 Python과 AI를 공부하는 학생입니다. 요즘 ㅋㅋ 너무 바빠서 ㅠㅠㅠㅠ 공부를 못하고 있어요... ㅠㅠ 제 블로그: https://example.com 에 방문해주세요! 100% 추천합니다!!! """ # 전처리 적용 clean_text = clean_korean_text(text) print(clean_text) #데이터 전처리한 결과를 출력합니다. |
- 결과

(4) collections 라이브러리
- 파이썬의 내장 라이브러리, 데이터를 효율적으로 다룰 수 있는 다양한 컨테이너 자료형을 제공합니다.
- 주요 기능
- 텍스트에서 특정 패턴 찾기
- 특정 문자/단어 제거
- 문자열 치환 및 분리
- 프로그램 작성
| rom collections import Counter text = ["사과", "바나나", "사과", "포도", "바나나", "사과"] word_count = Counter(text) print(word_count) # Counter({'사과': 3, '바나나': 2, '포도': 1}) # 가장 많이 등장한 단어 2개 출력 print(word_count.most_common(2)) # [('사과', 3), ('바나나', 2)] |
- 결과

3. 텍스트 분석
- 텍스트 마이닝에 많이 사용되는 라이브러리에 대한 내용을 언급하였습니다. 위의 모듈을 활용하여 워드클라우드로 "윤석열 헌법재판소 최후변론 전문"을 워드클라우드로 시각화하고자 합니다. 주석을 참조하여 코드를 작성해 보세요.
| import pandas as pd import re from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt from konlpy.tag import Okt # 데이터 불러오기 df = pd.read_csv("윤석열최후변론전문.txt", sep='\t', header=None).dropna() # 텍스트 전처리 함수 def clean_text(text): text = re.sub(r"[^\w\s가-힣]", " ", text) # 특수 문자 제거 (한글, 숫자, 영어만 남기기) text = re.sub(r"\d+", "", text) # 숫자 제거 text = re.sub(r"[a-zA-Z]+", "", text) # 영어 제거 text = re.sub(r"\s+", " ", text) # 여러 개의 공백을 하나로 변환 text = re.sub(r"(.)\1{2,}", r"\1\1", text) # 같은 문자 반복 시 2개만 남기기 (ㅋㅋㅋㅋ → ㅋㅋ) return text.strip() # 앞뒤 공백 제거 df[0] = df[0].apply(clean_text) # 형태소 분석 및 명사 추출 okt = Okt() nouns = [] for doc in df[0]: nouns.extend(okt.nouns(doc)) # 문장에서 명사 추출 # 단어 빈도수 계산 word_counts = Counter(nouns) word_dict = dict(word_counts.most_common(30)) # 상위 100개 단어만 사용 # 워드 클라우드 생성 wordcloud = WordCloud( font_path="malgun.ttf", # 한글 폰트 설정 (Mac: "AppleGothic", Windows: "malgun.ttf") background_color="white", width=800, height=600 ).generate_from_frequencies(word_dict) # 워드 클라우드 출력 plt.figure(figsize=(10, 6)) plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") plt.show() |
워드클라우드로 시각화 한 내용입니다. 많이 언급한 단어의 빈도는 표시되지만 그외 분석은 하지 않았습니다. 향후 감성분석 등 다양한 분석을 해 볼 필요가 있습니다.

'데이터분석 > Text Mining' 카테고리의 다른 글
| 텍스트 마이닝과 워드 클라우드 (1) | 2025.03.09 |
|---|