본문 바로가기
Data Projects/mini 데이터 분석 프로젝트

[데이터 분석 스터디] 01 트럼프 대통령 트윗으로 시작하는 데이터 처리

by 천뿌니 2022. 1. 28.
728x90

엘리스에서 제공하는 파이썬 실전 데이터 분석 강의 중

첫 번째 주제인 트럼프 대통령 트윗으로 시작하는 데이터 처리 리뷰 하겠습니다.


1. 주제

첫 번째 프로젝트에서는 트럼프 대통령이 2017년 1월 20일 취임 이후 1년 동안 게시한 2,500여 개의 트윗을 분석해봅니다.

  • 가장 많이 사용한 #해시태그
  • 가장 많이 사용한 키워드
  • 가장 많이 사용한 @멘션
  • 월별 트윗 통계

분석 후, 데이터의 유형에 알맞은 시각화 코드를 살펴봅니다.

  • 막대그래프
  • 단어 구름

 

2. 필자가 해야 하는 것

  1. preprocess_text(text) 함수 구현
  2. analyze_text(words) 함수 구현
  3. filter_by_month(tweet_data, month) 함수 구현

 

3. preprocess_text(text) 세부 구현 사항

- 목적 :  문자열 text를 가공하여 반환

  • 모든 알파벳 대문자를 알파벳 소문자로 변경합니다.
  • 특수문자를 삭제합니다.
  • 가공된 텍스트를 공백을 기준으로 나누어 리스트 형태로 반환합니다.
# 데이터 전처리를 실행합니다. 
def preprocess_text(text):
    text = text.lower() # 소문자로 변형
    # @와 #을 제외한 특수문자로 이루어진 문자열 symbols를 만듭니다.
    symbols = punctuation.replace('@', '').replace('#', '')
    
    for i in symbols: # @와 #을 제외한 특수문자 제거
        text = text.replace(i, "")
    return text.split() 공백을 기준으로 나눠 리스트 형태로 반환

- 실행 예시

print(preprocess_text('We will follow two simple rules: BUY AMERICAN & HIRE AMERICAN!#InaugurationDay #MAGA🇺🇸'))

- 결과

실행 예시 결과

- 해시 탱크인 #과 멘션 태그인 @ 제외한 나머지 특수문자들을 삭제하고, 공백을 기준으로 나눠진 문자열이 소문자로 변환하여 리스트 형태로 저장되어 있는 것을 볼 수 있다.

 

 

4. analyze_text(words) 세부 구현 사항

- 목적 :  공백으로 나눠진 문자열 리스트를 조건에 맞게 처리

  • 각각의 원소는 모두 keywords리스트에 저장하되, 단어가 @나 #로 시작한다면 첫 번째 글자는 제거하여 저장합니다. (예 : #tweet는 tweet의 값으로 저장한다.)
  • # 문자로 시작하는 원소는 hashtags 리스트에, @문자로 시작하는 원소는 mentions 리스트에 각각 첫 번째 문자(#, @)를 제거하고 저장합니다.
  • 함수는 keywords, hashtags, mentions를 반환해야 합니다.
  • 반환 결과에서 첫 번째 리스트는 모든 키워드, 두 번째 리스트는 해쉬태그 키워드, 세 번째 리스트는 멘션 키워드를 갖고 있습니다.
def analyze_text(words):
    # 키워드, 해시태그, 멘션을 저장할 리스트를 각각 생성합니다.
    keywords, hashtags, mentions = [], [], []
    for i in words: # 리스트의 원소를 하나씩 꺼낸다. (keywords list)
        if i.startswith("#"): # 원소의 첫 문자가 # 이라면
            keywords.append(i[1:]) # #제거 후 나머지 문자열 써준다
        elif i.startswith("@"): # 원소의 첫 문자가 @ 이라면
            keywords.append(i[1:])
        else:
            keywords.append(i)
            
    for i in words:   (hashtags, mentions list)
        if i.startswith("#"):
            hashtags.append(i[1:])
        if i.startswith("@"):
            mentions.append(i[1:])
    
    return keywords, hashtags, mentions

- 실행 예시

print(analyze_text(preprocess_text('We will follow two simple rules: BUY AMERICAN & HIRE AMERICAN!#InaugurationDay #MAGA🇺🇸')))

- 결과

- startswith를 사용하여 맨 앞 글자가 그냥 문자열인지 "#"인지 "@"인지에 따라 다른 리스트에 저장하도록 구현했다.

 

 

5. filter_by_month(tweet_data, month) 세부 구현 사항

- 목적 :  트윗 데이터와 트윗이 작성된 월(정수)을 입력받아 해당 월에 게시된 트윗을 리스트에 저장한 후, 반환

def filter_by_month(tweet_data, month):
    # month를 문자열로 바꾼 month_string을 선언합니다.
    # 이 때 한 자리 수는 앞에 '0'을 넣어줍니다. (ex: 1 => '01')
    month_string = '0' + str(month) if month < 10 else str(month)
    filtered_tweets = []
    # 선택한 달의 트윗을 filtered_tweets에 저장합니다.
    for i in tweet_data:
        if i[0][:2] == month_string:
            filtered_tweets.append(i[1])
    return filtered_tweets

- 실행 예시

print(filter_by_month([('01-19-2017 20:13:57', 'On my way! #Inauguration2017 https://t.co/hOuMbxGnpe'), ('02-01-2017 00:31:08', 'Getting ready to deliver a VERY IMPORTANT DECISION!  8:00 P.M.'), ('03-03-2017 02:27:29', '...intentional. This whole narrative is a way of saving face for Democrats losing an election that everyone thought they were supposed.....'), ('03-03-2017 02:35:33', '...to win. The Democrats are overplaying their hand. They lost the election and now they have lost their grip on reality. The real story...')],3))

- 결과

- 입력된 월에 맞는 트윗을 출력해준다.

 

 

6. 결과

 

 

 

 

 

※ 엘리스가 제공한 학습 자료, 콘텐츠의 저작권은 엘리스에 있습니다.
※ COPYRIGHT 2016-2022. ELICE ALL RIGHTS RESERVED.

댓글