산업의 전반적인 성장세를 파악하기 위해 매출과 상점 수의 변화를 분석합니다. 이를 통해 매출 성장과 상점 수 증가가 산업의 성장 가능성을 보여주는지 확인할 수 있습니다.
pd1 = (
df
.withColumn("Year", F.year("Date").cast("long"))
.filter(F.col("Year") < 2023) # 2023년 데이터 제외
.groupBy("Year")
.agg(
F.sum("SaleDollars").cast("long").alias("SaleDollars_sum"),
F.countDistinct(F.col("StoreNumber").cast("string")).alias("Store_cnt")
)
.orderBy("Year")
.toPandas()
)
groupBy: 데이터를 연도별로 그룹화.sum: 각 그룹의 매출 합계 계산.countDistinct: 고유 상점 수 계산.매출 증가 비율을 계산하여 성장세를 파악합니다.
pd2 = (
df
.withColumn("Year", F.year("Date").cast("long"))
.filter(F.col("Year") < 2023)
.groupBy("Year")
.agg(
F.sum("SaleDollars").cast("long").alias("SaleDollars_sum"),
F.countDistinct(F.col("StoreNumber").cast("string")).alias("Store_cnt")
)
.withColumn("SaleDollars_sum_bef", F.lag("SaleDollars_sum").over(W.orderBy("Year")))
.withColumn(
"SaleDollars_growth_rate",
100*(F.col("SaleDollars_sum")-F.col("SaleDollars_sum_bef"))/F.col("SaleDollars_sum_bef")
)
.toPandas()
)
lag: 이전 연도의 매출 데이터를 가져옴.(현재 매출 - 이전 매출) / 이전 매출 * 100매출이 좋은 지역을 찾아내고 지역별 성장률을 분석합니다.
pd3 = (
df
.withColumn("Year", F.year("Date").cast("long"))
.filter(F.col("Year") < 2023)
.groupBy("Year", "City")
.agg(
F.sum("SaleDollars").cast("long").alias("SaleDollars_sum"),
F.countDistinct(F.col("StoreNumber").cast("string")).alias("Store_cnt")
)
.withColumn("SaleDollars_sum_bef", F.lag("SaleDollars_sum").over(W.partitionBy("City").orderBy("Year")))
.withColumn(
"SaleDollars_growth_rate",
100*(F.col("SaleDollars_sum")-F.col("SaleDollars_sum_bef"))/F.col("SaleDollars_sum_bef")
)
)
# 2022년 매출 상위 10개 지역
top_10_city = (
pd3
[pd3.Year == 2022]
.nlargest(n=10, columns='SaleDollars_sum')['City']
.tolist()
)
# 상위 10개 지역의 매출 성장 추이 시각화
fig = px.line(
pd3.loc[pd3.City.isin(top_10_city)],
x="Year", y="SaleDollars_growth_rate", color="City", hover_data=["City"]
)
fig.update_layout(title_text="지역 별 매출 성장률 추이")
fig.show()
점포별 평균 매출과 총 매출의 관계를 분석합니다.
pd4 = (
df
.withColumn("Year", F.year("Date").cast("long"))
.filter(F.col("Year") < 2023)
.groupBy("Year", "City", "StoreNumber")
.agg(
F.sum("SaleDollars").cast("long").alias("SaleDollars_sum")
)
.groupBy("Year", "City")
.agg(
F.avg("SaleDollars_sum").alias("Store_SaleDollars_avg"),
F.sum("SaleDollars_sum").alias("SaleDollars_sum")
)
.orderBy("Year")
.toPandas()
)
fig = px.line(
pd4,
x="Year", y="Store_SaleDollars_avg", color="City", hover_data=["City"]
)
fig.update_layout(title_text="지역 별 점포 평균 매출 추이")
fig.show()
fig = px.scatter(
pd4[pd4.Year == 2022],
x="SaleDollars_sum", y="Store_SaleDollars_avg", color="City", hover_data=['City']
)
fig.update_layout(title_text="지역 별 점포 평균 매출 & 총 매출 관계")
# 수평선 및 수직선 추가
fig.add_hline(y=400000, line_color='red')
fig.add_vline(x=3500000, line_color='red')
fig.show()
MOUNT VERNON, DEWITT, WINDSOR HEIGHTS, CORALVILLE, DES MOINES와 같은 지역은 매출 성장과 안정성 측면에서 전략적으로 중요한 지역으로 판단됩니다.