Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dashでmyダッシュボードを作ろう ーpytrendsで見るコロナの感染拡大時期ー
Search
Hacarus Inc.
August 05, 2022
Programming
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dashでmyダッシュボードを作ろう ーpytrendsで見るコロナの感染拡大時期ー
TECH in 京都 #3(
https://hacarus.connpass.com/event/254480/)の資料です
。
Hacarus Inc.
August 05, 2022
More Decks by Hacarus Inc.
See All by Hacarus Inc.
GitLab CI/CD で C#/WPFアプリケーションのテストとインストーラーのビルド・デプロイを自動化する
hacarus
0
1.4k
QA4AIに則ったMLOpsツールの活用
hacarus
0
740
0から協働ロボット外観検査システムを3ヵ月で具現化した軌跡
hacarus
0
300
ワンちゃんの健康を願う皆様に送る 犬心電図AI解析プロダクト紹介_AWS DevDay2022
hacarus
0
220
犬の心電AI解析プロダクト開発奮闘記 _クラウドからハード開発までてんこ盛り
hacarus
0
2.2k
ExplainableAIの概要とAmazon SageMaker Clarifyでの実装例
hacarus
0
1.2k
AWS Step Functions を用いた非同期学習処理の例
hacarus
0
1.5k
Interpretable Machine Learning: モデル非依存な解釈手法の紹介
hacarus
0
1.2k
時系列データ予測手法の宇宙天気予報への応用
hacarus
0
1.5k
Other Decks in Programming
See All in Programming
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
810
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
140
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
140
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
380
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.6k
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
390
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
360
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
260
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
230
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
320
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
4 Signs Your Business is Dying
shpigford
187
22k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.6k
Designing for Performance
lara
611
70k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
400
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
340
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
470
エンジニアに許された特別な時間の終わり
watany
108
250k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
610
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Transcript
1 Dashでmyダッシュボードを作ろう ーpytrendsで見るコロナの感染拡大時期ー 奥田 華代 株式会社HACARUS
2 所属:株式会社HACARUS 肩書:データサイエンティスト 実務経験: • 生物系・医療系のデータ分析 • 実験データを管理する社内システムの開発 趣味:カフェ巡り、ホテルステイ、ボルダリング 好きな食べ物:パフェ
自己紹介
3 • 何を作ることにしたか • なぜ作ることにしたか • どのように学習を進めたか ◦ Dash ◦
Pytrends • どのように作り進めたか • 作ってどうだったか ◦ 可視化したデータの考察 ◦ 苦労した点 今日話すこと
4 • Dashやpytrendsのチュートリアル的な話 ◦ インストール手順や起動手順 ◦ コンポーネントの使い方や入出力の方法などの基本技術 ◦ 理由:時間がないため •
データ分析の話 ◦ 可視化したデータを使って未来を予測するというような機械学習的な話 ◦ 理由:今回はデータの可視化に焦点を当てておりフォーカスから外れるため 話さないこと
5 • 誰かがDashを使うきっかけになれば ◦ 知っているけど使ったことのない人は多いはず • 他の人がどのようにアプリ開発の学習を進めているのか、どこで苦労したのかを共有して、話の ネタになれば 発表のモチベーション
6 何を作ることにしたか
7 検索トレンドを可視化する ダッシュボード ・Googleトレンドのデータを使用 ・コロナの感染拡大時期との関連を表示
8 なぜ作ることにしたか
9 • 業務で簡単な分析や図表の可視化ができる簡易ツールを作ることになり、以下の条件を満たす ツールを探していた ◦ 学習コストが小さい ◦ 短時間でそれなりのものができる ◦ Pythonライブラリ
• StreamlitとDashの2つが候補に挙がり、業務ではより簡便な Streamlitを使うことに 業務で簡易アプリを作るツールを探していた Dashは不要になったけど・・・
10 • 以前から検索キーワードのトレンドを自分で可視化してみたかった 例)プログラミング言語の人気ランキング Dashの使用感を確認しておきたい
11 • https://trends.google.co.jp/trends/?geo=JP • 検索トレンドを表示する • 指定期間に検索キーワードがどれくらい検索さ れたかの推移を可視化する Googleトレンドとは
12 • 検索キーワードのトレンド ◦ 人気度の動向 ◦ 地域別のインタレスト ◦ 関連キーワード ▪
注目(検索頻度の増加率が大きい) ▪ 人気(検索頻度が高い) • 最近の急上昇ワード • 年ごとの急上昇ワード Googleトレンドの機能
13 • 良かった点 ◦ 本家だけあって使いやすい ◦ 確認したいワードや比較ワードを登録しておける • あるといいなと思った機能 ◦
キーワードを5つ以上比較できる ◦ 人気度の動向で急激な変化を見せている時期に絞って関連キーワードを検索できる Googleトレンドを使ってみて 後者の機能をDashとpytrendsで実装してみよう
14 どのように学習を進めたか
15 • PHPでWebアプリを作ったことがある • RのshinyやVue.js、PythonのKivyでデスクトップアプリを作ったことがある • Pythonはずっと使っている • Dashは名前は知っていたが使ったことはない •
pytrendsも使ったことがない 作り始める前の知識・技術レベル つまり、Dashとpytrendsについては何も知らない
16 • https://plotly.com/dash/ • データを可視化するダッシュボードを作 るフレームワーク • インタラクティブに動作するグラフを簡 単に埋め込める •
商用版と無償版がある Dashとは
17 1. 公式チュートリアル a. インストール、起動方法、コンセプト等、基本事項を確認 b. チュートリアルに沿って実際に作って動かしてみる 2. 公式ギャラリー a.
どんなものが実装できるのかを知る 3. Qiitaのキーワード検索結果 a. 見出しに目を通しす b. LGTM数や投稿時期も確認しつつ参考になりそうな記事をピックアップしておく 4. 作り進めながら必要なタイミングで各種コンポーネントの APIドキュメント Dashの学習の流れ
18 1. 公式チュートリアル a. インストール、起動方法、コンセプト等、基本事項を確認 b. チュートリアルに沿って実際に作って動かしてみる 2. 公式ギャラリー a.
どんなものが実装できるのかを知る 3. Qiitaのキーワード検索結果 a. 見出しに目を通しす b. LGTM数や投稿時期も確認しつつ参考になりそうな記事をピックアップしておく 4. 作り進めながら必要なタイミングで各種コンポーネントの APIドキュメント Dashの学習の流れ 難易度が不明+自分の興味がどれくらい続く か分からないため、本は買わずにWebのリ ソースだけで進める APIドキュメントに目を通さなくても何ができそう か概ね把握できる。自分では考えつかなかった 見せ方を知れる 便利機能やつまづきポイントをまとめた記事を 先にみておくと、開発効率が格段にアップする
19 • Github • Googleトレンドからデータを取得する非公式 API • Googleトレンドのすべての機能が実装されている • 制約
◦ 公式APIではないため、頻繁にアクセスできない ▪ スリープを少し長めに取る(10秒程度) ◦ 最大5つのキーワードのデータしか同時取得できない(公式と同じ) • 学習の流れ ◦ 1、2本まとめ記事を読む→Google Colabで使用感の確認→Githubのドキュメント pytrendsとは
20 どのように作り進めたか
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)
22 • https://dash-bootstrap-components.opensource.faculty.ai/ • Bootstrapスタイルのコンポーネントライブラリ • まだスタイルは本格的に整えないが、見た目のきれいな方が創作意欲が沸くので • 色んなテーマがあるので気分に合わせて dash_bootstrap_componentsを導入
import dash_bootstrap_components as dbc app = Dash(__name__, external_stylesheets=[dbc.themes.VAPOR]) … dbc.コンポーネント名([]) これだけで使える!
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を使って配置決め
24 dbc. 設定ボタンやグラフなど見た目の要素を追加 dbc.Input dcc.DatePicker Range dbc.Checklist dbc.Button dbc.Switch dcc.Graph(空のグラフを配置)
25 ブラウザからの入力を受け取る dbc.Input( id="keyword", # コンポーネントのID type='text', # テキストフォーム value='virus',
# 初期値 ) ……… @app.callback( Input(‘keyword’, ‘value’), ) def get_keyword_trend(kw): # トレンド取得のコードを書く dbc.Input ①入力を受け取るコン ポーネントのIDを指定 ②コンポーネントのどの値を受け取 るかパラメータ名で指定 ③どういう引数名で受 け取るか指定
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する
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’] -> 注目ワード
28 スタイルを 調整して完成
29 可視化したデータを読む
30 • 対象地域:日本、アメリカ、イギリス、南アフリカ • 検索キーワード:virus • 対象期間 ◦ コロナが最初に流行し始めた時期から現在まで: 2019-08-05
- 2022-08-05(3年) ◦ 最近の動向:2021-08-05 - 2022-08-05(1年) • 何をみるか ◦ 対象期間の違いによるトレンドの違い ◦ 地域の違いによるトレンドの違い 対象地域、検索キーワード
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ヶ月に相当する時期をハイライトで可視化 これまでのコロナ感染拡大時期
32 • 第1波の期間の検索頻度は他の時期の比ではない • 短い期間で見ると他国で先に検索頻度が高くなっていることが多い • 検索トレンドをみておけば次に流行りそうなウイルスを早めに知れるかもしれない 読みとったこと
33 作ってみて
34 • Loading中であることを示すSpinnerを最前面に配置する ◦ dash_loading_spinnersを使用(見た目も#でかわいい) • 間隔の調整 ◦ 追加のCSSを作りたくないので ◦
カード内の調整:html.Div([], style={'marginBottom': '1em'}) ◦ Row間の調整:html.Br() 苦労した点
35 • Dashは簡単 ◦ プログラミング経験のある人なら Dash初心者でも1日〜数日でできそう ◦ Jupyter上でも使えるので通常のデータ分析の中に組み込める • 公式の日本語ドキュメントはないが、アプリ開発をしたことのない人がコンポーネントや
callback の概念をさらっと知るのに良さそう ぜひ使ってみてください! 感想
36 ご静聴ありがとうございました!