< 선행커맨드 >
import seaborn as sns
import pandas as pd
문제 1.
데이터 변형 - Iris 데이터셋을 활용하여 다음을 수행하세요:
- Iris 데이터셋을 불러옵니다.
- sepal_length가 평균보다 큰 데이터와 평균보다 작은 데이터를 각각 필터링하여 두 개의 데이터프레임을 만드세요.
- 새로운 열 category를 추가하여 각 행이 'above_average'인지 'below_average'인지 표시하세요.
- 위 두 데이터프레임을 concat을 사용하여 하나로 합칩니다. (category가 above_average인 데이터 프레임 → category가 below_average인 데이터프레임 순서)
- 최종 데이터프레임 concat_df의 50, 120번째 행을 출력하세요.
- 조건 : concat을 사용할 때, ignore_index=True 옵션을 추가하여 인덱스를 재설정하세요.
skeleton code
# Iris 데이터셋 로드
iris = sns.load_dataset("iris")
"""
코드 입력
"""
# 최종 데이터프레임 출력
print(concat_df.iloc[50])
print(concat_df.iloc[120])
💡 문제 풀이
`내 풀이`
# Iris 데이터셋 로드
iris = sns.load_dataset("iris")
# 평균 계산
iris_mean = iris['sepal_length'].mean()
# 평균보다 높은 데이터
df_a = iris[iris['sepal_length']>iris_mean]
df_a['category']='above_average'
# 평균보다 낮은 데이터
df_b = iris[iris['sepal_length']<iris_mean]
df_b['category']='below_average'
# 합산
concat_df = pd.concat([df_a,df_b],ignore_index=True)
# 최종 데이터프레임 출력
print(concat_df.iloc[50])
print(concat_df.iloc[120])
`실행 결과`
문제 2.
Iris 데이터셋과 새로운 데이터프레임을 활용하여 다음을 수행하세요:
- Iris 데이터셋을 불러옵니다.
- species별 평균 petal_length와 평균 petal_width를 계산하여 새로운 데이터프레임 species_avg를 만드세요. reset_index()를 사용하여, index를 재지정하세요.
- 데이터프레임의 열 이름은 species, avg_petal_length, avg_petal_width로 지정합니다. species_avg와 원래의 Iris 데이터셋을 merge를 사용해 species를 기준으로 병합하세요.
- 최종 데이터프레임 merged_df의 10, 50, 120번째 행을 출력하세요.
힌트
- groupby()와 mean()을 사용하여 그룹별 평균을 계산하세요.
- merge에서 on 인자를 사용해 공통 열(species)을 기준으로 병합하세요.
skeleton code
# Iris 데이터셋 로드
iris = sns.load_dataset("iris")
"""
코드 입력
"""
# 결과 출력
print(merged_df.iloc[10])
print(merged_df.iloc[50])
print(merged_df.iloc[120])
💡 문제 풀이
`내 풀이`
# Iris 데이터셋 로드
iris = sns.load_dataset("iris")
#speice별 평균
species_avg = iris.groupby('species')[['petal_length','petal_width']].mean()
species_avg.reset_index(inplace=True)
#열 이름 변경
species_avg.rename(columns={'petal_length':'avg_petal_length'}, inplace=True)
species_avg.rename(columns={'petal_width':'avg_petal_width'}, inplace=True)
# species 기준으로 두 데이터 합치기
merged_df = pd.merge(iris, species_avg, on='species')
# 결과 출력
print(merged_df.iloc[10])
print(merged_df.iloc[50])
print(merged_df.iloc[120])
`실행 결과`
문제 3.
데이터 집계 - Tips 데이터셋을 활용하여 다음을 수행하세요:
- Tips 데이터셋을 불러옵니다.
- 요일(day)과 시간(time)을 기준으로 그룹화하여 평균 팁(tip)과 총 금액(total_bill)을 계산하세요.
- 결과를 피벗 테이블로 변환하여 출력하세요.
- 행은 day, 열은 time으로 설정하세요.
힌트 : groupby()와 pivot_table()을 활용하세요.
skeleton code
# Tips 데이터셋 로드
tips = sns.load_dataset("tips")
"""
코드 작성
"""
print(pivot_table)
💡 문제 풀이
`내 풀이`
# Tips 데이터셋 로드
tips = sns.load_dataset("tips")
# agg를 쓰면 두 종류로 집계가 가능함
grouped = tips.groupby(['day','time']).agg({'tip':'mean','total_bill':'sum'})
grouped.reset_index(inplace=True)
# 피벗테이블
pivot_table = grouped.pivot_table(index='day',columns='time')
pivot_table
`오답노트`
- .agg({'칼럼명':'집계종류'}) 사용하면, 여러 개 컬럼에 각기 다른 집계를 하게 할 수 있음! 예전에 이거 몰라서 각각 데이터프레임 만든 다음에 합쳤는데!
`실행 결과`