質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Q&A

0回答

393閲覧

pythonのtweepyでTwitterをスクレイピングしwordcloudで表示したい

sshagj705

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

0グッド

0クリップ

投稿2022/12/26 11:43

編集2023/01/17 00:29

前提

サイトURL→https://python-man.club/python_get_tweet_morphological-analysis/
サイトに載っていたプログラムをそのままコピーした後
必要なものをpipでインストールしましたがエラーが多く
自分なりにプログラムを修正しても上手くいかず困っています。
python完全初心者です。よろしくお願いします。

実現したいこと

pythonのライブラリ『tweepy』を使ってTwitterをスクレイピング
した後、wordcloudを用いて使用頻度の高い単語などを表示したい。

エラーメッセージ

[('G', 2), ('123', 2), ('ゲーム', 2), ('https', 2), ('://', 2), ('t', 2), ('.', 2), ('co', 2), ('/', 2), ('年', 2), ('イメージ', 2), ('@', 1), ('ba', 1), ('0797', 1), ('naj', 1), ('残念', 1), ('はずれ', 1), ('たる', 1), ('毎日', 1), ('挑戦', 1)]

ソースコード(個人情報は文字列ffffに変更してます)

python

1import tweepy 2from datetime import datetime,timezone 3import pytz 4import pandas as pd 5import collections 6import MeCab 7import datetime 8import matplotlib.pyplot as plt 9from wordcloud import WordCloud 10import seaborn as sns 11sns.set(font='yuminl.ttf') 12 13CONSUMER_KEY = 'ffff' 14CONSUMER_SECRET = 'ffff' 15ACCESS_TOKEN = 'ffff' 16ACCESS_SECRET = 'ffff' 17 18auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 19auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET) 20api = tweepy.API(auth) 21 22search_results = api.search_tweets(q="ゲーム", result_type="recent",tweet_mode='extended',count=50) 23 24tw_data = [] 25for tweet in search_results: 26 #tweet_dataの配列に取得したい情報を入れていく 27 tw_data.append([ 28 tweet.id, 29 tweet.full_text, 30 tweet.favorite_count, 31 tweet.retweet_count, 32 tweet.user.id, 33 tweet.user.screen_name, 34 tweet.user.name, 35 tweet.user.description, 36 tweet.user.friends_count, 37 tweet.user.followers_count, 38 tweet.user.following, 39 tweet.user.profile_image_url, 40 tweet.user.profile_background_image_url, 41 tweet.user.url 42 ]) 43 44#取り出したデータをpandasのDataFrameに変換 45#CSVファイルに出力するときの列の名前を定義 46labels=[ 47 'ツイートID', 48 'ツイート本文', 49 'いいね数', 50 'リツイート数', 51 'ID', 52 'ユーザー名', 53 'アカウント名', 54 '自己紹介文', 55 'フォロー数', 56 'フォロワー数', 57 '自分のフォロー状況', 58 'アイコン画像URL', 59 'ヘッダー画像URL', 60 'WEBサイト' 61 ] 62 63#tw_dataのリストをpandasのDataFrameに変換 64df = pd.DataFrame(tw_data,columns=labels) 65 66df1=df.iat[2,1] 67df2=df.iat[3,1] 68tw_text=df1 + df2 69f=open('text.txt','w',encoding='UTF-8') 70f.write(str(tw_text)) 71f.close 72 73#f= open("text.txt", 'r', encoding='UTF-8') 74#text=f.read() 75#f.close() 76text=tw_text 77tagger =MeCab.Tagger() 78tagger.parse('') 79node = tagger.parseToNode(text) 80 81word_list=[] 82while node: 83 word_type = node.feature.split(',')[0] 84 if word_type in ["名詞",'代名詞']: 85 word_list.append(node.surface) 86 node=node.next 87word_chain=' '.join(word_list) 88 89c=collections.Counter(word_list) 90font_path='C:/Windows/Fonts/yuminl.ttf' 91words = ['https','t','co','自民','し','w','そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある', 'ゆく', 'れる', 'ん', 'の'] 92result = WordCloud(width=800, height=600, background_color='white', 93 font_path=font_path,regexp=r"[\w']+", 94 stopwords=words).generate(word_chain) 95result.to_file("./wordcloud_sample1.png") 96print(c.most_common(20)) 97fig = plt.subplots(figsize=(8, 10)) 98 99sns.set(font="Hiragino Maru Gothic Pro",context="talk",style="white") 100sns.countplot(y=word_list,order=[i[0] for i in c.most_common(20)],palette="Blues_r")

試したこと

エラーが表示されるたびにエラー行部分を修正したり削除したりしていましたが最終的に行き詰まってしまいました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/12/26 11:50

「ツイート時刻」と「アカウント作成日時」が足りないです。
sshagj705

2022/12/26 12:06

エラーが出るたびに削除していたのでめちゃくちゃになってました。ありがとうございます。 プログラムとエラー文を最新の物に変更しました。すみません
melian

2022/12/26 12:29

文字列に変換すればよいのではないでしょうか。(変数名が適切ではない様に思えます) f.write(str(tw_text))
sshagj705

2022/12/26 13:22

都度修正していただきありがとうございます。 更新した後↑のようなエラー文に変化しました。ファイルが見つからないということは事前に作成しておくべきファイルなのでしょうか?
melian

2022/12/26 13:36

参考にしているプログラムコードをみると、 f= open("text.txt", 'r', encoding='UTF-8') なのだと思います。ただ、直前で保存したファイルを何故に再度読み込んでいるのかは不明ですが。。。(変数 tw_text を使うとよいかと)
melian

2022/12/26 13:39

それから、先程気がついたのですが、 df1=df.iat[2,2] df2=df.iat[3,2] は、 df1=df.iat[2,1] df2=df.iat[3,1] に変更する必要があります。理由は「ツイート時刻」を削ったから、です。
sshagj705

2022/12/26 13:56

df1,2の修正の件、了解しました。修正後もエラー文には変化ありませんでした。 73行目の f= open("/text.txt", 'r', encoding='UTF-8')は どのように変更すべきでしょうか?
sshagj705

2022/12/26 13:58

『/』を削除するだけで大丈夫でしょうか
melian

2022/12/26 14:00

はい、/ を削除してみて下さい。 f= open("text.txt", 'r', encoding='UTF-8')
sshagj705

2022/12/26 14:06

『/』削除してみたところ↑のようなエラーに変化しましたm(__)m
melian

2022/12/26 14:12

一旦、以下の行をコメントアウトして、 f= open("text.txt", 'r', encoding='UTF-8') text=f.read() f.close() 直後に以下を追加して試してみて下さい。 text = tw_text
sshagj705

2022/12/26 14:20

変更しました。長いエラー文に変化しましたm(__)m
melian

2022/12/26 14:32

以下のエラーメッセージが表示されています。/System/Library/Fonts/ヒラギノ明朝 ProN.ttc ファイルが存在しないのでしょう。 No such file or directory: '/System/Library/Fonts/ヒラギノ明朝 ProN.ttc'
sshagj705

2022/12/27 14:09

Cドライブのwindowsフォルダ内のfontsフォルダ内にあったArialで指定して実行しました。よくわからない文字が出力されました。そのため22行目の api.search_tweets(q="かきくけこ" の”"内の部分を変化させたら実行結果が変化しました。ちなみに””内を”あいうえお”としたときは [('あい', 1)] と表示されました。 なぜこんな文字が出力されるのか全然わかんないです...
sshagj705

2022/12/27 14:13

ちなみに11行目のsns.set(font='Hiragino Sans')の部分もsns.set(font='Arial')に変更すべきでしょうか?
melian

2022/12/28 04:44

"あいうえお" や "かきくけこ" という様な、ツイート本文に含まれる可能性の低い語句ではなく、意味のありそうな語句を指定してみてはどうでしょうか。
sshagj705

2022/12/28 10:37

"ゲーム"に指定したところエラー文が変化しました。
sshagj705

2023/01/11 06:49

すみません。70行目のエラー解説お願いします……(T_T)
melian

2023/01/11 07:00

おそらく、encoding を指定する必要があります。 f=open('text.txt','w',encoding='utf-8') f.write(str(tw_text))
sshagj705

2023/01/12 04:09

ありがとうございます!それらしい結果に変化したのですが、ここからwordcloudに表示するためにはどのようにすればよいでしょうか?
sshagj705

2023/01/12 06:10

プログラム実行後、フォルダにtext.txtというファイルが生成されていました。そのテキストにはエラー文の@ba0797naj 残念ながらはずれです…! 当たるまで毎日挑戦できます!と書かれていました。
sshagj705

2023/01/12 06:21

度々すみません。↑2つのコメントは無視で大丈夫です。すみません。wordcloud_sample1.pngというファイルが生成されていました。これが完成形だと思います。ただ出現頻度の高い言葉が2,3個表示されているのですが、いろんな大きさの四角形がたくさんあってワードが全然表示されてないんですが何が原因でしょうか
sshagj705

2023/01/12 06:30

日本語が表示されず、英単語しか表示されないです...。それと実行結果を見る限り複数のツイートから分析するのではなく最新の1ツイートだけ分析してるみたいです。
sshagj705

2023/01/12 07:17

すみません!上のコメント全部無視で大丈夫です。日本語が表示されない問題はフォントをarial.ttfからyuminl.ttfに変更したところ解決しました。たくさんツイートを取得してその中から出現頻度の高い単語を表示したいのですが、今の実行結果を見る限りツイートを1件だけ取得してその中の単語を表示してるだけのプログラムになってしまっています。ちなみに22行目のツイート取得のプログラム内のcount=の部分を50にしましたが結果が変わりませんでした。お願いします。m(__)m
sshagj705

2023/01/17 00:28

素人の意見ですが、22行目で複数のツイートを取得しても66行目から68行目の、取得したツイートをtext.textに書き込むプログラムが1回しか行われていないのが原因だと思うのですが、22行目で読みんだツイート分text.textに書き込むにはどのようなプログラムに編集すべきでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問