Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dashでmyダッシュボードを作ろう ーpytrendsで見るコロナの感染拡大時期ー

Dashでmyダッシュボードを作ろう ーpytrendsで見るコロナの感染拡大時期ー

Hacarus Inc.

August 05, 2022
Tweet

More Decks by Hacarus Inc.

Other Decks in Programming

Transcript

  1. 3 • 何を作ることにしたか • なぜ作ることにしたか • どのように学習を進めたか ◦ Dash ◦

    Pytrends • どのように作り進めたか • 作ってどうだったか ◦ 可視化したデータの考察 ◦ 苦労した点 今日話すこと
  2. 4 • Dashやpytrendsのチュートリアル的な話 ◦ インストール手順や起動手順 ◦ コンポーネントの使い方や入出力の方法などの基本技術 ◦ 理由:時間がないため •

    データ分析の話 ◦ 可視化したデータを使って未来を予測するというような機械学習的な話 ◦ 理由:今回はデータの可視化に焦点を当てておりフォーカスから外れるため 話さないこと
  3. 9 • 業務で簡単な分析や図表の可視化ができる簡易ツールを作ることになり、以下の条件を満たす ツールを探していた ◦ 学習コストが小さい ◦ 短時間でそれなりのものができる ◦ Pythonライブラリ

    • StreamlitとDashの2つが候補に挙がり、業務ではより簡便な Streamlitを使うことに 業務で簡易アプリを作るツールを探していた Dashは不要になったけど・・・
  4. 12 • 検索キーワードのトレンド ◦ 人気度の動向 ◦ 地域別のインタレスト ◦ 関連キーワード ▪

    注目(検索頻度の増加率が大きい) ▪ 人気(検索頻度が高い) • 最近の急上昇ワード • 年ごとの急上昇ワード Googleトレンドの機能
  5. 13 • 良かった点 ◦ 本家だけあって使いやすい ◦ 確認したいワードや比較ワードを登録しておける • あるといいなと思った機能 ◦

    キーワードを5つ以上比較できる ◦ 人気度の動向で急激な変化を見せている時期に絞って関連キーワードを検索できる Googleトレンドを使ってみて 後者の機能をDashとpytrendsで実装してみよう
  6. 17 1. 公式チュートリアル a. インストール、起動方法、コンセプト等、基本事項を確認 b. チュートリアルに沿って実際に作って動かしてみる 2. 公式ギャラリー a.

    どんなものが実装できるのかを知る 3. Qiitaのキーワード検索結果 a. 見出しに目を通しす b. LGTM数や投稿時期も確認しつつ参考になりそうな記事をピックアップしておく 4. 作り進めながら必要なタイミングで各種コンポーネントの APIドキュメント Dashの学習の流れ
  7. 18 1. 公式チュートリアル a. インストール、起動方法、コンセプト等、基本事項を確認 b. チュートリアルに沿って実際に作って動かしてみる 2. 公式ギャラリー a.

    どんなものが実装できるのかを知る 3. Qiitaのキーワード検索結果 a. 見出しに目を通しす b. LGTM数や投稿時期も確認しつつ参考になりそうな記事をピックアップしておく 4. 作り進めながら必要なタイミングで各種コンポーネントの APIドキュメント Dashの学習の流れ 難易度が不明+自分の興味がどれくらい続く か分からないため、本は買わずにWebのリ ソースだけで進める APIドキュメントに目を通さなくても何ができそう か概ね把握できる。自分では考えつかなかった 見せ方を知れる 便利機能やつまづきポイントをまとめた記事を 先にみておくと、開発効率が格段にアップする
  8. 19 • Github • Googleトレンドからデータを取得する非公式 API • Googleトレンドのすべての機能が実装されている • 制約

    ◦ 公式APIではないため、頻繁にアクセスできない ▪ スリープを少し長めに取る(10秒程度) ◦ 最大5つのキーワードのデータしか同時取得できない(公式と同じ) • 学習の流れ ◦ 1、2本まとめ記事を読む→Google Colabで使用感の確認→Githubのドキュメント pytrendsとは
  9. 21 チュートリアルを試しながら起動 • レイアウト • Callbackの使い方 • インタラクティブなグラフの挿入方法 • なども合わせて確認

    from dash import Dash, html, dcc import plotly.express as px import pandas as pd app = Dash(__name__) df = pd.DataFrame(...) fig = px.bar(df, ...) app.layout = html.Div([ html.H1(‘Hello Dash’), ... dcc.Graph( id=’example-graph’ figure=fig ) ]) If __name__ == ‘__main__’: app.run_server(debug=True)
  10. 23 dbc.Container( dbc.Row([ dbc.Card([md=4]), dbc.Card([md=8]) ]), html.Br(), dbc.Row([ dbc.Card([]), dbc.Card([]),

    dbc.Card([]), dbc.Card([]), ]), html.Br(), dbc.Row([ dbc.Card([]), dbc.Card([]), dbc.Card([]), dbc.Card([]), ]), ) dbc.Cardを使って配置決め
  11. 25 ブラウザからの入力を受け取る dbc.Input( id="keyword", # コンポーネントのID type='text', # テキストフォーム value='virus',

    # 初期値 ) ……… @app.callback( Input(‘keyword’, ‘value’), ) def get_keyword_trend(kw): # トレンド取得のコードを書く dbc.Input ①入力を受け取るコン ポーネントのIDを指定 ②コンポーネントのどの値を受け取 るかパラメータ名で指定 ③どういう引数名で受 け取るか指定
  12. 26 入力を受けて処理した結果をブラウザに表示する dcc.Graph(id='keyword-trend-graph') ……… @app.callback( Output(‘keyword-trend-graph’, ‘figure’), Input(‘keyword’, ‘value’), )

    def get_keyword_trend(kw): # トレンド取得のコードを書く # グラフを作成するコードを書く fig = px.line(...) return fig dcc.Graph ①結果を渡したいコン ポーネントのIDを指定 ②コンポーネントのどのパラ メータに渡すか指定 ③渡したい結果を returnする
  13. 27 検索トレンド from pytrends.request import TrendReq pytrends = TrendReq( hl=’jp-JP’,

    # host language tz=-540, # timezone ) keywords = [‘virus’] timeframe = ‘2022-01-01 2022-08-01’ geo = ‘JP’ pytrends.build_payload( keywords, timeframe=timeframe, geo=geo) trend_df = pytrends.interest_over_time() 関連キーワード Googleトレンドのデータを取得する処理を追加 # build_payload()まで検索トレンドと同じ # ただし指定できるキーワードは 1つまで df_dict = pytrends.related_queries() # df_dict[‘top’] -> 人気ワード # df_dict[‘rising’] -> 注目ワード
  14. 30 • 対象地域:日本、アメリカ、イギリス、南アフリカ • 検索キーワード:virus • 対象期間 ◦ コロナが最初に流行し始めた時期から現在まで: 2019-08-05

    - 2022-08-05(3年) ◦ 最近の動向:2021-08-05 - 2022-08-05(1年) • 何をみるか ◦ 対象期間の違いによるトレンドの違い ◦ 地域の違いによるトレンドの違い 対象地域、検索キーワード
  15. 31 • http://www.iph.pref.osaka.jp/infection/disease/corona.html • 大阪府の情報になるが、第1波〜第7波の時期を確認 ◦ 第1波:2020-01-29〜2020-06-13 ◦ 第2波:2020-06-14〜2020-10-09 ◦

    第3波:2020-10-10〜2021-02-28 ◦ 第4波:2021-03-01〜2021-06-20 ◦ 第5波:2021-06-21〜2021-12-16 ◦ 第6波:2021-12-17〜2022-06-24 ◦ 第7波:2021-06-25以降 ◦ →検索トレンドのグラフに最初の 1ヶ月に相当する時期をハイライトで可視化 これまでのコロナ感染拡大時期