サイトアイコン 天文学者のpython・音楽・お料理レシピ

python入門講座 | 配列タイプ変数の種類と特徴(リスト, NumPy配列, DataFrameなど)[第22回]

Python固有のlist型や外部ライブラリのNumPy arrayを目的に応じて使い分けます。

Ciao!みなさんこんにちは!このブログでは主に
(1)pythonデータ解析,
(2)DTM音楽作成,
(3)お料理,
(4)博士転職
の4つのトピックについて発信しています。

今回は「アラサーOLのためのpython入門講座」です!この講座では、プログラミング初心者アラサーOLのMi坊さんに、pythonを学習する上でのアドバイスを行います!「パソコンもプログラミングも初心者だけど、プログラミングができるようになりたい!」という方のためにstep-by-stepで解説していきます。

今日は複数の値やデータをまとめて格納できる配列タイプ変数の種類と特徴を解説します。Pythonには複数の値やデータを格納できる変数がいくつかあります。それぞれの特徴を頭に入れておくと、わかりやすく高速で動く質の高いPythonプログラムを書くことができます!

この記事を読めば、Pythonでの配列タイプ変数の種類やそれぞれの特徴を知ることができます。ぜひ最後までお付き合いください!

Kaiko

この記事はこんな人におすすめ

  • 初心者だけどpythonを始めた!
  • pythonの基本的な使い方を知りたい!
  • 独学で学んだpythonの知識を整理したい!

Abstract | 配列タイプ変数は目的に応じて使い分ける

Pythonでは複数の値やデータをまとめて格納できる配列タイプ変数として、

があります。

list型、dict型, tuple型は自由度が高い特徴があります。一方で処理速度が遅い欠点があります。使いみちとしては、例えば計算の条件など、少数のパラメータをプログラムの冒頭でlistに格納しておいて、後でプログラムの中で呼び出すといった使い方が挙げられます。大量のデータを格納して処理を回すといったことはしません。

一方のNumPy array, Pandas DataFrameは処理速度が速いことが長所です。一方で、柔軟性が低いことが短所です。使い方として、大量のデータを格納しておき、統計処理や科学計算などのデータ分析を行うことが挙げられます。

柔軟性が高いlist型、dict型, tuple型と処理速度の高いNumPy array, Pandas DataFrameの特長を理解し、目的に応じて使い分けることで速く動くコードをスムーズに書き上げることができます!



Contents | Pythonの配列タイプ変数の種類と特徴

Pythonには複数の値やデータを格納できる変数がいくつかあります。大きく分けて、

があります。

図1. list型、dict型, tuple型NumPy array, Pandas DataFrameの長所

以下では、Python固有の変数、外部ライブラリの変数それぞれの特徴を解説します。



Python固有の配列タイプ変数とその特徴 | list, dict, tuple

Python固有の変数で複数の値を格納できるものは、

の3種類です。これらは格納する値の数が多くないときや、様々なtype(str, int, floatなど)の値を格納するときに使います。例えば、コードの最初の方に計算で使うパラメータを書いておくときに使います。実際に計算をする部分ではそのパラメータを参照するようにします。こうすることで、計算の条件を変えたいときに、コードの大部分を触る必要はなく、冒頭で定義されたパラメータを変更するだけで済みます。

Python固有の配列タイプ変数の長所 | 柔軟性が高い(サイズ、Typeが自由)

これらPython固有の配列タイプ3種類の特長は柔軟性が高いことです。配列のサイズ(次元数、各次元の要素数)を自由に設定することができ、途中で変更することも可能です。格納する値のType(int, float, str, object)も自由です。数値や文字列、その他さまざまなオブジェクトなど、何でも格納できます。例えば、一つのList型変数の中にint型の値、float型の値、str型の値を混在させることができます。さらに言えば、List型変数にListを格納して2次元やそれ以上の次元の配列にしたり、dict型やtuple型、NumPy配列を格納することも可能です。

# 例えばlist型, dict型, tuple型の変数を2つ作っておき
var1 = [123, 'abc', 456.789]    # list variable
var2 = {'a':'ABC', 'b':'BCD', 'c': 'CDE'}   # dict variable
var3 = ('FG', 789) # tuple variable

# これらを一つのリストに格納しておくことも可能
vars = [var1, var2, var3]

Python固有の配列タイプ変数の短所 | 計算が遅い(ループが必要)

Python固有の配列タイプ変数は大量のデータを格納して計算を回すには不向きです。格納されている値を処理するのにループ処理が必要で、処理に時間がかかるためです。例えば、表形式で集計された1万行x1万列のデータをlist型に格納することは行いません。このような場合にはPandas DataFrameやNumPy arrayといった外部ライブラリの配列タイプ変数を使うべきです。



外部ライブラリの配列タイプ変数とその特徴 | NumPy array, Pandas DataFrame

上記の3つに加え、データ分析、NumPy、Pandasという外部ライブラリで提供される

がよく使われます。これらは大量のデータを格納して計算を回すのに使います。例えば、表形式で集計された1万行x1万列のデータを格納したり、画像データを3次元(x, y, 色)のNumPy arrayとして格納して扱ったります。

NumPy array, Pandas DataFrameの長所 | 計算が早い(ループ不要)

NumPy array, Pandas DataFrameの特長のひとつは、格納された値を処理するのにループ処理が不要で計算が高速であることです。様々なメソッドや分析ライブラリが用意されており、科学計算や統計処理が簡単に実装できることも長所です。例えば、csv(comma separated values)の表データを1行のコードで読み込むことができたり、平均値や標準偏差の計算なども1行で計算できます。list型など、Python固有の配列タイプ変数ではループ処理を書く必要がありますが、NumPyやPandasなら簡単です。

# import
import numpy as np
import pandas as pd

# csvの読み込み
var_df = pd.DataFrame('input.csv')    # To pandas DataFrame
var_np = np.genfromtxt('input.csv', delimiter = ',')    # To NumPy array

# 平均値の計算(縦に集計)
avg_df = var_df.mean(axis = 0)    # pandas DataFrame
avg_np = np.mean(var_np, axis = 0)     # NumPy array

NumPy array, Pandas DataFrameの短所 | 柔軟性が低い(サイズが固定、型の混在不可)

NumPy array, Pandas DataFrameの短所として、list型などと比べると柔軟性が低いことが挙げられます。具体的には配列のサイズ(n行m列)や格納される値のType(int, float, str)が予め決まっている必要があります。また、これらを途中で変更することはできません。NumPy arrayであれば、全ての要素が同じTypeである必要があり、Pandas DataFrameでは各列の要素はすべて同じTypeである必要があります。Python固有の配列タイプ変数とNumPyやPandasの配列タイプ変数の長所と短所はパソコン上でのメモリの確保のされ方や呼び出し方の違いに起因します。処理の速さと柔軟性は基本的にはトレードオフの関係にあります。これについては機会があればそのうち解説します。

NumPy array, Pandas DataFrameとC言語の配列の関係

C言語などのコンパイル言語に触れたことがある方であれば、NumPy array, Pandas DataFrameはC言語の配列型の変数に近い振る舞いをすることに気づくかもしれません。NumPy array, Pandas DataFrameは裏側でC言語のプログラムが動いています。そのため、コンパイル言語の特長である高速処理を行うことができます。一方で、C言語の配列はサイズや格納されている値のTypeを途中で変えることができません。この性質がNumPy array, Pandas DataFrameの柔軟性の低さとして現れています。



Conclusion | まとめ

最後までご覧いただきありがとうございます!Pythonにおける配列タイプ変数の種類とそれぞれの特徴を紹介しました!Python固有の配列タイプ変数(list, dict, tuple)とNumPy array, Pandas DataFrameの長所・短所を理解した上で、目的に合わせて使い分けると、わかりやすくて高速に動く質の高いPythonコードを書くことができます!配列タイプ変数それぞれの具体的な使い方は今後数回に分けて解説していきます!お楽しみに!

以上「python入門講座 | 配列タイプ変数の種類と特徴(リスト, NumPy配列, DataFrameなど)」でした!
またお会いしましょう!Ciao!



References | 参考

以下の教科書を参考にして進めています!より詳しく学びたい方は購入して読んでみてください!

Pythonの参考教科書

モバイルバージョンを終了