現在の見出し:2.1節:基本集計システムの構築
見出し一覧
- 2.1節:基本集計システムの構築
- - df.groupby()による商品別売上集計機能の実装
- - df.unique()による商品・地域リスト抽出機能の追加
【PR】『Python』を学べる企業・個人向けのプログラミングコース
df.groupby()による商品別売上集計機能の実装
前節(第1章 1.2節)で作成したコードを基盤として、df.groupby()による商品別の売上集計機能を実装します。現在のデータ前処理機能だとデータのクリーニングまでは完了していますが、ビジネス分析に必要な集計処理が実装されていないため、売上データから有意義な洞察を得ることができません。
df.groupby()メソッドメソッドは特定の処理をまとめたプログラムの塊です。は、指定した列の値に基づいてデータをグループ化し、各グループに対して統計処理を実行する機能です。今回は月別・商品別の組み合わせでグループ化を行い、sum()関数関数は一定の処理をまとめたプログラムの塊です。で売上金額を合計することで、商品ごとの月次パフォーマンスを定量的に分析できるようにしていきます。
| 処理手順 | 使用メソッド | 目的 | 
|---|---|---|
| グループ化 | df.groupby(['Date', 'Product']) | 月と商品でデータを分類 | 
| 集計 | ['Price'].sum() | 各グループの売上合計を算出 | 
| 構造化 | reset_index() | 結果をDataFrame形式に変換 | 
新しく追加するanalyze_basic_sales関数では、データ分析処理を独立して管理します。この関数は集計結果をDataFrameとして構造化し、辞書形式で返すことで複数の分析データを効率的に管理できる設計になっています。この関数によって、後続の章で追加する分析機能との連携も容易になります。
# コード
import pandas as pd
import os
def load_sales_data(filepath):
    """売上データの読み込み"""
    if not os.path.exists(filepath):
        print(f"エラー: ファイルが見つかりません - {filepath}")
        return None
    
    df = pd.read_excel(filepath)
    print(f"データ読み込み完了: {len(df)}行, {len(df.columns)}列")
    print("データ構造:")
    print(df.head())
    return df
def preprocess_data(df):
    """データ前処理"""
    if df is None:
        return None
    
    print(f"元データ: {len(df)}行")
    
    # 日付変換
    df['Date'] = pd.to_datetime(df['Date']).dt.strftime("%Y-%m")
    print("日付変換完了")
    
    # 欠損値除去
    original_rows = len(df)
    df = df.dropna()
    print(f"欠損値除去: {original_rows - len(df)}行削除")
    
    print("処理済みデータ:")
    print(df.head())
    return df
def analyze_basic_sales(df):
    """基本売上分析"""
    if df is None:
        return None
    
    # 月別商品別集計
    monthly_product_sales = df.groupby(['Date', 'Product'])['Price'].sum().reset_index()
    print("\n月別商品別売上:")
    print(monthly_product_sales.head(10))
    
    return {
        'monthly_product': monthly_product_sales
    }
# メイン処理
def main():
    filepath = "sample.xlsx"
    df = load_sales_data(filepath)
    
    if df is not None:
        print("読み込み成功!")
        processed_df = preprocess_data(df)
        if processed_df is not None:
            print(f"最終データ: {len(processed_df)}行")
            print("データ型:")
            print(processed_df.dtypes)
            
            # 基本分析の実行
            analysis_results = analyze_basic_sales(processed_df)
            if analysis_results:
                print(f"\n基本分析完了")
    else:
        print("読み込み失敗")
if __name__ == "__main__":
    main()
# 実行結果
データ読み込み完了: 5行, 4列
データ構造:
    Product    Area       Date  Price
0  ProductA   Tokyo 2024-01-15   1000
1  ProductB   Osaka 2024-01-16   1500
2  ProductC   Tokyo 2024-01-17   2000
3  ProductA  Nagoya 2024-01-18   1200
4  ProductB   Tokyo 2024-01-19   1800
読み込み成功!
元データ: 5行
日付変換完了
欠損値除去: 0行削除
処理済みデータ:
    Product    Area     Date  Price
0  ProductA   Tokyo  2024-01   1000
1  ProductB   Osaka  2024-01   1500
2  ProductC   Tokyo  2024-01   2000
3  ProductA  Nagoya  2024-01   1200
4  ProductB   Tokyo  2024-01   1800
最終データ: 5行
データ型:
Product    object
Area       object
Date       object
Price       int64
dtype: object
月別商品別売上:
      Date   Product  Price
0  2024-01  ProductA   2200
1  2024-01  ProductB   3300
2  2024-01  ProductC   2000
基本分析完了
| 行数 | 種別 | コード | 解説 | 
|---|---|---|---|
| 37行目 | 新規 | def analyze_basic_sales(df): | 基本売上分析専用の関数を定義します。データ分析処理を体系的に管理し、集計結果を構造化して返すための独立した関数です。 | 
| 43行目 | 新規 |     monthly_product_sales = df.groupby(['Date', 'Product'])['Price'].sum().reset_index() | 月と商品でグループ化して売上を集計します。groupby()で指定列によるグループ化、sum()で合計算出、reset_index()でDataFrame形式に変換します。 | 
| 44行目 | 新規 |     print("\n月別商品別売上:") | 集計結果の見出しを表示します。改行文字により前の出力と区別して、分析結果を見やすく整理します。 | 
| 45行目 | 新規 |     print(monthly_product_sales.head(10)) | 集計結果の上位10件を表示して分析内容を確認します。head()メソッドで適切な件数に制限して可読性を向上させます。 | 
| 47行目 | 新規 |     return { | 分析結果を辞書形式で返却開始します。複数の集計データを構造化して管理し、後続処理で効率的に活用できるようにします。 | 
| 65行目 | 新規 |             analysis_results = analyze_basic_sales(processed_df) | 定義した分析関数を呼び出して基本集計を実行します。前処理済みデータを引数引数はプログラミングで関数やメソッドに渡される値や変数で、関数の動作を柔軟に制御し、コードの再利用性を高めます。として渡し、分析結果を変数変数はデータを一時的に記憶しておく場所です。に格納します。 | 
 
                 
                 
                         
                         
              

















