Python 2017

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 2017

Kredisi : 3

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

İletişim: python2017@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

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): 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.

  • Hafta 4: Nesne Yönelimli programlamaya giriş (object oriented programming) : Nesne, kalıtım (inheritance), kapsülleme (encapsulation), çok şekillilik (polymorphism) v.b. kavramlar.
  • Hafta 4 (Devam): Veri analizine giriş ve veri kümelerinin yönetilmesi / yüklenmesi
    • Veri Kümeleri (dersten önce indirmenizde fayda var): indirmek için tıklayınız.
    • Derste kullanılacak IDE için: Anaconda.com
    • Örneklerin çalışma sonuçları:
    • Ödev 3: Kaggle üzerinde birer hesap açınız ve ayrıca şu tutorial’da bulunan adımları 4. bölüme kadar (4. bölüm hariç) yapınız ve kodlarınızı ve çıktılarınızı yollayınız: tutoriala erişmek için tıklayınız
    • 1. Ödevin Çözümü
    • Derste Yazılan Kodlar (Kitabın 2. Bölümündeki ilk örneği (bitli/usa.gov veri kümesi ile olanı) yaptık ve çalıştırdık. Notlanmayacak bir ödev olarak yine kitabın 2. bölümündeki diğer 2 veri kümesini çalıştırmanızı tavsiye ederim.
  • Hafta 5: NumPy temelleri ve temel dizi analizi, vektörize hesaplamalar, dosya işlemleri ve doğrusal cebir (linear algebra), rasgele sayı (random number) üretimi
  • Hafta 6: Ödev 2 Çözümü  , Ödev 4: NumPy problemleri ve çözümleri (çözümleri deneyerek tek bir dosya halinde yollamanız yeterlidir)
  • Hafta 7: Tanımlayıcı istatistiğe giriş (descriptive statistics), Pandas kütüphanesi ve veri yapıları
  • Hafta 8: Dosya yükleme (Loading) , saklama (Storage) ve dosya formatları
  • Hafta 9: 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)
  • Hafta 10: 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ı
  • Hafta 11: Ç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ş
  • Hafta 12: 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.
  • Hafta 13: 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).
  • Hafta 14: 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.

  • Hafta 14: Pythonun farklı kullanım alanları, web ve diğer ortamlarda Python kullanımı ve kütüphaneleri:

Duyurular:

Ders ile ilgili duyurular burada yer alacaktır…