AI Labs olarak başta görüntü anlamlandırma olmak üzere çeşitli yapay zeka çözümleri geliştiriyoruz. Geliştirdiğimiz yapay zekayı yüksek doğrulukta eğitmek için çok fazla veriye ihtiyacımız oluyor. Yapay zekada veri olmadan algoritma geliştirmek tek başına yeterli değildir, çünkü veri, yapay zekamızın öğrenmesini sağlayan örnek ve deneyimler demektir.

Peki veriyi nerede buluruz?

DOMO nun raporuna göre hergün 2.5 katrilyonun üzerinde veri oluşturuluyor. 2020 yılına gelindiğinde , dünyadaki her insan için her saniye 1.7 MB veri üretileceği tahmin ediliyor. Bu istatistiklere baktığımızda aslında veriyi çok uzaklarda aramamıza gerek yok: internet bizim için en kapsamlı veri kaynağı olacaktır.
İnternette pek çok yapay zeka algoritması bulabilirsiniz ama düzenlenmiş veri setlerini bulmak çok zordur. Hazır veri setleri yetersizdir ve ihtiyacımız olan verinin çok büyük bir kısmı da yapılandırılmamıştır. Bu durumda kendi veri setimizi oluşturmamız gerekir. Bunu iki aşamada yapabiliriz: Öncelikle ham veriyi toplamak (web scraping), daha sonra topladığımız veriyi kullanım amacımıza göre yapılandırmak (data cleaning).

Bu aşamalardan bahsetmeden önce veri türlerine bir göz atalım. Bu bağlamda bizim için anlamlı olan iki tür veri mevcut: Yapılandırılmış veri ve yapılandırılmamış veri.

Yapılandırılmamış veri vs. yapılandırılmış veri

Yapılandırılmamış veri ham veridir. Sensörlerden gelen veriler, sesler, videolar, sosyal medya gönderileri gibi aklınıza gelebilecek her tür veri yapılandırılmamış veridir. Kullanım açısından bizim için çoğu zaman kullanıma hazır değildir. Bu durumda bizim bu verileri kullanıma uygun hale getirmemiz gerekiyor. Yani veriyi amacımıza uygun olarak şekillendirmeliyiz. İşte amacımıza uygun şekillendirdiğimiz bu veriye yapılandırılmış veri diyoruz. Tanım yapmak gerekirse, hepimizin kullanmaya alışkın olduğu, biçimlendirilmiş, belirli bir amaca yönelik düzenlenmiş verilerdir. Yani yapay zekamızı eğitmek için kullanacağımız verilerdir.

Veriyi toplamak: Web scraping

Şimdi gelelim veri toplamaya.

Bir web sitesi mevcut ve siz buradaki verileri indirmek istiyorsunuz. Binlerce web sayfasını ziyaret ederek her sayfadaki verileri tek tek kaydetmek çok eğlenceli olmayacaktır. Bu sıkıcı işi otomatikleştirerek daha eğlenceli hale getirebileceğimiz işleme web scraping diyoruz.

Örnek üzerinden gidecek olursak; AI Labs olarak perakende sektörüne yönelik geliştirdiğimiz bir yapay zeka çözümü var, mağaza içi müşteri istatistiklerini toplayarak mağaza yöneticilerinin müşterilerini daha yakından tanımasını sağlayan bir yapay zeka çözümü. Bu yazılım ile müşterilerin yaş, cinsiyet, kıyafet türü ve kıyafet rengi gibi verilerini toplayabiliyoruz. Bu yapay zekayı yüksek doğrulukla eğitmek için çok miktarda kıyafet görseline ihtiyacımız vardı. Biz de çevrimiçi kıyafet satan büyük web sitelerinden görsel örnekleri topladık; 74000 görsel ve bunların meta verilerini, yani üst bilgilerini yazdığımız birkaç satır Python kodu sayesinde tek bir .csv dosyasına kaydettik. Yaptığımız bu işleme web scraping diyoruz.

Web scraping için pek çok araç mevcut. Bunlardan kullanımı en kolay olanlardan biri Chrome eklentisi olarak yükleyebileceğiniz Grepsr aracıdır. Basit bir kontrol paneli vardır. Yükleme işlemini tamamladıktan sonra Chrome tarayıcınızın sağ üst köşesinde g işareti olacaktır. Buna tıkladığınızda adres çubuğunun altında bir araç çubuğu açılır, veri indirmek istediğiniz web sitesine gelerek açılan araç çubuğundan gerekli etiketleri oluşturup indirmeye başlayabilirsiniz.

Ve tabii Python geliştiricileri için de web scraping amacıyla kullanabilecekleri harika araçlar mevcut. Bu yazıda yaygın olarak kullanılan birkaç Python paketinden bahsedeceğim.

Python geliştiricileri için web scraping araçları

Requests bir HTTP kütüphanesidir. Web sitesine kolayca erişmek için kullanırız. Bu paketi kullanarak kendi scraping mantığınızı geliştirebileceğiniz gibi daha gelişmiş araçların arka planında kullanıldığı için de önemlidir.

Beautiful Soup oldukça gelişmiş bir ayrıştırma kütüphanesidir. Ayrıştırıcı, HTML ve XML belgelerinden istediğimiz konumdaki veriyi çıkarabilen bir araçtır. Beautiful Soup aracının sunduğu basit Python ifadelerini kullanarak metin formatında aldığımız HTML veya XML belgesi üzerinde döngüler, aramalar ve değişiklik işlemlerini kolayca yapabiliriz.

Lxml de diğer bir ayrıştırıcı kütüphanesidir. Beautiful soap'a göre daha performanslı çalışır ve daha esnektir.

Bu iki kütüphane birbirlerinin kullanımını destekliyor. 'Hangisini seçeceğim' diye düşünmenize gerek kalmıyor. Basit ve kullanımı kolay kütüphanelerdir. Birini öğrendiğinizde diğerini öğrenmeniz de kolaydır.

Web scraping gibi performans ve karmaşık algoritmalar gerektiren iler için çoğu zaman Requests kütüphanesi yeterli olmayacaktır. Böyle bir durumda daha güçlü bir araca ihtiyacımız olur. Selenium böyle durumlarda kullanabileceğiniz bir kütüphane. Selenium bir web sürücüsüdür, yani tarayıcıyı otomatikleştiren bir araçtır. Python binding'leriyle birlikte gelir, yani selenium'u python kodunuzda doğrudan kullanabilirsiniz. Entegrasyonu da oldukça kolaydır.

Ve gelelim web scraping işinin uzmanı Scrapy'a. Scrapy, eksiksiz bir web scraping çözümüdür. Kullanıcı oturumlarını otomatikleştirmek, istekleri yönetmek, http yönlendirmelerini takip etmek,, çıkış hatlarını idare etmek ve sayfadan çıkarılan verileri çeşitli veritabanı ya da dosya türlerine kaydetmek gibi pek çok işlemi oldukça basitleştirir.

Veri setimizi oluşturmak için ilk adımı tamamladık. Gelelim ikinci adıma.

Toplanan veriyi kullanıma hazırlamak: Data cleaning

Şimdi topladığımız veriyi kullanım amacımıza göre temizlememiz gerekiyor. Yine verdiğimiz örnek üzerinden gidecek olursak; kıyafet görsellerini topladık, ama içerisinde ihtiyacımız olmayan kısımlar var, örneğin iç çamaşırı görselleri. Mağazaya gelen müşterinin görüntülerinden nasıl bir iç çamaşırı giydiğini tespit edemeyiz, değil mi? Dolayısıyla bu bizim için gereksiz bir veri oluyor. Ya da bazı görsellerin üst bilgileri eksik örneğin, gerekli bilgiler açıklama bölümünde uzunca bir metin içinde rastgele bir yere yazılmış, bunları ayıklamamız gerekiyor. Bizim örneğimizde açıklama metni içine saklanmış bazı verileri çıkarmak için doğal dil işleme tekniklerinden faydalandık, yani veriyi yapay zekayı eğitebileceğimiz hale getirmek için başka bir makine zekasından faydalandık. İşte tüm bu işlemlerin geneline veri temizleme diyoruz.

Veri temizleme işlemi, veriyi amacımıza yönelik yapılandırmamızı sağlar. Genel olarak veri temizleme işlemini aşamalandıracak olursak;

  • Veri formatlarının düzeltilmesi
  • Eksik değerlerin doldurulması ve/veya eksik değerlere sahip satırların/sutunların silinmesi
  • Kategorilerin standartlaştırılması
    diyebiliriz.

Tabii ki veri temizleme işlemi için de kullanabileceğimiz çok çeşitli araçlar mevcut. Bunlardan da yaygın olarak kullanılanlarından bahsetmek istiyorum.

Veri temizleme araçları

RapidMiner, en çok kullanılan veri temizleme araçlarından biridir. Bunun sebebi ise veri madenciliği sürecinin tüm adımlarını destekleyen bir yazılım olması ve tabii ki sürükle bırak mantığıyla çalışan kolay bir arayüzü olmasıdır. Ayrıca otomatik veri temizleme özelliği mevcuttur.

Orange da yine sık kullanılan bir veri temizleme aracıdır. Veri görselleştirmek ve analiz etmek için çok kullanışlı bir araçtır. Dağılım grafikleri, çubuk grafikler, ağaçlar, dendrogramlar, ağlar ve ısı haritaları gibi farklı görselleştirmeler sunar.

Pandas, performanslı ve kullanımı kolay veri yapıları ve veri analiz araçları sağlayan bir Python kütüphanesidir. Veri manipülasyonu için hızlı ve verimli DataFrame nesnesini oluşturur. Özellikle birçok farklı kaynaktan verileri okuyup hepsi için aynı DataFrame yapısını sunması çok değerlidir. Veri kümelerinin esnek bir şekilde yeniden dönüştürülmesini ve şekillendirilmesini sağlar. Zaman serisi işlevselliği ile tarih aralığı oluşturma ve frekans dönüştürme, hareketli pencere istatistikleri, hareketli pencere doğrusal regresyon, tarih kaydırma ve gecikme gibi işlemleri yapabilirsiniz.

Scikit Learn Python ile geliştirilmiş çok kapsamlı bir ön işleme kütüphanesidir. Diğer ortak kütüphanelerden gelen bazı yararlı fonksiyonlarla desteklenmiş olduğundan tüm yardımcı fonksiyonları ve dönüştürücü sınıflarını içerir. Aynı zamanda temel makine öğrenmesi ve istatistik algoritmalarını veri üzerinde çalıştırmanızı sağlar. Bu sayede verileri gruplayabilir, mean, median, outlier gibi istatistiksel çıkarımlar yapmak mümkündür.

Tüm bunlar ne işime yarayacak?

Yukarıda anlatılan araçlar ve süreçler karmaşık ya da sıkıcı gelebilir ancak hepsi ortak API'ları kullandığı için birini öğrendiğinizde diğerlerini öğrenmek kolay olacaktır. Gelişen dünyada veri yeni petroldür. Ne kadar veriniz varsa ve bu veriyi ne düzeyde anlamlandırabiliyorsanız o kadar güçlüsünüz demektir. Tüm bunlar göz önüne alındığında uğraşmaya değer olduğunu düşünüyorum.