본문 바로가기

카테고리 없음

첫 미니 프로젝트 돌아보기 - MBTI 유형별 인터넷 카페 게시글 제목 비교

파이썬과 크롤링, MySQL을 배우고 첫 번째 프로젝트 과제가 주어졌다. 주제는 정해줄 줄 알았는데 자유 주제였고 시간도 주말을 제외하면 하루밖에 주어지지 않아 품질보다는 속도에 촛점을 맞추기로 했다. 크롤링과 데이터 전처리에 예상보다 시간이 오래 걸려 정작 중요한 분석에 힘을 쏟지 못했다. 또한 텍스트 분석 방법을 몰라 워드클라우드를 만드는 데 만족해야 했다. 처음으로 배운 걸 실제에 써보며 에러 메시지에 지속적으로 노출되고 대응 방법을 찾는 경험을 했다. 혼자 할 때보다 팀으로 할 때 더 신속하게 해낼 수 있음을 체험했다.

 

 

1. 프로젝트 제목: MBTI로 보는 나의 분석 ⇒ 'MBTI 유형별 인터넷 카페 게시글 특징 분석'으로 바꾸는 게 좋을 듯하다.

2. 팀원: 4명

3. 주제 선정: 모두들 한 시간 가량 이것저것 생각나는 소재를 말했지만 전체의 흥미를 끌지 못했다. 막판에 한 팀원이 제안한 MBTI가 재미있을 것 같다고 동의해 주제로 정했다. 구체적으로 무엇을 어떻게 분석할 것인지는 각자 구할 수 있는 데이터를 찾으며 다음 날까지 생각해보자고 했다.

4. 기간: 2022년 5월 12일 목요일 오후 4시 - 5월 13일 오후 8시 경.

5. 진행 기준: 시간이 그다지 많지 않고 배운 것을 연습하는 계기로 삼아 품질보다는 속도에 촛점을 맞추었다. 카톡방을 만들어 아이디어가 떠오르면 바로 공유하고 부딪힌 문제를 해결하면 팀원에게 전달해 빠르게 진행되도록 했다.

 

6. 데이터 선정

  1. 네이버 MBTI &HEALTH 심리 카페를 찾았다. 이곳은 회원들이 아이디에 자신의 유형을 포함하도록 권장하고 있다.
  2. 게시된 글 작성자에 MBTI유형이 포함되어 있어 유형 별 특성을 분석할 수 있을 것 같았다.
    더구나 유형별 게시판이 있어 게시글을 크롤링해 분석하면 유형별로 차이가 나는지 여부를 알 수 있을 것 같다고 팀원에게 제안했고 모두들 좋다고 했다.

7. 데이터 크롤링

  1. 유형별 게시판에서  2022년 이후 쓴 게시글의 제목을 크롤링했다. 본문까지 크롤링해 분석하기에는 시간과 역량이 부족했다.
  2. 8개 게시판에서 올해 글만 가져오기 위해 게시판마다 120페이지 정도를 크롤링했다. [제목, 글쓴이, 날짜]를 리스트에 담은 뒤 판다스 데이터프레임으로 변환하고 판다스 함수를 이용해 csv 파일로 저장했다.
  3. 부딪힌 문제와 대응
    1. 한 게시판에서 잘 작동한 코드가 다른 게시판에서 작동하지 않았다. ⇒ 선생님이 오타를 찾아 주셔서 해결했다.
    2. 8개 게시판 주소를 보니 숫자가 +1씩 증가했다. for문을 활용해 한 번에 끝내고 싶었으나 방법을 몰라 코드를 복사해 일일히 숫자를 고쳐 크롤링했다. 지금 생각해 보니 3차원 리스트를 만들면 될 것 같다. 

 

8. 데이터 전처리 : 크롤링한 데이터(아래 왼쪽 테이블)를 오른쪽 테이블로 만들었다.

  1. 게시판 별로 크롤링한 데이터를 하나로 합치기
  2. 글쓴이 컬럼에서 MBTI 유형만 뽑아 게시글 제목을 유형별로 분류
  3. 프로젝트 공지사항에 MySQL로 저장하라는 조건이 있어 데이터베이스에 저장
  4. 워드 클라우드를 만들기 위해 MBTI 유형별로 게시글 제목을 데이터베이스에서 불러와 유형별로 게시글 제목을 하나의 문자열로 합침
  5. 부딪힌 문제와 대응
    1. 글쓴이 아이디에 영문 대소문자, 한글, 숫자 등이 뒤섞여 있고, 두 개의 유형을 모두 쓴 경우도 있었다. 
      • 판다스의 df.str.contains() 함수를 이용해 유형별로 분류
      • 기존의 '글쓴이' 컬럼 대신 'mtype' 컬럼을 추가하여 유형 입력
    2. 동적으로 변수를 생성하는 방법을 몰라 16개 유형별로 16번 작업을 함 ⇒ 16개의 데이터프레임 만듦
    3. 16개의 데이터프레임을 pd.concate() 함수로 합친 뒤 MySQL에 올렸다. 그런데 게시글 제목에 간간히 이모티콘이 포함되어 제대로 작동하지 않았다.
      1. 데이터프레임을 csv 파일로 저장한 뒤 vscode로 열어 이모티콘을 하나하나 찾아 모두 지운 뒤 다시 MySQL에 올렸으나 문제가 해결되지 않았다.
      2. sqlalchemy로 MySQL에 올리니 문제가 사라졌다.

아! 번거로운 단순 반복 작업. 경고 메시지가 떴지만 무시하고 넘어감

9. 분석

  1. SQL 명령어를 사용해 2022년 이후 MBTI 유형별 게시글 개수를 확인했다.
    1. 유형별로 게시글 개수가 꽤 차이가 났다. 통계검정으로 유의미한 차이가 있는지 확인하고 특성과 어떤 관련이 있는지 분석해 보면 재미있을 것 같다.
  2. 유형별로 자주 나오는 단어를 활용해 워드클라우드를 만들었다.
    1. 공통적으로 등장하는 단어가 '남자'인 걸 보니 게시판 이용자 상당수가 여성인 것 같다. 
    2. 게시글 제목만 크롤링한 데서 오는 한계가 뚜렷했다. 유형별 차이가 잘 보이지 않고 단어가 한정적이다. 글 본문을 가져오면 차이가 나지 않을까?
    3. 워드클라우드 만들 때 제외할 단어를 잘 선정해야 의미 없는 단어가 표시되는 걸 막을 수 있다. 빈도 분석을 할 줄 알아야 가능할 것 같다.

10. 팀 프로젝트에 내가 기여한 점

  1. 팀원이 제안한 주제를 구현할 방법을 제안했고, 칠판에 전체 과정을 정리해 시간 낭비 없이 체계적으로 진행되도록 이끌었다.
  2. 데이터 구할 곳을 찾아 크롤링 한 뒤 전처리해서 팀원에게 주었고, 시각화를 맡은 팀원이 워드크라우드를 만들 때 부딪힌 문제를 함께 해결했다.
  3. 발표자료를 만들 때 적절한 문구 선택을 도왔다.

11. 팀원들이 기여한 점

  1. 각자 자신이 해야 할 일을 찾아 했다. 부지런히 데이터 처리 방법을 찾고, 발표자료를 만드는 등 무임승차하지 않으려고 애쓰는 모습이 역력했다.
  2. 특히 주제를 제안한 팀원은 해야 할 일이 구체화되자 빠른 속도로 결과를 만들어냈고 다른 팀원이 못한 부분도 가져다 처리했다.

12. 개선할 점 및 차후 과제

  1. 데이터 전처리를 할 때 두 개 유형을 아이디에 모두 사용한 경우는 처리 시간이 모자라 먼저 검색된 유형에 포함시켰다. 이런 경우가 얼마나 되는지 계산한 뒤 삭제할지 여부를 결정해야 했었다.
  2. 필요한 데이터를 찾아와서 원하는 형태로 가공하는 게 쉽지 않다는 걸 절감했다. 어떤 데이터가 어디에 있는지 자료를 모으고, 이를 원하는 형태로 가공할 수 있는 코딩 실력을 키워야 한다.
  3. 특정 주제에 관한 게시글을 크롤링 한 뒤 MBTI 유형별로 특징이 나타나는지 검증해보면 MBTI가 쓸모 있는 도구인지 그저 심심풀이 오락용인지 확인할 수 있을 것 같다.