読者です 読者をやめる 読者になる 読者になる

CUBE SUGAR CONTAINER

技術系のこと書きます。

統計: 最小二乗法を使って回帰直線を求める

今回は、データセットのある次元の値から別の次元の値を予測する方法の一つとして、最小二乗法というやり方で回帰直線を求めてみる。 とはいえ、いきなり最小二乗法や回帰直線といわれても何が何やらという感じなので、最初はその説明からしていく。 回帰 ま…

統計: 共分散と相関係数でデータセットの相関を調べる

まず、二次元の特徴量をもったデータセットがあるときを考えてみよう。 もし、一方の次元の値が高いときに、もう一方も高い傾向があるときは、両者に正の相関があるという。 反対に、一方の次元の値が高いときに、もう一方は低い傾向があるときは、両者に負…

統計: 異なるデータセットの標本を標準得点で比較する

例えば、次のような二種類のデータセットをプロットしたヒストグラムがあったとする。 どちらも一般正規分布となっているようだ。 このデータセットを、あるテストの点数と捉えてみよう。 本来、テストなら上限値と下限値があるはずだけど、そこは簡略化して…

Mac で USB シリアルケーブルの iBUFFALO BSUSRC0610BS を使う

法人向けのネットワーク機器を使ったりするときなんかは、コンソールを取るのにシリアルケーブルが必要なことがある。 今回は、家で使っている iBUFFALO BSUSRC0610BS を Mac OS X で使う方法についてメモっておく。 商品はこちら。 この製品のドライバはチ…

Python: Fabric をスクリプトに組み込んで使う

Fabric は Python で書かれたデプロイやオペレーションを自動化するためのツール。 Fabric では、タスクと呼ばれるオペレーション内容も Python で書く。 今回は、普段ならコマンドラインツールから使うことが多い Fabric を Python のスクリプトに組み込ん…

統計: 変動係数で値のバラつきを比べる

まず初めに、次のようなヒストグラムがあったとする。 このヒストグラムには、青色と緑色のふたつのグループが含まれている。 それぞれのグループは、平均値や度数が異なるようだ。 果たして、それぞれのグループはどちらの方が値のバラつきが大きいのだろう…

Python: line_profiler でボトルネックを調べる

前回は Python の標準ライブラリに用意されているプロファイラの profile/cProfile モジュールについて書いた。 blog.amedama.jp 今回は、同じ決定論的プロファイリングを採用したプロファイラの中でも、サードパーティ製の line_profiler を使ってみること…

Python: profile/cProfile モジュールでボトルネックを調べる

プログラムを作ってみたは良いけれど、想定していたよりもパフォーマンスが出ないという事態はよくある。 そんなときはパフォーマンス・チューニングをするわけだけど、それにはまず測定が必要になる。 具体的に何を測定するかというと、プログラムの中のど…

CentOS7 で Docker Swarm を試してみる

先日リリースされた Docker 1.12 から Docker Swarm が本体に同梱されるようになった。 この Docker Swarm というのは、複数の Docker ホストを束ねて使えるようにするオーケストレーションツールになっている。 今回は、その Docker Swarm がどういったもの…

GNU Privacy Guard でファイルを気軽に暗号化する

このファイルは平文のまま置いておきたくないなーっていうようなファイルがたまにある。 例えば、何らかのトークンや個人情報などが書き込まれているもの。 そんなときは GNU Privacy Guard を使うとサクッと暗号化しておくことができて便利そう。 これは Op…

Python: データセットの標準化について

今回は機械学習とか統計で扱うデータセットの標準化について。 まずは、標準化されていない生のデータセットについて考えてみよう。 それらの多くは、次元によって数値の単位がバラバラだったり、あるいは大きさが極端に異なったりする。 これをそのまま扱っ…

Python: シーケンスアンパックについて

Python では、右辺がタプルなどのとき、左辺に複数の変数を置くことで、その中身を展開できる。 これをシーケンスアンパック (sequence unpack) という。 シーケンスアンパックを試してみる まずは python コマンドを実行して REPL を起動しておこう。 $ pyt…

Python: Ellipsis について

今回は Python の特殊な定数 Ellipsis について調べてみた。 Ellipsis ってなんだ Ellipsis というのは、主に拡張スライス文と共に使われる特殊な定数のこと。 これを使うと、例えば配列などのスライスで「...」を指定できるようになる。 3. 組み込み定数 — …

Python: 環境ごとの依存ライブラリをセットアップスクリプトの extras_require で管理する

Python のパッケージを作っていると、特定の環境だけで必要となるパッケージが大抵はでてくる。 例えばデータベースを扱うアプリケーションなら、使う RDBMS によってデータベースドライバのパッケージが異なる。 あるいは、インストール先の Python のバー…

Python: (今のところ) Flask で Request#get_data(as_text=True) は使わない方が良い

今回は最近見つけた Flask (正確には、その中で使われている WSGI ツールキットの Werkzeug) のバグについて。 先にざっくりと概要を説明しておくと Flask の Request#get_data() の引数として as_text=True を渡したときの挙動に問題がある。 このメソッド…

Python: Alembic をプロジェクトの途中から導入する

今回は Python のデータベースマイグレーションツールの Alembic について。 Alembic を使うとデータベースのスキーマをマイグレーションスクリプトにもとづいて管理できる。 マイグレーションスクリプトというのは、スキーマのバージョンを現在の状態から進…

Python: SQLAlchemy + mysqlclient (MySQLdb) でマルチバイト文字を扱う

今回は Python の O/R マッパーである SQLAlchemy と MySQL ドライバの mysqlclient を使ってマルチバイト文字を扱うときの注意点について書いてみる。 ただし RDBMS については MySQL ではなく、代わりに MariaDB を使った。 注意点というのを先に書いてし…

Python: インターネットと疎通がない環境に Python パッケージをインストールする (改)

このブログでは、以前にインターネットと疎通のない環境で Python パッケージをインストールする方法について書いたことがある。 具体的には Wheel でパッケージングした配布物を pip を使ってインストールしていた。 blog.amedama.jp ただ、上記の記事には…

Python: skflow を使ってディープラーニングで FizzBuzz 問題を解いてみる

最近 TensorFlow を使ってディープラーニングで FizzBuzz 問題を解くっていうブログ記事を読んだんだけど、これが面白かった。 joelgrus.com そこで、自分でも同じようにディープラーニングを使って FizzBuzz 問題を解いてみることにした。 ただし、アレンジ…

Python: 明示的な相対インポートの使い方

Python のインポートには、次のように3つの種類がある。 暗黙の相対インポート 明示的な相対インポート 絶対インポート このうち、暗黙の相対インポートについては Python 3 で廃止されたので使ってはいけない。 となると、残るは明示的な相対インポートか…

C: 静的ライブラリと共有ライブラリについて

C 言語で書かれた静的ライブラリと共有ライブラリについて、いまいち理解がちゃんとしていなかったのでまとめておく。 ライブラリというのは、複数のアプリケーションで使われるような共通の機能をまとめたものをいう。 今回使った環境は次の通り $ cat /etc…

Python: pipdeptree でパッケージの依存関係を調べる

Python のパッケージ同士が、どのように依存しているかを調べるのは意外と面倒くさい。 そんなときは今回紹介する pipdeptree を使うと楽ができそう。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.5 BuildVersion: 15F34…

CentOS: rpm でファイルが含まれるパッケージを調べる

なんか毎回忘れるのでメモっておく。 パッケージシステムの基盤として rpm を使っている Linux ディストリビューションでファイルがどのパッケージに含まれるか調べるやり方。 使った環境は次の通り。 $ cat /etc/redhat-release CentOS Linux release 7.2.1…

Ubuntu: apt-file でファイルが含まれるパッケージを調べる

あるファイルがどのパッケージに含まれているかを知りたくなる場面は意外と多い。 例えば何かをビルドするときにヘッダファイルがないといわれて、それがどのパッケージに含まれているか調べたいとか。 あるいは何かをパッケージングするときに、それが依存…

SQL: ナイーブツリーと閉包テーブルモデル

今回のエントリは以前かいた SQL のアンチパターン「ナイーブツリー」に関する記事の続き。 blog.amedama.jp 再帰クエリをサポートしていない RDBMS で再帰的な構造のスキーマを作りたいときの解決策のひとつとして閉包テーブルモデルを扱う。 使った環境は…

SQL: ナイーブツリーと経路列挙モデル

今回のエントリは以前かいた SQL のアンチパターン「ナイーブツリー」に関する記事の続き。 blog.amedama.jp 再帰クエリをサポートしていない RDBMS で再帰的な構造を表現するための解決策のひとつ経路列挙モデルを扱う。 使った環境は次の通り。 $ sw_vers …

SQL: ナイーブツリーと再帰クエリ

今回は「SQLアンチパターン」の中で紹介されているナイーブツリーというアンチパターンについて見てみることにする。 www.oreilly.co.jp 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersion: 15E65 $ mysql --ve…

Git のサブモジュールを使ってみる

今回は Git の中でもちょっととっつきにくいサブモジュール機能を使ってみることにする。 サブモジュール機能を使うと、外部のある Git リポジトリを別の Git リポジトリの中に取り込んで使うことができる。 これは例えばひとつの巨大なリポジトリを何らかの…

Python: flake8 のプラグインを書いてみる

flake8 は Python の linter の一種。 linter というのはソースコードを解析して問題がある箇所を見つけるツールの総称のことをいう。 flake8 の特徴としてプラグイン機構が備わっていることが挙げられる。 このプラグインは自分で自作できる。 つまり、独自…

Golang: math/big で大きい数や細かい数を扱う

Golang の数値型はビット数が決められているため、扱える数の大きさや精度に限界がある。 整数の大きさの限界 例えば 2 を 64 ビット左シフトした整数を作ってみる。 package main import "fmt" func main() { fmt.Println(2 << 64) } 上記を実行しようとす…

Golang: gore でスニペットの動作を確認する

Golang でも REPL を使いたいときは gore というサードパーティ製のパッケージがある。 今回使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersion: 15E65 $ go version go version go1.6 darwin/amd64 インストー…

Golang: gometalinter でソースコードを静的解析しまくる

先日、このブログで Golang の linter を使ってみたエントリを書いた。 blog.amedama.jp すると @r_rudi さんから gometalinter という便利なものがあることを教えてもらえた。 @momijiame https://t.co/VkWeIVx6pX をどうぞ— shirou - しろう (@r_rudi) 201…

Python: ast (Abstract Syntax Tree: 抽象構文木) モジュールについて

標準ライブラリの ast モジュールを使うと Python で書かれたソースコードを構文解析できる。 それによって得られるオブジェクトは AST (Abstract Syntax Tree: 抽象構文木) と呼ばれる。 その使い道としては、例えば Python の lint ツールなどが考えられる…

Golang: ソースコードを静的に解析する

2016/4/5 追記: こっちを使った方が便利そうです。 blog.amedama.jp 今回は Golang でイケてるソースコードを書くのに使うと良さそうなツールについて調べた。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersio…

Python: uptime でシステムの連続稼働時間を得る

システムの uptime (連続稼働時間) に関する情報はプラットフォームごとに取得する方法が異なっている。 今回紹介する Python の uptime パッケージは、それらの差異を吸収して共通の API で連続稼働時間を知ることができる。 今回使った環境は次の通り。 $ …

Linux ディストリビューションのコマンド実行履歴について

Linux ディストリビューションのコマンド実行履歴まわりについて理解を深めるために動作を調べたのでまとめておく。 主にコマンド実行履歴を残すファイルの指定方法とか history コマンドについて。 今回使った環境は次の通り。 $ cat /etc/lsb-release DIST…

Alien で rpm を deb に変換してみる

最近知ったんだけど Alien というソフトウェアを使うと rpm とか deb を相互に変換できるらしい。 今回はその Alien で CentOS7 向けの rpm を deb に変換して Ubuntu 14.04 LTS にインストールしてみた。 使った環境は次の通り。 $ cat /etc/lsb-release DI…

「スマートPythonプログラミング」という本を書きました

表題の通り Python の本を書いたので、そのご紹介です! スマートPythonプログラミング: Pythonのより良い書き方を学ぶ作者: もみじあめ発売日: 2016/03/12メディア: Kindle版この商品を含むブログを見る どんな本なの? ひと言で表すと、自信を持って Pytho…

Python: テストフレームワーク nose のプラグインを書いてみる

nose は Python のテストフレームワークのひとつ。 特徴のひとつとしてプラグイン機構があるためテストランナーの挙動をカスタマイズできる点が挙げられる。 プラグインの書き方は次のページに詳しく書かれている。 Writing Plugins — nose 1.3.7 documentat…

Python: モジュールとパッケージ

Python のモジュールとパッケージという概念についてまとめておく。 今回使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.3 BuildVersion: 15D21 $ python --version Python 3.5.1 モジュールを作ってみる Python におけるモ…

API Blueprint で Web API の仕様を書く

Web API のドキュメンテーションって結構めんどくさい。 どういうフォーマットで書くか悩むし、書いていくと似たような内容を何回も繰り返すことになる。 ドキュメントとは別に開発用のモックも用意しなきゃいけなくて、それとの整合性が…ってな具合に悩みは…

Python: 古いバージョンを使い続けるということ

例えば標準出力にユニコード文字列を書き込むという単純極まりない処理をやってみる。 Python 2.7 を使うとこんなかんじ。 $ python --version Python 2.7.10 $ python >>> import sys >>> sys.stdout.write(u'うにこーど\n') うにこーど 何の問題もない。 P…

シェル変数と環境変数

sh

シェルで扱う変数にシェル変数と環境変数があることは何となく知っていた。 ただ、それぞれどう違うのかとか操作方法についてあまり意識したことがなかった。 なので一旦ここで整理しておくことにする。 今回使った環境は次の通り。 $ cat /etc/lsb-release …

Python: EAFP スタイルと LBYL スタイル

プログラミングの方針に EAFP スタイルと LBYL スタイルという分類の仕方があることを知った。 これはそれぞれ「Easier to Ask for Forgiveness than Permission」と「Look Before You Leap」の頭文字から取られているらしい。 ざっくり言えば EAFP スタイル…

Python: PyPI にないパッケージを依存パッケージにするには

PyPI に無いパッケージを自作パッケージの依存ライブラリにしようとしたら色々と苦労したので、そこで得られた知見を共有しておく。 どうやら現状では setuptools と pip で対応方法が異なっているために、それぞれで微妙に異なるやり方を取る必要があるよう…

Docker: データボリュームとデータボリュームコンテナ

Docker を使っているとデータの永続化が問題になる。 例えばデータベースのアプリケーションを動作させるとして、どこにデータを残せばいいだろう。 通常のファイルシステム上に置いてしまうと、コンテナが終了すると使えなくなってしまう。 そんなときに便…

Python: pipe を使った Infix プログラミング

今回紹介する Python の pipe というサードパーティ製のパッケージは、実用性はともかくとして非常に面白い API になっている。 pipe を使ったソースコードを見れば目からウロコが落ちること請け合いだ。 その独特な書き方はインフィックス記法というらしい…

Python: concurrent.futures を使った並行・並列処理

Python の concurrent.futures はバージョン 3.2 で追加された並行・並列処理用のパッケージ。 似たようなパッケージにはこれまでにも threading や multiprocessing があったんだけど、これはそれよりも高レベルの API になっている。 デフォルトでスレッド…

docker-machine で "Error response from daemon: client is newer than server" になったときの対処方法

今回のネタは、おそらく docker-machine を使っていればいつか遭遇するエラーについて。 結論から先に言うと docker-machine を使っていて、ある日 Docker 本体のバージョンを更新するとこうなる。 まず前提として Docker は Linux コンテナが動作する Docke…

Python: TensorFlow のチュートリアルでソフトマックス回帰を試す

最近、囲碁でプロ棋士を負かした AlphaGo も、この TensorFlow で組んだニューラルネットワークを使っているんだとか。 とはいえ、チュートリアルを読みながら使ってみると、これは単にディープラーニングだけをターゲットにしたライブラリではないように感…