データ分析はエンジニアや研究者だけでなく、ビジネス担当者や学生にとっても必須スキルになりつつあります。Pythonにはpandasmatplotlibという強力なライブラリがあり、データの読み込み・加工・可視化を驚くほど少ないコードで実現できます。この記事では、これらの基本的な使い方を実践コード付きで解説します。

📦 環境構築:インストール方法

まず、必要なライブラリをインストールします。pipを使って以下のコマンドを実行してください。

pip install pandas matplotlib numpy

Jupyter Notebookを使う場合は以下もインストールしておくと便利です。

pip install jupyter notebook
jupyter notebook

📂 pandasの基礎:データの読み込みと確認

pandasの中心となるデータ構造はDataFrameです。Excelの表のように行と列を持つ二次元データを扱います。

CSVファイルの読み込み

実際のデータ分析では、CSVファイルを読み込むことが多いです。

import pandas as pd

# CSVファイルを読み込む
df = pd.read_csv('sales_data.csv')

# 最初の5行を表示
print(df.head())

# データの形状を確認(行数、列数)
print(df.shape)  # 例: (1000, 6)

# 列名とデータ型を確認
print(df.dtypes)

DataFrameの手動作成

辞書からDataFrameを作成することもできます。

import pandas as pd

# 辞書からDataFrameを作成
data = {
    '商品名': ['りんご', 'みかん', 'バナナ', 'ぶどう'],
    '単価': [150, 80, 120, 300],
    '販売数': [200, 350, 180, 90]
}

df = pd.DataFrame(data)
print(df)

🔍 データの選択・フィルタリング

DataFrameから必要なデータを取り出すには、さまざまな方法があります。

列の選択

prices = df['単価']
subset = df[['商品名', '販売数']]
row0 = df.iloc[0]
row_slice = df.iloc[1:3]

条件によるフィルタリング

high_price = df[df['単価'] >= 100]
result = df[(df['単価'] >= 100) & (df['販売数'] > 150)]
result2 = df[(df['単価'] < 100) | (df['販売数'] > 300)]

📊 データの集計・統計処理

pandasはデータの集計も得意です。基本統計量の算出やグループ集計を簡単に行えます。

基本統計量の算出

print(df.describe())
df['売上'] = df['単価'] * df['販売数']
print('総売上:', df['売上'].sum())

グループ集計(groupby)

df['カテゴリ'] = ['国産果物', '国産果物', '輸入果物', '国産果物']
category_sales = df.groupby('カテゴリ')['売上'].sum()
summary = df.groupby('カテゴリ').agg({'売上': ['sum', 'mean'], '販売数': 'sum'})
💡 ヒント:groupby()はExcelのピボットテーブルに相当します。

🎨 matplotlibによるデータ可視化

matplotlibはPythonで最も広く使われているグラフライブラリです。

棒グラフ

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 5))
ax.bar(df['商品名'], df['売上'], color=['#e8a040','#f0c060','#60a0e8','#a060f0'])
ax.set_title('商品別売上比較', fontsize=16)
ax.set_xlabel('商品名')
ax.set_ylabel('売上(円)')
plt.tight_layout()
plt.show()

折れ線グラフ:時系列データ

import pandas as pd
import matplotlib.pyplot as plt
months = pd.date_range('2025-01', periods=12, freq='ME')
sales = [120, 135, 98, 142, 160, 175, 188, 172, 155, 148, 162, 195]
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(months, sales, marker='o', color='#e8a040', linewidth=2.5)
ax.fill_between(months, sales, alpha=0.12, color='#e8a040')
ax.set_title('月次売上推移(2025年)')
plt.tight_layout()
plt.show()

散布図

fig, ax = plt.subplots(figsize=(7, 5))
scatter = ax.scatter(df['単価'], df['販売数'], c=df['売上'], cmap='YlOrRd', s=150)
plt.colorbar(scatter, ax=ax, label='売上(円)')
ax.set_title('単価・販売数・売上の関係')
plt.tight_layout()
plt.show()

🧹 データクリーニング:欠損値の処理

実際のデータには欠損値(NaN)がよく含まれます。

import pandas as pd
import numpy as np
df2 = pd.DataFrame({
    '名前': ['Alice', 'Bob', 'Charlie', 'David'],
    '年齢': [25, np.nan, 30, 22],
    '点数': [85, 92, np.nan, 78]
})
print(df2.isnull().sum())
df2['年齢'] = df2['年齢'].fillna(df2['年齢'].mean())
df2['点数'] = df2['点数'].fillna(df2['点数'].median())
print(df2)
⚠️ 注意:欠損値の処理方法はデータの性質によって異なります。平均値・中央値・最頻値での補完、行の削除など、適切な手法を選択してください。

📈 pandasとmatplotlibの連携

pandasのDataFrameはmatplotlibと直接連携できます。df.plot()を使うとより簡潔にグラフを描けます。

fig, axes = plt.subplots(1, 2, figsize=(12, 5))
df.plot(kind='bar', x='商品名', y='売上', ax=axes[0], color='#e8a040', legend=False, title='商品別売上')
df.set_index('商品名')['販売数'].plot(kind='pie', ax=axes[1], autopct='%1.1f%%', title='販売数の割合')
plt.tight_layout()
plt.show()

📝 まとめ

この記事では、Pythonによるデータ分析の基礎として以下を解説しました。

  • pandas:CSVの読み込み、DataFrame作成、フィルタリング、グループ集計
  • matplotlib:棒グラフ・折れ線グラフ・散布図・円グラフの描画
  • データクリーニング:欠損値処理の方法
  • pandas + matplotlib連携:df.plot()による簡潔なグラフ描画

これらを組み合わせることで、CSVデータの読み込みから可視化レポートの作成まで一連の分析フローを構築できます。次のステップとしてはseabornscikit-learnへの挑戦をおすすめします。

SilkCode JPの工学計算ツール化学計算ツールもご活用ください。