[내배캠] 데이터분석 6기/사전캠프 기록

[사전캠프 5일차] 아티클 스터디③, 스타터노트 작성, SQL 복습, 파이썬 복습

물맨두 2025. 1. 25. 00:07
마참내 금요일! 

250124 새로 작성한 팀 노션 페이지

오늘은 조 구성원에 변동이 있었다. 원래 계셨던 분이 다른 코스로 반을 옮기셨고 또 한 분이 새로 조에 합류하셨다. 오늘 조를 떠나신 분이 노션 페이지를 열어주셨기 때문에 내 계정으로 다시 팀 노션을 열었다.

 

오늘 한 일은, 

  • 스타터 노트 작성해서 제출하기
  • 세 번째 아티클 스터디 하기
  • 복습하기
    • SQL : 개인퀘스트(걷기반)-(7)~(9), [엑셀보다 쉽고 빠른 SQL]-3주차 실습예제 복습
    • Python : 개인퀘스트(걷기반)-Part2

 


 

스타터 노트 작성하기

 

[스타터 노트] 데이터 분석 트랙을 신청한 이유

1️⃣ 내가 데이터 분석 트랙을 신청한 이유작년 8월부터 10월까지 마케팅팀 인턴으로 3개월 근무했다. 짧은 기간이었지만 마케팅팀에서 일하면서 매달 캠페인을 기획하고 해당 캠페인을 알리기

maandoo.tistory.com

정해진 양식을 복사해서 작성하는 것이라 간단했지만 지금의 마음과 다짐을 되새기고 기록으로 남길 수 있어서 좋았다. 6월과 함께 내일배움캠프가 끝날 즈음이면 얼마나, 또 어떻게 달라졌을지 기대하게 됐다

 


 

아티클 스터디 ③: 데이터 리터러시 & 잘못된 데이터 해석

오늘 읽은 아티클:

 

데이터 리터러시(Data Literacy)를 올리는 방법 | 요즘IT

화해팀은 일찍이 데이터의 중요성을 강조해왔는데요. 조직 전반적으로 데이터 활용력을 높이고, 데이터 의사결정 문화를 활성화하기 위해 많은 시도를 해왔습니다. 데이터를 거의 실시간에 가

yozm.wishket.com

 

 

그 데이터는 잘못 해석되었습니다 | 요즘IT

무엇이든 데이터가 있으면 쉽게 결정을 내릴 수 있을 것 같습니다. 하지만 현업에서는 데이터가 있어도 결정을 내리기 어려운 상황들이 있습니다. 특히 데이터를 통한 의사결정을 내릴 때, 가장

yozm.wishket.com

 

오늘은 데이터를 활용하는 일에 관한 아티클을 두 편 읽었다. 

250124 오늘의 아티클 스터디를 하며 적은 개인적인 인사이트

첫 번째 아티클을 읽으면서 경영 기획에서 왜 데이터 분석 능력이 필요한지 절감했다. 그리고 이렇게 데이터에 친화적인 조직을 만들기 위해선 데이터 분석가가 여러 팀과 협업하면서 소통할 일이 많을 수밖에 없구나 느꼈다. 또 그 부서와 소통하면서 해당 부서의 업무 내용도 어느 정도 꿰고 있어야 소통이 될 것이고.. 이런 점들을 생각하니 배워야 할 게 참 많구나 하는 걸 속으로 계속 새겼다.

 

두 번째 아티클은 데이터를 잘못 해석하는 상황들과 그를 예방할 수 있는 습관들을 전했다. 데이터에 기반했다고 하면 무의식 중에 틀리지 않았을 것이다 하는 근거 없는(이렇게 말하니 이상하다. 그렇지만 잘못된 근거는 근거로서 기능하지 못하니까.) 믿음을 갖게 될지도 모른다는 것을 백신처럼 그런 자만심에 일침을 가하는 글이었다. 인지적 오류에 대해서 이 아티클을 읽고 나서 관심을 갖게 됐다. 그래서 관련 책을 찾아 읽어보고 싶어졌다. 통계학 책을 읽어야 할지, 심리학 책을 읽어야 할지, 뇌과학 책을 읽어야 할지.. 좀 찾아봐야겠다.

 


 

파이썬 공부 : 사전캠프 개인퀘스트(걷기반) - [Python 알아보기]

2️⃣ 반복문 연습하기 Part 2

리스트에 포함된 모든 숫자의 합 계산하기

numbers = [10, 20, 30, 40, 50]
total_sum = 0

print(sum(numbers))

음.. 주어진 변수 total_sum을 무시하고 print(sum(number))를 입력해도 150이 출력되네^^

 

그래도 주어진 변수를 사용해서 다시 프로그램을 작성해보자... 지금 나는 반복문을 연습하는 거니까.

numbers = [10, 20, 30, 40, 50]
total_sum = 0

for num in numbers:
    num+total_sum
    print(total_sum)

이렇게 작성하고 실행하니 0만 줄줄이 5번 뜨고 프로세스가 종료됐다.

바로 힌트를 본다.

 

아! +=!!

[출처] 내 티스토리

 

[사전캠프 4일차] 파이썬 복습, SQL 복습 및 학습

내가 한 발짝, 두 발짝 다가가면 세 발짝 멀어지는 SQL,그리고 아직 가까워진 적 없는 파이썬... 팀 노션에서 오늘 쓸 데일리 스크럼 페이지를 열어 오늘 할 일을 정리하는 것으로 공부를 시작한

maandoo.tistory.com

 

나는 바로 어제 해당 할당 연산자를 공부했었다. 그래, 첫 술에 배부르랴. 머리에 박힐 때까지 하는 거지 뭐.

 

...다시 작성한다

numbers = [10, 20, 30, 40, 50]
total_sum = 0

for num in numbers:
    total_sum += num
    print(total_sum)

이제 원하는 값이 나왔다! 파이썬 공부 열심히 해야겠다.

 


SQL 공부 : 사전캠프 개인퀘스트(걷기반) - [SQL 문법을 연습해요]

7) 😠랭크게임 하다가 싸워서 피드백 남겼어요...

아래와 같은 lol_feedbacks (LOL 피드백 테이블)이 있습니다.
id
user_name
satisfaction_score
feedback_date
1
르탄이
5
2023-03-01
2
배캠이
4
2023-03-02
3
구구이
3
2023-03-01
4
이션이
5
2023-03-03
5
구구이
4
2023-03-04

25. 만족도 점수에 따라 피드백을 내림차순으로 정렬하기

select *
from lol_feedbacks
order by satisfaction_score desc

26. 각 유저별로 최신 피드백 찾기

select user_name, MAX(feedback_date) "최근 작성일"
from lol_feedbacks
group by user_name
  • MAX(컬럼명) : 가장 최근 일자를 선택
  • MIN(컬럼명) : 가장 오래된 일자를 선택

[참고] https://ko.ittrip.xyz/sql/sql-date-maxmin

 

27. 만족도 점수가 5점인 피드백의 수 구하기

select count(*) "만점 개수"
from lol_feedbacks
where satisfaction_score = 5
  • COUNT(*) : 조회된 데이터(행)의 개수

28. 가장 많은 피드백을 남긴 상위 3명의 고객을 찾아내기

select user_name, count(*) "피드백 수"
from lol_feedbacks
group by user_name
order by "피드백 수" desc limit 3
  1. 우선 고객을 찾아내야 하니 컬럼 user_name과 데이터 수를 세야 하니 COUNT(*) 함수를 사용한다
  2. 근데 COUNT(*) 함수를 유저별로 개수를 구하도록 GROUP BY로 묶어준다
  3. 그리고 마지막으로 그 숫자가 큰 순으로 정렬시키되 (ORDER BY DESC)
  4. 3명까지만 알아봐야 하니 LIMIT 3으로 작성하면 끝!

29. 평균 만족도 점수가 가장 높은 날짜 찾기

select feedback_date, avg(satisfaction_score) "평균 만족도 점수"
from lol_feedbacks
group by feedback_date
order by "평균 만족도 점수" desc limit 1

 


8) 🩺LOL을 하다가 홧병이 나서 병원을 찾아왔습니다

이제, 아래와 같은 doctors(의사) 테이블이 있습니다.
id
name
major
hire_date
1
르탄이
피부과
2018-05-10
2
배캠이
성형외과
2019-06-15
3
구구이
안과
2020-07-20

30. 전공이 성형외과인 의사 이름 찾아내기

select name
from doctors
where major = '성형외과'

31. 각 전공별 의사 수 계산하기

select major, count(*) "인원수"
from doctors
group by major

32. 현재 날짜 기준으로 5년 이상 근무한 의사 수 계산하기

select count(*) "5년 이상 근무자"
from doctors
where curdate()

...여기까지 쓰고 멈춰버렸다. CURDATE를 쓰는 건 알겠는데 날짜 계산을 어떻게 해야 하는지 구글링 했다.

select count(*) "5년 이상 근무자"
from doctors
where hire_date <= date_sub(curdate(), interval 5 year)

5년 이상 근무했다는 조건을 where절로 '현재 날짜에서 5년을 뒤로 감은 날짜와 고용일이 같거나, 혹은 그보다 더 오래됐다면' 을 적었다.

  • DATE_SUB(기준날짜, INTERVAL )
    • INTERVAL 뒤에 올 수 있는 것: n YEAR, n MONTH, n DAY, n HOUR, n MINUTE, n SECOND
    • DATE_ADD()도 마찬가지로 사용할 수 있다
  • DATEDIFF(종료일, 시작일) : 두 기간 사이의 일수 계산
  • TIMEDIFF(종료시간, 시작시간) : 두 기간 사이의 시간 계산

[참고] https://velog.io/@12aeun/SQL-mysql%EC%97%90%EC%84%9C-%EB%82%A0%EC%A7%9C-%EC%8B%9C%EA%B0%84-%EA%B3%84%EC%82%B0%ED%95%98%EA%B8%B0

 

33. 의사별로 근무한 기간 계산하기

select name, datediff(curdate(), hire_date) "근무 기간"
from doctors

9) 💪아프면 안 됩니다! 항상 건강 챙기세요!

아래와 같은 patients(환자) 테이블이 있습니다.
id
name
birth_date
gender
last_visit_date
1
르탄이
1985-04-12
남자
2023-03-15
2
배캠이
1990-08-05
여자
2023-03-20
3
구구이
1982-12-02
여자
2023-02-18
4
이션이
1999-03-02
남자
2023-03-17

34. 성별에 따른 환자 수 구하기

select gender, count(*) "환자 수"
from patients
group by gender

35. 현재 나이가 40세 이상인 환자 수 구하기

select count(*) "40세 이상"
from patients
where year(datediff(curdate(),birth_date)) >= 40

난 머리를 짜내서 위와 같이 적었고, 답과 맞춰보고는 무슨 난리를 친 거지 싶었다.. 근데 이렇게 작성해도 돌아가긴 할까..?

아무튼 다시 쿼리를 작성했다.

select count(*) "40대 이상"
from patients
where birth_date <= date_sub(curdate(), interval 40 year)

36. 마지막 방문일이 1년 이상 된 환자 선택하기

select *
from patients
where last_visit_date <= date_sub(curdate(), interval 1 year)

37. 1980년대생 환자 수 구하기

select count(*) "1980년대생"
from patients
where year(birth_date) between 1980 and 1989

나는 이렇게 작성했는데 이렇게 해도 돌아갈까..? 나는 왜 이렇게 연도만 추출하는 것을 좋아하는가.

답안에선 연도를 추출하지 않고 그냥 WHERE birth_date BETWEEN '1980-01-01' AND '1989-12-31'이라고 작성했다.

 

어쨌든 오늘치 SQL 구몬(?) 다 풀었다!