데이터 부트캠프 - Today I Learned

[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_3주차_24.12.12

onion95 2024. 12. 12. 21:30

Today's Goals

1. SQL 꾸준한 연습

2. 파이썬 기억 돌려내 - 코드카타 시작, 파이썬 강의, 개인 과제

3. 데이터 리터러시 강의 완강

 

 

기초 문제를 직접 코드를 쓰면서 풀어가니 다시 자신감을 회복한 간사한 인간...

파이썬 공부하면서 SQL도 끊김 없이 꾸준히 가져갈 것

 

 

1. SQL 연습

 

[null이 포함된 컬럼에서 특정 값이 아닌 경우 모두 찾아내기]

  • 단순히 조건에서 column != 2만 걸면 2가 아니면서 null 또한 아닌 값을 추출하게 됨
  • 따라서 null인 값도 조건에 추가해 주어야 함
select name
from Customer
where referee_id is null or referee_id != 2
  • 추가로, 애초에 null값을 2가 아닌 값으로 변경하여 != 조건만 걸어주는 방법도 있음
SELECT name
FROM customer
WHERE COALESCE(referee_id,0) != 2;

 

 

 

 

2. 파이썬 자신감 회복기

 

Python 코드카타


 

[=와 == 차이!!!!!!]

  • =는 할당의 의미, A는 B와 같다라는 의미를 주려면 ==를 써야하는 것을 주의!!!!!!!(안그럼 오류남)

 

 

[반복적으로 업데이트되는 변수는 초기값 지정 필수]

def solution(n):
    answer = 0
    for i in range(n+1) :
        if i % 2 == 0 :
            answer += i
    return answer
  • 위 함수는 answer 값에 반복적인 업데이트가 진행됨 > 반복문 실행 전에 answer의 초기값 설정 필요

 

 

[range함수의 마지막 값?]

  • range 함수는 끝 값으로 지정한 값의 바로 직전까지만 반환됨
  • range(10)은 9까지만 반환하는 것

 

 

 

Python 개인 과제(~문제5)


[리스트에서 n번째 값 x임을 출력하기 - 특정값의 index 찾기]

  • 리스트명.index(특정 값) : 리스트 안에서 특정 값의 인덱스(위치)를 알 수 있음
  • for index,value in enumerate(리스트명, start=인덱스시작값) : 인덱스와 그 위치의 값이 쌍을 이루어 결과로 출력됨
  • start의 기본값은 0, 1번째 값이라고 직관적으로 알고 싶다면 start=1을 해주면 됨

 

 

[딕셔너리 사용법]

 

https://wikidocs.net/16

 

02-5 딕셔너리 자료형

사람은 누구든지 "이름" = "홍길동", "생일" = "몇 월 며칠" 등과 같은 방식으로 그 사람이 가진 정보를 나타낼 수 있다. 파이썬은 영리하게도 이러한 대응 관계를 나타낼 …

wikidocs.net

 

https://ctkim.tistory.com/entry/Python-%EC%9E%85%EB%AC%B8-%EA%B0%95%EC%A2%8C-11-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC

 

[Python 입문 강좌 - 11] 파이썬 딕셔너리(Dictionary) 정리 및 사용법

더보기 ##파이썬 입문 목차 1. 파이썬 이란? 2-1. 파이썬 윈도우 설치 2-2. 파이썬 맥북 설치 2-3. 윈도우 파이썬 IDE 파이참 설치하기 2-4. 맥북 파이썬 IDE 파이참 설치하기 3. 파이썬 변수(Variable)의 정

ctkim.tistory.com

  • 딕셔너리에서 키, 값, 키-값 을 추출하기 위해서는 dict.keys(), dict.values(), dict.items()를 쓰면됨
  • 그 결과는 모두 리스트로 출력됨(키와 값은 각각 하나의 요소 단위로, 키-값은 (키,값) 쌍 단위로 리스트에 들어감)

 

 

[return과 print의 차이]

  • 오늘 나의 최대 고민과 질문이었음
  • return은 특정 연산, 값 등을 반환하는 것, print는 눈에 보이게 출력하는 것
  • return : 정의된 함수 안에서 모든 연산이 계산되기만 하면 되고, 출력까진 필요없는, 즉, 함수의 결과값을 다른 코드 안에서 사용해야 하는 경우에 적당
  • print : 정의된 함수 안의 모든 연산이 이루어지고, 그 결과값이 출력되는거까지 하나의 과정인 함수일 때 적당(디버깅 필요한 경우?)
  • 예1 : 숫자 연산을 하는 함수를 만들어서 최종 결과를 print로 출력하도록 정의를 한다면, 최종 출력값은 문자형이 됨. > 숫자를 매개변수로 받는 다른 함수에서 해당 함수를 사용할 때 (함수2(함수1(a))) 문제 발생
  • 숫자를 print하면 문자가 되는 것은 print(num)이 print(str(sum))과 같은 기능이기 때문 > num자체의 type 변화는 없지만 print된 값은 str type이 됨

 

 

 

Python 종합반 강의


[리스트 캄프리헨션]

  • 리스트 안에 반복문과 조건문을 작성하여 간결하게 리스트를 생성하는 법
  • 굳이 사용하려고 할 필요는 없음
# 기본적인 구조
[표현식 for 항목 in iterable if 조건문]


# 예시: 1부터 10까지의 숫자를 제곱한 리스트 생성
squares = [x**2 for x in range(1, 11)]
print(squares)  # 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 예시: 리스트에서 짝수만 선택하여 제곱한 리스트 생성
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)  # 출력: [4, 16, 36, 64, 100]

# 예시: 문자열 리스트에서 각 문자열의 길이를 저장한 리스트 생성
words = ["apple", "banana", "grape", "orange"]
word_lengths = [len(word) for word in words]
print(word_lengths)  # 출력: [5, 6, 5, 6]

# 예시: 리스트 컴프리헨션을 중첩하여 2차원 리스트 생성
matrix = [[i for i in range(1, 4)] for j in range(3)]
print(matrix)  # 출력: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

 

 

[lambda 함수]

  • 일반 함수보다 간결하게 작성 가능한 방법
  • 이름을 정할 필요가 없고, 바로 변수를 지정하고 수식을 쓰면 됨
  • 코드의 해당 위치에서 일회성 개념으로 쓸 때 좋아서 일반적인 파이썬 코딩이 아닌 데이터 분석에서 유용함
add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

 

 

[map과 filter에서 lambda함수의 차이]

  • filter는 lambda에서 정의하는 함수가 필터링할 조건이 됨(조건에 충족하면 추출)
  • map은 lambda에서 정의하는 함수가 매개변수를 받아 계산됨(함수 계산 결과 매핑)
filter(조건 함수, 반복 가능한 데이터)

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 출력: [2, 4, 6, 8, 10]


map(함수, 반복 가능한 데이터)

numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers)  # 출력: [1, 4, 9, 16, 25]

 

 

 

 

3. 데이터 리터러시

 

[데이터 리터러시란]

  • 데이터 리터러시? 데이터를 읽고, 이해하고, 분석하는 능력(올바른 질문으로 연결됨)

 

 

[문제 정의 방법]

  • 문제 정의 방법 1 , MECE : 상호 배타적이지만, 전체적으로 포괄적인 그룹화(빠지는 요소 없이, 겹치는 요소 없이 문제의 구성요소를 그룹화 할 수 있어야 함)
  • 문제 정의 방법 2 , 로직 트리 : 문제를 상위 문제에서 하위 문제로, 계층적 세분화 하는 방법

 

 

[지표의 정의]

  • 지표란? 목표나 성과 측정을 위한 기준(구체적이고 측정 가능해야 함) > 목표 달성을 위한 핵심 정보를 제공해야 함(원하는 결과를 지표로 설정)

 

 

[지표1, 활성유저( Active User)]

  • 활성의 의미는 정의하기 나름 : 사이트 진입, 진입 후 추가 행동, 최종 액션(구매 등) 수행 등
  • 활성 기준을 상황에 맞게 정하고(전략 방향이 달라짐), 이러한 정의에 기반해 이탈 유저가 정해짐
  • 예시 : 전체 Active User, 서비스별 Active User, DAU(Daily Active User), WAU(Weekly Active User), MAU(Monthly Active User), 이탈유저(전체 DAU에 잡히지만 각 서비스 DAU로 잡히지 않는), CVR(Conversion Rate, 특정 행동 후 전환 비율), CTR(Click Through Rate, 어떤 페이지 접속 후 특정 요소 클릭 비율)

 

[지표2, 재방문율(Retention Ratio)]

  • 리텐션이라고도 함, 기본적으로는 방문이 기준이지만 활성 유저처럼 다른 기준으로 정의 가능
  • 기울기가 점점 완만해지는 그래프가 좋은 서비스
  • N-Day 리텐션 : 최초 사용일 기준 N일 후 재방문 비율, 카카오/인스타와 같은 습관적/반복적 사용 서비스에 적합
  • Unbounded 리텐션 : 특정 날짜 포함하여 그 이후에 한번이라도 재방문한 비율, 빈도가 높지 않은 쇼핑몰/채용사이트 등에 적합
  • Bracket 리텐션: 설정한 특정 기간을 기준으로 재방문율 측정, 예를 들면 4구간으로 나누는데 1구간은 DAY0, 2구간은 DAY1-3, 3구간은 DAY4-6 이런식, 유저가 각 구간내에 한번이라도 재방문하면 그 구간에서는 재방문한 고객이 되는 것, 사용 주기가 긴 주기적 서비스인 식료품 배달/세차 서비스 등에 적합함

 

 

[지표3, 퍼널(Funnel)]

  • 이탈 시점을 알기 위해 유입에서 충성까지 고객 단계를 구조화하고, 각 단계의 전환율 측정
  • AARRR : 퍼널을 활용하는 프레임워크, 유입(Acquisition), 활성화(Activation), 재방문/재구매(Retention), 수익(Revenue), 추천(Referral)

 

 

[지표4, 고객 평생 가치(LTV, Life Time Value)]

  • 유저 한명이 생애주기(서비스 시작부터 이탈까지 기간) 동안 가져다줄 이익을 정량화한 것 (높을수록 서비스와 유저의 관계가 좋고 충성도가 높은 것을 의미)
  • LTV 산출 방법은 아주 다양하고, 서비스 관점에 따라 고민 필요
  • 예측 데이터이므로 꾸준한 모니터링 필수
  • 조직은 LTV 증대를 위해 결론적으로 객단가 상승, 재구매 빈도 향상, 이탈률 감소 등등을 목표로 하는 전략을 세움

 

 

[지표5, 북극성 지표]

  • 서비스의 성공(전략의 핵심)을 의미하며, 유저에게 주는 핵심 가치를 잘 나타내야 함
  • 인스타와 넷플릭스 같은 광고,사용료 기반의 서비스의 북극성 지표는 사용시간
  • 이커머스와 에어비앤비 같은 판매액,수수료 기반 서비스의 북극성 지표는 거래량
  • 슬랙과 줌 같은 사용료 기반의 서비스의 북극성 지표는 효용
  • 북극성 지표를 통해 조직 전체의 방향성 통일할 수 있음