☆☆ 新着記事 ☆☆

2019年4月28日日曜日

PythonのPandasで、取得したtweepyのデータをmatplotlibでグラフにする。


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. Datetweet_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 件のコメント:

コメントを投稿