관리 메뉴

ilovechoonsik

유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 10주차 학습 일지 본문

STARTERS 4기 🚉/학습일지 😛

유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 10주차 학습 일지

춘시기좋아 2023. 4. 16. 14:52
[출처 : Udemy - STARTERS 블로그 학습일지 안내]

 

1. 이번 주에 어떤 것을 배웠나요? 겪은 시행착오/어려운 점은?

1.1 ERD

전처리 - 시각화 등 본격적으로 분석에 들어가기 전 필수적으로 수행해야 하는 간단 EDA + ERD를 학습했다!

- 방대한 양의 데이터를 분석하기 위해 먼저 데이터를 파악하는 단계이다

 

테이블 간의 관계와 어떤 컬럼이 존재하고 어떤 의미를 지니는지 등등 ERD를 수행하는 과정에서 자연스럽게 핵심 문제 정의에 가까워질 수 있기에 중요하다고 생각된다

 

1.2 ERD 연습 및 간단 EDA 과제

ERD / 테이블 정의서
테이블 상세 정의서

 

간단 EDA

 

1.3 EDA 과제 2

----과제
-- 월별 매출액 + 주문 건수 + 구매자 수
select to_char( o.order_date, 'YYYY-mm')as month
	 , round(sum(od.unit_price * od.quantity * (1-od.discount))) as amount
	 , count(distinct o.order_id) as order_cnt
	 , count(distinct o.customer_id) as customer_cnt
from order_details od
	 left join orders o ON od.order_id = o.order_id
group by 1 
order by 1

-- 월별+인당 평균 매출액 건당 평균 구매 금액
select to_char(o.order_date, 'YYYY-mm') as month
	 , round(SUM(od.unit_price * od.quantity * (1-od.discount)) / count(distinct o.customer_id)) as c_sales
	 , round(SUM(od.unit_price * od.quantity * (1-od.discount)) / count(distinct o.order_id)) as o_sales
from order_details od
	 left join orders o ON od.order_id = o.order_id
group by 1 
order by 1

-- 분기별 매출액, 주문건수, 구매자 수 추출
select to_char(order_date , 'YYYY-q')
	 , round(sum(od.unit_price * od.quantity * (1-od.discount))) as amount
	 , count(distinct o.order_id) cnt_or
	 , count(distinct o.customer_id) cnt_cu
from order_details od
	 left join orders o ON od.order_id = o.order_id
group by 1 
order by 1

-- 분기별+인당 평균 매출액 건당 평균 구매 금액
select to_char(o.order_date, 'YYYY-q')
	 , round(SUM(od.unit_price * od.quantity * (1-od.discount)) / count(distinct o.customer_id)) as c_sales 
	 , round(SUM(od.unit_price * od.quantity * (1-od.discount)) / count(distinct o.order_id)) as o_sales
from order_details od
	 left join orders o ON od.order_id = o.order_id
group by 1 
order by 1

 

1.4 윈도우 함수

📌 사용법

: 함수() over(윈도우 프레임 지정)

윈도우 프레임을 지정해서 그 안에서 함수가 실행

 

📌 윈도우 프레임 지정?

1. partition by [컬럼이름] order by [컬럼이름]

2. rows between <start> and <end>

CURRENT ROW : 현재 행
n PRECEDING : n행 앞
n FOLLOWING : n행 뒤
UNBOUNDED PRECEDING : 이전 행 전부
UNBOUNDED FOLLOWING : 이후 행 전부

 

📌 윈도우 프레임 지정 예제

- 1번 예제

rows between current row and n following

현재 행 ~ 이후 4개 행 누적합

with cte_order_details as (
select o.order_id, o.customer_id, o.order_date
	 --연월일 파생 컬럼을 만들기
	 , to_char(order_date, 'YYYY') as year
	 , to_char(order_date, 'MM') as month
	 , to_char(order_date, 'dd') as day
	 , to_char(order_date, 'q') as quarter
	 , od.product_id, od.unit_price, od.quantity, od.discount
	 , round(od.unit_price * od.quantity * (1-od.discount)) as 매출액
from orders o, order_details od
where o.order_id = od.order_id
)
, cte_ordercnt as( --group by 썼기 때문에 CTE 만들어주고
--일별 주문 건수 (연습이니까 order_details 한 행이 한 건인 거로 치기)
select year, month, day, count(order_id) cnt
from CTE_ORDER_DETAILS
group by 1,2,3
order by 1,2,3
)
select *
	 --5행의 합을 보고 싶다면?
	 , sum(cnt) over(order by year, month, day rows between current row and 4 following)
from cte_ordercnt;

 

- 2번 예제

rows between n preceding and current row

이전 2개 행 ~ 현재 행 누적합

with cte_order_details as (
select o.order_id, o.customer_id, o.order_date
	 --연월일 파생 컬럼을 만들기
	 , to_char(order_date, 'YYYY') as year
	 , to_char(order_date, 'MM') as month
	 , to_char(order_date, 'dd') as day
	 , to_char(order_date, 'q') as quarter
	 , od.product_id, od.unit_price, od.quantity, od.discount
	 , round(od.unit_price * od.quantity * (1-od.discount)) as 매출액
from orders o, order_details od
where o.order_id = od.order_id
)
, cte_ordercnt as( --group by 썼기 때문에 CTE 만들어주고
--일별 주문 건수 (연습이니까 order_details 한 행이 한 건인 거로 치기)
select year, month, day, count(order_id) cnt
from CTE_ORDER_DETAILS
group by 1,2,3
order by 1,2,3
)
select *
	 --5행의 합을 보고 싶다면?
	 , sum(cnt) over(order by year, month, day rows between 2 preceding and current row)
from cte_ordercnt;

 

- 3번 예제 (5일 이동 평균 구해보기)

with cte_order_details as (
select o.order_id, o.customer_id, o.order_date
	 --연월일 파생 컬럼을 만들기
	 , to_char(order_date, 'YYYY') as year
	 , to_char(order_date, 'MM') as month
	 , to_char(order_date, 'dd') as day
	 , to_char(order_date, 'q') as quarter
	 , od.product_id, od.unit_price, od.quantity, od.discount
	 , round(od.unit_price * od.quantity * (1-od.discount)) as 매출액
from orders o, order_details od
where o.order_id = od.order_id
)
, cte_amount as( --group by 썼기 때문에 CTE 만들어주고
--일별 주문 건수 (연습이니까 order_details 한 행이 한 건인 거로 치기)
select year, month, day, round(sum(매출액)) 매출액
from CTE_ORDER_DETAILS
group by 1,2,3
order by 1,2,3
)
select year, month, day, 매출액
	 --5행의 합을 보고 싶다면?
	 , case
	 	when count(매출액) over(order by year, month, day rows between 4 preceding and current row) = 5 
	 	then AVG(매출액) over(order by year, month, day rows between 4 preceding and current row) 
	   end 매출액5일이동평균
from cte_amount;

 

 

(1) 윈도우 함수 종류

 

집계함수 집계함수(count, sum 등…) 비율
순위함수 RANK 중복 순위 존재 시 건너뜀 (1,1,3,4,5,5,7,…)  
DENSE_RANK 중복 순위 존재 시 건너뛰지 않음(1,1,2,3,4,4,5,…)  
ROW_NUMBER 동일 순위 존재하여도 연속번호 부여(1,2,3,4,5,6,7,…)  
행 순서 함수 FIRST_VALUE 파티션 별 윈도우에서 가장 먼저 나오는 값(min)  
LAST_VALUE 파티션 별 윈도우에서 가장 늦게 나오는 값(max)  
LAG 파티션 별 윈도우에서 이전 행 값 전월-분기 등 매출 비교 시
LEAD 파티션 별 윈도우에서 다음 행 값  
그룹 내 비율 함수 PERCENT_RANK 백분위 수  
NTILE 구간 나누기  

 

1.5 윈도우 함수 활용 주요 지표 추출

(1) 시계열 분석

📌월별 매출 증감

--월별 매출 증감

with cte_order_details as (
select o.order_id, o.customer_id, o.order_date
	 --연월일 파생 컬럼을 만들기
	 , to_char(order_date, 'YYYY') as year
	 , to_char(order_date, 'MM') as month
	 , to_char(order_date, 'dd') as day
	 , to_char(order_date, 'q') as quarter
	 , od.product_id, od.unit_price, od.quantity, od.discount
	 , round(od.unit_price * od.quantity * (1-od.discount)) as amount
from orders o, order_details od
where o.order_id = od.order_id
), cte_pre_amount as (
select year, month
	 , sum(amount) as amount
from cte_order_details
group by 1,2
order by 1,2
)
-- 이전 행 = lead (옵션으로 숫자 주면 그 만큼의 이전 행 값을 가져온다.)
select year as 연
	 , month as 월
	 , amount as 매출액
	 , lag(amount) over(order by year, month) as 전월매출액
	 , amount - lag(amount) over(order by year, month) as 전월대비증감액
	 , (round(amount / abs(lag(amount) over(order by year, month)) * 100)::text || '%'::text)as 전원대비매출액비율
	 , case 
	 	when amount - lag(amount) over(order by year, month) < 0 then '-'
	 	when amount - lag(amount) over(order by year, month) >= 0 then '+'
	   end as 증감여부
from cte_pre_amount;

 

📌작대비

-- 작대비 매출액
with cte_order_details as (
select o.order_id, o.customer_id, o.order_date
	 --연월일 파생 컬럼을 만들기
	 , to_char(order_date, 'YYYY') as year
	 , to_char(order_date, 'MM') as month
	 , to_char(order_date, 'dd') as day
	 , to_char(order_date, 'q') as quarter
	 , od.product_id, od.unit_price, od.quantity, od.discount
	 , round(od.unit_price * od.quantity * (1-od.discount)) as 매출액
from orders o, order_details od
where o.order_id = od.order_id
), cte_pre_amount as (
select *
	 , lag(매출액, 12) over(order by year, month) as 작년매출
from cte_order_details
)
select year, month, day, 매출액
	 , 매출액-작년매출 as 매출증감액
	 , round(매출액/작년매출 * 100)::varchar(10) || '%' as 전년비
	 , case 
	 	when 매출액-작년매출 < 0 then '-'
	 	when 매출액-작년매출 >= 0 then '+'
	   end as 증감여부
from cte_pre_amount;

(lag에 옵션으로 12 = 12개월 전)

 

(2) 매출 누계

📌 일, 월별 매출 누계

--------------------
-- 매출 누계!!!
-- 일별 매출 누계 (1전체 누계, 2월별 파티션)
--1 전체 누계
with cte_order_details as (
select o.order_id, o.customer_id, o.order_date
	 --연월일 파생 컬럼을 만들기
	 , to_char(order_date, 'YYYY') as year
	 , to_char(order_date, 'MM') as month
	 , to_char(order_date, 'dd') as day
	 , to_char(order_date, 'q') as quarter
	 , od.product_id, od.unit_price, od.quantity, od.discount
	 , round(od.unit_price * od.quantity * (1-od.discount)) as 매출액
from orders o, order_details od
where o.order_id = od.order_id
), cte_pre_amount as (
select *
	 , sum(매출액) over(order by year, month, day) as 일별매출누계
from cte_order_details
)
select year, month, day, 매출액, 일별매출누계
from cte_pre_amount

-- 월별 매출 누계 (1전체 누계, 연도별 파티션)
with cte_order_details as (
select o.order_id, o.customer_id, o.order_date
	 --연월일 파생 컬럼을 만들기
	 , to_char(order_date, 'YYYY') as year
	 , to_char(order_date, 'MM') as month
	 , to_char(order_date, 'dd') as day
	 , to_char(order_date, 'q') as quarter
	 , od.product_id, od.unit_price, od.quantity, od.discount
	 , round(od.unit_price * od.quantity * (1-od.discount)) as 매출액
from orders o, order_details od
where o.order_id = od.order_id
), cte_pre_amount as (
select *
	 , sum(매출액) over(order by year, month) as 월별매출누계
from cte_order_details
)
select year, month, day, 매출액, 월별매출누계
from cte_pre_amount
일별 / 월별 매출 누계

 

(3) 1997년 분기별 판매수량 TOP10 - 순위변화

with cte_products_sales as (
select -- order
	   o.order_id as 주문번호
	 , o.customer_id as 고객번호
	 , o.order_date as 주문일
	 , to_char(order_date, 'YYYY') as 연
	 , to_char(order_date, 'MM') as 월
	 , to_char(order_date, 'dd') as 일
	 , to_char(order_date, 'q') as 분기
	 -- order_details
	 , od.product_id as 제품ID
	 , od.unit_price as 판매당시금액
 	 , od.quantity as 수량
 	 , od.discount as 할인율
	 , round( od.unit_price * od.quantity * (1-od.discount) ) as 매출액
	 -- categories
	 , c.category_id as 카테고리ID
	 , c.category_name as 카테고리명
 	 , p.product_name as 제품명
from orders o
	 left join order_details od ON od.order_id = o.order_id
	 left join products p on p.product_id = od.product_id
	 left join categories c on p.category_id = c.category_id
	 left join suppliers s ON p.supplier_id = s.supplier_id
), cte_amount as (
-- 1. 1997년의 분기, 판매수량 등 필요 컬럼 가져오기
select 연, 분기, 제품명
	 , sum(수량) as 판매수량
	 , sum(매출액) as 총매출액
from cte_products_sales
where (연 = '1996' and 분기 = '4') or 연 = '1997'
group by 1,2,3
order by 연, 분기, 판매수량, 총매출액 asc
), cte_rank as (
-- 2. 랭크 구하기
select *
	 , row_number () over (partition by 연, 분기 order by 판매수량 desc, 총매출액 desc) 랭크
from cte_amount
order by 제품명, 연, 분기
), cte_lag as (
select *
	 , lag(랭크) over(partition by 제품명 order by 연, 분기) - 랭크 as 순위변화
from cte_rank
)
select 랭크 as rank
	 , max(case when 연 = '1997' and 분기 = '1' then 제품명 end) as "97_1분기"
	 , max(case when 연 = '1997' and 분기 = '1' then 순위변화 end) as "순위변화"
	 , max(case when 연 = '1997' and 분기 = '2' then 제품명 end) as "97_2분기"
	 , max(case when 연 = '1997' and 분기 = '2' then 순위변화 end) as "순위변화"
	 , max(case when 연 = '1997' and 분기 = '3' then 제품명 end) as "97_3분기"
	 , max(case when 연 = '1997' and 분기 = '3' then 순위변화 end) as "순위변화"
	 , max(case when 연 = '1997' and 분기 = '4' then 제품명 end) as "97_4분기"
	 , max(case when 연 = '1997' and 분기 = '4' then 순위변화 end) as "순위변화"
from cte_lag
group by 1
limit 10;

 

1.6 ABC 분석

제품 분석을 하게 되면 우리가 중점적으로 관리를 해줘야 하는 제품을 확인하고 맞춤화 전략을 펼쳐볼 수 있다~~

그때 사용되는 게 ABC 분석이라고 한다!!

- 제품을 A,B,C 등급으로 나눠서 관리

 

관련 자료

 

📌 순서?

1. 매출액이 많은 순으로 정리

2. 총매출을 100%로 하여 고객별 백분비 산출

3. 그 누적 구성비율을 상위의 고객부터 순서대로 누적해 간다.

4. 그래프의 세로에 매출액 점유비의 누적치를, 가로축에 고객을 기입하고 고객별 누적구성비를 표시해 간다

5. 세로축의 70%와 90%의 누적치 해당점에서 가로선을 긋고, 그래프의 선과의 교차점에서 수직선을 긋는다

 

/*ABC 분석!*/

-- 1. 제품별 매출액
with cte_products_sales as (
select -- order
	   o.order_id as 주문번호
	 , o.customer_id as 고객번호
	 , o.order_date as 주문일
	 , to_char(order_date, 'YYYY') as 연
	 , to_char(order_date, 'MM') as 월
	 , to_char(order_date, 'dd') as 일
	 , to_char(order_date, 'q') as 분기
	 -- order_details
	 , od.product_id as 제품ID
	 , od.unit_price as 판매당시금액
 	 , od.quantity as 수량
 	 , od.discount as 할인율
	 , round( od.unit_price * od.quantity * (1-od.discount) ) as 매출액
	 -- categories
	 , c.category_id as 카테고리ID
	 , c.category_name as 카테고리명
	 --, p.product_id as 제품ID order_details와 중복!
 	 , p.product_name as 제품명
 	 , p.unit_price as 마스터단가
 	 , p.discontinued as 단종여부
 	 -- 서플라이어
 	 , s.supplier_id as 공급자ID
 	 , s.contact_name as 공급사
 	 , s.country as 공급사국가
	 , s.city as 공급사도시
from orders o
	 left join order_details od ON od.order_id = o.order_id
	 left join products p on p.product_id = od.product_id
	 left join categories c on p.category_id = c.category_id
	 left join suppliers s ON p.supplier_id = s.supplier_id
)
-- 1. 제품별 매출액 구하기
, cte_amount as(
select 제품ID, 제품명, sum(매출액) as 매출액
from cte_products_sales
group by 1,2
order by 제품ID
)
-- 2. 구성비
, cte_ratio as (
select *
	 , sum(매출액) over() as 전체매출액
	 , 매출액/sum(매출액) over() * 100 as 구성비
from cte_amount
), cte_ration_agg as (
-- 3. 구성비 누계 (주의점 : 1등 부터 매출이 높은 순으로 정렬해야 함)
select *
	 , sum(구성비) over(order by 구성비 desc) as 구성비누계
from cte_ratio
order by 구성비 desc
) -- 70 %까지를 A그룹, 90 %까지를 B그룹, 그 이상을 C그룹
select *
	 , case
	 	when 구성비누계 <= 70 then 'A'
	 	when 구성비누계 <= 90 then 'B'
	 	else 'C'
	 end 등급
from cte_ration_agg
order by 구성비 DESC;

 

1.7 Z 차트

- 월별 매출

- 매출누계 : 해당 월 매출에 이전 월까지 매출 누계 (단기적인 추이를 확인할 수 있다)

- 이동년계 : 해당 월의 매출에 과거 11개월의 매출을 합한 값 (최근 1년치 누적 합계) - 장기적인, 그래프에 표현되지 않은 11개월 매출의 추이를 확인할 수 있다.

출처 :&nbsp; https://blog.naver.com/socialmedia/220194062598

 

A : 안정적, 정체기, 추가성장 위한 액션 필요

B : 매출 증가 추세

C : 매출 감소 추세, 단기 장기 모두 감소세, 성장전환을 위한 액션 필요

-> 상승/하락에 대한 원인을 분석하기 위해 다른 지표 이용한 분석이 필요하다!

 

📌 그려보자

필요한 컬럼?

year / month / 월별 매출 / 매출 누계 / 이동연계 (10개월 전~현재월 매출 (11개월))

 

우리 데이터로 정상적인 결과를 뽑을 수 있으려면 97년 6월 ~ 98년 4월로 기간 제한을 두고 진행해야 한다!

/*Z-차트*/
with cte_products_sales as (
select -- order
	   o.order_id as 주문번호
	 , o.customer_id as 고객번호
	 , o.order_date as 주문일
	 , to_char(order_date, 'YYYY') as 연
	 , to_char(order_date, 'MM')  as 월
	 , to_char(order_date, 'dd') as 일
	 , to_char(order_date, 'YYYY-MM') as 연일
	 -- order_details
	 , od.product_id as 제품ID
	 , od.unit_price as 판매당시금액
 	 , od.quantity as 수량
 	 , od.discount as 할인율
	 , round( od.unit_price * od.quantity * (1-od.discount) ) as 매출액
	 -- categories
	 , c.category_id as 카테고리ID
	 , c.category_name as 카테고리명
	 --, p.product_id as 제품ID order_details와 중복!
 	 , p.product_name as 제품명
from orders o
	 left join order_details od ON od.order_id = o.order_id
	 left join products p on p.product_id = od.product_id
	 left join categories c on p.category_id = c.category_id
), cte_amount as (
-- 1. 제품별 연-월에 따른 월별 매출
select 연
	 , 월
	 , sum(매출액) as 월별매출
from cte_products_sales
group by 1,2
order by 1,2
), cte_base_amount as (
select *
	 , case 
		 when 연||월 between '199706' and '199804' then 월별매출
	 	 else 0
	 	end as 기준월매출
	 from cte_amount
	 order by 1,2
), calc as (
-- 2. 매출누계
select *
	 , sum(기준월매출) over (order by 연, 월) 누적합계
	 , sum(월별매출) over (order by 연, 월 rows between 10 preceding and current row) as 이동연계
from cte_base_amount
limit 11 offset 11
-- 나는 limit으로 했는뎅 where 기준월매출 != 0 도 쓸 수 있다!
)
select 연, 월, 월별매출, 누적합계, 이동연계
from calc;

 

1.8 주요 개념

1. WINDOW FUNCTION - 상황 별로 사용하는 함수가 있음! 익숙해지기~ LAG, RANK, 집계함수 활용

2. % 붙이기? - PostgreSQL 에서는 수치::varchar(10)||"%"

3. 소수점 2자리까지만 뽑기? - round(계산식::numeric, 2) (numeric여야 round에서 잘림)

4. GROUP BY/WINDOW FUNCTION은 엮으면 사용하려면 CTE 사용해야 함! - GROUP BY 후에는 집계 씌운 컬럼만 올 수 있음

 


 

배운 점 요약 및 시행착오/어려운 점

 

 기존 수업에서 기초적인 문법들을 학습했다면, 금주 심화 수업에서는 실제 분석에 사용하는 프로세스와 주요 지표들을 추출할 때 필요한 난이도 있는 쿼리를 학습하는 시간을 보냈다~ 문제가 있었다면 SQL은 기존에 학습했던 만큼 어려움이 없을 거라 생각했는데.. 어려웠다🫠 어려웠던 점 크게 두 가지를 꼽자면 1-윈도우 함수와 2-SQL/태블로 간 유연성 있는 분석 방안이었다. 

 첫 번째 윈도우 함수는 문법 자체는 배울만 했지만 활용하는 게 어려웠다. 그래도 다양한 지표를 추출할 때 사용되는 함수, 방안 등이 어느 정도 정해져 있다 보니 꾸준히 학습한다면 완전히 내 것으로 만들 수 있을 거 같다.

 두 번째 SQL/태블로 간 유연성 있는 분석 방안은 확실히 문제였다.. 과제 수행 중 SQL에서 굳이 전처리 하지 않아도 태블로에서 충분히 수행 가능한 작업들이 존재했는데, 이 부분을 SQL에서 건드리게 되면 오히려 태블로에 넘어가서 더 힘들어지는 듯한 느낌을 받았다. SQL 수업 시간 중 다양한 과제를 통해 SQL-태블로 분석을 진행해 봤지만 아직도 각 도구를 어느 정도로 활용해야 할지 감을 잡지 못한 상황이다. 이 부분은 최종 프로젝트까지 남은 시간이 얼마 되지 않는 만큼 빠르게 방안을 찾아 확립해야 한다고 느꼈다!

 

2. 앞으로 적용해야겠다고 느낀 점이 있다면 무엇이고, 어떻게 해보면 좋을까요?

2.1 윈도우 함수

 SQL 기본이 되는 기초 문법들에 비해 상당히 난이도 있다고 느껴졌고, 그만큼 원하는 결과를 바로바로 뽑기 힘들어 학습에 난항을 겪었다. 그래도 특정 지표 추출 시 사용되는 함수들이 어느 정도 정해져 있기 때문에 그러한 부분에서 최대한 많음 경험을 쌓고 익숙해지는 것으로 학습 방향을 설정하면 좋을 거 같다.

 

2.2 SQL + 태블로

 금주 학습 중 태블로에서 제공해주는 기본적인 내용들을 고려하지 않고 SQL에서 쿼리를 짠 후 무작정 추출한 후 태블로로 넘기는 상황이 잦았었고, 그 결과 태블로에서 시각화하는 과정에서 연도/카테고리 등의 계층 구조를 다시 구성하는 등의 비효율적인 상황이 발생했었다. 이 부분도 윈도우 함수와 마찬가지로 더 많은 경험을 통해 각 분석 방안들의 장/단을 확실히 한 후 상황별 사용 방안을 확립하는 게 좋을 거 같다.

 

3. 현재까지의 학습 평가 및 다음 학습을 위한 다짐/목표를 공유해 주세요.

3.1 학습 평가

📌 윈도우 함수 활용 역량 부족

📌 SQL-태블로 간 분석 유연성 부족

 

 

3.2 다짐 및 목표

🔥 추출 목적/상황별 윈도우 함수 정리 + 반복 학습🐶

🔥 SQL+태블로 케이스 스터디 지속🐹


* 유데미 큐레이션 바로가기 : https://bit.ly/3HRWeVL 
* STARTERS 취업 부트캠프 공식 블로그 : https://blog.naver.com/udemy-wjtb 
본 후기는 유데미-웅진씽크빅 취업 부트캠프 4기 데이터분석/시각화 학습 일지 리뷰로 작성되었습니다.
 

#유데미, #유데미코리아, #유데미부트캠프, #취업부트캠프, #부트캠프후기, #스타터스부트캠프, #데이터시각화 #데이터분석 #태블로

Comments