序章

Python pandas パッケージは、データの操作と分析に使用され、ラベル付けされたデータまたはリレーショナルデータをより直感的な方法で操作できるように設計されています。

に基づいて構築 numpy パッケージ、 pandas ラベル、説明的なインデックスが含まれており、一般的なデータ形式や欠落データの処理に特に堅牢です。

The pandas パッケージはスプレッドシート機能を提供しますが、データの操作はスプレッドシートよりもPythonの方がはるかに高速です。 pandas 非常に効率的であることが証明されています。

このチュートリアルでは、最初にインストールします pandas 次に、基本的なデータ構造であるSeriesおよびDataFramesを理解します。

インストール pandas

他のPythonパッケージと同様に、インストールできます pandaspip.

まず、ローカルプログラミング環境またはサーバーベースのプログラミング環境を選択してインストールします。 pandas そこでの依存関係とともに:

  1. pip install pandas numpy python-dateutil pytz

次のような出力が表示されます。

Output
Successfully installed pandas-0.19.2

インストールしたい場合 pandas Anaconda 内では、次のコマンドを使用してこれを行うことができます。

  1. conda install pandas

この時点で、すべての準備が整いました。 pandas パッケージ。

シリーズ

pandas Series は、任意のデータ型を保持できる1次元配列です。 軸ラベルはまとめてインデックスと呼ばれます。

次のように、コマンドラインでPythonインタープリターを起動しましょう。

  1. python

インタープリター内から、両方をインポートします numpypandas 名前空間へのパッケージ:

  1. import numpy as np
  2. import pandas as pd

Seriesを使用する前に、一般的にどのように見えるかを見てみましょう。

s = pd.Series([data], index=[index])

データがPythonlistのように構造化されていることに気付くかもしれません。

インデックスを宣言せずに

整数データを入力してから、シリーズの名前パラメーターを指定しますが、 index 方法を確認するためのパラメータ pandas 暗黙的に入力します。

  1. s = pd.Series([0, 1, 4, 9, 16, 25], name='Squares')

それでは、シリーズを呼び出して、何がわかるかを見てみましょう。 pandas それで行います:

  1. s

次の出力が表示されます。左側の列にインデックスがあり、右側の列にデータ値があります。 列の下には、シリーズの名前と値を構成するデータ型に関する情報があります。

Output
0 0 1 1 2 4 3 9 4 16 5 25 Name: Squares, dtype: int64

配列のインデックスは提供していませんが、整数値が暗黙的に追加されています。 0 終えた 5.

インデックスの宣言

上記の構文が示すように、明示的なインデックスを使用してSeriesを作成することもできます。 地球の海のメートル単位の平均深度に関するデータを使用します。

  1. avg_ocean_depth = pd.Series([1205, 3646, 3741, 4080, 3270], index=['Arctic', 'Atlantic', 'Indian', 'Pacific', 'Southern'])

シリーズが構築されたら、それを呼び出して出力を確認しましょう。

  1. avg_ocean_depth
Output
Arctic 1205 Atlantic 3646 Indian 3741 Pacific 4080 Southern 3270 dtype: int64

提供したインデックスが左側にあり、値が右側にあることがわかります。

インデックス作成とスライスシリーズ

pandas 値を取得するために、対応する番号でインデックスを付けることができるシリーズ:

  1. avg_ocean_depth[2]
Output
3741

インデックス番号でスライスして値を取得することもできます。

  1. avg_ocean_depth[2:4]
Output
Indian 3741 Pacific 4080 dtype: int64

さらに、インデックスの値を呼び出して、それに対応する値を返すことができます。

  1. avg_ocean_depth['Indian']
Output
3741

インデックスの値でスライスして、対応する値を返すこともできます。

  1. avg_ocean_depth['Indian':'Southern']
Output
Indian 3741 Pacific 4080 Southern 3270 dtype: int64

この最後の例では、インデックス名を使用してスライスする場合、2つのパラメーターが排他的ではなく包括的であることに注意してください。

Pythonインタープリターを終了しましょう quit().

辞書で初期化されたシリーズ

pandas dictionary データ型を使用して、シリーズを初期化することもできます。 このように、インデックスを個別のリストとして宣言するのではなく、組み込みのキーをインデックスとして使用します。

というファイルを作成しましょう ocean.py そして、それを印刷するための呼び出しで次の辞書を追加します。

ocean.py
import numpy as np
import pandas as pd

avg_ocean_depth = pd.Series({
                    'Arctic': 1205,
                    'Atlantic': 3646,
                    'Indian': 3741,
                    'Pacific': 4080,
                    'Southern': 3270
})

print(avg_ocean_depth)

これで、コマンドラインでファイルを実行できます。

  1. python ocean.py

次の出力が表示されます。

Output
Arctic 1205 Atlantic 3646 Indian 3741 Pacific 4080 Southern 3270 dtype: int64

シリーズは整理された方法で表示され、左側にインデックス(キーで構成)、右側に値のセットが表示されます。

これは、キーを呼び出すことで値にアクセスできるという点で、他のPython辞書と同じように動作します。これは、次のように行うことができます。

ocean_depth.py
...
print(avg_ocean_depth['Indian'])
print(avg_ocean_depth['Atlantic':'Indian'])
Output
3741 Atlantic 3646 Indian 3741 dtype: int64

ただし、これらのシリーズはPythonオブジェクトになっているため、辞書関数を使用できなくなります。

Python辞書は、シリーズを設定するための別のフォームを提供します pandas.

DataFrames

DataFrames は、さまざまなデータ型で構成されている可能性のある列を持つ2次元のラベル付きデータ構造です。

DataFrameは、スプレッドシートまたはSQLテーブルに似ています。 一般的に、あなたが pandas、DataFramesは、使用する最も一般的なオブジェクトになります。

どのように pandas DataFrameは機能します。2つのシリーズを設定してから、それらをDataFrameに渡します。 最初のシリーズは私たちの avg_ocean_depth 以前からのシリーズ、そして私たちの2番目は max_ocean_depth これには、地球上の各海の最大深度のデータがメートル単位で含まれています。

ocean.py
import numpy as np
import pandas as pd


avg_ocean_depth = pd.Series({
                    'Arctic': 1205,
                    'Atlantic': 3646,
                    'Indian': 3741,
                    'Pacific': 4080,
                    'Southern': 3270
})

max_ocean_depth = pd.Series({
                    'Arctic': 5567,
                    'Atlantic': 8486,
                    'Indian': 7906,
                    'Pacific': 10803,
                    'Southern': 7075
})

これらの2つのシリーズを設定したら、ファイルの下部、下にDataFrameを追加しましょう。 max_ocean_depth シリーズ。 この例では、これらのシリーズの両方に同じインデックスラベルがありますが、異なるラベルのシリーズがある場合、欠落している値にはラベルが付けられます NaN.

これは、シリーズの変数のキーとして宣言する列ラベルを含めることができるように構成されています。 DataFrameがどのように見えるかを確認するために、それを印刷するための呼び出しを発行してみましょう。

ocean.py
...
max_ocean_depth = pd.Series({
                    'Arctic': 5567,
                    'Atlantic': 8486,
                    'Indian': 7906,
                    'Pacific': 10803,
                    'Southern': 7075
})

ocean_depths = pd.DataFrame({
                    'Avg. Depth (m)': avg_ocean_depth,
                    'Max. Depth (m)': max_ocean_depth
})

print(ocean_depths)

Output
Avg. Depth (m) Max. Depth (m) Arctic 1205 5567 Atlantic 3646 8486 Indian 3741 7906 Pacific 4080 10803 Southern 3270 7075

出力には、2つの列見出しとそれぞれの下の数値データが表示され、辞書キーのラベルが左側にあります。

DataFramesでのデータの並べ替え

DataFrameのデータを並べ替えることができます。 DataFrame.sort_values(by=...) 関数。

たとえば、 ascending ブールパラメータ。どちらでもかまいません。 True また False. ご了承ください ascending は関数に渡すことができるパラメーターですが、降順はそうではありません。

ocean_depth.py
...
print(ocean_depths.sort_values('Avg. Depth (m)', ascending=True))
Output
Avg. Depth (m) Max. Depth (m) Arctic 1205 5567 Southern 3270 7075 Atlantic 3646 8486 Indian 3741 7906 Pacific 4080 10803

これで、出力には、左端の整数列に低い値から高い値に昇順の数値が表示されます。

DataFramesを使用した統計分析

次に、いくつかの要約統計量から収集できるものを見てみましょう。 pandas とともに DataFrame.describe() 関数。

特定のパラメータを渡さずに、 DataFrame.describe() 関数は、数値データ型について次の情報を提供します。

戻る その意味
count 頻度カウント; 何かが発生する回数
mean 平均または平均
std 標準偏差、データがどの程度変化するかを示すために使用される数値
min セット内の最小数または最小数
25% 25パーセンタイル
50% 50パーセンタイル
75% 75パーセンタイル
max セット内の最大数または最大数

Pythonにこの統計データを出力させて、 ocean_depths DataFrameと describe() 関数:

ocean.py
...
print(ocean_depths.describe())

このプログラムを実行すると、次の出力が表示されます。

Output
Avg. Depth (m) Max. Depth (m) count 5.000000 5.000000 mean 3188.400000 7967.400000 std 1145.671113 1928.188347 min 1205.000000 5567.000000 25% 3270.000000 7075.000000 50% 3646.000000 7906.000000 75% 3741.000000 8486.000000 max 4080.000000 10803.000000

これで、ここでの出力を元のDataFrameと比較して、グループと見なした場合の地球の海の平均深度と最大深度をより正確に把握できます。

欠落している値の処理

多くの場合、データを操作するときに、値が欠落します。 The pandas パッケージは、欠落データを処理するためのさまざまな方法を提供しますnull データ、または何らかの理由で存在しないデータ。 の pandas、これはNAデータと呼ばれ、次のようにレンダリングされます。 NaN.

欠落値の削除について説明します。 DataFrame.dropna() 関数と不足している値を埋める DataFrame.fillna() 関数。 これにより、開始時に問題が発生することがなくなります。

という新しいファイルを作りましょう user_data.py 値が欠落しているデータを入力して、DataFrameに変換します。

user_data.py
import numpy as np
import pandas as pd


user_data = {'first_name': ['Sammy', 'Jesse', np.nan, 'Jamie'],
        'last_name': ['Shark', 'Octopus', np.nan, 'Mantis shrimp'],
        'online': [True, np.nan, False, True],
        'followers': [987, 432, 321, np.nan]}

df = pd.DataFrame(user_data, columns = ['first_name', 'last_name', 'online', 'followers'])

print(df)

printを呼び出すと、プログラムを実行すると次の出力が表示されます。

Output
first_name last_name online followers 0 Sammy Shark True 987.0 1 Jesse Octopus NaN 432.0 2 NaN NaN False 321.0 3 Jamie Mantis shrimp True NaN

ここにはかなりの数の欠落している値があります。

まず、不足している値を次のように削除しましょう dropna().

user_data.py
...
df_drop_missing = df.dropna()

print(df_drop_missing)

小さなデータセットには値がまったく欠落していない行が1つしかないため、プログラムを実行したときにそのまま残る行はこれだけです。

Output
first_name last_name online followers 0 Sammy Shark True 987.0

値を削除する代わりに、不足している値に次のような選択した値を入力することもできます。 0. これは私たちが達成します DataFrame.fillna(0).

ファイルに追加した最後の2行を削除またはコメントアウトし、以下を追加します。

user_data.py
...
df_fill = df.fillna(0)

print(df_fill)

プログラムを実行すると、次の出力が表示されます。

Output
first_name last_name online followers 0 Sammy Shark True 987.0 1 Jesse Octopus 0 432.0 2 0 0 False 321.0 3 Jamie Mantis shrimp True 0.0

これで、すべての列と行がそのままになり、 NaN 私たちの価値観として私たちは今持っています 0 それらのスペースを埋めます。 必要に応じてフロートが使用されていることに気付くでしょう。

この時点で、データの並べ替え、統計分析、およびDataFrameで欠落している値の処理を行うことができます。

結論

このチュートリアルでは、データ分析の概要情報について説明しました。 pandas およびPython3。 あなたは今持っているはずです pandas インストールされており、内のSeriesおよびDataFramesデータ構造を操作できます pandas.