def solution(d, budget):
answer = 0
d.sort()
for i in d:
if i <= budget:
answer += 1
budget -= i
return answer
def solution(d, budget):
d.sort()
return len([cost for cost in d if (budget := budget - cost) >= 0])
def solution(d, budget):
d.sort() # 부서별 신청 금액을 오름차순으로 정렬
total = 0
# 부서별 신청 금액과 인덱스를 순회
for i, cost in enumerate(d):
total += cost
if total > budget: # 예산이 부족한 경우
return i # 이때까지 지원한 부서의 개수(인덱스) 반환
# 모든 부서를 지원할 수 있는 경우
return len(d)
| 특징 | sorted() | sort() |
|---|---|---|
| 반환값 | 정렬된 새로운 리스트 반환 | None 반환 (원본 리스트 변경) |
| 원본 데이터 | 변경되지 않음 | 변경됨 |
| 사용 가능 대상 | 모든 iterable | 리스트만 사용 가능 |
WITH cte AS (
SELECT
product_id
FROM
Sales
WHERE
sale_date NOT BETWEEN '2019-01-01' AND '2019-03-31'
)
SELECT
DISTINCT p.product_id, p.product_name
FROM
Product AS p
JOIN Sales AS s
USING (product_id)
WHERE
p.product_id NOT IN (TABLE cte)
;
→ 너무 어렵게 생각해서 푸는 데 오래 걸렸음
select s.product_id, product_name
from Sales s join Product p on s.product_id=p.product_id
group by s.product_id
having min(sale_date) >= date('2019-01-01') and max(sale_date)<=date('2019-03-31')
select product_id,product_name
from Product where product_id not
in
(
select p.product_id from Product p left join Sales s
on p.product_id=s.product_id
where s.sale_date <date('2019-01-01')
or
s.sale_date >date('2019-03-31')
or
s.seller_id is null
);
타이타닉 데이터
용어 정리
| X | y |
|---|---|
| 문제 데이터 | 정답 데이터 |
| 독립변수(independent variable) | 종속변수(dependent variable) |
| input(입력) | output(출력) |
| Feature(특성) | Label(결과) |
| Attribute | Target |
| Explanatory variable(원인 변수) | Outcome variable(결과 변수) |
| Control | Class |
| Predictor variable(예측 변수) | Response variable(반응 변수) |
| Manuplate | … |
독립 변수가 연속형 자료라면 공변량(Covariance)이라고 부르고, 범주형 자료라면 요인(Factor)이라고 부름
결측치를 채우기 위해 다양한 전처리 과정 필요!
Age Column 처리
.corr(): 상관관계 파악QnA
피벗 테이블

The overall picture for Feature Engineering
title = ['Mr', 'Mrs', 'Miss', 'Master',
'Rev', 'Don', 'Dr', 'Mme',
'Ms','Major', 'Lady', 'Sir',
'Mlle', 'Col', 'Capt', 'the Countess',
'Jonkheer']
# 중요한 5개의 호칭을 제외한 나머지 호칭은
# Others로 변환하여 리스트에 저장
convert_title = ['Mr', 'Mrs', 'Miss', 'Master',
'Rev'] + ["Others"]*(len(title)-5)
# map 함수를 사용하기 위해서는 dictionary 형태여야 함!
# → zip 함수를 활용해 변환: dict(zip())
# 리스트 형태인 2개의 값들을 합쳐주도록 하자!
title_dict = dict(zip(title, convert_title))
test["Title"].unique()
# trian에는 없는 Dona 데이터 확인 → 딕셔너리에 추가
title_dict["Dona"] = "Others"
# title_dict를 활용하여 실제 Title 컬럼을 변경
# map(): key값을 검색해 해당 value로 변경
train["Title"] = train["Title"].map(title_dict)
test["Title"] = test["Title"].map(title_dict)
# 6개의 데이터만 남은 것을 확인
train.drop(
["Ticket", "Name", "SibSp", "Parch"],
axis=1,
inplace=True
)
test.drop(
["Ticket", "Name", "SibSp", "Parch"],
axis=1,
inplace=True
)
# X_train, y_train, X_test
# y_test는 캐글이 가지고 있음
# X_train(Survived 컬럼 제외)
X_train = train.drop("Survived", axis=1)
# y_train
y_train = train["Survived"]
# X_test
X_test = test
# 크기 확인
X_train.shape, y_train.shape, X_test.shape
((891, 8), (891,), (418, 8))

pd.get_dummies(X)
# 주의: 인코딩 → train, test 둘 다 적용해야 함
X_train = pd.get_dummies(X_train, dtype="int") # dtype 안 넣으면 True(1), False(0)로 나옴
X_test = pd.get_dummies(X_test, dtype="int")
# 크기 확인
X_train.shape, X_test.shape
# set(): 중복이 없는 unique한 값들로 구성한 집합
# 집합으로 만들면 연산이 가능해짐(차집합)
set(X_train.columns) - set(X_test.columns)
# 출력: {'Deck_T'}
# Deck_T가 train에만 존재함을 확인
X_test["Deck_T"] = 0
X_test.shape
# (418, 26)
# 머신러닝 학습을 위해 X_train에 있는 Deck_T를
# 제일 뒤로 옮겨주도록 하자!
# 1. Deck_T 컬럼을 임시변수(temp)에 저장
temp = X_train["Deck_T"]
# 2. X_train에서 Deck_T 컬럼을 제거
X_train = X_train.drop("Deck_T", axis=1)
# 3. X_train에 temp 병합
# pd.concat([df1, df2], axis=1)
X_train = pd.concat([X_train, temp], axis=1)# 맞춰주고 싶은 2개의 컬럼명을 가져와서 인덱싱 -> 대입
X_test = X_test[X_train.columns]→ 평가 X, 예측 O -> pre1, pre2, pre3
(y_test 값은 kaggle이 가지고 있어 내가 평가 못함)
# 모델 불러오기~
from sklearn.neighbors import KNeighborsClassifier # 최근접 이웃모델
from sklearn.tree import DecisionTreeClassifier # 의사결정나무모델
# knn_model1
knn_model1 = KNeighborsClassifier(n_neighbors= 3)
knn_model1.fit(X_train,y_train)
pre1 = knn_model1.predict(X_test)
# kaggle에 예측결과 업로드
kaggle = pd.read_csv('./data/gender_submission.csv')
# Survived 컬럼에 우리의 예측값 덮어 씌우기
kaggle['Survived'] = pre1
# csv 파일로 저장
kaggle.to_csv('./data/submission/250704_knn_result1.csv', index = False)



교차검증 하는 이유
과적합 확인하기 위해 → + 제어(by hyperparameter tuning)
모델 일반화를 높여주기 위해

1. Train 데이터를 K개의 그룹으로 나눈다.
2. K-1개의 그룹을 학습에 사용한다.
3. 나머지 1개의 그룹을 이용해 평가를 수행한다.
4. 2번과 3번 과정을 K번 반복한다
5. 모든 결과의 평균을 구한다.

from sklearn.model_selection import cross_val_score
score = cross_val_score(
학습을 완료한 모델
, X_train
, y_train
, cv=나눌 개수(default는 5)
)
score
학슴 목표:
- 데이터 스케일링의 개념 이해
- 데이터 스케일링의 종류 파악






model.coef_ # 모델 w 파라미터
model.intercept_ # 모델 b 파라미터





주식회사 이스트에이드