와이드형과 롱형 데이터 형식

pandas로 데이터 재구조화하기

Maria Eugenia Inzaugarat

Data Scientist

학습 내용

  • 와이드/롱 형식
  • 롱→와이드 변환
  • 와이드→롱 변환
  • 열 스택/언스택
  • 문자열·JSON 등 복잡 데이터 재구조화
pandas로 데이터 재구조화하기

왜 중요한가

  • 정돈(tidy) 데이터셋
  • 분석에 부적합한 형식 문제:
    • 사람이 읽기 쉬움 vs 통계 분석
  • DataFrame의 중첩 데이터는 다루기 복잡
  • 다중 인덱스 DataFrame 요약 통계 구하기
pandas로 데이터 재구조화하기

데이터 형태(Shape)

  • 데이터셋이 행·열로 조직된 방식
fifa_players = pd.read_csv("fifa_players.csv")
fifa_players
                name    age   nationality           club
0       Lionel Messi     32     Argentina      Barcelona
1  Cristiano Ronaldo     34      Portugal       Juventus
2    Neymar da Silva     27        Brazil  Saint-Germain
fifa_players.shape
(3, 4)
pandas로 데이터 재구조화하기

와이드형

fifa_players

                name    age   nationality           club
0       Lionel Messi     32     Argentina      Barcelona
1  Cristiano Ronaldo     34      Portugal       Juventus
2    Neymar da Silva     27        Brazil  Saint-Germain

pandas로 데이터 재구조화하기

와이드형

fifa_players
                         vv  
                name   | age | nationality          club
0       Lionel Messi   | 32  |  Argentina      Barcelona
1  Cristiano Ronaldo   | 34  |   Portugal       Juventus
2    Neymar da Silva   | 27  |     Brazil  Saint-Germain
                         ^^
  • 각 특성은 별도 열에 있음
pandas로 데이터 재구조화하기

와이드형

fifa_players

                name    age   nationality           club
0       Lionel Messi     32     Argentina      Barcelona <--
1  Cristiano Ronaldo     34      Portugal       Juventus <--
2    Neymar da Silva     27        Brazil  Saint-Germain <--

  • 각 특성은 별도 열에 있음
  • 각 행은 같은 선수의 여러 특성을 담음
pandas로 데이터 재구조화하기

와이드형

fifa_players
                name    age   nationality           club
0       Lionel Messi     32     Argentina      Barcelona
 --------------------------------------------------------
1    Cristiano Ronaldo    NaN  <-    Portugal       Juventus
 --------------------------------------------------------
2    Neymar da Silva     27        Brazil  Saint-Germain
  • 각 특성은 별도 열에 있음
  • 각 행은 같은 선수의 여러 특성을 담음
  • 중복은 없지만 결측치가 많음
  • 단순 통계·대치에 유리
pandas로 데이터 재구조화하기

롱형

fifa_players_long.head()
               name     variable     value
0 Cristiano Ronaldo  nationality   Portugal 
1 Cristiano Ronaldo         club   Juventus 
2      Lionel Messi          age         32
3      Lionel Messi  nationality  Argentina 
4      Lionel Messi         club  Barcelona
pandas로 데이터 재구조화하기

롱형

fifa_players_long.head()
               name     variable     value
0   Cristiano Ronaldo  nationality   Portugal <--
1 Cristiano Ronaldo         club  Juventus 
2      Lionel Messi          age        32
3        Lionel Messi  nationality  Argentina <--
4      Lionel Messi         club  Barcelona
  • 각 행이 하나의 특성을 나타냄
pandas로 데이터 재구조화하기

롱형

fifa_players_long.head()
               name     variable     value
0   Cristiano Ronaldo  nationality   Portugal <--
1   Cristiano Ronaldo         club   Juventus <--
2      Lionel Messi          age         32
3      Lionel Messi  nationality  Argentina 
4      Lionel Messi         club  Barcelona
  • 각 행이 하나의 특성을 나타냄
  • 한 선수당 여러 행
pandas로 데이터 재구조화하기

롱형

fifa_players_long.head()
  |              name |    variable      value
0 | Cristiano Ronaldo | nationality   Portugal
1 | Cristiano Ronaldo |        club   Juventus
2 |      Lionel Messi |         age         32
3 |      Lionel Messi | nationality  Argentina 
4 |      Lionel Messi |        club  Barcelona
        ^^^^^^^^^^^
  • 각 행이 하나의 특성을 나타냄
  • 한 선수당 여러 행
  • 같은 선수를 식별하는 열(name)
pandas로 데이터 재구조화하기

롱형

fifa_players_long.head()
               name     variable     value
0 Cristiano Ronaldo  nationality   Portugal 
1 Cristiano Ronaldo         club   Juventus 
2      Lionel Messi          age         32
3      Lionel Messi  nationality  Argentina 
4      Lionel Messi         club  Barcelona
  • 각 행이 하나의 특성을 나타냄
  • 한 선수당 여러 행
  • 같은 선수를 식별하는 열(name)
  • 정돈(tidy) 데이터:
    • 요약에 유리
    • 키-값 쌍
    • 분석·시각화에 선호
pandas로 데이터 재구조화하기

데이터 재구조화

  • 분석에 맞게 DataFrame/Series 구조 변환
    • DataFrame 전치
fifa_players.set_index('club')
                             name  age  nationality
         club 
    Barcelona        Lionel Messi   32    Argentina
     Juventus   Cristiano Ronaldo  NaN     Portugal
Saint-Germain     Neymar da Silva   27       Brazil
pandas로 데이터 재구조화하기

데이터 재구조화

  • 분석에 맞게 DataFrame/Series 구조 변환
    • DataFrame 전치
fifa_players.set_index('club')[['name', 'nationality']]
                               name   nationality 
         club 
    Barcelona        Lionel Messi       Argentina
     Juventus   Cristiano Ronaldo        Portugal
Saint-Germain     Neymar da Silva          Brazil
pandas로 데이터 재구조화하기

데이터 재구조화

  • 분석에 맞게 DataFrame/Series 구조 변환
    • DataFrame 전치
fifa_players.set_index('club')[['name', 'nationality']].transpose()
       club         Barcelona           Juventus     Saint-Germain
       name      Lionel Messi  Cristiano Ronaldo   Neymar da Silva
nationality         Argentina           Portugal            Brazil
pandas로 데이터 재구조화하기

데이터 재구조화

  • 와이드↔롱 형식 변환
  • 분석 단위:
    • 롱형 -> 선수의 개별 특성
    • 와이드형 -> 선수 개체
pandas로 데이터 재구조화하기

와이드→롱 변환

  • pandas 함수로 수행:

    • .melt()
    • .wide_to_long()
pandas로 데이터 재구조화하기

롱→와이드 변환

  • pandas 메서드로 변환 예:

    • .pivot()
    • .pivot_table()
pandas로 데이터 재구조화하기

Ayo berlatih!

pandas로 데이터 재구조화하기

Preparing Video For Download...