오늘도 조용히 공부하는 타닥타닥 모닥불🔥 이번 시각화는 산점도(scatter plot)를 활용하여 버블차트(Bubble chart)와 산점도 매트릭스(scatter matrix)를 그려볼 것이다.
이미지를 클릭하면 강의 사이트로 이동한다.
* 가입 시 5천원 주는 추천인 코드: EQQW-36EH-JY4P 추가해주시면 감사합니다.
🔥 강의 목차
오리엔테이션
파이썬 기초 문법
데이터 전처리
데이터 시각화
마케팅 데이터 분석 및 지표 정의하기
🔥 마케팅 데이터 전처리 &자동화 프로젝트(9) 버블차트 Bubble Chart
산점도를 그릴 때는 수치형 변수 x, y 간의 관계를 보여주고, 각 속성별 색깔을 표시할 수 있었다.
산점도는 많아 봐야 2-3가지 속성을 보여주지만 버블차트를 활용하면 버블의 크기, 색상 등을 통해 더 많은 특징을 표현할 수 있다.
여기에서 사용하는 데이터는 아래 데이터로, 광고 캠페인에 대해서 1번의 클릭을 유도하기 위해 사용한 비용(cost_per_click), 노출 단위 당 가격(cost_per_impr), 1달간 사용한 비용(monthly_cost), ROAS 를 나타낸 데이터이다.
똑같이 scatter plot을 그린 다음, size와 color, hover_name 등 옵션을 설정해주면 된다.
# Bubble chart 그리기
fig = px.scatter(
df_campaigns,
x = 'cost_per_click',
y = 'cost_per_impr',
size = 'monthly_cost', # 버블 크기: 월 비용
color = 'roas', # 색상: 효율
hover_name = 'campaign' # 툴팁의 타이틀로 들어간다.
)
fig.show()
위와 같은 그래프가 그려지는데, 색깔이 노란색으로 갈수록 ROAS가 높고, 광고 효율이 좋다는 의미이다. 보라색으로 갈수록 효율이 좋지 않다는 의미. 동그라미의 크기는 한달간 사용하는 비용인데, 작으면 투자를 적게 하고 있다는 의미이고 크면 투자를 많이 하고 있다는 의미이다.
마우스를 동그라미에 올리면 어떤 캠페인인지 Hover name으로 표시된다.
- 캠페인 D는 노란색으로 광고 효율(ROAS)이 높음에도 불구하고, 비용이 한정되어 있다. 캠페인 D에 투자를 늘리면 좋지 않을까?
- 캠페인 B는 광고 효율이 좋은 편에 속하고, 투자하고 있는 비용도 크기 때문에 잘 하고 있는 부분이라고 볼 수 있다.
- 캠페인 E는 효율이 좋지 않은데 비해 비용을 많이 사용하고 있다. 이 비용을 광고 효율이 좋은 D에게 몰아주면 어떨까?
버블차트로 다양한 요인을 시각화하면 위와 같은 인사이트들을 얻을 수 있다.
🔥 마케팅 데이터 전처리 &자동화 프로젝트(9) 산점도 매트릭스 scatter matrix
산점도 매트릭스는 하나의 쌍에 대해 한 그래프만 그리는 것이 아니라, 모든 쌍에 대한 산점도를 여러개 나타내는 것이다.
산점도 매트릭스의 코드 스니펫은 아래와 같다.
예를 들어 A, B, C 변수가 있다면 AA, AB, AC, BA, BB, BC, CA, CB, CC라는 조합이 가능하므로 총 9개의 그래프가 나온다.
import plotly.express as px
fig = px.scatter_matrix(df,
dimensions=["col_1", "col_2"], # 주로 numeric
color="col_3", # 주로 categorical
opacity=0.5 # 투명도를 50%
)
fig.show()
산점도와 동일하게 iris 데이터를 사용한다고 하면, sepal_length, sepal_width, petal_length, petal_width 네 가지 변수에 대해 모든 가능한 조합의 산점도를 그려볼 수 있다. 4*4 = 16개의 산점도 그래프가 한 번에 그려진다.
import seaborn as sns
iris= sns.load_dataset('iris')
import plotly.express as px
fig = px.scatter_matrix(iris,
dimensions=["sepal_length", "sepal_width", "petal_length", 'petal_width'], # 주로 numeric
height = 500, width = 500,
opacity=0.5 # 투명도를 50%
)
fig.show()
왼쪽 상단에서부터 오른쪽 아래까지 완전한 직선으로 표시된 부분은 자기끼리의 상관이므로 무조건 완전한 직선 상의 그래프가 표시된다. 이를 제외하면, petal_length와 petal_width 끼리의 그래프가 거의 일자로 상관관계가 높다.
종(species)에 따라 색깔을 다르게 표시할 수도 있다.
import plotly.express as px
fig = px.scatter_matrix(iris,
dimensions=["sepal_length", "sepal_width", "petal_length", 'petal_width'], # 주로 numeric
height = 500, width = 500,
color="species", # 주로 categorical
opacity=0.5 # 투명도를 50%
)
fig.show()
실제로 가능한 모든 조합의 상관계수를 구해보면, petal_length와 petal_width 간의 상관계수가 0.96으로 굉장히 높은 것을 볼 수 있다.
# 가능한 모든 조합의 상관계수를 출력
iris[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']].corr()