IAN 502 Veri Odaklı Programlama 2018

T. C. İstanbul Şehir Üniversitesi

İş Analitiği Yüksek Lisans Dersi

Ders izlencesi ve ders ile ilgili faydalı içerik

Dersin Adı: Veri Odaklı Programlama, Python ile

Dersin Kodu: IAN 502

Dönemi: Güz 2018

Kredisi : 3

Öğretim Üyesi: Doç. Dr. Şadi Evren ŞEKER

İletişim: python2018@sadievrenseker.com

Ders İçeriği:
Veri odaklı programlama dersinin 3 farklı seviyeden öğrencilere hitap etmesi beklenmektedir. Henüz programlama ile yeni tanışan kişiler, programlama hakkında bilgisi olan ama çok fazla tecrübesi ve uzmanlığı olmayan kişiler ve progralama konusunda tecrübeli ve uzman ancak veri odaklı progralmama konusuna yeni olan katılımcılar.

Dersin amacı, programlama bilgisi olmayan kişilerin programlama dilleri ile ilk kez karşılaşacağı ve kodlamanın temellerini öğreneceği ve sonrasında veri odaklı program yazabileceği geçişi sağlamaktır.

Programlama geçmişi olan kişilere ise daha çok veri temelli program yazabilecekleri, veri analizinde karşılaşacakları problemlere karşılık gelen uçtan uca problem çözümlerini geliştirebilecekleri programlama yeteneklerini öğretmektir.

Ders kapsamında Python programlama dili öğretilecek olup, dilin temellerinin yanında veri analizine yönelik olarak, python dili içerisinde bulunan bazı kütüphaneler aşağıdaki şekildedir:

  • ·      NumPy
  • ·      SciPy
  • ·      Pandas
  • ·      Matplotlib
  • ·      Scikit-learn

Ayrıca güncel konulara da yer verilecek ve örneğin derin öğrenme gibi konular için de tensor flow benzeri kütüphanelere giriş yapılacaktır.

Dersin amacı, katılımcıları, veri bilimi, veri analitiği ve iş analitiği dünyasında kullanılan temel teknolojileri, algoritmaları ve görselleştirme / analiz araçlarını temel düzeyde kullanacak seviyeye getirmektir.

Kaynak Kitaplar

  • Python for Data Analysis, 2nd Edition Data Wrangling with Pandas, NumPy, and IPython,  William McKinney, 2017
  • Learning scikit-learn: Machine Learning in Python Paperback – November 25, 2013, Raúl Garreta, Guillermo Moncecchi
  • Building Machine Learning Systems with Python , Willi Richert, Luis Pedro Coelho , 2013

Online Kaynaklar

Ders boyunca öğrencilere okumaları gereken bazı ufak vaka çalışmaları ile makaleler verilecektir.

Derse Katılım:

Ders boyunca öğrencilere okumaları gereken bazı ufak vaka çalışmaları ile makaleler verilecektir.

Derse Katılım:
Ders 3 modülden oluşmaktadır.
1. Programlamaya giriş (hiç bilmeyenler için)
2. Makine öğrenmesi ve veri analitiğine giriş
3. İleri veri analitiği yöntemleri
Katılımcılar, farklı bilgi düzeylerinden geldikleri için ilk modüle katılım zorunlu olmamakla birlikte verilen bütün ödev ve projelerin yapılması zorunludur. Sadece 3 hafta sürecek, ilk modül için benimle görüşerek öncesinde izin alabilir ve ödev/projeleri yaparak ilk modülden muaf sayılabilirler. Bunun dışında, derse katılım zorunlu olup, özel durumlar için önceden haberleşilerek izin alınabilir. Dersleri kaçırma veya tekrar çalışma ihtimallerine karşı, ders boyunca dijital içerik oluşturularak öğrencilerle azami seviyede paylaşılmaya çalışılacaktır.
Derste yapılacaklar:
• Yapısal programlamaya (structural programming) giriş : temel programlama teknikleri, değişken, döngü, koşullar ve fonksiyon gibi temel kavramlara giriş ve uygulamaları
• Veri yapılarına giriş (Data structures): temel veri yapılarının çalışma mantığı ve kullanım alanları, diziler, listeler, yığın (stack), sıra (queue), ağaçlar (trees) , haritalar (maps), v.b. kavramlar.
• Nesne Yönelimli programlamaya giriş (object oriented programming) : Nesne, kalıtım (inheritance), kapsülleme (encapsulation), çok şekillilik (polymorphism) v.b. kavramlar.
• Veri analizine giriş ve veri kümelerinin yönetilmesi / yüklenmesi
• NumPy temelleri ve temel dizi analizi, vektörize hesaplamalar, dosya işlemleri ve doğrusal cebir (linear algebra), rasgele sayı (random number) üretimi
• Tanımlayıcı istatistiğe giriş (descriptive statistics), Pandas kütüphanesi ve veri yapıları
• Dosya yükleme (Loading) , saklama (Storage) ve dosya formatları
• Veri ön işleme ve ver sarmallama (wrangling): veri kümelerinin birleştirilmesi ve eklenmesi, yeniden şekillendirme (reshaping) ve döndürme (pivoting), veri dönüşümü (data Transformation), ve dizgi işlemleri (string manipulations)
• Tahminci istatistiğe giriş (predictive statistics), scikit-learn kütüphanesi ve temel sınıflandırma, kümeleme ve regrezisyon analizi yöntemlerinin kullanılması
• Çizim ve görselleştirme (plotting and visualization): matplotlib kütüphanesine giriş, pandas ile fonksiyonların görselleştirilmesi, diğer alternatif görselleştirme araçlarına giriş
• Grup operasyonları ile veri birleştirme (data aggregation): GrouBy çalışması, veri birleştirme (aggregation), grup boyunca operasyonlar ve dönüşümler (transformations), pivot tablolar ve çapraz tablolama.
• Zaman Serileri: Tarih ve zaman veri tipleri, zaman serilerine giriş, veri aralıkları (Ranges), frekans ve kayma (shift) kavramları, Priyotlar ve periyodik aritmetik, hareketli pencere fonksiyonları (moving window functions).
• Güncel ve gelişmekte olan veri analizi yöntemlerinin python ile kullanılması: ileri makine öğrenmesi kütüphaneleri, derin öğrenme kütüphaneleri.
Vaka Çalışmaları:
Ders kapsamında, uygulama eğitim yolu izlenecektir ve çok sayıda vaka üzerinde veri analizi python dili kullanılarak yapılacaktır. Ders kapsamında verilen örnek veri kümeleri üzerinde katılımcıları gerçek hayat projelerini uygulamaları beklenmektedir.

Ödevler:
Ders kapsamında, 13 farklı ödev verilmesi planlanmaktadır. Bu ödevlerin süresi bir hafta ile iki hafta arasında değişmekle birlikte genelde her hafta yeni bir ödev verilecektir. Ödevler grup halinde yapılacaktır ve her ödev için yeni bir grup kurulacak bu sayede grup çalışması teşvik edilecektir.

Ders içi uygulamalar:
Derste anlatılan konular, katılımcılar ile birlikte birebir örnek veriler üzerinde uygulanacaktır. Bu yüzden katılımcılaırn bilgisayarlarını getirmeleri ve ilk derste anlatılan python yazılımını kurmaları gerekmektedir, ayrıca her ders için gereken ilave kütüphaneler bir önceki derste veya ilgili derste anlatılacaktır.

Ders Web Sitesi
Ders içerikleri ve bu ders izlencesi, www.sadievrenseker.com/python2017 adresinden takip edilebilir. Verilen ödevler, projeler ve gerekli yazılım için bağlantılar sayfada güncel olarak yer alacaktır.

Takım Çalışması ve Takım Üyesi Değerlendirmesi
Öğrenciler kendi takımlarının her bir üyesini projedeki performansına göre değerlendireceklerdir. Her bir öğrenci 100 puanı kendisi de dahil olacak şekilde takım arkadaşlarına dağıtacaktır. Bu dağıtım öğrencinin her bir takım üyesinin projeye katkısını yansıtacak şekilde yapılacaktır. Puanlama, takım üyesinin projeye harcadığı zamanı değil, projeye olan katkısını ölçecek şekilde yapılmalıdır. Katkıdan kasıt, fikir geliştirme, araştırma, analiz, yazı yazma, sözlü sunum, rapor yazma vb.’dir. Eğer takım çalışması iyi ise o zaman öğrenciler aynı puanı diğer takım üyelerine verebilirler. Ancak bazı takım üyeleri kendi yapmaları gerekeni yerine getirmediyse bu durumda puanlar eşit olmayan bir şekilde dağıtılacaktır.

Tüm takım üyeleri tarafından verilen puanlar ders hocası tarafından kümülatif hale getirilecektir. Her bir öğrenci kendi takım arkadaşlarının ve kendisinin verdiği puana göre bir takım çalışması katkı puanı alacak, ama bu puanın nasıl oluştuğu (kimin kime kaç puan verdiği bilgisi) öğrenciler ile paylaşılmayacaktır).

Takım üyeleri arasında bir konsensüs oluşmadığı zamanlarda; örneğin üç öğrencinin puanları eşit dağıtması ve bir öğrencinin farklı puanlama yapması gibi bir durumda, hoca kendi muhakemesini kullanarak takım katkı puanı hesaplayacaktır. Bu hesaplama esnasında takım üyeleri ile görüşmesi gerekebilir.

Eğer birbiri ile çelişen puanlamalar söz konusu ise hoca büyük ihtimalle takım üyeleri ile mülakat yapacak ve ona göre puanlama yapacaktır.

Geçmiş tecrübeler çoğu takımın puanlarını eşit olarak dağıttıkları şeklindedir. Takım çalışmasının proje notunu etkilediği durumlar azınlıkta bulunmaktadır. Bu puanlamanın amacı takımlarına destek olmayan takım üyelerinin hak etmedikleri puanı almanın önüne geçmektir. Aynı zamanda, bazı öğrencilerin payından çok daha fazlasını yapmaları durumunda öğrencinin puanının daha da yukarıya taşımak mümkün olacaktır.

Takım değerlendirmesinin puanlaması sizin proje puanınıza direkt etki edecektir. Örneğin, takım puanı 30 üzerinden 25 ise ve sizin takım üyesi puanlamanıza göre ortalamanın altında bir katkıda bulunduğunuz gözüküyorsa, sizin proje puanınız 25’ten küçük olacaktır. Bu düşürümün miktarı ile ilgili kolay bir kural yoktur.
Derste ulaşılması hedeflenenler:

  1. İlk kez programlamaya girecek katılımcılara programlamanın temellerini öğrenebileceği bir ortam sağlamak.
  2. Temel veri yapılarına giriş yapmak
  3. Nesne yönelimli programlamaya giriş yapmak
  4. Python ve kütüphanelerini kullanarak tanımlayıcı (descriptive) ve tahminci (predictive) veri analizi yöntemleri geliştirebilmek
  5. Python ve kütüphanelerini kullanarak görselleştirme projelerini yapabilmek
  6. Python ve kütüphanelerini kullanarak uçtan uca, veri yükleme, veri ön işleme, veri dönüşümü, veri modellemesi ve veri görselleştirmesi işlemlerini yapabiliyor olmak.

Ders İzlencesi:

  • Hafta 1: Derse giriş, yazılımların tanıtılması, ders izlencesi ve tanışma: temel programlama teknikleri, değişken, döngülere giriş
  • Hafta 2: Yapısal programlamaya (structural programming) giriş :  koşullar (if, else, elif:) for döngüleri, range fonksiyonu, ve fonksiyon kavramına ( def f(x): ) giriş ve uygulamaları
    • Derste Yazılan Örnek Kodlar:
    • ile ilgili yazılan 2. hafta kodları (indirmek için buraya tıklayın >>> listeler_fonksiyonlar_donguler  ):
      • if, else ve elif kullanımı ve koşullar : untitled.py
      • If kavramı, kullanıcıdan sayı okumak ve int değerine dönüştürmek. Verilen bir 100’lük notun harf notuna dönüşümü örneği: ikinci.py
      • Döngü kavramı ve while, for döngüleri: ucuncu.py
      • range ve liste kavramları ve for döngüsünü kullanarak ortalama, toplam hesaplama: dort.py
      • Kullanıcıdan -1 girilene kadar sayı alan ve bu sayıların toplamını döndüren kod (break ve continue kavramları): bes.py
      • Fibonacci serisini hesaplayan fonksiyon: alti.py
      • Faktöriyel ve Kombinasyon hesaplayan fonksiyonlar: yedi.py
      • değişken ve liste çağrılması ve fonksiyon içerisinde yapılan değişiklerin çağrılan yere etkisi (kopyalayarak çağırma ve referans ile çağırma (call by value, call by reference) kavarmları: sekiz.py
      • bir liste alarak listedeki sayilarin toplamini döndüren fonksiyon : dokuz.py
      • Parametre sayısı belirsiz parametreyi alıp işleyen fonksiyon ( *l ) : on.py

  • Hafta 3: Veri yapılarına giriş (Data structures) ve Nesne Yönelimli programlamaya giriş (object oriented programming) : Nesne, kalıtım (inheritance), kapsülleme (encapsulation), çok şekillilik (polymorphism) v.b. kavramlar. temel veri yapılarının çalışma mantığı ve kullanım alanları, diziler, listeler, yığın (stack), sıra (queue), ağaçlar (trees) , haritalar (maps), v.b. kavramlar.

UDEMY : Uçtan Uca Veri Bilimi (Knime ile)

  • Hafta 10: SCI-KIT Learn Kütüphanesine giriş ve makine öğrenme algoritmaları (Rapid Miner, Knime ve Python kütüphanelerinin karşılaştırmalı çalıştırılması)
    • Yazılan Örnek kodlar (cinsiyet excel dosyasından makine öğrenmesi ve sınıflandırma örnekleri), aşağıdaki algoritmalar için çalışmaktadır.
    • Örnek Kod 1: Cinsiyet 
    • Örnek Kod 2: Emlak
    • Ödev 6:
      • Görev 1: Titanic veri kümesini yükleyerek derste üzerinden geçilen algoritmalardan en az birisi ile hayatta kalan veya kalmayanları tahmin etmeye (sınıflandırmaya) çalışın.
      • Görev 2: Derste işlenen bütün algoritmaları deneyin ve hangisinin en başarılı olduğunu yorumlayın (bir iki satır yazarak anlatın).
      • Görev 3: Bu işlemler sırasında bütün verileri (sayısal veya nominal) kullanın (herhangi bir kolonu dışarıda bırakmayın, eksik veya kirli veri varsa önizlemeye tabi tutun, kullandığınız algoritma, veri tipi ile uyumlu değilse veriyi uyumlu hale dönüştürün).
  • Hafta 11 
    • SCI-Kit Learn ile a priori algorithması ve birliktelik kural çıkarımı
    • Bölütleme-Kümeleme örnekleri ve kodları (clustering)
      • Hata ölçüm yöntemleri : Root Mean Square Error (RMSE), R2 Score , RAE, MAE
      • K-Means Algoritması ve Kodlaması
    • k-Fold Cross Validation ve Leave One Out yöntemleri
    • Linear Modeller ve Linear Regression, Polynomial Regression
    • Bölütleme (kümeleme) problemlerine genel giriş ve kullanım alanları
    • Bölüm 5.1: K-Orta Algoritması (K-Means)
      • Kavrama ve algoritmaya giriş
      • Rassal Başlangıç Tuzağı
      • K-Means algoritmasında küme sayısına karar verilmesi
      • Python ile K-Means algoritmasının kodlanması
      • Test : K-Means
    • Bölüm 5.2: Hiyerarşik Bölütleme
      • Hiyerarşik kümeleme kavramına giriş
      • Dendrogram kavramı ve hiyerarşik kümeleme kullanımı
      • Python ile Hiyerarşik kümeleme
      • Test: Hiyerarşik Bölütleme / Kümeleme
    • Bölüm Özeti ve Modellerin Karşılaştırması
  • Hafta 12 : Birliktelik Kural Çıkarımı
    • Bölüm 6.1: Apriori Algoritması
    • Bölüm 6.2: Eclat Algoritması
      • Algoritmanın çalışması
  • Hafta 13:Pekiştirmeli / Takviyeli Öğrenme (Reinforced Learning)

  • Hafta 14 Derin Öğrenme:
    • Derin Öğrenme (Deep Learning)
      • Yapay Sinir Ağlarına Giriş (Artificial Neural Networks)
      • Aktivasyon Fonksiyonları (Activation Functions)
      • Katman Kavramı ve Çalışan bir Yapay Sinir Ağı
      • XOR Problemi ve Çözüm olacak YSA tasarımı
      • YSA Nasıl Öğrenir ? : Perceptron (Algılayıcı) kavramı
      • Gradyan Alçalış (Gradient Descendent)
      • Yığın (Batch),  Stokastik (stochasftic) ve Mini Yığın (mini Batch) gradyan alçalış (gradient Descendent)
      • İleri yayılımın (forward propagation) ve geri yayılımlı (backward propagation) ağlar
      • Derin Öğrenme Kütüphaneleri ve karşılaştırma
      • Derin Öğrenme Kütüphanelerinin kurulması
        • Theano : pip install –upgrade –no-deps git+git://github.com/Theano/Theano.git
        • TensorFlow: conda create -n tensorflow python=3.5
        • Keras : pip install –upgrade keras
        • TensorFlow: pip3 install –upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.8.0-py3-none-any.whl
      • Veri Kümesi ve Problemin Tanıtımı
      • Python ile kodlama

Duyurular:

Proje duyurusu:

Veri odaklı programlama dersi proje duyurusu (minimum olması gerekenler)

  1. Proje önerisi en geç 1 Aralığa kadar yollanacak : Kısa problem tanımı ve veri tanımı (nasıl erişileceği ve verinin detayları):
    1. hangi tarihte sunum istendiği belirtilecek (15 aralık veya 22 aralık veya fark etmez)
    2. Projeler tek kişi olacak, kendi problemleriniz (çalıştığınız yer ile ilgili olması tercih sebebidir). Şayet olmuyorsa kaggle.com’dan problem seçip önerilebilir.
  2. Teslim edilecekler (teslim için 14 Aralık son tarih) : 1Proje raporu + 2 Sunum + 3 Çalışan kod (CRISP-DM metodolojisi kullanılacak)
  3. Sunum (10 + 5 dakika) : problemin tanımı, çözümün faydaları, kodun demosu (çalıştırılması)
  4. Sunumlar tarihi :15 ve 22 Aralık olacak (isteklere öncelik verilecek)