Dạng dữ liệu rộng và dài

Tái định dạng dữ liệu với pandas

Maria Eugenia Inzaugarat

Data Scientist

Bạn sẽ học

  • Dạng rộng và dạng dài
  • Chuyển từ dài sang rộng
  • Chuyển từ rộng sang dài
  • Xếp chồng và bỏ xếp chồng cột
  • Định hình lại và xử lý dữ liệu phức tạp như chuỗi hoặc JSON
Tái định dạng dữ liệu với pandas

Vì sao quan trọng

  • Bộ dữ liệu tidy
  • Dữ liệu không ở dạng phù hợp để phân tích:
    • Dễ đọc với con người vs. phân tích thống kê
  • Dữ liệu lồng trong DataFrame khó xử lý
  • Lấy thống kê tóm tắt cho DataFrame chỉ số đa cấp
Tái định dạng dữ liệu với pandas

Hình dạng dữ liệu

  • Cách tổ chức dữ liệu theo hàng và cột
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)
Tái định dạng dữ liệu với pandas

Dạng rộng

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

Tái định dạng dữ liệu với pandas

Dạng rộng

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
                         ^^
  • Mỗi thuộc tính ở một cột riêng
Tái định dạng dữ liệu với pandas

Dạng rộng

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

  • Mỗi thuộc tính ở một cột riêng
  • Mỗi hàng chứa nhiều thuộc tính của cùng một cầu thủ
Tái định dạng dữ liệu với pandas

Dạng rộng

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
  • Mỗi thuộc tính ở một cột riêng
  • Mỗi hàng chứa nhiều thuộc tính của cùng một cầu thủ
  • Không lặp nhưng có nhiều giá trị thiếu
  • Thống kê đơn giản và điền khuyết
Tái định dạng dữ liệu với pandas

Dạng dài

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
Tái định dạng dữ liệu với pandas

Dạng dài

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
  • Mỗi hàng biểu diễn một thuộc tính
Tái định dạng dữ liệu với pandas

Dạng dài

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
  • Mỗi hàng biểu diễn một thuộc tính
  • Mỗi cầu thủ có nhiều hàng
Tái định dạng dữ liệu với pandas

Dạng dài

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
        ^^^^^^^^^^^
  • Mỗi hàng biểu diễn một thuộc tính
  • Mỗi cầu thủ có nhiều hàng
  • Có cột (name) để nhận diện cùng cầu thủ
Tái định dạng dữ liệu với pandas

Dạng dài

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
  • Mỗi hàng biểu diễn một thuộc tính
  • Mỗi cầu thủ có nhiều hàng
  • Có cột (name) để nhận diện cùng cầu thủ
  • Dữ liệu tidy:
    • Dễ tóm tắt hơn
    • Cặp khóa-giá trị
    • Ưu tiên cho phân tích và vẽ đồ thị
Tái định dạng dữ liệu với pandas

Định hình lại dữ liệu

  • Biến đổi cấu trúc DataFrame/Series để phù hợp phân tích
    • Chuyển vị 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
Tái định dạng dữ liệu với pandas

Định hình lại dữ liệu

  • Biến đổi cấu trúc DataFrame/Series để phù hợp phân tích
    • Chuyển vị 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
Tái định dạng dữ liệu với pandas

Định hình lại dữ liệu

  • Biến đổi cấu trúc DataFrame/Series để phù hợp phân tích
    • Chuyển vị 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
Tái định dạng dữ liệu với pandas

Định hình lại dữ liệu

  • Chuyển đổi dữ liệu giữa dạng rộng và dạng dài
  • Đơn vị phân tích:
    • Dạng dài -> đặc tính của một cầu thủ
    • Dạng rộng -> từng cầu thủ
Tái định dạng dữ liệu với pandas

Chuyển từ rộng sang dài

  • Thực hiện bằng các hàm pandas, như:

    • .melt()
    • .wide_to_long()
Tái định dạng dữ liệu với pandas

Chuyển từ dài sang rộng

  • Biến đổi dữ liệu bằng các phương thức pandas, ví dụ:

    • .pivot()
    • .pivot_table()
Tái định dạng dữ liệu với pandas

Ayo berlatih!

Tái định dạng dữ liệu với pandas

Preparing Video For Download...