損益分岐点と利益を計算し、それぞれをデータベースに保存する方法

損益分岐点と利益を計算し、それぞれをデータベースに保存する方法を以下に示します。

  1. モデルの変更:
    RakutenPriceResult モデルに profit フィールドを追加し、計算結果を保存するための準備をします。

    python
    from django.db import models
    
    class RakutenPriceResult(models.Model):
        original_product_code = models.CharField(max_length=100, primary_key=True)  # 自社品番
        min_price = models.IntegerField(null=True, blank=True)  # 最安価格
        min_shopCode = models.CharField(max_length=100, null=True, blank=True)  # 最安価格のショップコード
        next_min_price = models.IntegerField(null=True, blank=True)  # 最安の次の価格
        next_min_shopCode = models.CharField(max_length=100, null=True, blank=True)  # 最安価格の次のショップコード
        per_low_own_price = models.IntegerField(null=True, blank=True)  # 自社のX%・最安で暫定的な最安価格
        per_high_own_price = models.IntegerField(null=True, blank=True)  # 自社のX%・高い暫定的な最安価格
        yen_low_own_price = models.IntegerField(null=True, blank=True)  # 自社のX円・最安で暫定的な最安価格
        yen_high_own_price = models.IntegerField(null=True, blank=True)  # 自社のX円・高い暫定的な最安価格
        cost_price = models.IntegerField(null=True, blank=True)  # 原価
        break_even_point = models.FloatField(null=True, blank=True)  # 商品単位の限界利益における損益分岐点
        result_price = models.IntegerField(null=True, blank=True)  # アップロードする価格
        profit = models.FloatField(null=True, blank=True)  # 利益
    
        def __str__(self):
            return f"original_product_code: {self.original_product_code}, " 
                   f"min_price: {self.min_price}, " 
                   f"min_shopCode: {self.min_shopCode}, " 
                   f"next_min_price: {self.next_min_price}, " 
                   f"next_min_shopCode: {self.next_min_shopCode}, " 
                   f"per_low_own_price: {self.per_low_own_price}, " 
                   f"per_high_own_price: {self.per_high_own_price}, " 
                   f"yen_low_own_price: {self.yen_low_own_price}, " 
                   f"yen_high_own_price: {self.yen_high_own_price}, " 
                   f"cost_price: {self.cost_price}, " 
                   f"result_price: {self.result_price}, " 
                   f"break_even_point: {self.break_even_point}, " 
                   f"profit: {self.profit}"
    
  2. 利益と損益分岐点を計算して保存する関数:
    add_break_even_point 関数内で、利益と損益分岐点を計算し、それぞれの値をモデルインスタンスに保存します。

    python
    import pandas as pd
    from .models import RakutenPriceResult
    
    def add_break_even_point():
        # 損益が0円を登録(それをベースにして、赤字、黒字の計算に使う)
        import_data = list(RakutenPriceResult.objects.values_list('original_product_code', 'cost_price', 'yen_low_own_price'))
        # DataFrameを作成
        df = pd.DataFrame(import_data, columns=['original_product_code', 'cost_price', 'yen_low_own_price'])
        shipping = 500  # 送料
        sizai = 50      # 梱包資材
        zinkenhi = 0    # 商品別人件費
        mall_fee_rate = 0.09  # モール手数料率
    
        # 利益を計算する関数を定義
        def calculate_profit(row):
            revenue = row['yen_low_own_price']
            cost = row['cost_price']
            profit = revenue - cost - (revenue * mall_fee_rate) - shipping - sizai - zinkenhi
            return profit
    
        # 各行の利益を計算して新しい列に追加
        df['profit'] = df.apply(calculate_profit, axis=1)
    
        # 損益分岐点を計算してモデルに保存
        df['break_even_point'] = (df['cost_price'] + shipping + sizai + zinkenhi) / (1 - mall_fee_rate)
    
        # モデルに計算結果を保存
        for index, row in df.iterrows():
            product_code = row['original_product_code']
            break_even_point = row['break_even_point']
            profit = row['profit']
            # プライマリーキーでモデルインスタンスを取得して更新
            instance = RakutenPriceResult.objects.get(original_product_code=product_code)
            instance.break_even_point = break_even_point
            instance.profit = profit
            instance.save()
    
        print("損益分岐点と利益を計算して保存しました。")
    
  3. マイグレーションを作成して適用する:
    モデルに変更が加えられたので、マイグレーションを作成し、それをデータベースに適用します。

    bash
    python manage.py makemigrations
    python manage.py migrate
    
  4. 関数を実行する:
    Djangoの管理コマンドを使用して関数を実行します。

    bash
    python manage.py shell
    >>> from your_app_name.file_name import add_break_even_point
    >>> add_break_even_point()
    

これで、各商品の利益と損益分岐点が計算され、それぞれの値がデータベースに保存されます。適切にモデルと関数を設定することで、自動的に計算と保存が行われるようになります。

未分類

Posted by ぼっち