7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ノンエンジニアでもできる!無料でデータ分析クラウド環境を構築してみる

Last updated at Posted at 2017-12-26

ノンエンジニアでもできる!無料でデータ分析クラウド環境を構築してみる

注意! この記事はQiitaの画像投稿制限を突破するために無理やりscrapboxから移管させた記事です。鋭意修正中ですが、まだ一部、見辛い箇所があります。

ImageImage

この記事について

  • 誰でもすぐに分析環境を作れる・運用できるようになることを目的とした記事です。
  • Google Cloud Platform, クラウドの無料機能をフル活用し、無理やり環境を作ります。
  • クレジットカードを登録せずに使える特殊VMに分析環境をデプロイし、利用していきます。
  • この記事は個人の分析環境を扱います。チーム版は別途記述します🙇
  • 非エンジニアの方でも(テンプレートを用いて)色々な分析が出来るように、整備していきます💪
扱うソフトウェア
まずはリスク & その対策の説明
  • 意図しない課金の可能性:クレジットカードを登録しないことで防ぎます。
  • 環境構築でPCを壊す可能性:クラウドサービスを使うことで防ぎます。
この記事でやること
  • クラウド環境にサインイン
  • 分析環境を作成
  • BigQueryのデータを分析&可視化
  • Google Analyticsのデータを分析&可視化

Googleアカウントを作成

よしなに

GCPコンソールを開く

https://console.cloud.google.com/home/dashboard

サインインして開ければOK

Image

GCPプロジェクトを作成する

https://console.cloud.google.com/projectcreate

無料枠だと一人10つまで。プロジェクト名は適当なもので大丈夫です。

例:my-google-datalab

Image

課金されないことを確認する

https://console.cloud.google.com/billing/linkedaccount

  • 「お支払い | 課金 | このプロジェクトには請求先アカウントがありません」と表示されることを確認する。
  • 請求先アカウント設定でクレジットカードを登録すると、いくつかの機能が解放されるが、無料使用範囲を越えると請求が開始してしまうため、登録しないこと。
蛇足
  • GCPには、個人の課金状態について以下の4つがある。

    1. 請求先アカウントが無い状態 (無課金)
    2. 請求先アカウントがあり、3 or 6ヶ月の試用範囲状態 (無課金)
    3. 請求先アカウントがあり、完全にプロジェクトをマネージして、無課金に収まるように外部アクセス(SSH)すらも遮断した状態 (無課金)
    4. 請求先アカウントがあり、普通に使っている場合 (課金)
  • GCEなどのマネージVM管理は2以降でないと使えない。

  • 本来Google Cloud Datalabなどの分析環境はGCEが必要なため、GCEが使えなければ利用できない。

  • 2以降の無料枠の説明

  • BigQuery、CloudShell、CloudStorage、CloudFunctions、Firebaseは1で利用可能なため、こちらを利用していきます。

  • Google CloudShellと呼ばれる1ユーザ1VMの「プロジェクト操作用VM」に、無理やりDockerでDatalabをデプロイして使うのが今回の趣旨になります。

Image

CloudShellを開く

https://console.cloud.google.com/cloudshell/editor

蛇足
  • クラウドシェルマシン(VM)は一時的なものであり、約30分インタラクティブに使用しないとホームディレクトリ以外のVMのファイル状態がリセットされます。

  • システム全体の変更はこれを超えて継続することはありません。

  • ホームディレクトリは1ユーザ共通(プロジェクトを跨いでも同期)で、5GBまでのデータを格納できます。

  • クラウドシェル サービスにはSLAは適用されません。(いつ落ちても文句は言えません)

  • マシンタイプはg1-small相当

  • 1 基の仮想 CPU と 1.70 GB のメモリを備えたマシンタイプ。

  • Unixbenchは1010スコア程度

  • 初期状態だとOrion(ソースエディタ&ファイル管理)で隠しファイルが表示されません。

  • 気になる場合は歯車ボタン->GENERAL->FILES->Filtered Resourcesから「, .*」の記述を消すことで表示できます。

Image

DockerでGoogleDatalabローカル版をCloudShellにインストールする

docker run -it -p "8081:8080" -v "${HOME}:/content" -e "DATALAB_DEBUG=true" gcr.io/cloud-datalab/datalab:local
蛇足
  • GCR(同じデータセンタ)からDatalabのコンテナイメージ(1GB程度)を引っ張ってくる。
  • ダウンロードはそこそこ早い(20秒)
  • 展開はそこそこ遅い(90秒)

Image

Google Cloud Datalabでやっていく💪

  • Google Cloud Datalabとは
  • 「ソースコードを書くとその場で実行して、結果を一枚のマークダウンにまとめて表示できる」というデータ分析開発者が使う環境(Jupyter)を、Googleが拡張したオープンソース分析環境のこと。
蛇足

Jupyterには下記3つの大元プロジェクトがある。

  • Jupyter Notebook : 本家。Pythonのソースコードをその場で実行できるメモ帳ソフトウェア。
  • Jupyter Lab:本家に代わる最新版。タブUI等が入った。
  • Jupyter Hub:本家を複数人で使えるようにユーザ制御などが入ったもの。

Google Cloud DatalabはNotebookを拡張して、UIを解りやすくし、マジックコマンドを増やしたもの。

Image

CloudShellからGoogleDatalabを開く

  • 開き方
    1. https://console.cloud.google.com/cloudshell/editor ページ右上の「ウェブでプレビュー」ボタンから、ポートを8081に変更して開く
    2. https://console.cloud.google.com/cloudshell/editor ページ下側の黒い部分に「Open your browser to http://localhost:8081/ to connect to Datalab.」というテキストが流れるので、localhost:8081 をクリックすると勝手にlocalhostを専用URLに解釈し直して別タブで開く
  • 初回は開く際に10秒ほどかかります。

Image

Notebookを開く

  1. docsというフォルダが表示されているので、左クリックで開く
  2. Hello World.ipynbというNotebookがあるので、左クリックすると、別タブで開く
    Image

'Hello!' 環境構築 完了🎉

  • 下記が記載されているテキストフォームを選択する。
# Code cell ready to be run...
print('Hello!')
  1. この入力欄を選択しつつ、Shiftキーを押しながらエンターを押す。
  2. 入力枠が次に移動する、そのまま待機
  3. 1秒ほどで実行中のローディングバーが表示され、2秒ほどでHello!がプリントされる。
  4. これでPython実行環境の準備が完了

Image

GCPプロジェクトとの疎通確認を行う (失敗でOK)

  • ページ上部の「<> Add Code」を押し、入力欄を表示させ、下記内容を入力する。
  • sqlマジックコマンド
%sql
SELECT 1;
  1. 入力したらShiftキーを押しながらエンターを押す。
  2. 1秒ほどで実行中のローディングバーが表示され、2秒ほどで結果が帰ってくる。
  3. まだプロジェクトに接続していないため、プロジェクトが見つからないというエラーが出れば正常。
  • (プロジェクト接続後にもう一度繋がるか試し直します。)
  • コードをコピー&ペーストする際、SELECT 1;の前 (行頭) に空白が入っていると、正しく実行されないので注意が必要。

Image

GCPプロジェクトと接続を行う

  • プロジェクト一覧を表示する

  • projectsマジックコマンド

  • %projects list

  • 上記コマンドで作成済みのプロジェクトidが表示される。idをコピーペーストして接続する

  • projectsマジックコマンド

  • %projects set ${PROJECT_ID}

蛇足
  • 本来Datalabローカル版はGCPプロジェクト接続のために、Datalab画面右上のメニューからのGoogleユーザサインインが必要。
  • しかし、CloudShellは内部的にユーザ情報を保持しているためサインインが不要となる。

Image

GCPプロジェクトとの疎通確認を行う

  • sqlマジックコマンド
%sql 
SELECT 1;
  • 結果が表示されればOK、BigQueryでSELECT 1;が実行されている。

Image

Notebookの変更を保存して、別のNotebookを開く

  1. Ctrl-Sを実行し、ファイルの変更を保存する。
  2. 画面左上の「Google Cloud Datalab」のボタンを押し、ファイル一覧へ戻る。
  3. datalabディレクトリ、docsディレクトリを開き、Hello World.ipynbのファイルがあるページに行く
  4. ここで、「+ Notebook」ボタンを押し、新規Notebookを新しいタブで開く

Googleが公開しているオープンデータを表示してみる

  • Chrome User Experience Report : Chromeから収集したデータを用いた、ユーザーエクスペリエンスレポート
  • sqlマジックコマンド
%sql -d standard
 
WITH first_paint AS (
  SELECT
  origin,
  effective_connection_type.name AS connection,
  form_factor.name AS factor,
  first_paint.start AS first_paint_start,
  first_paint.end AS first_paint_end,
  first_paint.density AS first_paint_density
  FROM `chrome-ux-report.chrome_ux_report.201710` AS r
  CROSS JOIN UNNEST (r.first_paint.histogram.bin) as first_paint
),
max_density AS (
  SELECT origin, connection, factor, MAX(first_paint_density) AS first_paint_density  FROM first_paint
  GROUP BY origin, connection, factor
)
 
SELECT
  f.*,
  CAST(f.first_paint_density AS STRING) AS string_first_paint_density
FROM max_density AS m
LEFT JOIN first_paint AS f
ON m.origin = f.origin
AND m.connection = f.connection
AND m.factor = f.factor
AND m.first_paint_density = f.first_paint_density
WHERE m.origin LIKE "%co.jp"
ORDER BY m.first_paint_density DESC
  • 内容は、co.jpサイトの接続方法・端末種類でグルーピングした後に、更にコンテンツのファーストペイントスピードでグルーピングし、その中で割合が多かったものを表示。
  • つまり、各サイトの大体のファーストペイントの速度を追っています。
  • コード内容(クエリ)に大きな意味はありません。
    Image

Googleが公開しているオープンデータを可視化する

  • データをDatalabに格納する専用マジックコマンドがあるので、それを用いて、BigQuery -> Google Chartsでデータを可視化
  • 単純なグラフでサイト毎のファーストペイント開始・終了を可視化する
  • データはchrome_ux_reportという名称で移動
  • クエリは前回と同じもの
  • bqマジックコマンド
%bq query --name chrome_ux_report
 
WITH first_paint AS (
  SELECT
  origin,
  effective_connection_type.name AS connection,
  form_factor.name AS factor,
  first_paint.start AS first_paint_start,
  first_paint.end AS first_paint_end,
  first_paint.density AS first_paint_density
  FROM `chrome-ux-report.chrome_ux_report.201710` AS r
  CROSS JOIN UNNEST (r.first_paint.histogram.bin) as first_paint
),
max_density AS (
  SELECT origin, connection, factor, MAX(first_paint_density) AS first_paint_density  FROM first_paint
  GROUP BY origin, connection, factor
)
 
SELECT
  f.*,
  CAST(f.first_paint_density AS STRING) AS string_first_paint_density
FROM max_density AS m
LEFT JOIN first_paint AS f
ON m.origin = f.origin
AND m.connection = f.connection
AND m.factor = f.factor
AND m.first_paint_density = f.first_paint_density
WHERE m.origin LIKE "%co.jp"
ORDER BY m.first_paint_density DESC
  • chartマジックコマンド

  • %chart stepped_area --data chrome_ux_report --fields origin,first_paint_end,first_paint_start

  • このオープンデータに登録されているco.jpサイトの大体のファーストペイントは、400ms頃に開始し、600ms頃に終わっていることが多いことが視覚化される
    Image

WIP

この記事で更に言及したい・できそうなこと

  • コードレスに分析が出来るように、コピペテンプレート(ipynb)を公開する
  • データの追加方法
  • BigQueryデータ
  • Google Analyticsからのデータ
  • CSVファイル
  • Google Cloud Storage
  • 外部公開(http)プログラムとの連携
  • GAE
  • Cloud Functions
  • Firebase etc...
  • Dockerの再起動・終了方法
  • 環境のリセット方法
  • Notebookの共有方法
  • Git管理方法

データ分析手法をまとめたipynbの公開

  • 決定木
  • ランダムフォレスト
  • k近傍
  • SVM
  • ロジスティック回帰
  • Linear SVC
  • パーセプトロン
  • Stochastic Gradient Decent
  • ナイーブベイズ

Google Chartsや可視化手段をまとめたipynbの公開

  • ヒストグラム

  • ヒートマップ

  • 散布

  • 階層的クラスタリング

  • 棒グラフ・線グラフ

  • ネットワークグラフ

  • 次元データ

  • 箱ひげ図

  • 行列

  • %chart

  • graphviz

  • matplotlib

  • seaborn

  • plotly

  • tensorboard

BigQueryオープンデータを用いたipynbの公開

  • Chrome User Experience Report by Google Developers
  • Stack Overflow BigData

Kaggleオープンデータを用いたipynbの公開

  • RMS Titanic 死者生存者判定データ
  • kaggleの初学者向けデータ

機械学習フレームワークを呼び出すipynbの公開

  • google.datalab.ml Module
7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?