静かなる名辞

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

百発百中の砲一門と百発一中の砲百門について計算してみる

はじめに 「百発百中の砲一門は百発一中の砲百門に勝る」という東郷平八郎のものとされる発言があります。 発言の真偽や是非、ましてや東郷や旧日本海軍について何か述べようという訳ではありません。確率論的にどんな感じになるのかを考えてみようという試…

【python】sklearnのRidgeとLassoを使ってみる

はじめに Rdige、Lassoといえば割と定番の正則化アルゴリズムです。 特にLassoはスパースな解を得てくれるという触れ込みです。なんだかカッコいいので、昔から触ってみたいと思っていました。 実験 このような関数fを考えます。 def f(x): return -3*x + 5*…

【python】線形な分類器の比較

はじめに 線形な分類器は癒やし やれ、RBFカーネルだ、決定木だ、ニューラルネットだ、深層学習だ、と流行り物に乗っかって、言うことを聞かない非線形な分類器をなんとかねじ伏せている綿牛たちは、きっと心が荒んでいるのでしょう。 そんな私たちに、線形…

【python】ImportError: No module named '***'の対処法

はじめに ライブラリをインストールして、いざ使おうと思ったら「ImportError: No module named '***'」が出ちゃった、という経験をされる方は多いと思います。 その対処法、トラブルシューティング手順についてまとめておきます。 なお、この記事はpipでイ…

【python】pandasのgroupbyで結果をlistにする

pandasのgroupbyを使って、平均や標準偏差を計算する方法は検索するとすぐ出てきます。 ただ、「そういうの良いから、項目ごとに使いやすいイテレータにしてまとめてくれよ!」と思うときがありますよね。 >>> import pandas as pd >>> df = pd.DataFrame({"…

【python】ネストされた辞書をflattenしてみる(一つの辞書にまとめる)

こんな辞書を考える。 d = {1:"a", 2:{"b":"hoge"}, 3:{"c":"fuga", "piyo":["foo", "bar"], "buzz":{"d":"hogehoge"}}} 次のような結果を得るにはどうすれば良いか。 {(1,): 'a', (2, 'b'): 'hoge', (3, 'c'): 'fuga', (3, 'piyo'): ['foo', 'bar'], (3, 'b…

【python】sysを使ってpythonインタプリタについて調べる

はじめに 実行しているpythonインタプリタはどこにあるの? という疑問が生まれたときは、標準モジュールのsysを使って調べることができます。 見るものの選択肢は幾つかあります。なお、この記事の内容はすべて公式ドキュメントに基づきます。29.1. sys — …

【python】numpy配列を分割する

はじめに numpy配列を分割したくなることがたまにある。 当然というかさすがというか、それ用の関数が用意されている。でも使い方をよく忘れるので覚書として書いておく。 目次 はじめに np.split np.array_split まとめ np.split そのまんますぎる名前の関…

【python】関数内関数は動的に生成される

わかっている人には当たり前のことですが、他の言語から来た人だと「んんん?」かもしれません。 こうなる >>> def f(): ... def g(): ... pass ... return g ... >>> a = f() >>> b = f() >>> a is b False >>> id(a) 139834257176640 >>> id(b) 1398342317…

【python】内包表記をbreakする方法を考える

リスト内包表記や辞書内包表記、ジェネレータ式などの内包表記は便利ですが、途中で止めたいときがあったとして(あるかどうかは知りませんが)どうしたら良いのでしょう? カウンタを使う こういう方法を真っ先に思いつきます。 >>> [x for x in range(20) …

【python】execを使って変数名を動的に変える方法についての考察

実用的には無意味というかやるべきではないんだけど、ちょっと気になったので。 やり方としてはexecでやれば良い まずやり方から。 exec("hoge = 'ほげ'") # hoge = 'ほげ'と書いたのと同じ print(hoge) # => ほげ stringを引数に渡せるので、なんでもし放題…

【python】ランダムフォレストのOOBエラーが役に立つか確認

はじめに RandomForestではOOBエラー(Out-of-bag error、OOB estimate、OOB誤り率)を見ることができます。交差検証と同様に汎化性能を見れます。 原理の説明とかは他に譲るのですが、これはちゃんと交差検証のように使えるのでしょうか? もちろん原理的に…

MeCab+Pythonでunidicを使う

はじめに MeCabの辞書といえばipadicが定番ですが、unidicという辞書もあります。ちょっとこれを使いたくなったので、使うことにしました。 なお、MeCabおよびmecab-pythonはすでにipadic等で使える状況になっているものとします。 目次 はじめに unidicのい…

【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】TF-IDFで重要語を抽出してみる

概要 すでに語り尽くされた感のあるネタですが、TF-IDFで文書の重要な単語(重要語、あるいは特徴語)を抽出してみます。 numpyとsklearnを使うと、10行程度のコードで実現できるので簡単です。 コードの書き方 とりあえず、対象データとしては20newsgroups…

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

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

オブジェクト指向の教育にPythonが向いていると思うこれだけの理由

はじめに オブジェクト指向は今となっては常識である。常識であるがゆえに、いかに初心者にわかりやすく教えるかが課題になる。 世の中でオブジェクト指向の「教材」として使われている言語は、 Java Ruby の二択くらいだと思う。が、あえて僕はPythonを推し…

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

はじめに 関数やメソッドに引数を渡す方法は、一般的には 値渡し 参照渡し の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】MeanShiftのbandwidthを変えるとどうなるか実験してみた

前回の記事ではMeanShiftクラスタリングを試してみた。hayataka2049.hatenablog.jp このMeanShiftにはbandwidthというパラメータがあり、クラスタ数を決定する上で重要な役割を果たしているはずである。 いまいち結果に納得がいかないというとき、bandwidth…