python PR

pythonでtwitterからツイートを取得して、形態素解析を行う【サンプルコード付き】

python twitter 形態素解析・wordcloud
記事内に商品プロモーションを含む場合があります

これまでの記事で、twitterから情報収集する方法形態素解析・wordcloudを行う方法を解説してきました

今回は、この両者を組み合わせて、人気のツイートを取得し、取得したツイートを一つのテキストファイルとして保存し、形態素解析・wordcloudを行う方法について解説していきたいと思います

自分の知りたいキーワードでは、どういったことがよくツイートされているのか?

そういった傾向を掴み、分析に活かすことができます

pythonでtwitterからツイートを取得したい

形態素解析・wordcloudを実施してみたい

取得したツイートを解析してみたい

といった方に向けて、書いていきます!

以下の記事では、pythonでtwitterを使う方法をまとめて解説しているので、参考にしてみてください

pythonでtwitterを使ってみよう

pythonでtwitterを扱えるようになると、twitterで行われている懸賞に自動で応募することができるようになります

コピペでOK!アフタフォロー付きのtwitter懸賞自動化コード

また、twitterアフィリエイトを自動化することもできます

コピペでOK!pythonを使ってtwitterアフィリエイトを自動化しよう

pythonでtwitterからツイートを取得して、形態素解析を行う

python twitter 形態素解析

まずはコード全体を

import tweepy
from datetime import datetime,timezone
import pytz
import pandas as pd
import collections
import MeCab
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import seaborn as sns
sns.set(font='Hiragino Sans')

CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_SECRET = ''

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

search_results = api.search_tweets(q="", result_type="recent",tweet_mode='extended',count=5)

tw_data = []
for tweet in search_results:
    #tweet_dataの配列に取得したい情報を入れていく
    tw_data.append([
        tweet.id,
        tweet_time,
        tweet.full_text,
        tweet.favorite_count, 
        tweet.retweet_count, 
        tweet.user.id, 
        tweet.user.screen_name,
        tweet.user.name,
        tweet.user.description,
        tweet.user.friends_count,
        tweet.user.followers_count,
        create_account_time,
        tweet.user.following,
        tweet.user.profile_image_url,
        tweet.user.profile_background_image_url,
        tweet.user.url
                       ])

#取り出したデータをpandasのDataFrameに変換
#CSVファイルに出力するときの列の名前を定義
labels=[
    'ツイートID',
    'ツイート時刻',
    'ツイート本文',
    'いいね数',
    'リツイート数',
    'ID',
    'ユーザー名',
    'アカウント名',
    '自己紹介文',
    'フォロー数',
    'フォロワー数',
    'アカウント作成日時',
    '自分のフォロー状況',
    'アイコン画像URL',
    'ヘッダー画像URL',
    'WEBサイト'
    ]

#tw_dataのリストをpandasのDataFrameに変換
df = pd.DataFrame(tw_data,columns=labels)

df1=df.iat[2,2]
df2=df.iat[3,2]
tw_text=df1 + df2
f=open('text.txt','w')
f.write(tw_text)
f.close

f= open("/text.txt", 'r', encoding='UTF-8')
text=f.read()
f.close()
tagger =MeCab.Tagger()
tagger.parse('')
node = tagger.parseToNode(text)

word_list=[]
while node:
    word_type = node.feature.split(',')[0]
    if word_type in ["名詞",'代名詞']:
        word_list.append(node.surface)
    node=node.next
word_chain=' '.join(word_list)

c=collections.Counter(word_list)
font_path='/System/Library/Fonts/ヒラギノ明朝 ProN.ttc'
words = ['https','t','co','自民','し','w','そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある', 'ゆく', 'れる', 'ん', 'の']
result = WordCloud(width=800, height=600, background_color='white', 
                   font_path=font_path,regexp=r"[\w']+", 
                   stopwords=words).generate(word_chain)
result.to_file("./wordcloud_sample1.png")
print(c.most_common(20))
fig = plt.subplots(figsize=(8, 10))

sns.set(font="Hiragino Maru Gothic Pro",context="talk",style="white")
sns.countplot(y=word_list,order=[i[0] for i in c.most_common(20)],palette="Blues_r")

基本的にはこれまでに解説してきたコードをうまく組み合わせることで、可能になります

twitter APIの取得

pythonでtwitterを扱うには、twitter APIの取得が必要になります

twitter APIの取得は大きく分けると、3段階に分かれています

  1. Developerに登録
  2. twitter APIの使用用途を説明
  3. twitter APIの申請→承認

ざっくり上記の流れになります

twitter APIの申請は年々厳しくなっていますが、2022年に承認を受けた方法はこちら

pythonでtwitter APIを使用する方法
pythonでtwitter APIを取得する方法【全18枚の図解+例文あり】twitterのAPI取得は年々厳しくなってきています。今回は筆者が2022年にpythonでtwitter APIを取得するために行なった方法を図解+例文つきで紹介していきます。pythonでtwitterを利用する際には、twitter APIの取得が必須になるので、参考にしてください。...

tweepyのインストール

twitte APIの申請を終えたら、tweepyをインストールしていきます

pip install tweepy

Macの場合には、ターミナルで上記コードを入力すればOKです

windowsの場合には、コマンドプロンプトで上記のコードを入力します

形態素解析を行う準備

形態素解析はMecabを使用していきます

pythonでMecabを使用するには、以下のようになります

  1. pythonの環境構築を行う
  2. Homebrewのインストール
  3. MeCabと形態素解析に必要な辞書をインストール
  4. MeCabの動作確認
  5. mecab-ipadic-NEologdのインストール

まだMecabの準備ができていない場合には、以下の記事を見つつ、準備を進めていきましょう

python 形態素解析
pythonでMecabを使って形態素解析をやってみよう形態素解析というもの自体、聞きなれない方が多いかと思います。私たちが使っている言語をさまざまな方法を使って解析する方法を自然言語処理と言いますが、形態素解析はそのうちの一つです。pythonを使えば形態素解析を簡単に行うことができます。今回は私が収益化することができたサンプルコードを交えつつ、pythonで形態素解析を行う方法を解説していきたいと思います。...

pythonでtwitterからツイート取得・形態素解析のコード解説

コード解説

ここからはコードの解説をしていきたいと思います

twitter APIの認証

import tweepy

CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_SECRET = ''

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

pythonでtwitterを扱う場合には、必ずといって良いほど、上記のコードを入力していきます

これはtwitter APIの認証です

まずはこれを記載しておかないと、pythonでtwittreを操作することができません

検索キーワードの設定

#tweepyで検索を行う
search_results = api.search_tweets(q="", result_type="recent",tweet_mode='extended',count=5)

「api.search_tweets」でqにキーワードを入力することで検索をすることができます

#例
#tweepyで検索を行う
search_results = api.search_tweets(q="大谷翔平", result_type="recent",tweet_mode='extended',count=5)

result_typeは3種類です

  • “recent”:時系列で最新ツイートを検索
  • “popular”:人気のあるツイートを検索
  • “mixed”:上記を混ぜたもの

となっています

デフォルトでは、”recent”になっているので、変更する場合には、「result_type=””」で指定する必要があります

tweet_mode=’extended’では、ツイート内容の全文を取得するための記載です

count=5は取得するツイート件数を決めています

データフレームの作成

tw_data = []#tw_dataという空のリストを作成

#ここからツイート情報を取得
for tweet in search_results:
    tw_data.append([
        tweet.id,
        tweet_time,
        tweet.full_text,
        tweet.favorite_count, 
        tweet.retweet_count, 
        tweet.user.id, 
        tweet.user.screen_name,
        tweet.user.name,
        tweet.user.description,
        tweet.user.friends_count,
        tweet.user.followers_count,
        create_account_time,
        tweet.user.following,
        tweet.user.profile_image_url,
        tweet.user.profile_background_image_url,
        tweet.user.url
                       ])

#取り出したデータをpandasのDataFrameに変換
#CSVファイルに出力するときの列の名前を定義
labels=[
    'ツイートID',
    'ツイート時刻',
    'ツイート本文',
    'いいね数',
    'リツイート数',
    'ID',
    'ユーザー名',
    'アカウント名',
    '自己紹介文',
    'フォロー数',
    'フォロワー数',
    'アカウント作成日時',
    '自分のフォロー状況',
    'アイコン画像URL',
    'ヘッダー画像URL',
    'WEBサイト'
    ]

#tw_dataのリストをpandasのDataFrameに変換
df = pd.DataFrame(tw_data,columns=labels)

取得したツイートをデータフレームに変換します

その後テキストファイルに保存をしていきますが、その時に「ツイート本文」が含まれているセルだけをテキストファイルとしていきます

df1=df.iat[2,2]
df2=df.iat[3,2]
tw_text=df1 + df2
f=open('text.txt','w')
f.write(tw_text)
f.close

iatで指定をしていますが、ツイート本文全てを選択し、結合・テキストファイル保存をして起きます

保存したテキストファイルを読み込む

f= open("/text.txt", 'r', encoding='UTF-8')
text=f.read()
f.close()

保存したテキストファイルをパス名で指定して、読み込みます

ここまできたら、あとは形態素解析・wordcloudを行うだけです

形態素解析・wordcloudを行う

tagger =MeCab.Tagger()
tagger.parse('')
node = tagger.parseToNode(text)

word_list=[]
while node:
    word_type = node.feature.split(',')[0]
    if word_type in ["名詞",'代名詞']:
        word_list.append(node.surface)
    node=node.next
word_chain=' '.join(word_list)

c=collections.Counter(word_list)
font_path='/System/Library/Fonts/ヒラギノ明朝 ProN.ttc'
words = ['https','t','co','自民','し','w','そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある', 'ゆく', 'れる', 'ん', 'の']
result = WordCloud(width=800, height=600, background_color='white', 
                   font_path=font_path,regexp=r"[\w']+", 
                   stopwords=words).generate(word_chain)
result.to_file("./wordcloud_sample1.png")
print(c.most_common(20))
fig = plt.subplots(figsize=(8, 10))

形態素解析を行い、その後にwordcloudを実行、画像として出力という流れになっています

wordcloudで抽出するのは、「名詞と代名詞」にしていますが、〇〇詞を変えることで、その他のものも抽出することができます

また、wordsでは除外するワードを指定しています

twitterのツイートではURLが貼られていることもあるので、それを除外します

出力結果はこちら

wordcloud_sample1

pythonを使って自分のツイートで「いいね」されやすい内容を分析

twitterのいいねを分析

形態素解析ができるようになったら、もう少しツイッター分析に踏み込んでみましょう

ここからは、自分のツイートで「いいね」されやすい内容を分析していきたいと思います

過去のツイートデータを取得

過去のツイートデータはtwitter純正のTwitterアナリティクスから取得することができます

これは、PCからでしか取得することができないので、スマホで見ているからは、PCから開き直しましょう

twitterアナリティクスの使い方

ツイートのいいねを分析する

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import japanize_matplotlib

#CSVの読み込み
apr_df=pd.read_csv("******.csv")
may_df=pd.read_csv("******.csv")
jun_df=pd.read_csv("******.csv")

#CSVを結合させる
combine=[apr_df,may_df,jun_df]

#データフレームを作成し、いいねが多い順に並べる
tweets_df=pd.concat(combine).sort_values(by="いいね",ascending=False)

#分析に必要なデータのみを取り出す
tweets_df=tweets_df[["ツイート本文","リツイート","時間","いいね"]]

#グラフを描写
tweets_df.plot.hist(y=["いいね"],bins=50,figsize=(16,9))
#グラフを保存
plt.savefig("ヒストグラム.png")

#時間データから日付や分数を取り除く
tweets_df["時間"]=pd.to_datetime(tweets_df["時間"])
tweets_df["時刻"]=tweets_df["時間"].dt.hour

#いいね数と時刻のデータフレームを作成
time_df = tweets_df[["いいね","時刻"]]

#時刻順に並び替える
time_df = time_df.sort_values(by=["時刻"],ascending=True)

#時刻ごとにデータを集計
grouped = time_df.groupby("時刻")

#時刻ごとの平均いいね数
mean = grouped.mean()

#時刻ごとのツイート数
size = grouped.size()

#時刻ごとの平均いいね数の棒グラフを描写
mean.plot.bar(xlim=[0,23], ylim=[0,90],figsize=(16,9))

#時刻ごとのツイート数の折れ線グラフを描写
size.plot(xlim=[0,23], ylim=[0,90],figsize=(16,9))

#描写したグラフを保存
plt.savefig("時刻別平均いいね数とツイート数.png")

#評価付け
tweets_df.loc[tweets_df["いいね"] >= 50, "いいね評価"] ="A"
tweets_df.loc[(tweets_df["いいね"] < 50)  &  (tweets_df["いいね"] >= 30), "いいね評価"] = "B"
tweets_df.loc[(tweets_df["いいね"] < 30)  &  (tweets_df["いいね"] >= 20), "いいね評価"] = "C"
tweets_df.loc[(tweets_df["いいね"] < 20)  &  (tweets_df["いいね"] >= 10), "いいね評価"] = "D"
tweets_df.loc[tweets_df["いいね"] < 10, "いいね評価"] = "E"

#各ツイートの文字数を取得
tweets_df["文字数"] = tweets_df.ツイート本文.str.len()

#評価用リストを作成
hyoka = ["A", "B", "C","D", "E"]

#評価ごとの平均文字数を格納するデータフレームを作成
fav_mean_df = pd.DataFrame(index = hyoka, columns = ["平均文字数"])

#作成したデータフレームに平均文字数を格納
for i in hyoka:
    df = tweets_df[tweets_df.いいね評価 == i]
    fav_mean_df.loc[[i],["平均文字数"]] = df["文字数"].mean()

#グラフを描写
fav_mean_df.plot.bar(figsize=(16,9))

#描写したグラフを保存
plt.savefig("いいね評価ごとの平均文字数.png")

まずはどれくらいのツイート数、いいねをもらえているかを見てみます

僕のツイートのほとんどはいいねがもらえていないことがわかりますw

ヒストグラム

次にどの時間帯がいいねとツイートが多いのかを棒グラフと折れ線グラフで見ていきます

棒グラフがいいねの数、折れ線グラフがツイート数です

僕の場合は、11-14時くらいが一番多そうです(絶賛お仕事中のはず…)

いいねに関しては突出しているわけではありませんが、10時と19時、22時が多そうです

なので、この時間帯にツイートを連発すればいいねがたくさんもらえるかもしれません

時刻別平均いいね数とツイート数

最後に、いいねをしてもらえるツイートの文字数です

イメージ的には文字数が多いほうが、いいねしてもらえそうですが、このグラフを見るとそうとも言えなそうですね

これをそのまんま多群比較の統計検定にかけたら違いがわかりそうです

ただまぁ、Bがない時点で、文字数はあまり関係なさそうですね

いいね評価ごとの平均文字数

一通りの画像出力は上記のコードで分析可能です

コピペで動くように作っていますので、ぜひ自身のtwitter分析に活用してみてください

おすすめプログラミングスクール(無料体験あり)

python プログラミングスクール
Pythonや機械学習を学べるプログラミングスクールおすすめ5選「pythonを学ぶのに、プログラミングスクールに通いたい」「pythonを学べるプログラミングスクールがたくさんあって、よくわからない」「結局、pythonを学ぶのにおすすめのプログラミングスクールってどこなの?」といった疑問をお持ちの方に、pythonを学ぶのにおすすめのプログラミングスクールを紹介していきたいと思います。...
おすすめプログラミングスクール

DMMWEBCAMP
  • WEBCAMPはコスパ最強
  • WEBCAMPは初心者に優しい充実したサポート付き
  • 16週間プランを選択して、返金してもらおう
WEBCAMPの公式ページはこちら WEBCAMPの口コミ・評価はこちら
テックアカデミー  
  • テックアカデミーは費用対効果抜群
  • テックアカデミーのサポートは個人の能力に応じつつ、python初心者に優しい
  • まずは無料体験でテックアカデミーを知ってから受講を決める
テックアカデミーの公式ページはこちら テックアカデミーの口コミ・評価はこちら
キカガク
  • 多種多様なスキルコース
  • 初心者から専門家まで対象
  • 給付金利用で費用を抑えられる
キカガクの公式ページはこちら キカガクの口コミ・評価はこちら
Aidemy Premium
  • 完全オンラインで、時間や場所に縛られず学習したい
  • マンツーマン学習サポートにより実践に近い経験をしたい
  • 未経験から機械学習エンジニアになりたい
Aidemy Premiumの公式ページはこちら Aidemy Premiumの口コミ・評価はこちら
My Agile Privacy
This website uses technical and profiling cookies. Clicking on "Accept" authorises all profiling cookies. Clicking on "Refuse" or the X will refuse all profiling cookies. By clicking on "Customise" you can select which profiling cookies to activate.