Python Pandas ile Temel İşlemler-4 (Filtreleme)

Pandas yazı serimizin dördüncüsüyle devam ediyoruz. Bu yazımızda veri setimize bazı kriterlere göre nasıl filtre uygularız ona bakacağız. Filtrelemeden önce veri setimize yeni bir sütun ilave edip burada filmleri uzunuğuna göre kategorilendireceğiz. Film listemizi yükleyelim.

Veriyi Yükleme

import pandas as pd
filmListesi = pd.read_csv("http://www.datascience.istanbul/data/imdbratings.data")

Yeni Sütun Oluşturma

Filmlerden 120 dakikadan daha uzun olanlara çok uzun, 80-120 dakika arasında olanlara normal 80 dakikadan daha kısa olanlara da kısa diyelim. Bunun için aşağıdaki kodlar yeterli olacaktır.

filmUzunlukKategori = []
for i in filmListesi.duration:
    if i <= 80:
        filmUzunlukKategori.append('Cok Kisa')
    elif i > 80 and i <=120:
        filmUzunlukKategori.append('Normal')
    else:
        filmUzunlukKategori.append('Cok Uzun')

Python listemizde biriken 979 kategoriyi bir sütun halinde filmListesi tablomuza ekleyelim.

filmListesi['uzunlukKategori'] = filmUzunlukKategori
filmListesi.head()
star_rating title content_rating genre duration actors_list uzunlukKategori
0 9.3 The Shawshank Redemption R Crime 142 [u’Tim Robbins’, u’Morgan Freeman’, u’Bob Gunt… Cok Uzun
1 9.2 The Godfather R Crime 175 [u’Marlon Brando’, u’Al Pacino’, u’James Caan’] Cok Uzun
2 9.1 The Godfather: Part II R Crime 200 [u’Al Pacino’, u’Robert De Niro’, u’Robert Duv… Cok Uzun
3 9.0 The Dark Knight PG-13 Action 152 [u’Christian Bale’, u’Heath Ledger’, u’Aaron E… Cok Uzun
4 8.9 Pulp Fiction R Crime 154 [u’John Travolta’, u’Uma Thurman’, u’Samuel L…. Cok Uzun

Görüldüğü gibi en sonda yeni sütunumuz yer aldı. Dikkat ettiysek duration bilgisi ile kategori bilgisi uyum gösteriyor. Buradaki beş kayıt hep 120 dakikadan fazla olduğu için kategori Cok uzun olmuş. Bir kaç filtreleme yapalım. Cok uzun filmleri filtrele:

Filtreleme (Süzme)

filmListesi[filmListesi.uzunlukKategori == 'Cok Uzun']

Türü Action olanları filtrele:

filmListesi[filmListesi.genre == 'Action']

Normal uzunluktaki aksiyon filmlerini listele:

filmListesi[(filmListesi.genre == 'Action') & (filmListesi.uzunlukKategori == 'Normal')]
star_rating title content_rating genre duration actors_list uzunlukKategori
37 8.6 Raiders of the Lost Ark PG Action 115 [u’Harrison Ford’, u’Karen Allen’, u’Paul Free… Normal
96 8.4 Yojimbo UNRATED Action 110 [u’Toshir\xf4 Mifune’, u’Eijir\xf4 T\xf4no’, u… Normal
123 8.3 The General UNRATED Action 107 [u’Buster Keaton’, u’Marion Mack’, u’Glen Cave… Normal
198 8.1 Kill Bill: Vol. 1 R Action 111 [u’Uma Thurman’, u’David Carradine’, u’Daryl H… Normal
235 8.1 Yip Man R Action 106 [u’Donnie Yen’, u’Simon Yam’, u’Siu-Wong Fan’] Normal
239 8.1 Elite Squad: The Enemy Within UNRATED Action 115 [u’Wagner Moura’, u’Irandhir Santos’, u’Andr\x… Normal
240 8.1 The Bourne Ultimatum PG-13 Action 115 [u’Matt Damon’, u’\xc9dgar Ram\xedrez’, u’Joan… Normal
261 8.1 Elite Squad R Action 115 [u’Wagner Moura’, u’Andr\xe9 Ramiro’, u’Caio J… Normal
276 8.1 A Fistful of Dollars R Action 99 [u’Clint Eastwood’, u’Gian Maria Volont\xe9′, … Normal
281 8.1 The Terminator R Action 107 [u’Arnold Schwarzenegger’, u’Linda Hamilton’, … Normal
327 8.0 The Adventures of Robin Hood PG Action 102 [u’Errol Flynn’, u’Olivia de Havilland’, u’Bas… Normal
349 8.0 District 9 R Action 112 [u’Sharlto Copley’, u’David James’, u’Jason Co… Normal
366 8.0 Serenity PG-13 Action 119 [u’Nathan Fillion’, u’Gina Torres’, u’Chiwetel… Normal
391 8.0 Edge of Tomorrow PG-13 Action 113 [u’Tom Cruise’, u’Emily Blunt’, u’Bill Paxton’] Normal
401 7.9 The Killer R Action 111 [u’Yun-Fat Chow’, u’Danny Lee’, u’Sally Yeh’] Normal
403 7.9 Ying xiong PG-13 Action 99 [u’Jet Li’, u’Tony Chiu Wai Leung’, u’Maggie C… Normal
411 7.9 The Bourne Identity PG-13 Action 119 [u’Franka Potente’, u’Matt Damon’, u’Chris Coo… Normal
437 7.9 Crouching Tiger, Hidden Dragon PG-13 Action 120 [u’Yun-Fat Chow’, u’Michelle Yeoh’, u’Ziyi Zha… Normal

Yazıda çok yer kaplamasın diye ben sonucun hepsini buraya koymadım. Aslında daha uzun. Aynı sonucu aşağıdaki yöntemle de alabiliriz.

filmListesi[filmListesi.genre == 'Action'][filmListesi.uzunlukKategori == 'Normal']

Bir de ya da koşuluyla örnek yapalım. Ratingi 9’dan büyük ya da Adventure türündeki filmleri listeleyelim:

filmListesi[(filmListesi.genre == 'Adventure') | (filmListesi.star_rating >= 9.0)]
star_rating title content_rating genre duration actors_list uzunlukKategori
0 9.3 The Shawshank Redemption R Crime 142 [u’Tim Robbins’, u’Morgan Freeman’, u’Bob Gunt… Cok Uzun
1 9.2 The Godfather R Crime 175 [u’Marlon Brando’, u’Al Pacino’, u’James Caan’] Cok Uzun
2 9.1 The Godfather: Part II R Crime 200 [u’Al Pacino’, u’Robert De Niro’, u’Robert Duv… Cok Uzun
3 9.0 The Dark Knight PG-13 Action 152 [u’Christian Bale’, u’Heath Ledger’, u’Aaron E… Cok Uzun
7 8.9 The Lord of the Rings: The Return of the King PG-13 Adventure 201 [u’Elijah Wood’, u’Viggo Mortensen’, u’Ian McK… Cok Uzun
10 8.8 The Lord of the Rings: The Fellowship of the Ring PG-13 Adventure 178 [u’Elijah Wood’, u’Ian McKellen’, u’Orlando Bl… Cok Uzun
14 8.8 The Lord of the Rings: The Two Towers PG-13 Adventure 179 [u’Elijah Wood’, u’Ian McKellen’, u’Viggo Mort… Cok Uzun
15 8.7 Interstellar PG-13 Adventure 169 [u’Matthew McConaughey’, u’Anne Hathaway’, u’J… Cok Uzun
54 8.5 Back to the Future PG Adventure 116 [u’Michael J. Fox’, u’Christopher Lloyd’, u’Le… Normal
68 8.4 Das Boot R Adventure 149 [u’J\xfcrgen Prochnow’, u’Herbert Gr\xf6nemeye… Cok Uzun
71 8.4 North by Northwest APPROVED Adventure 136 [u’Cary Grant’, u’Eva Marie Saint’, u’James Ma… Cok Uzun
85 8.4 Lawrence of Arabia PG Adventure 216 [u”Peter O’Toole”, u’Alec Guinness’, u’Anthony… Cok Uzun

Gruplama, Sıralama, Ortalama Alma, Aggregation

Şimdi film türlerine göre rating ortalamaları nedir bir bakalım. Yani hangi film türü en yüksek puanı alıyor? En yüksek ortalamadan aşağı (descending) sıralayalım.

filmListesi.groupby('genre').star_rating.mean().sort_values(ascending=False)
genre
Western      8.255556
Film-Noir    8.033333
History      8.000000
Mystery      7.975000
Adventure    7.933333
Sci-Fi       7.920000
Crime        7.916935
Animation    7.914516
Drama        7.902518
Action       7.884559
Biography    7.862338
Family       7.850000
Comedy       7.822436
Horror       7.806897
Fantasy      7.700000
Thriller     7.680000
Name: star_rating, dtype: float64

Yukarıda iki yeni metod kullandık. Birincisi groupby() ikincisi sort_values(). İlki film türlerine göre ortalamaları filtreledi, ikincisi ortalamalı büyükten küçüğe sıraladı. Büyükten küçüğe sıralama, ascending parametresinin False değeri almasına bağlıdır.

Yukarıdaki sonuçları bir de çizdirelim.

%matplotlib inline
filmListesi.groupby('genre').star_rating.mean().sort_values(ascending=False).plot(kind='bar')


Biraz daha karmaşık bir iş yapalım. Yine genre gruplaması olsun. Daha sonra her bir genre ortalama, min, max ve count nedir bakalım. Sonuçları puan ortalaması yüksekten düşüğe sıralayalım.

filmListesi.groupby('genre').star_rating.agg(['mean','max','min','count']).sort_values('mean',ascending=False)
mean max min count
genre
Western 8.255556 8.9 7.6 9
Film-Noir 8.033333 8.3 7.7 3
History 8.000000 8.0 8.0 1
Mystery 7.975000 8.6 7.4 16
Adventure 7.933333 8.9 7.4 75
Sci-Fi 7.920000 8.2 7.7 5
Crime 7.916935 9.3 7.4 124
Animation 7.914516 8.6 7.4 62
Drama 7.902518 8.9 7.4 278
Action 7.884559 9.0 7.4 136
Biography 7.862338 8.9 7.4 77
Family 7.850000 7.9 7.8 2
Comedy 7.822436 8.6 7.4 156
Horror 7.806897 8.6 7.4 29
Fantasy 7.700000 7.7 7.7 1
Thriller 7.680000 8.0 7.5 5

En yüksek ortalamaya sahip Western sadece 9 taneymiş. Dolayısıyla ben bu yüksek ortalamayı düşük sayılı gözlem olduğundan sağlıklı bulmuyorum 🙂

Bu yazımı da burada kesiyorum. Pandas yazılarına devam. Veriyle kalın…

Python Pandas ile Temel İşlemler-4 (Filtreleme)” için bir yorum

  • 8 Kasım 2018 tarihinde, saat 16:56
    Permalink

    Emeğiniz ve çalışmalarınız için teşekkür ederim.Çok iyi anlatılmış ve ilerleme katetmek için çok başarılı bir site ve yol.Kafama şu takıldı star_rating e göre analiz yapabileceğim bir sutun ekleyerek içerisine random izleyici sayılarıekledim.Bunu Oylamaya göre suç , polisiye izleyenlere göre suç oranlarının artması veya azalmasını hesaplayacağım nasıl yapabilirim

    teşekkür eder saygılarımı iletirim

    Yanıtla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir