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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

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

Twitter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

519閲覧

pythonのtweepyでツイートを大量に取得して分析しwordcloudで表示したい

sshagj705

総合スコア1

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

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

Twitter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2023/01/23 06:44

編集2023/01/29 11:19

前提

プログラム実行後に取得したツイートが出力されたファイル(text.text)が作成されます。

実現したいこと、疑問点

・↑の前提で説明したファイル(text.text)に正常にツイートが出力されない※現在は1種類のツイートを複数回出力してしまう。
(現在のファイルの中身と理想の完成形を↓に記載してます)

・ツイートを上手く取得できていないのか、それとも取得はできているがファイル(text.text)に出力するのが上手くできていないのか、どちらなのかがわからない。

・【words=】で表示しない単語を指定しているが表示されてしまう。

現在のtext.textの中身 ※検索ワードは【ゲーム】

0 最新のオンカジ紹介\n\nフリースピンやキャッシュバックなど定期的に入れ替わるプロモーション... 1 最新のオンカジ紹介\n\nフリースピンやキャッシュバックなど定期的に入れ替わるプロモーション... 2 最新のオンカジ紹介\n\nフリースピンやキャッシュバックなど定期的に入れ替わるプロモーション... 3 最新のオンカジ紹介\n\nフリースピンやキャッシュバックなど定期的に入れ替わるプロモーション... 4 最新のオンカジ紹介\n\nフリースピンやキャッシュバックなど定期的に入れ替わるプロモーション... 5 最新のオンカジ紹介\n\nフリースピンやキャッシュバックなど定期的に入れ替わるプロモーション... 6 最新のオンカジ紹介\n\nフリースピンやキャッシュバックなど定期的に入れ替わるプロモーション... 7 最新のオンカジ紹介\n\nフリースピンやキャッシュバックなど定期的に入れ替わるプロモーション... dtype: object

理想の完成形 ※検索ワードは【ゲーム】

0 最近のゲームってすごい完成度高いよなー 1 忙しすぎてゲームやってる暇がない.... 2 始めたらマジで止まんないんだけどwwwww ゲームは恐ろしいな 3 ゲームボーイアドバンスって言っても新卒の子に伝わらなかった..これが世代の違いか 4 クソゲーとかゴミゲーとかいうやつほどゲーム好きなんだよな 5 一緒にやる友達がいないだけでゲーム自体は好きなんだよ(笑) 6 【朗報!】今ならPSstoreであの名作達が30%OFF!!!冬のゲームセール祭 開催中! 要チェックだ! 7 ドラクエの新しくリリースされるゲームめちゃくちゃ楽しみだわ!速攻インストールする!

ソースコード(個人情報は888に置換)

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 = '888' 14CONSUMER_SECRET = '888' 15ACCESS_TOKEN = '888' 16ACCESS_SECRET = '888' 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=8) 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) 65num = 2 66num2 = 3 67counts = 1 68while counts <= 5: 69 df[counts]=df.iat[num,1] 70 df[counts+1]=df.iat[num2,1] 71 tw_text=df[counts] + df[counts+1] 72 counts += 2 73 num += 2 74 num2 += 2 75f=open('text.txt','w',encoding='UTF-8') 76f.write(str(tw_text)) 77f.close() 78 79f= open("text.txt", 'r', encoding='UTF-8') 80text=f.read() 81f.close() 82text=str(tw_text) 83tagger =MeCab.Tagger() 84tagger.parse('') 85node = tagger.parseToNode(text) 86word_list=[] 87while node: 88 word_type = node.feature.split(',')[0] 89 if word_type in ['名詞','代名詞']: 90 word_list.append(node.surface) 91 node=node.next 92word_chain=' '.join(word_list) 93 94c=collections.Counter(word_list) 95font_path='C:/Windows/Fonts/yuminl.ttf' 96words = ['@''RT''https','t','co','プレゼント','し','w','そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある', 'ゆく', 'れる', 'ん', 'の'] 97result = WordCloud(width=800, height=600, background_color='white', 98 font_path=font_path,regexp=r"[\w']+", 99 stopwords=words).generate(word_chain) 100result.to_file("./wordcloud_sample1.png") 101print(c.most_common(20)) 102fig = plt.subplots(figsize=(8, 10)) 103 104sns.set(font="Hiragino Maru Gothic Pro",context="talk",style="white") 105sns.countplot(y=word_list,order=[i[0] for i in c.most_common(20)],palette="Blues_r")

プログラムの詳細説明

22行目のsearch〜の部分でツイートを取得しており、その中の count= の部分で取得するツイート数を指定しています。その後66行目〜77行目の部分で取得したツイートを繰り返し処理によってファイル(text.text)に出力しています。それ以降の部分で形態素解析を行っています。

試したこと

始めはtext.textに1ツイートしか出力されていなかったためwhileでtext.textにツイートを出力する部分のプログラムを繰り返し処理するようにコードを修正した。しかし全く同じツイートを複数出力するだけのプログラムになってしまいました。その後も試行錯誤しましたが行き詰ってしまいした。

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

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

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

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

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

can110

2023/01/23 07:38

とりあえず`while counts <= 5:`ループで何をしているかが分からないので - 動作の説明(何をしているか) - dfが10行程度の具体的なデータ例、そのときの理想のtext.txtの結果 といった点を追記すると回答得られやすくなるかと思います。
sshagj705

2023/01/23 11:19

コメントありがとうございますm(_ _)m ご意見を参考に修正します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問