Pandas入門～データ分析～【Python】

はじめに
---
Pandasは、Pythonでデータ分析を行うための非常に便利なライブラリです。
データの操作や分析を簡単にするための機能が豊富に揃っており、特にデータフレーム（表形式のデータ構造）の扱いに優れています。

インストール
---
```
pip install pandas
```

基本概念
---
`Series`: 一次元のデータ（リストや配列に似たもの）
`DataFrame`: 二次元のデータ（表形式のデータ）

Seriesの基本操作
---
``` .Seriesの作成
import pandas as pd

# リストからSeriesを作成
data = [10, 20, 30, 40]
s = pd.Series(data)
print(s)
```

``` .インデックスの指定
# インデックスを指定してSeriesを作成
s = pd.Series(data, index=['a', 'b', 'c', 'd'])
print(s)
```

``` .基本操作
# 特定のインデックスの値にアクセス
print(s['b'])  # 出力: 20

# Seriesの要素に演算を適用
print(s + 10)  # 出力: a    20
              #         b    30
              #         c    40
              #         d    50
```

DataFrameの基本操作
---
``` .DataFrameの作成
# 辞書からDataFrameを作成
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
print(df)
```

``` .データの選択とフィルタリング
# 列の選択
print(df['Name'])

# 行の選択（インデックスで選択）
print(df.loc[1])  # 出力: Name       Bob
                 #         Age        30
                 #         City  Los Angeles

# 条件に基づくフィルタリング
print(df[df['Age'] > 28])  # 出力: Name   Age         City
                           #         Bob    30  Los Angeles
                           #         Charlie  35      Chicago
```

``` .データの集計
# 基本統計量の取得
print(df.describe())

# 特定の列でグループ化して集計
print(df.groupby('City').mean())  # この例では平均年齢を計算
```

データの入出力
---
``` 
# CSVファイルの読み込み
df = pd.read_csv('data.csv')

# CSVファイルへの書き込み
df.to_csv('output.csv', index=False)
```

データの前処理
---
``` .欠損値の処理
# 欠損値の確認
print(df.isnull().sum())

# 欠損値の削除
df_cleaned = df.dropna()

# 欠損値の補完
df_filled = df.fillna(value='Unknown')
```

``` .データの変換
# データ型の変換
df['Age'] = df['Age'].astype(float)
```

時系列データの操作
---
``` .日時データの作成と操作
# 日時データの作成
dates = pd.date_range(start='2023-01-01', periods=5, freq='D')
df_dates = pd.DataFrame({'Date': dates, 'Value': [10, 20, 30, 40, 50]})
print(df_dates)

# 日時データのインデックス設定
df_dates.set_index('Date', inplace=True)
print(df_dates)

# 日時データの抽出
print(df_dates.loc['2023-01-03'])  # 出力: Value    30
```

``` .データのリサンプリング（例えば、日単位から月単位へ）
df_resampled = df_dates.resample('M').sum()
print(df_resampled)
```

``` .データフレームの結合（列を追加）
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']})
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Age': [25, 30, 35]})
df_merged = pd.merge(df1, df2, on='ID')
print(df_merged)
```

``` .データフレームの連結（行を追加）
df3 = pd.DataFrame({'ID': [4, 5], 'Name': ['David', 'Eva'], 'Age': [40, 45]})
df_concat = pd.concat([df_merged, df3], ignore_index=True)
print(df_concat)
```

``` .ピボットテーブルの作成
df_pivot = pd.DataFrame({
    'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
    'Category': ['A', 'B', 'A', 'B'],
    'Value': [10, 20, 30, 40]
})
pivot_table = pd.pivot_table(df_pivot, values='Value', index='Date', columns='Category', aggfunc='sum')
print(pivot_table)
```

``` .クロス集計の作成
cross_tab = pd.crosstab(df_pivot['Category'], df_pivot['Date'], values=df_pivot['Value'], aggfunc='sum')
print(cross_tab)
```

可視化
---
Pandasには、簡単なデータ可視化機能も含まれていますが、matplotlibやseabornなどのライブラリと組み合わせて使うことが多いです。
```
import matplotlib.pyplot as plt

# データフレームをプロット
df_dates['Value'].plot(kind='line')
plt.title('Value Over Time')
plt.xlabel('Date')
plt.ylabel('Value')
plt.show()
```

データのクリーニングと前処理
---

``` .重複行を削除
df_unique = df.drop_duplicates()
print(df_unique)
```

``` .データの変換と標準化
# 列のデータ型変換
df['Age'] = df['Age'].astype(float)

# データの標準化（平均0、標準偏差1に変換）
df['Age_standardized'] = (df['Age'] - df['Age'].mean()) / df['Age'].std()
print(df)
```

まとめ
---
Pandasは、Pythonでデータ分析を効率的に行うための強力なライブラリです。
Series（一次元データ）とDataFrame（二次元データ）を使ってデータの操作、集計、前処理を簡単に行えます。
基本的な操作として、データの作成、選択、フィルタリング、集計、リサンプリング、結合、ピボットテーブルの作成が可能です。さらに、データの可視化もサポートしており、分析結果を視覚的に確認することができます。