pandasパッケージをインストールし、Python 3でデータ構造を操作する方法

前書き

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

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

`+ pandas `パッケージはスプレッドシート機能を提供しますが、データの操作はスプレッドシートを使用するよりもPythonの方がはるかに速く、 ` pandas +`は非常に効率的であることがわかります。

このチュートリアルでは、最初に `+ pandas +`をインストールしてから、基本的なデータ構造* Series および DataFrames *を使用して方向付けを行います。

`+ pandas`のインストール

他のPythonパッケージと同様に、 + pip`で + pandas`をインストールできます。

まず、https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-local-programming-environment-on-ubuntu-16-に移動しましょう04 [ローカルプログラミング環境]またはhttps://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-programming-environment-on-an-ubuntu-16 -04-server [サーバーベースのプログラミング環境]を選択し、 `+ pandas +`とその依存関係をそこにインストールします。

pip install pandas numpy python-dateutil pytz

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

OutputSuccessfully installed pandas-

Anaconda内に `+ pandas +`をインストールする場合は、次のコマンドでこれを行うことができます。

conda install pandas

この時点で、 `+ pandas +`パッケージの使用を開始する準備がすべて整いました。

シリーズ

`+ pandas +`では、* Series *はhttps://www.digitalocean.com/community/tutorials/understanding-data-types-in-python-3 [データタイプ]を保持できる1次元配列です。 軸ラベルは、集合的に*インデックス*と呼ばれます。

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

python

インタープリター内から、 `+ numpy `と ` pandas +`パッケージの両方を名前空間にインポートします。

import numpy as np
import pandas as pd

シリーズを使用する前に、一般的な外観を見てみましょう。

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

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

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

整数データを入力し、シリーズの名前パラメーターを提供しますが、 `+ pandas `が暗黙的に入力する方法を確認するために ` index +`パラメーターを使用することは避けます。

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

それでは、シリーズを呼び出して、 `+ pandas +`がそれで何をするのかを見てみましょう。

s

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

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

配列のインデックスは提供していませんが、整数値「0」から「5」まで暗黙的に追加されました。

インデックスの宣言

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

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

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

avg_ocean_depth
OutputArctic      1205
Atlantic    3646
Indian      3741
Pacific     4080
Southern    3270
dtype: int64

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

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

`+ pandas +`シリーズを使用すると、対応する番号でインデックスを作成して値を取得できます。

avg_ocean_depth[2]
Output3741

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

avg_ocean_depth[2:4]
OutputIndian     3741
Pacific    4080
dtype: int64

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

avg_ocean_depth['Indian']
Output3741

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

avg_ocean_depth['Indian':'Southern']
OutputIndian      3741
Pacific     4080
Southern    3270
dtype: int64

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

`+ quit()+`でPythonインタープリターを終了しましょう。

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

`+ pandas +`では、https://www.digitalocean.com/community/tutorials/understanding-dictionaries-in-python-3 [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)

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

python ocean.py

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

OutputArctic      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'])
Output3741
Atlantic    3646
Indian      3741
dtype: int64

ただし、これらのシリーズは現在Pythonオブジェクトであるため、辞書関数を使用することはできません。

Python辞書は、 `+ pandas`でシリーズを設定する別のフォームを提供します。

データフレーム

  • DataFrames *は、異なるデータ型で構成された列を持つ2次元のラベル付きデータ構造です。

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

+ 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つのシリーズをセットアップしたら、ファイルの下部、 `+ max_ocean_depth `シリーズの下にDataFrameを追加しましょう。 この例では、これらのシリーズの両方に同じインデックスラベルがありますが、異なるラベルのシリーズがある場合、欠損値には「 NaN +」というラベルが付けられます。

これは、シリーズの変数のキーとして宣言する列ラベルを含めることができるように構築されています。 DataFrameの外観を確認するには、呼び出しを発行して印刷します。

ocean.py

...
max_ocean_depth = pd.Series({
                   'Arctic': 5567,
                   'Atlantic': 8486,
                   'Indian': 7906,
                   'Pacific': 10803,
                   'Southern': 7075
})
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.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 」から収集できるhttp://pandas.pydata.org/pandas-docs/version/0.18.1/generated/pandas.DataFrame.describe.html [いくつかの要約統計]を見てみましょう。 ` DataFrame.describe()+`関数。

特定のパラメーターを渡すことなく、 `+ DataFrame.describe()+`関数は数値データ型について次の情報を提供します:

Return What it means

count

Frequency count; the number of times something occurs

mean

The mean or average

std

The standard deviation, a numerical value used to indicate how widely data varies

min

The minimum or smallest number in the set

25%

25th percentile

50%

50th percentile

75%

75th percentile

max

The maximum or largest number in the set

Pythonに + ocscribe _)+`関数で `+ ocean_depths + DataFrameを呼び出して、この統計データを出力させましょう:

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と比較し、グループとして考えた場合に地球の海洋の平均深度と最大深度をより正確に把握できるようになりました。

欠損値の処理

多くの場合、データを操作するとき、値が欠落しています。 `+ pandas `パッケージは、http://pandas.pydata.org/pandas-docs/stable/missing_data.html [欠損データの処理]にさまざまな方法を提供します。これは、 ` null `データ、または何らかの理由で存在しません。 ` pandas `では、これはNAデータと呼ばれ、 ` NaN +`としてレンダリングされます。

+ DataFrame.dropnaを使用して、http://pandas.pydata.org/pandas-docs/stable/missing_data.html#dropping-axis-labels-with-missing-data-dropna [欠落値のドロップ]を調べます。 ()+ `関数とhttp://pandas.pydata.org/pandas-docs/stable/missing_data.html#filling-missing-values-fillna [欠損値の入力]と + 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)

印刷を呼び出すと、プログラムを実行したときに次の出力が表示されます。

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+」を使用してそれらのスペースを設定します。 必要に応じてフロートが使用されることに気付くでしょう。

この時点で、データを並べ替え、統計分析を行い、DataFramesの欠損値を処理できます。

結論

このチュートリアルでは、 `+ pandas `とPython 3を使用したデータ分析の入門情報について説明しました。 これで、 ` pandas `がインストールされ、 ` pandas +`内のSeriesおよびDataFramesデータ構造を操作できます。

Related