環境準備とライブラリインポート
データ分析に必要なPandasとその関連ライブラリをセットアップします。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 表示設定(オプション)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 1000)
主要なデータ構造:SeriesとDataFrame
これらのデータ構造は、データ操作の基盤となります。
Series
# リストから作成
seq_data = pd.Series([5, 10, 15, 20], name='サンプル')
# NumPy配列から作成
rand_seq = pd.Series(np.random.rand(4), index=['a', 'b', 'c', 'd'])
DataFrame
# 辞書リストから作成
emp_info = [
{'名前': '田中', '年齢': 27, '都市': '東京'},
{'名前': '佐藤', '年齢': 32, '都市': '大阪'}
]
df_emp = pd.DataFrame(emp_info)
# NumPy配列から作成
np_array = np.array([[1, 2], [3, 4]])
df_num = pd.DataFrame(np_array, columns=['A', 'B'], index=['行1', '行2'])
データの読み込みと書き出し
CSVファイルの読み込みと保存
# CSV読み込み
csv_df = pd.read_csv('sample.csv', encoding='utf-8')
# CSV書き出し
df_emp.to_csv('output.csv', index=False, encoding='utf-8')
データの確認と探索
# 最初の5行表示
print(df_emp.head())
# 基本情報
print(df_emp.info())
# 統計概要
print(df_emp.describe())
データ選択とフィルタリング
列選択
# 単一列選択
name_col = df_emp['名前']
# 複数列選択
basic_cols = df_emp[['名前', '年齢']]
条件による行選択
# 条件でフィルター
filtered_df = df_emp[df_emp['年齢'] > 30]
データクリーニング
欠損値処理
# 欠損値検出
missing_check = df_emp.isnull().sum()
# 欠損値補完
df_clean = df_emp.fillna({'年齢': df_emp['年齢'].mean()})
データ変換と再構成
データ型変換
# 文字列から数値への変換
df_emp['年齢'] = df_emp['年齢'].astype(int)
グループ化と集約
# 集約計算
grouped_df = df_emp.groupby('都市').agg({
'年齢': ['mean', 'max']
})
時間データの処理
# 日付範囲生成
date_range = pd.date_range(start='2025-01-01', periods=10, freq='D')
# 日付列追加
time_df = pd.DataFrame({'日付': date_range, '売上': np.random.randint(100, 200, size=10)})
time_df['日付'] = pd.to_datetime(time_df['日付'])
可視化
# 棒グラフ
time_df.plot(kind='bar', x='日付', y='売上', title='売上推移')
plt.show()