1. सीखें
  2. /
  3. पाठ्यक्रम
  4. /
  5. Python으로 재무제표 분석하기

Connected

अभ्यास

사용자 정의 함수로 플롯 만들기

이전 연습 문제에서 플롯을 만들기 위해 다음 코드를 작성하셨죠:

# tech와 fmcg 기업만 서브셋 만들기
subset_dat = dataset.loc[dataset["comp_type"].isin(["tech", "fmcg"])]

# tech와 fmcg 기업의 연도별 평균 매출총이익률 계산
subset_dat_avg = subset_dat.pivot_table(index=["Year", "comp_type"], values = "gross_margin").reset_index()

# company 열 추가
subset_dat_avg["company"] = np.where(subset_dat_avg["comp_type"]=="tech", "Avg tech", "Avg fmcg")

# DataFrame 연결
plot_df = pd.concat([subset_dat, subset_dat_avg], axis=0)

# 플롯 그리기
sns.relplot(data=plot_df.reset_index(drop=True), x="Year", y="gross_margin", hue="company", col="comp_type", kind="line")
plt.show()
plt.close()

이번 연습 문제에서는 tech와 FMCG DataFrame에 대해 동일한 작업을 반복하고 있음을 확인할 수 있습니다. 이는 DRY(Don't repeat yourself, 반복 금지)라는 코딩 원칙에 어긋납니다. 반복 코드는 작업량을 늘리고 실수 가능성도 높입니다. 이번에는 데이터를 처리하고 그림을 그리는 함수를 직접 정의해 보겠습니다.

निर्देश 1/2

undefined XP
    1
    2

प्रश्न

다음 함수를 살펴보세요. 이 함수는 이전 연습 문제에서 만든 것과 동일한 플롯을, 반복 코드를 제거한 형태로 만들어 줍니다.

def make_plot(dataset, ratio, comp_type):
  whole_dat = []
  for industry in comp_type:
    dat = dataset.loc[dataset["comp_type"]==industry]
    dat_avg = dat.pivot_table(index="Year", values=ratio).reset_index()
    dat_avg["company"], dat_avg["comp_type"] = f"Avg {type}", industry"
    whole_dat.append(pd.concat([dat, dat_avg]))

  plot_df = pd.concat(whole_dat).reset_index(drop=True)
  sns.relplot(data=plot_df, x="Year", y="gross_margin", hue="company", col="comp_type", kind="line")
  plt.show()
  plt.close()

이 함수는 f"Avg {industry}"와 같은 f-string을 사용합니다. 이 f-string은 출력으로 Avg와 industry의 값을 함께 반환합니다. 또한 reset_index()에 drop=True가 있는 점에도 주의하세요. 이것은 DataFrame의 인덱스를 재설정하지만 예전 인덱스를 열로 추가하지는 않습니다.

이 함수는 몇 개의 comp_types를 받을 수 있을까요? 함수는 콘솔에 로드되어 있으니 직접 테스트해 보세요. pandas DataFrame dataset도 매출총이익률이 계산된 상태로 제공됩니다.

संभावित उत्तर