nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | 【サポーターズCoLab勉強会】初めてのGoogle Datastudio #spzcolab

はじめに

だんないよ、nikkieです。
サポーターズさんのGoogle Datastudioの勉強会に行ってきました。
PowerBIを使った経験があるのですが、Google Datastudioも同じことができるのか気になっていました。

 

勉強会の概要

【サポーターズCoLab勉強会】初めてのGoogle Datastudio - サポーターズCoLab

イベント概要

Google Datastudioとは、大量のデータを美しく可視化する
Google Cloud Platformから提供されているデータビジュアライゼーションツールです。
多様なデータソースにアクセスし、魅了的なグラフやチャートを簡単に作成できます。
可視化のためにコードやクエリは不要。共同編集もでき、権限も簡単に管理です。
あなたの管理するエクセルデータ、溜まり続けたログなど、
Datastudioを活用することで、新たな活用の緒を見つけることが出来るかもしれません。

Google Datastudioは触ったことがなかったので、以下の記事を確認してから参加しました。

Google Data Studio を使ってみよう!メリットや超初心者向け使い方・Analyticsとの連携方法をご紹介します - ウェブ企画ラボ

勉強会のデモで使ったデータは以下からダウンロードできるようです。

https://public.tableau.com/s/resources

タイタニック号の乗客名簿
マグニチュード 6 以上の地震

 

勉強会でわかったこと

  • Google Datastudioはデータの可視化に特化したツール
  • ブラウザ上でデータ可視化
  • カスタムフィールドやMySQLのビューを組み合わせて使う

データの可視化に特化

BIツールの4機能

Datastudioはレポーティング機能とダッシュボード機能を提供。
→データを可視化して共有しやすくすることが得意

ブラウザ上でデータ可視化

  • レポート:可視化されたものを見るもの
  • データソース:可視化されたものがどこにあるかを示す(例:Cloud SQLに接続)

データソースを作成した後、レポートに追加する。

フィルターを使えば、データソース(=テーブル)を条件で絞って動的に表示できる。
MySQLでselect whereするイメージ)

カスタムフィールドやMySQLのビューを組み合わせて使う

  • カスタムフィールド使用例:
    Datastudio専用の構文を使い、男性なら1、そうでなければ0を入れたフィールドを追加
    →フィールドの合計をとると、乗客のうちの男性の人数を数えられる。
    (最近できるようになったらしい)
  • MySQLのビュー
    データソースとして追加し、レポートに添付する。
    ※データソース同士のJOINはDatastudio上ではできないようなので、JOINしたビューを用意する必要がある
    表示させたいものをデータソースにする必要がある

 

感想

Datastudioは探索的データ解析(*)のツールとして使えるのかが気になっていましたが、
現時点では厳しそうという印象です。
(*)機械学習でデータの傾向を把握すること。BIツールの4機能ではデータマイニングにあたりそう

PowerBIでは、男性/女性の人数の円グラフで男性の側をクリックすると、
レポートの他のグラフも男性についての情報に動的に変わります。
これはDatastudioでもできるだろうと期待していたのですが、現時点ではできないようです。
Datastudioを使ってデータの傾向を把握するというよりは
傾向を把握済みで何を可視化するべきかわかっているデータの可視化に使うツールのようです。

現時点で探索的データ解析のツールとして最有力なのがPowerBIです。
今後はOSSのRedashを触ったり、Jupyterでの可視化を練習したりして、
これだという探索的データ解析ツールを見つけたいと思います。

今回の勉強会関係者と出席者の皆さま、貴重なお話とそれを聞く機会をありがとうございました。

イベントレポート | 【サポーターズCoLab勉強会】Circle CI 入門 #サポーターズ

はじめに

だんないよ、nikkieです。
手動テスト中心の社風に辟易しているので、
CI入れたら業務楽になるのかなと「Circle CI 入門」に話聞きにいってきました。

 

勉強会の概要

イベント概要

最近CI環境をとりいれている企業も増えてきていると思います。

GitHub / BitBucketのPUSHに反応して、色々出来るやつです。

TravisCI,Jenkins,CircleCI・・・などたくさんあるCIサービスの中から今回は

CircleCIを重点的にお話します。

こんな方にオススメ

  • CIをやってみたいけど、やったことない方

  • テストコードやったことないけどやってみたい方

  • そもそもCIって何おいしいのって方

 

資料

スライド

speakerdeck.com

以下、勉強会中のメモをもとに書いていきます。
 

CIとは?

XP

 

Circle CIとは

  • CIを行う環境を提供するSaaS
  • できること:GitHubやBitbucketとの連携、自動テスト、通知、自動デプロイ
  • 料金は月1500分まで無料。(無料枠は1コンテナのみなので並列に実行できない)

 

サンプルコード解説

  • CircleCI設定ファイル:.circleci/config.yml
  • jobの中で行うコマンドを書いていく
    例:ソースコード取得→Dockerコンテナ立てる
    →DB用意する→テスト実行→結果を表示

 

他のCIツール

  • Jenkins CIのデファクトスタンダードと言えそう。
    インストールして使う。最近はSaaS版も出た
  • TravisCI
    プライペートリポジトリ版が有料(割高)
    OSSで使われていることが多い(設定ファイル参考にできる)

 

CI構築するときに考えること

  • CIツールはなんでもできるので、どのくらいで始めるかが重要
  • 目的・どういうことをやるかを考える(lintにとどめるのか、単体テストまでやるのか)
  • バージョン管理システムによってどのCIツールを使うかが決まってくる
  • CIを動かす粒度を考える
  • CIを設定するコストメリットを考える
    テストが書かれていないコードにCIを導入するのは大変
    一番簡単なのはlinterを入れること。
    次のステップが単体テストのコードを書いて導入。テストを書いたことがないならテストを書くのに慣れることを目指す。

 

CircleCIまとめ

  • Dockerでやるから環境依存解決楽
  • SaaSだからインフラ維持コスト少ない(CircleCIの裏はAWSらしい)
  • CIを回すと便利だが、導入は少しずつ理解を得ていく

 

感想

PythonではDjangoとFlaskのサンプルが公式ドキュメントに用意されているので
触ってどんなものなのかを体験しないといけないですね。(分かった気で終わらせてはいけない)

Language Guide: Python - CircleCI

CircleCIにはDockerの知識がどの程度いるのか気になります。(つかむためにも触らないと)
講師の木村さんは2017年末にDocker勉強会の講師もされていたので、
Docker使えるとエンジニアとしてできることが違うんだろうなと感じさせます。
私、Dockerが使えるエンジニアになりたい。

CIのC(継続的)はわかるけどI(インテグレーション)ってなんだってところが実はスタートでした。
予習につまみ食いした『チーム開発実践入門』でおぼろげながらつかめました。
(読まないでいったらちんぷんかんぷんだったかも。。)

https://www.amazon.co.jp/dp/4774164283

 

講師の木村さん、そして運営・出席者の皆さま、
貴重なお話とそれを聞く機会をありがとうございました。

イベントレポート | Pythonもくもく自習室 #8 @ Rettyオフィス #rettypy

はじめに

だんないよ、nikkieです。
この週末はRettyさんの「Pythonもくもく自習室」に参加してきました。
 

もくもく会の概要

Pythonもくもく自習室 #8 @ Rettyオフィス - connpass

この勉強会について

週末の昼下がりに、Pythonに関するやりたいことを各自持ち寄り、ゆるゆると「自習」を進めていく会です。

  • 本を読む
  • PythonDjangoなどのチュートリアルをすすめる
  • コミュニティの作業や執筆etc...
  • 他の参加者と情報交換をしたり学んだり
  • おいしいご飯と共に楽しむ(?)

など、Python使いおよびエンジニアライフのオアシス&知見を身につける「自習室」としてゆるくご活用いただければと思います。

※初心者歓迎です!(なお,ハンズオンなどはありません)

2017年12月から毎月通っています。
おいしいご飯の場で色々教えていただけて助かっています。
今回は参加率が高く大盛況でした!

 

取り組んだこと

レコメンドシステムで使われる協調フィルタリングを実装してみました。
(人に説明できるまで理解するというのが目標でした)

協調フィルタリングアルゴリズムについて参考にしたスライド:

www.slideshare.net

勉強会の成果notebook
2018/03/10 Pythonもくもく自習室 #8 @ Rettyオフィス 成果発表:ユーザベースの協調フィルタリングの例を実装 · GitHub

 

実装に取り組んでの感想

numpyを使って実装するのははじめてでしたが、
ユークリッド距離は差を取ってlinalg.normで出せたのでロジック部分に集中できました。

スライドどおりのスコアにならなかったんですが、
スライドはあくまで説明のためのスコアということなんですね。

 

使ったスライドは評価が欠損した場合の処理が書いてあって、
実装する側にとってはわかりやすかったです。
ただ、評価の欠損がある(ユーザAのアイテム4への評価)ために、
似ているユーザが高く評価しているアイテムより
似ていないユーザが評価しているアイテム(=似ているユーザは未評価のアイテム)が
レコメンドされるという結果です。
「ユーザベース協調フィルタリングは似たユーザの評価で推測する」と説明するときに
違和感があるので、この欠損は埋めて説明するのがよさそうですね。
(欠損した評価を埋めると、似ているユーザの評価に一致することを確かめた)

 

もくもく会後に情報収集したところ以下のリポジトリを見つけました。

github.com

 

『情報推薦システム入門』という本には

ユーザ間の類似度には「ピアソンの相関係数
アイテム間の類似度には「調整コサイン類似度」

と書かれていました。(p.15, 19)
どちらの指標も評価の平均との差を考えているので、
高い評価しがちな人と低い評価しがちな人の評価が可能になっているそうです。

 

もくもく会感想

1月にLTした「Pillowでモザイクアート」のソースを使っている方がいらっしゃいました!

GitHub - ftnext/mosaic-art-python

400×400のサイズの画像にしか対応していなくて大変申し訳ございません。。。
自分のコードがほかの人の作りたいものを実現する一助になっていると知ることができ、
不完全な形でもアウトプットしてよかったと感無量です。
もっと使いやすくできるよう手を入れていきたいですね。
(numpyのlinalg.normは知っていれば色の「距離」の算出に使えましたし、
 2つの画像を比較する際に、コサイン類似度やピアソンの相関係数を使うこともできるのかなと妄想しています。。)

 

KaggleのRecruit RestaurantコンペのKernelを確認されている方がいらっしゃいました。
私も「探索的データ解析」(前処理でデータを可視化してどんな傾向があるか掴むこと)には不安があるので、その方と似た問題意識があります。
以下のKernelだと思うので、時間を取って見てみようと思います。

Surprise Me | Kaggle

 

自然言語処理でもくもくされている方が多かった印象です。
アニメネタで色々できそうな分野なので、業務とかモザイクアートとか調整して手を出したいところです。
トピックモデルの備忘録的リンク:

LDA for Pokemon analysis | haripo.com

 

運営者ならびに参加者の皆さま、今回も1日ありがとうございました!

 

イベントレポート | みんなのPython勉強会#33 前編 #stapy

はじめに

だんないよ、nikkieです。
「みんなのPython勉強会#33」のイベントレポートを2回に分けて送ります。(体力的な事情があります。。)
今回は個人的にありがたかった発表をピックアップします。

 

勉強会の概要

#33のテーマは
Python Fundamentals(Pythonの基礎体力)
基礎体力がテーマだったためか、前回より参加者が多かった感があります。
 
今回紹介するのはこちらの発表:

「入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜」
岩崎 圭 (@laughk, 株式会社SQUEEZE)

今やプログラミング入門書の種類は豊富で、その気さえあれば誰でも手軽にプログラミングの学習を始めることができます。
しかしながら「入門書を読んでみたけれど、自分で何ができるのか今ひとつわからない」「じゃあ何をしよう?がうまく見つからない」なんてことはありませんか?
今回は WebAPI を扱うことを例に、プログラミングの入門書を読んだ次の1歩を踏み出すための課題の見つけ方と手の動かし方を紹介します。

 

入門書を読み終わったらなにしよう?

入門書の次のステップとして「自分にとって実践的なコードを書く」というアプローチを紹介。
  • 普段自分がやっていることをネタにする
  • 登場人物の整理:誰に何をやってもらうかを書かないとコードは書けない
  • PyPIにある便利なものに頼る
  • コードを書き始めたら、コードの見た目にはこだわらずに、やりたいことをとにかく実現させる

普段自分がやっていることをネタにする

よく使うWebサービスがあるとネタにしやすい(起こることがイメージしやすいため)
今回はGitHubのプルリク一覧をSlackに通知してみる

登場人物の整理

第1段階:GitHub & Slack

WebサービスPythonでどう使うか→ Web API
(注)入門書でよく扱われているスクレイピングAPIがないときの最終手段

第2段階:GitHub API & Slack API

PyPIにある便利なものに頼る

PyPIAPI用のサードパーティライブラリが公開されていることが多いのでチェックする

登場人物 第3段階:PyGitHub & slackpy

ライブラリの使い方はドキュメントを確認する。ただし隅々まで読む必要はない。
触りを読んだら雑に動かしてみる。対話画面でガチャガチャいじる感じ
さらに細かな部分はドキュメントを読む。試すとドキュメント読むの組合せ

ここまで来てようやくやりたいことの概略が整理される。

  1. PyGitHubでプルリク情報取得
  2. 取得したプルリク情報整形
  3. 整形データをSlackへ(slackpy)

トライ&エラーでひたすらコードを書く
インタラクティブシェルで小さく小さくトライ&エラー 小さく理解していく
こまめにprintで変数の値確認

コードを書き始めたら

「きれいに書け」「テストコード書け」は最初のステップでは置いておく。
とにかく書いてみるを大切にする。

 

感想

  • 「作りたいものを作るんだ!」と趣味でPythonを触っているので非常に参考になりました。
    週末の#rettypyでスライドの内容を追いかけてみてもいいかも。
  • 登場人物を整理するという話、開発する中で取り入れたいです。
    何か作ろうと思ったらすぐググってライブラリを探していましたが、
    大元の使いたいものはWeb APIですもんね。ライブラリはそれをラップしているに過ぎない
  • ドキュメントの使い方(全部読まない。必要なところだけつまんで、手を動かす)というのは実感にあった感じです。
  • 入門書の次のステップできれいに書くことやテストコードは置いておくという話でしたが、
    そのあたりが気になる私は中級者へ向かっているのかなと思います。
  • PyPIでライブラリが見つからないときは、GitHubを検索するといいらしい。
    (Issueに試行錯誤の跡があったり何かしら見つかるとのこと)
    →モザイクアートも探してみよう
  • Pythonデバッグするには:import pdb

    あとで読む PythonデバッグTips - Qiita

 

懇親会 & LT 

印象的だったのは「アウトプットしよう!」というLTと「PyTorch」のLT。
PyTorchはディープラーニングフレームワークの中ではチュートリアルが充実しているそうです。

参加者の方とも色々お話しでき、懇親会は楽しかったです。
1月のモザイクアートLTで記憶ありますと声かけてくださる方もいらっしゃいました。
アウトプットさまさまですし、お声がけいただけるのは本当にありがたいです。

今回の勉強会関係者と出席者の皆さま、貴重なお話とそれを聞く機会をありがとうございました。

(後編は近日中にあげます)

 

イベントレポート | 実務で使う自然言語処理をする #サポーターズCoLab

はじめに

だんないよ、nikkieです。
「実務で使う自然言語処理をする」のイベントレポートをお送りします。

 

勉強会の概要

【サポーターズCoLab勉強会】実務で使う自然言語処理をする - サポーターズCoLab

イベント概要

今回のテーマは「実務で使う自然言語処理をする」。

(中略)

しかし、「ちょっとお試しでデータを調べてみる」などの用途にはディープラーニングで頑張るよりも、

もっと簡単にできることがあります。

今回は、「実務のための自然言語処理」を掲げて、「まず第一歩」に踏み出す方法を話します。

具体的にはPythonで次のことをします。

  • 形態素分割と単語カウント

  • 文書からキーワード抽出

  • 文書カテゴリ分類

機械学習を案件で使う関係で勉強していますが、
自然言語処理は手薄だったので、全体像をつかみたいという思いで参加しました。
 

まとめ 

実務のための自然言語処理は3ステップと理解しました。

  1. テキストを機械学習に持ち込むために形態素分割で単語にバラす
    (登場頻度を数えるなどする)
  2. 単語の中から、ラベル付けされたテキストに固有なキーワードを抽出する
    (今回は重みスコアを計算してキーワードを抽出)
  3. ラベル付けされていないテキストをカテゴリに分類する

資料はこちらです。

www.slideshare.net

 

ソースコード

GitHub - Kensuke-Mitsuzawa/sample-codes-supporters-tutorial

 
以下トピックごとにメモを元にまとめます。

形態素分割

辞書データと形態素解析モデルからなる。
モデルはMecab、Kuromoji、Juman++がよく使われている。
 触ってみるならMecabらしい
辞書データはIPA辞書、IPA-neologd辞書、Juman辞書がメジャー。
 IPA-neologd辞書にはWebの新語が取り入れられているらしい

 

日本語は単語の間にスペースが入らないので、形態素分割が必要になる。
(思わず「確かに」と言ってしまった)

(そういえば、私は以下のチュートリアルMecab触ってました。)

AIが入ったBotの作り方を学ぼう - Part4 形態素解析と食品データベースで食品とその栄養価を特定する - Qiita

 

キーワード抽出

形態素の集計では意味がない単語(例:する、なる、ある)があるのでキーワード抽出が必要

ラベルの付いたテキストをいくつか持っている前提。(ラベルは2つの想定)
ラベルごとに単語が出てきた回数をカウントし、別のラベルとの間で回数の差分を取る。
 プラスであればラベルに固有であると考える。
 差分が0や負はどこにでも出てくるからラベルにとっては重要ではないと考えられる。

ラベル分けは主観が入ってくる。(主観でやっていくしかない)

 

カテゴリ分類

テキストの内容を考慮してカテゴリに分ける(ニュースが国際、スポーツと分かれる感じ)
今回はキーワードについていた重みスコアを使う(スコアリングベース)
 SVMや深層学習でもできるらしい

利用可能なラベル付きデータは重み付けスコア作成データと評価用データに分ける
(メモ:これは機械学習の考え方)

 

感想 

自然言語処理、意外と簡単じゃんと思えました。
感想ツイート見てアニメごとによく出る単語とか集計したいなとか考えちゃいます。

ソースコードが公開されているので、近日中に手を動かす予定です。
Pythonのコードの書き方としても参考になると期待しています)

参加者の方は自然言語処理に携わるエンジニアが多かったようです。
楽譜をキャプチャして自動で演奏するシステムを作った方がいらっしゃり、印象に残っています。

今回の勉強会関係者と出席者の皆さま、どうもありがとうございました。

イベントレポート | 第25回 Pythonもくもく会 #mokupy

はじめに

マキアかわいい! nikkieです。(さよ朝みた)
今月も #mokupy にお邪魔してきました。

 

勉強会の概要

この勉強会について

主にPythonに関するやりたいことを各自持って来て、進めていく感じのゆるい会です。 もくもく開発をして情報共有したり、交流を深めることができればと思っています。 是非お気軽にご参加ください。(Python初心者の方でも大歓迎です!)

 
 

取り組んだこと

  • pandas記事にいただいたコメントの動作確認

  • Python機械学習プログラミング』読書メモ

  • モザイクアートのプログラムのバグ修正

溜まった細々としたタスクをこなす時間にしました。

  

(1) pandas記事にいただいたコメントの動作確認

qiita.com

前回の #mokupy の経験を上記のQiita記事にまとめています。
そこにいただいたコメントについて、自分で手を動かして確認しました。

確認結果:
dataframe_max_pranctice_see_advise-20180224.ipynb · GitHub

確認した事項は近日中にQiitaに上げます。

 

(2) 『Python機械学習プログラミング』読書メモ

読書会に行くために5章を読み進めていたのですが、読書会参加は泣く泣く断念。
備忘のために簡単にまとめておきます。
これは課題なのですが、数学的なところの理解が薄いです。

  • 4章に引き続き次元削減:特徴抽出
    (4,5章はこの本の中では前処理手法を扱っている部分)
    ・主成分分析(PCA)
    ・線形判別分析(LDA)
    カーネル主成分分析
  • PCAとLDA
     
    主成分分析
    PCA
    線形判別分析
    LDA
     
    線形変換法
    アルゴリズム 教師なし 教師あり
    見つけ出そうとするもの
    分散がもっとも大きい
    直行成分軸
    クラスの分離を最適化する
    特徴部分空間
    scikit-learn
    PCAクラス
    LinearDiscriminant
    Analysisクラス
  • カーネル主成分分析
  • 線形に分離できないデータを変換し、
    線形分類器に適した新しい低次元の部分空間に射影する
  • 考え方:データ→より高次元の空間に射影する非線形写像→高次元空間でPCA適用
    カーネルトリックを使うことで、高次元空間に写像することなく、
     元の特徴空間において2つの高次元の特徴ベクトルの類似度を計算できる
  • 新しいサンプルを射影するたびに、元のトレーニングデータセットのサンプルと
    新しいサンプルの間の類似度を計算する
    (PCAでは射影行列、LDAでは変換行列だ手に入っているので、
    元のトレーニングセットを新しいサンプルの射影に使うことはないと理解している)
  • scikit-learnのKernelPCAクラス

 

(3) モザイクアートのプログラムのバグ修正

Slackのアイコンでモザイクアートが作れなかった問題、解決しました。

github.com

現状のコードの問題点は安易なコピペを繰り返したこととの認識に至りました。
関数にまとめることを億劫がり、既存の関数やファイルをコピーして
処理ごとに固有の設定値や参照ファイル名を変更して対応してきてしまった。
そのつけを払わなければいけない時期のようです。

今回の修正でも修正に使う関数をコピーしてファイルごとに持たせていましたが、
途中でその関数を修正しなくてはならず、
ファイルごとに持たせるというのが愚かなことと思い知りました。
モジュール化はまだよくわかっていないのですが、
1箇所にまとめたほうが変更に強いということは体験しました。

 

感想

#PyNyumon でLT見ましたと言ってくださった方がいらっしゃり、嬉しかったです。
業務で使う機械学習の勉強で手一杯といった状況なのですが、
もっといいコードを書くための練習としてモザイクアートに取り組んでいきたいですね。

情報収集という面では
Dashというデータ可視化によさそうなライブラリの情報と
DjangoCongressの話が聞けました。

主催の皆さま、出席者の皆さま、どうもありがとうございました。

週末ログ | #pyhack と キカガク脱ブラックボックス講座

はじめに

だんないよ、nikkieです。
この土日は機械学習の基礎固めに使いました。
学んだことを手短にまとめます。

経緯

 

学んだこと

  • 重回帰分析の数学部分

  •  scikit-learn使い方
    (1)modelを宣言
    (2)model.fitでパラメタ調整
    (3)model.scoreで予測精度を確認
    (4)model.predictで予測
  • モデルの構築に入る前にデータを確認すべき
    (i) 分布の確認:seabornでdistplot
    (ii) 相関関係の確認:seabornでpairplot
      モデルの予測精度がなかなか上がらないのでデータを見たら、
      説明変数が使いにくい分布だった、ないしは
      説明変数と目的変数の間に相関がなかったというのは冷や汗モノすぎる。。
  • train_test_splitで学習用データと性能評価用データに分けるとき
    random_stateパラメタを固定して、ランダムだが毎回同じように分ける。
    =再現性を確保する
  • テストデータはテストのときにしか使わない。
    学習用データのスケーリングには学習用データの平均と標準偏差を使った。

 

所感

@terapyonさんと@NaoY_pyさんに
キカガク講座をおすすめしていただいたのが大きかった。
本当にありがとうございました!


Python使いが集まる #pyhack の環境はすごく学びがあると実感。
継続して参加して、Pythonで食べていけるように力をつけたいです。