The paradigm shift

saboyutaka’s diary なんかかく(ブログn回目)

PyData Okinawa #18に参加してKaggleでPandasをさわってみた

pydataokinawa.connpass.com

Pydata Okinawa #18回に参加してきました。今回が初参加です。

きっかけ

もうすぐ沖縄に移住して1年が立ちますが、前々からPyDataをやってる話は聞いていたけどいままで参加はしてませんでした。最近沖縄にスタートアップカフェコザというコワーキングスペース&起業支援の相談の場が出来てそこがめちゃくちゃ楽しくてその中でこれからは機械学習だよねーなんて話してました。またRuby on RailsRubyでWebアプリケーションをこれまでメインでやってきてたけどこれからはそれだけのスキルじゃ食っていくの難しいのかなぁなんて考えてた所だったので、これを期にPython, 機械学習やってみるかーとやる気が出てきたので参加に至りました。

Pydata Okinawa とは

イベントページより引用

データから始まる新しい価値を創造するコミュニティ

PyData.Okinawa は Python + Data に興味のある方が交流できる沖縄を拠点にしたコミュニティです。データから新しい価値を生み出したいという想いがあれば、どのようなバックグラウンドを持った方でも自由に参加できるオープンなコミュニティです。沖縄で定期的に開催される勉強会ではPythonをメインな言語として使いますが、機械学習やデータアナリティクスに興味を持つ方であればどのような言語を使うプログラマの方でも参加可能です。またハードルは高いかもしれませんが、これからPythonプログラミングを覚えたい初心者の方も大歓迎です。沖縄県外のコミュニティとも積極的に交流しながら、次の世代をインスパイアするような新しい価値を生み出していくことがPyData.Okinawaの成功の姿です。

#18 回 のアジェンダ Pandasでデータ前処理

Pandas とは

http://pandas.pydata.org

Pythonのためのハイパフォーマンスで簡単に使えるデータストラクチャー&解析ツール

らしいです。csvやxlsx、DBから情報を読み込み、filterやデータの穴埋め、集計関数で計算、表のjoinなどが簡単に出来ます。これで機械学習する前のデータを整形し学習しやすい状態にするのに使うみたいです。

さまざまな事が出来ますが、今回はcheatsheetを使ってチュートリアルを行いました。

www.analyticsvidhya.com

サイトからPDF形式でダウンロードできます。

今回は教材としてKaggleのtitanicのデータを使いました。

Kaggle とは

Kaggle: Your Home for Data Science

seleck.cc

世界中から40万人を超える「データサイエンティスト」が集まる場所が、「Kaggle(カグル)」だ。

Kaggleは企業と、データ分析のプロであるデータサイエンティストをつなぐプラットフォームだ。

サイトから引用。

データサイエンティストが集まり、企業が情報を公開しコンペティションを開催、データサイエンティストはデータ分析をしスコアを競い合う(中にはそこから採用されることも)、企業はデータの解析を世界中のデータサイエンティストに任せることができます。

と聞くと難しく感じますが、僕ら初心者としては無料でデータが公開されている、しかもKaggle上でNotebookを作れるのでPlay groundとしてもかなり便利です。 使用するためにはサインインが必要です。

Pandas with Kaggle ハンズオン

Kaggleのtitanicのデータを使用します。タイタニック号の船客のデータベースを使ってPandasを試していきます。

www.kaggle.com

f:id:saboyutaka:20161020233141j:plain

こちらが僕がcheatsheetのために作ったnotebookです。

https://www.kaggle.com/saboyutaka/titanic/pandas-tutorial-with-cheatsheet/

f:id:saboyutaka:20161020234423j:plain

なんとなくやってることわかると思います。 kaggleでは人のnotebookをforkして自分のnoteとしてコピーして実行も出来るので興味がある方はさわってみるといいと思います。

感想

  • Jupyterでのipynbめっちゃ便利。これRuby, SQLとか実行してすぐに実行結果をWeb上で確認出来ると学習がとてもとてもやりやすくなるんじゃないでしょうか。KernelはPython以外にもたくさん作られてるみたいなので不可能ではない?小中学校の授業がこういったインタラクティブなものになればいいのになぁなんて思いました。

  • Kaggle面白い。今回はtutorialとしてデータを使ったけど、実際にデータごにょごにょして遊ぶ自体楽しそうです。

https://www.kaggle.com/zanjibar/japan-trade-statistics

日本の貿易データ 1988-2016 なんかもあるみたいで、このへんから遊んでみると面白い気がします。

  • PyDataには機械学習ディープラーニング、強化学習などに詳しい人や興味があるが多く集まってるので普段聞けないような話が聞けてすごい楽しかったです。

今後のアクション

沖縄にはPyData, Python beginner勉強会の2つのPython コミュニティがあるのと、最初に上げたスタートアップカフェコザでスタートアップをやりたい人や新しい技術を取り入れた事業などがこれから始まろうとしていて、これから機械学習がトレンドになると言われている中、沖縄のPythonコミュニティが盛り上が機械学習などが出来るエンジニアが十分に増えて、それらの技術を使う事業が増えてくると仕事でPyDataで学んだ事を活かし、またコミュニティに情報を還元するエコシステムが出来たりしないのかなと思ってワクワクしてます。

といったことをオーガナイザーのOtsukaさんに話していた所、PyDataのオーガナイザーの1人として任命していただきました。Pythonも全くの初心者で、機械学習においても全くの初心者ですが、盛り上げていきたい気持ちでがんばっていきたいと思います。

Splatoonのフレンド状況をメニューバーに表示する

すごい今さら感があるけど、書こう書こうと思ってずっと書いてなかったので書いておく。

f:id:saboyutaka:20160622225157p:plain

イカリングで友達入ってるのかとか、Twitterスプラトゥーン ステージ情報botでこの後のステージなんなのかとか毎回調べるのめんどうですよねぇ。メニューバーに表示されてたら楽なのにって思って表示させるようにしました。

Bitbar

表示させるツールとしてはBitbarを使いました。Shellスクリプトでもいいし、好きな言語で標準出力に出せば表示できるのは便利です。 最初、Shellスクリプトで書いてたけどeachとかArray#joinとか使いたくなってRubyに書き換えました

getbitbar.com

Bitbarで実行するRubyのコード

#!/usr/bin/env /Users/yutaka/.rbenv/shims/ruby

require 'splapi'
require 'time'
require 'httparty'

puts 'Splanet'
puts '---'

client = SplAPI::Client.new

def print_stage(h)
  puts "#{Time.parse(h['start']).strftime('%H:00')}~ #{h['rule']}: #{h['maps'].join(', ')} | color=blue href=https://splatoon.nintendo.net/schedule"
end

puts 'Stages & Rule | size=16'
res = client.gachi_now.body
print_stage(res['result'][0]) if res['result'][0]

res = client.gachi_next_all.body
res['result'].each { |h| print_stage h } if res['result'].any?

puts '---'
puts 'Friends | size=16'

# ここはイカリングにログインして、Cookieに入っているwag_sessionをコピーしてください
wag_session = 'K25YUzJVYUxXTGU2YzJaSjRpWUNuR3VzTlM4ZXZPclJvdEFjdWk0Q2RYVVZGRFNGYVdUQ1hVRkJJT0luY295UG5WUzJPLzMVINHhIVE5aREQ0ckNJU2JZMVVZa0NOdFFkbWFqa1MzODhFQTR5cHcvY1dMNmRCRTBZemQ0SS82bkpnQTkzK2RqSVM0dDc5anV1aVhHUHFEYjQ5RDZFMFA3eXpGNllrdFdoUlpQWU9ZdHNMNnhYbEtKN1dFN0J6QUF5VzRvbUNpSVRIaFlFQStuYWhqcko5V0ZHc1BPTjVRTUJjcEY1SFVGcDMzeURieHJoOXhQQzJSTWZyQ0xxY2U2cG1rNzBaYW9KZjZaMkJTemZYUnVONmRsTEY1RUlsdlkvTVJtVnpack5uanJEVm9HRG5BU1VYaXZIUUVtcjkyZXMyYUtjeUtjOCtkenNjTzIrQkx4NUpmMjc1NjRDSEJqcDZodWNmOFV5LS1vdHVVTHA1TkRoU2d5QnZOeDFhVUNRPT0%3D--7bd8f9569'

res = HTTParty.get('https://splatoon.nintendo.net/friend_list/index.json', headers: { 'Cookie' => "_wag_session=#{wag_session}"} )

res.sort_by {|h| h['mode'] }.each do |h|
  puts "#{h['mii_name']}: #{h['mode']} | color=black href=https://splatoon.nintendo.net/profile/#{h['hashed_id']}"
end

Rubyの実装

  • rbenv使ってるので #!/usr/bin/env /Users/yutaka/.rbenv/shims/ruby とした
  • httparty, time, splapi gem を使う
  • splapiでステージ情報を取得する
  • friend_list/index.jsonでフレンド情報を取得する
  • session情報をcookiewag_sessionという値を使ってるのでここだけは最初にブラウザでログインして、自分で取得する必要がある。

splapi gem

splapi - スプラトゥーンのステージ情報がとれるやつを作っている方がいたのでgemを作成させてもらいました。

github.com

ステージの情報はこちらから取得してます

まとめ

PCから簡単に友達がログインしてる状況を把握できるようになりました。便利。 イカ、よろしくー。

Railsを学ぶのに必要な最低限の知識

f:id:saboyutaka:20161022115607p:plainって何が必要だろうと思って思いついたやつを羅列してみる。 Railsを理解する前にWebアプリケーションやWebの仕組みをざっくり理解するとRailsを学ぶにあたって役に立つと思うのでおすすめ。

Webアプリケーションに必要な事

  • Webアプリケーションとは
  • Webの基礎知識
    • HTTP
      • GET, POST, PATCH, DELETE
      • URL
      • RESTful API
      • request
        • header
        • parameters
      • response
        • HTTP STATUS
        • HTML
        • JSON
    • TCP/IP
      • hostとport
      • well-known port
  • セキュリティ
  • リレーショナル・データベース
  • ブラウザ

Macでの開発で必要な事

RailsでWebアプリケーションを書くのに必要な事

Webアプリケーションに必要な事はRuby, Rails以外(PHPやNode.js, Perl, Python, Javaなどなど)で書く場合にも必要な知識です。 これらが何のために使われてて何が嬉しいかが少しでも理解出来てるとRailsがやってる事が少し理解できそう。