Odak modu
Veri Temizleme: Tekrarlanan Değerler ve Metin İşleme
Notebook Link: https://github.com/ine-rmotr-curriculum/data-cleaning-rmotr-freecodecamp/blob/master/3%20-%20Cleaning%20Not%20Null%20Values.ipynb
Aşağıda elçilerin adlarının ve hangi ülkeyi temsil ettiklerinin bilgisinin olduğu bir seri var. Bu seride tekrarlanan değerler ile ilgili işlemler yapacağız:
elciler = pd.Series([
'France',
'United Kingdom',
'United Kingdom',
'Italy',
'Germany',
'Germany',
'Germany',
], index=[
'Gérard Araud',
'Kim Darroch',
'Peter Westmacott',
'Armando Varricchio',
'Peter Wittig',
'Peter Ammon',
'Klaus Scharioth '
])
# seriyi yazdıralım
elciler
Gérard Araud France
Kim Darroch United Kingdom
Peter Westmacott United Kingdom
Armando Varricchio Italy
Peter Wittig Germany
Peter Ammon Germany
Klaus Scharioth Germany
dtype: object
"duplicated" metodu bize tekrarlanan değerleri verir. Varsayılan olarak ilk karşılaşılan değerlerden sonra tekrarlanan değerleri bize verir. "keep" parametresine "last" değerini vererek en son değerden önce tekrarlanan değerleri göstermesini de isteyebiliriz:
elciler.duplicated()
Gérard Araud False Kim Darroch False Peter Westmacott True Armando Varricchio False Peter Wittig False Peter Ammon True Klaus Scharioth True dtype: bool
elciler.duplicated(keep="last")
Gérard Araud False Kim Darroch True Peter Westmacott False Armando Varricchio False Peter Wittig True Peter Ammon True Klaus Scharioth False dtype: bool
"keep" parametresine False değerini verirsek bize tekrarlanan tüm değerleri verir (Örneğin; "first" değeri gibi sadece ilk değer dışındaki değerleri vermez):
elciler.duplicated(keep=False)
Gérard Araud False Kim Darroch True Peter Westmacott True Armando Varricchio False Peter Wittig True Peter Ammon True Klaus Scharioth True dtype: bool
"drop_duplicates" metodu ile bu tekrarlanan değerleri silebiliriz. Aynı şekilde "keep" parametresine değerler atayabiliriz:
# keep=False diyerek bu serideki tekrarlanan tüm verileri silelim elciler.drop_duplicates(keep=False)
Gérard Araud France Armando Varricchio Italy dtype: object
"keep" parametresine "first" değerini verirsek tekrarlanan verilerin ilkleri dışındakileri siler:
elciler.drop_duplicates(keep="first")
Gérard Araud France Kim Darroch United Kingdom Armando Varricchio Italy Peter Wittig Germany dtype: object
Metin verilerini yani "string" verilerini işlemek ve temizlemek zor olabilir. Çünkü metin verilerinde birçok yanlış ve tutarsızlık olabilir. Yanlış yazım, büyük harf küçük harf farkları, encoding tipleri, aynı değerin farklı şekillerde yazılabilmesi bu yanlış ve tutarsızlıklara örnektir. Örneğin; tarih yazarken "24/12/2018" de yazabiliriz "24-12-2018" de. Bu iki metnin belirttiği tarihler aynı ancak içerdiği bazı karakterler farklı. Bazı metin işleme örneklerini inceleyelim:
Aşağıda anket sonuçlarının olduğu bir veri var. Bu veriyi Pandas Dataframe olarak yükleyelim:
df = pd.DataFrame({
'Veri': [
'1987_E_ABD _1',
'1990?_E_ING_1',
'1992_K_ABD_2',
'1970?_E_ IT_1',
'1985_K_I T_2'
]})
Bu verideki sütunların sırasıyla yıl, cinsiyet, ülke ve çocuk sayısı verilerini içerdiğini biliyoruz. Örneğin; "E" erkek, "K" kız anlamına geliyor. Bu bilgileri ayırıp farklı sütunlar haline getireceğiz. Pandas "str" arayüzü ile string metotlarını kullanmamızı sağlar. "split" metodunu kullanalım:
df["Veri"].str.split("_")
0 [1987, E, ABD , 1] 1 [1990?, E, ING, 1] 2 [1992, K, ABD, 2] 3 [1970?, E, IT, 1] 4 [1985, K, I T, 2] Name: Veri, dtype: object
"expand" parametresini True yaparak parçalanan verileri sütunlara ayırabiliriz:
df["Veri"].str.split("_", expand=True)
0 1 2 3 0 1987 E ABD 1 1 1990? E ING 1 2 1992 K ABD 2 3 1970? E IT 1 4 1985 K I T 2
Bu işlemleri yapıp Dataframe'i değiştirelim ve sütun isimlerini de güncelleyelim:
# sütunlara ayıralım
df = df["Veri"].str.split("_", expand=True)
# sütun isimlerini değiştirelim
df.columns = ["Yıl", "Cinsiyet", "Ülke", "Çocuk Sayısı"]
# dataframe'i yazdıralım
df
Yıl Cinsiyet Ülke Çocuk Sayısı
0 1987 E ABD 1
1 1990? E ING 1
2 1992 K ABD 2
3 1970? E IT 1
4 1985 K I T 2
Verilerde herhangi bir metin ya da karakter bulunuyor mu diye kontrol etmek için "contains" metodunu kullanabiliriz. Örneğin; soru işareti (?) içeren verilere bakalım:
df["Yıl"].str.contains("\?")
0 False 1 True 2 False 3 True 4 False Name: Yıl, dtype: bool
Burada soru işaretinden önce "" karakterini koyduk çünkü bu metot regex metni alıyor ve "?" karakterinin özel bir anlamı var. Bu özel anlamı baskılamak için "" karakteri koyduk. Burada iki tane yıl verisi "?" içeriyor, bu işaretleri silmemiz lazım. "replace" metodu ile bu işaretleri boş string ("") ile değiştirerek silebiliriz:
# "?" karakterlerini silelim df["Yıl"] = df["Yıl"].str.replace("\?", "") # Yıl verilerini yazdıralım df["Yıl"]
0 1987 1 1990 2 1992 3 1970 4 1985 Name: Yıl, dtype: object
Ülke isimlerindeki boşlukları (" ") da kaldıralım:
# " " karakterlerini silelim df["Ülke"] = df["Ülke"].str.replace(" ", "") # Ülke verilerini yazdıralım df["Ülke"]
0 ABD 1 ING 2 ABD 3 IT 4 IT Name: Ülke, dtype: object
Son olarak temizlenmiş olan tüm verimizi yazdıralım:
df
Yıl Cinsiyet Ülke Çocuk Sayısı 0 1987 E ABD 1 1 1990 E ING 1 2 1992 K ABD 2 3 1970 E IT 1 4 1985 K IT 2
Sektörde en çok aranan yazılım becerilerini kazan
Yapay zeka desteği, birebir mentörlük saatleri, canlı dersler ve senin için özel hazırlanmış içeriklerle eksiklerini tamamla, düzenli geri bildirimler al ve öğrenme sürecini en verimli hale getir.
Yunus Emre Kabakcı
Patika+ mezunuPatika+ Fullstack Web Development Bootcamp mezunumuz Yunus Emre,
3 ay içinde Katar’dan aldığı teklif ile, global bir şirket olan Pavo Group’da işe başladı!
“İçerik zenginliği, mentor desteği, ileriye dönük bir network sağlaması ve dünyada en çok tercih edilen frameworkler üzerinden bir eğitim veriyor olması Patika+’ı tercih etmemin temel sebepleri oldu!“
Yorum yapabilmek için derse kayıt olmalısın!