-
DockerでKaggle環境を構築して機械学習に入門してみる
案件で機械学習の知識が必要になりましたのでDockerで環境を構築し、試してみようと思います。 以下の手順で進めます。 Dockerでの環境構築 Kaggleから訓練データ、テストデータをダウンロード データの整形 予測結果の出力 私は機械学習についての知識が皆無ですので間違っている箇所もあるかもしれません。。。 環境構築 環境はDockerで構築します。 Kaggle公式のDockerImageがあるらしいのでそちらを利用します。 docker-compose.yml kaggle/pythonでなくpythonのみのイメージでも良いのですがkaggle/pythonであればpandasなどのライブラリもインストール済みなのでオススメです。 これで環境構築は完了です。 Kaggle Kaggleは機械学習、データサイエンスのコミュニティサイトです。機械学習のための「訓練データ」と予測を分析する「テストデータ」をダウンロードすることができ、それを元に機械学習で結果を導き、Kaggleに提出するとScoreが表示されます。 今回は機械学習初心者向けである「タイタニック号の生存者予測」を試してみようと思います。 まず以下のページから訓練データである「train.csv」とテストデータである「test.csv」をダウンロードします。 https://www.kaggle.com/c/titanic/data# それぞれ中身を確認してみます。 乗客ID, 生存可否, Passenger’s class, 名前, 性別, 年齢, 乗船した兄弟/配偶者の数, 乗船した親/子の数, チケット番号, 運賃, 船室番号, 乗船港となっています。 Passenger’s classは1, 2, 3の数値データで1がファーストクラスとなる船室クラスの数値のようです。Embarkedは乗客が乗船した港で、C, Q, Sの3種類、それぞれCherbourg, Queenstown, Southamptonとなります。 test.csvを確認してみるとSurvivedのデータがありません。train.csvのデータで機械学習モデルを作成し、test.csvの乗客の生存可否(Survived)を求める。という課題のようです。 データの整形 欠損しているデータもあり、そのままでは使用できないので平均値などで埋めます。そもそもどのくらい欠損しているのか見てみましょう。 Age, Cabinが多く欠損していますがそれ以外のデータは問題なさそうです。 欠損値を埋める Age(年齢)の欠損値を埋めます。とりあえず中央値を使うように実装してみます。 medianで中央値を得ることができます。 これでAgeの欠損値は埋まりました。CabinとEmbrakedも欠損していますが今回は使用しないのでこのままで進めます。 数値化とtest.csvデータの整形 次にデータの整形を行います。今回使用する「決定木分析」では文字列を扱うことができませんので性別のデータを数値に変換します。 male(男性)を0、female(女性)を1に変換しました。 test.csvのデータも同様に整形します。 test.csvについてはFareデータも一部欠損していましたので中央値で埋めています。 決定木分析…
-
Dockerでvimを使う方法(Python有効化も)
オンプレのサーバにVimをインストールする際に、ビルド手順(主にconfigure内容)を忘れてググることが多いので自分の備忘録として残したいと思います。 また、一口にVimと言ってもVim8、NeoVimをyumやらaptやらでインストールするパターンと、ソースコードからコンパイルするパターンがあると思いますので、今回はDockerコンテナ上で以下の4パターンを試してみたいと思います。 Vim8をパッケージマネージャでインストールするパターン NeoVimをパッケージマネージャでインストールするパターン Vim8をソースからビルドしてPython2, 3を有効にしたパターン NeoVimをパッケージマネージャからインストールしてPython2, 3を有効にしたパターン Dockerコンテナのベースイメージは軽量化のためAlipneLinuxを使用していますがCentOSでもUbuntuでも手順はほぼ変わらないと思います。 1. Vim8 まずはVim8のみ、Pythonを有効にしていない状態であれば以下のように簡単にインストールすることができます。 Dockerfileを用意したらbuildコマンドを実行し、コンテナを起動します。 コンテナを起動したらvimを起動できることを確認します。 2. NeoVim 次にNeoVimを試します。こちらもVim8同様、簡単にインストールすることができます。 先ほどとほぼ同じ手順でNeoVimがインストールできます。 3. Vim8 + Python 次にプラグインを使用するためにPythonを有効化したVim8をインストールします。先ほどの方法でもPython3は有効になっているのですが一応Python2も有効にしてみます。Dockerfileは少し複雑になります。 まずVim8のソースコードをcloneするためのgitや、ビルドするためのgccなど必要なパッケージをインストールします。 その後、git cloneしてcdでディレクトリに移動してからビルドしますがDockerでは以下のようにRUN cd vimとしてもconfigureが実行できません。 Dockerはコマンド1つ毎にカレントディレクトリに戻りますのでcdした後に&&で続けてビルドを実行しないとカレントディレクトリに戻って実行してしまうのでエラーになります。 configureが終わったらmake installして完了です。 コンテナを立ち上げてVimを確認します。 Vimの確認は以下のコマンドです。 +pythonとなっているのでPython2, Python3が有効になっています。 Vimを起動して確認してみましょう。 ノーマルモードで以下のコマンドを実行して1が表示されればPythonは有効になっています。 4. NeoVim + Python 最後にNeoVim+Pythonを試します。Pythonをインストールし、pipでneovimパッケージをインストールするだけですので前述のVim8ほど複雑ではありません。 Python3のpipはneovimをインストールする前にupgradeしないと怒られるのでupgradeしてからneovim installとしています。 こちらもコンテナを起動して確認します。 NeoVimはヘルスチェックができるので起動後、ノーマルモードでヘルスチェックコマンドを実行しましょう。 Python2, Python3のどちらもOKとなっているので有効であることが確認できました。 まとめ DockerでのVimのインストール方法をまとめてみました。Dockerを使う場合はファイル共有にしてローカルのVimで開発するのでDocker上でVimを使用することは少ないのですが、Dockerfileを作成しておくことは無駄ではないかな、と思い作成してみました。 Docker上で開発を行うVimmerの役に立てれば幸いです。 今回作成したDockerfileはこちら。https://github.com/aizulab-igarashi/docker_vim
-
[Golang + Docker]GinをDocker上で試してみる
先日、社外のエンジニアと話す機会がありました。その中でGo言語の話になり、Go言語に対しての良い印象を受けたのでそろそろバックエンド開発をGo言語にシフトしようかな、と思いました。 私はGoほぼ未経験ですので今回はDocker上にGo言語環境を容易し、Webサーバで「HelloWorld」を返す程度のものを作成してみようと思います。 ディレクトリ構成 ディレクトリの中身は以下の2ファイルのみです。それぞれ見ていきましょう。 docker-compose.yml Dockerイメージとしてgolangの最新版を使用します。 これだけでGo言語環境が使用できます。 ポートフォワードの設定は8080、コンテナ名は任意ですが今回はgo_containerとしました。 また、ディレクトリ直下のファイルをすべてコンテナ内の/go以下に配置しています。 実装はローカルのVim上で行い、実行をDockerコンテナ内で行う形で進めます。 main.go main.goを実装していきます。 その前に今回使用するGoパッケージをインストールします。 まず以下のコマンドでDockerコンテナを起動してアタッチします。 無事コンテナに入ることができたらGoのWebアプリケーションフレームワークのGinをインストールします。 インストールが完了したらmain.goを実装していきます。 git.Defaultでrouterを作成し、 routerにGETの/helloAPIを追加します。レスポンスは「Hello World!!」とします。 最後にポート8080を指定して起動します。 起動が確認できたらブラウザでlocalhost:8080/helloにアクセスしてみます。 レスポンスが確認できました。 まとめ Dockerを利用することで環境構築に時間をかけずにGo言語へ入門することができました。まずはGinを利用してCRUDのAPI開発を行なってみて少しずつGo言語での開発に慣れていきたいと思います。