静かなる名辞

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

python

【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を推し…

【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を作ってみる。中身に…

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

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

【python】MeanShiftのbandwidthを変えるとどうなるか実験してみた

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

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

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

【python】sklearnのMeanShiftクラスタリングを試してみる

はじめに MeanShiftはクラスタリングアルゴリズム。クラスタ数を自動で決定してくれるという長所がある。 理論的には最急降下法で各クラスタの極大点を探していく感じらしいです。わかりやすい解説があったので、リンクを張っておきます(ただし私自身はすべ…

【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.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

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

【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])] 要するに、比較的短いリストだが性質の違うものが入っており、それぞれ違う処理をして返したいのです。それだけなら良いの…