データ分析はエンジニアや研究者だけでなく、ビジネス担当者や学生にとっても必須スキルになりつつあります。Pythonにはpandasとmatplotlibという強力なライブラリがあり、データの読み込み・加工・可視化を驚くほど少ないコードで実現できます。この記事では、これらの基本的な使い方を実践コード付きで解説します。
📦 環境構築:インストール方法
まず、必要なライブラリをインストールします。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データの読み込みから可視化レポートの作成まで一連の分析フローを構築できます。次のステップとしてはseabornやscikit-learnへの挑戦をおすすめします。