개발공부/SK Networks Family AI bootcamp 강의노트

15일차 [ 데이터 시각화 심화 ]

HyunJung_Jo 2025. 2. 5. 09:18

https://colab.research.google.com/drive/1d50SyNgswBnMuieAEhA3Rdtw62gYpId0#scrollTo=5U1b6fqYnNCf

 

Google Colab Notebook

Run, share, and edit Python notebooks

colab.research.google.com

배웠던 것중에 인상 깊은 것 몇 가지만 써놓겠다.

 

1. 증가률 feature 새로 추가 (pct_change)

df_by_airlines = df_comp_sum.groupby("항공사별(1)")
# 연간 운항 편수 증가율 계산
df_comp_sum.loc[:,"운항 (편)_증가율"] = df_by_airlines["운항 (편)"].pct_change() * 100

# 연간 여객 수 증가율 계산
df_comp_sum.loc[:,"여객 (명)_증가율"] = df_by_airlines["여객 (명)"].pct_change() * 100
df_comp_sum.head()

df_comp_sum.loc[:,"화물 (톤)_증가율"] = df_by_airlines['운항 (편)'].pct_change() * 100

 

2. condition, drop(inplace)

조건으로 df 가져오고 필요없는 열은 drop하되 drop한 df은 inplace=True로 copy가 아닌 원본으로 가져온다.

cond1 = df_comp_sum['항공사별(1)'] !="합계"
cond2 = df_comp_sum['도착출발별(1)']=='계'

cond = cond1 & cond2
df_sum1 = df_comp_sum.loc[cond]
df_sum1
df_sum1.drop(['도착출발별(1)'], axis=1, inplace=True)
df_sum1

 

3. groupby, agg

feature로 grouping하여서 필요한 feature의 평균값을 가져온다.

df_sum1.groupby(['시점'])[['운항 (편)_증가율', '여객 (명)_증가율','화물 (톤)_증가율']].agg('mean')

 

4. secondary_y

두 개의 그래프의 두 개의 y축을 보이고 싶을 때 쓴다. y값의 범주가 서로 다를 경우 범주가 적은 쪽의 데이터 그래프가 단조롭고 증감률이 없어보일 수 있다.

# 출발별 연간 운항 편수 및 여객 수 분석
departure_stats = df_comp_arrive.groupby("시점")[["운항 (편)", "여객 (명)"]].sum()

departure_stats.plot(secondary_y="여객 (명)") # 여객 명수를 보기 위해 y축 추가
# departure_stats.plot()

 

5. 시간 parsing

object dtype인 시점을 datetime으로 바꾼 후에 년,월,일,요일 로 parsing해서 feature로 지정한다.

# 시간에 따른 화물 운송량 시각화
df_comp_sum["시점"] = pd.to_datetime(df_comp_sum["시점"])  # 날짜 형식으로 변환
df_comp_sum["년"] = df_comp_sum["시점"].dt.year
df_comp_sum["월"] = df_comp_sum["시점"].dt.month
df_comp_sum["일"] = df_comp_sum["시점"].dt.day
df_comp_sum["요일"] = df_comp_sum["시점"].dt.dayofweek # (월 = 0)

 

6. 특정 feature간 의 추이 비교

내가 원하는 feature의 특정값을 가져와서 x로 지정하고, feature간의 추이를 비교하기.

feature 짬뽕 시키기!

plt.figure(figsize=(12, 6))
plt.plot(df_comp_sum[df_comp_sum["항공사별(1)"] == "아시아나항공"]["년"], 
         df_comp_sum[df_comp_sum["항공사별(1)"] == "아시아나항공"]["화물 (톤)"], 
         label="아시아나항공")
plt.plot(df_comp_sum[df_comp_sum["항공사별(1)"] == "대한항공"]["년"], 
         df_comp_sum[df_comp_sum["항공사별(1)"] == "대한항공"]["화물 (톤)"], 
         label="대한항공")
plt.xlabel("년도")
plt.ylabel("화물 운송량 (톤)")
plt.legend()
plt.title("년도별 아시아나 항공과 대한항공의 화물 운송량 추이")
plt.show()

 

7. crosstab

Compute a simple cross tabulation of two (or more) factors.

By default, computes a frequency table of the factors unless an array of values and an aggregation function are passed.

year_comp = pd.crosstab(index=df_comp_sum["년"],
            columns=df_comp_sum["항공사별(1)"],
            values=df_comp_sum["여객 (명)"],
            aggfunc="sum").fillna(0)

year_comp.style.background_gradient(axis=None).format("{:,.0f}")

 

 

데이터 짬뽕씨켜서 시각화하는 건 많이 못해봤다. 그래서 나름대로 할만한 것 같다.
이와 비슷한 데이터셋으로 통계 분석해보라고 하시는데, 뭘로 해야할 지 고민이