- FACTS :
- ✅ 오전 SQL 코드카타 1문
- ✅ 오전 파이썬 베이직 라이브세션 복습
- 🔺 오후
통계학 라이브세션 복습 → 통계학 개념 정리→ ~ing - ✅ 오후 개인과제 문제6
- [ ] 오후 파이썬 300제
- [ ] 오후 머신러닝 VOD강의 심화 1주차
- FEELINGS : 처음으로 QCC가 끝나고 팀원들끼리 각자 푼 코드를 공유해봤는데 다 못 풀거나 틀린 답이더라도 공유하면서 여러가지 방법론이나 어떻게 해결할 수 있을지 찾아주는 과정이 의미있었다. 그동안 나는 완벽하고 정답인 코드가 아니면 공유하는게 부끄러웠는데 어디선가 본 것처럼 창피함을 견뎌내야 성장한다는 말이 어떤것인지 체감하게된 날이었다.
⭐️부끄러움을 견디고 많은 사람과 공유해가면서 보완해야할 부분을 찾아야겠다.
- FINDINGS :
[SQL] 참고가 됐던 주석 처리 내용 :
- -- 조회: 컬럼이름
-- 조건: 리뷰를 가장 많이 작성한 회원들,
-- 정렬: 리뷰작성일 asc, 리뷰 텍스트 asc
[DBeaver 단축키] Ctrl + \ : 결과값 새로운 탭에서 실행 (※ commend 아님 주의)
파이썬 베이직 4회차 복습
문제1
1. Iris 데이터셋을 불러옵니다.
2. sepal_length가 평균보다 큰 데이터와 평균보다 작은 데이터를 각각 필터링하여 두 개의 데이터프레임을 만드세요.
3. 새로운 열 category를 추가하여 각 행이 'above_average'인지 'below_average'인지 표시하세요.
4. 위 두 데이터프레임을 concat을 사용하여 하나로 합칩니다.
(category가 above_average인 데이터 프레임 → category가 below_average인 데이터프레임 순서)
5. 최종 데이터프레임 concat_df의 50, 120번째 행을 출력하세요.
* `조건` : concat을 사용할 때, ignore_index=True 옵션을 추가하여 인덱스를 재설정하세요.
2번에서 각각 데이터프레임을 만든다는 부분이 이해가 잘 안가서 if 조건문을 써서 3번을 먼저 해보려고했다.
# Iris 데이터셋 로드
iris = sns.load_dataset("iris")
# sepal_length가 평균보다 큰 데이터와 평균보다 작은 데이터를 각각 필터링하여 두 개의 데이터프레임을 만드세요.-> ??
# sepal_length의 평균
len_mean = iris['sepal_length'].mean().round(1)
# 각 행이 평균보다 큰지 판단하여 return하는 함수
def com(length):
if length > len_mean:
return 'above_average'
else:
return 'below_average'
# 위 함수 결과를 새로운 컬럼에 표시
iris['category'] = iris['sepal_length'].apply(com)
iris
# 최종 데이터프레임 출력
print(iris.iloc[50])
print(iris.iloc[120])
그런데 이렇게 풀어버리니까 4,5번 조건을 수행하지 않게 되고... 결과값도 달라지기 때문에 다시 처음부터...
# 정답 코드
# Iris 데이터셋 로드
iris = sns.load_dataset("iris")
# sepal_length의 평균
len_mean = iris['sepal_length'].mean()
# sepal_length가 평균보다 큰 데이터와 평균보다 작은 데이터를 각각 필터링하여 두 개의 데이터프레임을 만드세요.
# 평균보다 큰 데이터프레임
above_average = iris[iris['sepal_length'] > len_mean]
# 평균보다 작은 데이터프레임
below_average = iris[iris['sepal_length'] < len_mean]
#새로운 열 category를 추가하여 각 행이 'above_average'인지 'below_average'인지 표시
above_average['category'] = "above_average"
below_average['category'] = "below_average"
# category가 above_average인 데이터 프레임 → category가 below_average인 데이터프레임 순서로 합치기
# `조건` : concat을 사용할 때, ignore_index=True 옵션을 추가하여 인덱스를 재설정하세요.
concat_df = pd.concat([above_average, below_average], ignore_index=True)
concat_df
# 최종 데이터프레임 출력
print(concat_df.iloc[50])
print(concat_df.iloc[120])
‼️헷갈리는 것 주의!! :
- concat([데이터프레임, 데이터프레임]) -> [ ] 잊지말기!!
- pd.concat([above_average, below_average], ignore_index=True) - []안에 데이터프레임 작성, axis = 0 기본 값, ignore_index 사용
문제2
Iris 데이터셋과 새로운 데이터프레임을 활용하여 다음을 수행하세요:
- 1) Iris 데이터셋을 불러옵니다.
- 2) species별 평균 petal_length와 평균 petal_width를 계산하여 새로운 데이터프레임 species_avg를 만드세요. reset_index()를 사용하여, index를 재지정하세요.
- 3) 데이터프레임의 열 이름은 species, avg_petal_length, avg_petal_width로 지정합니다. species_avg와 원래의 Iris 데이터셋을 merge를 사용해 species를 기준으로 병합하세요.
- 4) 최종 데이터프레임 concat_df의 10, 50, 120번째 행을 출력하세요.
* 힌트 - groupby()와 mean()을 사용하여 그룹별 평균을 계산하세요. - merge에서 on 인자를 사용해 공통 열(species)을 기준으로 병합하세요.
# 문제2
# Iris 데이터셋 로드
iris = sns.load_dataset("iris")
#species별 평균 petal_length와 평균 petal_width를 계산하여 새로운 데이터프레임 species_avg생성
# reset_index()를 사용하여 index를 재지정
species_avg = iris.groupby('species')[['petal_length','petal_width']].mean().reset_index()
#데이터프레임의 열 이름은 species, avg_petal_length, avg_petal_width로 지정
species_avg = species_avg.rename(columns= {'petal_length':'avg_petal_length','petal_width':'avg_petal_width'})
species_avg
#species_avg와 원래의 Iris 데이터셋을 merge를 사용해 species를 기준으로 병합
merged_df = pd.merge(iris, species_avg, on= 'species')
merged_df
# 결과 출력
print(merged_df.iloc[10])
print(merged_df.iloc[50])
print(merged_df.iloc[120])
#정답 코드
import seaborn as sns
import pandas as pd
# Iris 데이터셋 로드
iris = sns.load_dataset("iris")
# species별 평균 petal_length와 petal_width 계산
species_avg = iris.groupby("species")[["petal_length", "petal_width"]].mean().reset_index()
species_avg.rename(columns={"petal_length": "avg_petal_length",
"petal_width": "avg_petal_width"}, inplace=True)
# 원래 데이터셋과 병합
merged_df = pd.merge(iris, species_avg, on="species")
# 정답 출력
print(merged_df.iloc[10])
print(merged_df.iloc[50])
print(merged_df.iloc[120])
‼️헷갈리는 것 주의!! :
- .rename()에서 {”old_column”:”new_column”}의 형태 / inplace=True로 원본 데이터 바꿔주기
- iris.groupby("species")[["petal_length", "petal_width"]].mean().reset_index() - reset_index()의 사용
- -> 안했을 경우 species가 인덱스 값이 되어버려서 뒤에서 species를 컬럼값으로 가져오려고 할 때 에러가 남.
문제6 : 중심극한정리(CLT)
- `numpy.choice` 함수를 이용하여 각 분포 평균을 내고 이를 500번 반복하여 표본 평균을 생성해 봅시다. (ex `bionmial_data` 에서 30개씩 뽑아 500번 반복)
- 표본의 평균들을 히스토그램으로 시각화여 정규분포를 따르는지 확인해봅시다.
- 변수
- `num_samples` : 표본추출할 횟수
- `sample_means`: 딕셔너리 자료형으로 **Binomal**, **Uniform**, **Normal** 의 Key값을 가지며 해당하는 values들은 각 30개씩 복원추출하여 뽑은 샘플의 평균 값을 저장. 이를 총 500번 진행
num_samples = 500
sample_means = {
"Binomial": [],
"Uniform": [],
"Normal": []
}
for i in range(num_samples): # 500번 동안 반복
binomial_rand = np.random.choice(binomial_data, size= 30) #bionmial_data에서 무작위 30개 추출
binomial_mean = binomial_rand.mean()
sample_means["Binomial"].append(binomial_mean)
uniform_rand = np.random.choice(uniform_data, size= 30) #uniform_data에서 무작위 30개 추출
uniform_mean = uniform_rand.mean()
sample_means["Uniform"].append(uniform_mean)
normal_rand = np.random.choice(normal_data, size= 30) #normal_data에서 무작위 30개 추출
normal_mean = normal_rand.mean()
sample_means["Normal"].append(normal_mean)
# sample_means
# 시각화
plt.figure(figsize=(15, 5))
plt.subplot(131)
plt.hist(sample_means["Binomial"], color='blue', bins=20)
plt.title("Sample Mean Distribution (Binomial)")
plt.xlabel("Mean Value")
plt.ylabel("Frequency")
plt.subplot(132)
plt.hist(sample_means["Uniform"], color='green', bins=20)
plt.title("Sample Mean Distribution (Uniform)")
plt.xlabel("Mean Value")
plt.ylabel("Frequency")
plt.subplot(133)
plt.hist(sample_means["Normal"], color='red', bins=20)
plt.title("Sample Mean Distribution (Normal)")
plt.xlabel("Mean Value")
plt.ylabel("Frequency")
'내일배움캠프 > TIL' 카테고리의 다른 글
[TIL]250120_파이썬 베이직반 복습_수정중... (0) | 2025.01.20 |
---|---|
[TIL]250117_QCC4회차, 개인과제 복습 (0) | 2025.01.17 |
[TIL]250115_통계학 개인과제 문제4,5 (0) | 2025.01.15 |
[TIL]250114_SQL,알고리즘 코드카타, 통계학 개인과제1~3번 (0) | 2025.01.14 |
[TIL]250113_코드카타, 파이썬 베이직 라이브세션 (0) | 2025.01.13 |