6 Ağustos 2012 Pazartesi

Active and Passive Transformations In Informatica PowerCenter


In this article, i tell something about acitve and passive transformation of informatica powercenter.
Reading, manupulating and loading data is called transformation in informatica. Each transformations perform specific functions. There are two type of transformations, passive and active transformations.

Passive Transformations  that do not change rows' count. What gives passive transformation as input, it gives as output.
  • Expression Transformation
  • Sequence Generator Transformation
  • Lookup Transformation
  • Stored Procedure Transformation
  • XML Source Qualifier Transformation
  • External Procedure Transformation
  • Input Transformation(Mapplet)
  • Output Transformation(Mapplet)
Active Transformations that change the rows' count.   The number of input rows in source is not equal to output rows in target.
  • Source Qualifier Transformation
  • Sorter Transformation  (When Selected Distinct Option)
  • Aggregator Transformation
  • Filter Transformation
  • Union Transformation
  • Joiner Transformation
  • Normalizer Transformation
  • Rank Transformation
  • Router Transformation
  • Update Strategy Transformation
  • Advanced External Procedure Transformation

19 Mayıs 2012 Cumartesi

Kayıp Değerlerde Kodlama

  • Kayıp değerler tahminlerinde, yeni bir değişken oluşturulduğu yada kodlama yapıldığı zaman, oluşturulan değişkenleri test etmek her zaman iyi bir uygulama olacaktır.
  • Kayıp veri değerlerine tipine göre farklı kodlama yapılacaktır.
  • Kodlama yaparken eğer (if) koşullarının içerisinde ve (and) ve veya (or) mantıksal karşılaştırmalarının nasıl çalıştığına dikkat edilmelidir, Hesaplaması yapılan bir kodun, mantıksal olarak sonucu ile kodlama sonrasında çıkan sonuç birbirini tutmalıdır.

18 Mayıs 2012 Cuma

Hisse Senetleri Üzerindeki Riskler

Risk, istenmeyen bir durumun ortaya çıkması yada etkinin olma olasılığıdır. Sermeya piyasında, bir memkule yatırım yapılırken, o memkulun taşıdığı risk büyük bir problemdir. Geleceğinin kesin olarak bilinmesi nedeni olarak, herhangi bir finansal varlığı yapılacak yatırımın getirisinin de tam olarak hesaplanamasına neden olmaktadır. Bu durumda finansal varlığa yatırım  yapmadan, getirisi bilmemektedir. Getiri kar olacağı gibi zararda olabilecektir.  Bu ise büyük bir risktir.
Hisse senetleri ekonomik, politik, psikolojik, dışsal ve dönemsel pek çok faktörün etkisi altında bulunmaktadır. Bu faktörlerin hisse senedi değerini etkileme derecesi ise farklılık gösterebilmektedir. Yatırımcı sürekli bir risk altında bulunmaktadır. Bu riskin bir kısmı yatırımcı tarafından kontrol edilebilirken diğer kısmı tamamen yatırımcının kontrol edemediği, kendi inisiyatifi dışında gelişen faktörlerden kaynaklanmaktadır. Finansal piyasada risk kavramı sistematik ve sistematik olmayan riskler olarak iki grupta incelenmektedir.

Sistematik Risk

Finansal varlıkların olduğu pazarın riskidir. Dolaysıyla pazarda olan tüm finansal varlıklar bu riski taşırlar. Finansal varlığın verimliğini etkileyen risktir. Pazar dışı ekonomik, politik ve sosyal koşulların ortaya koyduğu nedenlerden dolayı oluşur. Pazara etki eden faktörler üzerinde olan değişiklik yada bu faktörlerin bileşenlerinde meydana gelen olumlu yada olumsuz etkiler riskin kaynağını oluşturur.

Ülkemiz gelişmiş ülkelerle karşılaştırıldığı zaman, hisse senetlerin üzerinde oldukça fazla sistematik risk olduğu söylenebilir. Bundan dolayı faiz hadlerinde meydana gelen değişimler yada döviz kurundaki değişimler İMKB'de işlem gören hisse senetlerinin fiyatlarının değişimesine neden olmaktadır. Piyasa riski, faiz oranı riski, satın alma gücü riski, kur riski, politik riskler sistematik riskin içerinde yer almaktadır.

Sistematik Olmayan Risk

Sistematik olmayan risk doğrudan doğruya işletmenin kendisi ile ilgili risktir. İşletmenin yönetim hataları, grev, yanlış finansal politikalar, geleceğe yönelik alınan yanlış kararlar, başarısız yöneticiler, pazar trendlerinin yakalanaması gibi nedenler sistematik olmayan riskin kaynağını oluşturmaktadır.  Bu durumlar, her işletme için çeşitlilik arz etmesinden dolayı yatırımcı tarafından azaltılması  mümkündür. Yinde de yatırımcı açısından kaçılması mümkün olmayan risktir. İş ve endüstri riski, finansal risk, likidite riski, yönetim riski sistematik olmayan riskin içerinde yer almaktadır.



Kaynaklar;


Sarıkamış, C., Sermaye Pazarları, Alfa Yayınları, İstanbul, 2000.

Rodoplu, G., Para ve Sermaye Piyasaları, Tuğra Ofset, Isparta, 2002.

21 Eylül 2011 Çarşamba

Otokorelasyonun Nedenleri ve Sonuçları


Otokorelasyonun Nedenleri;

   Bazı açıklayıcı değişkenlerin modele alınmaması: modele alınmayan açıklayıcı değişkenlerin etkilerini hata teriminin göstermesidir. Eğer modeldeki açıklayıcı değişkenler aynı yönde ise modele dahil edilmeyen açıklayıcı değişkenin hata terimi üzerindeki etkisinin neden olduğu otokorelasyonu tespit etmek kolaylaşır. Fakat model dahil edilmeyen değişken birden fazla ve etkileri ise birbirine zıt yönde ise hata terimine olan etkileri olan otokorelasyonu gözlemlemek zorlaşacaktır.

    Modelin matematiksel biçimin yanlış seçilmesi: eğer modeldeki açıklanan ve açıklayıcı değişkenlerin arasında ilişki doğrusal olmadı zaman model doğrusal olarak kurulursa, hata terimleri fonksiyonel bir ilişkide olduğu gözlemlenir. Bu durumda model seçimi yanlış yapıldığı için hata terimleri arasında otokorelasyon ortaya çıkmaktadır.


     Açıklanan değişkende ölçme hatası: açıklanan değişkende ölçme hataları varsa, ölçme hatasının yönüne bağlı olarak otokorelasyon ortaya çıkmaktadır. Fakat ölçme hataları bütün gözlemler için aynı kalırsa, hata terimleri bu tip ölçme hatalarından etkilenmeyecektir.


    Verinin işlenmesi: veriler üzerinde işleme ve düzeltme teknikleri uygulanmışsa bu durumda hata terimleri arasında otokorelasyon olabilir. Bu durumun en iyi örneği ise eksik veri tahminde uygulanan interpolasyon tekniklerinin hata terimleri arasında otokorelasyona neden olabilmesidir.

Otokorelasyonun Sonuçları;

  • Parametre tahminleri etkin değildirler ama sapmasızdır.
  • Varyansın olduğundan küçük çıkmasına neden olur.
  •   EKK tahminleri etkin değildir.

6 Haziran 2011 Pazartesi

Obiee Database Fonksiyonlarını Çağırma

Oracle obiee ile çalışken oluşturduğumuz sorgularda databasede kayıtlı fonksiyonlarında sonuçlarını görebiliriz. Bu durumda OBIEE de webten log in olup sorguya herhangi bir alanı ekleriz. Sonrasında sorgu alanın fonksiyon buttonuna tıklayarak foksiyon ekranı ekrana gelir. Custom title tıklanır ki ve alanın ismi değiştirirlir. Databaseden fonksiyon çağırmak için OBIEE de EVALUATE fonksiyonunu kullanırız. EVALUATE fonksiyonun kullanımı;

EVALUATE(‘DATABASE_FONKSIYONU(%1)’, FONKSIYON_PARAMETRESI)

yukarıdaki database_fonksiyonu kısmında oracle ın default fonksiyonlarını çağırmaktadır. Eğer kullanıcı tanımlı bir fonksiyon kullanılırsa hata alınır. Bu hatanın nedeni ise kullanıcı tanımlı fonksiyonun dönderdiği sonucun OBIEE hangi tipte olduğunu anlamamasından kaynaklanmaktadır. Hatayı gidermek için;

EVALUATE(‘DATABASE_FONKSIYONU(%1)’ AS DATATYPE, FONKSIYON_PARAMETRESI)

Yukarıdaki şekilde EVALUATE fonksiyonu kullanılırsa hiç bir hata almadan kullanıcı tanımlı fonksiyonlar çağırılabilir.

Database_fonksiyonu(%1) ifadesindeki %1 ise fonksiyona verilecek parametre sayısını belirtmek içindir. Eğer iki parametre vereceksek Database_fonksiyonu(%1, %2) olarak belirtmemiz gerecektir. Ayrıca EVALUATE fonksiyonun virgülden sonra birinci gelen kısımı birinci parametre ikinci gelen kısmı ise ikinci parametre olarak aldığını da tekrardan hatırlayalım :) .

Eğer databasede link verip o databasedeki linki çağırmak istediğimizde ise;

EVALUATE(‘DATABASE_FONKSIYONU@DATABASE_LINK(%1)’ AS DATATYPE, FONKSIYON_PARAMETRESI)


Yukarıdaki gibi fonksiyonun sonuna database linki verilerek o databaseden fonksiyon çağıralabilir.

29 Mayıs 2011 Pazar

PL/SQL Standard Fonksiyonları

PL/SQL de fonksiyonları anlatmadan önce Oracle’daki Dual tablosundan bahsetmede fayda vardır. Sistem tarafından yaratılan bu tabloya veri tabanındaki tüm kullanıcılar erişebilmektedir. Tablo kayıdı tek bir alan olan VARCHAR2(1) veri tipinde DUMMY alanıdır. Bu alan içerisinde ise tek bir satırlık kayıt vardır. Tek bir kayıttan oluşan bu tabloda kullanıcıların SELECT ifadesi içersinde çeşitli özellikleri kullanmalarına olanak tanır.

CONCATE:

Karakter biçimde verilen değerleri ard arda birleştiren fonksiyondur. || şeklinde de kullanılabilir. Bu kullanım birleştirilecek kelimeler arasında boşluk bırakmak içindir. Kullanım şu şekildedir;

birinci_alan || ‘ ‘ || ikinci_alan

SELECT adi||' '||soyadi Ogrenci FROM ogrenciler;

LOWER

Büyük harfle yazılmış karakterleri küçük harflere çevirir.

SELECT LOWER (adi), soyadi FROM ogrenciler;

UPPER

Küçük harfle yazılmış karakterleri büyük harflere dönüştür.

SELECT adi, UPPER (soyadi) FROM ogrenciler;

REPLACE( Karakter, Aranacak_Karakter, Yerleştirilecek_Karakter)

Karekter içerisinde, aranacak karakteri bulur ve yerleşecek karakter ile değiştirir.

SELECT REPLACE ('ist', 'ist', 'istanbul') il FROM DUAL;

SUBSTR(Karakter,m,n)

Karakter içeriside, m sayısı ile başlayan yerden n kadar sayarak bu alan içerisindeki karakterleri alır.

SELECT SUBSTR ('istanbul', 1, 3) FROM DUAL;

LENGHT(Karakter)

Verilen karakterin uzunluğunu sayısal olarak hesaplar.

SELECT SUBSTR ('istanbul') FROM DUAL;

SYSDATE

Sistemin o anki tarih ve saatini verir.

SELECT SYSDATE FROM DUAL;

TO_DATE(Karakter,Format)

Karakter biçinde verilen tarihleri, tarih formatında formatlayarak tarih tipine dönüştür.

SELECT TO_DATE ('12022010', 'DD/MM/YYYY') tarih FROM DUAL;



TO_CHAR

birinci opsiyon

TO_CHAR(Sayı,Format) Sayı biçimde verilen ifadeyi formatlayıp karakter tipine dönüştürür.

SELECT TO_CHAR (1234, '9999') FROM DUAL;


Yukarıdaki sorguda 1234 sayısı 9999 formatında yani 4 basamaklı bir sayı olarak formatlandırılmaktadır.

ikinci opsiyon

TO_CHAR(‘Tarih’,Format)

Tarih biçimde verilen ifadeleri istenen formata dönüştürülmesi yapar.

SELECT TO_CHAR (SYSDATE, 'DD/MM/YY') FROM DUAL;

NEXT_DAY(Tarih, İfade)

Verilmiş olan tarihi referans alarak verilen ifadenin tarihi verir.

SELECT NEXT_DAY (TO_DATE ('18/03/2011', 'DD/MM/YYYY'), 'Friday') "Toplantı" FROM DUAL;

LAST_DAY(Tarih)

Verilen tarihi referans alarak ayın son günü verir.

SELECT LAST_DAY (TO_DATE ('02/05/2011', 'DD/MM/YYYY')) "Ayin Son Günü" FROM DUAL;

TRUNC(Tarih, Format)

Verilen tarihi aşagıdaki formata göre formatlayıp görüntüler.

SELECT TRUNC(SYSDATE,’YYYY’) FROM DUAL;

Yukarıdaki sorgu girilen tarihin yılının ilk gününü verir.

SELECT TRUNC(SYSDATE,’Q’) FROM DUAL;

Yukarıdaki sorgu girilen tarihin yılının ilk çeyereğini verir.

SELECT TRUNC(SYSDATE,’MON’) FROM DUAL;

Yukarıdaki sorgu girilen tarihin ayının ilk gününü verir.

SELECT TRUNC(SYSDATE,’DY’) FROM DUAL;

Yukarıdaki sorgu girilen tarihin ait olduğu haftanın Pazar günün tarihini verir.

SELECT TRUNC(SYSDATE,’W’) FROM DUAL;

Yukarıdaki sorgu girilen tarihin ait olduğu haftanın Perşembe günün tarihini verir.

SELECT TRUNC (SYSDATE, 'YYYY') FROM DUAL;


ROUND(Sayı, n)

Verilen ondalıklı sayıları virgülden sonra n rakamından sonraki kısımı yuvarlamasını yapar.

SELECT ROUND (3.1415926, 5) FROM DUAL;


ADD_MOUNTS(Tarih,n)

Verilen tarihi referans alarak n ay sonraki tarihi verir.

SELECT ADD_MONTHS (TO_DATE ('27-may-2007'), 1) FROM DUAL;

ASCII(Karakter)

Verilen karakter için ASCII kod karşılığını getirir.

SELECT ASCII ('A') FROM DUAL;



CHR(Sayı)

Verilen sayı için ASCII kod karşılığındaki karakteri getirir.

SELECT CHR (65) FROM DUAL;


LTRIM (Karakter, Çıkartılacak_Karakter)

Çıkatılacak karakter belirtilmediği sürece karakterin solundaki boşlukları çıkartır. Çıkartılacak karakter verilirse karakterin sol tarafından başlayarak karakteri çıkatırır.

SELECT LTRIM (' ahmet sedef ') FROM DUAL;

SELECT LTRIM ('****************ahmet sedef ', '*') FROM DUAL;


INSTR (Karakter_Dizisi,Aranacak_Karakter, n,m)

Aranacak karakteri, karakter dizisinde sol taraftan belirtilen n. Karakterden başlayarak m kez bulana kadar arayıp sonucu verir.

SELECT INSTR ('ahmet sedef', 'e') FROM DUAL;

SELECT INSTR ('ahmet sedef', 'e', 1, 2) FROM DUAL;



TRIM (Leading | Trailing | Both form karakter) Eğer leading ile kullanırsa belirtilen karakterde dahil olmak üzere sol tarafa sol taraftaki aynı karakterleri kaldırır. Eğer trailing ile kullanırsa karakterde dahil olmak üzere sağ tarafa doğru sağ taraftaki aynı karakterleri kaldırır. Not: burada belirtilen karakterden sonra hem sol hemde sağ tarafta farklı bir karakter olmamalıdır. Eğer Leading ve Trailing kullanılmayıp, bir karakter belirtilmezse sağ ve sol taraftan boşlukları siler.

SELECT TRIM (LEADING 'f' FROM 'ff00123') FROM DUAL;

SELECT TRIM (TRAILING 'e' FROM 'ff00123ee') FROM DUAL;

SELECT TRIM (BOTH '1' FROM '123Tech111') FROM DUAL;

SELECT TRIM (' tech ') FROM DUAL;



DECODE (İfade, Arama_Kriteri_1,Sonuç_1, Arama_Kriteri2,Sonuç_2,.....,Varsayılan) Bu fonksiyon kullanılırken genelde ifade yerine bir alan referans verilir. Bu alanda yapılacak arama kriteri karşılık sonuçları ayrı bir alana getirir. Klasik programlama dillerinde IF-ELSEIF yapısının PL/SQL karşılığıdır dersek yanılmış olmayız.

SELECT supplier_name, DECODE (supplier_id, 10000, 'IBM',10001, 'Microsoft', 10002, 'Hewlett Packard', 'Gateway') RESULT FROM suppliers;



TO_NUMBER (Karakter, Sayı_Formatı)

Karakter olarak verilen ifadeyi sayıya çevirir.

SELECT TO_NUMBER(‘1247.61’, ‘9999.99’) FROM DUAL;



INITCAP (Karakter)

Karakter olarak verilen ifadeyi ilk harfini büyük karaktere çevirir.

SELECT INITCAP(‘ahmet’) FROM DUAL;


LPAD (Karakter,n,Eklenecek_Karakter)

Karakterin soluna belirtilen karakteri ekler. Toplam uzunluk n kadar olacaktır.

SELECT LPAD(‘25’6,’0’) FROM DUAL;

RTRIM (Karakter,n,m)

Verilan karakteri n. Karakterden başlayarak m adet karakteri alarak ayırır.

SELECT RTRIM(‘ISTANBUL’1,3) FROM DUAL;


CONVERT(Karakter_Dizini, Hedef_Karakter_Seti, Kaynak_Karakter_Seti)

Referans gösterilen karakterleri kaynak karakter seti karşılıklarını alarak hedef karakter setine çevirir.

SELECT CONVERT ('A B C D E Ä Ê Í Õ Ø', 'US7ASCII', 'WE8ISO8859P1') FROM DUAL;

ASCIISTR(Karakter)

Referans gösterilen karakter setini, veritabanın karakter setini kullanarak ASCII karakter setine çevirir.

SELECT ASCIISTR('E Ä') FROM DUAL;

CHR(Sayı)

Verilen sayının ascii karakter seti karşılığını verir.

SELECT CHR(85) FROM DUAL;

DUMP(İfade,Hedef_Format,n,m)

Verilen ifadeyi hedef formatta varchar2 tipinde çevirir. m çevrim yapılacak bit uzunluğudur ve kullanımı opsiyoneldir. m ise referans verilen ifadedeki başlangıç pozisyonunu belirtir ve kullanımı ise opsiyoneldir.

Hedef format tablosu
Value Explanation
8 octal notation
10 decimal notation
16 hexadecimal notation
17 single characters
1008 octal notation with the character set name
1010 decimal notation with the character set name
1016 hexadecimal notation with the character set name
1017 single characters with the character set name
(Not: yukarıdaki tabloyu yazıyı hızlı olarak hazırladığım için türkçeye çevirmedim. Genel bir düzeyde ingilizce ile anlaşılabilicek düzeyde açıklamalardır.)

TRANSLATE(İfade, değişecek_karakterler, yeni_karakterler)

Translate fonksiyonu, referans gösterilen ifadedeki değiştirilecek karakterleri, yeni karakterler ile yer değiştirir.

SELECT TRANSLATE ('DENEME123', '123', '456') FROM DUAL;

COMPOSE(Karakter)

Özel karakterleri almak için kullanılır. Örneğin Türkçe’deki düzeltme işareti gibi. Kullanımı karakter || unicode_karakter şeklindedir.

SELECT COMPOSE ('o' || UNISTR ('308')) FROM DUAL;

En çok kullanılan unistring kodları tablosu
Unistring Value Resulting character
unistr('300') grave accent ( ` )
unistr('301') acute accent ( ´ )
unistr('302') circumflex ( ^ )
unistr('303') tilde ( ~ )
unistr('308') umlaut ( ¨ )
(Not: yukarıdaki tabloyu yazıyı hızlı olarak hazırladığım için türkçeye çevirmedim. Genel bir düzeyde ingilizce ile anlaşılabilicek düzeyde açıklamalardır.)

VSIZE(İfade)

Referans olarak verilen ifadenin kaç byte olduğunu verir. Referans ifade NULL yada ‘’ ise byte olarak yer kaplamayacağı için bir değer geri vermez. Referans ifadeki karakterlerde boşluklarıda dikkate alır.

SELECT VSIZE ('Ahmet Sedef') FROM DUAL;

CURRENT_DATE

SQL Sessionların time zonelarında değişiklikleri takip etmek için kullanılır. ALTER SESSION komutu ile time zone değiştirilen session zamanını verir.

SELECT CURRENT_DATE FROM DUAL;

BIN_TO_FUNCTION(Bit_Vektör)

Bit vektör olarak verilen değeri gerçek değerlerine çevirir. Dikkat edilmesi gereken nokta ise bit vektörün 0 ve 1 lerden oluşan vektör olduğunun unutmamasıdır.

SELECT BIN_TO_NUM(1,0,0) FROM DUAL;

NUMTODSINTERVAL (Sayı, Format)

Verilan sayı istenen formata gün, saat, dakika ve saniye cinsine çevirir. Formatlar ise gün için ‘DAY’, saat için ‘HOUR’, dakika için ‘MINUTE’ ve saniye için ‘SECOND’ dur.

SELECT NUMTODSINTERVAL (15000, 'HOUR') FROM DUAL;

NUMTOYMINTERVAL (Sayı, Format)

Verilan sayıyı ay ve yıla çevirir. Format olarak ay için ‘MONTH’ ve yıl için ‘YEAR’

SELECT NUMTOMYINTERVAL (144, 'MONTH') FROM DUAL;

TO_DSINTERVAL(Karakter_Tarih)

Referans verilen karakteri gün , saat, dakika ve saniye olarak tarihe çevirir. Giriş formatı örneği olarak 1 10:30:00, yani burada 1 gün 10 saat 30 dakikadan bahsediyoruz. Örnek olarak şu anki tarihten 2 gün 3 saat 15 dakika geri gidelim.

SELECT SYSDATE + TO_DSINTERVAL ('-2 03:15:00') FROM DUAL;

Veri Madenciliği

Veri madenciliği, büyük çaplı verileri arasından anlamlı bilgiye ulaşma, daha yalın bir anlatımla veri madenleme işlemidir. Veri tabanındaki, veri ambarındaki veriler arasında var olan ilişkiler, örüntüler, sapma ve eğilimler, belirli yapılar gibi bilgilerin ortaya çıkarılması veri madenciliğinin temelini oluşturmaktadır. Yapılan işi biraz daha havalı bir şekilde anlatılabiliriz; veri tabanındaki bilgileri keşfediyoruz. Veri tabanındaki keşfedilen bilgiler, işletmelerde karar destek mekanizmalarına da bir ön bilgi ve aynı zamanda bir sonuç yada rapor temin etmek kullanılabilir.

Veri madenciliğinde, yukarıdaki paragrafta anlattığım gibi devasa veri yığınlarından anlamlı (ki burada analitik veriden bahsediyoruz.) verilerin elde işlemlerini kapsadığını söyledik. Peki, anlamlı veriyi nasıl elde edeceğiz. Cevap ise; bilimsel yöntemler kullanarak verinin anlamlı hale getirilmesidir. Bu bilimsel yöntemlerde içerisinde istatistiksel yöntem ve süreçlere başvurulması en sağlıklı yoldur. Veri seçim seçim süreci istatistiksel olduğu için seçim kusurca olacaktır. Veri madenciliğinde amaçlarından biriside büyük hacimli verileri etkin ve verimli bir hale getirmektir. Bu amaçla bir çok bilgisayar programı ve bu programlardan oluşan platform çözümleri üretilmiştir. Söz konusu yazılım olunca iki türlü yaklaşımdan bahsetmek mümkündür. Bunlar açık kaynak kod ve kapalı kod. İşte bizim bu alanda kullanacağımız başlıca yazılımlar; SPSS Clementine, SPSS, SAS, Angoss, KXEN, SQL Server Çözümleri, Oracle Çözümleri, Matlab (kısmen), Orange, RapidMiner, WEKA, Sciptella ETL, iHepWork, KNIME, ELKI ….. listeyi uzatmak mümkün.

Veri madenciliği ile geleneksel yöntemler çözülmesi çok zaman olan zor problemler çok daha hızlı bir şekilde çözülmesi olanaklı hale gelmektedir. Aslında yapılan işlemler bir nevi verinin kalitesini artırmak ve elimizdeki veriyi bizim için daha değerli hale getirmektir. Veri madenciliğini en yoğun kullanıldığı sektörler; bankacılık, telekomünikasyon, borsa, pazarlama, sigortacılık, bilim, endüstri, sağlık, mühendislik … vs alanlardır. Temel olarak kullanım amaçlarına göre şu şekilde bir kategori yapılabilir;

Borsa: Hisse senetlerinin fiyat tahminleri, genel piyasa analizleri

Bankacılık: Risk analizleri, usulsüzlük tespitleri, finansal raporlamalar

Pazarlama: Çapraz satış analizleri, müşteri segmentasyonu

Sigortacılık: Müşteri kaybetme nedenlerinin belirlenmesi, usulsüzlüklerin önlenmesi

Bilim ve mühendislik: Amprik veriler üzerinde modeller kurularak bilimsel ve teknik proplemlerin çözümlenmesi

Endüstri: Kalite kontrol ve lojistik hizmetleri

Veri madenciliği aslında bir süreçtir. Bu süreçte uygulanacak adımlar doğru olarak yerine getirilmesi şartıyla istenen sonuçlara ancak ulaşılabilir. Veri madenciliği, bir veri keşfi işlemidir. Bu keşifin adımları ise şunlardır;

1.) Veriyi temizleme

2.) Veri bütünleştirme

3.) Veri seçme

4.) Veri dönüşümü

5.) Veri madenciliği

6.) Örüntü değerlendirme

7.) Bilgi sunumu

Veri toplama, bu aşama madenciliğin ilk aşamasıdır. Veriler bir çok farklı ortamlarda bulabilir. Bu aşamada uygun veri, veri ortamlarından çekilir. Veri çekme işlemi tamamlandıktan sonra verilerin ikiye bölünmesi önerilmektedir. 4’e 1 oranında bölümleme yapmak en uygun olanıdır. Verilerin büyük kısmı analizler için, küçük kısmı ise testler için kullanılması amaçlanmaktadır.

Veri temizleme ve dönüştürme, bu aşamada veri formatları üzerinde oynamalar yapılarak veri sonraki işlemler için uygun bir hale getirilir. Eksik ve kayıp verilerde bu aşamada uygun yöntemler kullanılarak veri tamamlama yada silme işlemi yapılır.

Model kurma, bu aşama veri madenciliğin çekirdeğidir. Projenin amacına ulaşması için modelin doğru olarak kurulması gerekmektedir. Modelleme için uygun olan bir yada birden fazla algoritma seçilir. Burada amaç en uygun modeli en iyi algoritma ile yakalayıp en doğru sonucu elde etmektir. Model değiştirme ise elde edilen modeller üzerinde çeşitli sınamalar yaparak yada istatistikleri kullanarak en uygun modeli seçmektedir.

Raporlama, veri madenciliği sonucunda elde edilen sonuçların bir sunumudur (buradaki sunum klasik anlamdaki sunum değildir.). Değerlendirme ise proje kapsamında örüntüleri kullanmaktır. Temel amaçlarımızdan birisi de elde edilen modeli veri ile bütünleşik hale getirip harmanlamadır. Değerlendirme, literatürde scoring olarak da adlandırılmaktadır.

Uygulama, kurulan modelin gerçek zamanlı olarak çalıştırılması ve sonuçların elde edilmesidir. Bu işlemler yapılırken model yönetimi de yapılmaktadır. Model yönetiminde unutulmaması gereken şey, her modelin bir yaşam döngüsüne sahip olduğudur. Verilerimiz iş özelliklerine, zamana ve konjektüre bağlı olarak değişebilir. Bu gibi durumlarda modelinde değiştirilmesi yada güncelleme yapılması kaçınılmazdır.

SQL

SQL, açılımı “Structured Query Language” yani Türkçe karşılığı ile “Yapısal Sorgulama Dili” olan veritabanı işlemleri ve komutlarından oluşan bir dildir. SQL, kullanıcıların isteklerini veritabanı sistemine anladığı dilden anlatan bir söz dizimidir, yani bir dildir. Bu dil sayesinde veritabanında var olan kayıtlar görüntülenebilir, değiştirilebilir ve yeni kayıtlar eklenebilir. SQL bir dildir ,ancak bir programlama dili değildir. Yani, program geliştirme işlemlerinde kullanılır ama tek başına yeterli değildir. Program geliştir iken SQL bilmek programcıya esneklik ve üretkenlik sağlar. SQL her ne kadar iyi bilinirse bilinsin, aynı zamanda iyi bir yapısal programlama dilini de bilmek iyi bir program yazmak için gereklidir.

SQL, 1983 yılında IBM laboratuarlarında çalışmalarla tamamlanmış ve 1987 yılında ISO ve ardında da ANSI tarafından standart olarak kabul edilmiştir. Daha sonra bu standartları kullanarak veritabanı yönetim sistemleri geliştirilmiştir. Bu veritabanı yönetim sistemlerinden en çok bilenen ve kullanılanları ise; Oracle, MS SQL Server, Sysbase, Informix, Progcess ve MySQL (MySQL’in üretirici ve geliştiricisi olan Sun, Oracle tarafından geçtiğimiz yıllarda satın alınmıştır. MySQL’in artık geliştirme çalışmaları Oracle çatısı altında devam edilmektedir. Durumun ne olacağını sonraki makalelerimde tahmin etmeye çalışacağım.) ‘dir. Bütün bu veritabanı yönetim sistemlerinde, temel SQL kodları çalışır. Aynı tablolarda aynı sonuçları verir. Veritabanı yönetim sisteminlerinde kullanılan SQL ifadelerinin farklılaşması ise veritabanı yönetim sistemlerinin SQL’e yapısal sorgulama dillerinden bazı özellikleri eklemelerinden kaynaklanmaktadır. Örneğin temel olarak SQL’den if, case, next, do gibi şartlı ifadeler, döngüler ve karşılaştırmalar bulunmaz. SQL’de bulunmayan bu prosedür, fonksiyon, şartlı ifadeler ve karşılaştırmaların yokluğunu gidermek için; Oracle PL/SQL ( Programming Language /SQL), Microsoft firması SQL Server de T-SQL, Sysbase yine T-SQL dilini geliştirmiştir.

SQL dilinin; karar yapıları, döngüler ve benzeri yapısal programlama dillerindeki özelliklerden yoksul olduğunu yukarda belirttik. Veritabanı yönetim sistemi bu eksikleri PL/SQL yada T-SQL gibi dil tanımlamalarını kullanarak giderir. Ancak veritabanında verilerin hacmi artıkça daha gelişmiş bir veritabanı yönetim sistemine ihtiyaç ise kaçınılmazdır.

Kullanıcı herhangi bir veritabanına bağlandığında SQL (PL/SQL yada T-SQL) komutlarını kullanarak veritabanı yönetim sistemine istekte bulunur. Bu isteklerde kullanılan komutlar 5 kategoride toplanabilir;

a) Veri sorgulama komutları

b) Tabloya veri ekleme, değiştirme ve silme komutları

c) Veritabanı nesnelerini oluşturma, değiştirme ve silme komutları

d) Veritabanına ve nesnelerine erişimi kontrol etme komutları

e) Veritabanın tutarlığını ve bütünlülüğünü kontrol etme komutları

SQL, bir programlama dili olmadığına göre; sadece SQL kullanılarak bir kullanıcı arayüzü tanımlanamaz ya da bir dosya yönetimi yapılamaz. SQL, temelde 3 ifade grubundan oluşur.

1. Veri Tanımlama Dili: (Data Defination Language = DLL) Tablo, trigger, view gibi veri tabanı nesnelerini tanımlayan komutlar bu grupta yer alır. Nesne CREATE komutu ile oluşturulur, ALTER komutu ile değiştirilir ve DROP komutu ile silinir.

2. Veri İşleme Dili: (Data Manuplation Language = DML ) Veri seçme, ekleme, silme ve sorgu sonuçlarında sıralama veya filtreleme gibi komutlar bu grupta yer alır. INSERT ile veri eklenir, DELETE ile veri silinir, UPDATE ile veri güncellenir, SELECT ile veri seçilir, WHERE ile filtrelenir, ORDER ile sıralama yapılır. Ayrıca INTO, FROM, LIKE, GROUP BY, HAVING… gibi yan söz deyimleri de bu grupta yer alır.

3. Veri Kontrol Dili: Veritabanı yönetim sisteminde roller ve kullanıcılar için ifade ve nesne kullanım izinlerini tanımlar. Erişim ve erişim kaldırma ifadeleri ile bu haklar ayarlanır. Ayrıca, erişim engelleme de kullanılan veritabanı yönetim sistemine (Oracle, MS SQL Server) göre bu grupta yer alabilir.

İlişkisel Veritabanı Yönetim Sistemleri

Günümüzde kullanımı en yaygın veritabanı ilişkisel veritabanı ve en yaygın veri tabanı yönetim sistemleri de ilişkisel veritabanı yönetim sistemleridir. İlişkisel veritabanının en önemli yanı, oluşturulan tabloların birbiri ile ilişkilerinin olmasıdır. Bu nedenle veritabanı yönetim sistemlerine “ilişkisel” denilmektedir.



En basit anlamda bir veritabanından bahsetmek için bir veritabanında en az iki tablo olmalıdır. Ve oluşturulan veritabanı ilişkisel bir veritabanı ise, bu iki tablo birbiri ile bir şekilde ilişkilendirilebilir olması gerektedir. Eğer veritabanımız ilişkisel veri ilişkisel veritabanı mantığı üzerine bina edilecekse, temel olarak tablolar aşağıdaki 3 temel işlevi yerine getirmek zorundadır.



Seçme: Herhangi bir tabloda yer alan bilgilerin tümü yada istenen kriterlere göre sıralı bir şekilde gösterilebilmelidir.
İzdüşürme: Herhangi bir tabloda yer alan bilgilerin belli kolonları görüntülenebilmelidir.
Birleştirme: İki yada fazla tabloda yer alan bilgiler tek bir tablo gibi sunulabilmelidir.



Bir veritabanı yönetim sistemi yukarıdaki 3 temel işlevi yerine getirmek zorundadır. Bu 3 kriterlerden her biri tek tek kullanılabildiği gibi, 3 bir arada kullanılabilir veya ikili kombinasyonlar halinde de kullanılabilir. Burada önemli olan veritabanın bir veritabanı yönetim sistemi tarafından SQL ile yönetilebilir olmasıdır. Böylece kullanıcı veritabanın bilgisayar ortamında fiziksel olarak dosyalama işlemleri bilme zorunluluğundan kurtulmuş olacaktır. Tüm bu süreç SQL ile izole edilmiş olur.

Veri Tabanı Normalizasyonu

Normalizasyon; veritabanı tasarım aşamasında çok önemli bir işlemdir. İlişkisel veritabanının tanımı ile birlikte ortaya atılmış ve kabul görmüş 5 normalizasyon kuralı vardır.

Normalizasyon Kuralı: bir satırdaki alan yalnızca tek bir bilgi içerir.
Normalizasyon Kuralı: bir tabloda anahtar olmayan her alan, birincil anahtar olarak tanımlı tüm alanlara bağlı olmak zorundadır. Ya da anahtar alanın birden fazla olduğu tablolarda, anahtar alanlardan sadece birine bağlı veriler tabloda yer almalı, ayrı bir tabloya taşınmalıdır. Bunun tersi de geçerlidir.
Normalizasyon Kuralı: Bir tablo için anahtar olmayan bir alan, anahtarı olmayan başka hiç bir alana bağlı olamaz.
Normalizasyon Kuralı: Birincil anahtar alanlar ile anahtarı olmayan alanlar arasında, birden fazla bağımsız bire-çok ilişkisine izin verilmez.
Normalizasyon Kuralı: tekrarlamaları ortadan kaldırmak için her tablonun mümkün olduğunca küçük parçalara bölünmesi gerekir.

Veri tabanı normalizasyon kuralları, bir ilişkisel veritabanının tasarlanma aşamaları değil de ilişkisel veri tabanında yer alacak kayıtların ilişkisel veri tabanı ile uyumlu olup olmadığını denetlemeye yöneliktir. İlişkisel veritabanı tasarımında aşağıdaki dört özellik yerine getirilmelidir.

a) Veri tekrarı yapılmamalıdır.

b) Boş yer mümkün olduğunca az olmadır.

c) Veri bütünlüğü sağlanmadır.

d) Veriler, aralarında bir ilişki tanımlanmaya müsait olmalıdır.