Translate

【初心者向け】numpyの行や列を抽出する際の書き方【python】

pythonをデータ解析処理目的で利用していると、よう使う機能やモジュールとしては、numpyの行や列の抽出が挙げられます。

ただ甘味のような文系出身の初心者の場合には、何度やってもなかなか覚えられないのが現状です。

そこで今回は甘味自身の備忘録として、python(今回はnumpy)の行や列を抽出する際のコードの書き方について紹介していきます。

データ解析で多いのはnumpyの列データの抽出



python のデータ解析で多いのは、すべての生データが含まれたcsvファイルを一度読み取ってから、それぞれの項目の時系列データを定義する処理です。

この処理を行うためには、それぞれのデータを列ごとに抽出することで実施が可能になります。

numpyで読み取ったcsvデータから、それぞれの変数のデータを列ごとに抽出するためには変数定義の際に、該当する列を指定することが必要になります。

具体的なコードの例はこちらです。(今回はtest.csvのデータを読み取り、変数1、変数2をそれぞれa,bとして抽出するといった想定になります。)

data = np.genfromtxt("test.csv", delimiter = ",")
a = data[:,0]
b = data[:,1]

numpyの列指定の場合に重要になるのは、data[]の括弧内の記載方法です。列の場合には、上記のコードのように[:,指定する列]といった形になります。

python の行列指定は番号に注意。pythonはゼロから数える

python の行列の場所を指定するうえでは、行列の番号指定が本当に合っているのかを確認することが必要になります。

pythonの場合には、行列の番号はゼロからカウントします。すなわち列の一行目を指定するためにはdata[:,0]と記載しなければなりません。

この行列のカウントの厄介なところとしては、他のプログラミング言語の場合には、列や行を指定する際には1からカウントする場合があるからです。有名なプログラミング言語で、データ解析によく用いられるMatlabは1から列と行をカウントします。

そのため、Matlabで書かれたコードをpython に書き直す場合には、そういった点にも注意が必要になります。

甘味みたいな初心者の場合には、本当に指定された行が抽出されているのか気になるので、Spyderの変数リストを常に確認して、生データのデータと照らし合わせる工程をよく挟んでいます。

print()をつかって表示させて確認するのも良いかもしれませんが、時系列データの場合には、表示されるデータ量が膨大になるので、Spyder上で確認するのが個人的にはおすすめです。


行での抽出の場合には、括弧内の前半部分にコードを記載する

一方で行でデータを抽出したい場合にはどのようにコードを書いたらよいのかというと、行の場合は括弧内のカンマよりも前の部分を書き換えることによって行うことができます。


具体的なコードとしてはこんな感じです。(test.csvのデータを読み取り、一行目をaとしてを抽出する想定の場合)


data = np.genfromtxt("test.csv", delimiter = ",")
a = data[0,:]

列とは異なり行の抽出には他の書き方もあるようですが、列と書き方を対応させるためにも一応この書き方で覚えていた方が良いかもしれません。

行の抽出は、行自体を指定する場合よりも、特定の値の行を指定する場合が多い印象

行の抽出を使う場合に関しては、行自体を指定するというよりも、特定の値(例えば閾値など)となった行を指定して抽出する場合などが多くあります。

その場合には、numpyよりも個人的には、pandasの方が使いやすかった印象があります。なので個人的には、numpyの行の抽出をする場合には、pandasに変換してからの処理をするのが好きです(初心者のコードなので効率的かというと自信がない点が多いですが(笑))。



numpyの抽出は列の抽出の方が出番が多い

個人的な印象、というか甘味がスクリプトを作る場合に、numpyの抽出の際によく使うのは、最初の方で紹介した列の抽出です。

幸いにもコード自体も簡単なので、csvの生データを読みとった後の最初の処理としてどんどん使っていきましょう。