[22-여] 데이터사이언스학과 전공 기부단

2022. 12. 28. 22:57교내활동/학교 관련 활동

반응형

이번 여름방학에는 학교에서 진행하는 전공기부단 활동에 참여했다.

내가 간 학교는 순서대로 서울의 정의여고, 이천의 양정여고, 태안의 태안여고 이렇게 세 곳을 갔다.

 

일단 우리과에서 한 것은 자연어 처리와 시각화를 간단하게 실습하는 시간을 가졌고, 전공체험을 하는 시간이 길지 않다보니 우리가 코드를 제공하기로 하였다. 그리고 응용프로그램 설치 없이 웹상에서 쉽게 돌려볼 수 있도록 코랩을 이용하기로 결정했다.

 

처음에 코드를 작성할 때 PC카톡의 txt 파일과 Mobile 카톡의 txt 파일이 형태가 같은 줄 알았는데... 정의여고에서 전공체험을 진행하다가 이 둘이 형태가 다름을 알게 되었다... 우린 PC 기준으로 코드짰는데... 그래서 실습을 제대로 진행하지 못하고, 거의 보기만 하고 끝났다.. 미안하다 얘들아...

 

급하게 Mobile 버전을 만드는데 머리가 안돌아가는거임;; 그래서 다른분이 만드신거 가지고와서 사용했다..

늘 느끼는거지만 코드짜는건 어려워.

 

그리고 양정여고 이후로부터는 딱히 오류 없이 잘 지나갔다. 다만 코랩 자체가 문제가 생기는 경우를 제외하곤..

코랩 자체의 문제가 발생한 경우에는 노트북을 바꿔서 이용하거나 다른 계정을 이용해봤다. 다른 계정을 이용했을 때 더 잘 돌아가더라..

 

그리고 또 문제는 교내 와이파이가 없는 경우 혹은 와이파이 이용이 불가했던 경우가 있었다. 이는 바로 정의여고였다. 당연히 교실마다 와이파이가 있고 이용이 가능할줄 알았으나.. 이용이 불가했고 데이터가 무제한이셨던 선생님께서 핫스팟을 틀어주셔 이를 이용하였다. 또한 휴대폰을 거둬가는 학교였다. 내가 졸업한 고등학교의 경우 휴대폰을 거둬가지 않았던지라 전혀 생각지도 못했었다.

 

이번에 경험해봤으니.. 내년엔 뭐 잘 할 수 있지 않을까? 내년에도 뽑으신다면 지원하겠습니다.

그리고 이 기회를 통해 이번 겨울방학때는 교수님이 진행하시는 SW 교육에 보조쌤으로 따라가게 되었다. 전공기부단 담당 선생님께서 연락을 주신 덕에.. 이렇게 또 기회가 생겨 놓치지 않았고, 이에 대한 후기는 다음주에 작성할 예정슨.

 

아래는 내가 직접 작성했던 PC 카톡기준 코드이다. Mobile 버전의 경우에는 내가 직접 짠 것이 아니라 그냥 안올리려고 한다. 부족한 점이 많은 코드이니 피드백을 주셔도 좋고, 칭찬도 좋고..

# google drive 연동 코드
from google.colab import drive
drive.mount('/content/gdrive', force_remount=True)

# 폴더 이동
import os
ROOT = '/content/gdrive/MyDrive'  # 변경하지 마세요. 단, MyDrive가 오류난다면, My\ Drive로 적으세요.
DIR = '전공기부단'  # 데이터가 있는 위치를 적으세요.

PATH = os.path.join(ROOT, DIR)
os.chdir(PATH)
print(f"현재 경로: {PATH}")

# KoNLPy 설치 : 코랩에 설치되어있지 않아 설치 과정을 거쳐야 함
!apt-get install g++ openjdk-7-jdk
!apt-get install python-dev; pip install konlpy
!apt-get install python3-dev; pip3 install konlpy

# 필요한 패키지 불러오기
import pandas as pd
import numpy as np
from konlpy.tag import Okt
import re

# 사용할 .txt 파일 읽어오기
f = open("전공기부단_톡방.txt","r", encoding="utf-8")  # .txt 파일이 들어간 곳에는 본인의 파일 명을 넣으면 됨
txt = f.readlines()
f.close()

# 텍스트 전처리
## 필요없는 열을 삭제하고, 보낸 사람, 시간, 채팅 내용을 분리하는 간단한 전처리 코드

# 쪼개서 넣어줄 빈 리스트들
date_info = []
sender_info = []
time_info = []
content = []

for i in txt:
  if i.startswith('---------------'):  # 날짜 구분
    date_info.append(i[16:32].replace(' ', ''))
  elif '] [' in i:
    sender_info.append(i.split(']')[0].replace('[', ''))
    time_info.append(i.split(']')[1].replace('[', '').replace(' ', ''))
    content.append(i.split(']')[2].replace('\n', '').replace(' ', '').replace('사진', ''))
  else:
    continue

print(date_info, sender_info, time_info, content)

print(date_info, 
      sender_info, 
      time_info, 
      content)
      
# '나'가 보낸 텍스트 추출하기
# 보낸사람, 내용 데이터 프레임 만들어준 후 두 데이터 프레임을 병합
sender_df = pd.DataFrame(sender_info, columns=['보낸사람'], index=range(len(sender_info)))
content_df = pd.DataFrame(content, columns=['내용'], index=range(len(content)))

katalk_df = pd.merge(sender_df, content_df, how='outer', left_index=True, right_index=True)
katalk_df_mine = katalk_df[katalk_df['보낸사람']=='본인카톡이름']  # 내가 보낸 것만 추출
katalk_list_mine = list(katalk_df_mine['내용'])  # 리스트 변환

# 초-중성만 작성된 텍스트 제거, 특수문자 등 제거
katalk_list_mine_pre = []  # 전처리 후 다시 넣어줄 빈 리스트

def clean_data(text):
  text = re.sub('([ㄱ-ㅎㅏ-ㅣ])+', '', text)
  text = re.sub('[^\\w\\s]', '', text)
  text = re.sub('[𐨛𐨛𐌅ࠅヲ]', 'ㅋㅋ', text)
  text = re.sub('ㅋ⫬', 'ㅋㅋ', text)
  text = re.sub('(([ㅋㅋ])\\2{1,})', 'ㅋㅋ', text)

  return text

for i in katalk_list_mine:
  katalk_list_mine_pre.append(clean_data(i))
print(katalk_list_mine_pre)
  
# 텍스트 토큰화 및 저장
# 토큰화

okt= Okt()
morph_list = []
for i in katalk_list_mine:
    morphs = okt.morphs(i)
    for morph in morphs:
        morph_list.append(morph)
        
# 토큰화한 리스트를 txt파일로 작성 후 저장
for i in morph_list:
    f = open('morph.txt', 'a', encoding='utf8')
    f.write(i+'\t')
    f.close()

그리고 최종적으로 https://worditout.com/word-cloud/create

 

Create word clouds – WordItOut

Table as text Copy and paste from a spreadsheet or manually enter your own. Separate columns with a tab, comma, colon or a space (see examples).

worditout.com

이 사이트를 이용해 저장된 텍스트파일의 텍스트를 복붙하여 워드클라우드를 만들었다.

워드클라우드 코드짜기 쉽던데 왜 안짰지...?

어쩌면 귀찮음이 컸을지도 모른다..

 

 

반응형