Pandasメモ


Pythonの学習でPandas関連の内容があった場合は、随時更新していく予定。

# Pandas
データ解析を支援する機能を提供するライブラリ


----

#### インポート

```python:
import pandas as pd
```

#### データの取り込み

##### CSV の読み込み ［read_csv］

```python:
csv_test_1 = pd.read_csv('hoge.csv')
warking_master = pd.read_csv(path, encoding="SHIFT-JIS")

※以下のエラーとなった場合は、encoding を設定して対応する。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte
```


##### Excel の読み込み ［read_excel］

```python:
excel_data = pd.read_excel('hoge.xlsx')
```

#### データの結合（ユニオン）

##### データの縦結合　［concat］

```python:
csv_test_2 = pd.read_csv('hoge_2.csv')
csv_test = pd.concat([csv_test_1 , csv_test_2], ignore_index=True)
csv_test.head()
```

##### データの結合 LEFT JOIN　［merge］

・結合する両テーブルの項目名が同じ場合。```on="id"```を条件に結合。

```結合後テーブル = pd.merge(テーブル１, テーブル２, on="結合項目", how="方法")```

```python:
join_data = pd.merge(a_data, b_data[["id", "date", "customer"]], on="id", how="left")
join_data.head()
```

・結合する両テーブルの項目名が異なる場合。```left_on="customer_name", right_on="顧客名""```を条件に結合。

```python:
pd.merge(a_data, b_data, left_on="customer_name", right_on="顧客名", how="left")
```

#### データの確認

##### ユニークなデータの取得　[pd.unique(データ)]

```python:
pd.unique(test_data.item_name))
len(pd.unique(test_data.item_name))) # ユニークデータの個数
```

#### 日付の操作

##### ａ列の値をdatetime型に変換　[to_datetime()]

```python:
test_data["a"] = pd.to_datetime(test_data["a"])
```

##### 日付の抽出　[dt]
##### 日付のフォーマット　[dt.strftime("%Y%m")]

```python:
time_data["payment_month"] = time_data["payment_date"].dt.strftime("%Y%m")
```



#### ピボットテーブル

##### ピボットテーブルを作成する　[pd.pivot_table]

```python:
pd.pivot_table(test_data, index='item_name', columns='payment_month', values=['price', 'quantity'], aggfunc='sum')
```
**・pivot_table 概要**
index　：　行を指定
columns：　列を指定
values　：　集計する値を指定
aggfunc：　集計方法を指定


----

### Pandasの内容ではないので後別だしで整理

#### データの表示

##### 表示　［print］

```python:
print(len(test_data))  # データ件数を表示する
```

##### データの先頭の5行を表示　［head］

```python:
csv_test_1.head()
```

##### データの列を指定して、先頭の5行を表示　［head］

```python:
csv_test_1["列名"].head()
```
#### データの操作

##### .loc関数でデータを抽出する　[.loc(条件, 取得する列)]

```python:
res = test_data.loc[flg_is_null, "item_name"]
```

#### データ列の作成

##### aとbを掛け合わせた値を、追加列の new に設定する

```python:
test_data["new"] = test_data["a"] * test_data["b"]
```

#### データの計算

##### ａ列を合計する　［列.sum()］

```python:
test_data["a"].sum()
```

##### 指定したグループで集計　［groupby("列").sum("列")］

```python:
test_data.groupby("create_date").sum()["price"]
```

##### 指定したグループで集計（複数指定）　［groupby("列").sum("列")］

```python:
test_data.groupby(["create_date", "item_name"]).sum()[["price", "quantity"]]
```

#### データの比較

##### ａ列の合計とｂ列の合計を比較し、結果をTRUE/FALSEで表示する

```python:
test_data["a"].sum() == test_data["b"].sum()
```

##### 欠損値の確認、列ごとにnullをTRUE/FALSEで返し、sumで合計している

```python:
test_data.isnull().sum()
```

##### 欠損値の確認　列ごとに欠損値の有無をTRUE/FALSEで返す

```python:
test_data.isnull().any(axis=0)
```

##### 各種統計量の出力　[describe()]

```python:
test_data.describe()
```

##### 指定した列の最大、最小値　[max(), min()]

```python:
test_data["create_date"].min()
test_data["create_date"].max()
```

##### データ型の確認　[dtypes]

```python:
test_data.dtypes
```

・describe() で、以下の各種統計量を表示できる。
　データ件数（count）、平均値（mean）、標準偏差（std）、最小値（min）、四分位数（25%,75%）、中央値（50%）、最大値（max）


# NetworkX

ネットワーク可視化に有用なライブラリ

#### 簡単な利用

頂点（nodeA,nodeB,nodeC）とそれをつなぐ辺を設定し、それを matplotlib の show で表示している。

```python:
import networkx as nx
import matplotlib.pyplot as plt

# グラフオブジェクトの作成
G=nx.Graph()

# 頂点の設定
G.add_node("nodeA")
G.add_node("nodeB")
G.add_node("nodeC")

# 辺の設定
G.add_edge("nodeA","nodeB")
G.add_edge("nodeA","nodeC")
G.add_edge("nodeB","nodeC")

# 座標の設定
pos={}
pos["nodeA"]=(0,0)
pos["nodeB"]=(1,1)
pos["nodeC"]=(0,1)

# 描画
nx.draw(G,pos)

# 表示
plt.show()
```

# 最適化計算ライブラリ

・anaconda で pulp をインストールを選択できない場合。コマンドでインストールを実行する。

・ortoolpy は conda コマンドではなく、pip コマンドでのインストールで実行する。

```python:
conda install -c conda-forge pulp

pip install ortoolpy
```

----

作業メモ
・データのクレンジング

データ加工：Pandas
可視化：Matplotlib
機械学習：scikit-learn