アクサンの場合

Python3初心者が段々上達するログ

Python3

Python3 リストの中の要素を要素ごとにカウントする

問題 離散データが含まれているリストが与えられたとき, 最頻値を出してよ, とかヒストグラムもいいけど各年齢でどれくらいいるのか教えてよとか言われたりする. そのとき, カウンティング関数を実装する?しない?面倒だな, 何か使えないか. 解答 Python…

sklearn 0.18.1 でのKL-Divergence of two GMMs

KLダイバージェンスを2つのGMMで求めたいとき 過去に, python - KL-Divergence of two GMMs - Stack Overflow があった. そこから引用すると, def gmm_kl(gmm_p, gmm_q, n_samples=10**5): X = gmm_p.sample(n_samples) log_p_X, _ = gmm_p.score_samples…

Python3で素因数分解する

素因数分解をライブラリで行う from sympy.ntheory import factorint これが正体. 詳細は, Number Theory — SymPy 1.0 documentation . 動作例 In [1]: from sympy.ntheory import factorint In [2]: factorint(100) Out[2]: {2: 2, 5: 2} はい簡単. 実…

Kerasで学習したモデルを保存する OR モデルを再利用する

Keras @TF backendで構築したモデルを再利用したい ドキュメントにすべて書いてありますので堅い字面でも読める人は以下参照のこと. FAQ - Keras Documentation モデルの保存 (略) model.fit((略)) model.save('AAAA.h5') これでモデルがAAAA.h5という名前…

入れ子になったリストを作る方法

目的 入れ子になったリストを作る group = [[], [], [], ...., []] このようなリストで, 且つ任意の数だけ入れ子にさせる 方法 group = [[] for i in range(n)] >> [[], [], [],..., []] 補足 入れ子はnestedとかネストした, とか呼ばれる. むしろ, 「入れ…

ファイルのサイズを確認後, 空を削除する

流れ API等でファイルを取得 ファイルサイズを取得 空なら削除 ファイルサイズを取得 os.path.getsize(path) pathでファイル名も含めたPATHを与える ファイルを削除する os.remove(path) ファイル名を含めたPATHを与える

sklearn.manifold.tsneのメモリリークを回避するために(Anacondaのみ)

現象 大規模データでscikit-learnのmanifold.tsneを使うとメモリエラーを起こします。Pythonでメモリエラーか。 原因 mklのバグ、、、らしい。以前にscikit-learnにイシューが立っていたようだ。バージョンが上がった現在でも改善はされていない。このイシュ…

pandasで要素内に特定の文字列が含まれる行を抜き出したい

列Aに"美"が含まれる行を抜き出す index A ... 0 太郎 ... 1 真由美 ... 2 和則 ... 3 和美 ... 4 哲也 ... 5 司 ... というDataFrame(df)があったとする。 このとき、"美"という文字列を含む行だけ欲しいという場合にどうするか。 str.containsを使う df[df…

pandasで条件にあった値を持つ行を削除する場合

列Aにあるnという値を持つ行を削除したい df A B C 0 k n n 1 n n n 2 n k k ... ... ... ... 1000 n m m ... ... ... ... この1行目2行目に該当する行を削除したい時にどうするか。 もちろんこの簡単な例ではdf.drop([1,2,1000])でいける? まさかそんな話…

matplotlib savefigをサーバーで行う場合

そのままサーバーでも画像出力させようとすると Traceback ... ... RuntimeError: Invalid DISPLAY variable うまくいかない 解決策 import matplotlib as mpl mpl.use('Agg') これを追加する。見つかるドキュメントにはそれしか書いておらず「追加したのに…

matplotlibでOverflowError: In draw_path: Exceeded cell block limitというエラーが出る

引っかかったところ matploblibで比較的大きなデータをプロットしようとしたとき, plt.savefigをしようとして OverflowError: In draw_path: Exceeded cell block limit というエラーが出た. 解決策 結構簡単で, import matplotlib as mpl mpl.rcParams['agg…

numpy savetxtで複素数も扱うとき

savetxtを複素数でも扱う 普通savetxtは実数だけで扱っているので複素数のことなど気にも留めない。 そのまま複素数もいけるのかと思いきや、そうは問屋は卸さない。 問題 複素数を含む数をarrayに入れたまま保存すると、(1.00000000e + 1,0000000ej)なんて…

Pythonで並列処理入門

入門編でやれること リストを順に処理するときに並列で処理したい! data_list = ["a", "b", "c", "d"] for i in data_list: #Do something こういうのをコア数に応じて並列で処理してさくっと終えたい。ときに使える。 どうやるか from multiprocessing imp…

pandasで条件にあった行を抽出してさらに列を指定する

やりたいこと ある巨大行列のなかで、特定の列の値がXである行を抽出する。そしてさらに利用する列を指定する。 コード import pandas as pd df = pd.read_csv("test.csv", header=None) df[df[2] == X].ix[:,5:90] df[2] == Xが第2列の値がXである行を抽出…

タプルの罠から抜け出すために

(123,) ←こういうやつ (123,)は、行列のようなもの。 numpy.loadtxt()とかするとこんな感じになってしまう。 すると計算できなくなったりして本当に困っていた。 行列計算ができなくなる。 dot(a, b)とかができなくなってしまう。 できれば見たくない。。。…

Check iO Days Between

タプルで与えられた日付の差分を取る from datetime import datetime <200b> def days_diff(date1, date2): return abs((datetime(*date1)-datetime(*date2)).days) これがプロの解答なんだが、うまい。 僕は、(date1[0],date1[1],date1[2])なんてやってしま…

二項分布のシミュレータを作った (Python3)

内容 1列6席の座席に等確率で着席する様子をシミュレーションする まず座席に座る様子を n席に着席する様子をM回実行するというもの。 numpyのrandom.randint(2, size=n) というのは、0と1のintの乱数をsize=nでリストを生成するという関数。 とっても便利だ…

0で埋めて桁数を揃える(例えば 001, 002...)

目的 ファイル名などで001, 002, 003,....となっていることがあるので最大値の桁数に合わせて0でパティングしたい 手法 最大値を取得する 最大値の桁数を取得する 0で埋める max_int = [略] max_digit = len(str(max_int)) for i in range(max_int + 1): pri…

階層化されたフォルダ構造においてそれぞれのフォルダに含まれるファイルを取得する

目的 root - A - 1.jpg, 2.jpg...... |-----B - 10.jpg, 11.jpg.... |-----C - 20.jpg, 21.jpg.... のところからJPGファイルを再帰的にリストアップさせる 手法 os.walk() を使うと良い os.walk() はルートディレクトリをインプットしディレクトリとファイル…

Python3 たくさんのファイルをn個ずつZipする

目的 たくさんのテキストファイルを幾つかの束にしてZipにする 入力:たくさんのテキストファイル 出力:指定の数だけ束になったZipファイル 方法 まず、ファイルのディレクトリ構造付きで列挙したテキストファイルを用意する。 そして、1行ずつ読み込んで…

Python3 である曜日のリストを得る

目的 何月かのある曜日を得る 例えば、2016年5月の金曜日が何日なのか 方法 ある曜日の第1週が何日なのかわかれば7足していけばOK、なのはわかるけれど・・・ モジュールを使いたかったので、 import calendar cal = calendar for x in cal.monthcalendar(20…

超ド級のポイントを突くSublime3 スニペットの作成方法

Sublimetext3のスニペットの作り方 既に解説されたサイトはたくさんあります(汗) webdesign-workbook.com nelog.jp sublimetextのスニペットのメモ · GitHub liginc.co.jp ここにある素晴らしい記事を読めばスニペットがいかに使えるかは、わかります。 ス…

PythonでMySQLを使うときに参考にしたサイト(備忘録)

github.com [Python] MySQLに接続してデータ操作を行う - YoheiM .NET 紹介マニアどらふと版: Python の MySQL ドライバはどれを利用すれば良いのか Bi:Bo: PythonでのDB処理(MySQL) 個人的には、返される# => {'name': 'Cookie', 'id': 3}の値を使うところ…

CheckiO The end of other

自分の解答 def checkio(words_set): counter=0 for i in sorted(words_set): for j in sorted(words_set): if i.endswith(j) and i!=j: counter+=1 else: pass if counter>=1: return True else: return False プロの解答 def checkio(words): """ You can …

組み込み関数 any

any(iterable)は iterable のいずれかの要素が真ならば True を返します。iterable が空なら False を返します。 (http://docs.python.jp/3/library/functions.html?highlight=any#any) なるほど、orで繋ぐのが要らなくなるのか。

reduceというメソッド

functools.reduce(function, iterable[, initializer]) これが優秀なのではないかと思う。 説明文を引用すると 2 引数の function を iterable の要素に対して左から右に累積的に適用し、イテラブルを単一の値に縮約します。左引数 x は累計の値で、右引数 y…

CheckiO Elementary Secret Message

自分の解答 def find_message(text): st="" for w in text: if w.isupper()==True: st=st+w return st forとifが連結できるだろうなと思いながら失敗したので普通の解答。 プロの解答 def find_message(text): return ''.join(c for c in text if c.isupper(…

CheckiO Elementary Monkey Typing

自分の解答 def count_words(text, words): count=0 for word in words: if (word in text.lower()) == True: count+=1 else: pass return count ちゃんとカウントという変数を用意している。Cでも読んでいる気分が否めない。。。 プロの解答 def count_word…

リストの要素の総和を求める

sum(lists) これだけだったw

Python3 普通のリストとnumpyのリストの要素追加操作の違いメモ

普通のリスト a=[1,2,3] a.append(4) ==> a=[1,2,3,4] numpyのリスト import numpy a=numpy.array([1,2,3]) numpy.append(a,4) ==> a=[1,2,3,4] 結構間違える。。。

txtファイルを1行ずつ読み込み、正規表現で抜き出す

目的 txtファイルを読み込んで、1行ずつ抜き出す 抜き出した行から正規表現で欲しい文字列を抜き出す 文字列をリストに追加する 実装 import glob import re files = glob.glob("./*.txt") lists=[] for file in files: for line in open(file,"r"): char=re…

Python3でシステムコマンドを円滑に実行する

subprocessモジュールは正直使いにくい subprocessは配列でコマンドと引数をとる。普通のコマンドのように入力できないのが難点。 コマンド文字列を配列にすればいい import subprocess in="./in" out="./out" cmd="pdftk %s/*.pdf cat output %s/output.pdf…

あるディレクトリ内の特定の拡張子のファイル名を取得する

使うモジュール import glob import os メソッド glob.glob(pathname) pathnameに当てはまるパスを返す os.path.basename(path) pathの中のファイル名を取得する 方法 files = glob.glob('./a/*.txt') for file in files filenames = os.path.basename(file)…

リストの要素をつなげて表示させる方法

目的 リストa=[1,2,3,4]の要素を['1','2','3','4']と表示させず、1234と表示させる。 方法 2種類 for文を使う for i in a: print(i,end='') print()のオプションで終端をどう表示させるかを指定する。end=''を使うと、出力した後ろに''を表示させている。 j…

入力された文字を逆順で表示する

[::-1]を使う print(input()[::-1]) input().split().sort(reverse=True)と同じ効能。 ソートを行わない違いがある。

Python3 unsubscriptable objectの対処

現象 mapで要素の操作をしようとしたときにunsubscriptable objectというエラーが出てくる。 原因 Python3では、mapを使うと、mapオブジェクトで返されるため。 このエラーは、mapでa[i]のように、iを用いた参照ができないと言っている。 対策 対処は1つで、…

Python3でシステムコマンドを実行する

subprocessモジュールを利用する commands モジュールは撤廃されている 利用が推奨されているのは以下の2つ。命令の仕方がやや使いにくい感じがする。 subprocess.call(args) 成功か失敗かを0/1で返す In []: subprocess.call(["echo","hello world"]) hello…

大きさの違う2つのオブジェクトを含むループ

len(A)=100,len(B)=150のオブジェクトを各要素計算したい 要素数の小さい方(ここではA)に合わせないとまずい。 n = min(len(A),len(B)) for i,j in range(n): もあり。 しかし、zipを使うと更に良い(らしい) for i,j in zip(A,B): [処理] こうすると、自…

リスト構造ではそのまま数式計算ができない

リスト構造は中身がstr型になっているので、各要素に対して計算はできない。 そこで、 np.asarray(object)とする。 これにより、オブジェクト同士の計算も可能になる

2つのリストの要素同士を演算する

A = [ 1,2,3 ] B = [ 4,5,6 ] 演算の方法は2つ zipを使う mapを使う 1. zipを使う C = [x (演算) y for (x, y) in zip(A, B)] 2. mapを使う from operator import XXX C = map(XXX, A,B) XXX は 10.3. operator — 関数形式の標準演算子 — Python 3.4.3 ド…

乱数生成

randomモジュールをインポート random.random() 0.0 ~ 1.0までのfloat値を返す random.randint(x,y) x ~ yまでのintを返す random.choice(seq) seqの中から選ぶ 1か-1をランダムで返したいときは、 seq = [-1,1] random.choice(seq)