PythonでPandasライブラリを使用する

# Pandasとは何ですか
PythonのPandasライブラリは、データ操作において優れたサポートを提供するオープンソースのライブラリです。 それはまたPythonプログラミング言語のためのデータ分析と処理ツールの強力なセットです。 このライブラリはデータサイエンスアプリケーションの研究と開発の両方で広く使用されています。 このライブラリはDataFrameと呼ばれる別のデータ構造を使用します。 Pandasは、このデータ構造を使ってデータを処理するための多くの機能を提供します。 柔軟性と効率性により、Pandasは広く使用されるようになりました。

###なぜPandasのライブラリを使うのですか
- DataFrameは、データの操作と索引付けにおける柔軟性と効率性を提供します。
- それはメモリと多くのファイルフォーマットの間でデータを読み書きするためのツールです。例：csv、text、excel、sqlデータベース、hdf5。
- 不足しているデータを処理するスマートデータリンク。構造化フォームについてのごちゃごちゃしたデータを自動的に持ってくる。
- データのレイアウトを簡単に変更できます。
- 統合スライド、索引付け、大規模データセットのサブセット。
- データ列を追加または削除できます。
- group byを使用してデータを収集または変更すると、データセットに対して演算子を実行できます。
- データセットの混合と結合における高効率。
- データの次元インデックスは、高次元データと低次元データの操作に役立ちます。
- パフォーマンスの最適化。
- Pandasは学術と商業の両方で広く使われています。統計、貿易、分析、広告を含む。

# Pandasをインストールする
Pandasライブラリをインストールするには、ドキュメントに従っていくつかの異なる方法に従うことができます。

1. **pipを使う**：`pip install pandas`
2. **condaを使う**：`conda install pandas`

それではPythonのPandasライブラリの使い方を学びましょう。 しかし始める前に、[Pandasライブラリ](https://pandas.pydata.org/pandas-docs/stable/install.html)をインポートします。 [matplotlibライブラリ](https://matplotlib.org/users/installing.html)も使用したらインストールします。
`import pandas as pd`
`import matplotlib.pyplot as plt`
`import random`
# Pandasライブラリを使用してcsvのフォマットがあるファイルを読み込む
read_csv関数を使用してDataFrameを返すことで、csvのフォマットがあるファイルに簡単に読み込むことができます。 デフォルトでは、この関数はコンマ区切りのcsvのフォマットがあるファイルのフィールドを区別します。 次のように読み方はとても簡単です。
`dataset = pd.read_csv('./fer2013.csv')`
head関数を使ってDataFrameの最初のレコードを表示できます。 head関数の反対はtail関数です。
`dataset.head(5)`
表示される結果は以下のとおりです。
![Screenshot from 2019-03-24 18-47-16.png](https://qiita-image-store.s3.amazonaws.com/0/344186/27798b79-9b19-e8c0-5099-942a6479954e.png)
ただし、read_csv関数のいくつかのパラメータにも注意する必要があります。

- encoding：読み込みファイルのエンコーディングを指定します。 デフォルトはutf-8です。
- sep：列間の区切り記号を変更します。 デフォルトはカンマ（,）です。
- header：読み込んだファイルにヘッダがあるかどうかを指定します。 デフォルトはある。
- index_col：どの列インデックスがインデックスかを指定します。 デフォルトはNoneです。
- n_rows：読み込むレコード数を指定します。 デフォルトはNoneですべて読みます。

例えば、
`dataset = pd.read_csv('./fer2013.csv', encoding='utf-8', header=None, sep=',')`
`dataset.head(5)`
ヘッダを指定しないと、ヘッダ行が1つのデータレコードになりました。
![Screenshot from 2019-03-24 18-55-52.png](https://qiita-image-store.s3.amazonaws.com/0/344186/54b5d98d-f514-427e-2e84-3fff5814e586.png)

[ここ](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html)でパンダpythonライブラリの`read_csv`関数の各パラメータの完全な説明を見ることができます。
#PandasでDataframeを操作する
####Dataframeの情報を見る
`info（）`関数を使用して今読んだデータフレームの情報を表示することも、shape属性を使用してこのデータフレームのサイズを表示することもできます。 具体的には次のとおりです。
`# DataFrameのサイズを取得, shape[0]と同じ`
`print('Len:', len(dataset))`
`# 読んだDataFrameの情報を見る`
`dataset.info()`
`# DataFrameのサイズを見る`
`print('Shape:', dataset.shape)`

取得する結果は以下のとおりです。
![Screenshot from 2019-03-24 21-07-09.png](https://qiita-image-store.s3.amazonaws.com/0/344186/1b29ea43-ab04-d263-47a1-89b46bcd9531.png)
###データフレーム上のデータを取得する
######列名に従って1列取る

取得したい列を指定するには、単に次のように列名を渡します。
`dataset['emotion']`
![Screenshot from 2019-03-24 21-13-27.png](https://qiita-image-store.s3.amazonaws.com/0/344186/bf14b758-c0cc-d9cd-2364-d5bf021a53a2.png)
######複数の列を取り込む

文字列を渡す代わりに、列名のリストを渡します。 略して最初の5レコードだけをプリントアウトするために`head（5）`を追加しました。デフォルトでは全部で取得する。
`dataset[['emotion', 'pixels']].head(5)`
![Screenshot from 2019-03-24 21-18-08.png](https://qiita-image-store.s3.amazonaws.com/0/344186/c2f91dfd-7ed5-118f-bcf3-db5fd2ef5d0c.png)
######インデックスの通りレコードを取得する
DataFrameの連続した1つ以上のレコードを取得するには、Pythonのリストのようにインデックスベースのスライダーメカニズムを使用します。 最初の5レコードを取得する。
`dataset [0：5]`
![Screenshot from 2019-03-24 21-26-00.png](https://qiita-image-store.s3.amazonaws.com/0/344186/bfae436c-8a95-9ebe-ff8b-a2d0a397acd2.png)
この場合、結果は上記のhead関数と同じです。 
目的の行と列を取得することもできます。
`dataset ['emotion', 'pixels'][:5]`
![Screenshot from 2019-03-24 21-18-08.png](https://qiita-image-store.s3.amazonaws.com/0/344186/61298069-7417-ab2a-1df8-198efcf5c1ae.png)
######条件でレコードを取得する
利用がトレーニングがある情報を含むすべてのレコードを取得する。
`trainingData = dataset[dataset['Usage'] == 'Training']`
`trainingData.head(5)`
![Screenshot from 2019-03-24 21-18-08.png](https://qiita-image-store.s3.amazonaws.com/0/344186/ece5b233-c70e-9882-4f6f-a1189aef6551.png)
#####NumpyのArrayの戻り値を取得する

戻り列の値をPythonライブラリのNumpyのArray配列として取得するには、単純に後で`.values`を追加します。次に例を示します。
`trainingData['emotion'].head(5).values`
得られる出力は次のとおりです。
![Screenshot from 2019-03-24 21-35-58.png](https://qiita-image-store.s3.amazonaws.com/0/344186/539d1f6b-87d4-ed02-5475-37e16e1f19fc.png)
###DataFrameのデータ表現
機械学習では、データの実行と分類が非常に重要です。コンピュータビジョンに関する基本的なデータ表現をいくつか示します。
[matplotlibライブラリ](https://matplotlib.org/users/installing.html)も使用する。
#####クラスのデータ量を示すグラフを描く
`trainingData['emotion'].value_counts().plot(kind='bar')`
`plt.show()`
表示される結果
![Screenshot from 2019-03-24 21-51-14.png](https://qiita-image-store.s3.amazonaws.com/0/344186/a54565c4-ac5b-7774-0f39-2fd285d0ac68.png)
#####最初の7つのデータの絵を描く
![Screenshot from 2019-03-24 21-48-26.png](https://qiita-image-store.s3.amazonaws.com/0/344186/d55429c0-9d71-1056-39ee-dbb2c0e19d67.png)
表示される結果
![Screenshot from 2019-03-24 21-51-28.png](https://qiita-image-store.s3.amazonaws.com/0/344186/df7e566d-5261-49a6-85d0-ee78648ae77c.png)
#####最後の7つのデータの絵を描く
![Screenshot from 2019-03-24 21-48-50.png](https://qiita-image-store.s3.amazonaws.com/0/344186/861ca838-d942-b307-c3d1-c57fd8f25ba7.png)
表示される結果
![Screenshot from 2019-03-24 21-51-44.png](https://qiita-image-store.s3.amazonaws.com/0/344186/6eee02df-e3da-eae8-0318-9ae281af3b97.png)
#####最初の7層のデータの絵を描く
![Screenshot from 2019-03-24 21-49-09.png](https://qiita-image-store.s3.amazonaws.com/0/344186/b3e6ab22-66af-0d1c-7a3b-c5c9e24c2251.png)
表示される結果
![Screenshot from 2019-03-24 21-51-57.png](https://qiita-image-store.s3.amazonaws.com/0/344186/d7401440-e939-ce6e-0de7-3c39365a4343.png)
#####ランダムに7データレイヤー1の絵を描く
![Screenshot from 2019-03-24 21-49-24.png](https://qiita-image-store.s3.amazonaws.com/0/344186/cf0d177d-dcda-dff0-1131-46dfe4f4f637.png)
表示される結果
![Screenshot from 2019-03-24 21-52-22.png](https://qiita-image-store.s3.amazonaws.com/0/344186/304aa35c-5614-86a2-fed1-3617fcaf5b08.png)
#結論
Pandasのライブラリについていろいろな面白いことがありますが以上で基本的な内容をせつめいしました。他にはドキュメントで自分で調べることができます。
読んでいただきありがとうございます、あなたが理解できない何かがあれば、私にメールで連絡してください。データセットとでGoogle Colab使ったソースコードの詳細は以下のリンクで見てください。[Google Colabをわからない場合私はこれを紹介した記事](https://qiita.com/hungph_dev_ict/items/0a49c3777ff5170e120e)を見ることができます。
Email: hungph.dev.ict@gmail.com
記事で使ったデータセット: https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge
Google Colab: https://colab.research.google.com/drive/1Ehh-s7ZnvurGhVYo9u8atKBlJvmtTzSX