<aside> 💡
오늘의 학습에 대하여
- 오늘도 굉장히 어려웠다.
- 하지만 연습만이 살길이다.
- 연습 가즈아! </aside>
1. 오늘 학습 한 내용을 나만의 언어로 정리하기
- 패키지란?
- 패키지(라이브러리)는 여러 개의 모듈을 포함하는 디렉토리(폴더)입니다.
- 패키지를 비유해서 말하지면 파이썬 프로그래밍 할 때 쓰는 ‘공구 세트’라 할 수 있다.
- 모듈이란 함수나 클래스 등을 담고 있는 하나의 파이썬 파일이다.
- 디렉토리란 여러 개의 모듈을 담고 있는 폴더이다.
- 패키지는 모듈, 디렉토리들을 모아 놓은 큰 도구 모음이다.
- 판다스 패키지는 데이터분석에 사용되는 여러가지 함수들의 집단이다.
- 패키지 불러오는 방법
# 아래와 같이 보통은 필요한 패키지를 한번에 다 불러온 다음 코딩을 진행합니다 import pandas as pd import numpy as np import tensorflow as tf import matplotlib.pyplot as plt import seaborn - f-string
- 포맷팅 문법 중 하나
- 문자와 변수를 함께 출력하는 방법
x = 10 print(f"변수 x의 값은 {x}입니다.") #출력 변수 x의 값은 10입니다.- 다른 방법도 있어요.
x = 10 print("변수 x의 값은 {}입니다.".format(x)) - 리스트 comprehension
- 파이썬에서 리스트를 간결하게 생성하는 방법 중 하나
- 리스트를 생성할 때 사용
- 코드를 더 간결하고 가독성 있게 만들어 줌
- 데이터 처리 및 변환에 유용하게 활용됨
# 기본적인 구조 [표현식 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] # 풀이 range(1, 11) -- 1부터 10까지의 정수를 생성하는 데 for x in range(1, 11) -- 그 숫자를 하나씩 꺼내서 변수 x에 넣어라 x**2 하나씩 제곱해서 리스트를 만들어라 squares 그것을 여기에 저장해라
2. 학습하며 겪었던 문제점 & 에러
- 문제1) subquery(하위쿼리), where(조건), in(포함하는) concat(이어붙이기), left(왼쪽부터 추출), right(오른쪽부터 추출), substring(부분문자열)
- 내가 겪은 문제점?
- 코드카타 55번 문제
- USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.
- 내가 했던 풀이 방식, 왜 틀렸는지?
- 중고 거래 3건 이상을 등록한 사용자 조회부터 막혔다. GROUP BY까지 썼는데 여기서 어떻게 해야 하는지 모르겠다.
SELECT * FROM USED_GOODS_BOARD b LEFT JOIN USED_GOODS_USER u ON b.WRITER_ID = u.USER_ID GROUP BY WRITER_ID, BOARD_ID ORDER BY WRITER_ID - 앞으로 어떻게 하면 좋을지?
- 중고 거래 3건 이상을 등록한 사용자 조회
- WRITER_ID로 묶고
- 같은 WRITER_ID일지라도 다른 BOARD_ID 값을 가질 것임
- BOARD_ID 값을 기준으로 COUNT 해야지 3건 이상 거래한 데이터를 조회할 수 있음.
- 그런데 WRITER_ID, BOARD_ID를 순차적으로 묶으면 왜 안돼나요?
- GOUPR BY 와 COUNT의 관계를 이해하는 것이 포인트 ⭐
- 즉 COUNT는 GROUP BY 로 묶인 각 그룹안의 행 개수를 세는 것
- 따라서 WRITER_ID, BOARD_ID로 묶으면 그룹이 굉장히 다양하게 됨 따라서 같은 조합으로 묶인 행이 2개 이상인 것이 없는 것
WHERE USER_ID IN ( SELECT WRITER_ID FROM USED_GOODS_BOARD GROUP BY WRITER_ID HAVING COUNT(*) >= 3
- 사용자 ID, 닉네임, 전체주소, 전화번호 조회 (단 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력 , 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력)
- CONCAT(column1, column2) : 문자열 이어 붙이기
- SUBSTRING(column1, 시작위치, 길이) : 문자열 추출하기 (1부터 시작)
- LEFT(colunm1, 3) 왼쪽부터 3개 글자 추출하기
- RIGHT(column1, 4) 오른쪽부터 4개 문자열 추출하기
SELECT USER_ID, NICKNAME, CONCAT(CITY, ' ', STREET_ADDRESS1, ' ',STREET_ADDRESS2) AS "전체주소", CONCAT(LEFT(TLNO, 3), '-', SUBSTRING(TLNO, 4, 4), '-', RIGHT(TLNO, 4)) AS "전화번호" FROM USED_GOODS_USER
- WHERE 조건을 활용하여 게시판에 글을 3건 이상 올린 것만 필터링 하기
- 왜 =이 아니라 IN 인가??in : 한 개 이상의 값을 비교하는 것, 포함하는 것 모두 필터링 함
- = : 한 개의 값만 조회하는 것 e.g. max()값을 비교할 때 쓰면 됨
- 중고 거래 3건 이상을 등록한 사용자 조회
SELECT USER_ID, NICKNAME, CONCAT(CITY, ' ', STREET_ADDRESS1, ' ',STREET_ADDRESS2) AS "전체주소", CONCAT(LEFT(TLNO, 3), '-', SUBSTRING(TLNO, 4, 4), '-', RIGHT(TLNO, 4)) AS "전화번호" FROM USED_GOODS_USER WHERE USER_ID IN (SELECT WRITER_ID FROM USED_GOODS_BOARD GROUP BY WRITER_ID HAVING COUNT(*) >= 3) ORDER BY USER_ID DESC - 내가 겪은 문제점?
- 문제2) 동일한 사람이 동일한 상품을 재구매했는지 조회하려면 그룹핑을 사람, 상품별로 2번 해줘야 합니다.
- 문제 출처
- 문제
- ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.
- 중요한 개념
- GROUP BY는 고유한 조합을 만든다. 같은 것이 두번 등장해도 하나의 그룹으로 본다.
- COUNT(*)는 GROUP BY로 묶인 각 각 그룹의 행의 개수를 세는 것
- 예시) 동일한 회원이 동일한 상품을 재구매
1 7 1 4 2 9 3 5 2 9
GROUP BY USER_ID #상세풀이 USER_ID 1 -> 2개 USER_ID 2 -> 2개 USER_ID 3 -> 1개 그룹은 3개 COUNT의 총 개수는 5개GROUP BY USER_ID, PRODUCT_ID #상세풀이 여기서는 USER_ID와 PRODUCT_ID의 조합별로 묶는 것 COUNT(*)는 조합의 수를 세는데 (1, 7) -> 1개 (1, 4) -> 1개 (2, 9) -> 2개 (3, 5) -> 1개 그룹은 4개 COUNT의 총 개수는 5개- 문제 풀이
SELECT USER_ID, PRODUCT_ID FROM ONLINE_SALE GROUP BY USER_ID, PRODUCT_ID HAVING COUNT(*) >= 2 ORDER BY USER_ID ASC, PRODUCT_ID DESC- USER_ID , PRODUCT_ID 는 조합(그룹)으로 만듭니다. (그래야지 동일한 회원이 동일한 상품을 재구매한 횟수를 알 수 있으니까)
- 조합을 만들었으니 COUNT(*)를 해줘야겠죠?
- 이때 COUNT(*)≥2는 재구매를 나타냅니다.
- HAVING으로 조건을 필터링합니다. (⚡HAVING은 그룹으로 만들어 놓고 필터링 할 때 쓰임)
- 마지막 정렬까지 마무리 하면 재구매한 아이디와 제품 조회 끝!
- 문제3) WHERE 와 HAVING의 차이
- WHERE : 그룹핑 전에 / 행 하나하나 / 필터링 / 집계함수(COUNT, SUM) 못씀
- HAVING : 그룹핑 한 후에 / 그룹 전체 / 필터링 / 집계함수(COUNT, SUM) 못씀
- 즉 WHERE은 입장 전 신분증 검사와 같이 조건이 맞지 않으면 분석에 포함하지 않는 것이고, HAVING은 분석 다 끝내고 나서 결과를 걸래내는 것이다.
- 문제4) WHERE절에서 IN 과 =의 차이IN 여러 값 중 하나라도 해당되면 OK / 다중 조건 필터링
- = 하나의 값 비교 / 단일 조건 필터링
3. 내일 학습 할 것은 무엇인지
- [ ]
#내일배움캠프 #사전캠프 #TIL
'기타 > Python' 카테고리의 다른 글
| 250605_파이썬(자료형 반복학습) (7) | 2025.06.05 |
|---|---|
| 250604_파이썬(if, for, while, def) (0) | 2025.06.04 |
| 250527_파이썬(if, for, while) , SQL(rank) (0) | 2025.05.27 |
| 250526_내일배움캠프_파이썬 기초(시퀀스 자료형) (1) | 2025.05.26 |
| 250520_내일배움캠프_데이터에 아무 값이 없을 때, 데이터가 상식적이지 않을 때, 피벗 테이블 (0) | 2025.05.20 |