機械学習入門 vol.4 表（Pandas）の基本操作

本コンテンツは機械学習入門講座を各所でやっている内容の一部を、受講者の皆様の予習・復習のために公開しているものです。対象読者は、Pythonをやったことがほとんどない方やつまづいてしまっている方でも概ね実行できるようになるレベルで書いています。解説は講座でそれなりに詳しくしているため、コードにコメントする以上の説明はあまり記述していません。

各コードはJupyterシリーズやiPythonで記述しながら実行できるように記述しています。

AI/DX/機械学習/Pythonのアドバイザリー、社内研修、セミナー等承っております。
webサイトからお問い合わせください。
[BeeComb Grid株式会社](https://beecomb-grid.co.jp/)

# 機械学習入門シリーズ記事

1. [機械学習入門 vol.1 Pythonの基礎１ 記述とデータ型](https://qiita.com/mychaelstyle/items/500f67b01fda79c215d0) -> 講座第3回に相当
1. [機械学習入門 vol.2 Pythonの基礎2 条件分岐と処理](https://qiita.com/mychaelstyle/items/891dcad83e94f8edd3aa) -> 講座第3回に相当
1. [機械学習入門 vol.3 Pythonの基礎3 関数・クラス・モジュール](https://qiita.com/mychaelstyle/items/d5506f372219b162c8c8) -> 講座第3回に相当
1. 機械学習入門 vol.4 表（Pandas）の基本操作 -> 講座第3回/第4回に相当
1. [機械学習入門 vol.5 グラフ(Seaborn)の基本操作](https://qiita.com/mychaelstyle/items/5acf7fdb1f11ba5478d1) -> 講座第3/4回に相当
1. [機械学習入門 vol.6 回帰 - 線形回帰](https://qiita.com/mychaelstyle/items/a12882a75d348952b1b9) -> 講座第4回に相当
1. [機械学習入門 vol.7 回帰 - ランダムフォレストとパラメータチューニング](https://qiita.com/mychaelstyle/items/48238d70c7602ca14a0c) -> 講座第4回に相当
1. [機械学習入門 vol.8 回帰 - その他の回帰 (k近傍法,ラッソ回帰,リッジ回帰..etc)](https://qiita.com/mychaelstyle/items/fc51cf384b517fb405f8) -> 講座第4回に相当
1. [機械学習入門 vol.9 判別（分類）](https://qiita.com/mychaelstyle/items/34ca447a625c752dbfda) -> 講座第5回に相当
1. [機械学習入門 vol.10 次元削減](https://qiita.com/mychaelstyle/items/69aab0c098dfa1e19e7d) -> 講座第6回に相当
1. [機械学習入門 vol.11 クラスタリング](https://qiita.com/mychaelstyle/items/89d04ce33c3e05d9545c) -> 講座第6回に相当

# 機械学習入門 vol.4 表（Pandas）の基本操作

## Pandas

https://pandas.pydata.org/

世界でもっとも利用されているオープンソースのPythonのデータ操作ライブラリです。表や時系列のデータ構造と、それらを簡単に操作できるための機能を提供しています。

ここでは、初期で、また機械学習に流し込むためのデータ整備でこれくらい知ってればとりあえずできるだろうという操作をまとめています。

## データの読み込み

Pandasはデータソースからデータを読み込んで操作するという手順を踏むことになるため、データを各所から読み込む方法は最低限マスターする必要があります。

本ページのプログラムは、プログラム実行ファイルと同じフォルダに下記データファイルが保存されていることを前提として書いています。ダウンロードしてご利用ください。

[data.xlsx](https://docs.google.com/spreadsheets/d/1HZacWBy9WnFYkKd0HJQdno_Pmx1cGibm/edit?usp=sharing&ouid=106210867555036201160&rtpof=true&sd=true)
[data.csv](https://drive.google.com/file/d/1ntEMB0tTxJ4fu2wTxVoi4SRb8TR56xYi/view?usp=sharing)


```python
# データの読み込み
import pandas as pd
df_csv = pd.read_csv("./data.csv")
# Excelファイルの読み込み
import pandas as pd
df_excel = pd.read_excel("./data.xlsx", sheet_name="データ")
```

データベースから読み込むには下記のように書くことができます。ここはそのまま実行できません。データベースが存在して接続できる必要があります。

```python
# データベースのSQLのSELECT結果を読み込み(DB接続は別資料をご覧ください。）
import pandas as pd
query = "select * from dbname.tablename"
df = pd.read_sql( query, con = [データベース接続] )
```
関連して、データベースの接続には、データベースの種類ごとに利用するライブラリは異なります。また、接続するためにはPythonのライブラリとは別途、各データベース製品への接続クライアントのインストールが必要です。ここでは各クライアントのインストールは説明しませんが、mysql/postgresqlの場合はインストールされていれば以下のように接続できます。

```python
# mysqlの接続
import MySQLdb
connection = MySQLdb.connect( \
    host='接続先ホスト', user='接続ユーザ', passwd='パスワード',db='データベース名')
# mysql切断
connection.close()

# postgresqlの接続
import psycopg2
connection = psycopg2.connect(\
    "host=ホスト名 port=ポート番号 dbname=データベース名 user=ユーザ名 password=パスワード")
# postgresql切断
connection.close()
```

## データの保存

整形したデータや結果を保存するにはExcelやCSVが便利です。データベースにも保存できますが、ここでは説明しません。

```python
# CSVファイルへ保存
df.to_csv("./data_example.csv", quoting=csv.QUOTE_ALL )
# Excelシートへ保存
df.to_excel("data_example.xlsx", sheet_name="データ")
```

## 列計算と型変換

Pandasでは列と列や行と行を四則演算子で計算してデータフレームのシリーズとして作成する機能があります。下記のように演算子したり、データ型を変更したりすることができます。

```python
# 列計算
df["合計"] = df["国語"] + df["算数"]
# 型変換
df["合計"] = df["合計"].astype("float")
# 四捨五入
df["合計"] = df["合計"].round(1)
```

## 行・列操作

データ整形の際の必須スキルとして、列や行を変更したり並べ替えたり削除したりする方法を知っておきましょう。以下のdf1〜df9をプリントして表示してみましょう。

```python
## 削除
df = df.drop("合憲点数", axis=1)  # 列の削除
df1 = df.drop(10, axis=0) # 10行目の削除
# 列の取り出し（合計の列）
df2 = df["合計"]
# 行の取り出し（5行目から20行目まで）
df3 = df[5:20]
# 部分取り出し
df4 = df.loc[5:20,"国語":"社会"]
# ラベル・インデックスの順番変更
df5 = df.reindex(columns=["国語","算数","理科","社会"],index=[10,1,5,3,2])
# 昇順降順並べ替え（行）
df6 = df.sort_values(["国語","算数"], ascending=True)
# 列ラベル変更
df7 = df.rename(columns={"合憲点数":"合計点数"})
# 「組」列が1の行だけ取り出し
df8 = df[df[‘クラス’]==1]
#「国語」が50点以上の行だけ取り出し
df9 = df[df["国語"]>=50]
```

## 変換

データフレームからシリーズや転置データへの変換方法を覚えておきましょう。

```python
# 行と列の転置変換
revdf = df.T
# データフレームの指定列を配列で取り出し
array = df["国語"].values
# 全てを多次元配列に変換
array = df.values
# 配列の転置変換
rev = values.T
```

# 集計

基本的な集計機能を覚えておきましょう。

```python
# 合計
df[列名または行範囲].sum(numeric_only=True, axis=0/1)
# 平均
df[列名または行範囲].mean(numeric_only=True, axis=0/1)
# 中央値
df[列名または行範囲].median(numeric_only=True, axis=0/1)
# 最大値
df[列名または行範囲].max(numeric_only=True, axis=0/1)
# 最小値
df[列名または行範囲].min(numeric_only=True, axis=0/1)
# データ数
df[列名または行範囲].count(numeric_only=True, axis=0/1)
# 標準偏差
df[列名または行範囲].std(numeric_only=True, axis=0/1)
# 分散
df[列名または行範囲].var(numeric_only=True, axis=0/1)
```

Pandasについてはこれくらいできればとりあえず最低限のデータ分析や機械学習を行うことができると思います。
次回はグラフの表示です。

# 機械学習入門シリーズ記事

1. [機械学習入門 vol.1 Pythonの基礎１ 記述とデータ型](https://qiita.com/mychaelstyle/items/500f67b01fda79c215d0) -> 講座第3回に相当
1. [機械学習入門 vol.2 Pythonの基礎2 条件分岐と処理](https://qiita.com/mychaelstyle/items/891dcad83e94f8edd3aa) -> 講座第3回に相当
1. [機械学習入門 vol.3 Pythonの基礎3 関数・クラス・モジュール](https://qiita.com/mychaelstyle/items/d5506f372219b162c8c8) -> 講座第3回に相当
1. 機械学習入門 vol.4 表（Pandas）の基本操作 -> 講座第3回/第4回に相当
1. [機械学習入門 vol.5 グラフ(Seaborn)の基本操作](https://qiita.com/mychaelstyle/items/5acf7fdb1f11ba5478d1) -> 講座第3/4回に相当
1. [機械学習入門 vol.6 回帰 - 線形回帰](https://qiita.com/mychaelstyle/items/a12882a75d348952b1b9) -> 講座第4回に相当
1. [機械学習入門 vol.7 回帰 - ランダムフォレストとパラメータチューニング](https://qiita.com/mychaelstyle/items/48238d70c7602ca14a0c) -> 講座第4回に相当
1. [機械学習入門 vol.8 回帰 - その他の回帰 (k近傍法,ラッソ回帰,リッジ回帰..etc)](https://qiita.com/mychaelstyle/items/fc51cf384b517fb405f8) -> 講座第4回に相当
1. [機械学習入門 vol.9 判別（分類）](https://qiita.com/mychaelstyle/items/34ca447a625c752dbfda) -> 講座第5回に相当
1. [機械学習入門 vol.10 次元削減](https://qiita.com/mychaelstyle/items/69aab0c098dfa1e19e7d) -> 講座第6回に相当
1. [機械学習入門 vol.11 クラスタリング](https://qiita.com/mychaelstyle/items/89d04ce33c3e05d9545c) -> 講座第6回に相当

AI/DX/機械学習/Pythonのアドバイザリー、社内研修、セミナー等承っております。
webサイトからお問い合わせください。
[BeeComb Grid株式会社](https://beecomb-grid.co.jp/)