静かなる名辞

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

Tips

【python】多重リストを昇降混ぜてソート

pythonでは多重リストのソートは次のように書ける。 import random from pprint import pprint data = [[random.randint(0, 20), random.randint(0, 20)] for _ in range(10)] print("data") pprint(data) print("\nsorted data") pprint(sorted(data, key=l…

【python】io.StringIOは便利なので使いこなそう

はじめに io.StringIOというものがあります。標準モジュールのioに属します。16.2. io --- ストリームを扱うコアツール — Python 3.6.6 ドキュメント これがどう便利かというと、「ファイルオブジェクトのように見えるオブジェクト」を作れます。 読み込みに…

共有渡しと参照の値渡しと

はじめに 関数やメソッドに引数を渡す方法は、一般的には 値渡し 参照渡し の2通りがあると認知されている。 ところで、『参照の値渡し』という言葉も(ほぼ日本語Web圏限定で)存在する。これは「いわゆる『参照渡し』は参照自体を書き換えるんじゃなくて、…

【python】immutableなオブジェクトは1つしか存在しないという迷信

たまに誤解している人がいるので、書いておく。 pythonのオブジェクトにはimmutableという概念がある。これはオブジェクトが変更不可能であるということを示す。intやstr, tupleなどが代表的なimmutableなオブジェクトである。 オブジェクトがimmutableであ…

【python】GridSearchCV『の』パラメータ・チューニング

はじめに 機械学習でパラメータ・チューニングをしたい場合、グリッドサーチを行うのが定石とされています。sklearnではグリッドサーチはGridSearchCVで行うことができます。sklearn.model_selection.GridSearchCV — scikit-learn 0.19.1 documentation それ…

【python】sklearnのVarianceThresholdを試してみる

はじめに VarianceThresholdは名前の通り、分散がしきい値以下の特徴量を捨てます。sklearn.feature_selection.VarianceThreshold — scikit-learn 0.19.1 documentation これといってすごいところはありませんが、気楽に使えそうなので試してみました。 目次…

sklearnのLabelEncoderとOneHotEncoderの使い方

はじめに sklearnのLabelEncoderとOneHotEncoderは、カテゴリデータを取り扱うときに大活躍します。シチュエーションとしては、 なんかぐちゃぐちゃとカテゴリデータがある特徴量をとにかくなんとかしてしまいたい 教師ラベルがカテゴリデータなので数値ラベ…

【python】反転させて先頭n個取るスライス

タイトルの通りのものが必要になりました。一体どう書くのでしょう? とりあえず反転させる >>> lst = list(range(20)) >>> lst[::-1] [19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] ま、これは常識(python廃人の皆さんには)。…

【python】べき乗とべき根の計算

べき乗は、べき根はです。2乗とかsqrtくらいはわかっても、n乗根あたりになるとすぐ出てこないという人も多いのでは? 目次 組み込み関数powを使う方法 べき乗演算子を使う方法 numpyに頼る方法 n乗根について どれが速いの? まとめ 組み込み関数powを使う…

python環境構築まとめ

概要 pythonの環境構築に悩む後輩たちのために、環境構築についてまとめておく。 目次 概要 はじめに pythonをやるのに向いたOS windows Mac OS linux系 その他のOS Web上実行環境 結論 生pythonを使う(直接インストールしてそのまま使う) パッケージマネ…

【python】listをforループで回してremoveしたら思い通りにならない

pythonプログラミングを始めたばかりの人がよくハマるネタです。日本語Web圏にはイマイチよくまとまった記事がないようなので、まとめておきます。 問題の概要 たとえば、0から9のリストから偶数だけ取り出そうとして、こんなコードを書いてみます。 >>> lst…

【python】pandasのDataFrameをLaTeX出力

そんな機能があるらしい。DataFrame.to_latex()です。pandas.DataFrame.to_latex — pandas 0.21.1 documentation これが使えると何かの役に立つかもしれないので、使い物になるかどうか確認してみる。 お試し とりあえず、てきとーにdfを作ってみる。中身に…

VMware Playerでキャッシュを削除して仮想ディスクの容量を空ける(linux)

VMware Playerはホストとゲスト間で、ドラッグ・アンド・ドロップやコピ・アンド・ペーストによってファイルを移動できる。 便利な機能なので頻繁に使ってしまうが、これは腹立たしいことにゲストの仮想ディスク上にキャッシュを生成する。そしてこのキャッ…

【python】その矛盾した__eq__は・・・

私は疑問を持った pythonでは比較演算子==を使うと、内部的には__eq__メソッドが呼ばれる。 ここから、素朴な疑問が生じる。比較演算子は二項演算子なので、2つのオブジェクトに対して適用される。 どちらのオブジェクトの__eq__が呼ばれるのだろう? また、…

【python】numpyでの等比数列の作り方

等比数列がほしくなった。作り方をメモしておく。 目次 比が決まっている場合 範囲とnが決まっている場合 比が決まっている場合 たとえば、3倍ずつ増えていく等比数列がほしいとしよう。 これは次のように簡単に作れる。 >>> import numpy as np >>> rates =…

【python】matplotlib.cmの使い方を説明しようと思う

テーマ matplotlib.cmが直接使うことはない謎の技術と思われがちなので、「普通に可愛い子なんですよ」って説明する。cm (colormap) — Matplotlib 2.2.2 documentation cmとは何か とりあえずmatplotlib.cmの属性に何があるか見てみましょう。ちなみに、属性…

【python】複数のin演算子をまとめる方法

はじめに こういう条件を考える。 >>> s = "hoge! fuga! piyo!" >>> if "hoge" in s and "fuga" in s and "piyo" in s: ... print("fizz!") ... fizz! 壮絶にまどろっこしい。できればこんな風に書きたい。 >>> if ("hoge", "fuga", "piyo") in s: ただ、こ…

【python】numpyで乱数のseedを設定する方法

「seed(種)」とか「random state」とか呼ばれる奴の設定方法。これを設定することで、乱数の処理に再現性を与えることができる。 方法 np.random.seed()を呼ぶと、とりあえずseedが引数でリセットされる。numpy.random.seed — NumPy v1.14 Manual やってみ…

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

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

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

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

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

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

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

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

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