요약/나만의 인사이트
- 전처리, 시각화 강의를 들으며 데이터 분석을 배우는 이유는 무엇인지 생각해봤다.
- 과거 직장생활 경험을 비추어보면 프로젝트/프로덕트의 문제의 원인을 파악해서 개선해 나가는데 희열을 느꼈기 때문에 이것과 가장 유사한 프로덕트 분석가가 되고 싶은 것 같다.
- 따라서 프로덕트 분석가가 되려면 일생 생활에서 문제를 직접 정의해보고, 분석, 인사이트, 액션 플랜 수립의 과정을 깊게 고민해보는 과정을 거쳐보는 것이 중요하다고 하는데!
- 아직은 주제 설정을 뭐로 하면 좋을지 감이 안온다.
- 조급해 하지 말고, 천천히 가보자고!
새롭게 알게 된 것
함수
def 함수이름(parameter): '''코드구문''' return # <- 필수는 아니나 명시하는게 좋음.
- 함수이름: 영어 또는 _ 로 만드는 게 일반적, 내장함수와 중복된 이름 사용하지 말 것
- 매개변수(paremeter) : 함수 내부 코드의 변수 역할
- return: 반환, 함수 종료 기능이 있음.
- 함수가 반드시 어떤 값을 return 해야 하는 것은 아님
- 기본적을 return None이 숨겨져 있음.
- 전달인자(argument): 파라미더에 전달하는 값
- def 함수이름(parameter): '''코드구문''' return # <- 필수는 아니나 명시하는게 좋음.
전역변수, 지역변수
- 전역변수(Global Variable): 함수 밖 / 파이썬 코드 전체에서 적용
b = 3
def get_square():
return b**2
get_square()
'''
9
'''
- 지역변수(Local Variable): 함수 안 / 함수 구문 내에서만 적용
def get_sqaure(x):
a = 3
return x, x**2
print(a)
'''
----> print(a)
NameError: name 'a' is not defined
'''
전달 인자 (개념 파악이 잘 안되어서 추후 복습 필요)
- 위치 전달인자
- 키워드 전달인자
- 우선순위: 위치 전달인자 > 키워드 전달인자
Docstring, Type Hint
- Docstring
- 함수는 재사용성을 위해 만들어져 있으므로 그에 대한 설명서가 있으면 이해하기 좋음
- 쌍따옴표 3쌍 ‘’’ ‘’’ 으로 선언
- Type Hint(타입 힌트)
- 함수에 들어가는 전달인자와 나오는 리턴 값의 자료형을 명시하는 기법
- 강제는 아님
- 위의 사진의 경우 x에 anything 자료형이 들어가서 반환할 때 anything 자료형이 나온다.
특히 어려웠던 것
함수 내부에서 어떤 변수를 할당(=)하면 지역 변수로 간주한다.
- 문제
new_numbers = [4, 5, 6, 7, 8, 9]
total = 0 #궁금한 점 'total = 0'이라고 함수 밖에 정의하면 전역변수로 활용할 수 있는 것 아닌지,
# 왜 에러가 나는지 궁금합니다.
total += i
return total
solution(new_numbers)
'''
erro
cannot access local variable 'total' where it is not associated with a value
"값과 관련되지 않은 로컬변수 'total'에 접근 할 수 없다.
'''
- 궁금한점
- 함수 밖에 total = 0이라고 할당하면 전역변수니까 함수 안에서도 사용가능한거 아닌가?
- 해설
- nope!
- 할당(=)하면 지역 변수로 간주한다.
- 파이썬은 함수 내부에서 어떤 변수에 값을 할당하면, 해당 변수는 지역변수로 취급한다. 따라서 total += i에서 total은 함수 안의 지역 변수로 간주된다. 따라서 함수 내부적으로 지역변수를 찾으려 하지만 아직 선언되지 않아서 오류가 발생하는 것
- 전역변수는 읽기만 가능하다.
- 전역변수 일지라도 함수 내부에 사용하려면 global이라고 써야 함.
- 정리
- 함수 내부에서 어떤 변수에 값을 할당해?
- okay 그 변수는 지역변수, 함수내부에서 작동
- 외부에서 할당한 전역변수는 함수 내부에선 읽기만 가능
- 만약 쓰고 싶다면 global 써야함.
for문 안에 if가 있을 때
- for는 모든 요소를 차례대로 순회한다.
- if 조건이 참인 경우에만 변수에 저장한다.
- 조건이 거짓이면 저장하지 않고 그냥 넘어간다.
- 결국 변수에는 “조건을 만족했던 마지막 값”이 저장되어 있기 때문에 그 변수를 return 하면 마지막으로 조건을 만족했을 때 저장한 값이 반환된다.
-
last_even([1, 2, 5, 8, 9]) #8 def last_even(numbers): for x in numbers: if x % 2 == 0: last_even_num = x return last_even_num # for문은 리스트의 모든 요소를 순회한다. # 이때 if문은 조건이 참일 경우에만 실행된다. # 따라서 2, 8일 때는 if문 블록이 실행되고, # 그때마다 last_even_num에 해당 값이 할당된다. # 가장 마지막으로 조건을 만족한 값은 8이므로, # 함수는 8을 반환하게 된다. '''리스트를 순회하며 짝수를 찾고, 마지막 짝수를 반환한다.'''
SQL - UNION
- UNION에 대한 개념정립
- 용도 : 두 개 이상의 SELECT 쿼리의 결과를 세로로 결합
- 차이 : UNION ALL _ 중복포함 UNION _ 중복제거
- 주의
- 결합하는 SELECT 쿼리들의 컬럼 개수, 데이터 타입, 컬럼 순서가 일치
- 결과 집합의 컬럼명은 첫번째 SELECT 쿼리의 컬럼명이 사용
- ORDER BY는 전체 UNION 결과에 대해 마지막 한 번 만 사용 가능
- LIMIT도 전체 UNION 결과에 대해 마지막 한 번 만 사용 가능
- 개념 참고 : https://bruders.tistory.com/169
- 관련 문제 풀이
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/131537
- 풀이 핵심 포인트
- 날짜별 항목이 나열 된 세로형 결과값이 필요하네? — > UNION ALL 쓰자!
- 컬럼이 없으면? —→ NULL AS ALIAS 로 빈 컬럼 만들 수 있다.
- 정렬은 전체 UNION에 한번만!
- 코드
-- 1. 22년 3월 온, 오프 상품 리스트 조회 SELECT DATE_FORMAT(sales_date, "%Y-%m-%d") AS sales_date, product_id, user_id, sales_amount FROM online_sale WHERE sales_date BETWEEN '2022-03-01' AND '2022-03-31' --- 2. 중복 없이 UNION ALL 하기 단 컬럼명, 컬럼개수, 컬럼데이터 타입 동일하게 구성 --- 컬럼명이 없는 경우 NULL AS user_id로 UNION ALL SELECT DATE_FORMAT(sales_date, "%Y-%m-%d") AS sales_date, product_id, NULL AS user_id, sales_amount FROM offline_sale WHERE sales_date BETWEEN '2022-03-01' AND '2022-03-31' -- 3. 전체 테이블에 order by 한번만, 단 컬럼명은 첫번째 테이블 기준으로 적용됨 ORDER BY sales_date, product_id, user_id
다음에 적용해 볼 것
- 문제를 모두 못 풀더라도 로직 설계까지 해보는데 의의를 두자
- 그것 또한 나의 역량을 향상시키는 방법이니까!
- 논리적, 구조적 사고를 키우는데 도움 되는 책을 서치해보자
'기타 > Python' 카테고리의 다른 글
| 250616_파이썬 내장함수, 클래스(추상클래스 등) (0) | 2025.06.16 |
|---|---|
| 250611,13_클래스 (0) | 2025.06.13 |
| 250609_파이썬(정수→문자열→리스트) (0) | 2025.06.09 |
| 250605_파이썬(자료형 반복학습) (7) | 2025.06.05 |
| 250604_파이썬(if, for, while, def) (0) | 2025.06.04 |