영업이익 분석과 PySpark UDF 활용

Ryan·2025년 1월 18일

SQL/Python 분석

목록 보기
90/94

1. 영업이익이란?

영업이익은 영업 활동을 통해 순수하게 남은 이익을 의미합니다. 이는 다음과 같이 정의됩니다:

  • 영업이익 = 매출액 - 매출원가 - 기타 비용

본 데이터에서는 각 점포 당 기타 비용이 모두 동일하다고 가정하여, 매출액 - 매출원가를 통해 영업이익을 계산했습니다. 실제 상황에서는 점포별 월세, 관리비, 인건비, 배송비 등이 기타 비용에 포함됩니다.

2. PySpark UDF 활용

UDF란?

  • UDF(User Defined Functions): 사용자가 정의한 함수를 PySpark에서 활용하는 기능입니다.
  • PySpark는 내장된 SQL 함수 외에도 UDF를 사용해 특정한 계산을 수행할 수 있습니다.

영업이익을 계산하는 UDF 만들기

다음은 UDF를 활용하여 영업이익을 계산하는 코드입니다:

from pyspark.sql.functions import udf
from pyspark.sql import types as T

def calculate_gross_profit(unit_sales, unit_cost, sales_amt):
    gross_profit = sales_amt * (unit_sales - unit_cost)
    return gross_profit

calculate_gross_profit_udf = udf(
    calculate_gross_profit, # UDF로 만든 함수
    T.DoubleType()          # 반환 타입
)

UDF 적용

위에서 정의한 UDF를 데이터프레임에 적용하여 새로운 컬럼을 추가합니다:

df = (
    df
    .withColumn(
        "gross_profit",
        calculate_gross_profit_udf(
            df.StateBottleRetail,
            df.StateBottleCost,
            df.BottlesSold
        )
    )
    .select("StateBottleRetail", "StateBottleCost", "BottlesSold", "gross_profit")
)
df.show()

3. 연도별, 점포별 영업이익 분석

데이터 처리 및 그룹화

다음 코드는 연도별, 점포별로 데이터를 그룹화하여 총 영업이익과 평균 영업이익을 계산합니다:

pd1 = (
    df
    .withColumn("Year", F.year("Date").cast("long"))  # 연도만 추출
    .filter(F.col("Year") < 2023)                     # 2023년 데이터 제외
    .withColumn(
        "gross_profit",
        calculate_gross_profit_udf(
            df.StateBottleRetail,
            df.StateBottleCost,
            df.BottlesSold
        )
    )
    .groupBy("Year", "City", "StoreNumber")
    .agg(
        F.sum("gross_profit").alias("gross_profit")
    )
    .groupBy("Year", "City")
    .agg(
        F.avg("gross_profit").alias("gross_profit_avg")
    )
    .orderBy("Year")
    .toPandas()
)
pd1

주요 결과 시각화

지역별 영업이익의 평균과 총 매출 데이터를 시각화하여 상관관계를 분석합니다:

fig = px.scatter(
    pd1,
    x="SaleDollars_avg", y="gross_profit_avg", color="City", hover_data=['City']
)
fig.update_layout(title_text="지역별 평균 매출과 영업이익의 관계")
fig.show()

4. 분석 결과

  • 지역별로 매출과 영업이익 사이에 높은 상관관계를 확인할 수 있습니다.
  • 이를 바탕으로 매출이 높은 점포에서 영업이익 역시 높은 경향을 파악했습니다.

요약

  1. 영업이익 정의: 영업 활동을 통해 남는 순수 이익으로, 매출액에서 매출원가와 기타 비용을 차감하여 계산합니다.
  2. PySpark UDF 활용: 사용자 정의 함수를 통해 복잡한 계산을 수행하고 데이터를 효율적으로 처리할 수 있습니다.
  3. 연도별/점포별 분석: 연도와 점포를 기준으로 그룹화하여 총 영업이익과 평균값을 도출했습니다.
  4. 시각화 및 결과: 매출과 영업이익 간의 높은 상관관계를 발견했으며, 데이터 기반의 인사이트를 도출했습니다.

결론

PySpark의 UDF를 활용하면 복잡한 사용자 정의 계산을 데이터프레임에 간단히 적용할 수 있습니다. 이를 통해 대규모 데이터에서도 효율적으로 영업이익을 분석할 수 있으며, 시각화 도구를 활용하여 결과를 명확히 전달할 수 있습니다.

0개의 댓글