Bu başlık altında daha önceki başlıkta incelediğimiz Veri Bilimi Metodolojileri’nin ilk 4 aşamasından sonra gelen 2 aşamaya daha göz atacağız. Bunlar;
- Veriyi Anlama
- Veriyi Hazırlama
1- Veriyi Anlama
Veri anlama, veri setinin oluşturulmasıyla ilgili tüm faaliyetleri kapsar. Temel olarak, veri bilimi metodolojileri içinde yer alan veri anlama bölümü, “Topladığınız veriler çözülmesi gereken sorunu temsil ediyor mu?” sorusuna cevap verir. Bu aşamayı daha önce incelediğimiz vaka çalışmasına uygulayalım.
Konjestif Kalp Yetmezliği (Congestive Heart Failure) başvurularıyla ilgili verileri anlamak için modelde değişken olacak veri sütunlarında tanımlayıcı istatistiklerin hesaplanması gerekir. Bunlar ilk olarak; Hurst, Tek Değişken Analizi(Univariate Analysis) gibi istatistikler ile ortalama, medyan, minimum, maksimum ve standart sapma gibi her bir değişkene ilişkin istatistikleri içerir.
İkinci olarak, belirli değişkenlerin ne kadar yakından ilişkili olduğunu ve varsa hangilerinin çok yüksek düzeyde ilişkili olduğunu görmek için ikili korelasyonlar(Pairwise Correlations) kullanılır. Ki bu sayede, bu değişkenlerin hangilerinin esasen gereksiz olacağını tespit etmemizi sağlayarak, modelleme için yalnızca hangisinin alakalı olduğunu ve kullanılacağını tespit etmemizi sağlar.
Üçüncü olarak, dağılımlarını anlamak için değişkenlerin histogramları incelenir Histogramlar, değerlerin veya bir değişkenin dağılımını ve değişkeni modelde daha kullanışlı hale getirmek için ne tür bir veri hazırlığının gerekli olabileceğini anlamanın iyi bir yoludur. Örneğin, çok farklı değerleri olan bir kategorik değişkenin bir model içinde bilgi verebiliyor olması için histogram, bu değerlerin nasıl birleştirileceğine karar verilmesine yardımcı olur.
Bu istatistikler veri kalitesini değerlendirmek için kullanılır.
Elde edilen bu bilgiler ile gerekirse belirli değerler yeniden kodlanabilir veya hatta belki kaldırılabilir, tıpkı belirli bir değişken eksik veriye sahip olduğunda yaptığımız gibi.
Bu durumda şu soru akıllara geliyor; “eksik veri” ne ifade ediyor? Bazen eksik bir değer “hayır” veya “0” (sıfır) anlamına gelebilir veya diğer zamanlarda sadece “bilmiyoruz” anlamına da gelebilir. Veya, bir değişken geçersiz veya yanıltıcı değerler içeriyorsa, örneğin “yaş” olarak adlandırılan ve anlamlı olması için 0 ila 100 aralığında olması beklenirken 999 içeren sayısal bir değişken için burada karşımıza çıkan “999” değeri “eksik veri” anlamına gelir. Ancak biz düzeltmedikçe geçerli bir değer olarak kabul edilir.
Başlangıçta, Konjestif Kalp Yetmezliği(CHF) olarak kabul edilen ilk teşhis sonrası, verileri anlama aşamasında, ilk teşhisin klinik deneyime dayalı olarak beklenen tüm konjestif kalp yetmezliği başvurularını kapsamadığını ortaya çıkardı. Bu, veri toplama aşamasına geri dönmek, ikincil ve üçüncül teşhisleri eklemek ve tanıyı konjestif kalp yetmezliği olarak kabül etmek için daha kapsamlı bir tanım oluşturmak anlamına geliyor. Bazen, veri toplama aşamasına geri dönmemiz ve anlayışımızı geliştirmek için daha fazla bilgi toplamamız gerekebilir. Bu, metodolojideki etkileşimli süreçlerin sadece bir örneğidir.
Kişi; problem ve verilerle ne kadar çok çalışırsa o kadar çok öğrenir, dolayısıyla model içinde yapılabilecek daha fazla iyileştirme keşfeder ve sonuçta probleme daha iyi bir çözüm üretir. Genel olarak, “veriyi anlama” veri bilimi sürecinde önemli bir adımdır, çünkü topladığımız verilerin güvenilir ve analizimiz için uygun olduğundan emin olmamıza yardımcı olur.
2- Veri Hazırlama
Veri hazırlama bir anlamda kusurlu olan ürünlerin elenmesi gibi düşünülebilir. Veri toplama ve veri anlama ile birlikte veri hazırlama, bir veri bilimi projesinin en çok zaman alan aşamalarıdır.
Genel proje süresinin tipik olarak %70-90’ını alır. Veritabanındaki bazı veri toplama ve hazırlama süreçlerinin otomatikleştirilmesi bu süreyi %50’ye kadar düşürebilir. Bu zaman tasarrufu, veri bilimcilerinin model oluşturmaya odaklanması için daha fazla zaman bulması anlamına gelir.
Daha önce örneğini verdiğimiz pişirme metaforumuzla devam edecek olursak, soğanı daha ince dilimlemenin, soğanı bütün olarak tencereye attığımızda olacağından daha kolay bir şekilde lezzetinin sosa yayılmasını sağlayacağını biliyoruz. Benzer şekilde, veri hazırlama aşamasında verilerin dönüştürülmesi, verilerin çalışılması daha kolay olabilecek bir duruma getirilmesi sürecidir. Spesifik olarak, metodolojinin veri hazırlama aşamasında, verilerle etkili bir şekilde çalışabilmek ve her şeyin doğru biçimlendirildiğinden emin olmak için eksik veya geçersiz değerleri ele alarak, yinelenen verileri kaldıracak şekilde veri hazırlanmalıdır.
Özellik mühendisliği(Feature Engineering) de veri hazırlamanın bir parçasıdır. Makine öğrenimi algoritmalarının çalışmasını sağlayan özellikler oluşturmak için verilerin ilgili olduğu alan bilgisini kullanma sürecidir. Özellik(Feature) olarak ifade edilen kavram, sorunu çözerken yardımcı olabilecek bir karakteristiktir. Verilerdeki özellikler, tahmine dayalı modeller için önemlidir ve elde etmek istediğiniz sonuçları etkileyecektir. Özellik mühendisliği(Feature Engineering), verileri analiz etmek için makine öğrenimi araçları kullanılacağı zaman kritik öneme sahiptir.
Metinle çalışırken, verileri kodlayarak manipüle edebilmek için metin analizi adımları gereklidir. Veri bilimcisi, sorunu ele almak için veri kümelerinde ne aradıklarını bilmelidir. Metin analizi, uygun gruplamaların ayarlandığından ve programlamanın içinde saklı olanı gözden kaçırmadığından emin olmak için çok önemlidir. Veri hazırlama aşaması, sorunun ele alınmasında sonraki adımlar için gerekli ortamı hazırlar. Bu aşamanın yapılması biraz zaman alabilir, ancak doğru yapılırsa sonuçlar projeyi destekleyecektir. Eğer bu adım atlanırsa, çıktı doğru olmayacaktır ve bu durum sizi işin başlangıcına geri döndürebilir. Bu alanda zaman ayırmanız ve veri hazırlamayı hızlandırmak amacıyla ortak adımları otomatikleştirmek için mevcut araçları kullanmanız çok önemlidir. Sonuçta, güzel bir yemeği mahvetmek için tek bir kötü malzeme yeterlidir.
Şimdi, “Veri Hazırlama” aşamasıyla ilgili bir vaka çalışmasına bakalım. Daha önce örnek olarak verdiğimiz Konjestif Kalp Yetmezliği hastalığı için veri hazırlama aşamasında önemli olan ilk adım, Konjestif Kalp Yetmezliğini tanımlamaktır. Bu ilk başta kulağa kolay geliyor ama aaslında onu tam olarak tanımlamak kolay değildir.
İlk olarak, belirli türlerde sıvı birikimi Konjestif Kalp Yetmezliği’ne işaret ettiğinden, teşhisle ilgili grup kodlarının tanımlanması gerekiyor. Ayrıca Konjestif Kalp Yetmezliği’nin, kalp yetmezliği türlerinden sadece biri olduğunu bilmemiz gerekiyor. Konjestif kalp yetmezliğini teşhis etmek istiyorsak, doğru kodları almak için klinik rehberliğe ihtiyaç vardır.
Bir sonraki adım, aynı durum için yeniden kabul kriterlerinin tanımlanmasını içeriyor. Belirli bir Konjestif Kalp Yetmezliği başvurusunun, ilk kabul veya yeniden yatış olarak adlandırılan bir olay olup olmadığını belirlemek amacıyla değerlendirilmesi gereken olayların zamanlaması belirlenmelidir. Klinik uzmanlığa dayalı olarak, ilk yatıştan ve ilk kez taburcu olduktan sonra Konjestif Kalp Yetmezliği hastaları için ilgili yeniden kabul tarihi olarak 30 günlük bir süre belirlendi. Ardından, yapılan işlemler biçimindeki kayıtlar toplanır. Bu veriler doğal olarak her hasta için birden çok kayıt içerir. Bunlar; işlem kayıtları, doktor, laboratuvar, hastane ve klinik hizmetler için tesis taleplerini içeriyor. Ayrıca, tüm teşhisleri, prosedürleri, reçeteleri ve yatan ve ayakta tedavi gören hastalarla ilgili diğer bilgileri açıklayan kayıtlar da dahil edilmelidir. Belirli bir hasta, klinik geçmişine bağlı olarak bu kayıtlardan yüzlerce hatta binlercesine sahip olabilir.
Ardından, modelleme için kullanılacak karar ağacı sınıflandırma yöntemi için gerekli olduğu gibi, tüm işlem kayıtları hasta düzeyinde toplanarak her hasta için tek bir kayıt elde edilir. Toplama sürecinin bir parçası olarak, işlemlerdeki bilgileri temsil eden birçok yeni sütun oluşturulur. Örneğin; teşhisler, prosedürler, reçeteler vb. ile doktorlara, kliniklere ve hastanelere yapılan sıklık ve en son ziyaretler gibi. Diyabet, hipertansiyon ve diğer birçok hastalık ve Konjestif Kalp Yetmezliği için yeniden kabul riskini etkileyebilecek kronik durumlar gibi Konjestif Kalp Yetmezliği ile birlikte görülen diğer hastalıklar da göz önünde bulundurulur.
Veri hazırlama konusundaki tartışmalar sırasında, henüz hesaba katılmamış eşlik eden diğer hastalıklar gibi herhangi bir önemli veri öğesinin gözden kaçırılıp atılmadığını görmek için Konjestif Kalp Yetmezliği üzerine bir literatür taraması da yapılmalıdır. Bu inceleme, koşullar ve prosedürler için birkaç gösterge daha eklemek amacıyla veri toplama aşamasına geri dönmeyi gerektirebilir.
İşlem verilerinin hasta düzeyinde toplanması, bu verilerin yaş, cinsiyet, sigorta türü vb. gibi demografik bilgileri de dahil olmak üzere diğer hasta verileriyle birleştirilmesi anlamına geliyor. Sonuç, klinik geçmişindeki hastayla ilgili nitelikleri temsil eden birçok sütunla birlikte, hasta başına tek bir kayıt içeren bir tablonun oluşturulmasıdır. Bu sütunlar, tahmine dayalı modellemede değişkenler olarak kullanılacaktır. Yani modelin oluşturulmasında nihai olarak kullanılan değişkenlerin bir listesidir. Bağımlı değişken veya hedef, Konjestif Kalp Yetmezliği nedeniyle hastaneden taburcu olduktan sonraki 30 gün içinde, sonucun evet veya hayır olduğu Konjestif Kalp Yetmezliği başvurusunun hastaneye yeniden kabulüdür. Veri hazırlama aşaması, bu vaka çalışması için tüm kriterleri karşılayan 2.343 hastadan oluşan bir kohortla sonuçlandı. Kohort daha sonra sırasıyla modeli oluşturmak ve doğrulamak için eğitim ve test setlerine bölündü.
Kohort: 2.343 hasta
Eğitim Seti / Test Seti: %70 / %30 (Rastgele seçildi)
Eğitim Seti: 1.640 hasta
Test Seti: 703 hasta
Uygulama:
Önceki konuda yer alan, belirli bir tarifin ya da yemeğin ait olduğu mutfağı belirleme sürecini otomatikleştirmek için geliştirdiğimiz uygulamayı kullanacağız. İş anlayışı aşamasında karşılaştığımız soruyu, yani *belirli bir tarifin mutfağını belirleme sürecini otomatikleştirebilir miyiz?” sorusunu yanıtlamak için ihtiyaç duyduğumuz veriler Yong-Yeol Ahn adlı bir araştırmacı tarafından, üç farklı web sitesinden on binlerce yemek tarifini (mutfaklar ve malzemeler) alarak oluşturulmuştu. Veriyi aldığımız web siteleri şunlardı;
- allrecipes.com
- epicurious.com
- menupan.com
İlgili çalışmanın detaylarını merak ediyorsanız Profesör Yong-Yeol Ahn’ın web sitesindeki dokümana burayı tıklayarak ulaşabilirsiniz.
İlk olarak Veriyi Anlama aşamasında yapacaklarımıza bir göz atalım.
Kodlama aşamasına geçelim ve gerekli kütüphaneleri kodumuza dahil ederek başlayalım;
import pandas as pd # verileri panda kütüphanesi ile okuyacağız pd.set_option('display.max_columns', None) import numpy as np # numpy kütüphanesini de dahil edelim import re # metinlerle çalışmak için regular expression kütüphanesini de ekleyelim
CSV formatındaki verileri Panda ile okuyalım;
tarifler = pd.read_csv("https://www.obenseven.com.tr/recipes.csv") print("Veri başarılı bir şekilde okundu!")
Başarıyla okunduğu mesajını aldık ama yine bir kontrol edelim. Verinin ilk bir kaç satırını görelim;
tarifler.head()
Kodun çıktısı;
Elimizde ne kadar veri olduğunu görelim;
tarifler.shape
Kodun çıktısı;
(57691, 384)
Veri setimiz 57.691 tariften oluşmaktadır. Her satır bir tarifi temsil eder ve her tarif için, ilgili mutfağın yanı sıra tarifte badem ile başlayıp kabak ile biten 384 malzemenin bulunup bulunmadığı belgelenir.
Basitçe bir sushi tarifinde şu malzemelerin olduğunu biliyoruz;
– Pirinç
– Soya sosu
– Wasabi
– Balık ve sebzeler
Bunların veri setimiz içinde olup olmadığını kontrol edelim;
ingredients = list(tarifler.columns.values) print([match.group(0) for ingredient in ingredients for match in [(re.compile(".*(rice).*")).search(ingredient)] if match]) print([match.group(0) for ingredient in ingredients for match in [(re.compile(".*(wasabi).*")).search(ingredient)] if match]) print([match.group(0) for ingredient in ingredients for match in [(re.compile(".*(soy).*")).search(ingredient)] if match])
Kodun çıktısı;
['brown_rice', 'licorice', 'rice']
['wasabi']
['soy_sauce', 'soybean', 'soybean_oil']
Gördüğünüz gibi malzemelerimiz mevcut;
– Pirinç rice olarak yer alıyor
– Wasabi ise wasabi olarak yer alıyor
– Soya sosu ise soy_sauce olarak yer alıyor
Öyleyse bir tarif eğer bu 3 malzemeyi de içeriyorsa o tarife büyük ihtimalle “Japon mutfağına ait bir tarifdir.” diyebiliriz.
Şimdi ise Veri Hazırlama aşamasında yapacağımız işlemlere göz atalım.
Bu bölümde veriyi Veri Bilimi Metodolojileri’nin bir sonraki aşaması olan Modelleme aşamasına hazırlayacağız. Bu aşama veriyi daha detaylı olarak keşfetmeyi ve makine öğrenmesi algoritmaları için doğru formatta olduğundan emin olmayı içerir. Daha önceki konuda Analitik Yaklaşım aşamasında makine öğrenmesi algoritmamızı Karar Ağacı(Decision Tree) olarak belirlemiştik.
İlk olarak verinin temizlenmeye ihtiyacı olup olmadığına bakalım;
tarifler["country"].value_counts()
Kodun çıktısı;
country
American 40150
Mexico 1754
Italian 1715
Italy 1461
Asian 1176
...
Indonesia 12
Belgium 11
East-African 11
Israel 9
Bangladesh 4
Name: count, Length: 69, dtype: int64
Yukarıda sadece bir bölümünü verdiğimiz tablonun tamamını incelediğinizde şu çıkarımları yapabilirsiniz;
– Mutfak sütunu Ülke olarak etiketlenmiş, bu doğru değil.
– Mutfak adları tutarlı değil çünkü hepsi büyük harfle başlamıyor.
– Vietnam ve Vietnamca gibi bazı mutfaklar ülke adının varyasyonu olarak çoğaltılmıştır.
– Bazı mutfakların çok az tarifi vardır.
Şimdi bu hataları düzeltelim.
Öncelikle ülke(country) olarak verilmiş olan sütun adını cuisine(ülke mutfağı) olarak değiştirelim;
column_names = tarifler.columns.values column_names[0] = "cuisine" tarifler.columns = column_names tarifler
Kodun çıktısı;
Tüm mutfak isimlerini küçük harf yapalım;
tarifler["cuisine"] = tarifler["cuisine"].str.lower()
Mutfak isimlerini daha anlamlı hale getirelim;
tarifler.loc[tarifler["cuisine"] == "austria", "cuisine"] = "austrian" tarifler.loc[tarifler["cuisine"] == "belgium", "cuisine"] = "belgian" tarifler.loc[tarifler["cuisine"] == "china", "cuisine"] = "chinese" tarifler.loc[tarifler["cuisine"] == "canada", "cuisine"] = "canadian" tarifler.loc[tarifler["cuisine"] == "netherlands", "cuisine"] = "dutch" tarifler.loc[tarifler["cuisine"] == "france", "cuisine"] = "french" tarifler.loc[tarifler["cuisine"] == "germany", "cuisine"] = "german" tarifler.loc[tarifler["cuisine"] == "india", "cuisine"] = "indian" tarifler.loc[tarifler["cuisine"] == "indonesia", "cuisine"] = "indonesian" tarifler.loc[tarifler["cuisine"] == "iran", "cuisine"] = "iranian" tarifler.loc[tarifler["cuisine"] == "italy", "cuisine"] = "italian" tarifler.loc[tarifler["cuisine"] == "japan", "cuisine"] = "japanese" tarifler.loc[tarifler["cuisine"] == "israel", "cuisine"] = "israeli" tarifler.loc[tarifler["cuisine"] == "korea", "cuisine"] = "korean" tarifler.loc[tarifler["cuisine"] == "lebanon", "cuisine"] = "lebanese" tarifler.loc[tarifler["cuisine"] == "malaysia", "cuisine"] = "malaysian" tarifler.loc[tarifler["cuisine"] == "mexico", "cuisine"] = "mexican" tarifler.loc[tarifler["cuisine"] == "pakistan", "cuisine"] = "pakistani" tarifler.loc[tarifler["cuisine"] == "philippines", "cuisine"] = "philippine" tarifler.loc[tarifler["cuisine"] == "scandinavia", "cuisine"] = "scandinavian" tarifler.loc[tarifler["cuisine"] == "spain", "cuisine"] = "spanish_portuguese" tarifler.loc[tarifler["cuisine"] == "portugal", "cuisine"] = "spanish_portuguese" tarifler.loc[tarifler["cuisine"] == "switzerland", "cuisine"] = "swiss" tarifler.loc[tarifler["cuisine"] == "thailand", "cuisine"] = "thai" tarifler.loc[tarifler["cuisine"] == "turkey", "cuisine"] = "turkish" tarifler.loc[tarifler["cuisine"] == "vietnam", "cuisine"] = "vietnamese" tarifler.loc[tarifler["cuisine"] == "uk-and-ireland", "cuisine"] = "uk-and-irish" tarifler.loc[tarifler["cuisine"] == "irish", "cuisine"] = "uk-and-irish" tarifler
Kodun çıktısı;
50 tariften az tarife sahip olan mutfakları çıkartalım;
# Verilerini tutacağımız mutfakları listeleyelim tarif_sayisi = tarifler["cuisine"].value_counts() tarif_indisleri = tarif_sayisi > 50 secilen_mutfaklar = list(np.array(tarif_sayisi.index.values)[np.array(tarif_indisleri)]) onceki_veri = tarifler.shape[0] # orjinal verideki satır sayısı print("Orjinal verideki satır sayısı: {}.".format(onceki_veri)) tarifler = tarifler.loc[tarifler['cuisine'].isin(secilen_mutfaklar)] sonraki_veri = tarifler.shape[0] # seçilen mutfaklara ait verideki satır sayısı print("Tarif sayısı 50'den çok olan mutfakların sayısı: {}.".format(sonraki_veri)) print("{} kayıt silindi!".format(onceki_veri - sonraki_veri))
Kodun çıktısı;
Orjinal verideki satır sayısı: 57691.
Tarif sayısı 50'den çok olan mutfakların sayısı: 57394.
297 kayıt silindi!
Verilerde yer alan Yes(Malzeme bu mutfakta var anlamında) ifadesini “1” ile ve No(Malzeme bu mutfakta yok anlamında) ifadesini “0” ile değiştirelim;
tarifler = tarifler.replace(to_replace="Yes", value=1) tarifler = tarifler.replace(to_replace="No", value=0)
Şimdi verileri daha iyi anlamamıza ve ne tür bilgiler edinebileceğimizi anlamamıza yardımcı olacak bazı ek analizlere göz atalım.
Örneğin, tarif içinde pirinç(rice), soya sosu(soy), wasabi ve yosun(seaweed) bulunan tarifler hangi mutfaklara ait bulalım;
bunlar_hangi_mutfakta = tarifler.loc[ (tarifler["rice"] == 1) & (tarifler["soy_sauce"] == 1) & (tarifler["wasabi"] == 1) & (tarifler["seaweed"] == 1) ] bunlar_hangi_mutfakta
Kodun çıktısı;
Yukarıdaki kodun çıktısına bakarak tarifinde pirinç, soya sosu, wasabi ve yosun bulunan yemeklerin Japon mutfağına ait olduğunu söyleyebilir miyiz?
Tabii ki hayır, çünkü sonuçlara göre asya ve doğu asya mutfaklarında da bu malzemeler kullanılıyor.
Tüm tarifler içinde hangi malzeme kaç kez kullanılmıştır?
# Tüm sütunların toplamı mlz = tarifler.iloc[:, 1:].sum(axis=0) print(mlz)
Kodun çıktısı;
almond 2306
angelica 1
anise 223
anise_seed 87
apple 2420
...
wood 33
yam 85
yeast 3385
yogurt 1033
zucchini 1102
Length: 383, dtype: int64
Biraz daha biçimlendirelim;
# sütunları panda serisi olarak tanımlayalım malzeme = pd.Series(ing.index.values, index = np.arange(len(ing))) sayim = pd.Series(list(ing), index = np.arange(len(ing))) # veri setini oluşturalım mlz_df = pd.DataFrame(dict(malzeme = malzeme, sayim = sayim)) mlz_df = mlz_df[["ingredient", "count"]] print(mlz_df.to_string())
ingredient count
0 almond 2306
1 angelica 1
2 anise 223
3 anise_seed 87
4 apple 2420
5 apple_brandy 37
6 apricot 620
7 armagnac 11
8 artemisia 13
9 artichoke 391
10 asparagus 460
11 avocado 660
12 bacon 2169
13 baked_potato 9
14 balm 3
15 banana 989
16 barley 266
17 bartlett_pear 23
18 basil 3842
19 bay 1463
20 bean 1992
21 beech 1
22 beef 4902
23 beef_broth 845
...
379 yam 85
380 yeast 3385
381 yogurt 1033
382 zucchini 1102
Artık dilersek bu veri setini istediğimiz şekilde sıralayabiliriz. Örneğin tüm tarifler içinde en çok kullanılan malzemelerin neler olduğunu merak ediyorsak;
mlz_df.sort_values(["count"], ascending=False, inplace=True) mlz_df.reset_index(inplace=True, drop=True) print(mlz_df)
Kodun çıktısı;
ingredient count
0 egg 21022
1 wheat 20775
2 butter 20715
3 onion 18078
4 garlic 17351
.. ... ...
378 strawberry_jam 1
379 sturgeon_caviar 1
380 kaffir_lime 1
381 beech 1
382 durian 0
[383 rows x 2 columns]
Tabii burada elde ettiğimiz sonuçlar bir miktar yanlılığa sahiptir. Çünkü yukarıdaki tablolardan hatırlayacağınız gibi tarifler arasında 40.000’in üzerinde Amerikan mutfağına ait tarif mevcut. Bu da cevap aradığımız soruların Amerikan mutfağından aşırı miktarda etkilenen cevaplar olduğunu gösterir. Bu yüzden daha objektif bir sonuç için ülke mutfağına göre bu sonucu üretebiliriz. Diğer bir deyişle şu soruların cevabını arayabiliriz; “Çinliler hangi malzemeleri daha çok kullanıyor?” ya da “Kanadalılar için “
mutfaklar = tarifler.groupby("cuisine").mean() mutfaklar.head()
Kodun çıktısı;
Yukarıda bir veriseti oluşturduk ve satırlar malzemelerin ait oldukları mutfakları, sütunlar ise o mutfakta kullanılan malzemeleri listeliyor. Bu tablodaki veriler ise hangi malzemenin ilgili olduğu mutfakta diğer malzemelere göre hangi oranda kullanıldığını gösteriyor.
Örneğin; afrika mutfağında badem %15,65 oranında kullanılırken, amerika mutfağında %0,4 oranında kullanılıyormuş. Kanadalıların yemeklerinde ise diğer malzemelere göre %38,11 oranında tereyağı kullanılıyormuş. Önemli bir oran. Demek ki Kanadalılar tereyağını çok seviyorlar ve Kanadalılara tereyağı satabilirsiniz!
Hadi şimdi ülke mutfaklarına göre en çok kullanılan 4 malzemeyi görelim;
num_ingredients = 4 # çıktıya yazdırılacak malzeme sayısını belirleyelim # her mutfağa göre en çok kullanılan malzemeleri yazdıracak fonksiyon def print_top_ingredients(row): print(row.name.upper()) row_sorted = row.sort_values(ascending=False)*100 top_ingredients = list(row_sorted.index.values)[0:num_ingredients] row_sorted = list(row_sorted)[0:num_ingredients] for ind, ingredient in enumerate(top_ingredients): print("%s (%d%%)" % (ingredient, row_sorted[ind]), end=' ') print("\n") # fonksiyonu veri setimiz üzerinde çalıştıralım create_cuisines_profiles = mutfaklar.apply(print_top_ingredients, axis=1)
Kodun çıktısı;
AFRICAN
onion (53%) olive_oil (52%) garlic (49%) cumin (42%)
AMERICAN
butter (41%) egg (40%) wheat (39%) onion (29%)
ASIAN
soy_sauce (49%) ginger (48%) garlic (47%) rice (41%)
CAJUN_CREOLE
onion (69%) cayenne (56%) garlic (48%) butter (36%)
CANADIAN
wheat (39%) butter (38%) egg (35%) onion (34%)
CARIBBEAN
onion (51%) garlic (50%) vegetable_oil (31%) black_pepper (31%)
CENTRAL_SOUTHAMERICAN
garlic (56%) onion (54%) cayenne (51%) tomato (41%)
CHINESE
soy_sauce (68%) ginger (53%) garlic (52%) scallion (48%)
EAST_ASIAN
...
WESTERN
egg (51%) wheat (46%) butter (46%) black_pepper (36%)
Bu noktada artık verimizden anlamlı bilgiler elde edebilecek seviyede veriyi anlamlandırabildiğimizi ve veriyi düzenleyerek sonraki Modelleme aşamasına hazırlayabildiğimizi söyleyebiliriz.
Terimler Sözlüğü:
Her ne kadar daha iyi anlaşılabilmesi için kavram adlarını Türkçe kullanmayı tercih etsem de, hazırladığım dokümanlarda geçen kavramların İngilizce karşılıklarını bilmeniz de önem taşımaktadır. Zira faydalanacağınız çoğu kaynakta ya da ekipler içinde birlikte çalışacağınız kişiler ile konuşurken yüksek ihtimal İngilizce terimleri ile karşılaşacaksınız. Bu nedenle aşağıda olduğu gibi konu sonlarında yer alan terim sözlüklerine de göz atmanızı tavsiye ederim.
Terim | Anlamı |
---|---|
Otomasyon(Automation) | Veri toplama ve hazırlama süreçlerini kolaylaştırmak için tekrar eden işlemleri otomatikleştiren araç ve tekniklerin kullanılması. |
Veri koleksiyonu(Data Collection) | Çeşitli kaynaklardan veri toplama ve bir araya getirme aşaması. |
Veri Derleme(Data Compilation) | Kapsamlı bir veri seti oluşturmak için verilerin düzenlenmesi ve yapılandırılması süreci. |
Veri Biçimlendirme(Data Formatting) | Tekdüzelik ve analiz kolaylığı sağlamak için verilerin standartlaştırılması süreci. |
Veri Manipülasyonu(Data Manipulation) | Verilerin kullanılabilir bir formata dönüştürülmesi süreci. |
Veri Hazırlama(Data Preparation) | Özellik mühendisliği ve metin analizi de dahil olmak üzere verilerin temizlendiği, dönüştürüldüğü ve daha ileri analizler için biçimlendirildiği aşama. Etkili analiz ve modellemeyi kolaylaştırmak için verilerin dönüştürüldüğü ve düzenlendiği aşama. |
Veri Kalitesi(Data Quality) | Veri bütünlüğü ve tamlığının değerlendirilmesi; eksik, geçersiz veya yanıltıcı değerlerin ele alınması. |
Veri Kalite Değerlendirmesi(Data Quality Assessment) | Veri bütünlüğü, doğruluğu ve tamlığının değerlendirilmesi. |
Veri Seti(Data Set) | Analiz ve modelleme için kullanılan bir veri koleksiyonu. |
Veriyi Anlama (Data Understanding) | Veri bilimi metodolojisindeki bu aşama, verilerin çözülecek sorunu temsil ettiğinden emin olmak için toplanan verilerin keşfedilmesi ve analiz edilmesine odaklanmıştır. |
Tanımlayıcı İstatistikler(Descriptive Statistics) | Veri bilimcilerin değişkenlerin dağılımını tanımlamak ve anlamak için kullandıkları ortalama, medyan, minimum, maksimum ve standart sapma gibi özet istatistikler. |
Özellik(Feature) | Problemin çözülmesine yardımcı olan veri içindeki bir özellik veya nitelik. |
Özellik Mühendisliği(Feature Engineering) | Makine öğrenimi algoritmalarının performansını artırmak için alan bilgisine dayalı yeni özellikler veya değişkenler oluşturma süreci. |
Özellik Seçimi(Feature Extraction) | Veri setinden ilgili özelliklerin veya niteliklerin belirlenmesi ve seçilmesi. |
İnteraktif İşlemler(Interactive Processes) | Veri analizinden elde edilen içgörü ve geri bildirimlere dayalı olarak metodolojinin yinelemeli ve sürekli olarak iyileştirilmesi. |
Kayıp Değerler(Missing Values) | Veri kümesinde bulunmayan veya bilinmeyen, veri hazırlama sırasında dikkatli bir şekilde ele alınması gereken değerler. |
Model Kalibrasyonu(Model Calibration) | Doğruluğu ve ilk tasarımla uyumu artırmak için model parametrelerinin ayarlanması. |
İkili Korelasyon(Pairwise Correlations) | Farklı değişkenler arasındaki ilişkileri ve korelasyonları belirlemeye yönelik bir analiz. |
Metin Analizi(Text Analysis) | Metinsel verileri analiz etme ve manipüle etme, anlamlı bilgi ve kalıpları çıkarma adımları. |
Metin Analizi Gruplandırma(Text Analysis Groupings) | Analiz için metinsel verilerden anlamlı gruplamalar ve kategoriler oluşturma. |
Görselleştirme Teknikleri(Visualization Techniques) | Veri bilimcilerin, veri kalıplarının, ilişkilerinin ve içgörülerinin erişilebilirliğini ve anlaşılmasını artıran görsel temsiller veya grafikler oluşturmak için kullandıkları yöntemler ve araçlar. |
Bağlantıda Kalalım