움,, 아티클 스터디 기록을 하기전에,,
팀원 한분은 나가신 것 같고 한분은 이번주 활동 참여가 없으시다ㅜㅜ😓
남아계신 분들은 매일 성실하게 열심히 스터디를 하셨던 분들이라, 사전/본캠프 활동까지 같이 마무리 할 수 있었으면 좋겠다. 나머지 팀원분들도 이렇게 생각하실 수 있게, 나도 앞으로 더 열심히 참여해야지🥲🔥
https://yozm.wishket.com/magazine/detail/1863/
[주제]
[아티클 요약]
이 피라미드에는 위계구조,계층적 질서가 존재함
데이터가 잘 흐르는 조직을 만들기 위해서는,, 데이터를 쉽게 확인하고 주요 지표를 잘 인지하게 만드는 노력이 필요함!
BI툴 도입 → 여러 대시보드 형성
대시보드를 쉽게 말하면, 계기판!
[많은 정보가 중요도에 따라 크기와 강조 정도가 다르고, 관련 정보끼리 모아두어 가시성 확보]
지표가 많아지면 잘 찾을 수 있도록 대시보드 구현이 중요해짐.
✅카테코리별 분류,✅위계와 중요도를 시각적으로 표현,✅분석필터 제공,✅측정기준에 따라 별도 지표를 볼 수 있게 만들면 좋음.
SQL교육과 데이터 마트
sql문법을 숙지하는 것보다는, 어느 데이터가 어디에 쌓이고, 어떤 히스토리가 있는지 교육하기가 어려움
데이터 마트: 어디에 원하는 데이터가 있는지 몰라서 데이터를 사용하지 못하는 경우를 막기 위해, 미리 문서화하고, 여러 데이터를 모아 목적에 따라 가공해둔 것.
주요 지표 인지하기
데이터가 잘 흐르는 조직을 위해, 가벼운 리포트에 주요 지표 등을 꾸준히 공유하는 것이 도움된다!
💡*메트릭오너: 특정 지표에 오너십을 가진 사람
각자 담당 지표가 생기면 그 성과가 곧 본인의 성과이기 때문에 지표를 잘 이해+지표에 변화가 생길 때 관련된 주요 지표 뿐만 아니라 관련 지표까지 파악하기 위해 노력하게됨.
⭐2)성공 확률이 높은 의사결정
-상황을 정확하게 해석하기
데이터분석가=여러 지표를 적절히 조합하고 분석해, 편향되지 않게 해석하고 상황을 진단하는 사람
객관적 해석을 하지 못했거나 잘못된 해석, 놓친 부분이 있다면 이를 업데이트 해, 왜 이렇게 해석했는지 이유를 알리는 것이 필요
도메인 지식 = 생각의 프레임워크 지속적으로 기르기
도메인 지식은 책이나 강의를 통해 배워야하는 지식도 있겠지만, 대부분 회사에서 무엇을 했고 결과가 어땠는지에 대한 정보를 잘 축적하고, 그것을 합리적인 형태로 구조화하는 것으로도 많은 도움!
목표 설정하기
목표치- “로직을 구성하는 수치를 기대치와 의지치를 이용해 변경한 값”
<구조화된 로직에 과거 데이터를 활용한 예상치>
<새로운 액션에 대한 확신 수준, 시장이나 경쟁사 상황, 불확실성을 반영한 기대치>
<의지치>
성과 측정하기
가장 보편적으로 성과 측정은 시기 전후를 비교하는데,
통제할 수 없는 외부 요인까지 반영하기 위해 A/B테스트 실험을 하게됨. 무작위로 할당된 그룹 간 지표 차이를 통해 성과를 측정하는 것이 A/B테스트이고 외부 요인의 개입을 무력화할 수 있음. 단기적 성과 측정에 적극 활용하고 장기적 성과 측정은 다른 방법을 찾는게 도움이 될 수 있음.
⭐3)지속성
비즈니스 사이클 3단계
1)기회발굴, 아이디어 수집, 정책 설계 등의 planning
2)플래닝의 결과 실행 및 배포
3)성과 측정 및 후속 분석
종합적으로, 데이터 분석가는 조직의 전반적인 의사결정 퀄리티를 높이는 사람. 좋은 의사결정들을 모아 조직의 성공 확률을 높이는 사람
[인사이트]
데이터를 분석하는 것뿐만 아니라 전체적인 흐름과 전반적인 설계를 해내는 사람이 되기 위해서는, 왜 이러한 결과가 나왔는지, 이 결과가 다른 것에 어떠한 영향을 미치게 될지 까지 폭넓게 사고하는 방식을 길러야겠다고 생각했다. 또한 도메인 지식 중요성은 다시한 번 언급된 만큼, 지금부터 내가 취업하고 싶은 비즈니스에 대한 지식도 점차 쌓아가야겠다.
데이터분석에 오류가 있었을 때, 이에 대해 왜 잘못했는지, 무엇이 맞는것인지 공유를 해야한다고 했는데
내가 틀린것을 발견하고 인정해, 정정하는 것이 쉬운일은 아니라고 생각한다. 이에 대한 두려움이나 회피감을 떨쳐내는 것이 앞으로의 숙제가 아닐까한다.
when? avg, substring 등 함수를 썼을 때 'datatype'단어로 에러메시지가..⚠️
--숫자로 변경 cast(if(rating='Not given', '1', rating) as decimal)
--문자로 변경 concat(restaurant_name, '-', cast(order_id as char))
외우고 있기 보다는, 데이터 타입의 문제를 마주쳤을때
돌아와서 코드 복사해서 변환해주면 된다고 하셨다!🧐
case when then 뒤에 늦음이 아니라 '늦음'으로 해야했음
🔶문자로 수식입력할 때 작은 따옴표 !!!!
이렇게 하니까 안늦었을때의 입력값이 없음.
응...이거 if로 써야하나...? 근데 if를 어따써... 고민시작
else가 if문에서만 쓸 수 있는 줄 알았는데(지금 생각해보니까 왜그랬지,,? 의미상 '거짓'='참 else' 라서 그랬나보다..🗯)
CASE 구문은 SQL에서 조건문을 작성할 때 사용하며, ELSE는 조건을 만족하지 않는 나머지 경우를 처리하기 위해 사용.
🔻마지막으로 < else '안늦음' > 걸어주면 되는 거였다!🔻
select restaurant_name,
delivery_time,
day_of_the_week,
case when delivery_time>=25 and day_of_the_week='weekday'then '늦음'
when delivery_time>=30 and day_of_the_week='weekend'then '늦음'
else '안늦음'
end"지연상태"
from food_orders
case when then end 조건 구문의 기본구조를 되짚고 넘어갈 수 있어서 좋은 문제였다고 생각한다!
언제 필요?
✔️여러번의 연산을 수행할 때
ex.→ 수수료를 부과할 수 있는 시간을 구하고
→ 구해진 시간에 주문 금액별로 가중치를 주고
→ 가중치를 적용한 결과로 최종 예상 배달비를 계산할 때 ..💭
✔️조건문에 연산결과를 사용해야할 때
ex.→ 음식 타입별 평균 음식 주문금액 따라 음식비 상/중/하 를 나누고 싶을 때
✔️조건에 query결과를 사용하고 싶을 때
ex.→ 30대 이상이 주문한 결과만 조회하고 싶을 때
일단 기본구조는 다음과 같다.
select column1, special_column
from
( /* subquery */
select column1, column2 special_column
from table1
) a
select column1, column2
from table1
where column1 = (select col1 from table2)
실습예제-음식 준비시간이 25분보다 초과한 시간을 가져오기
select order_id, restaurant_name, if(over_time>=0, over_time, 0) over_time
from
(
select order_id, restaurant_name, food_preparation_time-25 over_time
from food_orders
) a
뒤에 a를 붙인건 서브쿼리 이름을 뜻하고,
결과적으로, 오버타임이 아니라면 0으로 뜨고 오버타임이라면 얼마나 오버타임이 되었는지 숫자로 나온다.
.
이런식으로 오버타임이 아닌경우에는 -가 붙어버린다
(수수료 구간
~5000원 미만 0.05%
~20000원 미만 1%
~30000원 미만 2%
30000원 초과 3%)
💡사고과정
섭쿼리 안에 평균단가seg식 넣고 , 본 쿼리에 수수로연산 넣어야겠다
💡정답 코드
select restaurant_name,
price_per_plate*ratio_of_add "수수료"
from
(
select restaurant_name,
case when price_per_plate<5000 then 0.005
when price_per_plate between 5000 and 19999 then 0.01
when price_per_plate between 20000 and 29999 then 0.02
else 0.03 end ratio_of_add,
price_per_plate
from
(
select restaurant_name, avg(price/quantity) price_per_plate
from food_orders
group by 1
) a
) b
있고 없고의 차이는 다음과 같다
🔻group by 안했을 때,
🔻group by 했을 때(정답)
.
💡사고과정
seg에 case when 쓰고
(
select restaurant_name,
substr(addr,1,2) "지역"
avg(delivery_time) "평균 배달시간"
from food_orders
group by 1
) a
이렇게 서브쿼리 짜야겠다
강의를 듣기로..
💡정답코드
select restaurant_name,
sido,
avg_delivery_time,
case when avg_delivery_time<=20 then '<=20'
when avg_delivery_time>20 and avg_delivery_time <=30 then '20<x<=30'
else '>30' end delivery_time_segment
from
(
select restaurant_name,
substring(addr, 1, 2) sido,
avg(delivery_time) avg_delivery_time
from food_orders
group by 1, 2
) a
이렇게 나오는군. 타임세그가 20,30분 기준이었나보다
(이것도 문제에 미리 나와있었으면 좀 더 명확했을텐데,,)
여기서 group by 1,2혹시 다른 차이가 있나 해봤는데 결과값 차이❌
.
.
아티클 스터디하고,
마지막에 풀어봤던 실습 쓱 훑고
4-4강 실습문제 풀어보는 것으로 시작해야겠다
확실히 실습문제를 좀 풀어보면서 감을 익히는 듯 하다 !!
낼도 홧팅해야지 :)