ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [부트캠프] 데이터 분석을 위한 SQL과 Python
    대외활동 및 교육/패스트캠퍼스 데이터 분석 부트캠프 2023. 3. 17. 12:29

    이번 주 화요일까지는 저번 주에 이어 정미나 강사님의 SQL 강의가 있었습니다!

    배운 내용을 간단히 소개해보겠습니다.


    JOIN

    먼저 저번 시간에 이어 JOIN에 대해 추가로 배웠는데요.

    CROSS JOIN은 각 테이블 간 조합할 수 있는 모든 경우를 출력할 때 쓰는 방식입니다.

    하지만 그렇기 때문에 CROSS JOIN은 데이터가 뻥튀기 될 수 있다는 우려가 있다고 합니다.

     

    SELF JOIN은 하나의 테이블 안에 계층 구조가 있을 때 계층을 한번에 보기 위해 많이 사용되는 방식입니다.

     

    JOIN에 대해서는 제가 앞서 포스팅한 아래 글을 참고해주세요!

    2023.03.17 - [데이터분석/SQL] - [SQL] MySQL - 데이터 만지기

     

    [SQL] MySQL - 데이터 만지기

    규칙 만들기 SQL에서도 조건을 만들 수 있습니다. IF 함수를 사용해서 조건을 만들면 되는데요, 기본 구조는 다음과 같습니다. IF(조건식, 참일 때 값, 거짓일 때 값) IF 절은 주로 SELECT 절에서 사용

    annalyst.tistory.com

     

    서브쿼리

    서브쿼리는 하나의 쿼리가 또 다른 쿼리를 품고 있는 경우를 말합니다.

    서브쿼리가 어느 위치에 위치하는지에 따라 이름이 다른데요.

    SELECT 절에 있으면 스칼라 서브쿼리,

    FROM 절에 있으면 인라인 뷰,

    WHERE 절이나 HAVING 절에 있으면 중첩 서브쿼리라고 합니다.

     

    직접 보는 게 더 이해하기 빠르니까 바로 예제를 보여드리겠습니다.

    SELECT ProductName,
           Unit,
           (SELECT C.CategoryName
            FROM Categories C
            WHERE P.CategoryID = C.CategoryID) CategoryName
    FROM Products P

    위 코드는 스칼라 서브쿼리의 예시입니다.

    카테고리 ID만 있는 Products 테이블에서 카테고리 이름을 가져오기 위해

    카테고리 테이블에서 카테고리 이름 컬럼만 빼온 것이죠.

     

    다음으로는 인라인 뷰의 예시입니다.

    SELECT P.ProductID, P.ProductName, S.SupplierID, P.CategoryID, P.Unit, P.Price
    FROM Products P
    LEFT OUTER JOIN (SELECT SupplierID
                     FROM Suppliers
                     WHERE Country = 'Japan') S
    ON P.SupplierID = S.SupplierID

    전체 상품 데이터를 가져오는데

    공급사가 일본에 위치한 상품만 공급사 ID를 표시하고 나머지는 NULL로 출력하는 방식입니다.

    Products 테이블을 기반으로 두지만,

    인라인 뷰로 일본 공급사의 공급사 ID만 빼와서 LEFT OUTER JOIN으로 합친 것이죠.

     

    마지막으로 중첩 서브쿼리의 예시입니다.

    SELECT *
    FROM Orders
    WHERE ShipperID = (SELECT ShipperID FROM Shippers WHERE Phone LIKE '%3199')

    배송사의 전화번호가 3199로 끝나는 배송사의 모든 주문 정보를 출력하는 방법입니다.

    WHERE 절에서 조건을 줘서 필요한 데이터만 빼오는 것입니다.


    그 외에도 ROLL UP, PIVOT, 데이터를 정의하는 DDL문까지

    다양한 실습을 통해 SQL을 공부했습니다.

     

    화요일엔 SQL 강의를 마무리하는 퀴즈도 진행됐는데요.

    열심히 복습한 결과 이번에도 다 맞을 수 있었답니다 👏


    수요일부터는 조희주 강사님의 파이썬 강의가 시작됐습니다!

     

    데이터 타입

    파이썬의 데이터 타입은 크게 3가지가 있습니다.

    먼저 문자열(string)은 문자, 단어 등으로 구성된 자료형입니다.

    쉽게 말해서 따옴표(", ')로 감싸져 있다면 다 문자열이라고 볼 수 있습니다.

     

    다음으로 숫자는 말 그대로 숫자로 이루어진 자료형인데,

    int 타입은 정수, float 타입은 실수, complex 타입은 복소수를 의미합니다.

    숫자 자료형은 사칙 연산이 가능하다는 특징이 있습니다.

     

    마지막으로 Boolean은 참과 거짓으로 나타나는 자료형입니다.

    예를 들어, print(1 < 2) 라고 하면 True라고 반환되는데, 이런 자료형을 말합니다.

     

    자료형이 어떻게 되는지 알고 싶다면 type() 함수를 통해 확인할 수 있습니다.

    그리고 자료 간 형 변환도 가능한데요.

    int형을 string으로 바꾸고 싶을 땐 str()로 감싸주고,

    string을 int나 float로 바꾸고 싶을 땐 int()나 float()로 감싸주면 됩니다.

     

    변수

    파이썬에서는 변수를 이용해 값들을 저장할 수 있습니다.

    예를 들어, sum이라는 변수에 1+2를 담았다고 하겠습니다.

    그럼 sum을 print() 함수로 출력하면 어떤 결과가 나올까요?

    앞서 말했듯이 숫자형은 서로 사칙연산이 가능하기 때문에

    sum에는 1+2의 결과값인 3이 저장된 것을 알 수 있습니다.

     

    출력도 있으니 입력도 있겠죠?

    파이썬에서 쓰이는 입력 함수로는 input()이 있습니다.

    input() 함수로 입력된 값은 문자열로 저장된다는 특징이 있습니다.

     

    조건문 If

    조건문은 말 그대로 조건을 줘서 그 조건이 True이면 해당 결과를 반환하는 방식입니다.

    If문의 기본 구성은 다음과 같습니다.

    if [조건문1]:
        [수행할 문장] 
        ...
    elif [조건문2]:
        [수행할 문장]
        ...
    ...
    else:
       [수행할 문장]
       ...

    만약 [조건문1]이라면, 아래 문장을 수행하고

    그게 아니라 [조건문2]이라면, 아래 문장을 수행하고

    그것도 아닌 나머지는 else 밑 문장을 수행한다는 뜻입니다.

    elif는 여러 개가 들어갈 수 있고 else 없이도 if문은 돌아갈 수 있습니다.

    파이썬은 인덴트(tab)에 굉장히 민감한 언어이기 때문에 꼭 잘 지켜서 써주세요!

     

    조건문에는 보통 연산자가 들어가는데,

    <, >, <=, >=, ==, != 와 같은 연산자 이외에도

    and, or, not, in, not in과 같은 연산자가 들어갈 수도 있습니다.

    각각의 의미는 다음과 같습니다.

    예시를 하나 들어보겠습니다.

    점수가 80점 이상이면 A, 60점 이상이면 B, 그보다 낮으면 재시험을 봐야 한다고 합시다.

    그럴 때는 다음과 같이 작성합니다.

    score = int(input("점수를 입력하세요"))
    
    if score >= 80:
    	print("A")
    elif score >= 60:
    	print("B")
    else:
    	print("재시험")

    사용자에게 점수를 입력 받아서 비교를 하는데,

    input 함수로 입력 받은 결과는 문자열로 저장하기 때문에 비교를 위해서는 형 변환이 필요하다는 거 기억해주세요!

     

    반복문

    반복문은 대표적으로 두 가지를 생각할 수 있습니다.

     

    먼저 for문은 순서형 자료를 반복할 때 사용됩니다.

    for문의 기본 구조는 다음과 같습니다.

    for 변수 in 리스트:
    	[수행할 문장]
        ...

    for문 안에 range() 함수가 많이 사용되는데,

    range() 함수는 range(시작 위치, 끝 위치+1, 스텝)의 구조를 가지고 있습니다.

    예를 들어, range(1, 11, 1)을 출력하면 1부터 10까지 모든 숫자가 나오게 됩니다.

    1부터 10 사이의 짝수를 출력하고 싶다면 어떻게 할까요?

    range(2, 11, 2) 이렇게 출력하면 쉽게 출력할 수 있습니다.

     

    for문을 사용해 구구단 2단을 한번 출력해보겠습니다.

    for i in range(1, 10):
        print("2 X", i, "=", 2*i)

    이렇게 i가 1부터 9까지의 숫자가 되어 2*i를 출력해주게 됩니다.

     

    while문은 조건문이 참인 동안 계속 반복할 때 사용됩니다.

    while문의 기본 구조는 다음과 같습니다.

    while [조건문]:
    	[수행할 문장]

    while문을 강제로 그만 두고 싶다면 어떻게 해야할까요?

    그럴 때는 break 문을 넣어 빠져나올 수 있습니다.

    while문 안에서 조건이 맞지 않을 경우 빠져나오지 않고 다시 시작점으로 돌아가 다음 루프를 돌고 싶다면

    continue 문을 넣어 맨 처음으로 돌아갈 수 있습니다.

     

    while문을 사용해 'quit'이라는 문자를 입력해야만 while문이 끝나는 반복문을 만들어보겠습니다.

    while True:
        end = input("종료하려면 quit를 입력해주세요")
        if end == 'quit':
            break
        else:
            print("잘못 입력하셨습니다. 다시 입력해주세요.")

    위 코드를 실행하게 되면 'quit'이라는 문자를 입력하기 전까지는 계속 입력 창이 뜨게 됩니다.

     

    리스트

    리스트는 문자나 숫자를 모은 것이라고 할 수 있습니다.

    리스트는 비어 있을 수도 있고, 숫자나 문자로만 이뤄질 수도 있고, 숫자와 문자가 혼합된 형태일 수도 있으며,

    리스트 안에 리스트가 들어갈 수도 있습니다.

     

    리스트 안에 있는 값들은 인덱스 번호를 통해 접근할 수 있는데요, 이걸 인덱싱이라고 합니다.

    예를 들어 apple, banana, carrot 이라는 요소를 가진 리스트 lst가 있다고 합시다.

    lst에서 apple을 가져오고 싶다면 어떻게 해야 할까요?

    apple은 lst에서 0번째 자리에 위치하니까 lst[0]을 통해 접근할 수 있습니다.

    리스트에서는 인덱싱뿐만 아니라 슬라이싱도 가능한데요.

    슬라이싱은 여러 요소를 한번에 인덱싱한다고 생각하시면 됩니다.

    예를 들어, lst에서 apple과 banana를 한번에 가져오기 위해서는 다음과 같이 쓸 수 있습니다.

    range랑 비슷할 수 있는데, lst[시작 위치, 끝 위치+1, 스텝]의 형식으로 슬라이싱이 가능합니다.

    이때 시작 위치나 끝 위치를 생략하게 되면

    처음부터 끝 위치까지, 또는 시작 위치부터 맨끝까지 라는 의미가 됩니다.

     

    리스트를 좀 더 간단하게 표현하는 방법으로는 list comprehension이 있습니다.

    for문을 사용해서 리스트로 길게 넣어야 했던 것을 훨씬 짧게 표현할 수 있는 방법입니다.

     

    예를 들어, a라는 리스트에 1부터 10까지의 숫자를 넣고 싶다고 해봅시다.

    for문을 이용하게 되면코드의 길이도 길어지고,

    빈 리스트를 만들어서 그 안에 하나씩 넣는 append 함수도 써야 된다는 복잡함이 있습니다.

    하지만 list comprehension을 사용하게 되면 훨씬 간단하게 a를 만들 수 있겠죠?


    이렇게 이번 주 수업은 끝이 났습니다.

    데이터 분석에서 파이썬은 굉장히 중요한 언어이고,

    이번 주에 배운 내용들은 파이썬 기초로 앞으로 많이 쓰게 될 개념들이니

    열심히 복습해봐요! 🙌

    댓글

Designed by Tistory.