본문 바로가기
Scraping

[파이썬 패키지 wordcloud] 우리 카톡엔 무슨 단어가 가장 많을까??

by 돈민찌 2021. 9. 12.
반응형

네...? 지금 새벽 두시인데요..? 500명이 수강 중인 스파르타 핫해핫해

파이썬을 기본적으로 조금 다뤄본 사람이라면 파일을 불러와서 한줄씩 화면에 띄우는 것은 할 수 있으리라 믿고 글을 쓴당.  기본 형식은 다음과 같다.

방법A

f = open("./sample.txt", mode="r", encoding="utf8", newline="")
for line in f.readlines():
	print(line)


방법B

with open("./sample.txt", mode="r", encoding="utf8", newline="") as f:
	for line in f.readlines():
    	print(line)

두가지 방법엔 큰 차이는 없고, 위의 A 방법으로 파일을 불러와서 뭔가를 실행하고 나면 close()를 따로 마지막에 해줘야 한다. 이렇게 하지 않아서 큰 문제가 된 적은 없었는데, 셀레니움 코드 한참 짜다가 컴퓨터 느려져서 작업관리자 보면 크롬드라이버 안 꺼진거 몇십개 나올때처럼, 뭔가 프로세스가 종료되지 못하고 쌓이는 것으로 추정된다. 알아보고 싶은데 귀찮다. 

어떤 모듈들은 바로 저장하려는 파일 위치를 입력하고 저장 메소드를 실행하면 알아서 파일객체를 열어서 들어가던데, json 모듈이나 csv 모듈, 그리고 txt 파일을 쓰고 지울 때에는 이렇게 파일을 열어주고 뭔가를 꺼내고, 파일을 또 열어서 저장해주고 닫아야한다. 쪼끔 번거롭지만 with 키워드를 사용하면 대충 해결되니까 불만없긔

우선 이 코드를 하려면 wordcloud라는 모듈(라이브러리)를 pip3로 받아야한다. 체감 시간으로 라이브러리의 크기를 따지자면.. 음 그렇게 작지는 않은 모듈인듯..? 사용방법이 아주 간단한 편이니까 따로 docs를 들여다 볼 일은 없을 것 같다.

우선 wordcloud 모듈은 단어 단위로 문장을 분해해서, 모든 단어들의 출현 빈도를 시각적으로 표현해주는 로직을 가지고 있다. 그래서 사실 어떤 방식으로든 수집한 문장을 입력해주기만 하면 wordcloud를 만들어주니까 카톡 자주 쓰는 말 구하는 것 말고도 쓸 수 있는 곳이 많을 것 같다!! 내가 좋아하는 소설작가가 자주 쓰는 단어 그런 것도 가능한 거잖아 재미있을듯..

wordcloud 모듈 사용법!

font_path = "C:/Users/user/AppData/Local/Microsoft/Windows/Fonts/NotoSansKR-Bold.otf"

// font_path는 실제 사용하고자 하는 폰트의 로컬 위치를 입력해주면 된다!! 
// 보통 위에처럼 Windows 안에 Fonts 모듈 안에 위치해 있는 것 같다. 제어판을 통해서도 접근 가능!

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

// 이게 끝이예욤.

WordCloud 객체를 만드는 파라미터는 단순한 편이다. Matplotlib을 쓰는 느낌 같다.

특정 로컬 폰트를 사용하고자 하는 경우 font_path를 사용자의 Fonts 파일 내의 특정 ttf/otf 파일로 지정해주고,
background_color와 width, height를 지정해 베이스 그래프를 준비하고 단어들을 그 위에 흩뿌려준다.
width, height는 역시 픽셀 단위이다.

아규먼트들은 실제로는 더 많다.

def __init__(self,
             font_path: str = None,
             width: Any = 400,
             height: Any = 200,
             margin: int = 2,
             ranks_only: Any = None,
             prefer_horizontal: Any = .9,
             mask: Any = None,
             scale: Any = 1,
             color_func: Any = None,
             max_words: Any = 200,
             min_font_size: Any = 4,
             stopwords: Optional[set] = None,
             random_state: Any = None,
             background_color: Any = 'black',
             max_font_size: Any = None,
             font_step: Any = 1,
             mode: Any = "RGB",
             relative_scaling: Any = 'auto',
             regexp: Any = None,
             collocations: Any = True,
             colormap: Any = None,
             normalize_plurals: Any = True,
             contour_width: Any = 0,
             contour_color: Any = 'black',
             repeat: Any = False,
             include_numbers: Any = False,
             min_word_length: Any = 0,
             collocation_threshold: Any = 30) -> Any
             
http://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html#wordcloud.WordCloud
  1. font_path: 문자열 형태로 폰트파일(ttf/otf)이 위치한 경로를 상대/절대 경로로 입력한다.
  2. width: (default=400) 캔버스의 너비!
  3. height: (default=200) 캔버스의 높이!
  4. prefer_horizontal (default=0.90): 수평 비율? 수평으로 입력되는 단어들과 수직으로 입력되는 단어의 비율로 보임.
  5. mask: 2차원 배열 형식의 자료 타입 구조 입력. 마스크를 입력하면 width와 height는 무시된다고 한다.
  6. contour_width: (default=0) 마스크 입력 시에 컨투어 폭
  7. contour_color: color value (default=”black”) 마스크 입력 시에 컨투어 색상
  8. scalefloat (default=1) 실제 계산된 값과 캔버스에 그려지는 값의 스케일 비율
  9. min_font_size (default=4) 출력되는 단어들 중 가장 작은 단어의 크기 제한
  10. font_step (default=1) 빈도 수 별로 나눠지는 단어들 크기의 변화 정도 차이, 디폴트 값인 1이 제일 좋을 듯.
  11. max_words (default=200): 최대로 출력되는 단어의 수
  12. stopwords: 표시하지 않을 단어들 셋. 아마도 기본 값으로 너무 자주 쓰이는 일부 영어단어들이 셋트 자료형으로 들어있는 것 같다.
  13. background_color (default=”black”): 배경색
  14. max_font_size (default=None) 출력되는 단어들 중 가장 큰 단어(자주 나오는 단어)의 크기 제한
  15. modestring (default=”RGB”) 배경색 값을 None으로 입력하고 이 인수를 "RGBA"로 입력하면 이미지의 배경색이 검은색이 아니라 투명해지나봄
  16. relative_scaling (default=’auto’): 'auto'로 해두면 0.5 정도의 기본값을 가지는, 글꼴 크기와 실제 단어의 빈도 중요도. 1인 경우 두배로 자주 나오는 단어는 두배로 크게 출력.
  17. regexp (optional) 정규표현식 r"\w[\w']+"이 기본값. 단어들을 분리하는 기준이 되는 정규표현식
  18. colormap, default=”viridis”, matplotlib을 베이스로 만들어진 모듈이라 matplotlib의 컬러맵을 입력가능
  19. normalize_plurals, default=True 영어 단어에서 복수를 뜻하는 명사들을 표준화시켜줄지의 여부
  20. repeat, default=False max-words(디폴트 200) 또는 min_font_size(디폴트 4)에 도달할 때까지 단어를 쪼개어도 좋을지 여부.
  21. include_numbers, default=False 숫자를 단어로 포함할 것인지
  22. min_word_length default=0 단어의 최소 문자 수 (기본 값은 0). 예를 들어 2일 경우 두 글자 이상만 단어로 인정

이런 마스크 이미지를 넘파이 2차원 배열로 변환해 mask 값에 넣어 사용할 수 있다.
개발자 단톡방ㅎㅎ 딱히 특징적으로 눈에 띄는게 없네..! 다른것들도 해봤는데 너무 개인적이라 이걸로 공개!!ㅎㅎ
wordcloud 공식 문서에서 만들어낸 이미지.... 와 진짜 개멋있어... 내 구름은 작고 귀여운 편..

반응형

댓글