Geniş ve uzun veri formatları

pandas ile Veriyi Yeniden Şekillendirme

Maria Eugenia Inzaugarat

Data Scientist

Öğrenecekleriniz

  • Geniş ve uzun formatlar
  • Uzundan genişe dönüşüm
  • Genişten uzuna dönüşüm
  • Sütunları yığma ve açma (stack/unstack)
  • Dize sütunları veya JSON gibi karmaşık verileri yeniden şekillendirme ve işleme
pandas ile Veriyi Yeniden Şekillendirme

Neden önemli

  • Düzenli (tidy) veri kümeleri
  • Veri analiz için uygun formatta değil:
    • İnsan tarafından okunabilir vs. istatistiksel analiz
  • DataFrame'lerde iç içe (nested) veriyle çalışmak zordur
  • Çok seviyeli indeksli DataFrame'ler için özet istatistikler alın
pandas ile Veriyi Yeniden Şekillendirme

Veri şekli

  • Bir veri kümesinin satır ve sütunlarda nasıl düzenlendiği
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 ile Veriyi Yeniden Şekillendirme

Geniş format

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 ile Veriyi Yeniden Şekillendirme

Geniş format

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
                         ^^
  • Her özellik ayrı bir sütunda
pandas ile Veriyi Yeniden Şekillendirme

Geniş format

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

  • Her özellik ayrı bir sütunda
  • Her satır aynı oyuncunun birçok özelliğini içerir
pandas ile Veriyi Yeniden Şekillendirme

Geniş format

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
  • Her özellik ayrı bir sütunda
  • Her satır aynı oyuncunun birçok özelliğini içerir
  • Tekrar yok, ancak çok sayıda eksik değer var
  • Basit istatistik ve atama (imputation)
pandas ile Veriyi Yeniden Şekillendirme

Uzun format

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 ile Veriyi Yeniden Şekillendirme

Uzun format

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
  • Her satır tek bir özelliği temsil eder
pandas ile Veriyi Yeniden Şekillendirme

Uzun format

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
  • Her satır tek bir özelliği temsil eder
  • Her oyuncu için birden çok satır
pandas ile Veriyi Yeniden Şekillendirme

Uzun format

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
        ^^^^^^^^^^^
  • Her satır tek bir özelliği temsil eder
  • Her oyuncu için birden çok satır
  • Aynı oyuncuyu belirlemek için bir sütun (name)
pandas ile Veriyi Yeniden Şekillendirme

Uzun format

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
  • Her satır tek bir özelliği temsil eder
  • Her oyuncu için birden çok satır
  • Aynı oyuncuyu belirlemek için bir sütun (name)
  • Düzenli (tidy) veri:
    • Veriyi özetlemek için daha iyi
    • Anahtar-değer çiftleri
    • Analiz ve görselleştirme için tercih edilir
pandas ile Veriyi Yeniden Şekillendirme

Veriyi yeniden şekillendirme

  • Analize uygun hâle getirmek için DataFrame veya Series yapısını dönüştürme
    • Bir DataFrame'i döndürme (transpose)
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 ile Veriyi Yeniden Şekillendirme

Veriyi yeniden şekillendirme

  • Analize uygun hâle getirmek için DataFrame veya Series yapısını dönüştürme
    • Bir DataFrame'i döndürme (transpose)
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 ile Veriyi Yeniden Şekillendirme

Veriyi yeniden şekillendirme

  • Analize uygun hâle getirmek için DataFrame veya Series yapısını dönüştürme
    • Bir DataFrame'i döndürme (transpose)
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 ile Veriyi Yeniden Şekillendirme

Veriyi yeniden şekillendirme

  • Veriyi genişten uzuna ve tersine dönüştürme
  • Analiz birimi:
    • Uzun format -> bir oyuncunun özelliği
    • Geniş format -> her oyuncu
pandas ile Veriyi Yeniden Şekillendirme

Genişten uzuna dönüşüm

  • pandas fonksiyonlarıyla yapılır, örn.:

    • .melt()
    • .wide_to_long()
pandas ile Veriyi Yeniden Şekillendirme

Uzundan genişe format

  • pandas yöntemleriyle dönüştürün, örn.:

    • .pivot()
    • .pivot_table()
pandas ile Veriyi Yeniden Şekillendirme

Hadi pratik yapalım!

pandas ile Veriyi Yeniden Şekillendirme

Preparing Video For Download...