TIL_스파르타_데이터 분석 캠프 10기_유호빈 (2025.09.24)

유호빈·2025년 9월 24일

Data분석_10기

목록 보기
3/74

우중충하게 비가 온다.
주말까지 비가온다하더라.
손세차 했는데 이거 참 곤란하다.
물때 생기겄네.

1. 오늘 학습 키워드

오늘은 SQL 2-1~7 수강, python 1-8~1-14 수강을 하였다.

2. 오늘 학습 한 내용을 나만의 언어로 정리하기

select cuisine_type,
	   min(price) min_price,
	   max(price) max_price
from food_orders 
group by cuisine_type 
order by MIN(price) desc, MAX(price)

오늘 SQL은 max, min 함수를 이용해서 최댓값, 최솟값을 구하는 것과,
여기에 적혀있진 않지만 where절을 이용해서 원하는 데이터뽑고, 계산하는 것과,
group by를 이용해서 범주별 연산을 한번에 끝내는 것,
order by를 이용해서 Query 결과를 정렬하는 것을 배웠다.
지금 보는 코드는 실습으로 한 문제이고, 조건은 아래와 같다.

음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬해봅시다.
1. 아래의 조건을 참고하여 SQL문을 작성해주세요.
2. 실습에서 사용한 Query 를 적기 전에 흐름을 정리해보기 를 활용해보세요
3. 가장 높은 금액, 가장 낮은 금액은 MIN, MAX 함수로 구할 수 있습니다
4. 내림차순은 desc 를 함께 써줘야 합니다

process는 간단했다. select와 from을 이용해서 전체 데이터를 보고,
max, min 함수를 이용해서 최댓값, 최솟값을 본 뒤,
group by를 이용하여 범주(cuisine_type) 연산을 하고,
order by를 이용해서 결과를 정리했다. (desc)

python은 함수, 튜플, 집합, f-string, 예외처리, 파일 불러오기를 배웠다.

#quiz

def check_gender(pin):
    num = pin.split('-')[1][0]
    if int(num) % 2 == 0:
        print('여성')
    else:
        print('남성')

my_pin = '200101-3012345'
check_gender(my_pin)

대표적인 코드 하나를 들고왔다. 함수 관련 강의를 할 때 사용했던 코드들이다.
코들르 보게 되면 def, print, if, elif, else, return등의 함수들을 이용해서 원하는 값이 출력되도록 유도하는 경향을 볼 수 있다.

이 코드는 주민번호를 통해 gender를 구분하는 코드인데,
주민번호상 -다음의 첫번째 숫자가 gender를 결정하는 숫자이므로,
split을 이용해서 '-'이후 첫번째 숫자를 pin.split('-')[1][0]을 이용하여
[1]에서 '3012345'를 가져오고 [0]에서 '3'을 가져온다.
정상적으로 출력이 되면 if구문을 작성해서 gender를 결정하는 조건문을 작성한다.

#튜플 -> 값이나 순서를 바꿀 수 없음
a = (1,2,3)
print(a[0])

# 집합
a = [1,2,3,4,3,2,3,4,5,8,7,1]

a_set = set(a)
print(a_set)

# 교집합, 합집합, 차집합 계산

a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']

a_set = set(a)
b_set = set(b)

print(a_set & b_set) # 교집합
print(a_set | b_set) # 합집합

#QUIZ
student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']

a_set = set(student_a)
b_set = set(student_b)

print(a_set - b_set) # 차집합

그리고 튜플을 이용해서 딕셔너리 대신 리스트와 튜플로 딕셔너리 비슷하게 만들 수 있으며,
집합을 이용해서 수학에서 배웠듯이 합집합, 교집합, 차집합을 구할 수 있다.

scores = [
    {'name':'영수','score':70},
    {'name':'영희','score':65},
    {'name':'기찬','score':75},
    {'name':'희수','score':23},
    {'name':'서경','score':99},
    {'name':'미주','score':100},
    {'name':'병태','score':32}
]

for s in scores:
    name = s['name']
    score = str(s['score'])
    print(name, score)

for s in scores:
    name = s['name']
    score = str(s['score'])
    print(name+'의 점수는 100점입니다.')

for s in scores:
    name = s['name']
    score = str(s['score'])
    print(name+'의 점수는'+ str(score)+'점입니다.')
    print(f'{name}의 점수는 {score}점입니다.') # 더 심플한 방법

이건 f-string에 대한 코드들인데, for문, 그리고 f''를 이용해서 하면 f-string이 사용되어 더 간단하게 할 수 있다.
이건 visual code에서 내가 file을 png, stem, csv, xlsx를 만들 때 사용했던 구문인 것 같은데, 다시한번 확인해봐야 겠다.

# age가 없는 경우
people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby'},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]
for person in people:
    try:
        if person['age'] > 20:
            print(person['name'])
    except:
        print(person['name'], '에러입니다.')

예외처리는 try-expert 구문을 이용해서 어디서 error가 발생하였는지 확인 할 수 있다.

def say_hi():
    print('안녕!')

def say_hi_to(name):
    print(f"{name}님 안녕하세요!")

이건 먼저 다른 파일에 함수를 저장해두고,

from main_func import *

say_hi()
say_hi_to('영수')

from-import를 이용해서 다른 파일에서의 함수를 불러올 수 있다.
이건 내가 visual code에서 python 독학을 할 때 많이 했던 거다.
다양한 파일을 한꺼번에 불러와서 그 데이터를 연속으로 처리하는 것도 가능하니,
유용하다.

3. 학습하며 겪었던 문제점 & 에러

select cuisine_type,
	   min(price) min_price,
	   max(price) max_price
from food_orders 
group by cuisine_type 
order by MIN(price) desc, MAX(price)

코드를 보면 알겠지만, 난 처음에 order by 절에 max(price) 뒤에도 desc를 넣어서 원하는 정렬이 나오지 않았다. 내가 문제를 처음에 잘못 읽어서 생긴 오류이다. 왜 그런지 곰곰히 생각해보고, 결과문 예시를 보고 다시 생각해보니, min 뒤에다가 desc를 넣어야 원하는 정렬이 되었다.
조건을 잘 보고, 그에 맞게 내가 코드를 적용시켜야 하는 것이 중요한 것이다.
그리고 정답을 보니 굳이 max(price)를 order by 절에 작성할 때 넣을 필요가 없다는 것이다... 이유는 뭔지 다시 분석을 해봐야 할 것 같다.
분석했다. 그냥 내가 문제를 잘못읽었다. 멍청하구만.

4. 내일 학습 할 것은 무엇인지

학습량이 좀 많다고 느껴진다. 그만큼 복습도 중요하기에, 지정 공부 시간 외에도 복습을 하여 머리속에 각인을 해야겠다.
내일은 SQL 챕터 3과 python 나머지 강의를 모두 듣고, 복습 1회, SQL 퀴즈를 많이 풀어볼 것이다.

profile
데이터 분석을 하고 싶은 화공쟁이

0개의 댓글