세션 복습/파이썬 세션

파이썬 베이직 (5) - 문제풀이

경민212 2025. 1. 20. 16:34

# 문제 1- 윤년이면 True, 윤년이 아니면 False를 출력하는 코드를 작성하세요
   - 4로 나누어떨어지는 해는 윤년으로 한다. (2016년, 2020년, 2024년 등등)
   - 4와 100으로 나누어떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년)
   - 4, 100, 400으로 나누어떨어지는 해는 윤년으로 한다. (2000년, 2400년)

 

더보기

내가 의도한 코드 형식

year = int(input("연도를 입력하세요: "))

def year_calculate(year):
    for year in year_calculate:
        if year % 400 == 0:
            print("True")
        else: 
            print("False")
year = int(input("연도를 입력하세요: "))

if year % 400 == 0 :
    print(True)
elif year % 100 == 0 :
    print(False)
elif year % 4 == 0 :
    print(True)
else :
    print(False)
year = int(input("Enter a year: "))

# 4로 나누어떨어지고, 100으로 나누어 떨어지지 않으면 윤년 또는 400으로 나누어
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print(True)
else :
    print(False)

 

 

# 문제 2 - Seaborn 라이브러리에서 제공하는 Penguins 데이터셋을 활용하여 다음을 수행하세요:

1) Penguins 데이터셋을 불러옵니다.

2) bill_length_mm이 species별 bill_length_mm의 평균(”mean_bill_length”)보다 작은 데이터를 선택하세요.

3) 선택된 데이터에 새 열을 추가하여, bill_length_mm과 bill_depth_mm을 조합하여 다음과 같은 규칙으로 계산한 값을 저장하세요: - bill_length_mm * 0.5 + bill_depth_mm * 0.3 새 열의 이름은 weighted_bill로 지정하세요.

4) weighted_bill이 25 이상인 행만 추가로 필터링하여 출력하세요.

5) species 값의 문자열 길이가 6보다 크면 "long", 6 이하면 "short"으로 분류하는 새 열을 추가하세요. 새 열의 이름은 species_length_category로 지정하세요.

 

힌트

2) groupby를 사용하여, species별 bill_length_mm의 평균 데이터 프레임을 생성하여 merge하거나, 다음 transform 함수를 사용할 수 있습니다. 

[https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.transform.html](https://www.google.com/url?q=https%3A%2F%2Fpandas.pydata.org%2Fdocs%2Freference%2Fapi%2Fpandas.DataFrame.transform.html)

5) apply()와 lambda를 사용하여 조건에 따른 새 열을 생성할 수 있습니다.

 

2) 

import seaborn as sns

# 1) Penguins 데이터셋 로드
penguins = sns.load_dataset("penguins")

# 2) 'species'별 평균 bill_length_mm 계산 및 조건 필터링
penguins_mean = penguins.groupby("species")["bill_length_mm"].mean().reset_index()
penguins_mean.rename(columns = {"bill_length_mm": "mean_bill_length"}, inplace = True)
display(penguins_mean)
# 2) 'species'별 평균 bill_length_mm 계산 및 조건 필터링
penguins["mean_bill_length"] = penguins.groupby("species")["bill_length_mm"].transform("mean")
filtered_penguins = penguins[penguins["bill_length_mm"] < penguins["mean_bill_length"]]

참고 : https://m.blog.naver.com/youji4ever/222150840438

3)

penguins = pd.merge(penguins, penguins_mean, on = "species")

filtered_penguins = penguins[penguins["bill_length_mm"] < penguins["mean_bill_length"]]

# 3) 새 열 추가: bill_length_mm과 bill_depth_mm의 가중합 계산
filtered_penguins["weighted_bill"] = filtered_penguins["bill_length_mm"] * 0.5 + filtered_penguins["bill_depth_mm"] * 0.3
filtered_penguins["weighted_bill"]

4, 5)

# 4) weighted_bill이 25 이상인 행 필터링
final_result = filtered_penguins[filtered_penguins["weighted_bill"] >= 25]

# 5) species 문자열 길이를 기준으로 분류
final_result["species_length_category"] = final_result["species"].apply(
    lambda x : "long" if len(x) > 6 else "short"
)

print(final_result.iloc[10])
print(final_result.iloc[90])

참고 : https://dojang.io/mod/page/view.php?id=2359