CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: pandas で DataFrame を連結したら dtype が int から float になって驚いた話

今回は pandas を使っているときに二つの DataFrame を pd.concat() で連結したところ int のカラムが float になって驚いた、という話。 先に結論から書いてしまうと、これは片方の DataFrame に存在しないカラムがあったとき、それが全て NaN 扱いになるこ…

Python: pickle を使って pandas の CSV 読み込み時間を削減する

機械学習やデータ分析に使うデータセットは CSV などの形式で提供される場合がある。 それを Python で処理するときは pandas の DataFrame 形式に変換することが多い。 このとき CSV から DataFrame に変換する処理は意外と時間がかかる。 特に大きなデータ…

Python: 機械学習の学習済みモデルを pickle でファイルに保存する

今回は機械学習において学習済みのモデルを取り回す方法の一つとして pickle を扱う方法を取り上げてみる。 尚、使うフレームワークによっては pickle 以外の方法があらかじめ提供されている場合もある。 例えば学習済みモデルのパラメータを文字列などの形…

Kaggle をコマンドラインで操作する

最近、データ分析コンペサイトの Kaggle に公式のコマンドラインツールができた。 今回はそれを使ってみる。 環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.4 BuildVersion: 17E202 $ python -V Python 3.6.5 インストール ツー…

Python: LightGBM を使ってみる

LightGBM は Microsoft が開発した勾配ブースティング (Gradient Boosting) アルゴリズムを扱うためのフレームワーク。 勾配ブースティングは決定木 (Decision Tree) から派生したアルゴリズムで、複数の決定木を逐次的に構築したアンサンブル学習をするらし…

vagrant-hosts プラグインを使ってホスト名を名前解決する

Vagrant では一つの Vagrantfile を使って複数の仮想マシンを管理することもできる。 そういったとき、それぞれの仮想マシンでお互いのホスト名が解決できると扱いやすくなる。 それを実現するには、自前でプロビジョニングを設定する以外にも vagrant-hosts…

inode (アイノード) を枯渇させてみる

inode (アイノード) は Unix 系のファイルシステムに登場する概念の一つ。 これはファイルシステム上に保存しているファイルなどのメタデータを格納するデータ構造になっている。 本のメタファーで説明すると、本文が実際に保存されているデータなら inode …

Python: pandas の DataFrameGroupBy#agg() には関数も渡せる

今回は pandas で DataFrame#groupby() したときに得られるオブジェクト DataFrameGroupBy が持つメソッド agg() について。 これまであんまり使ってこなかったけど、関数が渡せることを知って色々と便利に使えそうだなと感じた。 ちょっと前置きが長くなる…

Python: ロギング設定をファイルから読み込むときの注意点

大昔にハマった問題を忘れていて、またやってしまったので備忘録として残しておく。 結論から先に書いておくと、まず Python でロギングの設定をファイルから読み込むときは logging.config.fileConfig() という関数を使う。 そのとき disable_existing_logg…

Docker Compose を使って複数のコンテナを管理する

今回は Docker Compose を使って複数のコンテナをまとめて管理する方法について。 docker run コマンドを使ってチマチマとやるよりもぐっと楽にできる。 コンテナオーケストレータを使うほどでもないけど複数台コンテナを扱いたい…っていうシチュエーション…

Google Cloud SDK の CLI で GCP を操作する

今回は Google Cloud SDK を使うことで CLI から Google Cloud Platform を操作してみる。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.3 BuildVersion: 17D102 インストール macOS であれば Google Cloud SDK は Homebr…

Python: pandas でダミー変数を生成する

今回は pandas を使ってダミー変数を生成する方法について書く。 ダミー変数というのは、例えば国籍や性別といった名義尺度の説明変数を数値に変換する手法のこと。 名義尺度は順序関係を持たないので、単純に取りうる値に対して連番を振るようなやり方では…

Python: pandas の DataFrame から不要なカラムを削除する

今回は pandas の DataFrame オブジェクトから不要なカラムを取り除く方法について書く。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.3 BuildVersion: 17D102 $ python -V Python 3.6.4 下準備 まずは環境に pandas を…

Python: pandas で欠損値の有無を調べる

今回はかなり小ネタだけど pandas の DataFrame オブジェクト内に欠損値を含むカラムがあるか調べる方法について。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.3 BuildVersion: 17D102 $ python -V Python 3.6.4 $ pip …

Python: pandas で対応関係を渡して値を変換する

例えばデータセットの中のカラムが文字列型なんかで入っていると、それを数値に直したくなることはよくあると思う。 今回はそれを pandas でやる方法について書く。 結論から先に書くと Series オブジェクトにある map() メソッドを使うと上手くいく。 使っ…

Python: pandas で特定の値がいくつあるか数える

今回は pandas で特定の値がいくつ数える方法について。 結論から先に書いてしまうと value_counts() という専用のメソッドがあるよ、という話。 使った環境は次の通り。 $ python -V Python 3.6.4 $ pip list --format=columns | grep -i pandas pandas 0.2…

PySpark のスクリプトファイルで引数を扱う

今回は Apache Spark の Python インターフェースである PySpark について。 PySpark では定型的な作業についてはスクリプトファイル (*.py) にまとめて spark-submit コマンドで実行することになる。 その際に、動作に必要な引数をさばく方法について。 結…

PySpark の DataFrame を SparkSQL で操作する

Apache Spark には SQL の実行エンジンが組み込まれていて、そのインターフェースは SparkSQL と呼ばれている。 この機能を使うと Spark で主に扱われるデータ構造の DataFrame オブジェクトを SQL で操作できる。 今回は PySpark から DataFrame を SparkSQ…

Apache Hive の Vectorization 機能を試す

今回は Apache Hive の Vectorization 機能を使ってパフォーマンスが向上するか試してみる。 Apache Hive では、通常 HDFS に保存されたデータを一行ずつ処理する。 それに対し Vectorization 機能を使うと、状況は限られるものの複数行をまとめて処理できる…

Apache Hive で圧縮形式のデータを扱う

Apache Hive のテーブルを構成するデータは、デフォルトでは無圧縮になっている。 しかし、設定を変更することで圧縮形式のデータも扱うことができる。 そこで、今回は Apache Hive で圧縮形式のデータを扱ってみることにする。 データを圧縮することには、…

Docker コンテナのログを syslog でリモートホストに飛ばす

今回は Docker コンテナのログを syslog で別のホストに飛ばしてみることにする。 言うまでもなく、ロギングはシステムを運用する上で欠かせない要素の一つ。 Docker には、あらかじめ複数のロギングドライバが組み込まれていて、それらを使い分けることがで…

split コマンドでファイルを分割する

巨大なファイルを扱おうとすると、環境によってはクォータなどの影響を受けて取り回しが悪いことがある。 今回は、そんなときに split コマンドで一つのファイルを複数にばらして扱う方法について。 ここでは macOS を使ったけど GNU/Linux でも同じやり方が…

Apache Hive を HiveServer2 経由で操作する

Apache Hive を操作する方法としては、以前から hive というコマンドラインツールが提供されている。 ただ、この方法だと hive コマンドがインストールされたホストでしか Apache Hive を操作できない。 また、Hadoop エコシステムを形成する別のソフトウェ…

Apache Hive のメタストアに MariaDB を使う

Apache Hive はテーブルのスキーマ定義などメタデータを RDBMS に保存する。 デフォルトでは Java で書かれた組み込み RDBMS の Apache Derby が使われる。 今回は、その Apache Derby の代わりに MariaDB (MySQL) を使う方法について。 使った環境は次の通…

まっさらな状態から Docker イメージを作る

Docker イメージというと、一般的には既存の Docker イメージをベースにして作る機会が多い。 そうしたとき Dockerfile にはベースとなるイメージを FROM 命令で指定する。 とはいえ、既存のイメージをベースにしない、まっさらな状態からイメージを作ること…

Python: memory_profiler でプログラムのメモリ使用量を調べる

今回は memory_profiler というモジュールを使ってプログラムのメモリ使用量を調べる方法について紹介する。 pypi.python.org このブログでは、以前に Python のプロファイラとして profile/cProfile や line_profiler について書いたことがある。 これまで…

PySpark の UDF (User Defined Function) を試す

今回は PySpark の UDF (User Defined Function) 機能を使ってみる。 UDF というのはユーザが定義した関数を使って Spark クラスタで分散処理をするための機能になっている。 柔軟に処理を記述できるメリットがある一方で、パフォーマンスには劣るというデメ…

Docker コンテナの動作に必要な設定を起動時に渡す

今回は Docker コンテナを起動するタイミングで、コンテナの動作に必要な設定を受け渡す方法について書く。 やり方としては、大まかに分けて「環境変数を通して渡す」と「コマンドライン引数を通して渡す」という二つがある。 どちらの場合も docker run で…

Docker のホストとコンテナ間でファイルをやり取りする

Docker ホストとコンテナの間でファイルをやり取りするのって以前はかなり面倒だったと思う。 そんな記憶も今は昔、専用のコマンドが用意されてだいぶ簡単になっているようだ。 docker cp | Docker Documentation 使った環境は次の通り。 $ sw_vers ProductN…

PySpark: Jupyter Notebook からローカルの PySpark ドライバを操作する

今回はローカルで動作している PySpark のドライバプログラムを Jupyter Notebook から操作する方法について。 ようするに Jupyter Notebook と PySpark (のドライバ) が同じマシン上で動く場合ということ。 この場合の設定内容はとてもシンプルで、環境変数…