개인공부

파이썬 개인 과제

여연찌 2024. 5. 2. 16:36

 

문제 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