「実践 Python データサイエンス」を受講した

Udemy【世界で2万人が受講】実践 Python データサイエンスを受講してみました。

104講義、合計17.5時間もの動画で Jupyter を使ったデータ解析の説明が受けられます。
私が申し込んだ時は定価が2万円を超えていて、キャンペーン価格で6,000円でした。でも今は定価が6,000円さらにそこから30% OFF の4,200円なんですね...

内容はまず anaconda で環境構築。anaconda だからハマらないし楽ちん。環境構築に時間を割かれなくて良いです。

その後は次のような内容となっていました。

動画は手を動かしながら見るためだと思われますが、非常にゆっくりです。
最初は気づきませんでしたが再生速度を変更できるため、手を動かさずに見るだけの場合は1.5倍速で見ていました。便利。
スマホアプリでは端末にダウンロードしておくことが可能なので通勤電車内でも快適です。
閲覧期限も無いのでいつでも何度でも見直すことができます(サービスが終了しなければ...)

この講義の難点は音が小さいこと。スマホでこの動画に合わせて音量を最大にしたままにしておくと、次に音楽を再生した際などに爆音で困ります...

最初のうちは「へー、numpy や pandas って便利なんだな」と思いつつもちょっと退屈でしたが、タイタニックの回以降は「なるほどなるほど」という感じでした。株価の予測はそんなのでは儲からんでしょ?とも思いましたが、実際にどういう場合にどの機能を使うのかがわかってきます。

その後の「機械学習」はそれぞれの学習アルゴリズムの原理が説明されて、これまたなるほどぉと。そして SciKit Learn はなんて便利なんでしょうと。
先日 Microsoft Azure Machine Learning のハンズオンをやって、ブラウザ上で線をつなぐだけで機械学習の学習と Web API 化があっという間に出来上がるというのを体験しましたが、SciKit Learn 使えばそれと大差ないんじゃないか?ってくらい簡単に実装できそうです。Azure の方はサーバーとか不要だから運用とか考えたらもちろんもっとずっと簡単。

Jupyter の便利さがよくわかる講義でした。Jupyter は便利だけれども大きなデータセットでは実行にそれなりのリソースが必要です。こうなるとクラウドで BigQuery のデータも使える Google Cloud DataLab は超便利なんじゃない?

当然ながらこれを受講したからといっていきなりデータサイエンティストになれたりはしませんが、興味をもつきっかけになります。Jupyter がどんなものか知らなかった私にとってはその便利さに驚きこれは使っていきたいと思いました。データ分析に必要な数学、統計学的な知識もさわりだけ紹介されるので興味を持ったらその先は自分で勉強する必要があります。良い練習用の課題なんかがあればもっと身につくものになるかもしれません。

Jupyter のファイル .ipynb は JSON のようですが GitHub では HTML にして描画してくれます。グラフなんかも埋め込んであればそのまま表示されます。Jupyter の実行環境がなくても結果の共有ができるんです!GitLab はまだ対応していないようで JSON として表示されます。

LINE BOT API を試してみた

流行りに乗って LINE BOT API を試してみた。

borobot-screenshot

仕組みとしては誰かが LINE からのアクセスを受ける口 (Callback URL) を準備して待っていれば、「友達登録(ブロック解除)」、「ブロック」、「メッセージ」が送られてくるというもの。

友だち登録してもらえればそのアカウント情報(mid?)が得られるので宛先に指定すればメッセージを送ることが可能。

ブロックされたことがわかるので知らずにメッセージを送り続けるという無駄がなくせます。友達解除のことがブロックと等価なのかな。

メッセージには「テキスト」、「画像」、「動画」、「位置情報」といったパターンがある。

mid からユーザー情報を得るための API もあり、次のような結果が得られるのでメッセージに名前を入れたり友達管理に名前が使えます。

{
  "contacts": [
    {
      "displayName": "浦島太郎",
      "mid": "********************************",
      "pictureUrl": "",
      "statusMessage": "玉手箱開けちゃった"
    }
  ],
  "count": 1,
  "display": 1,
  "pagingRequest": {
    "start": 1,
    "display": 1,
    "sortBy": "MID"
  },
  "start": 1,
  "total": 1
}

今は Callback API のタイムアウトが10秒というゆるい設定のようなのですし、友達登録可能な上限が50と少ないのでリクエストを受けた処理の中でそのまま返信することができますが、沢山リクエストが来るようになるとそれでは捌き切れなかったり、エラーハンドリングで困るので Callback で受けたデータはシグネチャの検証だけやって job queue に突っ込むという設計にすべきのようです。

事前共有鍵を使い HMAC SHA256 で X-LINE-ChannelSignature ヘッダーの値と一致することを検証

import hmac, hashlib, base64

if request.headers.get('X-LINE-ChannelSignature') == base64.b64encode(hmac.new(CHANNEL_SECRET, request.get_data(), hashlib.sha256).digest()):
    return True

メッセージの送信は white list に登録した IP アドレスからであれば自由に送信できます。

curl -X POST https://trialbot-api.line.me/v1/events \
 -H "Content-Type: application/json; charser=UTF-8" \
 -H "X-Line-ChannelID: **********" \
 -H "X-Line-ChannelSecret: ********************************" \
 -H "X-Line-Trusted-User-With-ACL: u********************************" \
 -d '
{
  "to": [
    "u********************************"
  ],
  "toChannel": "1383378250",
  "eventType": "138311608800106203",
  "content": {
    "contentType": "1",
    "toType": "1",
    "text": "おはようございます、月曜日の朝です"
  }
}
'

こんな結果が返ってきます。

{
  "failed": [],
  "messageId": "1460327400008",
  "timestamp": 1460327400008,
  "version": 1
}

White list に登録されていない IP アドレスから送信しようとすると次のように拒否されます

{
  "statusCode": "427",
  "statusMessage": "Your ip address [xxx.xxx.xxx.xxx] is not allowed to access this API."
}

Flask で簡単な返信までするコード書いちゃったけど Celery 使ったジョブキュー方式に書き直そう。Celery の勉強を兼ねて。

オンデマンド画像変換サーバー thumbor を使う – その1

thumbor

画像を表示場所に合わせていろいろなサイズで表示したいという要件は良くあるようで「画像変換Night」というイベントが開催されるほどのようです。

今回は、こういった用途でもつかえる thumbor を紹介します。
"オンデマンド画像変換サーバー thumbor を使う – その1"の続きを読む

Google Apps の共有アドレス帳の操作

Google Apps でみんなが使えるアドレス帳を操作しようと思ったら存在するのにウェブの管理画面から操作できないんですよね。

これまた API 使って操作するスクリプトを書こうかと思ったけどこれはめんどくさそうだったから既存のものを探したら google-shared-contacts-client というものが見つかったのでこれを使うことにする。

使い方は簡単

まずは依存ライブラリのインストール
"Google Apps の共有アドレス帳の操作"の続きを読む

GoogleAppsのアカウント操作用コマンドラインツールを書いた

GoogleApps のアカウントやグループ操作をブラウザからポチポチやってたら日が暮れそうだったのでコマンドラインツールを書きました。
https://github.com/yteraoka/googleapps-directory-tools

旧版の API は廃止予定とのことで OAuth 2.0 版の API を使ってます(ぜんぜん理解していないけれど)。
google-api-python-client を使っていて、samples/groupssettings/groupsettings.py を参考にしています(Python は素人です)。
OOP っぽく使えるライブラリにすれば良かったなと思いつつ、取り急ぎ動くものが必要だったということもありとりあえずは今のかたちで。

対応している操作は

それぞれの確認、一覧(検索)、作成、削除、更新です。あと、一部は JSON ファイルからの一括登録。それぞれの API でサポートされていることはほぼできるはず。

"GoogleAppsのアカウント操作用コマンドラインツールを書いた"の続きを読む