Широкий і довгий формати даних

Переформатування даних у pandas

Maria Eugenia Inzaugarat

Data Scientist

Ви навчитеся

  • Широкий і довгий формати
  • Перетворення з довгого у широкий
  • Перетворення з широкого у довгий
  • Стекінг і анстекінг стовпців
  • Переформатування та робота зі складними даними, зокрема рядками або JSON
Переформатування даних у pandas

Чому це важливо

  • Охайні (tidy) набори даних
  • Дані не в належному форматі для аналізу:
    • Зручні для читання людиною vs. для статистичного аналізу
  • Вкладені дані в DataFrame обробляти складно
  • Отримувати зведену статистику для DataFrame з багаторівневим індексом
Переформатування даних у 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

Широкий формат

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
  • Кожна ознака в окремому стовпці
  • Кожен рядок містить багато ознак одного гравця
  • Немає повторень, але багато пропусків
  • Простi статистики та імпутація
Переформатування даних у 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) для ідентифікації того самого гравця
  • Охайні дані:
    • Легше узагальнювати
    • Пари ключ-значення
    • Краще підходять для аналізу й візуалізації
Переформатування даних у 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

Wide to long transformation

  • Performed using pandas functions, such as:

    • .melt()
    • .wide_to_long()
Переформатування даних у pandas

Long to wide format

  • Transform data using pandas methods, for example:

    • .pivot()
    • .pivot_table()
Переформатування даних у pandas

Let's practice!

Переформатування даних у pandas

Preparing Video For Download...