-

Angular Js’de Module ve Controller Kavramları

Önceki yazımda Angular Js ile ilgili genel bilgiler paylaşarak küçük bir uygulama ile giriş yapmıştım. Bu yazıda module ve contoller kavramları üzerinde konuşarak yine basit bir uyglama ile pekişmesini sağlamayı hedefliyorum.

Uyglamanın Angular Js olarak derlenebilmesi için ng-app direktifinin eklenmesi gerektiğinden bahsetmiştim. Uygulamaya sadece ng-app yazarak Angular Js kodu geliştirebiliyoruz ancak yapabileceklerimiz sınırlı olacaktır. Fonksiyonel işler yapabilmek için module ve controller oluşturma ihtiyacı duyarız. Module dediğimiz aslında diğer uygulamalardan bildiğimiz Main() fonksiyonu gibidir.

Module aşağıdaki gibi tanımlayabiliriz;

var myApp=angular.module(‘nameApp’,[]);

Modülümüzün ismi nameApp, html tarafında ng-app=”nameApp” şeklinde kullanıyor olacağız.  Modül tanımındaki ikinci parametre array dir, dependency injection için kullanılabilir.Bir modülün başka bir modül ile bağımlılığı varsa bu alana yazılır, benim göstereceğim örnekte böyle bir durum olmadığından boş bırakıyorum.

Fonksiyonel işler yaptırmak için controller’a ihtiyacımız olacaktır, js tarafında bunun tanımını aşağıdaki gibi yapabiliriz;

myApp.controller(‘NameCtrl’,function($scope) {}

Böylece myApp modülünün controllerının NameCtrl olduğunu belirtmiş olduk, {} bloğu içerisine yapılmasını istediğimiz işleri yazıyoruz. $scope ise objemiz, bu objeye attribute lar atayabiliyoruz, örneğin aşağıdaki gibi names isminde bir array verebiliriz. names ise bizim modelimiz yani datamız olacaktır. Burada tanımladığımız özellikleri html tarafında kullanabiliyoruz. Tanımlanan NameCtrl ismindeki controller html tarafında ng-controller=”NameCtrl” şeklinde kullanılır. Controller ismi yanlış yazılırsa, controller’ı çağıramamış olur, console log a hata basar ve görüntülenmek istenen bilgileri yazıldığı gibi {{   }} içerisinde gösterir.

myApp.controller(‘NameCtrl’,function($scope) {

$scope.names=['Derya','Gunduz','Ozmen'];

});

Js Kodu;

angular1

Html kodu;

angular2

Html kodu içerisnde ng-repeat direktifi kullandım, bu direktif c# daki foreach gibidir, names ismindeki modelimiz içerisinde gezer ve her bir elemanı name olarak adlandırır, name elamanını ekrana liste şeklinde yazdırır. ng-repeat direktifi kullanarak oluşturduğumuz döngünün eleman indexlerini $index ile bulabiliriz, eğer nested, içiçe, döngü yaptıysanız üst indexi $parent.$index şeklinde bulabiliriz. Yani ng-repeat direktifi altında herhangi bir yere $index yazarsak elemanların indexini elde etmiş oluruz.

Çıktısı;

angular3

Göstermiş olduğum örneğin kodlarını aşağıdaki codepen linkinden inceleyebilirsiniz.

http://codepen.io/deryagunduzozmen/pen/ZeONvy

Kaynalar:

  1. https://github.com/curran/screencasts/tree/gh-pages/introToAngular
  2. https://angularjs.org
  3. https://www.youtube.com/playlist?list=PL6n9fhu94yhWKHkcL7RJmmXyxkuFB3KSl
  4. https://www.youtube.com/watch?v=ejBkOjEG6F0#t=34.11219
  5. http://csharp-video-tutorials.blogspot.com.tr/2015/11/angularjs-tutorial-for-beginners.html

Doktora’ya Başladım…

Merhaba Arkadaşlar,

Çok uzun zamandır blog yazısı yazmıyordum ama ara ara hem kendimle ilgili update geçmem gerektiği hem de çalıştığım konular ile ilgili yazılar yazmam gerektiğini tekrar hatırladım :)

Yüksel lisansı İstanbul Üniversitesi Bilgisayar Mühendisliği’nde yaptım, bitirdikten sonra herkes sormaya başladı ne zaman doktoraya başlıyorsun diye. Doktora biraz ürkütüyordu beni açıkçası ama araya çok da zaman girmeden başvurayım dedim. Bu dönem İstanbul Üniversitesi Bilgisayar Mühendisliği Doktora programına kabul aldım..Blog takipçilerim ile paylaşmaktan mutluluk duyuyorum :)

Derslere geçtiğimiz hafta başladık, iş ile birlikte götürmek biraz zor olacak ama doktorayı tamamladıktan sonra üniversitelere gidip ders vermek istiyorum. Çünkü sektör ile Üniversiteler arasında çok büyük bir uçurum olduğunu düşünüyorum. Gerçek dünyadan projeler ile ders anlatmak öğrencilerin de daha çok hoşuna gidecektir eminim…

Yüksek lisans’a devam ederken uluslararası konferanslara katılıp sunum yapmıştım, doktora için de böyle hedeflerim var.

Yoğun ve yorucu bir dönem beni bekliyor :)

Kitap Paylaşım Kampanyası

Geçen gün kitaplığımı toplarken programlama ile ilgili ve üniversite zamanından kalma kitaplarım olduğunu ve uzun zamandır kitapları hiç açmadığımı farkettim. Sonra düşündüm ki kitaplar tozlu raflarda kalmasın birilerinin işine yarasın… Linkedin profilimde böyle bir düşüncem olduğu ve isteyen arkadaşlara kitapları hediye edeceğimi paylaştım. Şimdiye kadar 4 -5 kitap yolladım ama çok fazla mesaj aldım.  Farklı platformlarda benzer şekilde çalışma yürüten arkadaşalar, okullardan hocalar bana ulaştı. Benimkisi tabi kendi çapımda yürttüğüm bir kampanya ama paylaşarak istedim ki başkalarına da ilham olsun…Hatta ara ara kitap satın alıp hediye etmeyi düşünüyorum, özellikle öğrenci arkadaşlara. Paylaşmamın ve bloğumda yer vermemin sebebi bakın ben ne kadar iyi insanım, kitaplarımı hediye ediyorum değil tabi ki   :) Aklınıza gelmemiştir belki böyle bir şey yapmak, sizler de düşünün ve paylaşın istiyorum…

Paylaşmak güzeldir :)

 

linkedin

 

Nuget Nedir, Nasıl Eklenir?

Nuget; ücretsiz, açık kaynak, third party programlar ya da dll leri projemize eklemek için tasarlanmış bir paket yöneticisidir. Nuget teknolojisi hayatımıza Visual Studio 2010 ile girdi, Visual Studio 2012’den sonraki versiyonlarda default olarak yüklü gelir. Microsoft’un yayınlamış olduğu nuget paketleri indirip kullanabiliyor olmamızın yanında kendi nuget paketimizi oluşturup kullanıma açabiliriz, yazının devamında, örnek bir nuget paket oluşturup nasıl yayınlanabileceğini anlatıyor olacağım.

Visual Studio’da nuget kurulu değilse Tools->Extensions and Updates’den girerek aşağıdaki gibi kurulumu yapılabilir. Yukarıda da belirttiğim gibi Visual Studio 2012’den sonrasında Nuget kurulu gelir.

blog1

blog2

Çalıştığımız projeye ihtiyacımız dahilinde nuget paketi yükleyebiliriz. Solution ya da projeye sağ tıklayıp “Manage Nuget Package” dedikten sonra açılan yönetim ekranından istediğimiz paketi aşağıdaki resimlerde olduğu gibi ekleyebiliriz, örnek olması açısından Asp.net SignalR paketini projeye ekledim.

blog3

blog4

Alternatif olarak Package Manager Console’dan komutlar yazarak nuget paketler yükleyebilirsiniz.

blog5

Eklediğimiz paketi aşağıdaki gibi kontrol edebiliriz;
blog6

References bölümünden eklediğimiz paketin dll’ini görebiliriz;
blog7

Kendi Nuget Paketimizi Ekleme

Nuget, paket yönetimi teknolojisinden genel olarak  bahsettikten sonra kendi paketimizi nasıl oluşturup yayınlarız ona bakalım;

Kendi Nuget paketimizi oluşturmak için Nuget Package Explore’a ihtiyacımız olur. Buradan indirebilirsiniz. Hızlı kurumlumdan sonra uygulamayı açıp kendi nuget paketimizi oluşturmaya başlayabiliriz. “Package Contents” alanına “add existing file” deyip varolan dll’i nuget paketimize ekleyebiliriz. Örnek olması açısından herhangi bir dll’i pakete ekliyorum.

blog8

Paket ile ilgili bilgileri aşağıdaki gibi doldurup masaüstünde bir yere .nupkg uzantısı ile kaydediyoruz;

blog9

Nuget.org’a üye olup giriş yaptıktan sonra, “Upload Package” sekmesinden masaüstüne kaydettiğimiz .nupkg dosyasını yüklüyoruz. Eğer paket adını değiştirmeden yüklerseniz aşağıdaki gibi hata alırsınız, ben aldım ordan biliyorum  :)

blog10Kaydedilen nuget paketi yüklenip “Upload” denir.

blog11

Yükeleme işlemi tamamlandıktan sonra aşağıdaki gibi paket bilgilerini görebiliriz.  Böylece kendi nuget paketimizi yayınlamış olduk.

blog12

 

Yayınlamış olduğumuz paketi projede kullanmak için  Package Manger Console’da “Install-Package DeryaNugetPackage” komutu çalıştırılır, komut başarı ile çalışırsa projemize nuget paketi yüklemiş oluruz.

blog13

Nuget paketin eklendiğini aşağıdaki gibi kontrol edebiliriz;

blog14

Eğer şirket işi uygulamalar için kullandığınız, oluşturduğunuz paketleri dışarı açmak istemezseniz kendi repository’nizi oluşturup belirlediğiniz alana ya da lokale nuget paketleri publish ederek kullanabilirsiniz…

Expinter.com için verdiğim röportaj yayında…

Merhaba,

Adem Aktan isimli öğrenci arkadaşım bana linkedin üzerinden ulaşarak, röportaj yapmak istediğini iletti, ben de kabul edip sorularını cevapladım. Bir süre sonra bunu bir girişime dönüştürerek expinter.com‘u kurduklarını söyledi, benim röportajımı da burada yayınlamışlar. Öncelikle kendilerini tebrik eder, başarılarının devamını dilerim…Destek amaçlı bloğumda paylaşmak istedim…

Bana aşağıdaki sorular yöneltidi, cevapları merak ederseniz buradan bakabilirsiniz :)

 

Öncelikle bizlere kendinizden biraz bahsedebilir misiniz ?

Kıdemli Yazılım Mühendisi ne iş yapar ?

ING Bank’ta Kıdemli Yazılım Mühendisi olarak görevleriniz nelerdir ?

Yazılıma ilgi duyan ve yazılım alanında kendini geliştirmeye yeni başlayan öğrencilere hangi programlama dilinden başlamasını önerirsiniz ve sebebi nedir ?

İzlenimlerinize göre sektörde geçerliliği olan programlama dilleri nelerdir ?

Bilgisayar Mühendisliği bölümünden mezun oldunuz. Eğitimini Bilgisayar Mühendisliği bölümünde sürdüren öğrencilere gelecekte hangi bölümde yüksek lisans yapmasını tavsiye edersiniz ?

Ve son olarak bu işe yeni başlamış yazılımcılara hangi kitaplara göz atmasını önerirsiniz ?

Ericsson’dan Ing Bank’a Transferim

Şubat 2013’de çalışmaya başladığım Ericsson’dan Ekim 2015’de ayrıldım. Ericsson’da VodafoneNet CRM projesinde Software Developer olarak çalıştım. VodafoneNet CRM projesinde, web tabalı, Ericsson’un telekomünikasyon ürünü olan Emptor Telco kullanılıyor. Projede ekran ve akış tasarımları Tigris Studio ismindeki frameworkün xml tabanlı tool unda geliştiriliyor, arka taraf kodları da  .Net teknolojisi kullanılarak Visual Studio’da geliştiriliyor. Projede yeni akış, süreç, ekran geliştirme, canlı sistemden gelen problemlerin çözümü, müşteri operasyon ekiplerine destek gibi bütün alanlarda belirli sürelerde çalıştım. Çalışmaya başladığım ilk 1,5 sene müşteri ortamında Vodafone Plaza, Maslak’da çalışıyorduk daha sonra teknokent Arı2′de, Ericsson’un kendi ofisinde çalıştım, tabi yine ara ara destek olmak için müşteri ortamında çalışıyordum. 2,5 senenin sonunda Ericsson’dan ayrılmak benim için zor oldu fakat kariyerimi daha ileri taşıyabilmek için ayrılma kararı almıştım. Ekip arkadaşlarım, kendi yöneticim, Ericsson Arge’deki yöneticilerimden çok güzel geri bildirimler aldım, desteklerini hissetmek ve her zaman kapının açık olduğunu duymak mutluluk vericiydi. Ericsson çalıştığım ilk büyük kurumsal firma idi. Ericsson’da akademik çalışmalar destekleniyor, Ericsson’da çalıştığım süre boyunca yaptığım iş ile hiç alakası olmayan iki tane uluslararası konferansa katıldım. Ericsson sponsor olup masraflarımın bir kısmını karşıladı. Hatta hiç unutmam(biraz arabesk oldu, farkındayım) yüksek lisans tez sunumu için dış Üniversete’den hoca davet etmiştim, sunum Avcılar kampüsünde idi, şık olması açısından jürideki hocamı araba ile aldırmam gerekiyordu, araba mı kiralasam acaba ama kullanacak kimse yoktu :) kara kara düşünürken Ericsson R&D Specialist Arda Güreller’e konuyu açtım, sunum günü hocamı almam için araç tahsis etmişlerdi, çok az şirket yapar bunu gerçekten. Akademik çalışmalarımdaki maddi manevi desteklerinden dolayı Ercisson R&D Director Fatma Özdemir ve R&D Specialist Arda Güreller’e özel teşekkürler ederim. 2,5 sene boyunca çok güzel tecrübeler edindim, güzel insanlarla çalıştım. Bütün ekip arkadaşlarıma ve yöneticilerime tekrardan herşey için çok teşekkürler…

 

Ekip arkadaşlarımın benim için organize ettikleri veda yemeği

Ekip arkadaşlarımın benim için organize ettikleri veda yemeği

Gelelim sonrasına :) Telekomünikasyon sektörünü çok sevmiştim aslında ama aynı sektörde uygun bir pozisyona denk gelemedim. Daha doğrusu iş arama sürecinde sektör bağımsız olarak birçok yer ile görüştüm. Sonuç olarak bütün parametreleri bir arada düşünerek Ing Bank’da çalışmaya karar verdim. Telekomünikasyon sektöründen bankacılık sektörüne nasıl olur acaba diye tedirginliklerim vardı aslında ama yine de denemeden bilemem diye Bankacılık sektörüne adım atmış oldum :)  Ing Bank’da Kıdemli Yazılım Mühendisi olarak başladım, 2 ayım doldu burada. İlk izlenimlerim gayet olumlu, çalıştığım proje xNext isminde, Veripark’ın VeriBranch frameworkü kullanılarak banka sistemlerinin yeni teknolojiye geçişi, ben şube dönüşüm projeleri bölümüne dahil oldum. Birlikte çalıştığım insanları çok sevdim, insan ilişkileri gayet iyi, sıcak bir ortam var, müdürüm ve ürün yöneticim sektörde çok tecrübeliler, onlardan öğrenilecek çok fazla şey var. Proje çok büyük, framework derya deniz, öğrenecek çok fazla şey var ama iş yapmaya başladıkça öğreneceğime ve sürecin büyük kısmına hakim olabileceğime eminim :) Ortam ve birlikte çalıştığım insanlar açısından şanslı hissediyorum. Ofisimiz Ümraniye’de şimdilik tek derdim yol, Çapa’dan Ümraniye’ye gelmek biraz zor oluyor, ama yer değişikliği yapabilirim. Bakalım neler olacak; yeni maceralar, yeni tecrübeler beni bekliyor :)

 

Yüksek Lisans’ı Tamamladım

2013 Nisan ayında İstanbul Üniversitesi Bilgisayar Mühendisliği Yüksek Lisansı’na başladım. 1 sene ders bir sene tez şeklinde idi, Ericsson’da çalışmaya başladığım dönem yüksek lisansa da başlamıştım. İşe yeni başlamış olmamdan ötürü iş yüküm çok fazla değildi, haftada 1 gün okula gidebiledecek şekilde yöneticim ile konuşmuştum, işleri telafi edebilecek şekilde derslere gidebildim. Dersleri tamamladıktan sonra tez aşamasına geçtim. Tez konusuna karar vermek gerçekten çok zor oldu. Tez danışmanım Yrd. Doç. Dr. Emel Arslan ile her görüşmemizde ortaya çok farklı şeyler çıkıyordu, uzun bir süre konu ve içeriğine karar verememiştim. Yüksek Lisans derslerinden “Yapay Zeka”da bir araştırma konusu seçmemiz istenmişti ben de merak ettiğimden İş Zekası ile ilgili araştırma yapmıştım, literatür taraması yaparken ders hocam Yrd. Doç. Dr.  Zeynep Orman ile literatürün bu konuda eksik olduğunu farkettik. Araştırma yaparken yeterli kaynak bulamamıştım. İlerleyen zamanda Bt Akademi’den “Sql Server 2012 ile İş Zekası Uygulamaları” konulu 3 aylık bir eğitim aldım, pratik anlamda bu konuda bir şeyler öğrenme şansına sahip olmuştum. Kapsamı çok belli olmasa da tezimde  İş Zekası üzerine çalışma düşüncesi oluşmuştu. Bu arada Zeynep Hoca’nın motivasyonu ile akademik makale yazma ve uluslararası konferanslara gönderme ilgim oluştu, sanırım yüksek lisans boyunca yaptığım en iyi şey uluslararası konferanlara katılmak oldu. Bloğumda ayrıntılı paylaşmıştım Ağustos 2014’de San Francisco’da Mayıs 2015’de Roma’da makale sunmak üzere konferansa katıldım, çok ciddi tecrübeler edindim. Bu yazdığımız makaleler de yine İş Zekası Uygulamaları ile ilgiliydi. Bunları da baz alarak tez çalışmamda İş Zekası’nın teoriğinden başlayıp, bileşenleri le ilgili örnek uygulamaları içeren ve devamında Pazar sepeti analizini dahil eden bir çalışma yaptım.Tezimi 1,5 senede tamamladım, çok kapsamlı bir çalışma oldu. Mayıs 2015′de  “İş Zekası Uygulamaları ve Pazar Sepeti Analizi”  başlıklı tezimi Yrd.Doç.Dr. Emel Arslan, Prof.Dr. Ahmet Sertbaş, Doç.Dr. Atakan Kurt, Yrd.Doç.Dr. Gülfem Işıklar Alptekin ve Yrd.Doç.Dr. Zeynep Orman’dan oluşan jüriye sundum. Gülfem Hoca ile Galatasaray Üniversitesi’nden aldığım MIS eğitimi sırasında tanışmıştım, davetimi kırmayıp tez jürime dahil oldu. Tez savunması sırasında jüri biraz terletti, biraz da  zorlandım fakat tezim kabul edildi :) Aslında tezimin içeriğini parça parça bloğumda paylaştım, ilgilenenler için tamamını pdf versiyonu olarak paylaşmayı planlıyorum. İş Zekası ve Pazar Sepeti Analizi konusunda çalışma yapanların ihtiyaç duyabileceği bilgileri içeriyor olabilir. Tezin kabul edilmesi ile bir dolu prosedürden sonra resmi olarak Hazirna 2015 de Bilgisayar Mühendisliği Yüksek Lisans’dan mezun oldum. Yüksek lisansdan sonra doktoraya başlayıp başlamayacağım soruluyor, aslında bazen aklımdan geçiyor, bazen de çok zor geliyor. Ama en azından bir dönem dinlenmek isterim daha sonra duruma bakacağım :) Tezimin içerisinde önsöze eklemiştim ama blog yazımdan da paylaşmak isterim;

Çalışmalarım boyunca kıymetli zamanından ayırarak yardımlarını esirgemeyen, beni yönlendiren tez danışmanım Sayın Yrd. Doç. Dr. Emel Arslan’a, tez çalışması kapsamında hazırladığımız ve uluslararası konferanslarda kabul edilen iki adet akademik makalenin yazılmasında katkıda bulunan İstanbul Üniversitesi Bilgisayar Mühendisliği Öğretim üyesi Sayın Yrd. Doç. Dr. Zeynep Orman’a, konferans katılımıma maddi destekte bulunan İstanbul Üniversitesi Sağlık Kültür Spor Daire Başkanlığı’na, BT Akademi’den aldığım “Sql Server 2012 ile İş Zekası Uygulamaları Eğitimi”ndeki eğitmenim Sayın Resul Çavuşoğlu’na paylaştığı değerli bilgilerden ötürü, Ericsson ARGE’ye verdikleri maddi destek ve bilgi paylaşımından dolayı, sevgili aileme manevi destekleri için teşekkürü borç bilirim.

Derya Gündüz

Adomd.Net

Adomd.Net .Net ile kullanılan Sql Server Analiz Servisleri sağlayıcısıdır. Analiz Servisleri işlemleri için özelleştirilmiş sınıfları (classes) ve arayüzleri (interface) vardır. Visual Basic .Net, C# ve J# dilleri ile kullanılabilir. Adomd.Net veri madenciliği istemci (client) uygulamalarının programlanmasını kolaylaştırmak için klasik Ado.Net arayüzlerinin yanında veri madenciliği ve Olap (Online Analytical Processing) nesneleri içerir.

Adomd.Net Uygulama Örneği

Önceki yazılarımda Dmx sorguları ile daha önceden oluşturulan madencilik modeli üzerinde sorgu çalıştırıp Birliktelik Kuralları çıkarılabileceği örnek sorgular ile anlatmıştım.

Bu bölümdeki uygulama örneğinde  “Microsoft Birliktelik Kuralları” konulu makalemde oluşturulan madencilik modeli üzerinde Dmx sorguları çalıştırılacak, Adomd.Net kullanılarak bir web sitesi üzerinde alınan ürün için nasıl  ürün tavsiyesinde bulunulabileceği öğrenilecektir.

Madencilik modeli üzerinde çalıştırılan Dmx sorgusu kullanılarak Adomd.Net Api yardımıyla bir stored procedure (Sql’de kullanılan veri tabanı objesi) oluşturulacaktır, devamında oluşturulan procedure web sitesi tarafında yine Adomd.Net  Api kullanılarak çağırılacaktır.

Stored Procedure oluşturmak üzere Visual Studio’dan Class Library tipinde proje eklenir. Projeye referans olarak msmgdsrv.dll (Microsoft.AnalysisServices.AdomdServer)eklenir. Bu referans Server Adomd.Net ile ilgili özellikleri barındırır. Başka bir sınıf ekleyip ana metodu Adomd.Net Api kullanılacak şekilde dizayn edilir, bu işlem için Microsoft.AnalysisServices.AdomdClient.dll referansı eklenir.Devamında Adomd.Net bağlantısı kurulup Dmx sorgusunun çalıştırılması gerekmektedir. Dmx sorgusu sonucunda erişilen sonuç kümesi verilen ürün ile alınabilecek ürünlerin listesini verir. İlk eklenen Class1 içerisinden Class2 içerisindeki ana metodun çağrısı Server Adomd.Net Api özellikleri kullanılarak yapılır, Class1’den Class2’deki metodu çağıran kod bloğu aşağıdaki gibidir.

adomd1

Class2 içerisinde Adomd.Net Api özellikleri kullanılarak bağlantı yapılır, Dmx sorgusu eklenir ve sonuç kümesine erişilir. Kod bloğu aşağıdaki gibidir;

adomd2

Hazırlanan kod derlendikten sonra projedeki bin klasörü içinde proje adı ile bir dll (Dynamic Link Library) oluşacaktır. Bu dll’in madencilik modelinin referanslarına eklenmesi gerekmektedir. Sql Server Management Studio’ya Server Type olarak “Analysis Services” seçilip bağlanıldığında, Analiz Servisleri kapsamında yapılan çalışmalar yayınlanmış ise bu kısıma proje olarak eklenmiş olduğu görülebilir. Oluşturulan madencilik modelinin olduğu proje bulunup oluşturulan dll bu projenin “Assemblies” tabı altına eklenmelidir. Sql Server Management Studio üzerinden yeni referans ekleme ekranı Şekilde1’de gösterildiği gibidir. “ThesisAssociationExample” ismindeki proje altında eklenen veri kaynakları, veri kümleri ve Eklenen Association ismindeki madencilik modeli Şekil 1’den görülebilir. Şekil 1’deki projenin “Assemblies”  tabına yeni bir referans eklenebilir, bu örnek için oluşturulan SSASSP ismindeki referans eklenir.

Şekil1:Yeni referans ekleme ekranı.

Şekil1:Yeni referans ekleme ekranı.

Bu uygulama ile elde edilmek istenen; GetAssociatedProd metoduna 1 adet ürün modeli parametresi verilerek o ürün ile satın alınabilecek ürünler bilgisine ulaşmaktır. Sql Server Management Studio üzerinden Dmx sorgusu kullanarak oluşturulan stored procedure’ü çağırma işlemi aşağıdaki gibi gerçekleştirilebilir.

CALL [SSASSP].GetAssociatedProd(“ML Headset”)

Bu çağrı sonucundaDmx sorguları ile yapılan örnek uygulamalarda olduğu gibi; ML Headset ürününü satın alan müşterinin bununla birlikte alma olasılığı olan ilk 3 ürün ve bunlara ait olasılık değerlerini vermektedir.

Buraya kadar olan kısımda web sitesi üzerinden öneri yapmak için gerekli alt yapı sağlamış oldu. Bu bölümde ise oluşturulan procedure’ü kullanarak alınan ürüne istinaden öneride bulunulacaktır.

Bu işlemi denemek üzere AdventureWorks veri tabanı kullanılarak oluşturulan Asp.Net projesindeki tasarım ve şablon kullanılarak öneri sisteminin simülasyonu yapılmıştır [2]. Web sitesi genel bir alışveriş sitesi mantığı ile yapılmıştır; ürünler listelenir, kullanıcı ürünü seçip sepetine atar ve daha sonra ödemeyi yapıp ürünü satın alır. Makale kapsamında alınan ürüne göre kullanıcıya alabileceği ürünler gösterilecektir.

Web sitesinin satın alınabilecek ürünleri gösterdiği basit ara yüzü Şekil 2’deki gibidir.

Şekil2: Web sitesinde ürün listesinin gösterildiği ekran.

Şekil2: Web sitesinde ürün listesinin gösterildiği ekran.

Birliktelik Kuralları’nın çıkarılıp web sitesi üzerinden öneride bulunma kısmında yine Adomd.Net Api kullanılarak bağlantılar oluşturulur, Dmx sorgusu ile oluşturulan procedure çağırılır, bu işlem için eklenen kod bloğu aşağıdaki gibidir:

adomd3

Ürünü sepete eklemek için Add to Cart (Sepete Ekle) denmelidir ve alışveriş sepetinin görülebildiği sayfaya yönlenir, bu sayfada seçilen ürün ile alınabilecek ürünler ve olasılık değerleri listelenir, alışveriş sepeti sayfası Şekil 3’deki gibidir, temsili olarak bu ürünler için tablo eklenmiştir. Çıkan sonuca göre Hitch Rack- 4 – Bike modelindeki aksesuarı alan bir müşterinin Sport- 100 ürününü de alma ihtimali %29 dur, bu yüzden bu ürün müşteriye tavsiye edilebilir.

Şekil3: Pazar sepetindeki ürünlerin ve önerilen ürünlerin gösterildiği web sayfası.

Şekil3: Pazar sepetindeki ürünlerin ve önerilen ürünlerin gösterildiği web sayfası.

Kaynaklar:

[1]   MacLennan, J., Tang, Z., Crivat, B., 2008, Programming Sql Server Data Mining, Data Mining with Microsoft SQL Server 2008, Chapter 16, Wiley Publishing Inc., ISBN: 978-0-470-27774-4, 487-580.

[2]    Mundy, J., Thornthwaite, W., Kimbal, R., 2011, Sql Server 2008 R2 and the Microsoft Business Intelligence Toolset, Wiley Publising Inc., Indianapolis, Indiana, ISBN-13:978-0470640388.

 

 

 

Microsoft Birliktelik Kuralları

Microsoft Birliktelik Kuralı öneri sistemlerinde kullanılmak üzere Sql Server’ın Analiz Servisleri tarafından sağlanan bir çeşit birliktelik kuralıdır. Öneri sistemleri müşterilerin daha önce yaptıkları alışverişlere bağlı olarak ürün satın almaları için tavsiyede bulundukları sistemdir. Microsoft Birliktelik Kuralı, pazar sepeti analizlerinde kullanılan faydalı bir yöntemdir. Microsoft Birliktelik Kuralı Apriori Algoritması’nı kullanmaktadır.

Microsoft Birliktelik Kuralı’nın nasıl çalıştığını, projeye nasıl entegre olduğunu göstermek için Sql Server Tutorial’dan alıntılanan örnek uygulamayı anlatacağım. Microsoft Birliktelik Kuralı örneğini uygulamak için Sql Server Data Tools geliştirme aracından yeni proje eklenir. Şekil 1’de görülen yeni proje ekleme ekranı açıldığında “Business Intelligence/Analysis Services” altındaki “Analysis Services Multidimensional and Data Mining Project” ismindeki proje tipi seçilir.

Şekil1

 

Bütün iş zekası uygulamalarında olduğu gibi bir veri kaynağına ihtiyaç duyulur. Veri kaynağı eklenmeye çalışıldığında karşımıza wizard (sihirbaz) ekranı çıkacaktır. Sihirbaz ekranı ilerletildiğinde yeni veri kaynağı eklenebilecek Şekil 2’deki ekran açılır.

Şekil2

 

Şekil 2’deki “Solution Explorer” bölümünde görüldüğü gibi veri kaynağı ekledikten sonra ilgili tabloları çekmek üzere kullanılacak veri kaynağı görüntülerini (data source views) eklemek gerekmektedir. View (sanal tablo) ’leri eklemek için “Data Source Views”e sağ tıklayıp “New Data Source View” seçilir. Açılan Şekil 3’deki sihirbaz ekranında önceden oluşturulmuş vAssocSeqOrdersvve VAssocSeqLineItems ismindeki view’ler eklenir.

Şekil3

 

Bu aşamada view’lerin içeriğinden bahsetmek faydalı olacaktır. AdwentureWorks Veri Ambarı’nda internet üzerinden alışveriş yapan her kullanıcının kendi sepeti vardır ve alınacak ürünler sepet içerisinde biriktirilir. Pazar sepeti analizleri için her alışveriş sepetindeki ürün küme olarak değerlendirilir ve ürünler arasındaki ilişki sepetteki ürünler arasındaki ilişkiden yola çıkılarak yapılır. Bu yüzden FactInternetSales tablosundan başlayıp diğer tablolar ile ilişkiler kurulur. Eklenen iki view’de kullanılan vDMPrep ismideki view’in Sql sorgusu aşağıdaki gibidir;

sql1

2008 yılındaki satışlar ve satın alma bilgilerini gösteren vAssocSeqOrders view’inSql sorgusu aşağıdaki gibidir;

sql2

2008 yılındaki satışlar için vAssocSeqLineItemsSql sorgusuaşağıdaki gibidir;

sql3

 

 

 

Veri kaynağı olarak kullanılan view’ler eklendikten sonra iki tablo arasındaki bağlantı Şekil 4’deki gibi belirtilmelidir, iki tablodaki OrderNumber kolonu bağlanmalıdır. Bu bağlantının VAssocSeqLineItems’dan vAssocSeqOrdersv olması gerekir.

şekil4

 

Sonraki adımda veri madenciliği yapısı (mining structure) ve modeli seçilmelidir. Şekil 2’de görünen “Solution Explorer” bölümündeki “Mining Model” seçeneği sağ tıklandığında çıkan “New Mining Structure” seçilir. Açılan sihirbaz ekranı ilerletildiğinde farklı madencilik modellerinin seçilebileceği Şekil 5’deki ekran ile karşılaşılır, bu ekranda Microsoft Analiz Servisleri’nin desteklemiş olduğu madencilik modelleri görülebilir, bu örnek için “Microsoft Association Rules” seçilir.

şekil5

 

Birliktelik Kuralları’nda eklenen tablolarda case ve nested tablolar yer almaktadır. Case tablosu müşteri ile ilgili bilgileri içeren, nested tablo ise sipariş ile alakalı bilgi içeren tablodur. Bu yüzden vAssocSeqOrders tablosu case, vAssocSeqLineItems tablosu nested tablo olarak Şekil 6’daki gibi seçilir. Şekil 4’deki OrderNumber kolonu bağlantısı kurulurken nested tablodan case tabloya olmasına dikkat edilmelidir.

Şekild6

 

Case ve nested tabloların seçildiği ekran ilerletildiğinde eğitim verisinin (training data) seçildiği Şekil 7 ekranı açılacaktır. Case tablosundaki OrderNumber, Age, Gender, Region, IncomeGroupkolonları seçilir. Seçilen kolonlar madencilik yapısına dahil edilmiştir anlamına gelir. Pazar Sepeti Analizi her biralışverişte hangi ürünler alındı, kısmı ile ilgilendiği içinCustomerKeykolonunu eklemeye gerek bulunmamaktadır. OrderNumber kolonu anahtar (key) alan olarak seçilmelidir. Case tablosundan Model kolonunu key alan olarak seçip modele dahil edilmiş olur.

şekil7

 

Girdi (input) olarak seçilen alanlar Birliktelik Kuralları oluşturulurken kuralın içinde yer alan bir parametre olacaktır. Yapılan seçimler ile madencilik modeli Şekil 8’deki gibi oluşur, yapıya dahil edilen kolonlar sonradan input’a dönüştürülerek de kullanılabilir.

şekil8

 

Madencilik yapısı eklendikten sonra cinsiyet (gender) bilgisi Input olarak değiştirilir, sonuçları görebilmek için Şekil 9’daki “Mining Model Viewer” bölümü açılır, bu alan açıldığında projenin yayınlanacağı(deploy) bilgisi verilir ve proje yayınlandıktan sonra Şekil 9’daki Birliktelik Kuralları oluşur.

şekil9

 

“Mining Model Viewer” ekranında olasılık (probability) ve güven (support, importance) değerleri verilir, varsayılan (default) olarak olasılık=0.40, güven=0.15 olarak gelmektedir, bu değerler değiştirilerek kullanılabilir. Olasılık değeri 0.40’dan ve güven değeri 0.15’den büyük olan kuralların listesine bakıldığında model ve cinsiyet değerlerini parametre alarak kurallar oluşturulmuştur. Verilen olasılık ve güven değerleri ile 64 tane kural oluşturulmuş, çıkan kurallardan bazıları analiz edilecek olursa;

ML Mountain Tire = Existing, Sport 100 = Existing > Mountain Tire Tube = Existing:

ML Mountain Tire ürünü ile Sport 100 ürününü birlikte alan müşteriler 0.985 olasılık ile Mountain Tire Tube de satın alır.

Road Bottle Cage = Existing, Gender = M > Water Bottle = Existing:

Road Bottle Cage ürünü alan erkek müşteriler 0.890 olasılık ile Water Bottle de satın alır.

Bu kuralların kullandığı yaygın öğe kümeleri Şekil 10’dan görülebilir. Şekilde görüldüğü gibi 247 adet yaygın öğe kümesi bulunmuş. Minimum güven sayısı olarak 213 verildiğinde 213’den büyük değerdeki kümeler kurallara dahil edilir. Örneğin Road Bottle Cage, Water Bottle ürünler erkek müşteriler tarafından 764 defa aynı siparişte satın alınmış, aynı ürünler kadın müşteriler tarafından 749 defa birlikte satın alınmıştır.

şekil10

 

Kaynaklar:

[1]   Microsoft Association Algorithm, https://msdn.microsoft.com/en-us/library/  ms174916.aspx, [Ziyaret tarihi:30 Mart 2015].

Veri Madenciliği Programlama- DMX (Data Mining Extensions)

Sql Server madencilik Api (Application Programming Interfaces) leri aşağıdaki gibidir;

  • Oledb (Ole For Databases)
  • Ado (Activex Data Objects)
  • Ado.Net (Activex Data Objects For .Net)
  • Adomd.Net (Activex Data Objects (Multidimensional) For .Net)
  • Server Adomd.Net (Server Activex Data Objects (Multidimensional) For .Net)
  • Amo (Analysis Management Objects)
  • Dmx (Data Mining Extensions)
  • Xmla (Extensible Markup Language For Analysis)

Sql Server Analiz Servisleri için bu Api’lerden;

  • Ado Microsoft AciveX Data Object referansı ile
  • Adomd.Net Microsoft.AnalysisServices.AdomdClientreferansı ile
  • Server Adomd.Net Microsoft.AnalysisServices.AdomdServer referansı ile
  • Amo Microsoft.AnalysisServices veya Microsoft.DataWareHouse.Interfaces referansı ile

Visual Studio’da kullanılabilir.

Dmx (Data Mining Extensions)

Dmx Microsoft Sql Server Analiz Servisleri’nde veri madenciliği modelleri oluşturmak ve onlar üzerinde deneme, arama ve aynı zamanda tahmin yürütmeyi sağlamak üzere geliştirilmiş bir dildir. Dmx cümleleri iki çeşit olabilir; veri tanımlayıcı cümleler (data definition statements) ve veri düzenleyici cümleler (data manipulation statement). Veri düzenleyici cümleler yeni veri madenciliği yapısı ekleme, içe aktarma (import), dışa aktarma (export), var olan modeli silme gibi işlemleri gerçekleştirir. Veri tanımlayıcı cümlelerde aşağıdaki yapılar kullanılabilir;

CREATE MINING STRUCTURE

CREATE MINING MODEL

ALTER MINING STRUCTURE

EXPORT

IMPORT

SELECT INTO

DROP MINING STRUCTURE

Veri düzenleyen cümleler ise var olan model üzerinde arama işlemi yapmak, modelde güncelleme yapmak ve tahmin yürütmek işlemlerini gerçekleştirir. Veri düzenleyen cümleler aşağıdaki yapıları kullanabilir;

INSERT INTO

SELECT DISTINCT FROM <MODEL > (DMX)

SELECT FROM <MODEL>.CONTENT (DMX)

SELECT FROM <MODEL>.CASES (DMX)

SELECT FROM <MODEL>.SAMPLE_CASES (DMX)

SELECT FROM <MODEL>.DIMENSION_CONTENT (DMX)

SELECT FROM <model> PREDICTION JOIN

DELETE (DMX)

SELECT FROM <model> PREDICTION JOIN cümlesi 3 kısımdan oluşur;

  • Sonuç kümesi olarak dönen kümede  yer alan madencilik modeli kolonlarının bir listesi ve tahminlemede kullanılan fonksiyonlar,
  • Tahminleme oluşturmak için kullanılacak olan kaynak sorgu,
  • Madencilik modeli kolonları ile kaynak veri arasındaki eşleşme.

SELECT FROM <model> PREDICTION JOIN kullanımı aşağıdaki gibidir;

dmx1

Kod bloğundaki ilk satır madencilik modelinden gelmesi beklenen kolonları belirtmektedir. [NATURAL] PREDICTION JOIN kısmı hangi işlemin yapılacağını gösterir. Devamındaki kısım ise müşterinin Pazar sepetindekiürünlerini temsil etmektedir.

Eğer tahmin işlemine minimum olasılık değeri de dahil edilmek istenirse, <select list> yerine PREDICT([Default Association].[Products],INCLUDE_STATISTICS,3)

eklenmelidir. Bu metottaki ilk parametre modeldeki hangi kolonun değerinin gösterileceği, ikinci parametre destek, olasılık ve düzeltilmiş olasılık (adjusted probablity) değerlerinin sonuç kümesinde yer alacağını, 3 olarak yazan parametre ise ürünle ilişkili olan ilk 3 ürünün sonuç kümesinde gösterileceğini tarif etmektedir.

Dmx Sorguları

Bu kısımda daha önceden oluşturulmuş madencilik modeli, Association, kullanılarak örnek Dmx sorguları oluşturulmuştur. Madencilik modeli oluşturulurken veri kaynağı olarak Microsoft’un ücretsiz kullanıma sunduğu örnek veri tabanı olan AdventureWorks kullanılmıştır. Aşağıdaki kod bloğundaki amaçWater Bottle ürününü satın alan müşterilerin alabileceği ilk 5 ürünü ihtimalleri ile ortaya koymaktır. Predict metoduna INCLUDE_STATISTICS parametresi eklenerek sonuç kümesine destek ve olasılık değerlerinin de dahil edileceği belirtilmektedir.

dmx2

Aşağıdaki tabloda Water Bottle ürününü satın alan müşterilerinin bu ürün ile birlikte alma ihtimali olabilecek ilk 5 ürün listelenmektedir. Tabloya bakıldığında %39 olasılık ile Water Bottle ürününü alan müşteriler Mountain Bottle Cage ürününü de satın alır, sonucuna varılabilir.

Model $SUPPORT $PROBABILITY $ADJUSTEDPROBABILITY
Mountain Bottle Cage 1941 0.398184495 0.676180659
Road Bottle Cage 1702 0.371197252 0.682846288
Cycling Cap 2095 0.146957802 0.549763307
Mountain-200 2477 0.144504416 0.526861463
Road-750 1443 0.118989205 0.569686621

 

Bir sonraki örnek senaryo; Mountain Bottle Cage ürününü alan erkek müşterilerin satın alma ihtimali olan ilk 3 ürün, bu bilgi aşağıdaki kod bloğu ile elde edilmektedir. Madencilik modeli oluşturulurken cinsiyet bilgisi de input (girdi) olarak eklenmiş, bu yüzden Dmx sorgusuna input olarak cinsiyet bilgisi de eklenebilir.

Dmx3

Yukarıdaki Dmx sorgunun sonucu aşağıdaki tablo vermektedir. Tabloya göre Mountain Bottle Cage ve Mountain Tire Tube ürünü satın alan erkek müşterilerin sırası ile Water Bottle, HL Mountain Tire, ML Mountain Tire ürün modellerini alma ihtimalleri vardır,  %31 olasılık ile Mountain Bottle Cage ve Mountain Tire Tube ürünü alan erkek müşteriler HL Mountain Tire ürünü de alır, sonucu çıkarılabilir.

Tablo 4.5: Dmx sorgusu sonucunda oluşan tahmin kümesi.

Model $SUPPORT $PROBABILITY $ADJUSTEDPROBABILITY
Water Bottle 4076 0.836166924 0.676180659
HL Mountain Tire 1331 0.314649243 0.691508771
ML Mountain Tire 1083 0.25 0.688964227

 

Kaynaklar:

[1]   MacLennan, J., Tang, Z., Crivat, B., 2008, Programming Sql Server Data Mining, Data Mining with Microsoft SQL Server 2008, Chapter 16, Wiley Publishing Inc., ISBN: 978-0-470-27774-4, 487-580.

[2]    Data Mining Extensions (DMX) Reference, https://msdn.microsoft.com/en-us/ library/ms132058.aspx, [Ziyaret tarihi:30 Mart 2015].

[3]    Lesson 4: Executing Market Basket Predictions, https://msdn.microsoft.com/en-us/library/ms345329.aspx, [Ziyaret tarihi:10 Nisant 2015].