파이썬 혼자놀기 패키지 유종의 미 3주차 수업

지수민·2021년 9월 20일
0
post-thumbnail

드디어 3주차 마지막 수업입니다!
3주차에는 카카오톡과 같은 채팅창에서 나와 친구들, 가족들, 연인이 주로 사용하는 단어나 어휘, 관심사 등을 알 수 있는 워드클라우드를 만듭니다.

아묻따 코드 투척!

import matplotlib.font_manager as fm
from wordcloud import WordCloud
from PIL import Image
import numpy as np

text = ""
font_path = 'C:/WINDOWS/Fonts/Hancom Gothic Bold.ttf'

# 이용 가능한 폰트 중 '고딕'만 선별 글씨체 선정 과정
for font in fm.fontManager.ttflist:
    if 'Gothic' in font.name:
        print(font.name, font.fname)

with open("kakaotalk3.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines:
        if '] [' in line:
            text+=line.split('] ')[2].replace('넹','').replace('넵','').replace('네','').replace('일단','').replace('우리','').replace('혹시','').replace('그럼','').replace('ㅋ','').replace('나도','').replace('오늘','').replace('사진','').replace('난','').replace('이제','').replace('근데','').replace('보이스톡 해요','').replace('ㅎ','').replace('ㅜ','').replace('ㅠ','').replace('이모티콘\n','').replace('삭제된 메시지입니다.','')

wc = WordCloud(font_path=font_path, background_color="white", width=600, height=400)
wc.generate(text)
wc.to_file("result.png")


mask = np.array(Image.open('cloud.png'))
wc = WordCloud(font_path=font_path, background_color="white", mask=mask)
wc.generate(text)
wc.to_file("result_masked.png")

print(text)

이번 3주차는 사실 코드를 이해하기 보다는 필요할 때 가져다 쓸 수 있는 능력을 키워주는 부분인 것 같아요.
요즘에는 사실 구글링만 잘 해도 원하는 답을 금방 찾을 수 있으니까요!

이것도 정보를 얻는 것과 필요한 정보만을 뽑아내는 과정이 중요하다고 생각해요.
우선 카카오톡에서 주고받은 대화 내용을 메모장으로 저장할 수 있다는 거 아셨나요??
저는 몰랐습니다ㅜ 수업 들으면서 첨 알게 되었어요. pc 카톡에서 원하는 채팅방에 들어가서 상병 계급처럼 생긴 메뉴에 대화 내용 > 대화 내보내기 를 선택하면 저장을 할 수 있답니다.

저장 후 우리가 해야할 것은 뭐다??

필요한 정보만 빼내는 거죠!

with open("kakaotalk3.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines:
        if '] [' in line:
            text+=line.split('] ')[2].replace('넹','')....중략

바로 이부분이 그러한 코드입니다. 저장한 파일의 이름과 권한(읽기, 쓰기, 실행), 인코딩 방식을 써 넣고 메모장에 적힌 것을 읽어오는 작업을 합니다. 그 후, if문과 split, replace 등의 함수로 시간과 사람을 제외한 대화 내용만을 불러오고, 응이나 ㅜㅜ, ㅋㅋ과 같은 필요없는 내용을 날려주면 우리가 원하는 정보만을 얻을 수 있는 거죠!
참고로 split은 문자열을 나누어 주는 함수이고, replace는 특정 문자열을 다른 문자열로 대체해 주는 함수 입니다.

예를 들어 a = '가/나/다/라/마'라는 문자열이 있다고 할때,
split('/')을 사용하게 되면 split[0]은 가, split[1]은 나와 같이 배열로 나뉘게 되는 것이고,
replace('/', '#')을 사용하게 되면 a = '가#나#다#라#마'가 되는 것이죠.
(더 많은 함수들이 있답니다!)

정리한 정보들을 wordcloud 해주면 지정해 준 높이 400에 너비 600의 사각형으로 결과가 나오게 되는데,
좀 더 모양을 다듬으려면

이런 모양을 다운 받아서 높이와 너비를 지정하는 대신

mask = np.array(Image.open('cloud.png'))
wc = WordCloud(font_path=font_path, background_color="white", mask=mask)

이렇게 지정해 주면 구름 형태로 모양이 나온답니다!(달이나 별모양 원하는 모양도 가능합니다!)

짜잔!

이건 alice 모양입니다!

총 3주차 수업으로 이루어진 파이썬 혼자놀기 패키지는 이것으로 마무리 됩니다.
함께 코딩을 해주시며 친절하게 잘 가르쳐 주셔서 좋았습니다.

저는 컴퓨터 프로그래밍 관련 학과에서 재학중이라 이해하는 것에는 크게 문제가 없었지만
이 수업의 취지는 수업에 사용한 코드를 다 이해하라는 것보단
겁내지 않고 차근히 하면 결국 해낼 수 있다는 것을 보여주시는 것 같아서 좋았습니다.

profile
summni

0개의 댓글