pandasの使い方を書く前に、numpyの知識も必要だと思い調べました。
自分があまり理解できていなかったことを痛感しました。
記事をまとめるのにそれなりに時間がかかりましたが、勉強になりました。
Numpyとは何か
NumpyとはNumerical Pythonの略で、pandasやscikit-learn内でも利用されているとても有名なライブラリです。
Numpyライブラリはndarrayと呼ばれる同じ型の多次元配列や行列構造が提供されており、数値などを効率的に操作することが出来るメソッドも含まれています。
The NumPy library contains multidimensional array and matrix data structures. It provides ndarray, a homogeneous n-dimensional array object, with methods to efficiently operate on it. 参照: https://numpy.org/doc/stable/user/absolute_beginners.html
Numpyのインストール
依存関係でインストールされることが多いので、import numpyとしたら既に使える人が多いかもしれません。
その場合はインストール手順はスキップしてください。
$ /Users/hinomaruc/Desktop/notebooks/my-venv/bin/python3 -m pip install numpy
Requirement already satisfied: numpy in ./Desktop/notebooks/my-venv/lib/python3.9/site-packages (1.22.1)
pandasをインストールしたときに依存関係でインストールされているので、requirement already satisfiedとなっています。
すでにインストールされているので、すぐにnumpyを使うことができます。
numpy.ndarrayのデータ構造の特徴
下記のようなデータ構造を持ち、計算処理の大部分にC言語が用いられいることによって高速処理を実現させているようです。
- ndarrayに格納できるデータ型は全て等しい
- ndarrayの各次元に格納できる要素数は全て等しい
- 各要素の値はmutable (変更可)
- 各要素はindexでのアクセスが可能
- 消費メモリが少ない (96 + n * 8 Bytes, where n is the size of array)
Listとnumpy.ndarrayの違いは何か
- Listに格納できるデータ型は異なっていてもよい
- Listを多次元化する場合、それぞれの次元の要素数は異なっていてもよい
- 計算処理はnumpy.ndarrayの方が高速
下記はndarrayと等しい
- 各要素の値はmutable (変更可)
- 各要素はindexでのアクセスが可能
pandas.Seriesとnumpy.ndarrayの違いは何か
One-dimensional ndarray with axis labels (including time series). 引用: https://pandas.pydata.org/docs/reference/api/pandas.Series.html
1次元のndarrayがpandas.Seriesとのことです。
加えて軸ラベルと時系列データにも対応しているようです。
pandas.DataFrameとnumpy.ndarrayの違いは何か
Two-dimensional, size-mutable, potentially heterogeneous tabular data.
Can be thought of as a dict-like container for Series objects
引用: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html#pandas.DataFrame
サイズが可変で様々なデータ型が入る可能性がある表形式の2次元データと書いてあります。
Seriesの集まりがDataFrameと考えても良いそうです。
従って、異なるポイントはpandas.Seriesとnumpy.ndarrayの違いと同様になります。
(おまけ) tupleとlistの違いは何か
listはmutable(ミュータブル)、tupleはimmutable(イミュータブル)とよく説明させれています。
listには要素追加や削除のメソッドがありますが、tupleにはありません。
そのため、listだと思って、tupleにappendやremoveを使うことが出来なくなっているようです。
ただし、tupleでも同じ変数名でtupleを作成し直せば要素追加や削除のような挙動をさせることができるようです。
※ オブジェクトIDは変更される
こちらの記事がよくまとまっていて、理解しやすかったです。
参照
https://numpy.org/doc/stable/user/whatisnumpy.html
https://numpy.org/doc/stable/user/absolute_beginners.html
https://www.geeksforgeeks.org/python-lists-vs-numpy-arrays/
https://www.nature.com/articles/s41586-020-2649-2
https://webcourses.ucf.edu/courses/1249560/pages/python-lists-vs-numpy-arrays-what-is-the-difference
https://stackoverflow.com/questions/11026011/why-does-the-content-of-a-tuple-changes-when-i-append-to-a-list-inside-of-it-but