트윗 데이터에서 wordcloud를 생성해 본 조!

소개



자연 언어 처리에서 시각화를 공부하기 위해 wordcloud를 생성했습니다!
시각화할 데이터는 트윗입니다.

흐름



다음과 같은 느낌으로 wordcloud를 생성하고 있습니다!
① 트위터에서 임의의 문자열을 포함한 트윗을 100건 취득 (이번에는 「데이터 과학」이 포함된 데이터를 추출합니다)
② 취득한 데이터로부터 명사만 추출
③ 추출한 단어군에서 wordcloud를 생성

소스 코드



① 트위터에서 임의의 문자열을 포함한 트윗을 100건 취득
import tweepy
import json
#twitterAPIのためのconfigファイル
JSON_LOAD_FILE = r"./json/twitter.json"
#twitterからデータを抽出するときの検索ワード
SEARCH_WORD = "データサイエンス"
#twitterからデータを抽出するときの取得件数
SEARCH_COUNT = 100

#tweeterAPIと繋げるAPIインスタンスを生成する
def twitter_api_connect():
    #twiteerのAPIを利用するためのキーを取得
    conf = json_load(JSON_LOAD_FILE)

    #twiteerのAPIを利用するための、認証データ作成
    auth = tweepy.OAuthHandler(conf['CONSUEMR_KEY'], conf['CONSUEMR_SECRET'])
    auth.set_access_token(conf['ACCESS_TOKEN_KEY'], conf['ACCESS_TOKEN_SECRET'])

    #twitterのAPIインスタンス生成
    twitter_api = tweepy.API(auth, wait_on_rate_limit = True)
    return twitter_api

#tweetのデータを取得し、リスト化し、返却する
def tweet_list_create(twitter_api, search_word, search_count):
    #カーソルを使用してデータ取得
    search_tweets = twitter_api.search(q = search_word, count = search_count)

    #tweetの内容を格納するためのリスト変数
    search_tweet_list = []

    #取得したtweetの内容をリストに格納
    for search_tweet in search_tweets:
        search_tweet_list.append(search_tweet.text) 
    return search_tweet_list

# JSONファイルの読み込み
def json_load(file_path):
    with open(file_path, 'r') as f:
        conf = json.load(f)
    return conf

#twitterのAPIインスタンス生成
twitter_api = twitter_api_connect()

#twitterからデータを取得
search_tweet_list = tweet_list_create(twitter_api, SEARCH_WORD, SEARCH_COUNT)

twitterAPI용 config 파일은 다음과 같은 느낌입니다.

./json/twitter.json
{
    "CONSUEMR_KEY": "",
    "CONSUEMR_SECRET": "",
    "ACCESS_TOKEN_KEY": "",
    "ACCESS_TOKEN_SECRET": ""
}

② 취득한 데이터로부터 명사만 추출
import MeCab

#形態素解析し、単語をリスト化するときの品詞の条件
GET_WORD_CLASS = ['名詞', '形容詞']

#mecabのインスタンス生成
mecab = MeCab.Tagger ('-Ochasen')
mecab.parse('')

def word_list_create(sentences, get_word_class):
    #複数文から、指定の品詞(GET_WORD_CLASS)を抽出した単語リスト
    sentences_word_list = []

    for sentence in sentences:
        #一文から、指定の品詞(GET_WORD_CLASS)を抽出した単語リスト
        one_sentence_word_list = []
        #形態素解析
        node = mecab.parseToNode(sentence)

        while node:

            #語幹
            word = node.feature.split(",")[-3]
            #品詞
            word_class = node.feature.split(",")[0]  
            #(指定の品詞(GET_WORD_CLASS)である) and (語幹が*のもの(つまり未知語))場合は、単語リストに追加
            if word_class in get_word_class and word != '*': 
                one_sentence_word_list.append(word) 

            node = node.next
        sentences_word_list.extend(one_sentence_word_list)
    return sentences_word_list

#twitterデータから、指定の品詞の単語リストを生成
word_list = word_list_create(search_tweet_list, GET_WORD_CLASS)

③ 추출한 단어군에서 wordcloud를 생성
from collections import Counter
from matplotlib import pyplot as plt
from wordcloud import WordCloud
#wordcloud用のフォントパス
WORDCLOUD_FONT_PATH = 'C:\Windows\Fonts\yumin.ttf'
#wordcloud用の幅
WORDCLOUD_WIDTH = 800
#wordcloud用の高さ
WORDCLOUD_HEIGHT = 500
#wordcloud用の背景色
WORDCLOUD_BG_COLOR = 'white'
#twitterからデータを抽出するときの検索ワード
SEARCH_WORD = "データサイエンス"

def word_cloud_png_creater(word_list, font_path, width, height, bg_color, search_word):
    word_counter = Counter(word_list)
    wc = WordCloud(font_path=font_path,
                   width=width, 
                   height=height, 
                   background_color=bg_color).generate_from_frequencies(word_counter)
    wc.to_file('./result/{}.png'.format(search_word))

#'./result/'フォルダに、検索文字列.pngでwordcloud作成
word_cloud_png_creater(word_list, WORDCLOUD_FONT_PATH, WORDCLOUD_WIDTH, WORDCLOUD_HEIGHT, WORDCLOUD_BG_COLOR, SEARCH_WORD)

결과





마지막으로



읽어 주셔서 감사합니다! !
이번에는 간단한 처리로 wordcloud를 생성했지만 stopword라든지 사용자 사전 등록이라든가 하거나 하고 좀 더 놀아보고 싶다고 느꼈습니다.
자연언어 처리에 있어서의 단어 빈도 분석해, 실은 빈도가 많은 단어보다, 조금 적을 정도의 단어 쪽이 중요하거나 하는군요~. (뭐라고 하는 법칙인가 잊어버렸습니다...땀)

참고 기사


  • htps : // m / kn gsym 2018 / ms / 2524d21455 오 c111c
  • htps : // 이 m/켄마츠 4/있어 ms/9b6 아 c74f831443d29074
  • htps : // 코 m / 후리 폰 308 / ms / 베 97, bf25cf4 또는 0574
  • 좋은 웹페이지 즐겨찾기