Pythonによるデータ分析・機械学習ブログ

Pythonによるデータの前処理・グラフ化、機械学習、統計解析、画像処理、Webスクレイピング、自然言語処理の基礎について紹介していきます。

MENU

【第3回】 Numpyにおける数列の作成と加工

はじめに

Numpyはプログラミング言語Pythonにおいて数値計算を効率的に行うためのモジュールで、科学数値計算にはNumpyを用いることが非常に多くなっています。このモジュールは、効率的な数値計算を行うための型付きの多次元配列のサポートをPythonに加えるとともに、それらを操作するための大規模な高水準の数学関数ライブラリを提供しています。例えば、3行3列の行列の加減乗除などが計算できます。

前記事では、Numpyにおける配列の作成、変形、再代入について解説しました。

本記事では、Numpyにおける数列の作成と加工について解説していきます。

SAMURAI TERAKOYA

 

数列の生成

まずは、数列の生成から説明します。最初は、よく使う数列の生成についてです。

以下の例は、np.arangeを用いて数列を生成しており、Outputを見てわかるように、0から9までの数字の配列を生成します。np.arange(num)とした場合、間隔1で0からnumまでの配列を生成しています。

Input:

Output:

 

次は以下の例です。np.arange(0,11)で、間隔1で0から10までの数字の配列を出力しています。np.arange(start,stop)とした場合、間隔1でstartからstop-1までの数字の配列を出力すると覚えておきましょう。

よくあるのですが、0から10までの数字の配列を出したいときに、np.arange(0,10)と記載して、0から9までの数字の配列しかでないケースがあるので注意しましょう!

Input:

Ouput:

 

上記の応用編で、今度は間隔2で0から10までの数字の配列を出力したいときには、以下のように記載する必要があります。つまり、どの程度の間隔にするかは、以下の2の部分を変更することで反映することができます!

np.arange(start,stop,num)とした場合、間隔numでstartからstop-1までの数字の配列を出力すると覚えておきましょう。

Input:

Ouput:

 

次は、linspsceを用いて数字の配列を出力するケースです。

以下の例では、0から10までの数字を等間隔で6つの数字の配列を出力しています。np.linspace(start,stop,num)とした場合、startからstopまでの等間隔のnumつの数字の配列を出力すると覚えておきましょう。

Input:

Ouput:

以下の例では、0から10までの数字を等間隔で4つの数字の配列を出力しています。

Input:

Output:

 

乱数の数列の生成

次に、乱数の数列の生成について説明します。乱数とはランダムな数のことを言います。

最初は、0以上、1未満の範囲の乱数の2次元配列を生成する例です。

以下の例では、np.random.randomに行と列の数(2,3)を渡して、2行3列の乱数の2次元配列を生成しています。

0-1間の乱数の2次元配列を生成したいときに、とても便利です。

Input:

Output:

 

次も0以上、1未満の範囲の乱数の2次元配列を生成する例です。

以下の例では、np.random.randに行と列の数(2,3)を渡して、2行3列の乱数の2次元配列を生成しています。

Input:

Output:

 

よく使う例を示します。0以上、1未満の範囲の乱数の2次元配列を生成して、100を掛けてあげることで、0以上、100未満の範囲の乱数の2次元配列を生成することができます。この*100の計算は次回説明いたします。

Input:

Output:

 

以下の例は、1以上20未満の整数の中から1つの整数を出力しています。np.random.randint(min,max)とした場合、min以上、max未満の整数の中から1つの整数を出力すると覚えておきましょう。

Input:

Output:

 

上記は1つの整数を出力していますが、配列を生成したい場合には、以下の様にします。上記のコードに加えて、(3,4)という行と列の数を表す要素があります。

出力結果を見てわかるように、1以上20未満のランダムな整数の3行4列の2次元配列を出力します。

Input:

Output:

 

次は、出力される乱数が標準正規分布に従い、平均0、分散1の分布で出力する例です。

(2,3)という行と列の数を表す要素を引数にして、配列を出力します。

Input:

Output:

 

同じ要素の配列

まずは、配列のすべての要素が0となるnp.zerosについて説明します。

以下の例では、3つの要素が0となる配列を出力しています。np.zeros(3)の3は要素数を表しています。

Input:

Output:

 

すべての要素が0となる2次元配列を出力するには、(2,3)のように行と列の数を表す要素を引数とします。

Input:

Output:

 

次に、配列のすべての要素が1となるnp.onesについて説明します。

以下の例では、2つの要素が1となる配列を出力しています。np.ones(2)の2は要素数を表しています。

Input:

Output:

 

すべての要素が1となる2次元配列を出力するには、(2,3)のように行と列の数を表す要素を引数とします。

Input:

Output:

 

指定した値の配列の生成

次に、指定した値の配列の生成について説明していきます。

まずは、np.fullについてです。以下の例では、4個の9.99が要素にある1次元配列を出力しています。np.full(num1,num2)で、num1個のnum2が要素にある1次元配列を出力すると覚えておきましょう!

Input:

Output:

 

上記では1次元配列でしたが、2次元配列の場合は、以下のコードを用います。先ほどの、4の部分をタプル型の(2,3)になっており、2行3列の2次元配列を出力することを表しています。

Input:

Output:

 

欠損値について

欠損値があることを表現する場合には、以下の例のようにnp.nanを用います。np.array([0, np.nan, 1, 2])とすることで、出力では[0 nan 1 2]という配列になっています。

センサーデータや気象のデータなど見ると欠損値が存在することが多く、その際に「nan」を見ます。

Input:

Output:

 

配列内の要素間の差分の計算

np.diffを用いることで、要素の前後の差分を計算することができます。出力時には前後の差分を算出しているので、aは6要素の配列でしたが、出力では5要素に減っています。

Input:

Output:

 

配列の結合

次は、配列の結合です。別のファイルで読み込んだデータなどを結合する際によく使用します。

下の例では、b1、b2と二つの1次元配列を用意して、それらの1次元配列同士をconcatenateで結合をしています。出力では、b1の後ろ側にb2の配列が結合された1次元配列となっています。

Input:

Output:

 

次は多次元配列の結合についてです。以下では、2行3列のc1と2行1列のc2の2つの配列を結合させています。axis=1とすることで、列方向に増やす形で結合することができます。

Input:

Output:

 

上記のような列方向に増やす形で結合は、np.hstackを使うことでも同様に結合することができます。

Input:

Output:

 

また、行方向を増やす方向で結合するには、np.vstackを用います。以下の例では、2行3列のc1と1行3列のc3を結合しています。

Input:

Output:

 

配列の分割

次は、配列の分割について説明していきます。配列の分割にはnp.hsplitとnp.vsplitを用います。

先に、np.hsplitについて説明します。以下の例では、np.hsplitを用いて3行3列の配列のdを3行2列の配列d1と3行1列の配列d2に分割しています。引数の2は分割する列を表しており、「2列目までの配列」と「2列目以降の配列」に分割します。この出力からわかるように、np.hsplitは列方向を減らす形で分割します。

Input:

Output:

 

次は、np.vsplitについて説明します。以下の例では、np.vsplitを用いて3行3列の配列のdを2行3列の配列d3と1行3列の配列d4に分割しています。引数の2は分割する行を表しており、「2行目までの配列」と「2行目以降の配列」に分割します。この出力からわかるように、np.vsplitは行方向を減らす形で分割します。

Input:

Output:

 

配列の転置

次は多次元配列の転置です。転置には、「.T」を付けることで配列を転置することができます。

Input:

Output:

 

オススメ書籍

Pythonによるあたらしいデータ分析の教科書

Python3エンジニア認定データ分析試験の教科書にもなっている書籍で、データ分析に必要なPythonの基礎手法を身に付けることができます。具体的には、numpyとpandasを用いたデータの前処理、matplotlibを用いたデータのグラフ化、scikit-learnを用いた機械学習の基礎記述方法を身に付けることができます。これ一つで基礎はバッチリで、実務でも十分活用できると思います。個人的には見やすい書籍でした。

データサイエンス教本 Pythonで学ぶ統計分析・パターン認識・深層学習・信号処理・時系列データ分析

こちらの書籍は初心者から少し記述できるようになった人、かつ数学的な理論と一緒にPythonの記述方法を理解したい方にオススメです。統計分析、パターン認識、深層学習、信号処理、時系列データといった幅広く実務で使用する手法を学びたい方にもオススメです。

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

こちらの基礎を抑えながら実務で必要なPython記述法を学べる書籍です。基礎を一つ一つ抑えるというよりも実務で活用できるように必要な知識を身に付けられると感じました。これ一冊あれば十分かなと思いました。

 

スキル修得&転職

 近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。

以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

 

おわりに

本記事では、Numpyにおける数列の作成と加工について解説しました。具体的には、数列の生成では、等間隔の配列の生成、乱数の配列の生成、同じ値の要素になる配列の生成、欠損値の確認、要素間の差分の配列の出力、配列の結合・分割、配列の転置について紹介しました。本記事の処理はよく使うものなので、ぜひ覚えて最低限できるようになりましょう。