OkBublewrap

2024-11-27 TIL (데이터 분석 가설, SQL Pivot Table, Limit) 본문

Today I Learning

2024-11-27 TIL (데이터 분석 가설, SQL Pivot Table, Limit)

옥뽁뽁 2024. 11. 27. 13:36

아티클 # 2 리뷰

https://www.beusable.net/blog/?p=2185

 

데이터 분석 가설 구축을 위해 해야 하는 3가지 질문 | 뷰저블

올바른 가설 수립은 올바른 질문으로부터 시작합니다.

www.beusable.net

사람이 해야 하는일

  1. 과제 설정 : 어떤 데이터가 필요한가?
  2. 목표 설정 : 해당 데이터를 통해 조직의 어떤 목표를 달성할 것인가?
  3. 가설 수립 : 해당 목표를 어떤 방향으로 달성할 것인가?

 

가설은 조직의 길라잡이이자 사고의 보조자

가설 수립은 문제가 무엇인지를 명확하게 이해하는 것으로부터 시작됩니다.

-> 왜 데이터 분석을 해야 하는가?에 대한 문제 파악

-> 그 이후 해당 문제 해결을 위해서는 어떤 범위 내의 데이터가 필요한지, 해당 데이터를 어떻게 분석해나갈 것인지 검토

 

 

올바른 가설 수립은 올바른 질문으로부터 시작된다.

1. 우리 조직 또는 서비스가 당면한 문제가 무엇인가?

우리가 처한 문제 파악에 긴 시간을 투자해야 한다.

 

 

2. 문제를 해결하려면 어떤 데이터가 필요한가?

해당 문제를 해결하기 위해서 어떤 데이터를 살펴봐야 하는지 정리(데이터에 우선순위, 분석 툴, 데이터 범위)

 

 

3. 해당 데이터를 누가 어떻게 분석할 것인가?

해당 데이터를 누가, 어떻게 분석 할 것인지 분석에 대한 계획(액션 방안) 도출

 

 

결론

가설은 분석가가 수립을 해야 하고, 수립하는 방법에는 정답이 없으며 그렇기 때문에 될 수 있는 많은 데이터를 살펴보고, 더 많은 가설을 직접 수립해보는것.

 

데이터 문해력에 나왔던 내용이고 강조했던 내용이다.

예시) 고객 이탈 문제를 해결하기 위해서 필요한 데이터는 고객 행동 데이터, 고객 특성 데이터, 피드백 데이터, 벤치마크 데이터가 있고, 여기서 우선 순위는 고객 행동 데이터 -> 고객 특성 데이터-> 피드백 데이터로 이어진다.

다음은 누가 데이터 범위를 어떤 툴로 분석을 할 건지 해야한다. (마감일은 필수)

어떻게 액션 방안을 도출 할 것인지 중요!

 

SQL

Pivot-Table

SELECT order_date, ship_country
FROM nw.orders;

 

1. 연도별, 국가별 주문건수 구하기

SELECT date_part('year', order_date) as year, ship_country AS country, count(*)
FROM nw.orders
GROUP BY 1, 2;

 

2. 국가가 많아 대륙으로 변환

SELECT date_part('year', order_date) as year,
	CASE 
	    WHEN ship_country IN ('Argentina', 'Venezuela', 'Brazil', 'Mexico') THEN 'South America'
	    WHEN ship_country IN ('USA', 'Canada', 'Mexico') THEN 'North America'
	    WHEN ship_country IN ('Spain', 'Switzerland', 'Italy', 'Belgium', 'Norway', 'Sweden', 'France', 
	                     'Austria', 'Poland', 'UK', 'Ireland', 'Germany', 'Denmark', 
	                     'Portugal', 'Finland') THEN 'Europe'
	    ELSE 'Unknown'
	END AS continent
	, count(*)
FROM nw.orders
GROUP BY 1, 2;

 

3. 연도별 국가별 주문 건수

SELECT 
    year, 
        SUM(CASE WHEN continent = 'South America' THEN cnt ELSE 0 END) AS South_America,
        SUM(CASE WHEN continent = 'North America' THEN cnt ELSE 0 END) AS North_America,
        SUM(CASE WHEN continent = 'Europe' THEN cnt ELSE 0 END) AS Europe,
        SUM(CASE WHEN continent = 'Unknown' THEN cnt ELSE 0 END) AS Unknown
FROM (
    SELECT 
        date_part('year', order_date) AS year,
        CASE 
            WHEN ship_country IN ('Argentina', 'Venezuela', 'Brazil', 'Mexico') THEN 'South America'
            WHEN ship_country IN ('USA', 'Canada', 'Mexico') THEN 'North America'
            WHEN ship_country IN ('Spain', 'Switzerland', 'Italy', 'Belgium', 'Norway', 'Sweden', 
                                   'France', 'Austria', 'Poland', 'UK', 'Ireland', 'Germany', 
                                   'Denmark', 'Portugal', 'Finland') THEN 'Europe'
            ELSE 'Unknown'
        END AS continent,
        COUNT(*) AS cnt
    FROM nw.orders
    GROUP BY 1, 2
) a
GROUP BY year
ORDER BY year;

 

SQL 2회차

LIMIT offset, count

  • offset : 건너뛸 행의 수
    • 즉, 실제로 반환되는 데이터는 offset+1 번째 행 부터 시작
  • count : 그 이후에 가져올 행(row)의 수
-- 3번째 행부터 5개의 데이터를 조회
SELECT *
FROM employees
ORDER BY age DESC
LIMIT 2, 5

 

LIMIT 10을 정수형을 주로 작성을 했는데 행을 나눠서 볼 수 있다는 것을 배웠다.