Python

Python kivyの使い方④|トレンド分析ツールを作成

Python
Kivyプログラミング ―Pythonで作るマルチタッチアプリ― (実践Pythonライブラリー) | 原口 和也, 久保 幹雄 |本 | 通販 | Amazon
Amazonで原口 和也, 久保 幹雄のKivyプログラミング ―Pythonで作るマルチタッチアプリ― (実践Pythonライブラリー)。アマゾンならポイント還元本が多数。原口 和也, 久保 幹雄作品ほか、お急ぎ便対象商品は当日お届けも可能。またKivyプログラミング ―Pythonで作るマルチタッチアプリ― (実践...

はじめに

Python kivyの使い方を解説してきました。今回は、これらを活用し、kivyでトレンド分析ツールを作成します
トレンド分析ツールとは、任意の単語を入力し、解析ボタンを押すと解析を開始するGUIです。
簡単なツールを作成することで、kivyの動作を確認していきます。

Tsukimitech
Tsukimitech

今回は、少し実践的な内容になります。

これを読めば簡単な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」の方が人気なのが分かる。

Amazon | Creating Apps in Kivy: Mobile with Python | Phillips, Dusty | Software Development
Amazon配送商品ならCreating Apps in Kivy: Mobile with Pythonが通常配送無料。更にAmazonならポイント還元本が多数。Phillips, Dusty作品ほか、お急ぎ便対象商品は当日お届けも可能。

コメント

タイトルとURLをコピーしました