【超簡単】Pythonライブラリ「Pandas」の基本的な使い方

<h2>【はじめに】</h2>
PandasはPythonで利用できる、データ解析のためのライブラリです。
<ul>
 	<li>データの読み込みや統計量の表示</li>
 	<li>データのグラフ化</li>
 	<li>データ分析</li>
</ul>
などを行う際に頻繁に使用するコードが集められています。

https://pandas.pydata.org/docs/reference

今回は、誰でもpandasを使いこなすための第一歩として基本的な使い方を紹介します。
※一部違うライブラリを使用する場面があります。
### 本記事の内容
- pandasをインポートする
- CSVファイルを読み込む
- データ型を確認する
- データフレームの情報を取得する
- 統計量を取得する
- グループごとに集計する
- データを並べ替える
- グラフ化する

### 【pandasをインポートする】

```Python
import pandas as pd
```

<b>ポイント</b>

<code>as pd</code>として読み込むことでpandasを「pd」として使用することができます。
## 【CSVファイルを読み込む】
「1920年から2015年までの全国の人口推移のデータ」を使用します。

私のGitHubに「data.csv」としてアップロードしてあるので、下記コマンドでダウンロードすれば簡単に準備できます。
<pre><code>$ curl https://raw.githubusercontent.com/nakachan-ing/python-references/master/Pandas/data.csv -O
</code></pre>

```Python
df = pd.read_csv('data.csv', encoding='shift-jis')
df
```

<a href="https://gyazo.com/f1cbf87de1f52aef585e43ad450eb348"><img src="https://i.gyazo.com/f1cbf87de1f52aef585e43ad450eb348.png" alt="Image from Gyazo" /></a>

<b>ポイント</b>
<ul>
 	<li><code>pd.read_csv('csvファイル名', encoding='文字コード')</code></li>
 	<li><code>encoding</code>オプションを指定しないと次のようなエラーが発生することがあります。</li>
</ul>
<pre><code>UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte
</code></pre>
<h2>【データ型を確認する】</h2>
<pre><code>type(df)

&gt;&gt;pandas.core.frame.DataFrame
</code></pre>
<b>ポイント</b>
<ul>
 	<li><code>type()</code>でデータ型を確認することができます。</li>
 	<li>pandasのデータ型には、今回読み込んだようなデータフレーム（DataFrame）とシリーズ（Series）があります。</li>
 	<li>データフレームは、Excel形式のように行（index）と列（column）で成り立っています。</li>
 	<li>シリーズはデータフレームから一列だけ取り出したものです。</li>
</ul>
<h2>【データフレームの情報を取得する】</h2>
<pre><code>df.info()

&gt;&gt;
&lt;class 'pandas.core.frame.DataFrame'&gt;
RangeIndex: 939 entries, 0 to 938
Data columns (total 8 columns):
 #   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  
 0   都道府県コード  939 non-null    int64  
 1   都道府県名    939 non-null    object 
 2   元号       939 non-null    object 
 3   和暦（年）    939 non-null    float64
 4   西暦（年）    939 non-null    float64
 5   人口（総数）   939 non-null    int64  
 6   人口（男）    939 non-null    int64  
 7   人口（女）    939 non-null    int64  
dtypes: float64(2), int64(4), object(2)
memory usage: 58.8+ KB
</code></pre>
<b>ポイント</b>

<code>info()</code>でデータフレームの情報を取得することができます。
<h2>【統計量を取得する】</h2>
<pre><code>df.describe()
</code></pre>
<a href="https://gyazo.com/0cd7b17b3700e83d3c8e7ee57495cf0c"><img src="https://i.gyazo.com/0cd7b17b3700e83d3c8e7ee57495cf0c.png" alt="Image from Gyazo" /></a>

<b>ポイント</b>

<code>describe()</code>で統計量を取得することができます。
<ul>
 	<li>count:数量</li>
 	<li>mean:平均</li>
 	<li>std:標準偏差</li>
 	<li>min:最小値</li>
 	<li>25%:1/4分位数</li>
 	<li>50%:中央値(median)</li>
 	<li>75%:3/4分位数</li>
 	<li>max:最大値</li>
</ul>
<pre><code>df.describe().round(0)
</code></pre>
<a href="https://gyazo.com/e3251a9a4d145a5293380751ab619f63"><img src="https://i.gyazo.com/e3251a9a4d145a5293380751ab619f63.png" alt="Image from Gyazo" /></a>

<code>round()</code>を使用することで、桁数を指定して数値の切り捨て／切り上げをすることができます。
<h2>【グループごとに集計する】</h2>
<pre><code># データフレームの先頭5行を表示
df.head()
</code></pre>
<a href="https://gyazo.com/ed416077eda5a2f4db290637def1d89c"><img src="https://i.gyazo.com/ed416077eda5a2f4db290637def1d89c.png" alt="Image from Gyazo" /></a>
<pre><code>df_mean = df.groupby(by='都道府県名').mean()[['人口（総数）', '人口（男）', '人口（女）']].round(0)
df_mean.head(10)
</code></pre>
<a href="https://gyazo.com/5e6bb758e523bb4a7c6d8149839e0b9a"><img src="https://i.gyazo.com/5e6bb758e523bb4a7c6d8149839e0b9a.png" alt="Image from Gyazo" /></a>

<b>ポイント</b>
<ul>
 	<li><code>groupby(by='グループ分けしたいcolumn')</code>でグループ分けすることができます。</li>
 	<li><code>mean()</code>の後に<code>[平均を算出したい対象]</code>を指定することができます。</li>
 	<li>複数の対象を指定する場合は<code>[ [リスト型] ]</code>にします。</li>
</ul>
<h2>【データを並べ替える】</h2>
<pre><code>df_mean.sort_values(by='人口（総数）', ascending=False).head(10)
</code></pre>
<a href="https://gyazo.com/1747619f145f07f130818a3e65933ef1"><img src="https://i.gyazo.com/1747619f145f07f130818a3e65933ef1.png" alt="Image from Gyazo" /></a>

<b>ポイント</b>
<ul>
 	<li><code>sort_values(by='並び替えたいcolumn', ascending=True or False)</code>でデータを並べ替えることができます。</li>
 	<li><code>ascending</code>オプションに<code>True</code>を指定すると「昇順」、<code>False</code>を指定すると「降順」に並び替えます。</li>
</ul>
<h2>【グラフ化する】</h2>
可視化のための「matplotlib」と日本語を表示させるための「japanize_matplotlib」をインポートします。
<pre><code>import matplotlib.pyplot as plt
%matplotlib inline
import japanize_matplotlib
</code></pre>
<b>ポイント</b>

「japanize_matplotlib」のインポートでエラーが発生した場合、PCにライブラリのインストール自体がまだできていない可能性があります。

<code>!pip install japanize-matplotlib</code>でインストール後に再度インポートをします。
<pre><code># 「都道府県」が「東京都」のデータのみを抽出
df_tokyo = df[df['都道府県名']=='東京都']
df_tokyo
</code></pre>
<a href="https://gyazo.com/b9b3609071eeee7446ac4b58a438f54b"><img src="https://i.gyazo.com/b9b3609071eeee7446ac4b58a438f54b.png" alt="Image from Gyazo" /></a>
<pre><code># 東京都の「人口（男）」, 「人口（女）」のデータを抽出
df_tokyo = df_tokyo[['人口（男）', '人口（女）']]
df_tokyo
</code></pre>
<a href="https://gyazo.com/e42a9f92a2ca21f2be8ee4f44d540f4f"><img src="https://i.gyazo.com/e42a9f92a2ca21f2be8ee4f44d540f4f.png" alt="Image from Gyazo" /></a>
<pre><code># 東京都の人口（男）、（女）の推移をグラフ化
df_tokyo.plot(color=['skyblue', 'pink'])
</code></pre>
<a href="https://gyazo.com/03c2d33aabbb2b1d863cd54279f26ea1"><img src="https://i.gyazo.com/03c2d33aabbb2b1d863cd54279f26ea1.png" alt="Image from Gyazo" /></a>

<b>ポイント</b>

<code>plot()</code>の中に引数として<code>kind</code>に<code>bar</code>を指定すると棒グラフを表示することができます。
<pre><code>df_tokyo.plot(kind='bar', color=['skyblue', 'pink'])
</code></pre>
<a href="https://gyazo.com/03a8f636c8a61c5a85c5693d249414b8"><img src="https://i.gyazo.com/03a8f636c8a61c5a85c5693d249414b8.png" alt="Image from Gyazo" /></a>
<h2>【おわりに】</h2>
今回は、Pandasの基本的な使い方を紹介しました。他にも様々な関数が用意されています。

特に機械学習に興味のある方は、Pandasを利用すると、効率的に進めることができます。
これからも、Pythonのライブラリや関数の使い方について紹介していきます。
今回、使用したCSVファイルやJupyter NotebookはGitHubに公開しています。
参考にして見てください。

https://github.com/nakachan-ing/python-references/tree/master/Pandas