静かなる名辞

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


【python】pandasのto_sqlを試してみる

はじめに 気軽にDataFrameをデータベーステーブルに変換できそうなto_sqlなるものがあるので、試してみます。pandas.DataFrame.to_sql — pandas 0.23.4 documentation sqliteを使いたかった ドキュメントではSQLAlchemyを使ってSQLiteを叩いているようですが…

numpy配列に文字列を格納した場合の型と挙動

numpy配列に文字列を格納した場合、どう扱われるのか知らなかったので、調査してみました。 まず基本。 >>> import numpy as np >>> a = np.array(["a", "b"]) >>> a array(['a', 'b'], dtype='<U1') >>> type(a[0]) <class 'numpy.str_'> 配列そのものは「</class></u1')>

【python】threadingでsleep中に即座にスレッドを止める

pythonのスレッド活用というと、こんなコードがすぐに思い浮かびます。 # エンターされるまでは数字を更新して、 # エンターされたら終了する(つもり) import time import threading flag = True def th(): i = 0 while flag: print("\r{}:".format(i), en…

もう参照の値渡しとは(無条件では)言わせない

注意:この記事では「参照の値渡し」がどういうものか、という点については説明しません。あくまで「参照の値渡し」を理解している方が対象読者です。 概要 「参照の値渡し」という言葉がありますが、この言葉に関してはずっとモヤモヤ感を抱いていました。 …

AdaBoostとRandomForestの比較

AdaBoost(アダブースト、もしくはエイダブースト)は代表的なアンサンブル学習アルゴリズムとしてよく取り上げられるものですが、実用的に使っている事例はあまり見かけません。ランダムフォレストでいいじゃんとなっていることが多いのではないでしょうか…

【python】sklearnのAdaBoostをデフォルトパラメータで使ってはいけない

はじめに sklearnのAdaBoostを使う機会がありましたが、デフォルトパラメータのまま使ってみたら性能が悪すぎて驚きました。 対策を書きます。 症状 とりあえずデフォルトパラメータで動かしてみて、様子を見るというシチュエーションはたくさんあると思いま…

【python】MeCabバインディングのparseToNodeでBOS/EOSを除外

はじめに mecab-pythonで以下のようなコードを書くことがよくあると思います。 import MeCab s = "吾輩は猫である。" tagger = MeCab.Tagger("") tagger.parse("") node = tagger.parseToNode(s) while node: print(node.surface, node.feature) node = node…

はてなブログの独自ドメイン化でカバレッジが切り替わらないときの対処

はじめに 去年の秋頃、このブログを独自ドメイン化しましたが、今年に入ってもSearch Console上で古いサイトのインデックス・カバレッジが大量(数百件とか)に残ったままでした。 思いついた方法を試したところ、さほど重要でないページ数件*1を残してカバ…

TechAcademyのその後

はじめに 以前このような記事を書きました。TechAcademyがteratailの質問・回答を盗用していた件 - 静かなる名辞 TechAcademy盗用事件 公式発表と深まる疑念 - 静かなる名辞 TechAcademyに問い合わせたところまでで終わっていましたが、その後すこし私生活が…

TechAcademy盗用事件 公式発表と深まる疑念

TechAcademyマガジンで、teratailの質問・回答の盗用疑惑があり、前回の記事で取り上げました。私が書いたその記事はTwitterやはてブ経由で拡散して多くの方に見ていただき、TechAcademyマガジンの運営上の問題が多くのインターネットユーザに共有されました…

TechAcademyがteratailの質問・回答を盗用していた件

はじめに 私はteratailというQAサイトで回答をしていて、pythonカテゴリ総合一位だったりします。あちこちのサイトを見ていたら、TechAcademyというサイトがteratailの質問と回答を盗用しているという話を見つけました。図々しいと思いながらも情報をまとめ…

【python】複数のlist(など)を対象にmapを使う

あまり知られていませんが、組み込みのmapは実は複数のiterableを引数に取れるように定義されています。 追加の iterable 引数が渡されたなら、 function はその数だけの引数を取らなければならず、全てのイテラブルから並行して取られた要素に適用されます…

【python】__slots__は速度的にどうなのか

概要 __slots__を使うとメモリをケチれるという話はよく見かけますが、属性アクセスの速度については話を聞かないので調べてみました。 実験コード import timeit class A_slots: __slots__ = ["a"] def __init__(self): self.a = 42 class A_attr: def __in…

【python】辞書で複数の値を一つのキーにする

概要 複数の値を一つのキーにまとめて、結果と対応させたいというケースがあります。 >>> d = {1,2:"hoge", 3,4:"fuga"} # こんな感じ? 残念ながらこれはエラーになります。 File "<stdin>", line 1 d = {1,2:"hoge", 3,4:"fuga"} ^ SyntaxError: invalid syntax </stdin>…

【python】sklearn 0.20でclassification_reportの仕様が変わっていた

はじめに 遅まきながら、sklearn 0.20でclassification_reportの仕様が変わったことに気づきました。 基本的な使い方は変わりませんが、それなりに大きな変化になります。 変更点 まず0.19の引数と出力のフォーマット。 sklearn.metrics.classification_repo…

【python】print関数を使いこなそう

ぼくたちは本当のprintを知らない pythonのprint関数については、たかがprintと思っている人も多いと思いますが、しかしオプションをすべて言える人はあまりいないと思います。把握しておくと出力の細かい制御をしたいとき役立ちます。 そこで、printの使い…

【python】sklearnのRandomizedSearchCVを使ってみる

はじめに RandomizedSearchCVなるものがあるということを知ったので、使ってみます。うまく使うとグリッドサーチよりよい結果を生むかもしれないということです。sklearn.model_selection.RandomizedSearchCV — scikit-learn 0.21.3 documentation グリッド…

numpyやpandasでThe truth value of ... is ambiguous.のようなエラーが出たときの対処

numpyやpandasでThe truth value of ... is ambiguous.のようなエラーが出たときの対処 条件式を使って生成したようなboolのnumpy配列を使っていると、次のようなエラーが出ることがあります。また、pandasのSeriesやDataFrameでも同様のエラーが発生する場…

ファイルオブジェクトのcloseはflushも行う。確実にしたければfsync

以前、「ファイルオブジェクトのcloseメソッドは同時にflushも行う」ことを知りました。 どうやらcloseするときは内部でflushメソッドが呼ばれるようです。 このストリームをフラッシュして閉じます。 io --- ストリームを扱うコアツール — Python 3.7.3rc1 …

scipy.optimize.curve_fitを使っていろいろな関数にフィットさせてみる

はじめに scipy.optimize.curve_fitを使うと曲線あてはめができます。いろいろな関数にフィッティングさせてみて、うまくいくかどうか試してみます。scipy.optimize.curve_fit — SciPy v1.3.0 Reference Guide f(x) = x + a ただの足し算。 import numpy as …

【python】numpyで任意の底でlog

任意の底でlogを計算したいときがあります。 結論から言うと、そういう関数は用意されていません。ただし、簡単な処理で実現することは可能です。 ちなみに、デフォルトで用意されているのはlog(eが底), log10, log2のみです。Mathematical functions — Nu…

【python】scipyで線形最小二乗法

概要 scipyのscipy.optimize.lsq_linearで最小二乗法が使えます。 使い方 最低限必要な引数は、 A いわゆる説明変数です。基本的には(データ数, 次元数)のshapeでいいのですが、バイアス項を入れたければすべて1にした列が要ります。 b いわゆる目的変数です…

【python】ジェネレータ式の使い所

概要 ジェネレータ式を使っているコードを見かける機会は少ないですが、ケースによっては有用なので使い所を紹介します。 この記事を読むと、漫然と使われたリスト内包表記に対して「ジェネレータ式の方が良くない?」と言えるようになったりします。 ジェネ…

【python】windowsではopenの引数にフォルダを指定するとPermissionErrorになる

最近はじめて知った仕様なのですが、windowsではタイトルの通りになります。 Linuxの場合。 $ mkdir hoge $ python >>> open("hoge") Traceback (most recent call last): File "<stdin>", line 1, in <module> IsADirectoryError: [Errno 21] Is a directory: 'hoge' 大変</module></stdin>…

【python】組み込み関数all・anyの引数はできるだけジェネレータ式などで書く

概要 組み込み関数all・anyはiterableの真理値すべてに対してand・orを計算します。 >>> all([True, True, False]) False >>> any([True, True, False]) True このall, anyは引数を短絡評価してくれます。ただし、条件式をリスト内包表記などで書くと台無し…

【python】numpyでバイナリサーチをするsearchsorted

numpy.searchsortedを使うとnumpyでソート済み配列に対するバイナリサーチ(二分探索)を行えます。numpy.searchsorted — NumPy v1.16 Manual ただし、1次元配列しか受け付けません。まあ、いいか。 次のように使えます。 >>> import numpy as np >>> a = np…

【python】np.randomの関数の配列サイズの渡し方をいつも忘れるのでメモった

np.random以下には色んな乱数生成関数があるのですが、毎回「生成される配列のサイズの指定方法がわからない、なんだっけ?」と思っているので、この際備忘録として残しておきます。Random sampling (numpy.random) — NumPy v1.16 Manual を見るとわかります…

【python】Pool.mapをProcessPoolExecutor.mapに置き換えてみる

はじめに concurrent.futures.ProcessPoolExecutorは便利そうなので、Poolの代わりに使ってみようと思います。17.2. multiprocessing — プロセスベースの並列処理 — Python 3.6.5 ドキュメント 17.4. concurrent.futures – 並列タスク実行 — Python 3.6.5 ド…

【python】str.findとstr.indexの違い

はじめに pythonで文字列に対して部分文字列の検索を行うメソッドとして、str.findとstr.indexがあります。ほとんど同じものなのですが、どのような違いがあるのでしょうか? str.findとstr.indexはどちらも文字列のメソッドで、引数に渡した文字列の位置を…

【python】scipyのpdistとsquareformの使い方と仕組み

はじめに scipyで距離行列を扱うときはscipy.spatial.distanceのpdist, squareformなどを主に使いますが、長年よくわからないままに使っていたので、整理してまとめておきます。 なお、以下のドキュメントを参考にします。 scipy.spatial.distance.pdist — S…