はじめに
Python kivyの使い方を解説してきました。今回は、これらを活用し、kivyでトレンド分析ツールを作成します。
トレンド分析ツールとは、任意の単語を入力し、解析ボタンを押すと解析を開始するGUIです。
簡単なツールを作成することで、kivyの動作を確認していきます。
今回は、少し実践的な内容になります。
これを読めば簡単なGUIは設計できるようになると思いますので、頑張りましょう。
データはPytrends経由で、GoogleTrendから引っ張ってきます。詳細は、以下を参照ください。
【通信業界分析】PytrendsでDocomo、KDDI、楽天Softbankのトレンド比較
Python kivyの使い方の前回の内容はこちらです。
トレンド分析ツールの機能
トレンド分析ツールのGUIは、5つの要素から構成される。画面上のブロックから以下の様になります。
- 表示画面
- 入力画面
- Addボタン
- Clearボタン
- Anarysisボタン
表示画面
表示画面では、分析対象単語群を表示します。
入力画面
入力画面では、分析対象の単語を記述します。
Addボタン
入力画面で記述した分析対象の単語を分析対象単語群に追加します。
また、表示画面に分析対象単語群の表示を指示します。
Clearボタン
分析対象単語群を消去します。
また、表示画面に分析対象単語群の表示を消去します。
Anarysisボタン
分析対象単語群のトレンドを分析します。
ここでのトレント分析とは、Googleの検索数とします。条件は以下です。
- 期間:2018-01〜2020-10
- 対象国:日本
トレンド分析ツールの実装
トレンド分析ツールのは、2つのpyファイルと1つのkvファイルから構成されます。これらを同じディレクトリに格納してください。
- trend_gui.py
- trend.py
- test.kv
trend_gui.py
Widgetsクラスに以下3つのボタンの機能を記述する
- Addボタン→def buttonClicked_add(self):
- Clearボタン→def buttonClicked_clear(self):
- Anarysisボタン→def buttonClicked(*args):
以下3つのプロパティを用意しておく。
- ff = ObjectProperty()# オブジェクトのプロパティ
- text = StringProperty() # 文字のプロパティ
- input = None
import trendsでtrends.pyを呼び出す。「Anarysisボタン」を押すと、このtrends.pyのmain関数が動作する様記述します。その時の引数を可変長変数とします。これは、分析する単語数が可変にするためです。
- self.text→表示する分析対象単語群をstrで格納します
- self.ff→表示する分析対象単語群をオブジェクトで格納します
- self.input.text→分析対象単語をstrで格納します
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty
from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path
import trends
from kivy.properties import ObjectProperty
#日本語を使用する場合
#resource_add_path("font指定する場合はここにディレクトリ")
#LabelBase.register(DEFAULT_FONT, "フォント名")
files = []
class Widgets(Widget):
ff = ObjectProperty()
text = StringProperty() # プロパティの追加
input = None
def __init__(self, **kwargs):
super(Widgets, self).__init__(**kwargs)
self.text = ''
def buttonClicked(*args):
# ボタンをクリック時
trends.main(args[1])
def buttonClicked_clear(self):
self.ff.clear()
self.text=""
def buttonClicked_add(self):
# ボタンをクリック時
files.append(self.input.text)
self.ff=files
#print(files)
self.text = self.text+self.input.text+","
class TestApp(App):
def __init__(self, **kwargs):
super(TestApp, self).__init__(**kwargs)
self.title = 'greeting'
def build(self):
return Widgets()
if __name__ == '__main__':
TestApp().run()
trend.py
詳細は、以下リンク先を参照ください。
from pytrends.request import TrendReq
import matplotlib.pyplot as plt
def plot(df,keywords):
m=0
for n in keywords:
plt.plot(df[n], label=keywords[m])
m=m+1
plt.xlabel('Date')
plt.xticks(rotation=90, size='small')
plt.legend(loc='upper left')
# Visualize
plt.show()
def main(args):
pytrend = TrendReq(hl='ja-jp')
# キーワード
keywords = args
pytrend.build_payload(kw_list=keywords, timeframe='2018-01-01 2020-11-01',geo='JP')
df=pytrend.interest_over_time()
plot(df,keywords)
if __name__ == '__main__':#直接yobareru.pyを実行した時だけ、def test()を実行する
main()
test.kv
input: text_inputと記述することで、入力画面に入力した単語を取得することができます。
root.とは、<Widgets>を継承するという意味を持ちます。trend_gui.pyのguiのclass Widgets(Widget)より、コンストラクタを使用しますという意味です。
<Widgets>:
input: text_input
BoxLayout:
orientation: 'vertical'
size: root.size
# ラベル
Label:
id: label1
font_size: 100
text: root.text
TextInput:
id: text_input
text: ""
Button:
id: button2
text: "Add"
font_size: 150
on_press: root.buttonClicked_add()
Button:
id: button3
text: "Clear"
font_size: 150
on_press: root.buttonClicked_clear()
Button:
id: button1
text: "Anarysis"
font_size: 150
on_press: root.buttonClicked(root.ff)
出力結果
例として、「python」と「java」の検索数を比較した。
入力画面にpythonと入力し、「Add」ボタンを押す。
pythonが追加される。
次に、入力画面にjavaと入力し、「Add」ボタンを押す。
「Anarysis」ボタンを押す。すると以下が表示される。この結果より、近年は、「python」の方が人気なのが分かる。
コメント