Python Pandas ile Temel İşlemler

Bölüm 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("https://raw.githubusercontent.com/erkansirin78/datasets/master/imdb_1000.csv")

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_ratingtitlecontent_ratinggenredurationactors_listuzunlukKategori
09.3The Shawshank RedemptionRCrime142[u’Tim Robbins’, u’Morgan Freeman’, u’Bob Gunt…Cok Uzun
19.2The GodfatherRCrime175[u’Marlon Brando’, u’Al Pacino’, u’James Caan’]Cok Uzun
29.1The Godfather: Part IIRCrime200[u’Al Pacino’, u’Robert De Niro’, u’Robert Duv…Cok Uzun
39.0The Dark KnightPG-13Action152[u’Christian Bale’, u’Heath Ledger’, u’Aaron E…Cok Uzun
48.9Pulp FictionRCrime154[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_ratingtitlecontent_ratinggenredurationactors_listuzunlukKategori
378.6Raiders of the Lost ArkPGAction115[u’Harrison Ford’, u’Karen Allen’, u’Paul Free…Normal
968.4YojimboUNRATEDAction110[u’Toshir\xf4 Mifune’, u’Eijir\xf4 T\xf4no’, u…Normal
1238.3The GeneralUNRATEDAction107[u’Buster Keaton’, u’Marion Mack’, u’Glen Cave…Normal
1988.1Kill Bill: Vol. 1RAction111[u’Uma Thurman’, u’David Carradine’, u’Daryl H…Normal
2358.1Yip ManRAction106[u’Donnie Yen’, u’Simon Yam’, u’Siu-Wong Fan’]Normal
2398.1Elite Squad: The Enemy WithinUNRATEDAction115[u’Wagner Moura’, u’Irandhir Santos’, u’Andr\x…Normal
2408.1The Bourne UltimatumPG-13Action115[u’Matt Damon’, u’\xc9dgar Ram\xedrez’, u’Joan…Normal
2618.1Elite SquadRAction115[u’Wagner Moura’, u’Andr\xe9 Ramiro’, u’Caio J…Normal
2768.1A Fistful of DollarsRAction99[u’Clint Eastwood’, u’Gian Maria Volont\xe9′, …Normal
2818.1The TerminatorRAction107[u’Arnold Schwarzenegger’, u’Linda Hamilton’, …Normal
3278.0The Adventures of Robin HoodPGAction102[u’Errol Flynn’, u’Olivia de Havilland’, u’Bas…Normal
3498.0District 9RAction112[u’Sharlto Copley’, u’David James’, u’Jason Co…Normal
3668.0SerenityPG-13Action119[u’Nathan Fillion’, u’Gina Torres’, u’Chiwetel…Normal
3918.0Edge of TomorrowPG-13Action113[u’Tom Cruise’, u’Emily Blunt’, u’Bill Paxton’]Normal
4017.9The KillerRAction111[u’Yun-Fat Chow’, u’Danny Lee’, u’Sally Yeh’]Normal
4037.9Ying xiongPG-13Action99[u’Jet Li’, u’Tony Chiu Wai Leung’, u’Maggie C…Normal
4117.9The Bourne IdentityPG-13Action119[u’Franka Potente’, u’Matt Damon’, u’Chris Coo…Normal
4377.9Crouching Tiger, Hidden DragonPG-13Action120[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_ratingtitlecontent_ratinggenredurationactors_listuzunlukKategori
09.3The Shawshank RedemptionRCrime142[u’Tim Robbins’, u’Morgan Freeman’, u’Bob Gunt…Cok Uzun
19.2The GodfatherRCrime175[u’Marlon Brando’, u’Al Pacino’, u’James Caan’]Cok Uzun
29.1The Godfather: Part IIRCrime200[u’Al Pacino’, u’Robert De Niro’, u’Robert Duv…Cok Uzun
39.0The Dark KnightPG-13Action152[u’Christian Bale’, u’Heath Ledger’, u’Aaron E…Cok Uzun
78.9The Lord of the Rings: The Return of the KingPG-13Adventure201[u’Elijah Wood’, u’Viggo Mortensen’, u’Ian McK…Cok Uzun
108.8The Lord of the Rings: The Fellowship of the RingPG-13Adventure178[u’Elijah Wood’, u’Ian McKellen’, u’Orlando Bl…Cok Uzun
148.8The Lord of the Rings: The Two TowersPG-13Adventure179[u’Elijah Wood’, u’Ian McKellen’, u’Viggo Mort…Cok Uzun
158.7InterstellarPG-13Adventure169[u’Matthew McConaughey’, u’Anne Hathaway’, u’J…Cok Uzun
548.5Back to the FuturePGAdventure116[u’Michael J. Fox’, u’Christopher Lloyd’, u’Le…Normal
688.4Das BootRAdventure149[u’J\xfcrgen Prochnow’, u’Herbert Gr\xf6nemeye…Cok Uzun
718.4North by NorthwestAPPROVEDAdventure136[u’Cary Grant’, u’Eva Marie Saint’, u’James Ma…Cok Uzun
858.4Lawrence of ArabiaPGAdventure216[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)
 meanmaxmincount
genre    
Western8.2555568.97.69
Film-Noir8.0333338.37.73
History8.0000008.08.01
Mystery7.9750008.67.416
Adventure7.9333338.97.475
Sci-Fi7.9200008.27.75
Crime7.9169359.37.4124
Animation7.9145168.67.462
Drama7.9025188.97.4278
Action7.8845599.07.4136
Biography7.8623388.97.477
Family7.8500007.97.82
Comedy7.8224368.67.4156
Horror7.8068978.67.429
Fantasy7.7000007.77.71
Thriller7.6800008.07.55

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…

Yazar Hakkında
Toplam 174 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (2 yorum)
Erkam
Erkam Yanıtla
- 12:03

Mehaba. yukarıda türkçe sütun isimlerini değiştirmeden önce sütun sayısını 2’ye düşürdüğünüz için uyarı veriyor. Dolayısıyla sütun sayısını düşürmeden isim değişikliği yaptım. Bilginize. paylaşımlarınız için tşk ederim.

    Erkan ŞİRİN
    Erkan ŞİRİN Yanıtla
    - 21:53

    Merhaba. Haklısınız. Düzeltme yaptım. İki sütun için dataframe’i “ufo_two_cols” ismiyle tuttuk. Çok teşekkürler.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara