データ分析は、ビジネスの意思決定からAI開発まで幅広い領域で活用されています。Pythonはその中心的な言語であり、豊富なライブラリにより、初心者でも簡単にデータ分析を始められます。

💡 この記事のポイント

pandas + NumPy + Matplotlib の3つのライブラリだけで、データの読み込み、加工、可視化まで一通りの分析が可能です。

1. なぜPythonでデータ分析か

  • 豊富なライブラリ:pandas、NumPy、scikit-learn、TensorFlowなど
  • コミュニティ:Stack Overflowでの質問数No.1
  • 可読性:コードが読みやすく、学習コストが低い
  • Jupyter Notebook:インタラクティブな分析環境

2. 環境構築

# Pythonのインストール(推奨: 3.11以上)
# Anaconda推奨だが、pipでも可

# 仮想環境の作成
python -m venv data-env
source data-env/bin/activate  # macOS/Linux
# data-env\Scripts\activate   # Windows

# 必要なライブラリのインストール
pip install pandas numpy matplotlib seaborn jupyter

# Jupyter Notebookの起動
jupyter notebook

3. pandasの基本操作

pandasは表形式データの操作に特化したライブラリです。

import pandas as pd

# CSVの読み込み
df = pd.read_csv('sales_data.csv')

# データの概要確認
print(df.shape)          # (行数, 列数)
print(df.info())          # データ型の確認
print(df.describe())      # 統計量の要約
print(df.head(10))        # 先頭10行

# 列の選択
revenue = df['revenue']
subset = df[['product', 'revenue', 'quantity']]

# フィルタリング
high_revenue = df[df['revenue'] > 100000]
tokyo_data = df[df['region'] == '東京']

# グループ化と集計
monthly_sales = df.groupby('month')['revenue'].agg(['sum', 'mean', 'count'])

# 新しい列の追加
df['profit_rate'] = (df['revenue'] - df['cost']) / df['revenue'] * 100

# 欠損値の処理
df['price'].fillna(df['price'].median(), inplace=True)
df.dropna(subset=['product_name'], inplace=True)

# ソート
df_sorted = df.sort_values('revenue', ascending=False)
広告

4. NumPyで数値計算

import numpy as np

# 配列の作成
arr = np.array([1, 2, 3, 4, 5])
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 統計計算
print(f"平均: {np.mean(arr)}")       # 3.0
print(f"標準偏差: {np.std(arr)}")     # 1.414
print(f"中央値: {np.median(arr)}")    # 3.0
print(f"最大値: {np.max(arr)}")       # 5

# ベクトル演算(ループ不要で高速)
prices = np.array([100, 200, 300, 400, 500])
tax_included = prices * 1.10  # 全要素に一括演算

# 乱数生成
rng = np.random.default_rng(42)
random_data = rng.normal(loc=50, scale=10, size=1000)  # 正規分布

5. Matplotlibで可視化

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'Noto Sans JP'

# 折れ線グラフ
months = ['1月', '2月', '3月', '4月', '5月', '6月']
revenue = [120, 150, 180, 160, 200, 220]

fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(months, revenue, marker='o', linewidth=2, color='#4f46e5')
ax.set_title('月別売上推移', fontsize=16, fontweight='bold')
ax.set_xlabel('月')
ax.set_ylabel('売上(万円)')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('revenue_chart.png', dpi=150)
plt.show()

# 棒グラフ + 円グラフを並列表示
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))

categories = ['Web開発', 'AI', 'クラウド', 'モバイル']
values = [45, 30, 15, 10]

ax1.bar(categories, values, color=['#4f46e5', '#06b6d4', '#22c55e', '#f59e0b'])
ax1.set_title('カテゴリ別記事数')

ax2.pie(values, labels=categories, autopct='%1.1f%%', startangle=90)
ax2.set_title('カテゴリ構成比')

plt.tight_layout()
plt.show()

6. 実践プロジェクト:Webサイトアクセスログ分析

# 実践例:アクセスログの分析
import pandas as pd
import matplotlib.pyplot as plt

# データ読み込み
df = pd.read_csv('access_log.csv', parse_dates=['timestamp'])

# 日別のPV数を集計
daily_pv = df.groupby(df['timestamp'].dt.date).size()

# 曜日別のアクセス傾向
df['weekday'] = df['timestamp'].dt.day_name()
weekday_avg = df.groupby('weekday').size().reindex(
    ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
)

# 人気ページTop10
popular_pages = df['page'].value_counts().head(10)

# レポート出力
print("=== アクセスログ分析レポート ===")
print(f"分析期間: {df['timestamp'].min()} 〜 {df['timestamp'].max()}")
print(f"総PV数: {len(df):,}")
print(f"ユニークユーザー数: {df['user_id'].nunique():,}")
print(f"平均日次PV: {daily_pv.mean():.0f}")
print(f"\n人気ページTop5:")
for page, count in popular_pages.head(5).items():
    print(f"  {page}: {count:,} PV")
✅ 次のステップ

基本を学んだら、scikit-learnで機械学習、Seabornで高度な可視化、Streamlitでダッシュボード作成に挑戦してみましょう。

Pythonでのデータ分析は、エンジニアのスキルセットを大きく広げる技術です。ぜひ自分のプロジェクトのデータを使って実践的に学んでみてください。