You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Data-Science-For-Beginners/translations/tr/2-Working-With-Data/07-python
localizeflow[bot] ecc339bb8a
[it,pl,tr] chore(i18n): sync translations
4 weeks ago
..
R 🌐 Update translations via Co-op Translator 11 months ago
README.md [it,pl,tr] chore(i18n): sync translations 4 weeks ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 213 changes) 6 months ago
notebook-covidspread.ipynb chore(i18n): sync translations with latest source changes (chunk 1/1, 69 changes) 6 months ago
notebook-papers.ipynb 🌐 Update translations via Co-op Translator 11 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 11 months ago

README.md

Veri ile Çalışmak: Python ve Pandas Kütüphanesi

 Sketchnote by (@sketchthedocs)
Python ile Çalışmak - Sketchnote by @nitya

Giriş Videosu

Veritabanları verileri depolamak ve sorgulama dilleri kullanarak bunlara sorgular yapmak için çok verimli yollar sunarken, veriyi işlemek için en esnek yol kendi programınızı yazarak veriyi manipüle etmektir. Birçok durumda, veritabanı sorgusu yapmak daha etkili bir yol olabilir. Ancak, daha karmaşık veri işleme gerektiğinde, bu SQL kullanılarak kolayca yapılamaz. Veri işleme herhangi bir programlama dilinde programlanabilir, ancak veriyle çalışmak açısından daha üst düzey bazı diller vardır. Veri bilimciler tipik olarak aşağıdaki dillerden birini tercih ederler:

  • Python, genel amaçlı bir programlama dili olup, basitliği nedeniyle genellikle yeni başlayanlar için en iyi seçeneklerden biri olarak kabul edilir. Python, ZIP arşivinden veri çıkarma veya resmi gri tonlamaya dönüştürme gibi birçok pratik problemi çözmenize yardımcı olabilecek birçok ek kütüphane içerir. Veri biliminin yanı sıra, Python web geliştirme için de sıkça kullanılır.
  • R, istatistiksel veri işleme düşünülerek geliştirilmiş klasik bir araç kutusudur. Ayrıca çok sayıda kütüphane deposu (CRAN) içerir ve bu yüzden veri işleme için iyi bir seçimdir. Ancak R genel amaçlı bir programlama dili değildir ve veri bilimi alanı dışında nadiren kullanılır.
  • Julia, özellikle veri bilimi için geliştirilmiş başka bir dildir. Pythondan daha iyi performans vermesi hedeflenmiştir ve bilimsel deneyler için mükemmel bir araçtır.

Bu derste, basit veri işleme için Python üzerine odaklanacağız. Dil hakkında temel bir tanıdıklık varsayacağız. Daha derin bir Python turu isterseniz, aşağıdaki kaynaklardan birine başvurabilirsiniz:

Veriler birçok biçimde olabilir. Bu derste, üç veri biçimini ele alacağız - tablo verisi, metin ve resimler.

İlgili tüm kütüphanelerin tam bir genel bakışını vermek yerine, birkaç veri işleme örneğine odaklanacağız. Bu size mümkün olanların ana fikrini verecek ve gerektiğinde problemlerinize çözüm bulmanız için nerelere bakacağınızı anlamanızı sağlayacaktır.

En yararlı tavsiye. Veride gerçekleştirmek istediğiniz ancak nasıl yapacağınızı bilmediğiniz bir işlem olduğunda, internetten arama yapmayı deneyin. Stackoverflow genellikle birçok tipik görev için Pythonda çok sayıda faydalı kod örneği içerir.

Derse Hazırlık Quiz'i

Tablo Verileri ve Dataframe'ler

İlişkisel veritabanlarından bahsederken tablo verileriyle zaten tanışmıştık. Çok fazla veriniz varsa ve bunlar birçok farklı bağlı tabloda yer alıyorsa, SQL kullanmak kesinlikle mantıklıdır. Ancak birçok durumda elimizde bir tablo veri vardır ve bu veri hakkında dağılım, değerler arasındaki korelasyon gibi anlama veya içgörü elde etmemiz gerekir. Veri biliminde, orijinal verinin bazı dönüşümlerinin yapılması ve sonrasında görselleştirilmesi gereken çok durum vardır. Bu adımların ikisi de Python kullanılarak kolayca yapılabilir.

Pythonda tablo verisiyle çalışmanıza yardımcı olan iki çok kullanışlı kütüphane vardır:

  • Pandas, ilişkisel tablolara benzer şekilde adlandırılmış sütunları olan ve satır, sütun ve dataframe üzerinde farklı işlemler yapmanızı sağlayan Dataframe adı verilen veri yapılarını manipüle etmenizi sağlar.
  • Numpy, yani çok boyutlu diziler üzerinde çalışmak için kullanılan bir kütüphanedir. Dizi aynı türdeki değerlere sahiptir ve dataframeden daha basittir, ancak daha fazla matematiksel işlem sunar ve daha az yük getirir.

Ayrıca bilmeniz gereken birkaç başka kütüphane vardır:

  • Matplotlib, veri görselleştirme ve grafik çizimi için kullanılan bir kütüphanedir
  • SciPy ilave bazı bilimsel fonksiyonların bulunduğu bir kütüphanedir. Olasılık ve istatistik hakkında konuşurken bu kütüphaneyle daha önce karşılaşmıştık.

İşte bu kütüphaneleri Python programınızın başında tipik olarak içe aktarmak için kullanacağınız bir kod parçası:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # ihtiyacınız olan belirli alt paketleri belirtmeniz gerekir

Pandas birkaç temel kavram etrafında yoğunlaşır.

Series

Series, bir liste veya numpy dizisine benzeyen bir değer dizisidir. Ana fark, serinin ayrıca bir indeksi olmasıdır ve seriler üzerinde işlem yaparken (örneğin, toplama) indeks dikkate alınır. İndeks basit bir tam sayı satır numarası olabilir (liste veya diziden seri oluşturulduğunda varsayılan olarak kullanılan indeks budur) veya tarih aralığı gibi karmaşık bir yapıya sahip olabilir.

Not: Eşlik eden defterde notebook.ipynb bazı giriş düzeyinde Pandas kodları bulunmaktadır. Burada sadece bazı örnekleri ele alıyoruz ve tam defteri kesinlikle incelemeniz önerilir.

Örnek olarak düşünelim: dondurma dükkanımızın satışlarını analiz etmek istiyoruz. Bazı zaman aralıkları için satış sayıları dizisi (her gün satılan ürün sayısı) oluşturalım:

start_date = "Jan 1, 2020"
end_date = "Mar 31, 2020"
idx = pd.date_range(start_date,end_date)
print(f"Length of index is {len(idx)}")
items_sold = pd.Series(np.random.randint(25,50,size=len(idx)),index=idx)
items_sold.plot()

Zaman Serisi Grafiği

Şimdi diyelim ki her hafta arkadaşlar için bir parti düzenliyoruz ve parti için ekstra 10 paket dondurma alıyoruz. Bunu göstermek için hafta bazında indekslenmiş başka bir seri oluşturabiliriz:

additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))

İki seriyi topladığımızda toplam sayıyı elde ederiz:

total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()

Zaman Serisi Grafiği

Not basit total_items+additional_items sözdizimini kullanmıyoruz. Eğer kullansaydık, oluşan seride çok sayıda NaN (Sayısal Değil) değeri olurdu. Çünkü additional_items serisinde bazı indeks noktaları için değerler eksik ve NaN herhangi bir değere eklendiğinde sonuç NaN olur. Dolayısıyla toplamada fill_value parametresini belirtmemiz gerekir.

Zaman serileri ile, farklı zaman aralıklarında seriyi yeni örneklem ile yeniden oluşturabiliriz. Örneğin, aylık ortalama satış hacmini hesaplamak isteyelim. Aşağıdaki kodu kullanabiliriz:

monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')

Aylık Zaman Serisi Ortalamaları

DataFrame

Bir DataFrame temelde aynı indekse sahip bir seri koleksiyonudur. Birkaç seriyi birleştirip bir DataFrame oluşturabiliriz:

a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
df = pd.DataFrame([a,b])

Bu yatay bir tablo oluşturacaktır:

0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 9
1 I like to use Python and Pandas very much

Serileri sütun olarak da kullanabilir ve sözlük kullanarak sütun isimlerini belirtebiliriz:

df = pd.DataFrame({ 'A' : a, 'B' : b })

Bu şu şekilde bir tablo oluşturur:

A B
0 1 I
1 2 like
2 3 to
3 4 use
4 5 Python
5 6 and
6 7 Pandas
7 8 very
8 9 much

Not önceki tabloyu transpoze ederek (satır ve sütunları değiştirerek) bu tablo düzenini de alabilirsiniz, örneğin:

df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' })

Burada .T DataFramein transpoze işlemini, yani satırlar ile sütunların yer değiştirmesini temsil eder ve rename işlemi sütun isimlerini önceki örnekle eşleştirir.

DataFrame üzerinde yapabileceğimiz birkaç önemli işlem şunlardır:

Sütun seçimi. df['A'] yazarak bireysel sütun seçebiliriz - bu işlem bir Seri döndürür. df[['B','A']] yazarak birkaç sütunun alt kümesini başka bir DataFrame olarak seçebiliriz.

Sadece belirli satırların filtrelenmesi kriterlere göre yapılabilir. Örneğin, A sütunu 5'ten büyük olan satırları bırakmak için df[df['A']>5] yazabiliriz.

Not: Filtreleme şu şekilde çalışır. df['A']<5 ifadesi, orijinal seri df['A']nin her elemanı için ifadenin True ya da False olduğunu gösteren bir boolean serisi döndürür. Boolean serisi indeks olarak kullanıldığında, DataFrame'de satırların bir alt kümesini döndürür. Bu yüzden df[df['A']>5 and df['A']<7] gibi rastgele Python boolean ifadeleri kullanmak yanlış olur. Bunun yerine boolean seriler üzerinde özel & işlemini kullanmalısınız, örneğin df[(df['A']>5) & (df['A']<7)] (parantezler burada önemlidir).

Yeni hesaplanabilir sütunlar oluşturma. Bu ifade gibi sezgisel ifadeler kullanarak DataFrame için kolayca yeni hesaplanabilir sütunlar oluşturabiliriz:

df['DivA'] = df['A']-df['A'].mean() 

Bu örnek, A'nın ortalama değerinden sapmasını hesaplar. Aslında burada yaptığımız bir seri hesaplamak ve sonra bu seriyi sol tarafa atayarak başka bir sütun oluşturmaktır. Bu nedenle seri ile uyumlu olmayan işlemleri kullanamayız, örneğin aşağıdaki kod yanlıştır:

# Yanlış kod -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Yanlış sonuç

Sonraki örnek, sözdizimi açısından doğru olmasına rağmen yanlış sonuç verir çünkü bunu yapmak yerine B serisinin uzunluğunu tüm sütun değerlerine atar, istediğimiz gibi her bireysel elemanın uzunluğunu değil.

Eğer böyle karmaşık ifadeler hesaplamamız gerekirse, apply fonksiyonunu kullanabiliriz. Son örnek şu şekilde yazılabilir:

df['LenB'] = df['B'].apply(lambda x : len(x))
# veya
df['LenB'] = df['B'].apply(len)

Yukarıdaki işlemlerden sonra aşağıdaki DataFrame'e sahip oluruz:

A B DivA LenB
0 1 I -4.0 1
1 2 like -3.0 4
2 3 to -2.0 2
3 4 use -1.0 3
4 5 Python 0.0 6
5 6 and 1.0 3
6 7 Pandas 2.0 6
7 8 very 3.0 4
8 9 much 4.0 4

Sayıya göre satır seçimi, iloc yapısı kullanılarak yapılabilir. Örneğin, DataFrameden ilk 5 satırı seçmek için:

df.iloc[:5]

Gruplama genellikle Exceldeki pivot tablolar benzeri sonuç almak için kullanılır. Diyelim ki her bir LenB değeri için A sütununun ortalama değerini hesaplamak istiyoruz. O zaman DataFrameimizi LenB ile gruplayıp mean fonksiyonunu çağırabiliriz:

df.groupby(by='LenB')[['A','DivA']].mean()

Eğer grup içinde ortalama ve eleman sayısını hesaplamamız gerekiyorsa, daha karmaşık aggregate fonksiyonunu kullanabiliriz:

df.groupby(by='LenB') \
 .aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
 .rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})

Bize şu tabloyu verir:

LenB Count Mean
1 1 1.000000
2 1 3.000000
3 2 5.000000
4 3 6.333333
6 2 6.000000

Veri Alma

Seriler ve Veri Çerçevelerini Python nesnelerinden oluşturmanın ne kadar kolay olduğunu gördük. Ancak, veriler genellikle bir metin dosyası veya bir Excel tablosu biçiminde gelir. Neyse ki, Pandas verileri diskten yüklemek için bize basit bir yol sunar. Örneğin, CSV dosyasını okumak bu kadar basittir:

df = pd.read_csv('file.csv')

Veri yükleme ile ilgili daha fazla örneği, dış web sitelerinden veri almayı da içeren "Challenge" bölümünde göreceğiz

Yazdırma ve Grafik Çizme

Bir Veri Bilimcisi genellikle veriyi keşfetmek zorundadır, bu yüzden veriyi görselleştirebilmek önemlidir. DataFrame büyük olduğunda, çoğu zaman her şeyi doğru yaptığımızdan emin olmak için sadece ilk birkaç sırasını yazdırmak isteriz. Bu, df.head() çağrılarak yapılabilir. Jupyter Notebook'tan çalıştırıyorsanız, bu DataFrame'i güzel bir tablo biçiminde yazdıracaktır.

Bazı sütunları görselleştirmek için plot fonksiyonunun kullanımını da gördük. plot birçok görev için çok yararlıdır ve kind= parametresi aracılığıyla birçok farklı grafik türünü destekler, ancak her zaman daha karmaşık bir şeyi çizmek için ham matplotlib kütüphanesini kullanabilirsiniz. Veri görselleştirmeyi ayrı kurs derslerinde detaylı olarak ele alacağız.

Bu genel bakış Pandas'ın en önemli kavramlarını kapsamaktadır, ancak kütüphane çok zengindir ve onunla yapabileceklerinizin sınırı yoktur! Şimdi bu bilgiyi belirli bir problemi çözmek için uygulayalım.

🚀 Challenge 1: COVID Yayılımını Analiz Etme

Odaklanacağımız ilk problem COVID-19 salgınının yayılım modellemesidir. Bunu yapmak için, Johns Hopkins Üniversitesi bünyesindeki Sistemler Bilimi ve Mühendisliği Merkezi (CSSE) tarafından sağlanan farklı ülkelerdeki enfekte bireylerin sayısı verilerini kullanacağız. Veri seti bu GitHub Deposu üzerinden temin edilebilir.

Verilerle nasıl çalışılacağını göstermek istediğimiz için, notebook-covidspread.ipynb dosyasını açmanızı ve baştan sona okumanızı öneririz. Hücreleri çalıştırabilir ve sonunda sizin için bıraktığımız bazı zorlukları yapabilirsiniz.

COVID Yayılımı

Jupyter Notebook'ta nasıl kod çalıştıracağınızı bilmiyorsanız, bu makaleye göz atabilirsiniz.

Yapılandırılmamış Veri ile Çalışmak

Veriler çok kez tabular biçimde gelir, ancak bazı durumlarda metin veya görüntü gibi daha az yapılandırılmış verilerle çalışmamız gerekir. Bu durumda, yukarıda gördüğümüz veri işleme tekniklerini uygulayabilmek için yapılandırılmış veriyi bir şekilde çıkarmamız gerekir. İşte birkaç örnek:

  • Metinden anahtar kelimeleri çıkararak bu kelimelerin ne sıklıkta göründüğünü incelemek
  • Görüntüdeki nesneler hakkında bilgi çıkarmak için sinir ağlarını kullanmak
  • Video kamera görüntüsündeki kişilerin duyguları hakkında bilgi almak

🚀 Challenge 2: COVID Makalelerini Analiz Etme

Bu zorlukta, COVID pandemisi konusuna devam edeceğiz ve bu konuda bilimsel makalelerin işlenmesine odaklanacağız. COVID hakkında 7000den fazla (yazım zamanı itibarıyla) makalenin meta verileri ve özetleri (yaklaşık yarısı için tam metin de sağlanmakta) ile birlikte mevcut olduğu CORD-19 Veri Seti bulunmaktadır.

Bu veri setini kullanarak Text Analytics for Health bilişsel hizmeti ile gerçekleştirilen tam bir analiz örneği bu blog yazısında anlatılmıştır. Biz bu analizden basitleştirilmiş bir versiyonu tartışacağız.

NOT: Bu depoda veri setinin bir kopyası sağlanmamaktadır. Öncelikle metadata.csv dosyasını Kaggle'daki bu veri setinden indirmeniz gerekebilir. Kaggle'a kayıt olmanız gerekebilir. Ayrıca kayıt olmadan buradan veri setini indirebilirsiniz, ancak bu dosyada tüm tam metinler ve meta veri dosyası birlikte olacaktır.

notebook-papers.ipynb dosyasınıın ve baştan sona okuyun. Hücreleri çalıştırabilir ve sonunda sizin için bıraktığımız bazı zorlukları yapabilirsiniz.

COVID Tıbbi Tedavi

Görüntü Verisini İşleme

Son zamanlarda, görüntüleri anlamamızı sağlayan çok güçlü Yapay Zeka modelleri geliştirildi. Önceden eğitilmiş sinir ağları veya bulut servisleri kullanılarak çözülebilecek birçok görev vardır. Bazı örnekler şunlardır:

  • Görüntü Sınıflandırma, görüntüyü önceden tanımlanmış sınıflardan birine kategorize etmeye yardımcı olabilir. Custom Vision gibi servisler kullanarak kendi görüntü sınıflandırıcılarınızı kolayca eğitebilirsiniz.
  • Görüntüdeki farklı nesneleri tespit etmek için Nesne Tespiti. Computer vision gibi servisler birçok yaygın nesneyi algılayabilir ve Custom Vision modeli belirli ilgi nesnelerini tespit etmek için eğitebilirsiniz.
  • Yaş, Cinsiyet ve Duygu tespiti dahil olmak üzere Yüz Tespiti. Bu, Face API ile yapılabilir.

Tüm bu bulut servisleri Python SDK'ları kullanılarak çağrılabilir ve böylece veri keşif iş akışınıza kolayca entegre edilebilir.

İşte Görüntü veri kaynaklarından veri keşfine dair bazı örnekler:

Sonuç

Yapılandırılmış veya yapılandırılmamış veriniz olsun, Python kullanarak veri işleme ve anlama ile ilgili tüm adımları gerçekleştirebilirsiniz. Muhtemelen veri işleme için en esnek yoldur ve bu nedenle veri bilimcilerin çoğunluğu Python'u birincil araç olarak kullanır. Veri bilim yolculuğunuzda ciddiseniz, Python'u derinlemesine öğrenmek iyi bir fikir olabilir!

Ders sonrası sınav

Tekrar ve Kendi Kendine Çalışma

Kitaplar

Çevrimiçi Kaynaklar

Python Öğrenme

Ödev

Yukarıdaki zorluklar için daha detaylı veri incelemesi yapın

Teşekkür

Bu ders ❤️ ile Dmitry Soshnikov tarafından hazırlanmıştır


Feragatname: Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.