본문 바로가기
데이터시각화

[메타코드] 파이썬 입문 데이터분석 프로젝트 만들기 (4) px.line() 파이썬으로 선 그래프 그리기

by 모닥불🔥 2024. 6. 30.

 

이번 글은 간단한 시각화 파트이다. 이미지를 클릭하면 강의 사이트로 이동한다.

가입 시 5천원 주는 추천인 코드: EQQW-36EH-JY4P 추가해주시면 감사합니다.

 

내가 6개월간 메타코드에서 서포터즈 활동을 하며 들은 강의가 생각보다 많은데,

SQL 부트캠프와 링고 선생님의 파이썬 데이터분석 프로젝트 강의(본 강의)는 정말 강추한다.

두 강의 모두 진짜 왕초보여도 따라갈 수 있으며, 그렇다고 난이도가 너무 낮지도 않다.

실제 업무에 사용될 것 같은 예시 데이터들을 사용하여 예시 문제를 여러개 내주기 때문에 연습하기 엄청 좋다. 추천!


🔥 강의 목차

오리엔테이션
파이썬 기초 문법
데이터 전처리
데이터 시각화
마케팅 데이터 분석 및 지표 정의하기

🔥 마케팅 데이터 전처리 &자동화 프로젝트(4) 선 그래프

이번에는 선 그래프를 그려보려고 한다. line 그래프는 시간에 따른 데이터의 변화나 추세를 나타낼 때 사용한다. 예를 들면 시간에 따른 주식 가격 변동이나 기온 변화 등을 나타낼 때 용이하다. 라인그래프도 아래 코드스니펫을 활용해서 그래프를 쉽게 그릴 수 있다.

import plotly.express as px

# 선 그래프 생성
line_fig = px.line(df
    , x="col_1"  # X축에 표시할 컬럼
    , y="col_2"  # Y축에 표시할 컬럼
    , color="col_3"  # 각 선의 색상을 구분하기 위한 컬럼
    , facet_col="col_4"  # 서브플롯을 구분하기 위한 컬럼 (세로로 나누기)
    # facet_row="col_5"를 사용하면 가로로 나눌 수 있음
    , title="title_name"  # 그래프의 제목
)
# line_fig.update_layout(xaxis_title="x_title_name", yaxis_title="y_title_name")

# 선 그래프 표시
line_fig.show()

 

예시 데이터는 아래와 같음!

tras_id는 고유식별자, date는 날짜, amount는 거래 금액, payment는 범주형 데이터로 현금/카드 등 결제 방식을 나타낸다. 

 

일단 집계를 해보자! - date기준 그룹화, amount sum

df_agg1 = df.groupby(by = 'date').amount.sum().reset_index()

 

1) 기본적인 line 그래프

date와 amount로 기본적인 선 그래프를 그려보려고 한다.

import plotly.express as px

line_fig = px.line(df_agg1
    , x="date"  # X축에 표시할 컬럼
    , y="amount"  # Y축에 표시할 컬럼
)

line_fig.show()

2) payment에 따른 amount의 차이

위에서는 단순히 날짜별 거래금액만 봤다면, 이번에는 payment(현금/카드)별 거래 금액 그래프를 따로 보고 싶다.

이럴 때는 groupby()를 이용해 date, payment로 묶은 다음 집계하면 따로 그래프를 그려볼 수 있다.

df_agg2 = df.groupby( by = ['date', 'payment'])['amount'].sum().reset_index() # 집계

import plotly.express as px

# 선 그래프 생성
line_fig = px.line(df_agg2
    , x="date"  # X축에 표시할 컬럼
    , y="amount"  # Y축에 표시할 컬럼
    , color="payment"  # 각 선의 색상을 구분하기 위한 컬럼
)

line_fig.show()

 

일반적으로 카드 사용량이 더 많다는 것을 알 수 있음!

 

3) facet_col/row

facet_col/row 에 지정된 컬럼의 고유값마다 별도의 그래프가 생성되게 할 수 있다.

 

먼저, groupby로 date, payment, category별 거래 금액을 집계한 뒤 그래프를 그려보자.

# date, payment, category 집계
df_agg3 = df.groupby( by = ['date', 'payment', 'category']).amount.sum().reset_index()

import plotly.express as px

line_fig = px.line(df_agg3
    , x="date"
    , y="amount"
    , color="payment"
)

line_fig.show()

Hover에 category 정보를 표시하는 코드를 추가해보자.

import plotly.express as px

line_fig = px.line(df_agg3
    , x="date"  # X축에 표시할 컬럼
    , y="amount"  # Y축에 표시할 컬럼
    , color="payment"  # 각 선의 색상을 구분하기 위한 컬럼
    , hover_data = {
        'category' : True
    }
)

line_fig.show()

 

이제, facet_col, facet_row를 넣으면 어떻게 되는지 보자.

먼저 facet_col = 'category'를 하면 아래와 같이 컬럼 기준으로 그래프가 쪼개진다. 카테고리 이름이 상단에 적혀 있기 때문에 카테고리별 그래프를 비교해볼 수 있다.

import plotly.express as px

line_fig = px.line(df_agg3
    , x="date"
    , y="amount"
    , color="payment"
    , facet_col="category"  # 서브플롯을 구분하기 위한 컬럼 (세로로 나누기)
    , hover_data = {
        'category' : True
    }
)

line_fig.show()

 

facet_row로 그래프를 쪼개면, 아래와 같이 가로로 그래프를 나눌 수 있다.

import plotly.express as px

line_fig = px.line(df_agg3
    , x="date"
    , y="amount"
    , color="payment"
    , facet_row="category"     # 를 사용하면 가로로 나눌 수 있음
    , hover_data = {
        'category' : True
    }
)

line_fig.show()

 

선 그래프를 그려보고 얻은 결론은,

  • 현금(cash)보다 카드(card)의 수익성이 더 좋다.
  • 전반적으로 카테고리 B에 비해 카테고리 A의 수익성이 더 높다

강의에는 대부분 예시 문제들이 포함되어 있고, Ringo 선생님이 직접 풀이도 해주신다. 다만, 본 블로그에 정리할 때는 되도록 예시 문제를 싣지 않으려 노력했다. :) 원하는 분들은 직접 강의를 구매하고, 풀어보면 좋을 것 같다.

 

* 본 게시글은 '메타코드'의 동의를 받아 작성된 글로, 강의 내용에 대한 모든 저작권은 Ringo 선생님에게 있습니다. 개인용도의 학습 외에 무단사용은 엄격히 금지됩니다. 위반 시 법적 조취가 취해질 수 있습니다.