ためすう
EDA examples
学習目標
- Describe the major visualization tools
- Generate hypotheses about data
- Inspect the data and find golden features
- Examine and analyze various plots and other data visualizations
Springleaf competition EDA II
Numerai competition EDA
コンペの例
- ゴール: データセットに対して、二項分類のタスク
- データ; 21の匿名化された数値的特徴データ
まずやることは、最近傍点を見つけ、21全ての特徴を追加すること
下記の 42 個の特徴を用いた、シンプルなロジスティクス回帰で TOP10 に入ることができた。
- 元のデータから 21 個の特徴
- 近傍点から 21 個の特徴
参考
EDA examples
学習目標
- Describe the major visualization tools
- Generate hypotheses about data
- Inspect the data and find golden features
- Examine and analyze various plots and other data visualizations
Springleaf competition EDA I
データの形状を知る
x.shape
訓練データはターゲットのカラムが1つ多い(モデルを構築するときは削る)
何行か出力してみる
訓練データ、テストデータともに出力してみる
x.head
欠損値を調べる
各特徴、各行に対して調べる
例 (各行に対して)
train.isnull().sum(axis=1).head(15)
例 (各特徴に対して)
train.isnull().sum(axis=0).head(15)
データをクリーニングする
まずデータの種別を決めていく
- 特徴ごとのユニークな値の数を調べる
例
feats_counts = train.nunique(dropna = False)
feats_counts.sort_values()[:10]
- 一意の特徴を削除する
例
constant_features = [削除するカラム]
xxx.drop(constant_features,axis = 1,inplace=True)
- 重複を削除する
欠損値を埋める
例
traintest.fillna('NaN', inplace=True)
ラベルエンコードする
例
train_enc[col] = train[col].factorize()[0]
訓練データ(生)、訓練データ(ラベルエンコード済み)で重複カラムを見つける
削除処理
例
traintest.drop(dup_cols.keys(), axis = 1,inplace=True)
処理に時間がかかった場合、dump しておくと便利
参考
Ruby の Gem のバージョン指定方法
2019-05-26やったこと
Gem のバージョンを設定する方法について調べます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
$ gem ライブラリ [バージョン]
例. hoge というライブラリをインストールします。
最新版インストール (バージョン指定なし)
gem 'hoge'
バージョン固定 (4.5.6 に固定)
gem 'hoge' '4.5.6'
x.x.x 以上のバージョン (4.5.6 以上)
gem 'hoge' '>= 4.5.6'
x.x.x 以上、y.y.y 未満 (4.5.6 以上 4.7.0 未満のバージョン)
gem 'hoge' '>= 4.5.6, < 4.7.0'
~> (4.5 以上 4.9 以下)
gem 'hoge' '~> 4.5'
参考
Rails5 で rspec をインストールする
2019-05-26やったこと
Rails5 で rspec を使えるようにします。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
Gem のインストール
Gemfile
group :development, :test do
gem 'rspec-rails', '~> 3.8'
end
bundle インストール
$ bundle install
rspec のインストール
$ rails generate rspec:install
Running via Spring preloader in process 3674
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
rspec を実行 (※ まだテストは空です)
$ bundle exec rspec
No examples found.
Finished in 0.00034 seconds (files took 0.09629 seconds to load)
0 examples, 0 failures
これで rspec の準備が整いました。
参考
Rails5 で http ヘッダーリクエストのキーが変換される件
2019-05-25やったこと
Rails で http ヘッダーリクエストについて調査をしていて、ハマった時の話しです。
http ヘッダーリクエストのキーが Rails 側で変更されていることにより、ハマりました。
キーがどのように変わっているかについて書きます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
任意のヘッダーを追加した時、Rails側でキーが変換されていることが分かりました。
app/controllers/tasks_controller.rb
class TasksController < ApplicationController
def index
@task = Task.new
logger.debug(1234567)
request.headers.sort.map { |k, v| logger.info "#{k}:#{v}" }
logger.debug(request.headers['abc-def'])
logger.debug(request.headers['HTTP_ABC_DEF'])
logger.debug(request.headers['abc-xxx-yyy'])
logger.debug(request.headers['HTTP_ABC_XXX_YYY'])
end
リクエストを送る
$ curl -H 'abc-def:value' -H 'abc_xxx_yyy: value2' http://localhost:3000/
ログの出力結果
1234567
GATEWAY_INTERFACE:CGI/1.2
HTTP_ABC_DEF:value
HTTP_ABC_XXX_YYY:value2
...
value
value
value2
value2
http のリクエストヘッダーの key に HTTP_ が付与されました。また、- も _ に変更されています。
詳しい処理については、参考のリンクをご覧ください。
参考
Ruby のクラスインスタンス変数
2019-05-25やったこと
Ruby でクラスインスタンス変数について調べます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
クラスインスタンス変数
クラスがClassクラスのオブジェクトであるとうことは、クラスオブジェクト自体にインスタンス変数を持たせることができます。
test.rb
class Sample2
@class_instance_val = :class_instance_val
def self.hogehoge
@class_instance_val
end
end
p Sample2.hogehoge
出力結果
$ ruby test.rb
:class_instance_val
参考
- パーフェクトRuby
- 【まとめ】インスタンス変数、クラス変数、クラスインスタンス変数 - Qiita
Ruby でインスタンス変数へのアクセスをラクにする
2019-05-25やったこと
Ruby で インスタンス変数へのアクセスについて調べます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
アクセサを自動的に定義するには、attr_accessor を使います。
test.rb
class Sample
attr_accessor :hogehoge
end
s = Sample.new
s.hogehoge = 'init'
p s.hogehoge
出力結果
$ ruby test.rb
"init"
ちなみに
- 「参照するためのメソッド」だけを定義: attr_reader
- 「代入するメソッド」だけを定義: attr_writer
を使います。
参考
- パーフェクトRuby
Ruby でシングルトンを使ってみる
2019-05-25やったこと
Ruby で singleton を使ってみます。
今回は用意されているライブラリを使います。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
test.rb
require 'singleton'
class SingletonSample
include Singleton
attr_accessor :count
def initialize
@count = 0
end
end
p 'obj1'
obj1 = SingletonSample.instance
puts obj1.count
obj1.count += 1
puts obj1.count
p 'obj2'
obj2 = SingletonSample.instance
puts obj2.count
obj2.count += 1
puts obj2.count
p 'id'
p obj1.object_id
p obj2.object_id
出力結果
$ ruby test.rb
"obj1"
0
1
"obj2"
1
2
"id"
70354869597880
70354869597880
参考
アジャイルソフトウェア開発の奥義 第3章 プランニング
2019-05-25「アジャイルソフトウェア開発の奥義」の読書メモです。
時々、個人の見解入りです。
この章は、XPの「計画ゲーム (planning game)」についてです。
流れ
- ユーザーストーリを洗い出す
- 相対的な見積もりをする
- ある機能を1とした時、他の機能はどれくらいのボリュームとなるかを決める
- 「速度」を掴むため、1 ~ 2つのストーリーを試作してみる
- かかる時間が見積れる
- イテレーションプランニング(たいていは2週間程度)
- タスクプランニング
- ストーリーをタスクレベルに分割する
チームの全員が、何を成し遂げるべきか、いつそれを成し遂げるべきかを把握している。
同意。チーム単位でこれを把握していれば、遅れているタスクがあっても手伝ったりできる。
「速度」について
見積もるために「速度」という概念が必要。
これは、例えば1週間ごとにどれくらいこなしたかを実測値として取り、将来の計画も決めていく。
個人的に思うこと
プロジェクトを進める中で予期せぬことはよく発生すると思いますが、
主にその予期せぬことは下記2つの問題に分けられると考えています。
- 技術的課題
- 仕様的課題 (既存システムに組み込むという観点、法律の観点など)
最初のうちに気付ければ良いのですが、気付けなかった場合、計画立て直しになるので、
プロジェクト着手前には慎重に検討したいところです。
Exploratory Data Analysis
学習目標
- Describe the major visualization tools
- Generate hypotheses about data
- Inspect the data and find golden features
- Examine and analyze various plots and other data visualizations
Dataset cleaning and other things to check
データセットクリーニング
- 一定の特徴
- 重複している特徴
他にチェックすること
- 重複レコード
- データセットがシャッフルされているかどうか
コンペの主催者はデータの一部を提供する(全部ではない)
traintest.nunique(axis=1) == 1
- サンプリングが原因で、全てのデータ(訓練データ、テストデータ)で同じものを取ることがある
特徴の重複
traintest.T.drop_duplicates()
※ 関数はビデオに出てたものを写経しました。動作は確認していません。