트윗 데이터에서 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라든지 사용자 사전 등록이라든가 하거나 하고 좀 더 놀아보고 싶다고 느꼈습니다.
자연언어 처리에 있어서의 단어 빈도 분석해, 실은 빈도가 많은 단어보다, 조금 적을 정도의 단어 쪽이 중요하거나 하는군요~. (뭐라고 하는 법칙인가 잊어버렸습니다...땀)
참고 기사
다음과 같은 느낌으로 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라든지 사용자 사전 등록이라든가 하거나 하고 좀 더 놀아보고 싶다고 느꼈습니다.
자연언어 처리에 있어서의 단어 빈도 분석해, 실은 빈도가 많은 단어보다, 조금 적을 정도의 단어 쪽이 중요하거나 하는군요~. (뭐라고 하는 법칙인가 잊어버렸습니다...땀)
참고 기사
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)
{
"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)
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라든지 사용자 사전 등록이라든가 하거나 하고 좀 더 놀아보고 싶다고 느꼈습니다.
자연언어 처리에 있어서의 단어 빈도 분석해, 실은 빈도가 많은 단어보다, 조금 적을 정도의 단어 쪽이 중요하거나 하는군요~. (뭐라고 하는 법칙인가 잊어버렸습니다...땀)
참고 기사
Reference
이 문제에 관하여(트윗 데이터에서 wordcloud를 생성해 본 조!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/teri/items/e10a3be38113b31c0c9a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)