PythonでGoogle検索のデータを分析する➁

GoogleTrendsのデータをPythonで分析するパート2です。Pythonという意味ではパート➀とほぼ内容は同じです。今回は最近再度話題になっている仮想通貨のデータを取得して分析してみますという内容です。足元のビットコイン価格は200万円あたりで、2017年のビットコインバブルの高値圏で推移しています。果たして足元の価格上昇は2017年のバブルの様に崩壊するのか。それともまだまだこれからなのか。Google検索のデータによりバブル感、過熱感を推し量ろうと思います。

分析方法

Pythonのライブラリ「pytrends」を使って分析します。
まずはライブラリのインポート。

取得したデータをデータフレームとして扱うための「pandas」。可視化ライブラリの「matplotlib」。
そしてGoogleトレンドからデータを取得するAPI「Pytrends」。

続いてビットコイン価格を取得しておきます。データはInvesting.comでダウンロードできます。

続いて調べたい検索ワードをkw_listとしてリスト形式で指定します。今回はBitcoinとしています。続いて、検索条件を指定します。先ほどの検索ワードとしてkw_list。timeframeで期間の指定。今回は直近5年。geoで国を指定しますが、世界のデータを取得するため空白で指定しています。続いて、取得したデータをデータフレームとして格納します。

続いて、Google検索のデータとビットコイン価格をグラフ表示します。ここではmatplotlibを使用して2軸のグラフを描いています。

結果は図のようになりました。ビットコイン価格は2017年末の価格に迫りつつあるのに、Google検索数は当時の2割程度。チャートには過熱感はありますが、世の中盛り上がりに欠けています。これはまだまだバブルではありません。だって注目しているのは一部の人だけですから。これは、、価格崩壊するのはまだ先と考えてよいのではないでしょうか。

今後、2017年の様に誰もが注目することが再び起こるとするならば、ビットコインの価格は高値更新がされる事でしょう。

※この記事は、ビットコインへの投資を推奨するものではありません。筆者は仮想通貨を全くやっておりませんので、責任は負いかねます。

ノンプログラマーでもできるPythonでWebサイト構築②

ノンプログラマーでもできるpythonでwebサイト構築①」の続きです。

今回は、サイトのデータ収集部分、スクレイピングについて紹介していこうと思います。スクレイピングにはPythonのライブラリである「Requests」と「Beautifulsoup」を使用しています。「Requests」はHTTPライブラリと呼ばれるもので、簡単に言えばホームページを見るのと同じようにPythonからインターネット経由でホームページに接続してくれるイメージです。以下の通り簡単に接続ができてHTML形式でデータが得られます。

先物手口情報はJPXのサイトから取得します。いきなりですが筆者が最初に躓いた点がここです。サイトをご覧いただければわかるのですが、エクセルが4つ掲載されていて、エクセルのURLが毎日変わるのです。いつも同じであれば、直接エクセルのアドレスを指定すればよいのですが、そういう訳にも行かず、次の手順を踏んでいます。

  1. urllib.requestでエクセルが掲載されるページのHTMLを取得
  2. 取得したHTMLからBeautifulsoupを使って、該当の4ファイルのURLを特定
  3. requestを使って4ファイルをダウンロード

初めにsoupというBeautifulsoupオブジェクトを作成します。そしてsoupからHTMLのaタグの中を条件検索して該当するhrefを取得しています。取得したいデータがどのタグに含まれているのかなどは事前にサイトから右クリック検証で該当部分を調べておきます。(ブラウザはChromeを推奨)

あとは各URLを設定して、requests.getで一つずつファイルをダウンロードしていってます。このサイトでは先物手口以外にも日経平均株価や建玉データ、ETF価格など様々なデータをこのスクレイピングを用いて取得しています。すべては紹介しませんが、上記のやり方をベースに少しアレンジするだけで可能となっていますので、ぜひチャレンジしてみてください。

サイトの仕組み的に次の工程は、ダウンロードしたデータを扱いやすいように加工して、データベースに溜め込むという工程ですが、加工は地味な作業をひたすら行うだけで、特に気づきはないかと思いますので、次回の記事はデータベースへの保存のあたりを掲載しようと考えています。

PythonでGoogle検索のデータを分析する➀

いよいよ米大統領選。
トランプ対バイデンです。
マーケットはバイデン大統領を織り込みに行っているなどと言われていますが、果たして本当にそうなのか。いやそうなんでしょうけど、、どんでん返しはないのか。疑ってしまいます。

Google検索のデータを見てみましょう。ということでPythonで分析してみます。

※この記事は大統領選の予想をするというよりは、Google検索のデータをPythonでいじってみましたという内容が主です。大統領選が気になるという方は、結果の部分だけお読みください。

分析方法

Pythonのライブラリ「pytrends」を使って分析します。
まずはライブラリのインポート。

取得したデータをデータフレームとして扱うための「pandas」。可視化ライブラリの「matplotlib」と日本語表示用の「FontProperties」。
そしてGoogleトレンドからデータを取得するAPI「Pytrends」。

続いて調べたい検索ワードをkw_listとしてリスト形式で指定します。今回はトランプとバイデンとしています。続いて、検索条件を指定します。先ほどの検索ワードとしてkw_list。timeframeで期間の指定。今回は直近7日間。geoで国を指定します。続いて、取得したデータをデータフレームとして格納し、グラフで表示します。

下馬評通り足元ではバイデンの方が多く検索されて盛り上がっていることがわかります。
ただ、こちらは日本での検索結果。続いて米国の検索データも確認します。先ほど"JP"で指定した部分を"US"に変更するだけです。

ん…?23日にバイデン優位となって以降トランプの方が上回ってます。そもそもの検索数が現大統領の方が多いというのはありますが、それにしても盛り上がってすらいないようです。続いて期間を3か月にして見てみます。"now 7-d"を"today 3-m"に変更して実行します。

こう見るとバイデンがじわじわと注目を浴びてきているのはわかります。ただトランプも負けてない。

続いて、大統領選は州ごとの選挙ですので、絶対数で見るよりも州ごとにみましょうという事で、州別に検索数を確認してみます。こちらは時系列にも取れますが、若干面倒なので、7日間のデータを一括で取得します。

州別のデータをデータフレームとして格納して、トランプの検索比率大なる順でソートします。

取得したデータには日本語表記で州名が記載されているので、フォントを設定します。※jupyternotebookのディレクトリ内にmeiryo.ttcファイルをコピーして置いてあります。
続いて、matplotlibでfigureサイズを設定して、横バーグラフを描きます。最初にトランプの比率、続いてバイデンの比率。
最後に州名をy軸に、タイトルを設定、凡例を設定して終了です。

おー。州ごとに出た。ふむふむ全体的にトランプの方が多いけど、やはり州によって違いますねー。
って、ん…?民主党の州がトランプを検索、共和党の州がバイデンを検索…
ふむ、なるほど。全然わからない。
自分の感覚的に応援しない人の事なんて調べる気にならないけど違うのか。

ちょっと州ごとのデータは見方がよくわからないけど、時系列データなんか見るとあっさり決まらないような気がしますね。
更に郵便投票などもありでグダグダ決まらず株価軟調。そこが仕込みどきですかねー。バイデン大統領決定で金利高、株やや高、ドル安なんてことを想定しておきますか。

ノンプログラマーでもできるPythonでWebサイト構築➀

はじめに

筆者はちょくちょく株の売買を行っていて、その参考データとして証券会社別の日経先物の売買状況を毎日集計しています。

このデータが毎日エクセルで公開されている訳なのですが、集計が非常に大変。
最初はエクセルでVBAを組んで収集していましたが、夜家に帰ってからパソコン立ち上げてVBA実行して、グラフ更新して結果見てtwitterでつぶやいて、、とか毎日毎日大変な作業でした。(最後のは趣味ですが…)

自動で集計してサイトにアップしてくれるシステムがあれば帰りの電車で確認出来て便利なのになぁと日々思ってました。

ってことで、自分で作成することに。

製作期間は半年…

毎日仕事終わってから1時間程度調べ物や作業をしてこつこつ。

でも一応なんとか形になって、想像通りなものができました。

作っていく段階で思ったのが、Pythonってホントに何でもできちゃうんだなと!ホントにすごい便利だなと!

調べれば調べるほど色々なものができる!…ってことで、私は半年間もかかってしまいましたが、この半年間で学んだPythonのすごいところ、ここはつまずいた、ってところを紹介していきたいと思います。

自分の備忘録的な面もありますが、これからシステムを作りたいという人の参考になれば嬉しいです。

サイトの仕組み

まずはサイトの仕組みを紹介します。
全体の概要はこんな感じ。

  1. スクレイピング
  2. データ蓄積&整形
  3. 可視化

◆スクレイピング

まずはデータ収集。
これはスクレイピングという技術を使っています。

私たちがいつも見るwebサイトは、HTMLというプログラムから作られています。右クリックしてソースを表示するとHTMLが表示されます。そのHTMLからデータを取得するのがスクレイピングです。

スクレイピングは、Pythonの「Beautifulsoup」「Requests」というライブラリを使用しています。具体的なやり方などは、後々紹介していこうと思います。


◆データ蓄積&整形

続いて、データ整形。
自身のPC内で取得したデータを整形する工程を踏んでいます。

取得したデータ形式は様々で、テキストのものもあればエクセル形式のものもあったりするので、Pythonの「Pandas」というライブラリを主に使用して、使いやすいように加工してます。

また、加工したデータはMySQLに保存して時系列のデータとして使えるように蓄積していってます。
データベースのMySQLについても、Pythonで操作することが可能で、「SQL Alchemy」というライブラリにより操作しています。


◆可視化①:matplotlib

続いて可視化です。
MySQLに溜め込んだデータやPandasで加工したデータをグラフ化します。
Pythonの可視化ライブラリは沢山あるのですが、私は「matplotlib」と「plotly」を使用しています。

matplotlibはオプションが多く、様々な種類のグラフが美しく描けるライブラリです。
サイト内の先物手口のグラフ(積み上げ棒グラフに折れ線グラフを重ねたグラフ)はmatplotlibで出力しており、少し慣れれば非常に使い勝手が良いライブラリです。


◆可視化②:plotly

可視化のライブラリの二つ目はplotly。
plotlyはインタラクティブなグラフが書けるライブラリです。

インタラクティブなグラフとは、サイト上で動かせるグラフの事です。

このサイトではオプション建玉のページのグラフをこのplotlyで作成していて、クリックすると数値が出たり拡大縮小することができます。
このグラフはjpgのような画像形式ではなく、javascriptsベースで作成されており、少し面倒な処理をしなくてはなりません。

面倒な処理を…そこは断念して、このサイトでは作成したグラフを「Chart studio」に登録して、サイトとリンクを繋ぐことで掲載しています。ここも追々紹介できればと思っています。




全体の概要はこんな感じです。
すべて一連のプログラムになっていて、ローカルのタスクマネージャーにより、時間になったらプログラムが起動されてWordPressが更新される仕組みになっています。

続き「ノンプログラマーでもできるPythonでWebサイト構築➁」へ