요약/나만의 인사이트
- V-Code 활용 시 프로젝트 단위별로 폴더1/가상환경을 만들어야 한다.
- 그래야 라이브러리 충돌 없이 잘 사용할 수 있다.
- 가상환경 activiate하고 나서 가성환경 unactivate한다.
- 나의 라이브러리 환경을 공유하고 싶으면, pip freeze >requirements.txt로 할 수 있다.
- lambda 함수는 간결하고 간편한 방식으로 정의하는 함수이다. 함수를 인자로 전달해야 하는 경우에 유용하게 사용된다. answer = lambda x: x**2 x라는 매개변수에 값을 받아 제곱을 반환한다. print(answer(5)) #25
- 길이 len(s)의 문자열에서 len(p)만큼 부분추출하기 위해선 range(0, len(s)-len(p)+1)까지 순회해야 한다.
- 크로스 조인하면 각각의 테이블의 행의 개수를 곱한만큼 행이 생성된다.
- group by 시 대분류, 중분류, 소분류를 유념하며 하자. 각각 공통된 값끼리 집계가 된다.
- 조인시 기준이 되는 컬럼을 on 절에 여러개 묶을 수있다.
새롭게 알게 된 것
- 가상환경
- 로컬(내 컴퓨터)은 하나의 환경으로 동작한다.
- 프로젝트 단위별로 폴더1/가상환경1를 생성해서 분리해 사용한다.
- 그 이유는 프로젝트 별로 라이브러리가 상이하기 때문에 충돌을 막기위함이다.
- 파이썬은 가장 최근 버전보단 한단계 아래 버전 사용 권장 (라이브러리 최신화에 시간이 소요되기 때문)
- 진행방법
- 폴더 생성
- 그 폴더 안에 가상환경 생성 - python -m venv venv
- 가상환경 활성화 - .\\\\venv\\\\Scripts\\\\activate
- 라이브러리 다운 - pip install pandas
- 가상환경에 설치된 라이브러리 목록 확인 - pip list
- 가상환경 비활성화 - deactivate
- 현재 사용하고 있는 모듈 저장하기 - pip freeze > requirements.txt
- 추후 requirements 파일이 있으면 다음 명령어로 그대로 모듈 설치 가능 - pip install -r requirements.txt
- (프로젝트 초기 세팅)
- 참고개념) 가상환경 / 커널 / 인터프리터 /컴파일러
- 가상환경(venv): 파이썬에서 라이브러리나 패키지를 독립적으로 관리할 수 있게 해주는 공간(환경) 프로젝트마다 패키지 버전이 다를 때 충돌없이 관리할 수 있음. 하나의 가상환경에 여러 프로젝트를 관리하면 라이브러리 다운받을 때마다 버전이 서로 호환되어 충돌할 수 있음.
- like 라이브러리를 다운받는 공간
- 커널(kernel): 주피터 노트북에서 코드를 실행해주는 실행엔진과 같음. 주피터 노트북의 커널을 특정 가상환경에서 연결해서 실행할 수 있음. 즉 어떤 가상환경이 활성화된 상태에서 그 커널을 실행하면, 가상환경의 패키기 사용가능
- like 주피터 노트북의 코드를 실행해주는 조수
- 가상환경과 커널의 관계 : 가상환경(방)에 커널이 연결해, 라이브러리를 사용해서 코드를 실행함.
- 인터프리터: 프로그래밍 언어로 쓴 코드를 한 줄 씩 읽어서 바로 실행해주는 프로그램 주피터 노브툭의 커널도 인터프리터 중 하나이다. (파이썬, 자바)
- 컴파일러 : 전체 파일을 한꺼번에 번역해서(컴파일해서) 실행 파일을 만듦. (C, C++)
- 가상환경(venv): 파이썬에서 라이브러리나 패키지를 독립적으로 관리할 수 있게 해주는 공간(환경) 프로젝트마다 패키지 버전이 다를 때 충돌없이 관리할 수 있음. 하나의 가상환경에 여러 프로젝트를 관리하면 라이브러리 다운받을 때마다 버전이 서로 호환되어 충돌할 수 있음.
특히 어려웠던 것
- 파이썬 - 길이 N의 부분문자열 뽑기
- 문제
- 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
- 예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
- 핵심 개념
- 슬라이싱 t[0:3] , t[1:4], t[2:5], t[3:6], t[4:7]
- len(p)길이 만큼 뽑기
- t[i : i+len(p)]
- 슬라이싱 마지노선 range 5
- for i in range 5
- for i in range ( len(t) - len(p) + 1)
- 슬라이싱 t[0:3] , t[1:4], t[2:5], t[3:6], t[4:7]
- 길이 len(s)의 문자열에서 길이 k짜리 substing은 range(len(s)-k+1)번 반복
- 풀이
def solution(t, p): answer = [] for i in range (len(t)-len(p)+1): answer.append(t[i:i+len(p)]) count = 0 for j in answer: if int(j) <= int(p): count += 1 return count - 문제
- SQL -cross join , null 값도 count
- 문제
- Write a solution to find the number of times each student attended each exam. Return the result table ordered by student_id and subject_name. The result format is in the following example.
- 핵심개념
- 학생별 모든 과목이 리스트업되도록 cross join
- cross join한 테이블을 CTE를 활용해 임시테이블로 만들기
- 학생별 모든과목이 다 나오도록 left join 이때 on 절로 묶을 때 학생 아이디와 과목이 여러개니까 아이디, 과목별로 묶일 수 있도록 함.
- 학생 이름, 과목으로 group by
- 과목 count , 이때 null값은 제외되도록 examination의 subject_name을 카운트
- 풀이
# Write your MySQL query statement below # 각 학생이 시험에 참가한 횟수 # 조회; student_id subject_name # 시험테이블과 학생 테이블을 id기준으로 join해서 학생 아이디 기준으로 count (새로운 행) # order by student_id, subject_name WITH A AS ( SELECT S.student_id, S.student_name, U.subject_name FROM Students S CROSS JOIN Subjects U ) SELECT A.student_id, A.student_name, A.subject_name, COUNT(E.subject_name) AS attended_exams FROM A LEFT JOIN Examinations E ON A.student_id = E.Student_id AND A.subject_name = E.subject_name GROUP BY A.student_name, A.subject_name ORDER BY A.student_id, A.subject_name - 문제
- 통계학
- 복습
- 다중선형회귀는 다양한 지표를 통해서 모형의 적합정도를 평가해한다.
- 선형회귀는 x, y간에 선형성이 있다고 가정해야 세울 수 있는 모형
- but y가 끊어진 데이터 있을 경우(범주형 데이터)
- 분류
- 입력값을 통해 미리 정의된 범주 중 하나로 분류하는 문제
- 임계값(ex 0.5)을 기준으로 분류하는 것
- 로지스틱 회귀
- 오즈: 몇배 더 많은가?
- 오짓함수 : 오즈에다 로그를 씌움
- 확률 / 오즈 / 로그오즈
- 결과가 범주형일 때 확률을 예측하는 회귀모양
- 2개의 값, 이진범주형일 때 결과값을 예측
- 1일 확률과 0일 확률
- (TP) positive라고 예측했는데 맞았다.
- (TN) negavtive라고 예측했는데 맞았다.
- 로직스틱 회귀의 한계
- 선형회귀의 한계
- 복습
- 머신러닝
- 이상치 제거(정규분포이용)
- 평균, 표준편차 구하기
- 평균으로부터 +-3시그마 범위 내 : 정상
- 평균으로부터 +- 3시그마 범위 외 : 비정상
- 정규분포보다 IQR방법이 더 엄격하다.
- 스탠다드 스케일링(평균, 표준편차), minmax 스케일링(0~1)
- fit.transform : 통계값을 계산해 적용해준다.
- 범주형데이터 변환 예외는 catboost이다. (카테고리기반 모델)
- 순서가 있는 경우에만 라벨 인코딩
- 원핫인코딩 = 겟 더미즈 활용
- 다중공선성확인 - 상관관계, VIF
- 이상치 제거(정규분포이용)
다음에 적용해 볼 것
- 슬라이딩 윈도우, 부문 문자열 문제 5개 이상 풀어보기
- cross join , null 값 count 하기
'기타 > Python' 카테고리의 다른 글
| 250711_파이썬(순열과 조합), 데이터분석의 흐름 (1) | 2025.07.11 |
|---|---|
| 250710_파이썬(표준라이브러리), 머신러닝(선형회귀, 랜덤포레스트 복습) (2) | 2025.07.10 |
| 250628_판다스(조회, 정렬, 조건필터, 통계, 복사와 결측치) (1) | 2025.06.30 |
| 250618_SQL변수선언 @hour / 파이썬 for if if (0) | 2025.06.18 |
| 250616_파이썬 내장함수, 클래스(추상클래스 등) (0) | 2025.06.16 |