본문 바로가기

book

SQL로 시작하는 데이터 분석

SQL은 데이터 분석에 기본이 됩니다.

데이터는 기본적으로 Database에 저장되고 관리되기 때문입니다.

요즘은 ORM이 많이 사용하고 있어서 실제 쿼리 없이 JPA도 많이 사용하고, Sqlalchemy 및 Framework자체적으로

지원하는 경우도 많습니다. R을 통해서 데이터 조회를 해보실수도 있고, Pandas를 이용해서 Grid형태로 데이터를 조회 하실수도 있고

방법은 정말 다양합니다. 즉 처음 개발을 쿼리보다 ORM 및 다른 방법을 먼저 접해보셨다면 쿼리가 더 어색할수도 있습니다.

하지만, 경우에 따라서 많이 직접 쿼리를 사용해야지 처리가 가능한 부분도 많이 있고, Data를 사용하고 처리하는 역활에서는

기본적으로 SQL을 통한 쿼리를 작성할수 있어야 합니다.

 

이런 질문이 떠올랐습니다. 

상대적으로 SQL은 배우가가 쉽습니다. 몇가지 문법만 알면 됩니다.

그래서 SQL을 잘 사용하는 기준이 어떻게 될까?? 라는 궁금증이 생겼습니다.

 - Join을 잘 작성해서 Driven Table을 잘 정해서 속도가 잘나오는 쿼리 작성?

 - Function / Procedure등을 잘 작성하는것?

 - DB에서 기본 제공 기능을 잘 사용하는것?  (기존제공 함수들)

 - 기간별로 통계정보를 추출하는 복잡한 쿼리를 잘 작성하는것?

 

다양한 의견이 있을것 같습니다. SQL의 역활은 우리가 의도한 정보를 정확히 조회하여서 결과를 제공하는 역활을 하는것입니다.

너무 어렵게 생각할 필요는 없을거 같다는 생각이 들었습니다.

이 SQL책을 통해서 우리가 알지 못했거나, 조금 더 효율적이 방법을 알 수 있지 않을까 생각이 들었습니다.

SQL에서 가장 난이도가 높은 영역은 데이터 분석이라고 생각하기 때문입니다.

SQL에 L은 Language를 의미합니다. (쉽게 프로그램 언어처럼, Data를 다루는 언어입니다.)

 

책의 두께는 중간정도인데, 종이가 얇은 재질이라 생각보다 페이지 수가 좀 됩니다. (p.435)

 

■ 데이터 분석을 위해서 SQL, Python, R 선택 고민

· 보통 SQL은 기본적으로 알고 있고 Pyhon vs R에 대한 비교글들이 많이 있습니다.

  개인적인 생각은 자신이 가장 편하게 접근하고, 해보고 싶은 것으로 선택하는 것이 좋다는 생각입니다.

  개발 직군으로 언어를 1가지 이상 다루어보셨거나, python을 이용해보셨으면 python이 접근성이 더 좋을거 같습니다.

· 해당 책은 SQL을 통한 데이터 분석 책이라 SQL vs (Python, R)과 선택하는 기준 내용이 있습니다.   

  (가장 중요한 부분은 DataBase가 기본적인가 아닌가 여부일거 같습니다. SQL은 DB가 없으면 사용이 불가능하니까요)

 

■ 내용 살펴보기

· 우리는 날짜 컬럼의 타입을 어떻게 정하고 있을까요?

  기존에 생성된 타입을 관습적으로 사용하지 않을까요?

  일반적인 데이터를 처리하는 입장에서는 크게 문제될거 같지는 않은데, 해당 데이터를 가지고 분석을 하는 입장에서는

  이 작은 요소가 매우 중요한 항목이라고 생각이 됩니다.

 

· Join의 핵심 내용이 잘 정리된 글입니다. (막상 left, right join에 대해서 말로 풀어서 설명하기 애매할수 있을거 같습니다)

 

· SQL을 좀더 잘 다루어보자

1) 구간화 : 구간 범위 설정에 로그를 사용하기도 합니다.

     데이터셋에서 가장 작은 값과 큰값들의 차이가 매우 큰 경우 유용

select log(sales) from table;

2) N분위수

범주내에서 순위를 정하는 기능입니다.

ntile안에 숫자는 1~100등까지 구한다고 생각하면 됩니다.

ntile(10) 이면 1~10등까지 구하는 것입니다.

# ntile(num_bins) over (partition by ... order by ...)

select ntile(100) over (order by no), no from user;

3) 타입변환 및 캐스팅

보통 cast(1234 as varchar)처리 대신에 1234::varchar 형태로 구성가능 하다고 합니다.

제가 해보았을때는 잘 안되었네요.

추가로 "2.5.3 null값 다루기", "2.5.4 결측 데이터 (값 채우기)" 및 "2.6. 데이터 세이핑"의 내용을 통해서 데이터를 처음 조회하기 위해서

구성하기 위해서 필요한 내용들로 구성되어 있습니다.

 

<3장> 에서는 시계열 분석에 대해서 다룹니다.

데이터는 생성되는 시간요소를 가지고 있습니다. 데이터의 경향 및 증가/감소 여부등은 자연스럽게 분석해보고 싶은 기본적인 요소입니다.

시계열에서는 날짜/시간 요소를 핸들링 하는 기준이 있어야 합니다.

☞ 시간대 변환

    국가별 시간대는 모두 다릅니다. 전세계적으로 "표준시간대"가 있고 UTC를 사용합니다.

    로컬시간대로 UTC오프셋값을 통해서 구성되어 있습니다.

    PDT, PST등에 대해서도 다양한 기준이 있습니다. (https://luran.me/339)

날짜 및 타입스탬프 형식 변환

# 날짜 또는 시간을 변환
current_timestamp
localtimestamp
get_date()  # 이것은 ()이 있음
now()		# 이것은 ()이 있음

# 타임스탬프의 시간 부분만 변환
current_time
localtime
timeofday() # 이것은 ()이 있음

census.gov에서 제공하는 '월간 소매업 거래 보고서'를 통해서 다양한 실습을 진행합니다.

    여기서 중요한 개념에 대해서 설명합니다. 

    시계열로 데이터를 뽑을때 중간에 데이터가 누락되어 있을수 있습니다. 경향을 보러면 해당 시점의 데이터를 채워야 합니다.

    예를 틀어서 1,2,3,4,5월달의 주문내역을 조회한다고 했을때, 2월달에 거래가 1건도 없다고 하면 select한 내용은 1,3,4,5월달

    데이터만 조회가 됩니다. 이런것을 방지하기 위해서 처리하기 위한 방법이 "시간 윈도우 롤링" 이라는 개념입니다.

    혹시 pandas를 사용해보신 분이라면 fillna의 개념이라고 생각하시면 됩니다. 

    - selt-join 방법

    - Frame절 문법 (RANGE, ROWS, GROUPS)

계절성 YoY, MoM에 대한 분석

  - lag(return_value [, offset [, default]) 윈도우 함수를 사용

<4장> 코호트 분석에 대해서 구성되어 있습니다.

집단 분석을 하는것을 의미합니다. (여러집단을 나누고 행동의 변화가 발생하는지 집단별로 확인하는 작업입니다.)

코호트 분석의 4가지 종류에 대해서 구분하고 있습니다.

이러한 분석을 쿼리를 통해서 작업해보고 데이터를 추출해볼수 있도록 쿼리등을 확인하는 부분이 매우 흥미롭고

도움이 많이 되는 부분입니다.

 

<5장> 텍스트 분석입니다.

SQL로 텍스트 분석한다는 것이 매우 생소했습니다. SQL로 조회/저장의 역활이 아닌 역활이여서 입니다.

보통 머선러닝이나, python, r 등 다른 기법이 사용된다고 한정적으로 생각하고 있었는데 흥미로운 내용입니다.

· 책에서도 모든것을 SQL로 처리가 가능하다고 말하고 있지 않습니다.

  자연어 처리, 형태소 분석 등이 필요한 부분에서는 사용하지 말고 조금은 간편하게 SQL로 분석이 가능한 분야에 대해서

  적용하는것을 가이드 합니다.

SQL로 조회할때 문자열을 가지고 다양한게 처리하는 예시가 있습니다. (split_part, initcap, right, left, trim,replace, ilike, 정규표현식, regexp_replace, regexp_matches, regexp_split_to_table)등을 사용해서 쿼리를 구성합니다.

새로운것도 있고, 기존에 알고 있는 사항도 있을것 같습니다. 이러한 것을 쿼리에서 어떻게 조화롭게 구성하여서 실제 조회 쿼리로 

활용하는지 여부가 정보를 분석하는데, 많은 차이를 나타낼것 같습니다.

 

<6장> 이상탐지

어려운 개념이 아닙니다. 흔히 알고 있는 이상하다"의 이미 처럼, 일반적인 흐름과 차이가 있는 것을 말합니다.

책에서는 아래와 같이 정의합니다.

이상(anomaly)이란 동일 그룹 내 다른 멤버와 다른 특징을 말합니다.

유사한 말로, 아웃라이어, 노벨티, 노이즈, 편차, 예외 등으로 부르기도 합니다.

당연히 여기서도, SQL이 만능이 아니라 상황에 따러서 적합하고 효율적인 경우 SQL도 고려사항임을 제시합니다.

SQL의 장점은 DB에 저장된 데이터를 바로 사용가능한 부분이고, 개발의 편의성도 있습니다.

기존에 저장된 데이터를 다른 형태로 가공해서 다른 물리적인 서버로 이전하거다 전달할 필요가 없습니다.

· partition by절, over절, order by절을 함께 사용하여서 데이터 조회 범주를 조절합니다.

· percent_rank() over (partition by ... order by ...)를 이용해서 백분위수에 적용합니다.

· petcentile_cont() within group() over

· 표준편자를 지원하는 대표적인 함수

7장, 8장에서는 실험분석, 복잡한 데이터셋 생성 에 대한 부분입니다.

실제 DB를 통해서 입력된 데이터를 잘 입력되었는지 DB를 통한 체크를 합니다.(left join을 통해서 구성된 쿼리가 많이 있습니다.)

서브쿼리, 임시테이블, 공통테이블 표현식, 그룹함수를 통해서 데이테셋을 구성하기 위한 쿼리들의 기준 및 정보를 알수 있습니다.

 

■ 돌아보며

· 추천사에도 적혀있는데, DataBase의 기본적인 사항에 대해서 다시한번 생각할수 있는 내용이 구성된 부분이 좋았습니다.

· SQL에 사용방법을 부분적으로 알고 있던 것을 조금 더 확장하여서 다양한 범위로 활용 가능한 내용이 많습니다.

· 상황에 따라서 SQL이 좋은지, 아니면 다른 방식이 좋은지 판단 기준이 생깁니다.

· 사용예제가 실제 업무에서 경험할수 있는 예시 및 쿼리예시가 제공됩니다.

· SQL로 구현이 가능한데, 몰라서 사용못하는 것을 방지할수 있을거 같습니다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."