
오늘은 워드클라우드를 진행했다. 작년에 혼자 인강듣고 진행했던 디즈니 시각화때 보다 내가 많이 발전했다는 게 느껴졌다.
Disney 데이터 시각화 with Google Colab
준비단계 기본적인 분석도구 불러오기 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns 드라이브 마운트를 통한 데이터 불러오기 from google.colab import drive drive.mount('/content/dr
datastory96.tistory.com
어떤 부분에서 느꼈냐면 작년에는 함수,멤버변수, 매개변수, 생성자, 객체 라는 개념이 정확히 잡히지 않은 채 진행하다 보니 그냥 모든게 다 설정값이고 이렇게 해야되는구나 하고 했었던 기억이 있다.
하지만 모든걸 배우고 다시 비슷한 실습을 진행하다보니 느낌이 달랐다.
프로젝트구성
# 코드
# test1.py
# 한글 형태소 분석 테스트 스크립트 1
# Hannanum : KAIST 말뭉치를 이용해 생성된 사전
from konlpy.tag import Hannanum # 클래스만 임포트함
# 레퍼런스변수 = 클래스명(전달할 초기값) => 객체 생성
hannanum = Hannanum()
# 제공되는 메소드 정리 : 레퍼런스.메소드(전달인자)
# hannanum.analyze() : 구(Phrse) 분석
# hannanum.morphs() : 형태소 분석
# hannanum.nouns() : 명사 분석
# hannanum.pos() : 형태소 분석 태깅
# 사용 예시
print('Hannanum 이용 ----------------------------------------------')
text1 = u'롯데마트의 흑마늘 양념 치킨이 논란이 되고 있다' # 문자열 앞에 u가 붙으면 유니코드를 적용하겠다는 뜻
print(hannanum.analyze(text1))
print(hannanum.morphs(text1))
print(hannanum.nouns(text1))
print(hannanum.pos(text1))
# KKma : 세종 말뭉치를 이용해 생성된 사전(꼬꼬마, 서울대에서 만듦)
from konlpy.tag import Kkma # 첫글자 대문자 => 클래스
kkma = Kkma()
# 메소드 정리
# kkma.sentences() : 문장 분석
# kkma.morphs() : 형태소 분석
# kkma.nouns() : 명사 분석
# kkma.pos() : 형태소 분석 태깅
print('Kkma 이용 ----------------------------------------------')
print(kkma.sentences(text1))
print(kkma.morphs(text1))
print(kkma.nouns(text1))
print(kkma.pos(text1))
# Komoran : Java 로 쓰여진 오픈소스 한글 형태소 분석기
from konlpy.tag import Komoran
komoran = Komoran()
# 메소드 정리
# komoran.morphs() : 형태소 분석
# komoran.nouns() : 명사 분석
# komoran.pos() : 형태소 분석 태깅
print('Komoran 이용 ----------------------------------------------')
print(komoran.morphs(text1))
print(komoran.nouns(text1))
print(komoran.pos(text1))
# Twitter (Okt) - 오픈소스 한글 형태소 분석기
from konlpy.tag import Okt
okt = Okt()
# 제공되는 메소드 정리 : 레퍼런스, 메소드(전달인자)
# okt.phrases() : 구(Phrase) 분석
# okt.morphs() : 형태소 분석
# okt.nouns() : 명사 분석
# okt.pos() : 형태소 분석 태깅
print('Okt 이용 ----------------------------------------------')
print(okt.phrases(text1))
print(okt.morphs(text1))
print(okt.nouns(text1))
print(okt.pos(text1))
# stem : 각 단어에서 어간 추출 처리 매개변수
print('Okt method : stem parameter using ---------------------------------')
print(okt.morphs(text1, stem=True))
# test2.py
# konlpy 모듈에서 메서드 매개변수 사용 테스트 : Okt 클래스 사용
from konlpy.tag import Okt # class
from konlpy.utils import read_txt # function
# 형태소 분석 태깅 : pos(), morphs(), nouns() 등에 사용하는 매개변수들
# norm : 형태소를 깔끔하게 만들어 주고, 불필요한 데이터 지움
# stem : 형태소의 원형을 찾아서 반환해 줌
okt = Okt()
# 텍스트 파일 (*.txt) 의 데이터를 읽어와서 분석하기
text = read_txt('./data/sample.txt', u'utf-8')
print('norm=True, stem=True ----------------------------------')
mal_list = okt.pos(text, norm=True, stem=True)
print(mal_list)
mal_list = okt.pos(text, norm=False, stem=False)
print(mal_list)
# test3.py
# 공공데이터포털(https://www.data.go.kr)에서
# csv 파일을 읽어 들이기
# 읽어 들인 데이터에서 가장 많이 사용된 명사 찾기
import codecs
import csv
from konlpy.tag import Okt
okt = Okt()
word_dic = {} # dict()
lines = [] # list()
# 파일변수 = open('파일명.확장자' , '열기모드')
# 파일변수.read() , 파일변수.writer()
# 처리가 완료되면 반드시 파일변수.close()
# csv 파일에서 데이터를 읽어온다 : codecs 모듈 제공 함수 이용
# 파일 입출력이 끝나면 자동 close 처리하려면, with resource 문 사용함
with open('./data/sample2.csv', 'r') as raws:
reader = csv.reader(raws)
for raw in reader:
lines.append(raw) # raw (한 줄의 데이터)를 리스트에 저장함
#print(raw)
# 저장 구조 : [[], [], .....]
for line in lines:
mal_list = okt.pos(' '.join(line)) # '구분자'.join(리스트) => str 타입으로 변환
# print(mal_list)
# 명사들을 수집해서 반복되는 명사를 count 를 진행 처리
for word in mal_list:
#print(word) # (단어, 태그) => (인덱스 0, 인덱스 1)
if word[1] == 'Noun':
# 추출된 단어가 저장되는 사전(dictionary)에 저장되어 있지 않다면, 사전(word_dic)에 추가함
if not word[0] in word_dic:
word_dic[word[0]] = 0 # { 단어 : 0 } 저장
word_dic[word[0]] += 1 # 단어(key)의 카운트를 1증가 처리함
# print(word_dic)
# 단어 빈도수에 대해 내림차순 정렬 처리
word_dic.pop('및')
word_dic.pop('등')
#keys = sorted(word_dic.items(), key= lambda x: x[1], reverse=True)
#print(type(keys))
# 50개까지 정렬 결과 출력
#for word, count in keys[:50]:
# print(f'{word} : {count}', end=', ')
# wordcloud(차트) 만들기
# wordcloud 패키지 설치하고 사용함 => matplotlib 도 자동 설치됨
from wordcloud import WordCloud # class
import matplotlib.pyplot as plt
# wordcloud = WordCloud(font_path='./fonts/malgunbd.ttf', background_color='white', width=1000, height=800)
# wordcloud.generate_from_frequencies(word_dic)
#
# plt.figure(figsize=(10, 10))
# plt.imshow(wordcloud)
# plt.axis('off') # 좌표축 제거
# plt.show()
# wordcloud 모양을 원하는 도형 모양으로 변경하기
from PIL import Image # 이미지 파일 열기용 클래스
import numpy as np # 배열 다루는 모듈
img = Image.open('./images/heart.png') # 이미지 파일 오픈
imgArray = np.array(img)
# print(imgArray.shape, imgArray) # 이미지의 각 픽셀을 수치로 변환함
wordcloud = WordCloud(font_path='./fonts/malgunbd.ttf', background_color='white', width=400, height=400,max_font_size=100, mask=imgArray)
# max_font_size=100 : 빈도수가 가장 큰 글자의 크기 지정
# mask=imgArray : 사용하고자 하는 도형 이미지의 수치 배열
wordcloud.generate_from_frequencies(word_dic)
plt.figure(figsize=(10, 10))
plt.imshow(wordcloud)
plt.axis('off') # 좌표축 제거
plt.show()
데이터는 강사님이 준비해주신 예시 자료로 진행했다.
'국비지원교육 > Python' 카테고리의 다른 글
numpy 정리 (0) | 2024.05.23 |
---|---|
opencv - 외곽선 추출 (0) | 2024.05.14 |
opencv - 2 그리고 사진에서 텍스트 추출 (0) | 2024.05.10 |
ovencv -1 (0) | 2024.05.09 |
Python - 동적크롤링 (0) | 2024.05.08 |