파이썬/NIPA 데이터분석 강의

NIPA 데이터분석 첫번째 활용선택 : 03 Pandas 심화 -b pivot 피리부는사나이

mcdn 2020. 9. 30. 13:20
반응형

13. index column 모두 계층적으로 만들 수 있다. 

[A A  B B ]가 [1 2 1 2] 보다 앞에 선언되었으므로 더 상위 계층으로 본다. 

A랑 B같은 경우 숨겨진 상태가 된다. 

14. 다중 인덱스 컬럼의 경우 계층적으로 확인한다. loc iloc그대로 사용가능하다. 

15. 엑셀의 pivot테이블과 같다. 탐색 조건에 3개가 필요하다. 

위의 예시는 그 유명한 타이타닉 데이터다. 

16. pivot_table함수를 썼다. 

index는 sex를 

columns는 class로 두고 값을 데이터 프레임을 구성한다. values값은 0과 1로 이루어졌던 survived이다. 

aggfunc는 값을 채우는 함수로 np.mean즉 0 1로 구성된 값들의 평균으로 값을 치우게 된다. 

 

17. 다음 pivot_table을 살펴보자. 

위와 같은 월별 내역 데이터 프레임이 있었다. 여기서 index는 월별로

column는 내역으로 설정한다. 내역을 보면 관리비 교통비 월급이 반복된다.

values는 수입과 지출이 된다. 

import numpy as np
import pandas as pd

df1 = pd.DataFrame(
    np.random.randn(4, 2), 
    index=[['A', 'A', 'B', 'B'], [1, 2, 1, 2]],
    columns=['data1', 'data2']
)
print("DataFrame1")
print(df1, "\n")

df2 = pd.DataFrame(
    np.random.randn(4, 4),
    columns=[["A", "A", "B", "B"], ["1", "2", "1", "2"]]
)
print("DataFrame2")
print(df2, "\n")

# 명시적 인덱싱을 활용한 df1의 인덱스 출력
print("df1.loc['A', 1]")
print(df1.loc['A', 1], "\n") 


# df2의 [A][1] 칼럼 출력
print('df2["A"]["1"]')
print(df2["A"]["1"], "\n")
df1.loc['A', 1]
data1   -0.049049
data2    0.335146
Name: (A, 1), dtype: float64 

df2["A"]["1"]
0   -1.827170
1    0.504288
2   -0.172803
3    0.179131
Name: 1, dtype: float64 

18. 자 이제 피리부는 사나이 실습을 해봅시다. 

피리부는 사나이를 따라간 어린이들 중 남자 어린이와 여자 어린이의 평균 연령을 표로 출력해보려고 합니다.

  • 피리부는 사나이 데이터에서 아이들만 골라내는 데 마스킹 연산을,
  • 피리부는 사나이를 따라간 아이들의 일차별 연령을 계산하는 데 groupby 함수를,
  • 아이들의 일차별 연령을 성별로 나누어 로 출력하는 데 pivot table을 이용할 수 있습니다
예시
	일차     구분           이름  나이      성별
0     1    Rat       Stevne   3    Male
1     1    Rat  Christopher   3    Male
2     1    Rat      Barbare   1  Female
3     1    Rat        Marie   1  Female
4     1    Rat     Elsapeth   1  Female
5     2    Rat      Rynyone   1    Male
6     2    Rat       Oswyne   2    Male

결과

import pandas as pd
import numpy as np

def main():
    # 파일을 읽어서 코드를 작성해보세요
    # 경로: "./data/the_pied_piper_of_hamelin.csv"
    df = pd.read_csv("./data/the_pied_piper_of_hamelin.csv")
    # print(df)
    children = df[df["구분"] == "Child"]
    # print(children)
    #groupchild = children.groupby("일차")
    #print(groupchild)
    end = children.pivot_table(
        index='일차', columns='성별', values='나이', aggfunc = np.mean
    )
    print(end)


if __name__ == "__main__":
    main()

 

19. masking부터 애먹다니 ㅋㅋㅋㅋ

구분에서 rat을 제외시키고 싶다면 df[ df["구분"] == "Child"] 로 새로 집어넣어주면 된다. 

    일차     구분         이름  나이      성별
42    3  Child      Fayth   6  Female
43    3  Child     Dorthe  13  Female
44    3  Child   Rycherde   9    Male
103   4  Child      Grace   8  Female
104   4  Child       Beil   5  Female
105   4  Child  Katherine  11  Female

그러면 앞의 Rat은 제외된 dataframe이 children에 새로 저장된다. 

20. 다음으로 groupby일차 하라는데 결과적으론 필요없는 연산이다. 

바로 pivot_table로 index / columns / value 값을 설정하면서 가능하다 

end = children.pivot_table(
        index='일차', columns='성별', values='나이', aggfunc = np.mean
    )
    print(end)
결과~
성별    Female      Male
일차                    
3   9.500000  9.000000
4   9.000000  6.333333
5   8.666667  8.833333
6   9.411765  7.846154

강의도 동일하게 했다 

추가적으로 중복 없이 이름을 뽑아 간 애들 이름 출력하는 것도 있다 

 

반응형