문제 1: 데이터 불러오기
타이타닉 데이터를 불러온 다음 df라는 변수에 담고 데이터의 내용을 확인하세요.
from google.colab import drive
drive.mount('/content/drive')
root = "/content/drive/MyDrive/스파르타파이썬"
file_address = root + "/train.csv"
import pandas as pd
df = pd.read_csv(file_address)
display(df)
문제 2: 생존자 수 계산
타이타닉 전체 생존자 수와 사망자 수를 계산하고 출력하세요.
생존자=[]
사망자=[]
total=df['Survived']
for i in df['Survived']:
if i == 1:
생존자.append(i)
elif i == 0:
사망자.append(i)
print(f'생존자 수: {len(생존자)}')
print(f'사망자 수: {len(사망자)}')
print(f'total: {len(total)}')
> 생존자 수: 342
> 사망자 수: 549
> total: 891
문제 3: 평균 연령 계산
타이타닉 승객의 평균 연령을 계산하고 출력하세요.
Sum=[]
for i in df['Age']:
if pd.isnull(i)==False:
Sum.append(i)
print(f'나이합: {sum(Sum)}')
print(f'결측값제외건수: {len(Sum)}')
print(f'나이평균: {sum(Sum)/len(Sum)}')
> 나이합: 21205.17
> 결측값제외건수: 714
> 나이평균: 29.69911764705882
문제 4: 여성 생존자 수 계산
타이타닉 승객의 생존자 중 여성 생존자의 수를 계산하고 출력하세요.
여성=[]
for x,y in zip(df['Sex'],df['Survived']):
if x=='female' and y==1:
여성.append(x)
print(f'여성 생존자 수: {len(여성)}')
> 여성 생존자 수: 233
문제 5: 가장 많은 가족을 가진 승객 찾기
가족을 가진 승객들 중에서 가장 많은 가족을 가진 승객을 찾으세요.
형제자매=df['SibSp']
부모자식=df['Parch']
가족수=[]
for x,y in zip(형제자매,부모자식):
가족수.append(x+y)
이름=df['Name']
최대가족수=max(가족수)
for x,y in zip(이름,가족수):
if y==int(최대가족수):
print(x)
문제 6: 특정 연령대 승객 추출
20세 이하의 승객의 이름들을 추출 하여 승객의 이름을 key로, 승객의 나이를 value로 하는 딕셔너리를 완성하세요.
나이=df['Age']
이름=df['Name']
answer = {}
for x,y in zip(이름,나이):
if y <= 20:
answer[x]=y
print(answer)
문제 7: 가장 많은 탑승객 수를 가진 선실 등급 찾기
타이타닉의 선실 등급 중에서 가장 많은 탑승객이 이용한 선실 등급을 찾으세요
등급=df['Pclass']
st1=[]
st2=[]
st3=[]
for i in 등급:
if i==1:
st1.append(i)
elif i==2:
st2.append(i)
elif i==3:
st3.append(i)
등급별탑승객수=[len(st1),len(st2),len(st3)]
선실등급=""
if len(st1) > len(st2) and len(st1)>len(st3):
선실등급 = "1등급"
elif len(st2) > len(st1) and len(st2) > len(st3):
선실등급 = "2등급"
else:
선실등급 = "3등급"
print(f'선실등급: {선실등급}')
print(f'탑승객 수: {max(등급별탑승객수)}')
> 선실등급: 3등급
> 탑승객 수: 491
문제 8: 가장 많은 요금을 낸 승객 정보 출력
타이타닉의 승객 중 가장 많은 요금을 낸 승객을 찾으세요
요금=list(df['Fare'])
많은요금=max(요금)
이름=df['Name']
for x,y in zip(이름,요금):
if y==많은요금:
print(x)
print(많은요금)
문제9: 각 성별의 생존율 계산
타이타닉 각 성별 (남성/여성) 각각의 생존율을 계산하세요
생존여성=[]
생존남성=[]
for x,y in zip(df['Sex'],df['Survived']):
if x=='female' and y==1:
생존여성.append(x)
elif x=='male' and y==1:
생존남성.append(x)
총여성=[]
총남성=[]
for x in df['Sex']:
if x=='female':
총여성.append(x)
elif x=='male':
총남성.append(x)
print(f'여성생존율: {len(생존여성)/len(총여성)*100}')
print(f'남성생존율: {len(생존남성)/len(총남성)*100}')
문제 10: 가장 많은 출발 항구 찾기
승객들이 출발한 항구 중에서 가장 많은 항구를 찾고 그 항구를 출발한 승객 수를 출력하세요.
항구=df['Embarked']
Ce=[]
Qe=[]
Se=[]
for i in 항구:
if i=='C':
Ce.append(i)
elif i=='Q':
Qe.append(i)
elif i=='S':
Se.append(i)
항구출발횟수=[len(Ce),len(Qe),len(Se)]
출발횟수합=sum(항구출발횟수)
최고항구=""
if len(Ce)>len(Qe) and len(Ce)>len(Se):
최고항구="C"
elif len(Qe)>len(Ce) and len(Qe)>len(Se):
최고항구="Q"
else:
최고항구="S"
총승객=df['PassengerId']
결측치=[]
for i in 항구:
if pd.isnull(i)==True:
결측치.append(i)
print(f'입력되지 않은 항구 갯수: {len(결측치)}건')
print(f'입력된 항구 갯수: {출발횟수합}건')
print(f'출발한 총 승객 수: {len(총승객)}명')
print(f'승객들이 출발한 항구 중에서 가장 많은 항구는 {최고항구} 항구이고 그 승객수는 {len(Se)}명 이다.')
print(f'총 승객 수 {len(총승객)} 명 중 입력되지 않은 항구는 {len(결측치)} 건 이다.')
문제 11: 함수로 만들어 정리하기
2번문제 부터 10번 문제까지 작성했던 코드들을 함수로 만드세요.
2번 함수
# 문제 2 함수 정리
def solution(survived):
생존자=[]
사망자=[]
for i in survived:
if i == 1:
생존자.append(i)
elif i == 0:
사망자.append(i)
return len(생존자), len(사망자)
a,b=solution(df['Survived'])
print(f'생존자 수: {a}')
print(f'사망자 수: {b}')
3번 함수
# 문제 3 함수정리
def solution(age):
Sum=[]
for i in age:
if pd.isnull(i)==False:
Sum.append(i)
return (f'나이평균: {sum(Sum)/len(Sum)}')
a=solution(df['Age'])
print(a)
4번 함수
# 문제 4 함수 정리
def solution(sex,survived):
여성=[]
for x,y in zip(sex,survived):
if x=='female' and y==1:
여성.append(x)
return (f'여성 생존자 수: {len(여성)}')
a=solution(df['Sex'],df['Survived'])
print(a)
5번 함수
# 5번 함수 정리
def solution(sibsp,parch,name):
가족수=[]
for x,y in zip(sibsp,parch):
가족수.append(x+y)
최대가족수=max(가족수)
대가족승객=[]
for x,y in zip(name,가족수):
if y==int(최대가족수):
대가족승객.append(x)
return 대가족승객
a=solution(df['SibSp'],df['Parch'],df['Name'])
print(f'대가족승객명단: {",".join(a)}')
6번 함수
# 문제 6 함수 정리
def solution(name,age):
answer = {}
for x,y in zip(name,age):
if y <= 20:
answer[x]=y
return answer
a=solution(df['Name'],df['Age'])
print(dict(a))
7번 함수
# 문제 7 함수 정리
def solution(pclass):
st1=[]
st2=[]
st3=[]
for i in pclass:
if i==1:
st1.append(i)
elif i==2:
st2.append(i)
elif i==3:
st3.append(i)
등급별탑승객수=[len(st1),len(st2),len(st3)]
선실등급=""
if len(st1) > len(st2) and len(st1)>len(st3):
선실등급 = "1등급"
elif len(st2) > len(st1) and len(st2) > len(st3):
선실등급 = "2등급"
else:
선실등급 = "3등급"
return 선실등급, max(등급별탑승객수)
a,b=solution(df['Pclass'])
print(f'선실등급: {a}')
print(f'탑승객 수: {b}')
8번 함수
# 문제 8 함수 정리
def solution(fare,name):
요금=list(fare)
많은요금=max(요금)
for x,y in zip(name,요금):
if y==많은요금:
return x,많은요금
a,b=solution(df['Fare'],df['Name'])
print(f'승객의이름: {a}')
print(f'많은요금: {b}')
9번 함수
# 문제 9 함수 정리
def solution(sex,survived):
생존여성=[]
생존남성=[]
for x,y in zip(sex,survived):
if x=='female' and y==1:
생존여성.append(x)
elif x=='male' and y==1:
생존남성.append(x)
총여성=[]
총남성=[]
for x in sex:
if x=='female':
총여성.append(x)
elif x=='male':
총남성.append(x)
return len(생존여성)/len(총여성)*100,len(생존남성)/len(총남성)*100
a,b=solution(df['Sex'],df['Survived'])
print(f'여성생존율: {a}')
print(f'남성생존율: {b}')
10번 함수
# 문제 10 함수 정리
def solution(embarked):
Ce=[]
Qe=[]
Se=[]
for i in embarked:
if i=='C':
Ce.append(i)
elif i=='Q':
Qe.append(i)
elif i=='S':
Se.append(i)
항구출발횟수=[len(Ce),len(Qe),len(Se)]
출발횟수합=sum(항구출발횟수)
최고항구=""
if len(Ce)>len(Qe) and len(Ce)>len(Se):
최고항구="C"
elif len(Qe)>len(Ce) and len(Qe)>len(Se):
최고항구="Q"
else:
최고항구="S"
return 최고항구,len(Se)
a,b=solution(df['Embarked'])
print(f'출발항구: {a}')
print(f'승객 수: {b}')
문제 12: 함수의 기능 사용하기
4번문제와 6번문제 각각 조건문에 있는 성별(’female’, ‘male’)과 나이를 매개변수를 사용할 수 있도록 설정하고 각각의 함수에서 성별과 나이를 인수로 받아올 수 있도록 함수를 수정하세요.
4번 문제
# 4번문제 함수 기능 사용
def solution(sex,survived,ans="female"):
성별=[]
for x,y in zip(sex,survived):
if x==ans and y==1:
성별.append(x)
return (f'생존자 수: {len(성별)}')
print(solution(df['Sex'],df['Survived']))
print(solution(df['Sex'],df['Survived'],"male"))
6번 문제
# 6번문제 함수 기능 사용
def solution(name,age,ans="20"):
answer = {}
for x,y in zip(name,age):
if y <= int(ans):
answer[x]=y
return answer
print(dict(solution(df['Name'],df['Age'])))
print(dict(solution(df['Name'],df['Age'],30)))
print(dict(solution(df['Name'],df['Age'],40)))
print(dict(solution(df['Name'],df['Age'],50)))
'개인공부' 카테고리의 다른 글
[Python] 시각화 그래프 (0) | 2024.05.10 |
---|---|
[Python] Pandas 함수 정리 (0) | 2024.05.09 |
[python] return 과 print 의 차이? (0) | 2024.04.26 |
[python] 빈 리스트 생성 [] 와 list() 의 차이 (0) | 2024.04.04 |
SQL 코드카타 (0) | 2024.03.31 |