NumPy Tutorial: Pythonによるデータ解析

author
3 minutes, 40 seconds Read

この記事の下にある無料のNumPyチートシートをお見逃しなく

NumPy は、Pythonのデータ解析パッケージとしてよく使用されています。 NumPy を使用することにより、ワークフローを高速化し、Python エコシステムの他のパッケージ (例えば scikit-learn) とのインターフェースをとることができます。 NumPyはもともと2000年代半ばに開発され、Numericと呼ばれるさらに古いパッケージから生まれました。 この長寿は、Python のほとんどすべてのデータ分析または機械学習パッケージが、何らかの形で NumPy を活用していることを意味します。

このチュートリアルでは、ワインの品質に関するデータを分析するために NumPy を使用することを説明します。 このデータには、pHfixed acidity などのワインのさまざまな属性に関する情報と、各ワインの 0 から 10 の間の品質スコアが含まれています。 品質スコアは、少なくとも3人の味覚テストの平均値である。 NumPy の使い方を学びながら、ワインの知覚品質についてさらに解明していきます。

今回分析するワインは、ポルトガルの Minho 地域産です。

このデータは UCI Machine Learning Repository からダウンロードされ、ここで入手できます。 このチュートリアルで使用する winequality-red.csv ファイルの最初の数行です。

"fixed acidity";"volatile acidity";"citric acid";"residual sugar";"chlorides";"free sulfur dioxide";"total sulfur dioxide";"density";"pH";"sulphates";"alcohol";"quality"7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;57.8;0.88;0;2.6;0.098;25;67;0.9968;3.2;0.68;9.8;5

データは、ssv (semicolon separated values) 形式と呼んでいるもので、各レコードはセミコロン (;) で区切られ、行は新しい行で区切られています。 ファイルにはヘッダー行を含む 1600 行と 12 列があります。

始める前に、簡単なバージョンメモ – Python 3.5 を使用することにしました。

Lists Of Lists for CSV Data

NumPy を使う前に、まず Python と csv パッケージを使ってデータを操作してみます。 csv.reader オブジェクトを使ってファイルを読み込み、ssv ファイルからすべてのコンテンツを読み込んで分割することができます。

以下のコードでは:

  • Import the csv library.
  • Open the winequality-red.csv file.
    • With the file open, create a new csv.reader object.これは、CSV ファイルの読み込みを可能にするオブジェクトで、CSV ファイルのコンテンツを分割して読み込みます。
      • キーワード引数 delimiter=";" を渡して、レコードがデフォルトのカンマ文字ではなくセミコロン文字で分割されるようにします。
    • ファイルからすべての行を取得するためにリストタイプを呼び出します。
    • 結果をwinesに代入します。
    import csvwith open('winequality-red.csv', 'r') as f: wines = list(csv.reader(f, delimiter=';'))

    データを読み込んだら、最初の3行を出力できます:

    print(wines)
    , , ]

    データがリストのリストに読み込まれました。 各内部リストは ssv ファイルからの行である。 お気づきかもしれませんが、リストのリスト全体の各項目は文字列として表現され、計算がしにくくなります。

    データを表に整形して、見やすくします。

    固定酸度 揮発性酸度 クエン酸 残糖 塩化物 遊離硫黄 二酸化硫黄 全二酸化硫黄 密度 pH 硫酸塩 アルコール 品質
    7.4 0.70 0 1.9 0.076 11 34 0.9978 3.51 0.56 9.4 5
    7.8 0.88 0 2.6 0.098 25 67 0.9968 3.20 0.68 9.8 5

    上の表からわかるように、3行で読み込んでいますが、最初の行には列ヘッダが含まれています。 ヘッダー行以降の各行は、ワインを表します。 各行の最初の要素はfixed acidity、2番目はvolatile acidity、というようになります。 ワインの平均値qualityを求めることができる。 以下のコードは:

    • ヘッダー行の後の各行から最後の要素を抽出する。
    • 抽出した各要素をフロートに変換する。
    • 抽出した要素をすべてリスト qualities に代入する。
    • qualitiesのすべての要素の合計をqualitiesの要素の総数で割って平均を求める。
    qualities =) for item in wines]sum(qualities) / len(qualities)
    5.6360225140712945

    望んだ計算はできたが、コードはかなり複雑で、量を計算したいときに毎回同じことをしなければならないのは楽しくないだろう。 幸運にも、NumPy を使用して、データを簡単に扱うことができます。

    Numpy 2 次元配列

    NumPy では、多次元配列が扱えます。 多次元配列のすべての可能なタイプについては後ほど詳しく説明しますが、今は2次元配列に焦点を当てます。 2次元配列は行列とも呼ばれ、よく知られているものです。 実は、これはリストのリストの考え方を変えただけなのです。 行列には行と列があります。 行番号と列番号を指定することで、行列から要素を抽出することができます。

    以下の行列では、最初の行はヘッダー行で、最初の列はfixed acidity列です。

    固定酸度 揮発性酸度 クエン酸 残糖 塩化物 遊離硫黄 二酸化硫黄 全二酸化硫黄 密度 pH 硫酸塩 アルコール 品質
    7.4 0.70 0 1.9 0.076 11 34 0.9978 3.51 0.56 9.4 5
    7.8 0.88 0 2.6 0.098 25 67 0.9968 3.20 0.68 9.8 5

    1行目と2列目で要素を選ぶとvolatile acidityとなる。 3行目、2列目の要素を選ぶと、0.88となる。

    NumPyの配列では、次元数をランクと呼び、各次元を軸と呼ぶ。

    行列の基本を理解したところで、リストのリストからNumPyの配列にする方法を見てみましょう。

    Creating A NumPy Array

    NumPy配列は numpy.array 関数を使用して作成することができます。 リストのリストを渡すと、自動的に同じ数の行と列を持つNumPyの配列が作成されます。 計算しやすいように配列の要素はすべてfloat要素にしたいので、文字列を含むヘッダー行は省くことにします。 NumPyの制限の1つは、配列の要素はすべて同じ型でなければならないことです。したがって、ヘッダー行を含めると、配列の要素はすべて文字列として読み込まれます。

    以下のコードでは、

    • numpy パッケージをインポートしています。
    • リストのリスト winesarray 関数に渡して、NumPy の配列に変換します。
      • リストスライスを使用してヘッダー行を除外します。
      • キーワード引数 dtype を指定し、それぞれの要素が float に変換されていることを確認します。
    import csvwith open("winequality-red.csv", 'r') as f: wines = list(csv.reader(f, delimiter=";"))import numpy as npwines = np.array(wines, dtype=np.float)

    上のコードを実行して、何が起こるか見てみましょう!

    winesを表示すると、今度はNumPyの配列が表示されます:

    wines
    array(,,,...,,,])

    データの行と列の数は、NumPy配列のshapeプロパティを使って確認できます:

    wines.shape
    (1599, 12)

    Alternative NumPy Array Creation Methods

    NumPy配列を作るために使える方法はさまざまなものがあります。 まず始めに、すべての要素が0である配列を作成することができます。 以下のコードは、行が3列が4列で、すべての要素が0である配列をnumpy.zerosを使って作成します:

    import numpy as np
    empty_array = np.zeros((3,4)) empty_array

    固定サイズの配列が必要だが、まだ値がない場合に、要素がすべて0の配列を作成すると便利です:

    また、それぞれの要素が乱数の配列をnumpy.random.randを使って作成することが可能です。 以下はその例です。

    np.random.rand(3,4)
    array(,,])

    乱数でいっぱいの配列を作ることは、サンプル配列を使って素早くコードをテストしたいときに便利です。

    Using NumPy To Read In Files

    NumPyを使ってcsvや他のファイルを直接配列に読み込むことが可能です。 これは、numpy.genfromtxt 関数を使用して行うことができます。

    • genfromtxt関数を使用してwinequality-red.csvファイルを読み込みます。
    • フィールドが適切にパースされるように、キーワード引数delimiter=";"を指定します。
    • キーワード引数 skip_header=1 を指定して、ヘッダー行をスキップするようにします。
    wines = np.genfromtxt("winequality-red.csv", delimiter=";", skip_header=1)

    wines は、リストに読み込んでから float の配列に変換したのと同じ結果になります。 NumPyは配列の要素のデータ型をその形式に基づいて自動的に選択します。

    Indexing NumPy Arrays

    配列を作成する方法はわかりましたが、配列から結果を取得できない限り、NumPyでできることはあまり多くありません。 我々は、個々の要素、要素のグループ、または行や列全体を選択するために、配列のインデックスを使用することができます。 心に留めておくべき重要なことの一つは、Pythonのリストと同様に、NumPyはゼロインデックスであり、最初の行のインデックスは0であり、最初の列のインデックスは0であることを意味することである。 もし4番目の行を扱いたいなら、インデックス3を使い、2番目の行を扱いたいなら、インデックス1を使い、といった具合になります。 再びwines配列を使用します:

    7.4 0.70 0.00 1.9 0.9.076 11 34 0.9978 3.51 0.56 9.4 5
    7.8 0.88 0.00 2.6 0.098 25 67 0.9968 3.20 0.68 9.8 5
    7.8 0.76 0.04 2.3 0.092 15 54 0.9970 3.26 0.65 9.8 5
    11.2 0.28 0.56 1.9 0.075 17 60 0.9980 3.16 0.58 9.8 6
    7.4 0.70 0.00 1.9 0.076 11 34 0.9978 3.51 0.56 9.4 5

    3、列4の要素を選択してみましょう。 以下のコードでは、行のインデックスとして2を、列のインデックスとして3を渡しています。

    wines
    2.2999999999999998

    NumPyでは2次元の配列を扱うので、要素を取得するために2つのインデックスを指定します。 最初のインデックスは行、または軸1のインデックスで、2番目のインデックスは列、または軸2のインデックスです。 wines の任意の要素は 2 インデックスを使用して取得できます。

    Slicing NumPy Arrays

    代わりに4列目から最初の3項目を選択したい場合、コロン (:) を使用してそれを行うことができます。 コロンは、開始インデックスから終了インデックスを含まないまでのすべての要素を選択したいことを示します。 これはスライスとも呼ばれます:

    wines
    array()

    リストのスライスと同様に、0 を省略して、先頭から要素 3 までのすべての要素を取得することができます:

    wines
    array()

    先頭から最後までのすべての要素を取得すると指定すると、列全体を選択することができます。 この場合、コロン(:)を使用し、開始や終了のインデックスを付けずに指定します。 以下のコードは、4 列目全体を選択します:

    wines
    array()

    上記では列全体を選択しましたが、行全体を抽出することもできます:

    wines
    array()

    インデックスを極端に使用すると、コロン 2 つで wines のすべての行と列を選択して配列全体を取得することも可能です。

    wines
    array(,,<br />,<br />...,,,<br />])

    Assigning Values To NumPy Arrays

    インデックスを使用して、配列の特定の要素に値を割り当てることも可能です。

    wines = 10

    スライスに対しても同じことができます。

    wines = 50

    上記のコードは、11番目の列のすべての値を50で上書きします。

    1-Dimensional NumPy Arrays

    これまでは、winesなどの2次元配列で作業してきました。 しかし、NumPy は多次元配列を扱うためのパッケージです。 多次元配列の最も一般的な種類の1つは、1次元配列、またはベクトルです。 上でお気づきのように、winesをスライスすると、1次元の配列が取り出されます。 1次元配列は1つの要素を取り出すのに1つのインデックスが必要なだけです。 2次元配列の各行と各列は1次元配列なのです。 リストのリストが2次元配列に似ているように、1つのリストが1次元配列に似ているのです。 wines をスライスして3行目だけを取り出すと、1次元配列になります:

    third_wine = wines

    third_wine は次のようになります:

    11.2000.2800.5601.9000.07517.00060.0000.9983.1600.5809.8006.000

    third_wine から個々の要素を取り出すには、1つのインデックスを使用できます。 以下のコードは、third_wineの2番目の項目を表示します:

    third_wine
    0.28000000000000003

    これまで扱ったNumPyの関数、例えばnumpy.random.randは、多次元配列で使用することが可能です。 以下は、ランダムなベクトルを生成するためにnumpy.random.randを使用する方法です:

    np.random.rand(3)
    array()

    以前、np.random.randを呼んだとき、2次元配列の形を渡したので、結果は2次元配列になりました。 今回は、1次元配列のshapeを渡しました。 shapeは次元数と各次元の配列の大きさを指定する。 shapeが(10,10)の場合、10行、10列の2次元配列となる。 (10,) の shape は 10 個の要素を持つ 1 次元配列になります。

    NumPy がより複雑になるのは、2 次元以上の配列を扱い始めるときです。

    N-Dimensional NumPy Arrays

    あまり頻繁に起こることではありませんが、3次元より大きい配列を扱いたい場合があります。 これを考える1つの方法は、リストのリストのリストとして考えることです。 例えば、あるお店の毎月の収益を保存しておき、四半期や1年分の結果をすぐに調べられるようにしたいとします。 1年間の収益は次のようになります。

     

    この店の1月の収益は0、2月は5、というように。 これらの四半期ごとの収益をリストに分割することができます:

    year_one = , , , ]

    1月からの収益はyear_oneを呼び出すことで取り出すことができます。 四半期全体の結果が欲しい場合は、year_one または year_one を呼び出すことができます。 これで2次元の配列、つまり行列ができました。 しかし、別の年の結果を追加したい場合はどうすればよいでしょうか。

    earnings = , , , ], , , , ]]

    最初の年の1月からの結果を取得するには earnings を呼び出します。 これで1つの要素を取り出すのに3つのインデックスが必要になった。 NumPyの3次元配列もほとんど同じである。

    earnings = np.array(earnings)earnings
    500

    また、配列の形状を見つけることができます:

    earnings.shape
    (2, 4, 3)

    インデックスとスライスは3次元配列と全く同じように動作しますが、今度は渡すべき軸が1つ増えています。 すべての年の 1 月の収益を取得したい場合、次のようになります。

    earnings
    array()

    両方の年の第 1 四半期の収益を取得したい場合、次のようになります。 3次元配列から4次元、さらに大きな配列になっても、同じ特性が適用され、同じ方法でインデックス付けやスライスができます。

    NumPy データ型

    先に述べたように、それぞれの NumPy 配列には、単一のデータ型の要素を格納することができます。 例えば、winesはfloat値のみを格納する。 NumPyは独自のデータ型を使って値を格納しますが、これはfloatstrのようなPythonの型とは区別されます。 これは、NumPyのコアがCというプログラミング言語で書かれているためで、CはPythonのデータ型とは異なる方法でデータを格納します。 NumPyのデータ型はPythonとCの間でマッピングされており、変換の手間なくNumPyの配列を使用することができます。

    NumPy配列のデータ型は、dtypeプロパティにアクセスして見つけることができます:

    wines.dtype
    dtype('float64')

    NumPyにはいくつかのデータ型があり、ほとんどは floatstr など、 Pythonデータ型と対応しています。 NumPyのデータ型の完全なリストはここにありますが、ここではいくつかの重要なものを紹介します:

    • float – 浮動小数点数データ.
    • int – 整数データ.
    • string – 文字データ.
    • object – Pythonオブジェクト.

    データ型にはさらに、何ビットのメモリを占有するかを示す接尾語がついています。 つまり、int32は32ビットの整数データ型、float6464ビットの浮動小数点データ型です。

    データ型の変換

    配列を別の型に変換するにはnumpy.ndarray.asterypeメソッドを使用できます。 このメソッドは実際に配列をコピーし、指定されたデータ型を持つ新しい配列を返します。 例えば、winesintのデータ型に変換します:

    wines.astype(int)
    array(,,,...,,,])

    上で見たように、結果の配列のすべての項目は整数です。 3570>を変換する際に、NumPyのデータ型ではなく、Pythonの<6929>データ型を使用したことに注意してください。 これは、floatintstringを含むいくつかのPythonデータ型がNumPyで使用でき、自動的にNumPyデータ型に変換されるためです。

    結果の配列のdtypeのnameプロパティで、NumPyが結果の配列をどのデータ型にマップしたか確認できます:

    int_wines = wines.astype(int)int_wines.dtype.name
    'int64'

    配列は64ビット整数データ型へ変換されていることがわかります。 これは非常に長い整数値を可能にしますが、32ビット整数として値を格納するよりもメモリに多くのスペースを取ります。

    配列がメモリに格納される方法をより制御したい場合は、numpyのように直接NumPy d型オブジェクトを作成することができます。int32:

    np.int32
    numpy.int32

    これらを直接使って型変換ができます。

    wines.astype(np.int32)
    array(,,,...,,,], dtype=int32)

    NumPy Array Operations

    NumPyでは配列に対して簡単に数学演算ができるようになっています。 これはNumPyの主な利点の1つで、計算を非常に簡単に行うことができます。

    Single Array Math

    配列と値で基本的な数学操作(/, *, -, +, ^)を行うと、配列内のそれぞれの要素にその操作を適用することになるのです。

    例えば、酔っぱらっていて気前が良いので、各品質スコアに10点を追加したいとします。

    wines + 10
    array()

    上の操作は wines 配列を変更しないことに注意してください – ワインの品質列の各要素に 10 が追加された新しい 1 次元配列を返します。 たとえば、品質スコアのそれぞれに2を掛けたい場合は、次のようになります。

    wines * 2
    array()

    Multiple Array Math

    配列間で数学演算を行うことも可能です。 これは、要素のペアに演算を適用します。 例えば、quality列を自分自身に足すと、次のようになります:

    wines + wines
    array()

    これはwines * 2と同等であることに注意してください – これはNumPyが要素の各ペアを足すからです。 最初の配列の最初の要素は、2番目の配列の最初の要素に追加され、2番目の要素は2番目の配列に追加され、以下同様です。

    また、これを配列の乗算に使用することもできます。 例えば、アルコール度数と品質が最大になるようなワインを選びたいとしましょう(酔いたいけど、上品でありたい)。

    wines * wines
    array()

    一般的な演算(/, *, -, +, ^)はすべて配列間で動作します。

    Broadcasting

    演算対象の配列がまったく同じサイズでない限り、要素演算は不可能です。 このような場合、NumPy は要素を一致させるためにブロードキャストを実行します。

    • 各配列の最後の次元が比較されます。
      • 次元の長さが等しいか、次元の1つが長さ 1 の場合、処理を続けます。
      • 次元の長さが等しくない場合、またどの次元も長さ 1 の場合は、エラーとします。
    • 最短の配列の次元がなくなるまで次元のチェックを続けます。

    例えば、次の2つの形状は互換性があります:

    A: (50,3)B (3,)

    これは配列 A の後続次元の長さが 3、配列 B の後続次元の長さが 3 であることが理由です。 両者は等しいので、その次元は問題ありません。 配列Bはその後要素がなくなるので、大丈夫です。配列は数学演算のために互換性があります。

    次の2つの形状も互換性があります:

    A: (1,2)B (50,2)

    最後の次元は一致し、Aは最初の次元で長さが1です。

    The two arrays don’t match:

    A: (50,50)B: (49,49)

    The length of the dimensions aren’t equal, and neither array has either dimension length equal to 1.

    放送の詳しい説明はここにありますが、原理を説明するためにいくつかの例を見て行きましょう:

    wines * np.array()
    ------------------------------------------------------------------------ValueError Traceback (most recent call last)<ipython -input-40-821086ccaf65> in <module>()----> 1 wines * np.array()ValueError: operands could not be broadcast together with shapes (1599,12) (2,)</module></ipython>

    上の例は、2つの配列がマッチする最後の寸法を持っていないのでうまくいきませんでした。 最後の次元が一致する例を示します。

    array_one = np.array( , ])array_two = np.array()array_one + array_two
    array(,])

    ご覧のように、array_twoarray_one の各行にわたってブロードキャストされています。

    rand_array = np.random.rand(12)wines + rand_array
    array(,,,...,,,])

    rand_arrayの要素はwinesの各行にわたってブロードキャストされるので、winesの最初の列にはrand_arrayの最初の値が追加され、以下同様。

    NumPy Array Methods

    共通の数学操作に加えて、NumPyには配列に対してより複雑に計算するためのいくつかのメソッドも用意されています。 この例として、numpy.ndarray.sumメソッドがあります。 これは、デフォルトでは配列のすべての要素の合計を求めます:

    wines.sum()
    9012.0

    すべての品質評価の合計は154.1788となります。 キーワード引数 axissum メソッドに渡すと、軸上の合計を求めることができます。 3570> 行列に対して sum を呼び出し、axis=0 を渡すと、配列の最初の軸の総和が求まります。 これにより、各列のすべての値の合計が得られます。 これは、最初の軸の総和が各列の総和を与えるということとは逆に思えるかもしれませんが、これを考える一つの方法は、指定された軸が「離れていく」軸であるということです。 つまり、axis=0 を指定すると、行が消えて、各行にわたる残りの軸の合計を求めることになります:

    wines.sum(axis=0)
    array()

    形状を確認することで、合計が正しく行われたことを確認できます。

    wines.sum(axis=0).shape
    (12,)

    もしaxis=1を渡すと、配列の2番目の軸の総和を求めます。

    wines.sum(axis=1)
    array()

    他にもsumメソッドと同じような動作をするメソッドがいくつかあります。

  • numpy.ndarray.max – 配列の最大値を求めます。

配列メソッドの全リストはこちらです。

NumPy Array Comparisons

NumPyでは<>>=<=そして==などの比較演算により行とある値の一致を確認することが可能になっています。 たとえば、どのワインの品質評価が 5 より高いかを確認したい場合、次のようにします。

wines > 5
array(, dtype=bool)

どのワインの品質評価が 5 より高いかを示すブール配列が得られます。 他の演算子でも同じようなことができます。 例えば、10:

wines == 10
array(, dtype=bool)

Subsetting

ブール配列とNumPy配列でできる強力なことの1つは、NumPy配列の特定の行または列だけを選択できることです。 例えば、以下のコードは、品質が7以上のwinesの行のみを選択します:

high_quality = wines > 7wines
array(,,])

high_qualityTrue値を含む行のみ、およびすべての列を選択しています。 このサブセット化により、特定の基準で配列をフィルタリングすることが簡単になります。 例えば、アルコール度数の高いワインや品質の高いワインを探すことができます。

high_quality_and_alcohol = (wines > 10) & (wines > 7)wines
array(,,,,,,,,,,,,,,,])

サブセットと代入を組み合わせて、配列内の特定の値を上書きすることができます。 これはしばしば、配列要素へのアクセスを容易にすることができます。 最も単純な再形成は、軸を反転させることで、行が列に、またはその逆が可能になります。 これはnumpy.transpose関数で実現できます。

np.transpose(wines).shape
(12, 1599)

配列を一次元表現にするためにnumpy.ravel関数を使用することができます。

wines.ravel()
array()

以下は、numpy.ravelの順序がわかる例です:

array_one = np.array( , ])array_one.ravel()
array()

最後に、配列を指定した形状に変形するnumpy.reshape関数を使用できます。 以下のコードは、winesの2行目を2行と6列の2次元配列にします:

wines.reshape((2,6))
array(,])

Combining NumPy Arrays

NumPy では、複数の配列を1つの統合された配列にまとめることは非常によくあることです。 numpy.vstackを使って、複数の配列を縦に積み重ねることができます。 これは、2番目の配列の項目が最初の配列に新しい行として追加されるようなものだと考えてください。 白ワインの品質に関する情報を含むwinequality-white.csvデータセットを読み込んで、赤ワインに関する情報を含む既存のwinesデータセットと結合することができます。

以下のコードでは、

  • winequality-white.csv.
  • を読み込む

  • white_wines.
  • の形を表示

white_wines = np.genfromtxt("winequality-white.csv", delimiter=";", skip_header=1)white_wines.shape
(4898, 12)

見ての通り、4898ワインの属性を持っていますね。 白ワインのデータができたので、すべてのワインデータを結合します。

以下のコードでは:

  • vstack関数を使ってwineswhite_winesを結合します。
  • 結果の形状を表示する。
all_wines = np.vstack((wines, white_wines))all_wines.shape
(6497, 12)

見ての通り、結果は6497行で、これはwinesの行数とred_winesの行数の合計です。

もし、行数は一定で、列を結合して配列を横方向に結合したい場合は、numpy.hstack関数を使用すれば良いのです。

最後に、hstackvstackの汎用版としてnumpy.concatenateを使用することができます。 2つの配列を連結したい場合は、concatenateに渡して、axisに連結したいキーワード引数を指定します。 第一軸に沿った連結はvstackに似ており、第二軸に沿った連結はhstackに似ています:

np.concatenate((wines, white_wines), axis=0)
array(,,,...,,,])

Free NumPy Cheat Sheet

NumPy についてもっと学びたいと思ったら、NumPy と Pandas についてのインタラクティブコースをチェックしてみてください。

また、無料の NumPy チートシートで、NumPy のスキルを次のレベルに引き上げることもできます!

Further Reading

これで NumPy と、それをデータセットに適用する方法を十分に理解したはずです。

より深く掘り下げたい場合は、以下のリソースが役に立ちます:

  • NumPy Quickstart – 良いコード例があり、ほとんどの NumPy の基本的な機能をカバーしています。
  • Python NumPy Tutorial – NumPy と他の Python ライブラリに関する素晴らしいチュートリアル。
  • Visual NumPy Introduction – NumPy のコンセプトを説明するために人生ゲームを使っているガイド。

次のチュートリアルでは、Pandas についてもっと掘り下げます。

  • 配列の中に複数のデータ型を混ぜることができない。
  • 各列がどんなデータ型を持っているかを覚えておかなければならない。

Vik は Dataquest の CEO 兼創設者です。

Similar Posts

コメントを残す

メールアドレスが公開されることはありません。