주제 : 데이터 분석 보고서 작성하기
내용 : 단순히 개별 지표를 추출하는 것을 넘어 이를 시각화하여 보고서 형태로 만들어 봅니다. 이를 위해 먼저 지표라는 것이 무엇인지, 어떻게 정의하고 측정할 것인지 알아봅니다. 그리고 다양한 표와 그래프를 활용한 시각화 방법과 데이터 분석 보고서 작성 방법에 대해 알아보고 직접 보고서를 작성합니다.
진행순서 :
지표에 대한 이해 > 다양한 시각화 방법 > 분석 보고서 작성 방법 > 실전 분석 보고서 작성 업무를 수행
# 지표에 대한 이해
지표란 기업에서 어떤 대상의 성과 평가를 하기 위해 사용되는 기준을 말한다. CTR(노출수), CVR(전환율) 등이 있다.
팀에서 관리하는 지표를 추출하거나 추이를 모니터링 하면서 현황을 분석하는 일을 한다. 이를 위해 서비스 프로세르를 이해해야하고 다양한 로그 데이터와 DB에서 원하는 데이터를 적절히 뽑아낼 수 있는 능력이 필요하다.
보통은 정해져있는 지표가 있지만 새로운 지표를 정의하거나 기존에 있는 지표에대해 개선 아이디어를 도출하는 업무를 맡기도 한다.
좋은 지표란?
- 수치로 나타낼 수 있어야한다.: 객관적이고 명확한 의미를 갖기 위해
- 절댓값보다는 비율로 나타내야한다.:%로 표현 할 수 있어야 한다
- 핵심을 위한 최소한의 지표만 남겨야 한다.:지표가 너무 많으면 제대로된 인사이트를 얻기 힘들다.
# 다양한 데이터 시각화
1. 데이터 시각화가 중요한 이유
분석한 결과를 숫자나 문자만으로 전달하면 알아보기 어렵고, 또 전체적인 패턴이나 관계를 발견하기 어렵기 때문에 시각화를 합니다.
따라서 시각화는 다른 사람과 커뮤니케이션 하기 위해서도 중요하고, 분석하는 과정 자체에서도 필수적입니다.
2. 시각화 종류
모든 2차원 그래프의 해석은 ‘x축을 기준으로 y축을 설명’하는 방향으로 하게됩니다. 예를들어 키와 몸무게의 관계를 2차원 상에 나타낸다면 ‘키에 따른 몸무게의 변화’를 알고싶은 경우에는 키를 x축, 몸무게를 y축으로, 반대로 ‘몸무게에 따른 키의 변화를 알고싶은 경우에는 몸무게를 x축, 키를 y축으로 나타내시면 됩니다. 이것을 기본으로 알아두시고 다음 시각화 종류를 보도록 하겠습니다.
a. 산점도 (Scatter Plot)
산점도는 변수간의 관계를 가장 직관적으로 볼 수 있는 시각화 방법입니다. 거의 모든 데이터 분석 과정에서 데이터 분포를 파악하기 위한 방법으로 산점도를 그려보는 경우가 많습니다. 직선 혹은 곡선 형태로 추세선을 그려볼 수도 있습니다.
b. 꺾은선 그래프 (Line Chart)
각 데이터 포인트를 선으로 연결한 시각화 방법입니다. 가장 기본적인 시각화 방법중에 하나로 x값에 따른 y값의 변화량을 나타내고자 할 때에 많이 쓰입니다. 동시에 여러 데이터를 표현하고 각각을 선의 색깔이나 모양(점선) 등으로 구분하기도 합니다.
c. 막대 그래프 (Bar Chart)
꺾은선 그래프와 비슷하지만, x축이 범주형 변수일 때에 사용하고, 또 값의 변화 보다는 x값에 따른 y값의 볼륨 자체를 더 의미있게 나타내고자 할때 많이 쓰입니다. 동시에 여러 데이터를 표현하는 방법에는 각각을 개별적인 막대로 표현하는 방법과, 한 막대에 쌓아서(stacked) 비중을 한눈에 볼 수 있도록 표현하는 방법이 있습니다.
d. 히스토그램 (Histogram)
막대 그래프와 유사해 보이지만 전혀 다른 시각화 방법입니다. 막대 그래프는 x축이 범주형인 경우에 사용하고, 히스토 그램은 y축이 수치형 변수인 경우에 사용합니다. 또 표현하는 내용도 전혀 다릅니다. x축은 각 계급을 나타내고, y축은 그 계급에 속하는 데이터의 빈도수를 나타냅니다. 히스토그램을 도수분포표라고 하기도 합니다.
e. 파이 차트 (Pie Chart)
파이 차트는 각각의 비율을 쉽게 알아볼 수 있는 시각화 방법입니다. 하지만 데이터 종류가 많아지면 너무 복잡해지고, 각각의 비율 차이가 시각적으로 한 눈에 잘 구분되지 않는다는 단점이 있습니다. 아래 그래프에서 6%를 차지하는 연두색 부분의 너비와, 5%를 차지하는 진한 빨간색 부분의 너비가 얼핏보았을때 어떤 것이 더 넓은지 눈에 잘 들어오시나요? 개인적으로는 구분이 쉽지 않아보입니다. 이 경우에는 숫자로 비율을 표시해 주어서 그나마 낫습니다만, 이런 문제로 인해서 파이차트는 사용에 주의하셔야 합니다.
f. 박스 플롯 (Box Plot)
Box Plot 혹은 Box and Whisker Plot 이라고 합니다. 우리나라 말로는 상자 그림 혹은 상자 수염 그림 정도가 되겠습니다. 사분위수, 최대 최소값, 이상치 등을 나타내 데이터 분포를 한 눈에 파악할 수 있습니다. 여러 박스 플롯을 한 평면상에 그려서 서로 비교할 수도 있습니다.
# 분석 보고서 작성 방법
가설로 시작을 한다. 검증하고자 하는 가설을 정하고 그 가설을 검증하기 위해 분석한 내용을 서술한 뒤 그 과정에서 얻은 인사이트를 최종 결론으로 첨부.
가설 검증은 가설을 검증하기 위한 지표를 정하고 그 값을 분석함으로 이루어진다.
결국, '가설수립 > 가설 검증을 위한 지표 선정 > 지표 측정 및 분석 > 분석 결과 및 결론' 순서로 진행 된다.
논리적, 객관적으로 작성하는 것이 가장 중요하다.
# 분기별 총 매출
select a.`분기`, a.product_name, a.`매출액`,
from (select quarter(order_date) as '분기', products.product_name, sum(quantity * unit_price) as '매출액' from order_details
inner join orders on orders.id = order_details.order_id
inner join products on products.id = order_details.product_id
where quarter(order_date) = 1
group by quarter(order_date), product_name
order by sum(quantity * unit_price) desc
limit 5) as a
union
select b.`분기`, b.product_name, b.`매출액`
from (select quarter(order_date) as '분기', products.product_name, sum(quantity * unit_price) as '매출액' from order_details
inner join orders on orders.id = order_details.order_id
inner join products on products.id = order_details.product_id
where quarter(order_date) = 2
group by quarter(order_date), product_name
order by sum(quantity * unit_price) desc
limit 5) as b
# 분기별 지역 총 매출
select a.`분기`, a.`매출액`, ANY_VALUE(a.ship_state_province) as '배송 지역' , a.product_name as '상품'
from (select quarter(order_date) as '분기', orders.ship_state_province ,products.product_name, sum(quantity * unit_price) as '매출액' from order_details
inner join orders on orders.id = order_details.order_id
inner join products on products.id = order_details.product_id
where quarter(order_date) = 1
group by quarter(order_date), orders.ship_state_province , products.product_name
order by sum(quantity * unit_price) desc
limit 5) as a
union
select b.`분기`, b.`매출액`, ANY_VALUE(b.ship_state_province) as '배송 지역', b.product_name as '상품'
from (select quarter(order_date) as '분기', orders.ship_state_province ,products.product_name, sum(quantity * unit_price) as '매출액' from order_details
inner join orders on orders.id = order_details.order_id
inner join products on products.id = order_details.product_id
where quarter(order_date) = 2
group by quarter(order_date), orders.ship_state_province , products.product_name
order by sum(quantity * unit_price) desc
limit 5) as b
# 고객의 직업별 구매 금액
select c.job_title, sum(od.quantity * od.unit_price) `구매금액` from orders o
left join order_details od
on o.id = od.order_id
left join customers c
on c.id = o.customer_id
group by c.job_title
order by `구매금액` desc
'코멘토' 카테고리의 다른 글
[4주차 - 과제] SQL 입문부터 활용까지 - 데이터 분석 보고서 작성과 대시 보드 개발 (0) | 2021.04.25 |
---|---|
[2주차 - 과제] SQL 입문부터 활용까지 - 데이터 분석 보고서 작성과 대시 보드 개발 (0) | 2021.04.14 |
[1주차 - 과제] SQL 입문부터 활용까지 - 데이터 분석 보고서 작성과 대시 보드 개발 (0) | 2021.04.02 |
[1주차]SQL 입문부터 활용까지 - 데이터 분석 보고서 작성과 대시 보드 개발 (0) | 2021.03.31 |
4주차 과제 : 데이터 구조 설계 및 탐색적 데이터 분석 수행 (0) | 2021.03.16 |