PythonのPandasで、取得したtweepyのデータをmatplotlibでグラフにする。
公式:
https://matplotlib.org/gallery/index.html
>pip install matplotlib
で、インストールしておいて。
Matplotlibを使う時の2つのアプローチがある。本投稿では、記述が簡単な、2つ目のpyplotによる記述が中心。
■オブジェクト指向インターフェース
■Pyplotインターフェース
plt.なんとかで全部済ませる流儀。
(基本構文)
import matplotlib.pyplot as plt
price = [100, 250, 380, 500, 700]
number = [1, 2, 3, 4, 5]
# グラフを書く
plt.plot(price, number)
# グラフのタイトル
plt.title("price / number")
# x軸のラベル
plt.xlabel("price")
# y軸のラベル
plt.ylabel("number")
# 表示する
plt.show()
https://qiita.com/skotaro/items/08dc0b8c5704c94eafb9
import tweepy as tw
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as style
from credentials import *
def twitter_setup():
auth = tw.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tw.API(auth,wait_on_rate_limit=True)
return api
extractor = twitter_setup()
tweets = extractor.user_timeline(screen_name="realDonaldTrump", count=100)
print("Number of tweets extracted: {}.\n".format(len(tweets)))
for tweet in tweets:
print(tweet.text, '+Like', tweet.favorite_count, '+Retweet', tweet.retweet_count)
tweet_df = pd.DataFrame(data=[[tweet.created_at,tweet.text, tweet.favorite_count,tweet.retweet_count] for tweet in tweets],
columns=['Date','Tweet','Like','RT'])
♯ df の 条件に合ったrowを削除
tweet_df2 = tweet_df[tweet_df.Like !=0]
print(tweet_df2)
♯ df の ソート
tweet_df3 = tweet_df.sort_values('Like', ascending=False)
print(tweet_df3.head(5))
tweet_df4 = tweet_df.sort_values('RT', ascending=False)
print(tweet_df4.head(5))
♯Graph表示
plt.style.use('seaborn-darkgrid')
//x軸、y軸の値の順番で指定(pdにしなくて、普通のリストでも良い)
plt.plot(tweet_df2. Date, tweet_df2.Like, color="green",marker="D",markersize=2,
markeredgewidth=3, markeredgecolor="blue", markerfacecolor="lightblue")
plt.legend()
plt.title("# of Liked in the past 200 Tweets")
plt.xlabel("date")
plt.ylabel("Likes")
plt.tick_params(axis='x', which='major', labelsize=6) # tick(目盛表示の指定)
plt.savefig('C:/Users/ path to /graph.png')
plt.show()
# tick(目盛表示の大きさの指定)
X軸の目盛単位の表示の大きさを指定しています。 Y軸も同様に指定が可能。
両方の大きさを変えたい場合、軸を指定しなければ、両方に適用されます。
plt.tick_params(labelsize=6)
こんなグラフができます。
*注)
X軸のラベルが多すぎて、重なってしまう場合、X軸の値を日付型にすれば、表示を自動調整してくれます。 文字(Str)型から日付(date)型への変換の仕方は、
【 PythonのDateTime.Object(UTC) のタイムゾーン変更 - 実践編 】
◇ Bar Chart
plt.bar(tweet_df2. Date, tweet_df2.Like,)
fig = plt.figure(figsize=(7, 4))
ax = fig.add_subplot(1, 1, 1, fc='#191970')
plt.bar(x_axis, y_axis, color='#98fb98')
plt.tick_params( labelsize=7)
plt.title('Population at 3pm in the vicinity of Tokyo Station')
plt.xlabel('Date')
plt.ylabel('% (Percent)')
plt.grid(True)
で、こんな感じ。
◇ Pie Chart
colors = ['green', 'blue', 'red']
data = [35%, 45%, 20%]
labels =[ 'Positive', 'Neutral','Negative']
## use matplotlib to plot the chart
plt.pie(
x=data,
shadow=True,
colors=colors,
labels=labels,
)
plt.savefig('C:/Users/ path to /graph.png')
plt.show()
こんな感じのグラフができます。
◆ X軸を日付にした場合の表示間隔の調整
*やり方1: X軸の値を日付にする
#https://bunseki-train.com/setting_ticks_by_matplotlib_dates/
fig = plt.figure(figsize=(7, 4))
ax = fig.add_subplot(1, 1, 1, fc='#191970')
plt.style.use=('seaborn-dark')
plt.plot(x_axis, y_axis, color='#98fb98')
ax.xaxis.set_major_locator(mdates.HourLocator(byhour=range(0, 24, 3), tz=None))
ax.xaxis.set_minor_locator(mdates.HourLocator(byhour=range(0, 24, 1), tz=None))
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d\n%H:%M:%S"))
# 次の2行は軸ラベルを回転させるために使用
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45, fontsize=5)
plt.show()
とやると以下のようになる。 値がない日付も間隔をとってしまう。
◆ 複数のグラフを並べて表示する
figure命令を使用し、add_subplot命令でそれぞれの領域に描画
*書き方:add_subplot(行数, 列数, 番号)
import matplotlib.pyplot as plt
fig = plt.figure()
# 1行2列の左
labels = ["A", "B", "C", "D", "E", "F"]
x = range(0, 6)
y = [10, 20, 30, 40, 50, 60]
ax1 = fig.add_subplot(1, 2, 1)
ax1.bar(x, y, tick_label = labels)
ax1.set_title("graph1")
# 1行2列の右
labels = ["E", "D", "C", "B", "A"]
y = [10, 20, 30, 40, 50]
ex = [0, 0, 0, 0, 0.1]
ax2 = fig.add_subplot(1, 2, 2)
ax2.pie(y, explode = ex, labels = labels, autopct = '%1.1f%%', startangle = 90)
ax2.set_title("graph2")
# グラフを表示する
plt.show()
0 件のコメント:
コメントを投稿