รูปแบบข้อมูลแบบ Wide และ Long

การจัดรูปแบบข้อมูลด้วย pandas

Maria Eugenia Inzaugarat

Data Scientist

สิ่งที่จะได้เรียนรู้

  • รูปแบบ Wide และ Long
  • การแปลงจาก Long เป็น Wide
  • การแปลงจาก Wide เป็น Long
  • การ Stack และ Unstack คอลัมน์
  • การ Reshape และจัดการข้อมูลซับซ้อน เช่น คอลัมน์ข้อความหรือข้อมูล JSON
การจัดรูปแบบข้อมูลด้วย pandas

เหตุใดจึงสำคัญ

  • Tidy datasets
  • ข้อมูลที่ยังไม่อยู่ในรูปแบบที่เหมาะสมสำหรับการวิเคราะห์:
    • อ่านได้ง่าย vs. การวิเคราะห์เชิงสถิติ
  • ข้อมูลแบบ Nested ใน DataFrame จัดการได้ยาก
  • การหาสถิติสรุปสำหรับ DataFrame ที่มี Multi-level Index
การจัดรูปแบบข้อมูลด้วย pandas

รูปร่างของข้อมูล

  • วิธีที่ชุดข้อมูลถูกจัดเรียงในแถวและคอลัมน์
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

รูปแบบ Wide

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

รูปแบบ Wide

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
                         ^^
  • แต่ละ Feature อยู่ในคอลัมน์แยกกัน
การจัดรูปแบบข้อมูลด้วย pandas

รูปแบบ Wide

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

  • แต่ละ Feature อยู่ในคอลัมน์แยกกัน
  • แต่ละแถวมีข้อมูลหลาย Feature ของผู้เล่นคนเดียวกัน
การจัดรูปแบบข้อมูลด้วย pandas

รูปแบบ Wide

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
  • แต่ละ Feature อยู่ในคอลัมน์แยกกัน
  • แต่ละแถวมีข้อมูลหลาย Feature ของผู้เล่นคนเดียวกัน
  • ไม่มีข้อมูลซ้ำ แต่มีค่าว่างจำนวนมาก
  • เหมาะสำหรับสถิติเบื้องต้นและการเติมค่าว่าง
การจัดรูปแบบข้อมูลด้วย pandas

รูปแบบ Long

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

รูปแบบ Long

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
  • แต่ละแถวแทน Feature เดียว
การจัดรูปแบบข้อมูลด้วย pandas

รูปแบบ Long

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
  • แต่ละแถวแทน Feature เดียว
  • ผู้เล่นหนึ่งคนมีหลายแถว
การจัดรูปแบบข้อมูลด้วย pandas

รูปแบบ Long

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
        ^^^^^^^^^^^
  • แต่ละแถวแทน Feature เดียว
  • ผู้เล่นหนึ่งคนมีหลายแถว
  • มีคอลัมน์ (name) เพื่อระบุผู้เล่นคนเดียวกัน
การจัดรูปแบบข้อมูลด้วย pandas

รูปแบบ Long

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
  • แต่ละแถวแทน Feature เดียว
  • ผู้เล่นหนึ่งคนมีหลายแถว
  • มีคอลัมน์ (name) เพื่อระบุผู้เล่นคนเดียวกัน
  • Tidy data:
    • สรุปข้อมูลได้ง่ายกว่า
    • เก็บในรูปแบบ Key-value
    • เหมาะสำหรับการวิเคราะห์และสร้างกราฟ
การจัดรูปแบบข้อมูลด้วย pandas

การ Reshape ข้อมูล

  • การปรับโครงสร้าง DataFrame หรือ Series เพื่อให้พร้อมสำหรับการวิเคราะห์
    • การ Transpose 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

การ Reshape ข้อมูล

  • การปรับโครงสร้าง DataFrame หรือ Series เพื่อให้พร้อมสำหรับการวิเคราะห์
    • การ Transpose 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

การ Reshape ข้อมูล

  • การปรับโครงสร้าง DataFrame หรือ Series เพื่อให้พร้อมสำหรับการวิเคราะห์
    • การ Transpose 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

การ Reshape ข้อมูล

  • การแปลงข้อมูลระหว่างรูปแบบ Wide และ Long
  • หน่วยของการวิเคราะห์:
    • รูปแบบ Long -> คุณสมบัติของผู้เล่น
    • รูปแบบ Wide -> ผู้เล่นแต่ละคน
การจัดรูปแบบข้อมูลด้วย pandas

การแปลงจาก Wide เป็น Long

  • ใช้ฟังก์ชันของ pandas เช่น:

    • .melt()
    • .wide_to_long()
การจัดรูปแบบข้อมูลด้วย pandas

การแปลงจาก Long เป็น Wide

  • แปลงข้อมูลด้วยเมธอดของ pandas เช่น:

    • .pivot()
    • .pivot_table()
การจัดรูปแบบข้อมูลด้วย pandas

มาฝึกกันเถอะ!

การจัดรูปแบบข้อมูลด้วย pandas

Preparing Video For Download...