C#Yapay Zeka
Trend

C# İle Yapay Sinir Ağı Eğitimi – 5

Merhabalar, C# ile yapay sinir eğitimi serimizin 5. yazısına Bismillah diyoruz. Bir önceki yazımızda veriseti oluşturma işlemlerini yapmıştık fakat verisetinin kaynağını oluşturmadık. Yani veriseti var ama içinde veri yok. Bu yazımda da kullandığımız verisetini Excel dosyasından okumayı anlatacağım.

Ben Excel dosyasından okumayı anlatacağım, bu yüzden buna uygun gideceğim fakat nesne tabanlı programlama, interface, abstract sınıfları güzel ve doğru koordine edebilirseniz veritabanından, sunucudan yada istediğiniz farklı yerlerden okuyarak rahatlıkla veriseti oluşturabilirsiniz. Dosya işlemleri için IDosya adında bir tane abstract class oluşturalım. Dosyalarla ilgili sınıfları bu abstract sınıftan türeteceğiz. Verisetini alacağımız dosyanın nerede olduğunu bilmek için string tipte DosyaYolu adında bir tane property türetelim, bu propertye bu sınıftan kalıtım aldığımız tüm sınıflardan rahatlıkla ulaşabilecek ve kullanabileceğiz. Ayrıca dosyadan okuma yapıp veriseti oluşturabilmek içinde bir tane ExceldenOku() adında fonksiyon oluşturalım. Tabi bu fonksiyonun gövdesi olmayacak ve abstract tipte olacak. Yani IDosya sınıfımız şöyle olacak;

abstract class IDosya {
    internal string DosyaYolu { get; set; }
    internal abstract Veriseti ExceldenOku();
}

IDosya ile işimiz bitti, şimdi Excel’den okumayı yapacak ve IDosya’dan kalıtım alacağımız asıl işlemlerin olduğu Dosya isminde sınıfa geçelim. Tabi proje ana dizinine Dosya adında bir tane sınıf oluşturmakla başlamamız gerekiyor 🙂

C# ile Excel’den veri okumanın birden çok yolu var. Excel’in kendi kütüphanesini kullanabileceğinizin yanında üçüncü parti kütüphaneleri de kullanabilirsiniz. Tabi Excel kütüphanesini kullanırsanız sizde Excel yüklü olmalı ve sadece sizin Excel sürümünüzün yüklü olduğu bilgisayarlarda çalışabilir. Yani örneğin sizde Office 365 varsa, C# projenize Excel 2016 API isimli kütüphaneyi eklemeniz gerekiyor ve sadece Office 365 yüklü olan bilgisayarlarda sorunsuz çalışır. Örneğin Excel 2013 yüklü olan bir bilgisayarda çalışmaz. İşte burada üçüncü parti kütüphaneler çok daha mantıklı geliyor bana ve benim kullanacağım IronXL kütüphanesini kullanabilmek için Excel’in yüklü olmasına bile gerek yok. Ayrıca kullanımı da oldukça kolay. Hemen Nuget paket yöneticisini açıp IronXL araması yapıp çıkan sonuçlardan IronXL.Excel kütüphanesini projeye ekleyelim. Excel’in C#’taki karşılığı DataSet ve DataTable. Excel’in hepsini DataSet içinde, Excel’in her bir sayfasını (Worksheet) DataTable içerisinde rahatlıkla tutabiliriz. İşte IronXL kütüphanesinde de Excel’i doğrudan DataSet içerisine aktarma yapılabiliyor ve sadece 1 satırda yapılabiliyor. Ne kadar kolay değil mi 🙂 Excel’in hepsini DataSet içerisine aktaracağız fakat bizim verisetimizde 1 sayfa var, o yüzden DataSet içerisindeki ilk DataTable’ı almak yeterli olacaktır. C#’ın özelliklerinden faydalanılarak DataSet’in içerisindeki DataTablelara rahatlıkla ulaşabiliyoruz.

Excel’i DataSet’e, oradan da Linq özelliklerini kullanarak doğrudan Veriseti sınıfına doldurabileceğiz. Lafı uzatmadan kodumuzu yazalım;

class Dosya : IDosya
{
    internal Dosya(string yol) => DosyaYolu = yol;
    internal override Veriseti ExceldenOku()
    {
        Veriseti set = new Veriseti();
        set.AddRange(WorkBook.Load(DosyaYolu).ToDataSet(true).Tables[0].AsEnumerable().Select(x => new Veri
        {
            X1 = Convert.ToDouble(x[0]),
            X2 = Convert.ToDouble(x[1]),
            X3 = Convert.ToDouble(x[2]),
            X4 = Convert.ToDouble(x[3]),
            X5 = Convert.ToDouble(x[4]),
            X6 = Convert.ToDouble(x[5]),
            X7 = Convert.ToDouble(x[6]),
            X8 = Convert.ToDouble(x[7]),
            Y1 = Convert.ToDouble(x[8])
        }).ToList());
        return set;
    }
}

Yalnız şöyle bir hatırlatma yapmak isterim ki, AsEnumerable() fonksiyonu System.Data.DataSetExtensions kütüphanesi altında bulunan bi eklenti (extension) fonksiyonu ve bilgisayarınızda kurulu olmayabilir. AsEnumerable() fonksiyonunda hata vermesi haline Nuget paket yöneticisi ile System.Data.DataSetExtensions kütüphanesini kurmanız gerekmekte. Fakat kütüphaneyi kurduktan sonra bile kütüphaneye erişim sağlayamayacaksınız çünkü bu kütüphane System.Data kütüphanesine ait eklenti fonksiyonları barındırıyor ve eklenti fonksiyonlarının kütüphanelerine doğrudan erişim sağlanamıyor. Yani sayfanın başında using System.Data.DataSetExtensions; gibi bi kod satırı yazmamanız gerekmiyor, ki yazsanız da hata verecektir 🙂

Evet bu yazımızı da burada bitirelim, bir sonraki yazıda kaldığımız yerden devam ederiz inşallah. Tüm seriye buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu