Cuma, Haziran 21, 2024
Ana SayfaMakine ÖğrenmesiPython'da Pandas DataFrame'in Boyutu Nasıl Küçültülür

Python’da Pandas DataFrame’in Boyutu Nasıl Küçültülür

İster bir hobi projesi için ister iş amaçlı bir model inşa ediyor olun, ilk denemenizin bir Jupyter Notebook açmayı ve bazı verileri okumayı içermesi muhtemeldir. Sonrasında büyük ihtimalle dizüstü bilgisayarınızla ilgili bellek sorunlarıyla karşılaşacaksınız. Satırları silmeye başlamadan veya verilerinizin boyutunu küçültmek için karmaşık örnekleme tekniklerini denemeden önce, verilerin yapısını kontrol etmelisiniz.

Verilerimizin Boyutunu Anlama

Bir veri kümesinin boyutunu nasıl küçültebileceğimizi keşfetmek için bazı örnek verilere ihtiyacımız var. Bu eğitim için, Kaggle’daki Gelecek Satış Tahmini yarışması için oluşturulan eski bir veri kümesini kullanıyoruz.

Tam olarak birleştirildiğinde ve feature enginerring yapıldığında, veri kümesinde 58 sütun ve 11.128.050 kayıt bulunur. Verilerin boyutunu küçültmek için bir çözüme ihtiyacımız var.

Başlamadan önce, veriler hakkında biraz daha fazla bilgi edinmeye bakmalıyız. Pandas kütüphanesinde df.info() fonksiyonu çok yararlı olan bir fonksiyondur.

df.info(memory_usage = “deep”)

Bu kod parçacığı aşağıdaki çıktıyı verir:

<class ‘pandas.core.frame.DataFrame’>
Int64Index: 11128050 entries, 0 to 11128049
Data columns (total 58 columns):
# Column Dtype
— —— —–
0 date_block_num int64
1 item_id int64
2 shop_id int64
3 target float64
4 item_name object
5 item_category_id int64
6 Category_type object
7 City object
8 Month_End_Date datetime64[ns]
9 Number_of_Mondays int64
10 Number_of_Tuesdays int64
11 Number_of_Wednesdays int64
12 Number_of_Thursdays int64
13 Number_of_Fridays int64
14 Number_of_Saturdays int64
15 Number_of_Sundays int64
16 Year int64
17 Month int64
18 Days_in_Month int64
19 min_item_sale_date_block_num int64
20 Months_Since_Item_First_Sold int64
21 avg_first_months_sales_by_item_category_id float64
22 avg_first_months_sales_by_item_category_and_shop float64
23 target_lag_1 float64
24 target_lag_2 float64
25 target_lag_3 float64
26 target_lag_4 float64
27 target_lag_5 float64
28 target_lag_6 float64
29 target_lag_12 float64
30 avg_monthly_by_item_lag_1 float64
31 avg_monthly_by_item_lag_2 float64
32 avg_monthly_by_item_lag_3 float64
33 avg_monthly_by_item_lag_6 float64
34 avg_monthly_by_item_lag_12 float64
35 avg_monthly_by_shop_lag_1 float64
36 avg_monthly_by_shop_lag_2 float64
37 avg_monthly_by_shop_lag_3 float64
38 avg_monthly_by_shop_lag_6 float64
39 avg_monthly_by_shop_lag_12 float64
40 avg_monthly_by_category_lag_1 float64
41 avg_monthly_by_category_lag_2 float64
42 avg_monthly_by_category_lag_3 float64
43 avg_monthly_by_category_lag_6 float64
44 avg_monthly_by_category_lag_12 float64
45 avg_monthly_by_city_lag_1 float64
46 avg_monthly_by_city_lag_2 float64
47 avg_monthly_by_city_lag_3 float64
48 avg_monthly_by_city_lag_6 float64
49 avg_monthly_by_city_lag_12 float64
50 item_price_lag_1 float64
51 item_price_lag_2 float64
52 item_price_lag_3 float64
53 item_price_lag_4 float64
54 item_price_lag_5 float64
55 item_price_lag_6 float64
56 target_3_month_avg float64
57 target_6_month_avg float64
dtypes: datetime64[ns](1), float64(38), int64(16), object(3)
memory usage: 7.6 GB

 

 

df.info ile aşağıdaki bilgileri alırız:

  • Satır veya giriş sayısı
  • Sütun sayısı
  • Her sütunun dizini ve adı
  • Her sütunun veri türü
  • Dataframe’in toplam bellek kullanımı

Bu tabloya yakından baktığımızda, her veri türünün arkasında kullandıkları bitleri gösteren sayıları görüyoruz. Bunların çoğu int64 veya float64 olarak listelendiğinden, muhtemelen onları int16 veya float8 gibi daha küçük alan veri tiplerine indirgeyebiliriz. Downcasting, her özelliğin veri türlerini mümkün olan en düşük türe indirgediğimiz anlamına gelir.

## downcasting loop
for column in df:
 if df[column].dtype == ‘float64’:
 df[column]=pd.to_numeric(df[column], downcast=’float’)
 if df[column].dtype == ‘int64’:
 df[column]=pd.to_numeric(all_data[column], downcast=’integer’)## dropping an unused column
df = df.drop('item_name',axis =1)

Dataframe’in boyutunu tekrar kontrol edebiliriz.

<class ‘pandas.core.frame.DataFrame’>
Int64Index: 11128050 entries, 0 to 11128049
Data columns (total 57 columns):
# Column Dtype
— —— —–
0 date_block_num int8
1 item_id int16
2 shop_id int8
3 target float32
4 item_category_id int8
5 Category_type object
6 City object
7 Month_End_Date datetime64[ns]
8 Number_of_Mondays int8
9 Number_of_Tuesdays int8
10 Number_of_Wednesdays int8
11 Number_of_Thursdays int8
12 Number_of_Fridays int8
13 Number_of_Saturdays int8
14 Number_of_Sundays int8
15 Year int16
16 Month int8
17 Days_in_Month int8
18 min_item_sale_date_block_num int8
19 Months_Since_Item_First_Sold int8
20 avg_first_months_sales_by_item_category_id float32
21 avg_first_months_sales_by_item_category_and_shop float32
22 target_lag_1 float32
23 target_lag_2 float32
24 target_lag_3 float32
25 target_lag_4 float32
26 target_lag_5 float32
27 target_lag_6 float32
28 target_lag_12 float32
29 avg_monthly_by_item_lag_1 float32
30 avg_monthly_by_item_lag_2 float32
31 avg_monthly_by_item_lag_3 float32
32 avg_monthly_by_item_lag_6 float32
33 avg_monthly_by_item_lag_12 float32
34 avg_monthly_by_shop_lag_1 float32
35 avg_monthly_by_shop_lag_2 float32
36 avg_monthly_by_shop_lag_3 float32
37 avg_monthly_by_shop_lag_6 float32
38 avg_monthly_by_shop_lag_12 float32
39 avg_monthly_by_category_lag_1 float32
40 avg_monthly_by_category_lag_2 float32
41 avg_monthly_by_category_lag_3 float32
42 avg_monthly_by_category_lag_6 float32
43 avg_monthly_by_category_lag_12 float32
44 avg_monthly_by_city_lag_1 float32
45 avg_monthly_by_city_lag_2 float32
46 avg_monthly_by_city_lag_3 float32
47 avg_monthly_by_city_lag_6 float32
48 avg_monthly_by_city_lag_12 float32
49 item_price_lag_1 float32
50 item_price_lag_2 float32
51 item_price_lag_3 float32
52 item_price_lag_4 float32
53 item_price_lag_5 float32
54 item_price_lag_6 float32
55 target_3_month_avg float32
56 target_6_month_avg float32
dtypes: datetime64[ns](1), float32(38), int16(2), int8(14), object(2)
memory usage: 3.2 GB

Şimdi birkaç 8, 16 ve 32 bit sütunumuz olduğunu görüyoruz ve veri türlerini değiştirerek dataframe’in boyutunu etkin bir şekilde yarıya indirdik. Daha da ilginç olanı, dataframe bellek kullanımının 3.2 gb’a düşmesidir. Bu, ilk başladığımızda sahip olduğumuz 7.6 gb’nin kabaca yarısı. Bu tür bellek azaltma ile, daha küçük makinelere daha fazla veri yükleyebiliriz ve bu da sonuç olarak maliyetleri düşürür.

 

Sonuç

Bu eğitimde, bir pandas dataframe’ine 11 milyon kayıt veri seti yükledik. Pandas’ta .info() işlevini kullanarak verilerin boyutunu ve yapısını nasıl kontrol edeceğimizi öğrendik.

RELATED ARTICLES

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

Bizi Takip Edin

4,200BeğenenlerBeğen
10,000TakipçilerTakip Et
296TakipçilerTakip Et
1,400AboneAbone Ol

BÜLTENİMİZE ABONE OLUN

Popüler