前提
プログラム実行後に取得したツイートが出力されたファイル(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にツイートを出力する部分のプログラムを繰り返し処理するようにコードを修正した。しかし全く同じツイートを複数出力するだけのプログラムになってしまいました。その後も試行錯誤しましたが行き詰ってしまいした。
あなたの回答
tips
プレビュー