성의없는 코딩 #3 시작한다.
드디어 황희찬 선수가 독일 1부리그 RB라이프치히로 이적을 완료했다. 내년에도 황희찬 선수의 좋은 활약을 기대하며 실제로 트위터에서는 황희찬 선수에 대해 어떤 키워드가 Mention에서 같이 나타나는지 트위터 API를 통해 가져온 후 워드클라우드로 시각화해서 확인해보겠다.
최종 결과물
이번 분석에도 동일하게 Twitter에서 Data를 가져와야 되기 때문에 아래 링크에서 개발자 계정을 발급받아야 된다.
https://developer.twitter.com/en
링크내에서 자세히 살표보면 Create App 이라는 버튼이 있을 것이다. 트위터가 자세히 설명해주니 여기서는 설명을 생략하겠다. 계정 발급이 완료되면 아래 이미지와 같이 API Keys, API Secret, Access Token Key, Access Token Secret이 주어질것이다. 이것만 있으면 트위터 데이터를 가져올 수 있다.
그럼 이제부터 코딩을 시작하겠다.
#1 우선 Twitter API 인증부터 해야된다
ㄴ 필요한 패키지 임포트
ㄴ 트위터에서 받은 API 값 인증(Total 4개)
import tweepy
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import re
import seaborn as sns
from matplotlib import font_manager,rc
from wordcloud import WordCloud
import platform
from konlpy.tag import Okt
from collections import Counter
consumer_key =''
consumer_secret =''
access_token_key =''
access_token_secret =''
auth =tweepy.OAuthHandler(consumer_key,consumer_secret)
auth.set_access_token(access_token_key,access_token_secret)
api=tweepy.API(auth)
#2 황희찬 키워드가 포함된 Tweets Mentions 가져와서 Dataframe 형태로 변환
columns=['created','tweet_text']
df=pd.DataFrame(columns=columns)
for i in range(0,100):
tweets=api.search('황희찬')
for tweet in tweets:
tweet_text=tweet.text
created=tweet.created_at
row=[created,tweet_text]
series=pd.Series(row,index=df.columns)
df=df.append(series,ignore_index=True)
#3 Tweets 텍스트에서 한글만 가져오기(특수문자/영어 제외)
def text_cleaning(text):
hangul=re.compile('[^ㄱl가-힣]+')
result= hangul.sub('',text)
return result
df['ko_text']=df['tweet_text'].apply(lambda x:text_cleaning(x))
* tweet_text 열에 포함된 텍스트가 Ko_test 열에 있는 텍스트로 변환된것을 확인할 수 있다
#4 불용어 제거
ㄴ 아, 이, 어, 등등 한글 불용어를 제거해야되는데 나는 기존에 다른 분들이 수고해주셔서 만든 불용어 사전을 사용하도록 하겠다. 아래 링크에서 다운
https://gist.github.com/spikeekips/40eea22ef4a89f629abd87eed535ac6a
ㄴ 불용어를 제거한 후 OKT()를 통해 명사(NOUNS)만 가져오도록 하겠다.
path ='/korean_stopwords.txt'
with open(path,encoding ='utf-8') as f:
stopwords=f.readlines()
stopwords=[x.strip() for x in stopwords]
def get_nouns(x):
nouns_tagger=Okt()
nouns=nouns_tagger.nouns(x)
nouns=[noun for noun in nouns if len(noun)>1]
nouns=[noun for noun in nouns if noun not in stopwords]
return nouns
df['noun']=df['ko_text'].apply(lambda x: get_nouns(x))
words=[]
for i in df['noun']:
words.extend(i)
noun열에 명사만 리스토 형태로 저장되어 있음을 확인할 수 있다.
황희???
#5 가장 많이 언급된 키워드 시각화하기
황희라는 키워드가 많이 언급되는데 이거는 황희찬이다, 왜 황희로 인식하누
역시 별명답게 국산 황소ㅋㅋㅋ 많이 언급됐고, 선배 손흥민, 이강인 등 해외파도 같이 언급됐음를 확인할 수 있다.
역시 사대주의 민족답게 다른 사람의 반응을 궁금해하는 점을 여기서 볼수 있다.
if sys.platform in ['win32','win64']:
font_name='malgun gothic'
rc('font',family=font_name)
counts_selected=Counter(words)
counts_selected.most_common(50)
counts_df=pd.DataFrame(counts_selected.most_common(50))
counts_df.columns=['keywords','counts']
plt.figure(figsize=(12,10))
sns.barplot(x='counts',y='keywords',data=counts_df)
# Final 워드 클라우드 만들기
from wordcloud import WordCloud
import platform
if platform.system()=='Windows':
font_path='c:/Windows/Fonts/malgun.ttf'
wordcloud=WordCloud(font_path=font_path,
background_color='white',
max_words=100,
relative_scaling=0.3,
width=800,
height=400).generate_from_frequencies(counts_selected)
plt.figure(figsize=(15,10))
plt.imshow(wordcloud)
plt.axis('off')
plt.savefig('test.png')
성의 없는 코드 끝!!!!
'문송충의 코딩하기 > 파이썬 데이터 분석' 카테고리의 다른 글
공공데이터 Open API를 통해 삼성전자 주주 구성 분석하기 With Python (0) | 2020.07.15 |
---|---|
카카오 API를 활용한 동네 브랜드별 편의점 점포 수 구하기 with Python (0) | 2020.07.14 |
주가와 검색량(Queries)의 상관 관계 분석 (0) | 2020.07.13 |
Folium으로 회사 주변 GS25 위치 지도로 표시#2 (0) | 2020.07.08 |
Amazon Products Reviews 분석 #1 - 데이터 가져오기 (0) | 2020.07.03 |
댓글