Michael Macaulay

Makine Öğrenimi Yolculuğu için Panda İşlevlerini Bilmeniz Gerekir

Kaynak Düğüm: 1865356

Bu makale, Veri Bilimi Blogathon

Giriş

Eh, yapabileceğiniz iyi bir olasılık var!

Python'u birincil programlama dili olarak kullanan veri bilimcileri için Pandas paketi, sahip olunması gereken bir veri analiz aracıdır. Pandas paketi, bir veri bilimcisinin ihtiyaç duyduğu her şeye sahiptir ve her kurs bize ilk başta onu nasıl kullanacağımızı öğretti. Çok büyük, güçlü ve hayal edebileceğiniz hemen hemen her tablo manipülasyonunu gerçekleştiriyor. Ancak bu genişlik bazen dezavantaj olabilir.

Nadir görülen uç durumları, farklı senaryoları çözen birçok güzel özelliğe sahiptir.

Pandaların en önemli dezavantajlarından biri, büyük veri kümeleriyle mücadele etmesidir, çünkü pandalar veri yapılarını RAM'de depolar, bu veri boyutları büyüdükçe yetersiz hale gelebilir. Bunun için PySpark veya Dask kullanın.

Pandalar paketi yaygın olarak kullanılsa da, daha az kullanıldığı için ya da varlığından habersiz oldukları için insanların gözden kaçırabileceği birçok işlev var. Bu gönderi, sizi bu özelliklerle yeniden tanıştırmayı ve Pandaların önceden bildiğinizden çok daha yetkin olduğunu göstermeyi amaçlıyor.

Pipe

Pandalarda veri temizliğini özlü ve kompakt bir şekilde gerçekleştirmek için, birden fazla işlevi tek bir işlemde birleştirmenize izin veren Pipe işlevleri kullanılabilir.

Örneğin, drop_duplicates, encode_categoricals, remove_outliers gibi argümanlarını kabul eden işlevleri uygulamayı seviyorsanız.

df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['price', 'carat', 'depth']). pipe(encode_categoricals, ['cut', 'color', 'net']) )

çarpanlara ayır

Bu işlev, Sklearns Label Encoder'a bir alternatiftir.

# Sondaki [0] işaretine dikkat edin elmaslar["cut_enc"] = pd.factorize(elmas["cut"])[0] >>> elmaslar["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Ad: cut_enc, dtype: int64

Sonuçları çarpanlara ayır bir dizi değer: kodlanmış değer ve benzersiz kategorilerin bir listesi.

değerler, benzersiz = pd.factorize(elmas["cut"], sort=True) >>> değerler[:10] dizi([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> benzersiz ['İdeal', 'Premium', 'Çok İyi', 'İyi', 'Orta']

Patlamak

Patla | panda fonksiyonları

Fotoğraf Edewaa koruyucusu on Unsplash

Explode ilginç bir isme sahip bir fonksiyondur. Bir örnekle başlayalım ve ardından bir açıklama yapalım:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("kirli") >>> df
veri | panda fonksiyonları
Yazara göre resim

Özellik sütununda listelerle gösterilen iki satır vardır. Bu tür veriler, birkaç sorunun birden fazla seçeneği kabul ettiği anketlerde bulunur.

>>> df.explode("kirli", yoksay_index=Doğru)
veri patlaması
Yazara göre resim

Bu işlev, bir dizi değer içeren bir hücreyi alır ve birden çok satırda patlar. Sayısal bir dizinin sırasını korumak için, Doğru olarak dikkate alma_dizini kullanın.

Arasında

Bir aralıktaki sayısal özellikleri boole indeksleme için, işte kullanışlı bir fonksiyon:

# Fiyatı 3500 ile 3700 dolar arasında olan elmasları alın elmas[elmas["fiyat"].between(3500, 3700, dahil="neither")].sample(5)
veriler arasında | panda fonksiyonları
Yazara göre resim

 

T

DataFrame, devrik olarak bilinen basit bir T niteliğine sahiptir. Sık kullanmayabiliriz, açıklama yöntemi veri çerçevelerini görüntülerken yardımcı olur.

>>> boston.describe().T.head(10)
aktarmak
Yazara göre resim

 

Panda Seçenekleri

Varsayılan davranışları değiştirmeye ve değiştirmeye yardımcı olan küresel panda ayarları kullanılabilir.

>>> dir(pd.options) ['hesaplama', 'görüntüleme', 'io', 'mod', 'çizim']

5 modülden oluşmaktadır. Ekranın altındaki mevcut seçenekleri görelim. Kullanılabilir birçok seçenek var, ancak çoğunlukla max_columns kullanıyorum.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'Genişlik']

Çoğu kişi max_columns ve kesinlik kullanır

# Sütun sayısını görüntülemek için sınırı kaldırın pd.options.display.max_columns = Yok # Yalnızca ondalıktan sonra 5 sayı göster pd.options.display.precision = 5 # bilimsel gösterimden kurtulur

Convert_dtypes

Pandaların bazı sütunları nesne veri türleri olarak işaretlemek gibi can sıkıcı bir alışkanlığı olduğunun hepimiz farkındayız. Türlerini doğrudan tanımlamak yerine, en iyi veri türünü çıkarmaya çalışan convert dtypes yöntemini kullanabilirsiniz:

sample = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId nesnesi CO float64 O3 float64 AQI_Bucket nesne türü: nesne >>> sample.convert_dtypes().dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: object

Select_dtypes

Adından, işlevin ne yaptığının açık olduğuna inanıyorum. Belirli veri türlerini içeren veya atlayan sütunları belirtmek için dahil etme ve hariç tutma seçeneklerini kullanabilirsiniz.

Yalnızca np.number içeren sayısal sütunları seçin, örneğin:

# Yalnızca sayısal sütunları seçin diamonds.select_dtypes(include=np.number).head()
türleri seç
Yazara göre resim

 

Maske

Bu işlev, özel koşulun sağlanmadığı değerlerin değiştirilmesine yardımcı olur.

# Örnek veri oluşturma yaşları = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("yaşlar") yaşları
maske | veri
Yazara göre resim

Yukarıdaki işlemi gerçekleştirdikten sonra.

maskeleme gerçekleştirildi
Yazara göre resim

Min ve Maks

Min ve max iyi bilinmesine rağmen, bazı uç durumlar için daha iyi özelliklere sahiptir.

index = ["Diamonds", "Titanic", "Iris", "Kalp Hastalığı", "Kredi Varsayılanı"] kitaplıklar = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) kütüphanelerdeki lib için}, index=index ) >>> df
minimum ve maksimum
Yazara göre resim 

Yukarıdaki kurgusal DataFrame, beş veri kümesinde dört farklı gradyan artırma kitaplığının sonuçlarını gösterir. Her veri kümesinde en iyisini yapan paketi arıyoruz. Bunu max ile klas bir şekilde nasıl başaracağınız aşağıda açıklanmıştır:

>>> df.max(axis=1) Diamonds 99.52684 Titanic 99.63650 Iris 99.10989 Kalp Hastalığı 99.31627 Kredi Temerrüdü 97.96728 dtype: float64

En Büyük ve En Küçük

En büyük ve en küçük, bir değişkenin üst N veya ~(üst N) değerlerini görüntülemek için yararlıdır.

elmaslar.nlargest(5, "fiyat")
en büyük ve en küçük
Yazara göre resim
elmaslar.nsmallest(5, "fiyat")
en küçük
Yazara göre resim

 

Idxmax ve Idxmin

Bir sütunda max veya min aradığınızda pandalar en büyük/en küçük sayıyı döndürür. Ancak, bu işlevlerin sağlamadığı min/maks konumuna ihtiyaç duyduğunuz durumlar vardır.

Bunun yerine idxmax/idxmin kullanabilirsiniz:

>>> diamonds.price.idxmax() 27749 >>> diamonds.carat.idxmin() 14

Value_Counts

Eksik değerlerin yüzdesini bulmanın yaygın bir yolu, isnull ile toplamı birleştirip dizinin boyutuna bölmektir.

Ancak, ilgili bağımsız değişkenlerle değer_sayısı aynı şeyi yapar:

konut = pd.read_csv("train.csv") >>> konut["FireplaceQu"].value_counts(dropna=Yanlış, normalize=Doğru) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Ad: FireplaceQu, dtype: şamandıra64

Klips

Klip işlevi, bir aralığın dışındaki aykırı değerleri bulmaya ve bunları kesin sınırlarla değiştirmeye yardımcı olur.

>>> yaşlar.klip(50, 60)
klip için veri
Yazara göre resim

 

At_time ve Betweeen_time

Bu işlevler, yüksek ayrıntı düzeyine sahip zaman serileriyle çalışırken yardımcı olur.

at_time, belirli bir tarih veya saatte değerlerin alınmasına yardımcı olur.

index = pd.date_range("2021-08-01", period=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.kafa()
at_time örnek | panda fonksiyonları
Yazara göre resim

>>> df.at_time(“15:00”)

.at_time | panda fonksiyonları
Yazara göre resim

Ara_zaman, özel bir aralıktaki satırları getirmek için kullanılır.

tarihten itibaren tarih saatini içe aktar >>> df.between_time("09:45", "12:00")
arada_zaman
Yazara göre resim

 

Bdate_aralığı

Bu işlev, iş günü sıklığına sahip zaman serisi endeksleri oluşturmaya yardımcı olur. Finans dünyası bu tür bir sıklığa sahiptir. Bu nedenle, bu işlev, zaman serilerini yeniden indeksleme işleviyle yeniden indeksleme sırasında yardımcı olabilir.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Bir aylık süre >>> len(series) 21

At ve Iat

Bu iki erişimci, loc ve iloc'tan önemli ölçüde daha hızlıdır. Ancak, bir dezavantajı var. Bir seferde yalnızca bir değer seçmenize veya değiştirmenize izin verirler:

# [indeks, etiket] >>> diamonds.at[234, "cut"] 'İdeal' # [indeks, dizin] >>> diamonds.iat[1564, 4] 61.2 # Fiyat sütununun 16541. satırını değiştirin >> > elmaslar.at[16541, "fiyat"] = 10000

Args sıralama

Bu işlev, bir dizi özelliği sıralayacak dizinleri çıkarmaya yardımcı olur.

Tips.reset_index(inplace=Doğru, drop=True) sort_idx = ipuçları["total_bill"].argsort(kind="mergesort") # Şimdi, "ipuçlarını" total_bill ipuçlarına göre sıralayın.iloc[sort_idx].head()
arg_sort
Yazara göre resim

 

kedi aksesuarı

Pandalar, str veya dt gibi erişimcileri kullanarak tarihlerde ve dizelerde python'un yerleşik işlevlerine izin verir.

>>> diamonds.dtypes karat float64 kesim kategorisi renk kategorisi netlik kategorisi derinlik float64 tablo float64 fiyat int64 x float64 y float64 z float64 cut_enc int64 dtype: nesne

Kategorik sütunlarda cat accessor kullanılarak birçok özel fonksiyon kullanılabilir. Benzersiz bulmak için kategoriler, özellikleri yeniden adlandırmak için rename_categoriler gibi işlevlere sahiptir.

elmaslar["new_cuts"] = elmaslar["cut"].cat.rename_categories(list("ABCDE")) >>> elmaslar["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='nesne')

Altındaki daha fazla işlev listesi için buna göz atın kedi erişimcisi.

Sıkmak

Squeeze, nadir ancak ağırlaştırıcı uç durumlarda kullanılan bir işlevdir.

Bir DataFrame'i alt kümelemek için kullanılan bir koşuldan tek bir değer döndürüldüğünde, bu, bu durumlardan biridir. Aşağıdaki senaryoyu göz önünde bulundurun:

alt küme = elmaslar.loc[elmas.index >> alt küme
fiyat

Yalnızca bir hücre olsa bile DataFrame'i döndürün. Fiyatı elde etmek için artık hem sütun adı hem de dizin ile birlikte .loc'u kullanmanız gerektiğinden sakıncalıdır.

Sıkıştırmayı biliyorsan yapmana gerek yok. Bu işlev kullanılarak tek hücreli bir DataFrame veya Series'den bir eksen kaldırılabilir. Aşağıdaki senaryoyu göz önünde bulundurun:

>>> subset.squeeze() 326

Kaldırılacak ekseni belirtmek mümkündür. Artık sadece skaler dönmüştü.

>>> subset.squeeze("sütunlar") # veya "satırlar" 0 326 Ad: fiyat, dtype: int64

Bu işlevin yalnızca tekli değerlere sahip Seriler veya DataFrame için çalıştığını unutmayın.

Excel_yazar

Excel dosyaları oluşturmak ve içine DataFrame yazmak için genel bir sınıftır. Düşünün, bu iki veri setimiz var.

# İki veri kümesini yükleyin elmaslar = sns.load_dataset("elmas") ipuçları = sns.load_dataset("ipuçları") # Yazar olarak pd.ExcelWriter("data/data.xlsx") ile aynı excel dosyasına yazın: diamonds.to_excel (yazar, sayfa_adı="elmas") ipuçları.to_excel(yazar, sayfa_adı="ipuçları")

İster yeni bir dosyaya ihtiyacınız olsun, ister mevcut bir dosyayı değiştirin, bir sayfa varsa ne olur, kullanılacak DateTime biçimini belirtmek için özelliklere sahiptir. Şuna göz at belgeleme daha fazla ayrıntı için.

Sonuç

Pandaların kapsamlı bir özeti değildir ve belgeleme kod ve özellikler hakkında daha fazla bilgi içerir. Burada sağlanan kod parçacıklarının farklı varyasyonlarını ve çeşitli parametreleri denemenizi tavsiye ederim. Bunu yaparak pandaların gücünü tam olarak anlayabilirsiniz.

Dask ve datatable gibi kütüphaneler, büyük veri kümelerini işlemek için gösterişli yeni özellikleriyle yavaş yavaş Pandaların yerini alıyor, Pandalar Python veri bilimi topluluğunda en yaygın olarak kullanılan veri işleme aracı olmaya devam ediyor. Mevcut SciPy yığınına ne kadar iyi uyduğu için kitaplık, diğer paketlerin takip etmesi ve oluşturması için bir paradigma görevi görür.

Umarım bu yazıyı aydınlatıcı bulmuşsunuzdur ve okuduğunuz için teşekkür ederim.

Bu makalede gösterilen medya Analytics Vidhya'ya ait değildir ve Yazarın takdirine bağlı olarak kullanılır.

Kaynak: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Zaman Damgası:

Den fazla Analitik Vidhya