Office
 Computer >> コンピューター >  >> ソフトウェア >> Office

Excel × Pythonで実現する高度なデータサイエンスワークフロー徹底ガイド

Excel × Pythonで実現する高度なデータサイエンスワークフロー徹底ガイド

シンプルさと柔軟性から、多くのデータアナリストにとってExcelは欠かせない定番ツールです。しかし、大規模・反復的・複雑なデータ処理となると、Pythonの高速性、自動化能力、そして高度な分析機能が大きな強みになります。ExcelとPythonを組み合わせれば、両者の長所を掛け合わせた強力なワークフローを構築できます。

本記事では、ExcelとPythonを連携させた実践的なデータサイエンスワークフローの組み方を、具体的なコード例とともに段階的に解説します。

必要なツールと環境構築

ExcelとPythonを連携する前に、まず開発環境を整えましょう。最初の段階で環境を正しくセットアップしておくことで、以降の作業がスムーズかつ効率的に進みます。

前提条件:

  • Microsoft Excel:初期のデータ確認やレポート作成用。
  • Python 3.x:データサイエンスワークフローの中核となるエンジン。
  • Pythonライブラリ
    • pandas:データ分析の中核ライブラリ。
    • matplotlib / seaborn:グラフ描画・可視化。
    • openpyxl(任意):Excelファイルへの書き出し用。
    • numpy:数値計算。

ライブラリのインストール:

pip install pandas matplotlib openpyxl

1. Pythonへのデータ読み込み

pandasを使えば、表形式のデータを簡単に読み込み、操作・分析できるようになります。まずはExcelファイルをDataFrameとして取り込みましょう。

import pandas as pd
# Excelファイルからデータを読み込む
df = pd.read_excel('SalesData.xlsx')
# データをプレビュー
print(df.head()) # 先頭5行を表示
print(df.info()) # 列名・データ型・欠損値の情報を表示
  • pd.read_excel():ExcelファイルをpandasのDataFrameとして読み込みます。
  • df.head():先頭5行を表示。データの概観確認に最適です。
  • df.info():行数・列数・各列のデータ型を一覧表示します。

実行すると、売上データの先頭行と、次のようなサマリー情報が表示されます。

 TransactionID Date CustomerID ProductID ProductName Category Quantity UnitPrice Region Channel SalesRep
0 100001 2024-01-02 C-100 P-101 Laptop Electronics 2.0 800.0 East Online Smith
1 100002 2024-01-02 C-101 P-102 Printer Electronics 1.0 200.0 West Retail Johnson
2 100003 2024-01-03 C-102 P-103 Mouse Electronics 5.0 25.0 North Online Lee
3 100004 2024-01-04 C-103 P-104 Desk Furniture 1.0 150.0 South Retail Brown
4 100005 2024-01-05 C-104 P-105 Monitor Electronics 3.0 175.0 NaN Online Davis
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 63 entries, 0 to 62
Data columns (total 11 columns):
 # Column Non-Null Count Dtype
--- ------ -------------- -----
 0 TransactionID 63 non-null int64
 1 Date 62 non-null datetime64[ns]
 2 CustomerID 62 non-null object 
 3 ProductID 61 non-null object 
 4 ProductName 63 non-null object 
 5 Category 61 non-null object 
 6 Quantity 61 non-null float64 
 7 UnitPrice 62 non-null float64
 8 Region 62 non-null object
 9 Channel 62 non-null object
 10 SalesRep 62 non-null object
dtypes: datetime64[ns](1), float64(2), int64(1), object(7)
memory usage: 5.5+ KB
None

2. データクレンジングと変換

生のデータはそのまま分析に使えることはまれです。このステップでは、欠損値の修正、適切なデータ型への変換、集計用の新しい列の追加を行います。

重複データの削除:

# 重複行を削除
df = df.drop_duplicates()
  • 重複しているレコードをまとめて削除します。

欠損値の確認:

# 列ごとの欠損値(NaN)の数を出力
print(df.isnull().sum())
  • 各列にいくつの欠損値があるかを確認できます。見つかった場合は、削除するか補完するかを判断しましょう。
# 出力例:
TransactionID 0
Date 1
CustomerID 1
ProductID 2
ProductName 0
Category 2
Quantity 2
UnitPrice 1
Region 1
Channel 1
SalesRep 1
dtype: int64

データ型の変換:

# 'Date'列をpandasのdatetime型に変換(フィルタやグループ化が容易になる)
df['Date'] = pd.to_datetime(df['Date'])
  • Date列を文字列からdatetime型へ変換することで、日付による絞り込みや期間別の集計が簡単になります。

「TotalSales」列の作成:

# 各取引の合計金額を示す新しい列を追加
df['TotalSales'] = df['Quantity'] * df['UnitPrice']
  • 数量×単価で計算した取引ごとの売上額を新列として追加します。

時系列分析のための「Month」列の抽出:

df['Month'] = df['Date'].dt.to_period('M')
  • 月単位の売上集計・分析に使えるMonth列を作成します。
  • print(df.head())でクレンジング後のデータをプレビューして確認しましょう。
# 出力例:
TransactionID Date CustomerID ProductID ProductName Category ... UnitPrice Region Channel SalesRep TotalSales Month
0 100001 2024-01-02 C-100 P-101 Laptop Electronics ... 800.0 East Online Smith 1600.0 2024-01
1 100002 2024-01-02 C-101 P-102 Printer Electronics ... 200.0 West Retail Johnson 200.0 2024-01
2 100003 2024-01-03 C-102 P-103 Mouse Electronics ... 25.0 North Online Lee 125.0 2024-01
3 100004 2024-01-04 C-103 P-104 Desk Furniture ... 150.0 South Retail Brown 150.0 2024-01
4 100005 2024-01-05 C-104 P-105 Monitor Electronics ... 175.0 NaN Online Davis 525.0 2024-01

3. データ分析

クリーンなデータセットが整ったら、ビジネス価値につながるインサイトを導き出しましょう。ここでは月別・製品別・地域別の売上集計を行います。

月別の総売上:

# 月ごとにグループ化し、各月の売上合計を算出
monthly_sales = df.groupby('Month')['TotalSales'].sum()
print(monthly_sales)
  • Month列でデータをグループ化し、各月のTotalSalesを合計します。
# 出力例:
Month
2024-01 9075.0
2024-02 9800.0
2024-03 9075.0
Freq: M, Name: TotalSales, dtype: float64

売れ筋商品のランキング:

# 製品ごとに売上を合計し、降順にソート
product_sales = df.groupby('ProductName')['TotalSales'].sum().sort_values(ascending=False)
print(product_sales)
  • 製品別の売上を合計し、人気の高い順に並べ替えます。
# 出力例:
ProductName
Laptop 15200.0
Monitor 3850.0
Printer 3200.0
Desk 2550.0
Chair 2325.0
Mouse 1125.0
Name: TotalSales, dtype: float64

地域別の売上:

# 地域ごとにグループ化し、各地域の売上合計を算出
region_sales = df.groupby('Region')['TotalSales'].sum()
print(region_sales)
  • 地域ごとの売上合計を集計します。
# 出力例:
Region
East 6075.0
North 5925.0
South 8225.0
West 7500.0

4. 重要なインサイトの可視化

データは可視化することで格段に伝わりやすくなります。ここでは、主要なトレンドをひと目で把握できるチャートを作成します。経営層やステークホルダーへの報告にも役立ちます。

4.1. 月別売上トレンド

import matplotlib.pyplot as plt # 描画用ライブラリをインポート
# 月別売上の棒グラフを作成
monthly_sales.plot(
 kind='bar', 
 title='Total Sales by Month', 
 ylabel='Sales ($)', 
 xlabel='Month'
)
plt.tight_layout() # ラベルの重なりを防止
plt.savefig('monthly_sales.png') # PNGファイルとして保存
plt.show() # グラフを表示
  • 月別売上を棒グラフで描画します。
  • plt.savefigでレポート用に画像として保存可能です。
  • 棒グラフにより、月ごとの売上推移がひと目でわかります。

Excel × Pythonで実現する高度なデータサイエンスワークフロー徹底ガイド

4.2. 地域別売上

# 地域別売上の円グラフ
region_sales.plot(
 kind='pie', 
 autopct='%1.1f%%', 
 title='Sales Distribution by Region'
)
plt.ylabel('') # デフォルトのy軸ラベルを削除
plt.tight_layout()
plt.savefig('region_sales.png')
plt.show()
  • 地域別売上の比率を円グラフで表現します。経営層やマーケティング部門向けの資料に最適です。

Excel × Pythonで実現する高度なデータサイエンスワークフロー徹底ガイド

5. 高度な分析とモデリング

基本的なグループ化や集計にとどまらず、Pythonなら記述統計、ピボットテーブル、さらには機械学習まで、ほんの数行のコードで実現できます。ここからはデータをさらに掘り下げていきましょう。

5.1. 記述統計量の確認

記述統計はデータセット全体の概要を素早く把握する手段です。数値列の平均・標準偏差・四分位数などが一目でわかります。

# 数値列の要約統計量を表示(平均、標準偏差、最小値、最大値、四分位数など)
print(df.describe())
  • df.describe():Quantity、UnitPrice、TotalSalesなどの数値列を一括でサマリー表示します。
# 出力例:
 TransactionID Quantity UnitPrice TotalSales
count 61.000000 59.000000 60.000000 59.000000
mean 100030.180328 2.542373 262.083333 478.813559
std 17.497150 1.534905 277.339497 527.085627
min 100001.000000 1.000000 25.000000 75.000000
25% 100015.000000 1.000000 75.000000 162.500000
50% 100030.000000 2.000000 175.000000 300.000000
75% 100045.000000 3.000000 200.000000 525.000000
max 100060.000000 7.000000 800.000000 2400.000000

5.2. pandasによるピボットテーブル

ピボットテーブルはExcelでのインタラクティブなレポート作成に欠かせない機能ですが、pandasでも同様のことが可能です。

# ピボットテーブルを作成:地域ごとのTotalSales合計
pivot = df.pivot_table(index='Region', values='TotalSales', aggfunc='sum')
print(pivot)
  • pivot_table():地域ごとのTotalSalesを集計します。Excelのピボットテーブルと同じ感覚で使えます。
# 出力例
 TotalSales
Region
East 6075.0
North 5925.0
South 8225.0
West 7500.0

5.3. 簡単な機械学習の例

最後に、販売数量だけから総売上を予測できるか、シンプルな線形回帰(機械学習)モデルで試してみましょう。

from sklearn.linear_model import LinearRegression # scikit-learnから線形回帰をインポート
# 特徴量と目的変数を準備
X = df[['Quantity']] # 特徴量:販売数量
y = df['TotalSales'] # 目的変数:総売上
# 回帰モデルを作成して学習
model = LinearRegression()
model.fit(X, y)
# 回帰係数(傾き)を表示
print('Coefficient:', model.coef_)
# 切片(数量=0のときの基準値)を表示
print('Intercept:', model.intercept_)
  • scikit-learnからLinearRegressionをインポートします。
  • 販売数量を説明変数としてTotalSalesを予測します。
  • モデルを学習し、回帰係数(1個追加販売ごとに売上がどれだけ増えるか)を出力します。
# 出力例:
Coefficient: [-37.65294772]
Intercept: 596.8483500185391

6. 分析済みデータをExcelへ書き戻す

クレンジング・分析・モデリングが完了したら、サマリーテーブルやインサイトを複数シートのExcelファイルとして書き出しましょう。すべての主要な成果物が1つのファイルにまとまり、Excelでの確認や共有が容易になります。

# サマリーおよび高度な分析結果を複数シートのExcelファイルへ書き出し
with pd.ExcelWriter('sales_summary.xlsx') as writer:
 # 月次サマリー
 monthly_sales.to_frame().to_excel(writer, sheet_name='Monthly Sales')
 # 製品別サマリー
 product_sales.to_frame().to_excel(writer, sheet_name='Product Sales')
 # 地域別サマリー
 region_sales.to_frame().to_excel(writer, sheet_name='Region Sales')
 # ピボットテーブル(地域別売上合計)
 pivot.to_excel(writer, sheet_name='Pivot Table')
 # 必要に応じて記述統計も書き出し可能
 df.describe().to_excel(writer, sheet_name='Descriptive Stats')
  • コンテキストマネージャー(with … as writer):Excelファイルの保存とクローズを確実に行います。
  • 各テーブルに対する .to_excel() :DataFrameやサマリーをそれぞれ個別のシートに保存します。
  • カスタムシート名:分析の流れに対応したわかりやすいシート名を付けています。

Excel × Pythonで実現する高度なデータサイエンスワークフロー徹底ガイド

  • 生成されたsales_summary.xlsxをExcelで開きます。
  • 「Monthly Sales」「Product Sales」「Region Sales」「Pivot Table」「Descriptive Stats」の各シートが分かれて格納されているのが確認できます。

Excel × Pythonで実現する高度なデータサイエンスワークフロー徹底ガイド

7. ワークフローの自動化と拡張

Pythonを活用すれば、定型的なレポートや分析を完全に自動化できます。次回新しいExcelファイルを受け取ったら、ファイルを差し替えてスクリプトを再実行するだけで、すべての分析とレポートが瞬時に更新されます。

  • 分析コードは1つのPythonファイルにまとめておきましょう。
  • レポートを更新するには、CSVファイルを差し替えて以下のコマンドを実行します。
python Excel_to_Python.py

Excel × Pythonで実現する高度なデータサイエンスワークフロー徹底ガイド

  • さらに、この処理を週次・月次の定期タスクとしてスケジューリングすれば、より強力な自動化が実現できます。

まとめ

Excelの直感的なデータ入力・レポーティング機能と、Pythonのデータサイエンス力を組み合わせることで、大規模で整理されていないデータセットでも効率的に処理・分析できるようになります。反復的なレポート業務は自動化され、機械学習や高度な可視化への扉も開かれます。

一朝一夕にPythonのエキスパートになる必要はありません。まずは簡単なタスクを1つ試してみてください。うまくいけば、次のステップをもう1つ追加していきます。気がつけば、複雑なレポートを自動で生成できるようになっているはずです。

無料のExcel演習問題(解答付き)もぜひチェックしてみてください!

  1. Excelで列全体に日付ピッカーを設定する方法【VBAマクロ活用】

    日付ピッカー(Date Picker)は、Microsoft Excelの便利なツールの一つです。各セルに日付を一つずつ手入力するという単調な作業から解放され、ポップアップ表示されるカレンダーから日付を選択して入力できるようになります。このチュートリアルでは、Excel日付ピッカーの挿入方法と、列全体へ適用する方法について詳しく解説します。 Excelの日付ピッカーとは? Excel日付ピッカーは、Microsoft Excelに搭載されている機能の一つで、カレンダーをポップアップ表示し、そこから簡単に日付を選択できるようにするものです。この機能は32ビット版のExcel 365、Excel

  2. Excelで財務モデリングをマスターする:初心者向けステップバイステップガイド

    Excelは、財務モデリングにおいて最も広く活用されている強力なツールです。売上予測から投資分析まで、財務パフォーマンスの分析や将来予測を効率的に行えます。アナリスト、経営者、学生を問わず、財務モデリングの基礎をマスターすることで、意思決定の精度を大きく高めることができるでしょう。 財務モデリングとは、企業の財務パフォーマンスを数値で表現し、将来の結果を予測したり、戦略的な意思決定に役立てたりするプロセスのことです。この記事では、Excelを使った財務モデルの作り方を、初心者の方にもわかりやすくステップごとに解説します。 ステップ1:モデルの目的を明確にする 財務モデルを作り始める前に、そ