[TIL#17 250313] 파이썬도 쉽지 않아

강민지·2025년 3월 13일

데이터분석_TIL

목록 보기
17/81

Daily plan

🌞오전

- 9시 기초과제 추가 발제
- 10시 파이썬 라이브세션 3회차
- 파이썬 개인 과제 

🔥 오후

- 코드카타 SQL 3문제
- 빅분기 4과목
- 데이터전처리&시각화 강의 1, 2주차

🌝 저녁

- 아직 못한 것들 마무리
- 데일리 스크럼 + TIL 제출

SQL 코드카타

Q70 - 그룹별 조건에 맞는 식당 목록 출력하기

SELECT M.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE,"%Y-%m-%d") REVIEW_DATE
FROM REST_REVIEW R LEFT JOIN MEMBER_PROFILE M ON R.MEMBER_ID=M.MEMBER_ID
WHERE R.MEMBER_ID = (SELECT MEMBER_ID
                   FROM REST_REVIEW
                   GROUP BY MEMBER_ID
                   ORDER BY COUNT(1) DESC
                   LIMIT 1)
ORDER BY R.REVIEW_DATE, R.REVIEW_TEXT

일단 이렇게 풀어서 정답이 맞긴 했는데,
만약 리뷰수가 가장 많은 사람이 1명이 아니라 공동1등으로 여러 명이라면 문제가 생길 수도 있을 것 같다.
차라리 RANK함수를 이용해 새로운 컬럼을 만들고, 이를 조인해서 1등에 해당하는 MEMBER_ID를 모두 선택할 수 있게 하는 게 나을 지도...?

SELECT M.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE,"%Y-%m-%d") REVIEW_DATE
FROM REST_REVIEW R 
    LEFT JOIN MEMBER_PROFILE M ON R.MEMBER_ID=M.MEMBER_ID
    LEFT JOIN (SELECT MEMBER_ID, 
                RANK() OVER(ORDER BY COUNT(1) DESC) AS RANK_CNT
          FROM REST_REVIEW
          GROUP BY MEMBER_ID) RC
        ON R.MEMBER_ID = RC.MEMBER_ID
WHERE RC.RANK_CNT=1
ORDER BY R.REVIEW_DATE, R.REVIEW_TEXT

RANK함수를 이용해서 코드를 다시 작성해봤는데 충격적이었다. 첫 번째 코드로 했을 때와 다른 결과가 나왔는데 둘다 정답 처리됨...!!!!
실제로 REST_REVIEW 테이블을 다시 확인해보니 리뷰 작성수가 가장 많은 사람은 3명이었다.
첫번째 코드에서는 그 중 한명의 리뷰들만 추출했는데 정답처리 된 거였음..!

코드를 두번째 방식으로 다시 작성해보길 잘 한 것 같다. 역시 찝찝한 이유가 있었어...
위에서 말한 이유대로 WHERE절에서 LIMIT1을 사용한 서브쿼리를 작성한 첫번째 방식은 오답이었다.

Q71 - 오프라인/온라인 판매 데이터 통합하기

SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE LIKE "2022-03%"

UNION ALL

SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") SALES_DATE, PRODUCT_ID, NULL USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE "2022-03%"

ORDER BY SALES_DATE, PRODUCT_ID, USER_ID

OFFLINE_SALE 테이블에서 USER_ID를 NULL로 지정하라는 조건이 있었는데,
"NULL"이라고 쿼리를 작성해서 자꾸 오답이 나왔다.
이렇게 쓰면 문자열 형식이 되니까 NULL은 그냥 NULL로 써야 됨!

Q72 - 조건에 부합하는 중고거래 댓글 조회하기

SELECT UB.TITLE, 
       UB.BOARD_ID, 
       UR.REPLY_ID, 
       UR.WRITER_ID, 
       UR.CONTENTS, 
       DATE_FORMAT(UR.CREATED_DATE,"%Y-%m-%d") CREATED_DATE
FROM USED_GOODS_BOARD UB 
    INNER JOIN USED_GOODS_REPLY UR
    ON UB.BOARD_ID = UR.BOARD_ID
WHERE UB.CREATED_DATE BETWEEN "2022-10-01" AND "2022-10-31"
ORDER BY UR.CREATED_DATE, UB.TITLE 

게시판 정보가 담긴 USED_GOODS_BOARD 테이블과 댓글 정보가 담긴 USED_GOODS_REPLY 테이블이 있는데, 두 테이블의 컬럼명이 겹치는 게 많아서 헷갈리지 않게 주의해야하는 문제였다.

이제 레벨5는 4문제 남았다! 내일까지 끝내버려야지ㅎㅎ


데이터 전처리 & 시각화 (1)

1. 데이터 분석가란?

  • 비즈니스 분석가
    • 주로 비즈니스 문제 이해 및 해결을 위한 데이터를 분석
    • 비즈니스 프로세스 및 요구 사항 파악, 데이터 기반 의사 결정 지원
    • 업무 프로세스 개선, 비즈니스 모델 분석, 요구 사항 관리 등
  • 프로덕트 분석가
    • 제품/서비스의 성과 평가 및 개선을 위한 데이터를 분석
    • 사용자 행동 및 제품 성능과 관련된 데이터 분석을 통해 제품 개선에 기여
    • 제품 경험과 사용자 행동에 대한 분석 수행, A/B테스트, 사용자 경로 분석 등
  • BI 분석가
    • 기업의 비즈니스 인텔리전스 플랫폼과 도구를 사용해 데이터 시각화 및 보고서 작성
    • 기업 내부 데이터 시각화, 의사 결정 지원
    • Tableau, Power BI 등의 BI 도구로 대시보드 구축
  • 데이터 분석가
    • 주로 정형 데이터를 분석하여 기업의 의사 결정 지원
    • 데이터 베이스 등에서 데이터 추출 및 정제하여 보고서, 시각화 생성
    • 기술적인 스킬이 필요하며 SQL, Excel, 데이터 시각화 등을 활용
  • 데이터 사이언티스트
    • 주로 데이터를 활용해 예측, 패턴 발견, 복잡한 분석을 수행해 문제 해결
    • 통계, 머신러닝, 딥러닝 등의 기술로 데이터 분석 및 모델 구축
    • 데이터 수집, 전처리, 모델링, 평가 및 해석

나는 어떤 데이터 분석가가 되고 싶을까?

2. 설득

데이터 전처리와 시각화는 왜 해야할까?
-> 데이터를 잘 분석하고 전달하기 위해서
-> "설득하기 위해서"

데이터 전처리와 시각화를 하기 전에 "어떤 목적으로 데이터를 분석할 것인지"를 먼저 고민해야 함
복잡하고 많은 양의 데이터를 다루는 과정에서 가장 큰 목적이 무엇이었는지 잊거나 방향을 잃을 수 있음
이러한 착오를 예방하려면 사전에 데이터를 어떻게 분석할 지 미리 설계하는 습관이 필요!

3. 숙제

1) 채용공고 5개 스크랩하고 키워드 나열

2) 10분 판다스 타이핑


데이터 전처리 & 시각화 (2)

1. 데이터 전처리

  • 데이터 전처리란 원하는 데이터를 보기 위해 하는 모든 행동
  • 데이터 전처리는 "데이터 전달의 목적성"을 반드시 지녀야 하며, 이를 바탕으로 "데이터 전달의 효과성"을 높일 수 있음
  • 주로 불규칙한 데이터를 일관성 있고 분석하기 쉽게 만들기 위해 전처리 과정이 필요

2. Pandas

  • Pandas 라이브러리 특징
    • 자동화와 프로그래밍 기능을 가짐
    • 대용량 데이터 처리가 가능
    • 복잡한 데이터 처리 및 분석에 용이
    • 확장성과 유연성을 가짐
    • 버전 관리
  • Pandas에서 사용되는 대표적인 데이터 오브젝트
    • 시리즈
      : 1차원 배열의 형태를 가지며, 인덱스를 기준으로 데이터 저장
    • 데이터프레임
      : 2차원 배열의 형태를 가지며, 인덱스와 컬럼 두 가지 기준에 의해 표 형태처럼 데이터가 저장됨

아티클 스터디

A/B테스트 제대로 이해하기(2)

  • 요약 (A/B테스트를 위한 기초 통계)
    • 모집단(전체)에서 표본(일부)을 추출 ‘일부’라도 숫자가 충분하면 일부를 통해 전체를 추측할 수 있음
    • 귀무가설 vs 대립가설
      • 귀무가설: 평소의 상태에 대한 가설 (결과에 대한 차이가 없다)
      • 대립가설: 평소의 상황과 대립하는 결과가 나올 것이라는 가설 (결과에 대한 차이가 발생한다)
    • 단측 검정 vs 양측 검정
      • 단측 검정 (One-sided): A, B 두 그룹을 비교할 때 A의 숫자가 무조건 더 높거나 낮을 것이라고 가정
      • 양측 검정 (Two-sided): A, B 둘 중 뭐가 더 높거나 낮을지 모르겠지만 일단 차이는 있을 것이라고 가정
    • 신뢰 수준 (우리의 추측을 얼마나 신뢰할 수 있는가?)
      • 점 추정 / 구간 추정 점 추정: 정확한 한 점을 기준으로 추측하는 것 구간 추정: 특정 범위(구간)를 기준으로 추측하는 것
      • 표준 오차 동일한 실험 조건에서, 표본 집단에 따라 발생하는 결과값의 차이
      • 신뢰 구간 실험 결과가 실제로 포함될 것으로 예측하는 범위
    • p-value, 유의 수준 (이번 결과가 정말 우연이 아닌가?)
  • 주요 포인트
    : A/B테스트는 표본이라는 일부를 통해 전체를 추측하는 실험이다. ‘추측’에 불과하기 때문에 결과에 대한 신뢰도를 높이기 위해서는 기초 통계 지식을 바탕으로 한 논리적인 분석이 필요하다.
  • 인사이트
    : A/B테스트도 결국에는 ‘추측’에 불과하기 때문에, 아무리 실험 설계를 잘해도 100% 완벽한 정답을 얻을 수는 없는 것 같다. 그래도 데이터 분석가로서 실제 정답에 가장 근접한, 신뢰할 수 있는 답을 얻기 위해서는 이를 논리적으로 뒷받침할 통계학적 지식을 반드시 갖춰야 한다.

일기

SQL 코드카타하고 파이썬 개인과제 찌끄리다보니까 시간이 순삭되었다.
빅분기 공부 좀 더 하다가 자야할 것 같음ㅜ.ㅜ

파이썬 라이브세션 내용도 정리해야 하는데,, 왜 자꾸 할일들이 밀리는 기분인지 모르겠다.
중간중간 딴짓만 안해도 좋을 것 같긴한데 같은 자리에서 몇시간을 앉아있어서 그런지 집중력이 따라주질 않는다. 특히 4시부터가 엄청난 고비임.. 오늘은 냅다 엎드려서 잤는데 현수님한테 걸렸다..ㅋㅋㅋ 그걸 봤다니,, 민망^^:;

내일은 꼭 개인과제 8번을 다 풀어야겠다! 화이팅 (ノ*ФωФ)ノ

0개의 댓글