静かなる名辞

pythonとプログラミングのこと

【python】operator.itemgetterを使うべきか否か問題

はじめに この記事を開いた人の大半は「itemgetter? なにそれ」という反応でしょう。 (いや、検索で来た人はそうでもないかもしれないけど) itemgetterは以下のように使えるものです。 >>> lst = list(zip([1,3,5,6,7,1,4], [3,4,1,0,8,5,2])) # 特に値に…

【python】np.matrixの速度を測る

numpyで行列演算を行う方法としては、普通のnumpy配列に行列演算系の関数を適用していく方法と、あまり知られていないがnp.matrix型やnp.mat型を使う方法がある。 速度が違ったりするのだろうか? 仮に違うと困る(というか場面によって適切な方を選ぶ必要が…

【python】np.meshgridの基本的な使い方まとめ

meshgridはなんとなく苦手な感じなので、操作をまとめておく。 目次 とりあえずmeshgirdを作ってみる 計算する plotしてみる x,y,z座標の配列に変換する まとめ 参考にしたサイト とりあえずmeshgirdを作ってみる meshgrid自体はこのように何の変哲もないも…

【python】sklearnのclass_weightの挙動

はじめに 先に断っておくと、class_weightの挙動はモデルによって異なる可能性が十分ある。今回はsklearn.svm.SVCとsklearn.ensemble.RandomForestClassifierのドキュメントを参照して、一応基本的に共通する部分を抜き出した。class_weightを調整する必要が…

【python】sklearnで「何もしない」モデルがほしい

sklearnで「何もしない」モデルがあると、チョー便利。個人的にはそう思う。 どうやって使うかというと、具体的には前の記事で書いたFeatureUnionと組み合わせて使う。 参考:【python】複数の特徴をまとめるFeatureUnion - 静かなる名辞 たとえば、100次元…

【python】複数の特徴をまとめるFeatureUnion

単一の入力データから、複数の処理方法で幾つもの異なる特徴量が得られる・・・というシチュエーションがある。 この場合、「どれが最善か」という観点でどれか一つを選ぶこともできるけど、そうすると他の特徴量の情報は捨ててしまうことになる。総合的な性…

有意水準5%の論文が100本あったら

この記事は思いついたままに書いたポエム。 有意水準5%とは、その判断(主張)の妥当性が95%である、ということを意味する。よって、有意水準5%で検定したら、100回に5回は第1種の過誤を犯す。 有意水準5%の論文が100本あったら、(いちおうすべての論文が正…

【python】1つおきにリスト・文字列などから抽出する

スライスの基本的な話なんだけど、意外と知らない人が多いと思うので。 1つおきに取り出すには、こうする。 >>> "hogehoge~"[::2] 'hghg~' スライスで指定できるのはstart, stop, stepであり、上のように指定するとstart, stopはNoneでstepが2になる。 参考…

【python】sliceのちょっと深イイ(かもしれない)話

リスト(じゃなくてもだけど)に次のようにアクセスするとき、内部的には__getitem__が呼ばれていることは、歴戦のpythonistaの皆さんには常識でしょう。 >>> lst = [1,2,3,4,5] >>> lst[0] 1 この様子を自作クラスで観察してみましょう。 >>> class Hoge: .…

複数の目的変数で回帰を行う方法

はじめに 回帰分析を行う際、複数の目的変数に対して回帰をしたい場合があります。普通のモデルではできないのでちょっと面食らいますが、やり方は色々あるようです。 目次 はじめに 目的変数の数だけ回帰モデルを作る方法 複数の目的変数に対応したモデルを…

【python】リストの各要素に違う処理をする

問題設定 想定しているのは、たとえばこんなシチュエーションです。 s = "hoge! 1234" tmp = s.split() lst = [tmp[0], int(tmp[1])] 要するに、比較的短いリストだが性質の違うものが入っており、それぞれ違う処理をして返したいのです。それだけなら良いの…

【python】calendarモジュールの使い方

calendarモジュールは標準ライブラリに入っていて、曜日や日付の計算にはけっこう便利なモジュールらしいです。 でもあまり周知されていないので、使い方を(自分用に)メモっておきます。 ドキュメントはここです。 8.2. calendar — 一般的なカレンダーに関…

【python】pandasでデータを標準得点(z得点)に変換

データの正規化(標準化)をpandasでもやってみる。 正規化、標準化とは、データを分散1、平均0に変換する操作である。自分で書いてもできるが、scipyの関数を使うと簡単にできる。 >>> import pandas as pd >>> df = pd.DataFrame([[1,2,3,4,5,6], [6,5,4,3…

【python】pandasでdfの平均と標準偏差を計算する方法

DataFrameから平均と標準偏差を計算する方法をメモしておきます。 目次 列の平均と標準偏差を計算したい 行の平均と標準偏差を計算したい 列の平均と標準偏差を計算したい 超簡単。 >>> import pandas as pd >>> df = pd.DataFrame([[1,2,3,4,5,6], [6,5,4,3…

【python】辞書で同じキーに複数の値を登録する

ちょっとしたTips。 辞書(dict)は通常、一つのキーには一つの値しか登録できない。代入しても上書きされる。 >>> d = {} >>> d["hoge"] = 1 >>> d {'hoge': 1} >>> d["hoge"] = 2 >>> d {'hoge': 2} こういうときどうすれば良いのかというと、値をリスト等…

【python】# coding: utf-8はもうやめる

pythonのプログラムは先頭行(あるいはシェバンの次の二行目)でファイルの文字コードを指定することができます。エンコーディング宣言といいます。 こんなのとか # coding: UTF-8 こういうのもありますね。これはemacsに自動認識させるための書式らしい*1。…

map・filterとリスト内包表記はどちらを使うべきか?

はじめに pythonにはmap・filterという関数と、リスト内包表記という独自の記法があります。どちらを使っても同じようなことができますが、どちらを使うべきなのでしょうか? 色々な視点から考えてみます。 目次 はじめに 返り値の型 冗長さ 可読性 事故 ま…

【python】mapで複数の引数を渡したいときはstarmapが便利

pythonにはmapという関数があります。しかし、これはデフォルトでは一つの引数を前提としています。 >>> list(map(lambda a,b: a+b, zip([1,2,3],[4,5,6]))) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: <lambda>() missing 1 required pos</lambda></module></stdin>…

【python】numpyで二次元配列を結合して三次元配列にする方法

複数の二次元配列を結合して三次元配列に変換する方法について。 np.dstack そのものずばりのnp.dstackという関数がある。numpy.dstack — NumPy v1.14 Manual >>> a = np.array([[1,2,3],[4,5,6]]) >>> b = np.array([[7,8,9],[10,11,12]]) >>> a array([[1,…

【python】ランダムフォレストのチューニングにOOB誤り率を使う

一般的な機械学習のアルゴリズムでは、パラメタチューニングにはグリッドサーチ・交差検証を組み合わせて使うのが割と普通だと思います。sklearnにはそれ専用のGridSearchCVというクラスまで用意されています。 実際問題としては、GridSearchは良いとしても…

【python】bitのリストを高速にintに変換する

やりたいこと input:[0,1,0,0] output:4 極めて単純明快ですが、やるだけなら簡単なので速度を測ります。さらに、pure pythonでやると遅いことが目に見えているのでcythonで高速にしようというネタです。 pure pythonで書いたプログラム 素晴らしいことに(…

【python】順列・組み合わせを計算する方法

順列(Permutation)と組み合わせ(Combination)がほしくなるときがある。 だいたい標準モジュールかライブラリでできるので、計算方法についてまとめておく。 目次 順列・組み合わせそのものがほしい場合 順列の場合 組み合わせの場合 順列・組み合わせの…

【python】sklearnのtolってなんだ?

公式ドキュメントをよく読む方なら、色々なモジュールに"tol"というオプションがあることに気づいていると思います。たとえばSVCだと、こんな風に書いてあります。他のモジュールも似たり寄ったりですが。 tol : float, optional (default=1e-3)Tolerance fo…

【python】行を上書きしてprintする方法

出力の行を上書きしたいときがある。キャリッジリターン(\r)を使うと簡単にできるが、ちょっと難しい点もある。 方法 簡単な例を以下のサンプルコードに示す。 import time def main(): for i in range(20): print("\r{0:d}".format(i), end="") time.slee…

【python】pythonでscanf的なことをする

一年以上前にこんな記事を書きました。これはこれで今読み返すと面白い(香ばしい)記事ですが、真剣にpythonでscanfと同じことをしたくてアクセスしてきた人には役に立たないという問題点がありました。 そこで、pythonでscanfと同じことをする方法について…

【python】pythonでprintf的なことをする

一年以上前にこんな記事を書きました。これはこれで今読み返すと面白い(香ばしい)記事ですが、真剣にpythonでprintfと同じことをしたくてアクセスしてきた人には役に立たないという問題点がありました。 そこで、pythonでprintf的なことをする方法をまとめ…

【python】距離・非類似度行列を計算する

記事概要 非類似度行列(距離行列)の計算方法について説明する。 計算方法 対象データと使う非類似度 とりあえず、データを5つ作る。irisの先頭5要素を抽出する。 from sklearn.datasets import load_iris iris = load_iris() data = iris.data[:5] 5*5の非…

【python】sklearnライクなデータセットを作る

自作したりネットから拾ってきたデータセットにsklearnライクなインターフェースがあるとそこそこ便利です。なので、作る方法について調べました。 とりあえずデータセットを読み込んで型を調べます。 >>> from sklearn.datasets import load_iris >>> iris …

【python】SOMのライブラリSomocluはかなりおすすめ

SOM(Self-organizing maps:自己組織化写像)は割と古い、データの可視化手法(それ以外にも使えるが・・・)です。今回はpythonのSOMライブラリSomocluを使ってみたら、けっこう良かったというネタです。 目次 SOMの概要 ライブラリがない それでも頑張って…

【python】クラス変数のスコープには注意が必要

pythonでクラスを書くとき、一番多用するのは(恐らく)インスタンス変数ですが、クラス変数もたまに使います。 しかし、pythonのクラス変数にはちょっと「クセ」があります。リスト内包表記と組み合わせて問題になることが多いようです。 問題の例 リスト内…