PyData Okinawa #18に参加してKaggleでPandasをさわってみた
Pydata Okinawa #18回に参加してきました。今回が初参加です。
きっかけ
もうすぐ沖縄に移住して1年が立ちますが、前々からPyDataをやってる話は聞いていたけどいままで参加はしてませんでした。最近沖縄にスタートアップカフェコザというコワーキングスペース&起業支援の相談の場が出来てそこがめちゃくちゃ楽しくてその中でこれからは機械学習だよねーなんて話してました。またRuby on RailsでRubyでWebアプリケーションをこれまでメインでやってきてたけどこれからはそれだけのスキルじゃ食っていくの難しいのかなぁなんて考えてた所だったので、これを期にPython, 機械学習やってみるかーとやる気が出てきたので参加に至りました。
Pydata Okinawa とは
イベントページより引用
データから始まる新しい価値を創造するコミュニティ
PyData.Okinawa は Python + Data に興味のある方が交流できる沖縄を拠点にしたコミュニティです。データから新しい価値を生み出したいという想いがあれば、どのようなバックグラウンドを持った方でも自由に参加できるオープンなコミュニティです。沖縄で定期的に開催される勉強会ではPythonをメインな言語として使いますが、機械学習やデータアナリティクスに興味を持つ方であればどのような言語を使うプログラマの方でも参加可能です。またハードルは高いかもしれませんが、これからPythonプログラミングを覚えたい初心者の方も大歓迎です。沖縄県外のコミュニティとも積極的に交流しながら、次の世代をインスパイアするような新しい価値を生み出していくことがPyData.Okinawaの成功の姿です。
#18 回 のアジェンダ Pandasでデータ前処理
Pandas とは
Pythonのためのハイパフォーマンスで簡単に使えるデータストラクチャー&解析ツール
らしいです。csvやxlsx、DBから情報を読み込み、filterやデータの穴埋め、集計関数で計算、表のjoinなどが簡単に出来ます。これで機械学習する前のデータを整形し学習しやすい状態にするのに使うみたいです。
さまざまな事が出来ますが、今回はcheatsheetを使ってチュートリアルを行いました。
サイトからPDF形式でダウンロードできます。
今回は教材としてKaggleのtitanicのデータを使いました。
Kaggle とは
Kaggle: Your Home for Data Science
世界中から40万人を超える「データサイエンティスト」が集まる場所が、「Kaggle(カグル)」だ。
Kaggleは企業と、データ分析のプロであるデータサイエンティストをつなぐプラットフォームだ。
サイトから引用。
データサイエンティストが集まり、企業が情報を公開しコンペティションを開催、データサイエンティストはデータ分析をしスコアを競い合う(中にはそこから採用されることも)、企業はデータの解析を世界中のデータサイエンティストに任せることができます。
と聞くと難しく感じますが、僕ら初心者としては無料でデータが公開されている、しかもKaggle上でNotebookを作れるのでPlay groundとしてもかなり便利です。 使用するためにはサインインが必要です。
Pandas with Kaggle ハンズオン
Kaggleのtitanicのデータを使用します。タイタニック号の船客のデータベースを使ってPandasを試していきます。
こちらが僕がcheatsheetのために作ったnotebookです。
https://www.kaggle.com/saboyutaka/titanic/pandas-tutorial-with-cheatsheet/
なんとなくやってることわかると思います。 kaggleでは人のnotebookをforkして自分のnoteとしてコピーして実行も出来るので興味がある方はさわってみるといいと思います。
感想
Jupyterでのipynbめっちゃ便利。これRuby, SQLとか実行してすぐに実行結果をWeb上で確認出来ると学習がとてもとてもやりやすくなるんじゃないでしょうか。KernelはPython以外にもたくさん作られてるみたいなので不可能ではない?小中学校の授業がこういったインタラクティブなものになればいいのになぁなんて思いました。
Kaggle面白い。今回はtutorialとしてデータを使ったけど、実際にデータごにょごにょして遊ぶ自体楽しそうです。
https://www.kaggle.com/zanjibar/japan-trade-statistics
日本の貿易データ 1988-2016 なんかもあるみたいで、このへんから遊んでみると面白い気がします。
今後のアクション
沖縄にはPyData, Python beginner勉強会の2つのPython コミュニティがあるのと、最初に上げたスタートアップカフェコザでスタートアップをやりたい人や新しい技術を取り入れた事業などがこれから始まろうとしていて、これから機械学習がトレンドになると言われている中、沖縄のPythonコミュニティが盛り上が機械学習などが出来るエンジニアが十分に増えて、それらの技術を使う事業が増えてくると仕事でPyDataで学んだ事を活かし、またコミュニティに情報を還元するエコシステムが出来たりしないのかなと思ってワクワクしてます。
といったことをオーガナイザーのOtsukaさんに話していた所、PyDataのオーガナイザーの1人として任命していただきました。Pythonも全くの初心者で、機械学習においても全くの初心者ですが、盛り上げていきたい気持ちでがんばっていきたいと思います。
Splatoonのフレンド状況をメニューバーに表示する
すごい今さら感があるけど、書こう書こうと思ってずっと書いてなかったので書いておく。
イカリングで友達入ってるのかとか、Twitterのスプラトゥーン ステージ情報botでこの後のステージなんなのかとか毎回調べるのめんどうですよねぇ。メニューバーに表示されてたら楽なのにって思って表示させるようにしました。
Bitbar
表示させるツールとしてはBitbarを使いました。Shellスクリプトでもいいし、好きな言語で標準出力に出せば表示できるのは便利です。 最初、Shellスクリプトで書いてたけどeachとかArray#joinとか使いたくなってRubyに書き換えました
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情報をcookieのwag_sessionという値を使ってるのでここだけは最初にブラウザでログインして、自分で取得する必要がある。
splapi gem
splapi - スプラトゥーンのステージ情報がとれるやつを作っている方がいたのでgemを作成させてもらいました。
ステージの情報はこちらから取得してます
まとめ
PCから簡単に友達がログインしてる状況を把握できるようになりました。便利。 イカ、よろしくー。
Railsを学ぶのに必要な最低限の知識
って何が必要だろうと思って思いついたやつを羅列してみる。 Railsを理解する前にWebアプリケーションやWebの仕組みをざっくり理解するとRailsを学ぶにあたって役に立つと思うのでおすすめ。
Webアプリケーションに必要な事
- Webアプリケーションとは
- Webの基礎知識
- セキュリティ
- Dos攻撃
- SQLインジェクション
- マスアサインメント
- リレーショナル・データベース
- ブラウザ
- HTML
- CSS
- Javascript
- 開発ツール
Macでの開発で必要な事
RailsでWebアプリケーションを書くのに必要な事
- Ruby
- Rails
- Webアプリケーション・フレームワーク(WAF)
- MVCパターン
- HTTP
- RESTful
- Assets
- Asset Pipeline
- CoffeeScript
- SCSS
- セキュリティ
- strong parameters, マスアサインメント
- サニタイジング, SQLインジェクション
- リレーショナル・データベース
- Migration
- Job, Sidekiq(optional)
- Redis
- Webアプリケーション・フレームワーク(WAF)
Webアプリケーションに必要な事はRuby, Rails以外(PHPやNode.js, Perl, Python, Javaなどなど)で書く場合にも必要な知識です。 これらが何のために使われてて何が嬉しいかが少しでも理解出来てるとRailsがやってる事が少し理解できそう。