Pythonのメモ帳

numpy, pandas, tensorflow を使いこなすための忘備録

Python

matplotlibのimshowでヒートマップを高速描画する際の、値の記入や軸ラベルの設定方法

前回、matplotlibでヒートマップを高速描画する簡単な方法について書いた。spcx8.hatenablog.com 上記の方法は、普通のヒートマップでは描画速度が著しく落ちるようなデータの多いケースに有効。裏を返すと、データの少ない場合(例えば行10x列10とか)は、s…

matplotlibのimshowでヒートマップを高速描画する際の縦横比(アスペクト比) 調整

前回、matplotlibでヒートマップを高速描画する簡単な方法について書いた。spcx8.hatenablog.com これの欠点は、グラフの縦横比が固定されるので、plt.figure(figsize=(*,*)) だけでは調節できないこと。ただ、それもplt.imshow()の引数を調整すれば問題ない…

matplotlibでヒートマップを高速描画する簡単な方法

Pythonでのヒートマップの描き方を調べると、だいたい以下の2つの方法が出てくる。 - seabornライブラリのheatmap関数を使う方法 Seaborn でヒートマップを作成する – Python でデータサイエンス - matplotlibライブラリのpcolor関数を使う方法 Python + ma…

マトリクス形式 (配列) から スプレッド形式 (表) に変換するときも numpy.meshgrid が役立つ

マトリクス形式(配列)のデータをスプレッド形式(表)に変換したい場合がある。 例えば下のような配列を、、 [[0.36363082, 0.00332102, 0.14533355], [0.11039035, 0.95780551, 0.48281694], [0.44771602, 0.94823649, 0.36095112]] ↓ こんなふうな表にしたい…

2次元配列の値を行番号や列番号に依存させたい場合、meshgrid()を使って高速化

2次元配列を作るときに、中身の値を行番号や列番号に依存させたい場合がある。 つまり↓のような関係が成り立つようにしたい。 2次元配列の値 = 関数( 行番号, 列番号 ) 普通に書くとこうなる。 import numpy as np # 配列作成 nrows = 10 ncols = 10 mat = n…

pandas / DataFrame の中身の文字列を一括で分割して別の列として定義する

pandasで、特定の列の(中身の)文字列を分割して使いたいときがある。 例えばこんな表があったとして、 NumName 0 a001_name1 1 a002_name2 2 a003_name3 ↓ こんな風にしたい NumName num name 0 a001_name1 a001 name1 1 a002_name2 a002 name2 2 a003_name3…

ダイアログボックスでファイル名を指定したい(Windows/Macでコードが違う)

データを取り込む時にはファイル名を指定する。pd.read_csv()でも np.loadtxt()でもそう。 でファイル名を指定するのにコードをいちいち書き換えたくないので、ダイアログボックスを使う方法を調べた。 調べたらtkinterというライブラリを使うみたいだが、こ…

pandas の append処理で行ラベル(index番号)がおかしくなった時に行ラベルをリセットする

pandas で append処理(2つのDataFrameを縦に連結)した時、行ラベル(index番号)は順番通りにならなくなる。 例えばこう。 import pandas as pd import numpy as np data = range(10) data = np.array(data).reshape([5,2]) df1 = pd.DataFrame(data,colum…

2つの文字列配列の要素同士を連結する(文字列配列の足し算)

numpyでは配列(行列)の計算が簡単にできる。これは要素が数字の場合だけでなく、ありがたいことに文字列の場合にも使える。文字列の場合にできる計算は足し算(文字列の連結)だけで、使うこともあまりないけど地味にありがたい。 import numpy as np arra…

DataFrameからリストやnumpy.ndarrayへの変換

DataFrameからnumpy.ndarrayへの変換 .valuesと付け足すだけ。pandas.Seriesの場合も同様の処理で変換が可能。 import numpy as np import pandas as pd dataframe = pd.DataFrame([[1, 2, 3], [4, 5, 6]], dtype=int) array1 = dataframe.values.tolist() p…

pandasでcsvファイルを読み込む際にあえてカラム(列)を分けない

ファイルの読み込みはいくつか方法があることは前回の記事に書いた。 spcx8.hatenablog.com 読み込んだ後の処理を考えると、numpyやpandasで読みたい。でも中身が文字列を含む場合、numpyは使えないのでpandasで読むことになる。 困るのは読み込む対象のファ…

csvファイルやexcelファイル(xls, xlsx)を読み込む

csvファイルやexcelファイル(xls, xlsx)を読み込む場合のコードはいくつかあるのでまとめておく。 (1) 標準ライブラリのcsvを使う import csv with open('data.txt', 'r', encoding='utf-8') as f: dataReader = csv.reader(f, lineterminator='\n') for …

配列内の各要素に含まれる特定の文字列を置換・削除する方法

文字列の置換はreplace()を使う。 string = 'abcde' string_new = string.replace('a', 'A') print(string_new) 出力: 'Abcde' これが使えるのは単独の文字列だけで、配列(各要素が文字列になっている配列)には使えない。 str_list = ['abcde','abcde'] st…

配列から要素をランダムに抽出するための「インデックス」を作る

配列から要素をランダムに抽出するには、(要素の抽出に使う)インデックスをランダムにしておくだけでいい。 random_array = array[random_index] ここではrandom_indexも配列。 以下は関連記事。 spcx8.hatenablog.com 順序をランダムにしたインデックス(配…

配列から重複なく要素をランダムに抽出し2組に分ける(データセットをシャッフルしつつ2つに分割)

ディープラーニングの前処理としてよくあるのが、データをシャッフルしつつ2つに分ける作業。言い換えると、データセット(配列)から学習データとテストデータを重複なくランダムに取り出す作業。 処理としては、ランダムな配列を作り、それをインデックスと…

要素が全てnanの配列を生成をする

最近書くpythonコードの半分以上はnumpy.ndarrayを使ってる。 numpyがなかったら仕事にならない。それくらいお世話になってる。ただ一つだけ不満というか疑問に思っているのが要素が全てnanの配列を生成をする関数がないこと。要素が全て0の配列を生成する関…

nan を含む配列の要素をシフトする

配列の要素をシフトさせる関数 shift() のことを前回書いたけど、この関数は配列内の要素にnanが含まれると使えない(出力する配列の要素が全てnanになる)という欠点がある。そして残念ながら今書いてるスクリプトでは配列にnanが入るので、結局自分でコー…

2次元配列をシフトさせる

pythonで配列をシフトさせたくて調べてみた。 自分でコード書いてもできるけど、pythonのことだからぴったりの関数があるんじゃないかと思って探していたら、scipy の shift() という関数を見つけた。 import numpy as np from scipy.ndimage.interpolation …