잇연

[sesac LLM] day30-240214 과제 본문

SESAC LLM 개발자 강의/ML 머신러닝

[sesac LLM] day30-240214 과제

잇연 2024. 2. 14. 17:30

과제에 대해서 중요한 내용들 공부

import pandas as pd
import seaborn as sns

df = sns.load_dataset("titanic")
df.head()

타이타닉 데이터셋을 불러온다.

 

문제 1. 행과 열의 갯수를 출력한다.

-> 행과열은 shape으로 나타낼 수 있다. df.shape 해주면 행과 열의 개수가 나온다.

 

문제2. 결측치 수 세기

->결측치는 isnull로 확인할 수 있는데, df.isnull()을 해주면 null값인지 아닌지 True, False의 결과가 나온다.

-> 따라서 df.isnull().sum()을 해줘야 결측치 개수가 나온다.

 

문제3. alive 의 컬럼의 값을 그룹화해서 세어준다.

-> groupby().size를 통해 그룹화하거나 value_count를 활용한다.

df['alive'].value_counts()

df.groupby('alive').size()

  1.  df.groupby('alive').size():
    • 'alive' 열의 고유값별로 그룹화하고, 각 그룹의 크기를 Series 객체로 반환
    • groupby 메서드는 데이터를 그룹화하는 데 사용되며, size 메서드는 각 그룹의 크기를 계산한다.
    • 이 방법은 다른 그룹 연산(합계, 평균 등)을 수행하기 위한 기초 작업으로 자주 사용된다.
  2. df['alive'].value_counts():
    • 'alive' 열의 고유값을 카운트하고, 빈도수가 높은 순서대로 정렬된 Series 객체를 반환한다.
    • value_counts 메서드는 간편하게 특정 열의 고유값별 빈도수를 계산하고 정렬한다.
    • 기본적으로 내림차순으로 정렬되므로, 가장 흔한 값부터 시작하는 Series를 얻을 수 있다.

차이점:

  • size는 그룹화 후 모든 그룹의 크기를 계산하는 데 사용될 수 있으며, 추가적인 그룹 연산을 위한 체이닝에 유용
  • value_counts는 한 열의 값의 빈도수를 빠르게 계산하고, 결과를 내림차순으로 정렬한다.

결과적으로 두 메서드는 사용 목적이 비슷하지만, value_counts가 좀 더 간단하고 직관적인 경우가 많다. 그러나 특정 그룹화 조건 하에서 더 복잡한 분석을 수행하고자 할 때는 groupby를 사용하는 것이 더 유리할 수 있다.

 

4. age의 요약값을 구하기

#기술통계값구하기
df['age'].describe()
count    714.000000
mean      29.699118
std       14.526497
min        0.420000
25%       20.125000
50%       28.000000
75%       38.000000
max       80.000000
Name: age, dtype: float64

수치형의 기술통계는 위와 같이 확인할 수 있다.

 

5. object 타입의 요약값을 구하기

df.describe(include='object')
	sex	embarked	who	embark_town	alive
count	891	889	891	889	891
unique	2	3	3	3	2
top	male	S	man	Southampton	no
freq	577	644	537	644	549

include를 사용해서 object 타입인 컬럼들의 기술통계를 확인할 수 있다.

 

6. embark_town 컬럼의 값을 소문자로 변경 후에 "embark_lower" 라는 새로운 컬럼에 담기

-> embark_town 컬럼의 값을 소문자로 변경하는 방법 : 

df['embark_town'].str.lower()

str.lower()로 소문자로 바꾸어줄 수있다.

df['embark_lower'] = df['embark_town'].str.lower()
print(df['embark_lower'].head(5))

7. embark_lower 컬럼에서 south 가 들어가는 데이터의 수를 세어보기

-> 특정 문자열이 들어가는 데이터를 찾는 function은? contains이다.

컬럼.str.contains('south') 을 sum() 해주면 된다.

south_count = df['embark_lower'].str.contains('south').sum()
print(south_count)

 

8. age 컬럼의 값이 15 보다 작거나 같은 값을 구한다.

True, False로 표시되는 값을 child 라는 새로운 컬럼에 담아주세요.

 

조건은 df['age']<=15

이걸 그대로 df['child']에 할당하면 된다.

뭔가 코딩으로나 sql로 하면 더 길어질 것 같은데, 간단하게 할 수 있는게  좋은 점 같다.

df['child'] = df['age'] <= 15

 

파이썬이었다면?

child = []
for age in ages:
    child.append(age <= 15)
    
#혹은
child = [age <= 15 for age in ages]

sql이었다면?

SELECT *,
       CASE
           WHEN age <= 15 THEN TRUE
           ELSE FALSE
       END as child
FROM table_name;

 

12. pclass 가 3이고 embarked 가 Q인 fare 의 평균을 구하라.

df[(df['pclass']==3) & (df['embarked']=='Q')]['fare'].mean()

 

15. age 의 결측치를 0 으로 채워서 age_fill 이라는 컬럼에 담고 age_fill 컬럼의 평균값을 출력하기

fillna를 사용한다.

df['age'].fillna(0).mean()

 

16. deck 컬럼을 그룹화 해서 갯수를 카운트하고 A~G 순으로 정렬이 되도록 하기

value_counts()와

sort_index()를 사용한다.

deck_group = df['deck'].value_counts().sort_index()
print(deck_group)

 

18. embarked 가 C 이거나 deck 이 F인 데이터에서 age 컬럼의 중앙값을 구하기

조건은 (df['컬럼'] ==' ') 으로 작성하고

or 은 | 를 사용한다.

그리고 중앙값을 구하는 건 median을 활용해주면된다.

df[(df['embarked']=='C')|(df['deck']=='F')]['age'].median()

작성시 괄호 주의 조건마다() 를 붙여야 함 안쓰면 에러가난다.

 

20. age 를 역순으로 정렬하고 상위 5개만 출력하기

df['age'].sort_values(ascending=False).head(5)

ascending은 올림차순이고 ascending=False를 통해서 내림차순으로 정렬이 가능하다. 

descending=True는 시도해봤는데 되지 않는다...