본문 바로가기
PYTHON

20200323 - 파이썬 탐색적 데이터 분석 - 전처리, 그룹 연산

by 낫싱 2020. 3. 23.
728x90
반응형

ml_pandas05_0323호지수-1.ipynb
0.04MB
ml_pandas06_0323호지수-2.ipynb
0.18MB
ml_탐색적 데이터 분석_평가_호지수.ipynb
0.04MB
ml_pandas05_0323호지수-1 - Jupyter Notebook.pdf
0.29MB
ml_pandas06_0323호지수-2 - Jupyter Notebook.pdf
0.56MB
ml_탐색적 데이터 분석_평가_호지수 - Jupyter Notebook.pdf
0.22MB

 

데이터프레임 병합

merge()함수는 sql의 join 명령과 비슷한 방식으로 어떤 기준에 의해 두 데이터프레임을 병합 하는 개념

기준이 되는 열이나 인덱스를 키라고 부름

키가 되는 열이나 인덱스는 반드시 양쪽 데이터프레임에 모두 존재함

In [12]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

df1 = pd.read_excel('stock price.xlsx')

df2 = pd.read_excel('stock valuation.xlsx')

 

display(df1)

display(df2)

# eps : 주당 순이익

# per : 주가 수익비율로 주가를 주당 순이익(eps)으로 나눈 것

# bps : 기업의 현재 순자산을 총 발행주식수로 나눈 것

# pbr : 주가 / 주당순자산 (주당순자산 - (총자산-총부채) / 발행주식수)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가

열 너비 조절

행 높이 조절

 

id

stock_name

value

price

0

128940

한미약품

59385.666667

421000

1

130960

CJ E&M

58540.666667

98900

2

138250

엔에스쇼핑

14558.666667

13200

3

139480

이마트

239230.833333

254500

4

142280

녹십자엠에스

468.833333

10200

5

145990

삼양사

82750.000000

82000

6

185750

종근당

40293.666667

100500

7

192400

쿠쿠홀딩스

179204.666667

177500

8

199800

툴젠

-2514.333333

115400

9

204210

모두투어리츠

3093.333333

3475

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가

열 너비 조절

행 높이 조절

 

id

name

eps

bps

per

pbr

0

130960

CJ E&M

6301.333333

54068

15.695091

1.829178

1

136480

하림

274.166667

3551

11.489362

0.887074

2

138040

메리츠금융지주

2122.333333

14894

6.313806

0.899691

3

139480

이마트

18268.166667

295780

13.931338

0.860437

4

145990

삼양사

5741.000000

108090

14.283226

0.758627

5

161390

한국타이어

5648.500000

51341

7.453306

0.820007

6

181710

NHN엔터테인먼트

2110.166667

78434

30.755864

0.827447

7

185750

종근당

3990.333333

40684

25.185866

2.470259

8

204210

모두투어리츠

85.166667

5335

40.802348

0.651359

9

207940

삼성바이오로직스

4644.166667

60099

89.790059

6.938551

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [34]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 데이터프레임 합치기 - 교집합

# on = 'None', how='inner' 옵션이 기본값으로 적용

# on = 'None' 옵션은 두 데이터프레임에 공통으로 속하는 모든 열을 기준(키)로 병합한다는 의미

merge_inner = pd.merge(df1,df2)# 조건이 없으면 id를 기준으로 교집합처리한다.

display(merge_inner)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

id

stock_name

value

price

name

eps

bps

per

pbr

0

130960

CJ E&M

58540.666667

98900

CJ E&M

6301.333333

54068

15.695091

1.829178

1

139480

이마트

239230.833333

254500

이마트

18268.166667

295780

13.931338

0.860437

2

145990

삼양사

82750.000000

82000

삼양사

5741.000000

108090

14.283226

0.758627

3

185750

종근당

40293.666667

100500

종근당

3990.333333

40684

25.185866

2.470259

4

204210

모두투어리츠

3093.333333

3475

모두투어리츠

85.166667

5335

40.802348

0.651359

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. df1, df2의 합집합 구한 후 출력

In [27]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 데이터프레임 합치기 - 왼쪽 데이터프레임 기준, 키 값 분리

# how_left : 왼쪽 df의 키 열에 속하는 데이터 값 기준으로 병합

# left_on, right_on : 좌우 df에 각각 다르게 키를 지정. id_x, id_y 구분하여 표시

merge_left = pd.merge(df1, df2, how='left', left_on='stock_name', right_on='name')

display(merge_left.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 10열 선택10열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

id_x

stock_name

value

price

id_y

name

eps

bps

per

pbr

0

128940

한미약품

59385.666667

421000

NaN

NaN

NaN

NaN

NaN

NaN

1

130960

CJ E&M

58540.666667

98900

130960.0

CJ E&M

6301.333333

54068.0

15.695091

1.829178

2

138250

엔에스쇼핑

14558.666667

13200

NaN

NaN

NaN

NaN

NaN

NaN

3

139480

이마트

239230.833333

254500

139480.0

이마트

18268.166667

295780.0

13.931338

0.860437

4

142280

녹십자엠에스

468.833333

10200

NaN

NaN

NaN

NaN

NaN

NaN

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [ ]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

merge_left = pd.merge(df1, df2, how='right', left_on='stock_name', right_on='name')

display(merge_left.head(6))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

 

전송중...

사진 설명을 입력하세요.

In [36]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

price = df1[df1['price']<50000]

display(price)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가

열 너비 조절

행 높이 조절

 

id

stock_name

value

price

2

138250

엔에스쇼핑

14558.666667

13200

4

142280

녹십자엠에스

468.833333

10200

9

204210

모두투어리츠

3093.333333

3475

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. df2에서 per가 30보다 크고 pbr이 0.8보다 큰 데이터를 모두 출력하세요.

In [37]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

pcon = df2[(df2.per>30) & (df2.pbr>0.8)]

display(pcon)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가

열 너비 조절

행 높이 조절

 

id

name

eps

bps

per

pbr

6

181710

NHN엔터테인먼트

2110.166667

78434

30.755864

0.827447

9

207940

삼성바이오로직스

4644.166667

60099

89.790059

6.938551

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

데이터프레임 결합

판다스 join() 메소드는 merge()함수를 기반으로 만들어졌기 때문에 기본 작동 방식이 서로 비슷

join() 메소드는 두 데이터프레임의 '행 인덱스'를 기준으로 결합하는 점에서 merge와 차이가 있으나 on=keys 옵션 설정하면 열을 기준으로 결합

In [41]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

# 주식 데이터를 가져와서 데이터프레임 만들기

df1 = pd.read_excel('stock price.xlsx', index_col='id')

df2 = pd.read_excel('stock valuation.xlsx', index_col='id')

 

display(df1.head())

display(df2.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가

열 너비 조절

행 높이 조절

 

stock_name

value

price

id

 

 

 

128940

한미약품

59385.666667

421000

130960

CJ E&M

58540.666667

98900

138250

엔에스쇼핑

14558.666667

13200

139480

이마트

239230.833333

254500

142280

녹십자엠에스

468.833333

10200

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가

열 너비 조절

행 높이 조절

 

name

eps

bps

per

pbr

id

 

 

 

 

 

130960

CJ E&M

6301.333333

54068

15.695091

1.829178

136480

하림

274.166667

3551

11.489362

0.887074

138040

메리츠금융지주

2122.333333

14894

6.313806

0.899691

139480

이마트

18268.166667

295780

13.931338

0.860437

145990

삼양사

5741.000000

108090

14.283226

0.758627

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [42]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 데이터프레임 결합(join)

# df1의 행 인덱스를 기준으로 결합하는 how='left' 옵션이 기본 적용

df3 = df1.join(df2)

display(df3)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가
  • 11행 선택11행 다음에 행 추가

열 너비 조절

행 높이 조절

 

stock_name

value

price

name

eps

bps

per

pbr

id

 

 

 

 

 

 

 

 

128940

한미약품

59385.666667

421000

NaN

NaN

NaN

NaN

NaN

130960

CJ E&M

58540.666667

98900

CJ E&M

6301.333333

54068.0

15.695091

1.829178

138250

엔에스쇼핑

14558.666667

13200

NaN

NaN

NaN

NaN

NaN

139480

이마트

239230.833333

254500

이마트

18268.166667

295780.0

13.931338

0.860437

142280

녹십자엠에스

468.833333

10200

NaN

NaN

NaN

NaN

NaN

145990

삼양사

82750.000000

82000

삼양사

5741.000000

108090.0

14.283226

0.758627

185750

종근당

40293.666667

100500

종근당

3990.333333

40684.0

25.185866

2.470259

192400

쿠쿠홀딩스

179204.666667

177500

NaN

NaN

NaN

NaN

NaN

199800

툴젠

-2514.333333

115400

NaN

NaN

NaN

NaN

NaN

204210

모두투어리츠

3093.333333

3475

모두투어리츠

85.166667

5335.0

40.802348

0.651359

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

그룹 연산

복잡한 데이터를 어떤 기준에 따라 여러 그룹으로 나누어서 관찰할 수 있으며 이런 방식으로 분할 처리하는 것을 그룹 연산이라 함

그룹 연산은 데이터를 집계, 변환, 필터링하는데 효율적이며 판다스 groupby() 메소드를 사용함

그룹 객체 만들기(분할)

그룹 연산 메소드(적용-결합)

In [29]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

import seaborn as sns

 

# titanic 데이터셋에서 age, sex 등 5개 열을 선택하여 데이터프레임 만들기

titanic = sns.load_dataset('titanic')

df = titanic.loc[:,['age', 'sex', 'class', 'fare', 'survived']]

 

print('승객 수 :', len(df))

display(df.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

승객 수 : 891

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

0

22.0

male

Third

7.2500

0

1

38.0

female

First

71.2833

1

2

26.0

female

Third

7.9250

1

3

35.0

female

First

53.1000

1

4

35.0

male

Third

8.0500

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [30]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# class 열을 기준으로 분할(1개 열을 기준)

grouped = df.groupby(['class'])

print(grouped)

list(grouped)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002AD4F038788>

Out[30]:

[('First', age sex class fare survived 1 38.0 female First 71.2833 1 3 35.0 female First 53.1000 1 6 54.0 male First 51.8625 0 11 58.0 female First 26.5500 1 23 28.0 male First 35.5000 1 .. ... ... ... ... ... 871 47.0 female First 52.5542 1 872 33.0 male First 5.0000 0 879 56.0 female First 83.1583 1 887 19.0 female First 30.0000 1 889 26.0 male First 30.0000 1 [216 rows x 5 columns]), ('Second', age sex class fare survived 9 14.0 female Second 30.0708 1 15 55.0 female Second 16.0000 1 17 NaN male Second 13.0000 1 20 35.0 male Second 26.0000 0 21 34.0 male Second 13.0000 1 .. ... ... ... ... ... 866 27.0 female Second 13.8583 1 874 28.0 female Second 24.0000 1 880 25.0 female Second 26.0000 1 883 28.0 male Second 10.5000 0 886 27.0 male Second 13.0000 0 [184 rows x 5 columns]), ('Third', age sex class fare survived 0 22.0 male Third 7.2500 0 2 26.0 female Third 7.9250 1 4 35.0 male Third 8.0500 0 5 NaN male Third 8.4583 0 7 2.0 male Third 21.0750 0 .. ... ... ... ... ... 882 22.0 female Third 10.5167 0 884 25.0 male Third 7.0500 0 885 39.0 female Third 29.1250 0 888 NaN female Third 23.4500 0 890 32.0 male Third 7.7500 0 [491 rows x 5 columns])]

In [3]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 그룹 객체를 iteration 으로 출력 : head() 메소드로 첫 5행만을 출력

for key, group in grouped:

print('* key:',key)

print('* number:',len(group))

print(group.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

* key: First * number: 216 age sex class fare survived 1 38.0 female First 71.2833 1 3 35.0 female First 53.1000 1 6 54.0 male First 51.8625 0 11 58.0 female First 26.5500 1 23 28.0 male First 35.5000 1 * key: Second * number: 184 age sex class fare survived 9 14.0 female Second 30.0708 1 15 55.0 female Second 16.0000 1 17 NaN male Second 13.0000 1 20 35.0 male Second 26.0000 0 21 34.0 male Second 13.0000 1 * key: Third * number: 491 age sex class fare survived 0 22.0 male Third 7.2500 0 2 26.0 female Third 7.9250 1 4 35.0 male Third 8.0500 0 5 NaN male Third 8.4583 0 7 2.0 male Third 21.0750 0

In [64]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 연산 메소드 적용

average = grouped.mean()

display(average) # survived 의 0.~~ 은 생존확률을 의미

type(average)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

survived

class

 

 

 

First

38.233441

84.154687

0.629630

Second

29.877630

20.662183

0.472826

Third

25.140620

13.675550

0.242363

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[64]:

pandas.core.frame.DataFrame

In [5]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

stat = grouped.max()

stat2 = grouped.min()

display(stat)

display(stat2)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

fare

survived

class

 

 

 

 

First

80.0

male

512.3292

1

Second

70.0

male

73.5000

1

Third

74.0

male

69.5500

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

fare

survived

class

 

 

 

 

First

0.92

female

0.0

0

Second

0.67

female

0.0

0

Third

0.42

female

0.0

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. 'Third' 그룹만을 선택해서 group3 이름으로 저장하고 통계요약표를 출력하세요.

In [65]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

group3 = grouped.get_group('Third') # Third 에 대한 그룹만 가져오기

display(group3.head())

type(group3)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

fare

survived

0

22.0

male

7.2500

0

2

26.0

female

7.9250

1

4

35.0

male

8.0500

0

5

NaN

male

8.4583

0

7

2.0

male

21.0750

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[65]:

pandas.core.frame.DataFrame

In [7]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

group3.describe()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[7]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

survived

count

355.000000

491.000000

491.000000

mean

25.140620

13.675550

0.242363

std

12.495398

11.778142

0.428949

min

0.420000

0.000000

0.000000

25%

18.000000

7.750000

0.000000

50%

24.000000

8.050000

0.000000

75%

32.000000

15.500000

0.000000

max

74.000000

69.550000

1.000000

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [8]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

group1 = grouped.get_group('First')

display(group1.describe())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

survived

count

186.000000

216.000000

216.000000

mean

38.233441

84.154687

0.629630

std

14.802856

78.380373

0.484026

min

0.920000

0.000000

0.000000

25%

27.000000

30.923950

0.000000

50%

37.000000

60.287500

1.000000

75%

49.000000

93.500000

1.000000

max

80.000000

512.329200

1.000000

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. class 열, sex 열을 기준으로 분할하여 grouped_two에 저장하세요.

In [9]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# class열, sex열을 기준으로 분할(여러 열을 기준으로 분할)

grouped_two = df.groupby(['class', 'sex'])

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. grouped_two 그룹 객체를 for문을 사용, iteration으로 출력하세요

In [10]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# grouped_two 그룹 객체를 iteration 으로 출력

for key, group in grouped_two:

print('* key:',key)

print('* number:',len(group))

display(group.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

* key: ('First', 'female') * number: 94

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

1

38.0

female

First

71.2833

1

3

35.0

female

First

53.1000

1

11

58.0

female

First

26.5500

1

31

NaN

female

First

146.5208

1

52

49.0

female

First

76.7292

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

* key: ('First', 'male') * number: 122

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

6

54.0

male

First

51.8625

0

23

28.0

male

First

35.5000

1

27

19.0

male

First

263.0000

0

30

40.0

male

First

27.7208

0

34

28.0

male

First

82.1708

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

* key: ('Second', 'female') * number: 76

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

9

14.0

female

Second

30.0708

1

15

55.0

female

Second

16.0000

1

41

27.0

female

Second

21.0000

0

43

3.0

female

Second

41.5792

1

53

29.0

female

Second

26.0000

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

* key: ('Second', 'male') * number: 108

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

17

NaN

male

Second

13.0

1

20

35.0

male

Second

26.0

0

21

34.0

male

Second

13.0

1

33

66.0

male

Second

10.5

0

70

32.0

male

Second

10.5

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

* key: ('Third', 'female') * number: 144

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

2

26.0

female

Third

7.9250

1

8

27.0

female

Third

11.1333

1

10

4.0

female

Third

16.7000

1

14

14.0

female

Third

7.8542

0

18

31.0

female

Third

18.0000

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

* key: ('Third', 'male') * number: 347

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

0

22.0

male

Third

7.2500

0

4

35.0

male

Third

8.0500

0

5

NaN

male

Third

8.4583

0

7

2.0

male

Third

21.0750

0

12

20.0

male

Third

8.0500

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. grouped_two 그룹 객체에 연산 메소드 적용, 각 그룹의 평균값을 구한 후 출력하세요.

In [11]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

average_two = grouped_two.mean()

display(average_two)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가

열 너비 조절

행 높이 조절

 

 

age

fare

survived

class

sex

 

 

 

First

female

34.611765

106.125798

0.968085

male

41.281386

67.226127

0.368852

Second

female

28.722973

21.970121

0.921053

male

30.740707

19.741782

0.157407

Third

female

21.750000

16.118810

0.500000

male

26.507589

12.661633

0.135447

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [12]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# Q grouped_two 그룹 객체에 연산 메소드 적용, 각 그룹의 평균값을 구한 후 출력하세요./

df=df.replace('male',1).replace('female',0).replace('First',1).replace('Second',2).replace('Third',3)

df=df.corr()

sns.clustermap(df,

annot = True, # 실제 값 화면에 나타내기

cmap = 'RdYlBu_r', # Red, Yellow, Blue 색상으로 표시

vmin = -1, vmax = 1, #컬러차트 -1 ~ 1 범위로 표시

)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

 

전송중...

사진 설명을 입력하세요.

Out[12]:

<seaborn.matrix.ClusterGrid at 0x2ad4e987b48>

Q. grouped_two 그룹 객체에서 ('Third',female) 그룹을 선택해서 group3f에 저장하고 처음 5개행을 출력하세요.

In [13]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

print(type(average_two))

 

#grouped_two 그룹 객체에서 개별 그룹 선택하기

group3f = grouped_two.get_group(('Third','female'))

display(group3f)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<class 'pandas.core.frame.DataFrame'>

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가
  • 11행 선택11행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

2

26.0

female

Third

7.9250

1

8

27.0

female

Third

11.1333

1

10

4.0

female

Third

16.7000

1

14

14.0

female

Third

7.8542

0

18

31.0

female

Third

18.0000

0

...

...

...

...

...

...

863

NaN

female

Third

69.5500

0

875

15.0

female

Third

7.2250

1

882

22.0

female

Third

10.5167

0

885

39.0

female

Third

29.1250

0

888

NaN

female

Third

23.4500

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

144 rows × 5 columns

적용 - 결합

데이터 집계(agg), 변환(transform), 필터링(filter), 객체에 함수 매핑(apply)

In [14]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

import seaborn as sns

 

# titanic 데이터셋에서 age, sex 등 5개 열을 선택하여 데이터프레임 만들기

df = titanic.loc[:,['age', 'sex', 'class', 'fare', 'survived']]

 

#class 열을 기준으로 분할

grouped = df.groupby(['class'])

# list(grouped)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [15]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 각 그룹에 대한 모든 열의 표준편차를 집계하여 데이터프레임으로 변환

std_all = grouped.std() # 표준편차를 그룹으로 저장

display(std_all)

print(type(std_all))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

survived

class

 

 

 

First

14.802856

78.380373

0.484026

Second

14.001077

13.417399

0.500623

Third

12.495398

11.778142

0.428949

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<class 'pandas.core.frame.DataFrame'>

(Z = X-μ/σ) Z-score : 평균값에서 표준편차의 몇배 정도 떨어져 있다는 것을 평가하는 수치

분자 : 개별 데이터가 평균으로부터 얼마나 떨어져 있는가

Z-score : 그 떨어진 정도가 그 집단의 표준편차의 몇 배 인가

표준 정규분포로 환산했을 경우

표준편차 ±1(1시그마)배의 범위 내에 약 68% 데이터가 들어감

표준편차 ±2(2시그마)배의 범위 내에 약 95% 데이터가 들어감

표준편차 ±3(3시그마)배의 범위 내에 약 99% 데이터가 들어감

In [16]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 각 그룹에 대한 fare 열의 표준편차를 집계하여 시리즈로 반환

std_fare = grouped.fare.std()

display(std_fare)

print(type(std_fare))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

class First 78.380373 Second 13.417399 Third 11.778142 Name: fare, dtype: float64

<class 'pandas.core.series.Series'>

Q.최대값-최소값을 반환하는 사용자함수를 정의하고 agg() 함수에 인수로 전달하여 그룹별로 집계하여 agg_minmax 이름으로 저장 후 처음 5개 행을 출력하세요.

In [17]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

def min_max(x):

return x.max() - x.min()

 

agg_minmax = grouped.agg(min_max)

display(agg_minmax.head()) # 각 클래스(객실등급)별로 (최대값 - 최소값)의 결과 차이를 볼 수 있다.(분포 확인 가능)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

survived

class

 

 

 

First

79.08

512.3292

1

Second

69.33

73.5000

1

Third

73.58

69.5500

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [18]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 여러 함수를 각 열에 동일하게 적용하여 집계

agg_all = grouped.agg(['min','max'])

display(agg_all.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

fare

survived

 

min

max

min

max

min

max

min

max

class

 

 

 

 

 

 

 

 

First

0.92

80.0

female

male

0.0

512.3292

0

1

Second

0.67

70.0

female

male

0.0

73.5000

0

1

Third

0.42

74.0

female

male

0.0

69.5500

0

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. grouped 에 각 열마다 다른 함수를 적용하여 agg_sep이름으로 저장하고 출력하세요.

('fare'는 'min, max', 'age'는 'mean)

In [19]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 각 열마다 다른 함수를 적용하여 집계

agg_sep = grouped.agg({'fare':['min','max'], 'age':'mean'})

display(agg_sep.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

fare

age

 

min

max

mean

class

 

 

 

First

0.0

512.3292

38.233441

Second

0.0

73.5000

29.877630

Third

0.0

69.5500

25.140620

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [61]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

import seaborn as sns

 

#titanic 데이터셋에서 age, sex 등 5개 열을 선택하여 데이터프레임 만들기

titanic = sns.load_dataset('titanic')

df = titanic.loc[:,['age','sex','class','fare','survived']]

 

#class 열을 기준으로 분할

grouped = df.groupby(['class'])

display(grouped)

display(grouped.count())

display(grouped.sum())

display(list(grouped))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002AD4F456888>

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

fare

survived

class

 

 

 

 

First

186

216

216

216

Second

173

184

184

184

Third

355

491

491

491

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

survived

class

 

 

 

First

7111.42

18177.4125

136

Second

5168.83

3801.8417

87

Third

8924.92

6714.6951

119

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

[('First', age sex class fare survived 1 38.0 female First 71.2833 1 3 35.0 female First 53.1000 1 6 54.0 male First 51.8625 0 11 58.0 female First 26.5500 1 23 28.0 male First 35.5000 1 .. ... ... ... ... ... 871 47.0 female First 52.5542 1 872 33.0 male First 5.0000 0 879 56.0 female First 83.1583 1 887 19.0 female First 30.0000 1 889 26.0 male First 30.0000 1 [216 rows x 5 columns]), ('Second', age sex class fare survived 9 14.0 female Second 30.0708 1 15 55.0 female Second 16.0000 1 17 NaN male Second 13.0000 1 20 35.0 male Second 26.0000 0 21 34.0 male Second 13.0000 1 .. ... ... ... ... ... 866 27.0 female Second 13.8583 1 874 28.0 female Second 24.0000 1 880 25.0 female Second 26.0000 1 883 28.0 male Second 10.5000 0 886 27.0 male Second 13.0000 0 [184 rows x 5 columns]), ('Third', age sex class fare survived 0 22.0 male Third 7.2500 0 2 26.0 female Third 7.9250 1 4 35.0 male Third 8.0500 0 5 NaN male Third 8.4583 0 7 2.0 male Third 21.0750 0 .. ... ... ... ... ... 882 22.0 female Third 10.5167 0 884 25.0 male Third 7.0500 0 885 39.0 female Third 29.1250 0 888 NaN female Third 23.4500 0 890 32.0 male Third 7.7500 0 [491 rows x 5 columns])]

Q.데이터 개수가 200개 이상인 그룹만을 필터링하여 데이터프레임으로 반환하여 grouped_filter 이름으로 저장 후 처음 5개 행을 출력하세요

In [52]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

grouped_filter = grouped.filter(lambda x : len(x) >= 200) # 그룹의 길이가 200 이상인 것을 조건으로 filtering 하라는 의미

display(grouped_filter.head())

print(type(grouped_filter))

# list(grouped)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

0

22.0

male

Third

7.2500

0

1

38.0

female

First

71.2833

1

2

26.0

female

Third

7.9250

1

3

35.0

female

First

53.1000

1

4

35.0

male

Third

8.0500

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<class 'pandas.core.frame.DataFrame'>

Q. age 열의 평균이 30보다 작은 그룹만을 필터링하여 데이터프레임으로 반환하여 age_filter 이름으로 저장 후 끝에서 5개 행을 출력하세요.

In [22]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

age_filter = grouped.filter(lambda x : x.age.mean() < 30)

display(age_filter)

print(type(age_filter))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가
  • 11행 선택11행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

0

22.0

male

Third

7.2500

0

2

26.0

female

Third

7.9250

1

4

35.0

male

Third

8.0500

0

5

NaN

male

Third

8.4583

0

7

2.0

male

Third

21.0750

0

...

...

...

...

...

...

884

25.0

male

Third

7.0500

0

885

39.0

female

Third

29.1250

0

886

27.0

male

Second

13.0000

0

888

NaN

female

Third

23.4500

0

890

32.0

male

Third

7.7500

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

675 rows × 5 columns

<class 'pandas.core.frame.DataFrame'>

Q. Class 각 그룹별 요약 통계정보를 집계 출력하세요

소스 : sns.load_dataset('titanic')

컬럼 선택 : ['age','sex','class','fare','survived']

In [23]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

titanic = sns.load_dataset('titanic')

df = titanic.loc[:,['age','sex','class','fare','survived']]

grouped = df.groupby(['class'])

 

# 집계 : 각 그룹별 요약 통계정보를 집계

agg_grouped = grouped.apply(lambda x : x.describe())

display(agg_grouped)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가
  • 11행 선택11행 다음에 행 추가
  • 12행 선택12행 다음에 행 추가
  • 13행 선택13행 다음에 행 추가
  • 14행 선택14행 다음에 행 추가
  • 15행 선택15행 다음에 행 추가
  • 16행 선택16행 다음에 행 추가
  • 17행 선택17행 다음에 행 추가
  • 18행 선택18행 다음에 행 추가
  • 19행 선택19행 다음에 행 추가
  • 20행 선택20행 다음에 행 추가
  • 21행 선택21행 다음에 행 추가
  • 22행 선택22행 다음에 행 추가
  • 23행 선택23행 다음에 행 추가
  • 24행 선택24행 다음에 행 추가
  • 25행 선택25행 다음에 행 추가

열 너비 조절

행 높이 조절

 

 

age

fare

survived

class

 

 

 

 

First

count

186.000000

216.000000

216.000000

mean

38.233441

84.154687

0.629630

std

14.802856

78.380373

0.484026

min

0.920000

0.000000

0.000000

25%

27.000000

30.923950

0.000000

50%

37.000000

60.287500

1.000000

75%

49.000000

93.500000

1.000000

max

80.000000

512.329200

1.000000

Second

count

173.000000

184.000000

184.000000

mean

29.877630

20.662183

0.472826

std

14.001077

13.417399

0.500623

min

0.670000

0.000000

0.000000

25%

23.000000

13.000000

0.000000

50%

29.000000

14.250000

0.000000

75%

36.000000

26.000000

1.000000

max

70.000000

73.500000

1.000000

Third

count

355.000000

491.000000

491.000000

mean

25.140620

13.675550

0.242363

std

12.495398

11.778142

0.428949

min

0.420000

0.000000

0.000000

25%

18.000000

7.750000

0.000000

50%

24.000000

8.050000

0.000000

75%

32.000000

15.500000

0.000000

max

74.000000

69.550000

1.000000

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Z-score를 계산하는 사용자 함수 정의

In [66]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

def z_score(df):

return (df-df.mean()) / df.std()

 

age_zscore = grouped.age.apply(z_score) #기본값 axis=0

print(age_zscore.head())

 

grouped.plot(kind='box',y='age') # 나이 시각적으로 보기

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

0 -0.251342 1 -0.015770 2 0.068776 3 -0.218434 4 0.789041 Name: age, dtype: float64

Out[66]:

class First AxesSubplot(0.125,0.125;0.775x0.755) Second AxesSubplot(0.125,0.125;0.775x0.755) Third AxesSubplot(0.125,0.125;0.775x0.755) dtype: object

In [67]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# zscore 구하기

# from scipy.stats import zmap

# import numpy as np

# test = np.array([-0.33, -0.31, 0.55, 0.05, 0.93])

# ctrl = np.array([[-0.65, 1.09, -1.67, -0.32, 1.26],

# [0.39, 0.68, -0.28, -0.75, -0.72]])

# zmap(test,ctrl)

 

# test2 = np.expand_dims(test, axis=0)

# test2 = np.concatenate((test2, ctrl))

# zmap(test2,ctrl)

# # z = (x - x.mean(axis=0)) / x.std(axis=0)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [74]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 필터링 : age열의 데이터 평균이 30보다 작은 그룹만들 필터링하여 출력

age_filter = grouped.apply(lambda x : x['age'].mean() < 30)

display(age_filter) # First 만 30보다 크기 때문에 False

for x in age_filter.index:

if age_filter[x]==True:

age_filter_df = grouped.get_group(x)

display(age_filter_df.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

class First False Second True Third True dtype: bool

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

fare

survived

9

14.0

female

30.0708

1

15

55.0

female

16.0000

1

17

NaN

male

13.0000

1

20

35.0

male

26.0000

0

21

34.0

male

13.0000

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

fare

survived

0

22.0

male

7.2500

0

2

26.0

female

7.9250

1

4

35.0

male

8.0500

0

5

NaN

male

8.4583

0

7

2.0

male

21.0750

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [77]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

import seaborn as sns

# titanic 데이터셋에서 age, sex 등 5개 열을 선택하여 데이터프레임 만들기

titanic = sns.load_dataset('titanic')

df = titanic.loc[:, ['age','sex','class','fare','survived']]

 

# class 열, sex열을 기준으로 분할

grouped = df.groupby(['class','sex'])

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [81]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 그룹 객체에 연산 메서드 적용

print(type(grouped))

gdf = grouped.mean() #std, min, max 원하는 그룹별로 나눠서 사용 가능

display(gdf) # 6개의 그룹 출력

print(type(gdf))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<class 'pandas.core.groupby.generic.DataFrameGroupBy'>

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가

열 너비 조절

행 높이 조절

 

 

age

fare

survived

class

sex

 

 

 

First

female

34.611765

106.125798

0.968085

male

41.281386

67.226127

0.368852

Second

female

28.722973

21.970121

0.921053

male

30.740707

19.741782

0.157407

Third

female

21.750000

16.118810

0.500000

male

26.507589

12.661633

0.135447

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<class 'pandas.core.frame.DataFrame'>

Q. class 값이 First인 행을 선택하여 출력하세요

In [88]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# class 값이 First인 행을 선택하여 출력

display(gdf.loc['First']) # display(gdf.loc['First','female']) 처럼 원하는 행만 선택 가능

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

survived

sex

 

 

 

female

34.611765

106.125798

0.968085

male

41.281386

67.226127

0.368852

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. class 값이 First 이고, sex 값이 female 인 행을 선택하여 출력하세요

In [90]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

display(gdf.loc['First','female'])

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

age 34.611765 fare 106.125798 survived 0.968085 Name: (First, female), dtype: float64

Q. sex값이 male 인 행을 선택하여 출력하세요

In [96]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# sex 값이 male 인 행을 선택하여 출력

display(gdf.xs('male', level='sex'))

# help(gdf.xs)

#df.xs(('bird', 'walks'), level=[0, 'locomotion'])

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

survived

class

 

 

 

First

41.281386

67.226127

0.368852

Second

30.740707

19.741782

0.157407

Third

26.507589

12.661633

0.135447

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

피벗

피벗 테이블을 구성하는 4가지 요소(행 인덱스, 열 인덱스, 데이터 값, 데이터 집계함수)에 적용할 데이터프레임의 열을 각각 지정하여 함수의 인자로 전달

In [99]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

import seaborn as sns

 

# IPython 디스플레이 설정 변경

pd.set_option('display.max_columns',10) #출력할 최대 열의 개수

pd.set_option('display.max_colwidth',10) #출력할 열의 너비

# titanic 데이터셋에서 age, sex 등 5개 열을 선택하여 데이터프레임 만들기

titanic = sns.load_dataset('titanic')

df = titanic.loc[:, ['age','sex','class','fare','survived']]

display(df.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

sex

class

fare

survived

0

22.0

male

Third

7.2500

0

1

38.0

female

First

71.2833

1

2

26.0

female

Third

7.9250

1

3

35.0

female

First

53.1000

1

4

35.0

male

Third

8.0500

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [104]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 행, 열, 값, 집계에 사용할 열을 1개씩 지정 - 평균 집계

pdf1 = pd.pivot_table(df, # 피벗할 데이터프레임

index='class', # 행 위치에 들어갈 열

columns='sex', # 열 위치에 들어갈 열

values='age', # 데이터로 사용할 열

aggfunc='mean') # 데이터 집계 함수

 

display(pdf1.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

sex

female

male

class

 

 

First

34.611765

41.281386

Second

28.722973

30.740707

Third

21.750000

26.507589

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. 값에 적용하는 집계 함수를 2개 이상 지정할 수 있다. mean, sum을 지정하여 출력하세요.

In [108]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

pdf2 = pd.pivot_table(df, # 피벗할 데이터프레임

index='class', # 행 위치에 들어갈 열

columns='sex', # 열 위치에 들어갈 열

values='survived', # 데이터로 사용할 열

aggfunc=['mean','sum']) # 데이터 집계 함수

 

display(pdf2.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

mean

sum

sex

female

male

female

male

class

 

 

 

 

First

0.968085

0.368852

91

45

Second

0.921053

0.157407

70

17

Third

0.500000

0.135447

72

47

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. 행, 열, 값에 사용할 열을 2개 이상 지정할 수 있다. index, values, aggfunc에 각각 2개를 지정하여 출력하세요.

In [116]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

pdf3 = pd.pivot_table(df, # 피벗할 데이터프레임

index=['class','sex'], # 행 위치에 들어갈 열

columns='survived', # 열 위치에 들어갈 열

values=['age','fare'], # 데이터로 사용할 열

aggfunc=['mean','max']) # 데이터 집계 함수

 

display(pdf3)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가

열 너비 조절

행 높이 조절

 

 

mean

max

 

 

age

fare

age

fare

 

survived

0

1

0

1

0

1

0

1

class

sex

 

 

 

 

 

 

 

 

First

female

25.666667

34.939024

110.60...

105.97...

50.0

63.0

151.55

512.3292

male

44.581967

36.248000

62.894910

74.637320

71.0

80.0

263.00

512.3292

Second

female

36.000000

28.080882

18.250000

22.288989

57.0

55.0

26.00

65.0000

male

33.369048

16.022000

19.488965

21.095100

70.0

62.0

73.50

39.0000

Third

female

23.818182

19.329787

19.773093

12.464526

48.0

63.0

69.55

31.3875

male

27.255814

22.274211

12.204469

15.579696

74.0

45.0

69.55

56.4958

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [119]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

pd.set_option('display.max_columns',10)

display(pdf3)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가

열 너비 조절

행 높이 조절

 

 

mean

max

 

 

age

fare

age

fare

 

survived

0

1

0

1

0

1

0

1

class

sex

 

 

 

 

 

 

 

 

First

female

25.666667

34.939024

110.60...

105.97...

50.0

63.0

151.55

512.3292

male

44.581967

36.248000

62.894910

74.637320

71.0

80.0

263.00

512.3292

Second

female

36.000000

28.080882

18.250000

22.288989

57.0

55.0

26.00

65.0000

male

33.369048

16.022000

19.488965

21.095100

70.0

62.0

73.50

39.0000

Third

female

23.818182

19.329787

19.773093

12.464526

48.0

63.0

69.55

31.3875

male

27.255814

22.274211

12.204469

15.579696

74.0

45.0

69.55

56.4958

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q. pdf3에서 xs인덱서를 사용하여 다음사항을 수행 후 출력하세요.

행 인덱스가 First인 행을 선택

행 인덱스가('First','female')인 행을 선택

행 인덱스의 sex 레벨이 male인 행을 선택

Second, male이고, level=[0,'sex'] 행을 선택

열 인덱스가 mean인 데이터를 선택

열 인덱스가 ('mean','age')인 데이터 선택

survived 레벨이 1인 데이터 선택

In [134]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# xs 인덱서 사용 - 행 선택(default:axis=0)

pdf3.loc['First'] # 행 인덱스가 First인 행을 선택

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[134]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

mean

max

 

age

fare

age

fare

survived

0

1

0

1

0

1

0

1

sex

 

 

 

 

 

 

 

 

female

25.666667

34.939024

110.60...

105.97...

50.0

63.0

151.55

512.3292

male

44.581967

36.248000

62.894910

74.637320

71.0

80.0

263.00

512.3292

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [135]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

pdf3.loc['First','female'] #행 인덱스가('First','female')인 행을 선택

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[135]:

survived mean age 0 25.666667 1 34.939024 fare 0 110.60... 1 105.97... max age 0 50.000000 1 63.000000 fare 0 151.55... 1 512.32... Name: (First, female), dtype: float64

In [136]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

pdf3.xs('male', level='sex') #행 인덱스의 sex 레벨이 male인 행을 선택

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[136]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가

열 너비 조절

행 높이 조절

 

mean

max

 

age

fare

age

fare

survived

0

1

0

1

0

1

0

1

class

 

 

 

 

 

 

 

 

First

44.581967

36.248000

62.894910

74.637320

71.0

80.0

263.00

512.3292

Second

33.369048

16.022000

19.488965

21.095100

70.0

62.0

73.50

39.0000

Third

27.255814

22.274211

12.204469

15.579696

74.0

45.0

69.55

56.4958

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [138]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

display(pdf3.xs(('Second','male'), level=[0, 'sex']))# Second, male이고, level=[0,'sex'] 행을 선택

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

 

mean

max

 

 

age

fare

age

fare

 

survived

0

1

0

1

0

1

0

1

class

sex

 

 

 

 

 

 

 

 

Second

male

33.369048

16.022

19.488965

21.0951

70.0

62.0

73.5

39.0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [140]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

pdf3.xs('mean',axis=1) # 열 인덱스가 mean인 데이터를 선택

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[140]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가

열 너비 조절

행 높이 조절

 

 

age

fare

 

survived

0

1

0

1

class

sex

 

 

 

 

First

female

25.666667

34.939024

110.60...

105.97...

male

44.581967

36.248000

62.894910

74.637320

Second

female

36.000000

28.080882

18.250000

22.288989

male

33.369048

16.022000

19.488965

21.095100

Third

female

23.818182

19.329787

19.773093

12.464526

male

27.255814

22.274211

12.204469

15.579696

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [142]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

pdf3.xs(('mean','age'),axis=1) # 열 인덱스가 ('mean','age')인 데이터 선택

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[142]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가

열 너비 조절

행 높이 조절

 

survived

0

1

class

sex

 

 

First

female

25.666667

34.939024

male

44.581967

36.248000

Second

female

36.000000

28.080882

male

33.369048

16.022000

Third

female

23.818182

19.329787

male

27.255814

22.274211

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [169]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

pdf3.xs(1,level='survived',axis=1) # survived 레벨이 1인 데이터 선택(살아있는애들)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[169]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가

열 너비 조절

행 높이 조절

 

 

mean

max

 

 

age

fare

age

fare

class

sex

 

 

 

 

First

female

34.939024

105.97...

63.0

512.3292

male

36.248000

74.637320

80.0

512.3292

Second

female

28.080882

22.288989

55.0

65.0000

male

16.022000

21.095100

62.0

39.0000

Third

female

19.329787

12.464526

63.0

31.3875

male

22.274211

15.579696

45.0

56.4958

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

훈련과정 : R·파이썬 기반 빅데이터 분석 전문가 양성과정

교과목 평가 : 탐색적 데이터 분석

성명 : 호지수

점수 :

Q1. titanic3.csv 데이터 셋을 불러와서 사용자 함수 transform_features()을 이용하여 필요한 전처리 작업을 수행한 후 아래 사항을 수행하세요. --- (30점)

'pclass','sex','age','fare','survived' 컬럼으로 이루어진 df1을 만들고 pickle을 이용해서 t3_df.pkl로 저장

t3_df.pkl을 df1이름으로 불러옴

In [1]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

import numpy as np

import seaborn as sns

from sklearn.preprocessing import LabelEncoder

import warnings

warnings.filterwarnings('ignore')

# Null 처리함수

def fillna(df):

df['age'].fillna(df['age'].mean(), inplace=True)

df['fare'].fillna(df['fare'].mean(), inplace=True)

df['cabin'].fillna('N', inplace=True)

df['embarked'].fillna('N', inplace=True)

return df

 

#머신러닝 알고리즘에 불필요한 속성 제거(name, ticket, boat, body, home.dest)

def drop_features(df):

df.drop(['name', 'ticket', 'boat', 'body', 'home.dest'], axis=1, inplace=True)

return df

 

# 레이블 인코딩

def format_features(df):

df['cabin'] = df['cabin'].str[:1]

features = ['cabin','sex','embarked']

for feature in features:

le = LabelEncoder()

le = le.fit(df[feature])

df[feature] = le.transform(df[feature])

return df

 

def transform_features(df):

df = fillna(df)

df = drop_features(df)

df = format_features(df)

return df

 

titanic_df = pd.read_csv('titanic3.csv')

transform_features(titanic_df)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[1]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가
  • 11행 선택11행 다음에 행 추가

열 너비 조절

행 높이 조절

 

pclass

survived

sex

age

sibsp

parch

fare

cabin

embarked

0

1

1

0

29.000000

0

0

211.3375

1

3

1

1

1

1

0.920000

1

2

151.5500

2

3

2

1

0

0

2.000000

1

2

151.5500

2

3

3

1

0

1

30.000000

1

2

151.5500

2

3

4

1

0

0

25.000000

1

2

151.5500

2

3

...

...

...

...

...

...

...

...

...

...

1304

3

0

0

14.500000

1

0

14.4542

7

0

1305

3

0

0

29.881138

1

0

14.4542

7

0

1306

3

0

1

26.500000

0

0

7.2250

7

0

1307

3

0

1

27.000000

0

0

7.2250

7

0

1308

3

0

1

29.000000

0

0

7.8750

7

3

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

1309 rows × 9 columns

In [2]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

df1 = titanic_df.loc[:,['pclass', 'sex', 'age', 'fare', 'survived']]

df1.to_pickle('t3_df.pkl')

df1 = pd.read_pickle('t3_df.pkl')

display(df1.head(2))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가

열 너비 조절

행 높이 조절

 

pclass

sex

age

fare

survived

0

1

0

29.00

211.3375

1

1

1

1

0.92

151.5500

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q2. df1을 pclass별 그룹핑하여 grouped 이름으로 저장하고 다음사항을 수행하세요. --- (10점)

pclass별 평균

pclass별 최대값, 최소값

In [15]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

grouped = df1.groupby(['pclass'])

display(grouped[['age','fare','survived']].mean(),'평균')

display(grouped.max(),'최대')

display(grouped.min(),'최소')

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

age

fare

survived

pclass

 

 

 

1

38.039580

87.508992

0.619195

2

29.528333

21.179196

0.429603

3

26.302224

13.331087

0.255289

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

'평균'

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

sex

age

fare

survived

pclass

 

 

 

 

1

1

80.0

512.3292

1

2

1

70.0

73.5000

1

3

1

74.0

69.5500

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

'최대'

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

sex

age

fare

survived

pclass

 

 

 

 

1

0

0.92

0.0

0

2

0

0.67

0.0

0

3

0

0.17

0.0

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

'최소'

Q3. pclass 열, sex 열을 기준으로 분할하여 g2에 저장 후 출력하세요. --- (5점)

In [4]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

g2 = df1.groupby(['pclass','sex'])

display(g2.head(1))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가

열 너비 조절

행 높이 조절

 

pclass

sex

age

fare

survived

0

1

0

29.00

211.3375

1

1

1

1

0.92

151.5500

1

323

2

1

30.00

24.0000

0

324

2

0

28.00

24.0000

1

600

3

1

42.00

7.5500

0

603

3

0

35.00

20.2500

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q4. g2에 연산 메소드를 적용해서 pclass, sex 별 age, fare, survived의 평균값을 출력하세요. --- (5점)

In [5]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

g2.mean()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[5]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가

열 너비 조절

행 높이 조절

 

 

age

fare

survived

pclass

sex

 

 

 

1

0

36.490920

109.412385

0.965278

1

39.285429

69.888385

0.340782

2

0

27.566636

23.234827

0.886792

1

30.744355

19.904946

0.146199

3

0

24.465569

15.324250

0.490741

1

27.106925

12.457815

0.152130

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q5. g2에서 3(pclass), 0(female) 그룹을 선택해서 g3에 저장하고 처음 5개행을 출력하세요. --- (5점)

In [6]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

g3 = g2.get_group((3,0))

g3.head()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[6]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

pclass

sex

age

fare

survived

603

3

0

35.0

20.2500

1

604

3

0

16.0

7.6500

1

607

3

0

18.0

7.2292

1

610

3

0

40.0

9.4750

0

612

3

0

18.0

9.3500

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q6. 최대값 - 최소값을 반환하는 사용자 함수를 정의하고 아래사항을 수행하세요. --- (5점)

grouped 객체에 agg() 메소드를 적용 사용자함수를 인자로 전달하여 그룹별로 집계

In [7]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

def min_max(x):

return x.max() - x.min()

 

agg_minmax = grouped.agg(min_max)

display(agg_minmax)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

sex

age

fare

survived

pclass

 

 

 

 

1

1

79.08

512.3292

1

2

1

69.33

73.5000

1

3

1

73.83

69.5500

1

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q7. grouped 각 열마다 아래와 같이 상이한 함수를 적용하여 agg_sep 이름으로 저장하고 출력하세요. --- (10점)

{'fare':['min', 'max'], 'age':'mean'}

In [8]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

agg_sep = grouped.agg({'fare':['min','max'], 'age':'mean'})

display(agg_sep)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

fare

age

 

min

max

mean

pclass

 

 

 

1

0.0

512.3292

38.039580

2

0.0

73.5000

29.528333

3

0.0

69.5500

26.302224

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q8. t3_df.pkl을 불러와서 df1에 저장하고 pclass별 grouped 객체로 그룹핑하여 아래사항을 수행하세요. --- (10점)

age 열의 평균이 30보다 작은 그룹만을 필터링하여 데이터프레임으로 반환하여 age_fileter 이름으로 저장 후 5개행 출력

In [9]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

df1 = pd.read_pickle('t3_df.pkl')

grouped = df1.groupby(['pclass'])

age_filter = grouped.filter(lambda x : x['age'].mean() < 30)

display(age_filter.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

pclass

sex

age

fare

survived

323

2

1

30.0

24.0

0

324

2

0

28.0

24.0

1

325

2

1

30.0

13.0

0

326

2

1

18.0

11.5

0

327

2

1

25.0

10.5

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q9. grouped.age 컬럼의 Z-score를 계산하는 사용자 함수를 정의하고 함수 매핑하여 age_zscore 이름으로 결과를 출력하세요. --- (10점)

In [10]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

def zscore(df):

return (df-df.mean()) / df.std()

 

age_zscore = grouped.age.apply(zscore)

print(age_zscore.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

0 -0.647040 1 -2.656964 2 -2.579659 3 -0.575461 4 -0.933354 Name: age, dtype: float64

Q10. t3_df.pkl을 불러와서 df1에 저장하고 pclass, sex 열을 기준으로 grouped 객체로 그룹핑하여 아래사항을 수행하세요. --- (10점)

grouped 객체에 연산 메서드를 적용 평균을 출력

In [11]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

df1 = pd.read_pickle('t3_df.pkl')

grouped = df1.groupby(['pclass','sex'])

grouped.mean()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[11]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가

열 너비 조절

행 높이 조절

 

 

age

fare

survived

pclass

sex

 

 

 

1

0

36.490920

109.412385

0.965278

1

39.285429

69.888385

0.340782

2

0

27.566636

23.234827

0.886792

1

30.744355

19.904946

0.146199

3

0

24.465569

15.324250

0.490741

1

27.106925

12.457815

0.152130

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

 

 

728x90
반응형

댓글