静かなる名辞

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


2018-04-01から1ヶ月間の記事一覧

【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に変換する操作である。スポンサーリンク (adsbygoogle = window.adsbygoogle || []).push({}); 自分で書いてもできるが、scipyの関数を使うと簡単にできる。 >>…

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

概要 DataFrameから平均と標準偏差を計算する方法をメモしておきます。 目次 概要 列の平均と標準偏差を計算したい 行の平均と標準偏差を計算したい 特定の列・行だけ取り出してから計算する describeメソッドで全体の雰囲気を掴む 列の平均と標準偏差を計算…

【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></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】順列・組み合わせを計算する方法

Pythonで、順列(Permutation)と組み合わせ(Combination)がほしくなるときがある。また、順列・組み合わせの数がほしくなることもある。順列・組み合わせそのものはitertoolsで、その数はscipyで出せる。計算方法についてまとめておく。

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

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

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

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

【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 >>> ir…

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

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

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

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

emacsでpythonを書いているとき「arithmetic error」

tabキーでインデントしようとすると表題の通りのエラーが出て、インデントできない状況になった。 ググって出てきたのはここ。Indentation not working properly in emacs for python - Stack Overflow Check the value of python-indent-offset. If it is 0…

掛け算および割り算するとそれぞれある値になる数字の組を求める

プログラミングにはあまり関係のないテーマだし、中学校レベルの数学がわかればできるネタだが……ちょっと欲しくなったので。 問題 の2つの数(とりあえず正の実数)を考える。は次の条件を満たす。 が与えられたとき、を適当に定めたい。 つまり、ディスプレ…

【python】三項演算子のネストには注意

三項演算子(条件演算子)はpythonの文法でもっとも特徴的な要素かもしれません。 Trueのとき if 条件 else Falseのとき これには賛否両論がありますが、とにかく便利なことには違いありません。 ただし、ネストして使うときは注意が必要です。 A if conditi…

【python】数字を1桁ずつに分解

こういう処理がしたいときがある。 i = 2049 lst = [] while i > 0: lst.append(i%10) i //= 10 # 必須 lst.reverse() print(lst) # 結果-> [2, 0, 4, 9] 「もうできたじゃん」という意見もあると思うが、C言語のコードみたいでいかにもpythonicじゃない。 …

【python】in演算子は遅いのか?

記事の概要 素朴な疑問:「in演算子は遅いのか?」 速度を実測して検証しました。 目次 記事の概要 はじめに 検証 結果 結論 スポンサーリンク (adsbygoogle = window.adsbygoogle || []).push({}); はじめに inの速度は謎である。とりあえず、なんとなく速…