Materi workshop Basic Python dan Implementasinya untuk Analisis Data untuk acara LPDP ITB SmartWeekend 27-28 Januari 2018. Workshop material of Basic Python dan Implementasinya untuk Analisis Data for event LPDP ITB SmartWeekend January 27-28th 2018. Link to slides //slides.com/jessiesetiady/basicpython/fullscreen Python,
dan Javascript adalah bahasa pemrograman yang trending* di akhir 2017 / awal 2018 * banyak dicari di stackoverflow source: Stack Overflow Peningkatan jumlah orang yang mempelajari Python di tahun 2017 (codeacademy).
Basic Python dan Implementasinya untuk Analisis Data
Apa saja yang dibutuhkan?
Intro
Motivasi untuk Mempelajari Python Berdasarkan artikel [1] : Meningkatnya minat pada bahasa pemrograman Python terasosiasi dengan peningkatan minat terhadap data science. Popularitas Python pada data science dan machine learning ikut mendukung peningkatan minat untuk mempelajari Python.
Mengapa banyak orang memilih Python? Padahal masih ada SQL dan R yang juga menunjang data science.
Salah satu faktornya adalah versatility* dari Python. Ada lebih dari 125.000 Python Libraries [3], yang menyebabkan bahasa pemorgraman Python dapat bermanfaat untuk tujuan spesifik, seperti web development, text processing, hingga machine learning. versatility = kemampuan / kepandaian yang beraneka ragam
Python untuk Analisis Data? Python telah menjadi bahasa pemrograman populer untuk analisis data. Dengan dukungan libraries seperti panda, NumPy, dan matplotlib, siapa pun yang mengenal sintaks dan aturan Python dapat menerapkannya untuk memproses, memanipulasi, dan memvisualisasikan data.
Read more:
- Robinson, David. 2017. The Incredible Growth of Python. //stackoverflow.blog/2017/09/06/incredible-growth-python/
- Robinson, David. 2017. Why is Python Growing . //stackoverflow.blog/2017/09/06/incredible-growth-python/
- Strong, Alexus. 2018. Why I’m Learning Python in 2018. //news.codecademy.com/why-learn-python/?utm_source=customer.io&utm_medium=email&utm_campaign=fortnightly_1-12-18&utm_content=why-learn-python
- Johnson, Phil. 2014. Python squeezes out JavaScript, C as best starter programming language. //www.itworld.com/article/2693392/python-squeezes-out-javascript-c-as-best-starter-programming-language.html
Python Essential Libraries untuk Analisis Data
NumPy
Mengelola array dan array multidimensi. Operasi vektor dan matriks.
Pandas
Anggap saja Pandas adalah spreadsheet namun tidak memiliki GUI Untuk mengolah data seperti join, distinct, group by, agregasi, dan teknik seperti pada SQL
>>> frame total_bill tip sex smoker day time size 1 16.99 1.01 Female No Sun Dinner 2 2 10.34 1.66 Male No Sun Dinner 3 3 21.01 3.5 Male No Sun Dinner 3 4 23.68 3.31 Male No Sun Dinner 2 5 24.59 3.61 Female No Sun Dinner 4 6 25.29 4.71 Male No Sun Dinner 4 7 8.77 2 Male No Sun Dinner 2 8 26.88 3.12 Male No Sun Dinner 4 9 15.04 1.96 Male No Sun Dinner 2 10 14.78 3.23 Male No Sun Dinner 2
Matplotlib
Visualisasi data
Scipy
Menangani operasi aljabar dan matriks serta operasi matematika lainya
Penjelasan lebih detil lihat di section paling bawah.
Read more: //www.codepolitan.com/5-library-python-untuk-data-science-59b774b6cad97
Basic Python
Instalasi
- Kunjungi //www.python.org/downloads/
- Pilih latest version sesuai dengan OS Kamu Versi Python yang digunakan pada workshop ini adalah Python 3.X.X
- Install IDE PyCharm Community Edition. Unduh lewat //www.jetbrains.com/pycharm/download/#section=mac
Python Syntax
- Variable dan tipe data, comments
nama = "Joko Widodo" # Komentar dalam satu baris umur = 23 umur_dalam_hexadesimal = 0x17 diskon = 0.15 is_mahasiswa = True
- Operasi aritmatika, termasuk +, -, *, /, **, dan %
total_bayar = harga_total - (harga_total * diskon)
(Sebagian) Coding Best Practices and Conventions
- Indentasi Gunakan 4 spasi untuk setiap level indentasi
def long_function_name( var_one, var_two, var_three, var_four): print(var_one)
Quoted from Pep 0008:
Tabs or Spaces? Spaces are the preferred indentation method.
Tabs should be used solely to remain consistent with code that is already indented with tabs.
Python 3 disallows mixing the use of tabs and spaces for indentation.
Python 2 code indented with a mixture of tabs and spaces should be converted to using spaces exclusively.
Blank lines Two blank lines between top-level definitions, one blank line between method definitions.
Imports Imports should usually be on separate lines, e.g.:
Yes: import os import sys
- Naming module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_CONSTANT_NAME, global_var_name, instance_var_name, function_parameter_name, local_var_name.
Read more: //www.python.org/dev/peps/pep-0008/ //google.github.io/styleguide/pyguide.html
String and Console Input
- 3 cara untuk membuat string
- String method:
len("Charlie") "Delta".upper() "Echo".lower()
- Print a string
- Advance printing technique
g = "Golf" h = "Hotel" print "%s, %s" % (g, h)
Contoh program: Tip Calculator
meal = 44.50 tax = 6.75 / 100 tip = 15.0 / 100 meal = meal + meal * tax total = meal + meal * tip print("%.2f" % total)
- Date and Time
from datetime import datetime now = datetime.now() print '%s/%s/%s' % (now.month, now.day, now.year) print '%s:%s:%s' % (now.hour, now.minute, now.second)
Conditional and Control Flow
- Comparators
3 < 4 5 >= 5 10 == 10 12 != 13
- Boolean operators
True or False (3 < 4) and (5 >= 5) this() and not that()
- Conditional statements
if this_might_be_true(): print "This really is true." elif that_might_be_true(): print "That is true." else: print "None of the above."
Functions
def is_numeric(num): return type(num) == int or type(num) == float: is_numeric(7) # int is_numeric(7.5) # float is_numeric("word") # False max(2, 3, 4) # 4 min(2, 3, 4) # 2 abs(2) # 2 abs(-2) # 2
Lists and Dictionary
Lists
Lists adalah sebuah tipe data. Kamu bisa menyimpan koleksi dari beberapa bagian informasi sebagai sequence dalam satu variable. (Contoh tipe data lain yang sudah kamu pelajari: string, numbers, boolean)
Kamu bisa meng-assign items ke sebuah list dengan ekspresi berikut:
list_name = [item_1, item_2]
item-item diletakan didalam tanda kurung [] List juga bisa kosong:
Mengakses List berdasarkan index
Kamu bisa mengakses item pada list lewat index-nya. Index adalah alamat yang mengidentifikasi item yang terletak pada list. List index dimulai dari 0. Jadi, kamu bisa mengakses item pertama dari list dengan cara berikut:
list_name[0] zoo_animals = ["pangolin", "cassowary", "sloth", "tiger"] zoo_animals[0] zoo_animals[2] = "hyena"
List Length
Sebuah list tidak harus punya panjang yang tetap. Kamu bisa menambahkan item ke list kapan saja.
letters = [‘a’, ‘b’, ‘c’] letters.append(‘d’) print len(letters) # 4 print letters # ['a', 'b', 'c', 'd']
List Slicing
Kadang-kadang kita hanya ingin mengakses sebagian dari list
letters = ['a', 'b', 'c', 'd', 'e'] slice = letters[1:3] print slice # ['b', 'c'] print letters # ['a', 'b', 'c', 'd', 'e']
Pada contoh diatas, mula-mula kita membuat list dengan nama letters. Kemudian, kita mengambil sebagian dari list tersebut, dan disimpan dalam variable list slice. Kita mulai dari index 1, dan berlanjut hingga sebelum index ke 3.
Berikut adalah syntax List slicing :
Start mendeskripsikan dimana slice dimulai (inklusif), dan end adalah dimana slice berakhir (eksklusif), dan stride mendeskripsikan jarak antar items pada sliced list. Contoh: stride = 2
l = [i ** 2 for i in range(1, 11)] # Should be [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] print l[2:9:2] # [9, 25, 49, 81]
Slicing Lists and Strings
Kamu dapat men-slice sebuah string sama seperti sebuah list. String dapat diumpamakan sebagai list of characters: setiap karakter pada string adalah sebuah item pada list, mulai dari index 0.
my_list = "Hello" print my_list[:2] # Mengambil 2 item pertama --> He print my_list[3:] # Mengambil item ke-empat hingga ke item terakhir --> lo
Jadi, jika list slice yang ingin kamu ambil termasuk item pertama atau terakhir, index nya tidak perlu disebutkan (cukup ":" saja)
Maintaining Order
Kadang-kadang kamu harus mencari item dalam sebuah list. Method index mengembalikan posisi index suatu item pada list
animals = ["ant", "bat", "cat"] print animals.index("bat")
Kita juga dapat menyisipkan item dalam sebuah list
animals.insert(1, "dog") print animals # ["ant", "dog", "bat", "cat"]
For One and All
Jika kamu ingin melakukan sesuatu yang berlaku untuk semua item pada list, kamu bisa menggunakan loop.
for variable in list_name: # Do stuff!
Variable akan mengikuti for (semoga ngga bingung). Jadi si variable akan diassign dengan value setiap item pada list.
perintah for diakhiri dengan sebuah titik dua (:), dan kode berikutnya yang diberikan indentasi adalah kode yang dieksekusi satu kali per item dalam list
Method sort() digunakan untuk mengurutkan isi list
animals = ["cat", "ant", "bat"] animals.sort() for animal in animals: print animal
Menghapus item dalam List
beatles = ["john","paul","george","ringo","stuart"] beatles.remove("stuart") print beatles
Dictionary
Sebuah dictionary mirip dengan list, namun kamu dapat mengakses value dalam list bukan dengan index, namun menggunakan key Sebuah key dapat berupa string atau number Sebuah dictionary dibuat dalam tanda kurung berikut { }
d = {'key1' : 1, 'key2' : 2, 'key3' : 3}
residents = {'Puffin' : 104, 'Sloth' : 105, 'Burmese Python' : 106} print residents['Puffin'] # 104 print residents['Sloth'] # 105 print residents['Burmese Python'] # 106
Menambah, Mengubah, atau Menghapus Item pada Dictionary
Kita bisa menambahkan pasangan key/value baru pada dictionary setelah dictionary diciptakan:
dict_name[new_key] = new_value
empty dictionary
len() dari dictionary adalah jumlah pasangan key-value pada dictionary tersebut. Setiap pasang hanya dihitung satu, meskipun valuenya adalah list.
Item dapat dihapus dari dictionary dengan menggunakan perintah del
perintah tersebut akan menghapus key dengan nama key_name dan menghapus nilai yang berasosiasi dengannya.
Value yang baru dapat diasosiasikan dengan key dengan meng-assign value ke key, seperti:
dict_name[key] = new_value
Dictionary dengan banyak value list
my_dictionary = { "fish": ["c", "a", "r", "p"], "cash": -4483, "luck": "good" } print my_dictionary["fish"][0] # c
Pada contoh diatas, kita membuat dictionary yang berisi beragam tipe key "fish" isinya list key "cash" isinya int key "luck" isinya string
Pada baris akhir, dicetak ke layar karakter "c". Kita mengakses dictionary pada key "fish" yang berisi list, kemudian kita dapat akses ke value pada index 0 pada list yang disimpan dalam key "fish"
prices = {"banana": 4, "apple": 2, "orange": 1.5, "pear": 3} stock = {"banana": 6, "apple": 0, "orange": 32, "pear": 15} for x in prices: print x print "price:%s" % prices[x] print "stock:%s" % stock[x]
Join List
a = [1, 2, 3] b = [4, 5, 6] print a + b # prints [1, 2, 3, 4, 5, 6]
Loops
While
Perintah while loop mirip dengan perintah if: dia akan mengeksekusi kode jika kondisi terpenuhi. Perbedaannya adalah while akan terus mengeksekusi selama kondisi adalah benar.
count = 0 if count < 5: print "Hello, I am an if statement and count is", count while count < 5: print "Hello, I am a while and count is", count count += 1
loop_condition = True while loop_condition: print "I am a loop" loop_condition = False
choice = raw_input('Enjoying the course? (y/n)') while choice != 'y' and choice != 'n': # Fill in the condition (before the colon) choice = raw_input("Sorry, I didn't catch that. Enter again: ")
Break
Break adalah perintah untuk "keluar dari look". Jalan alternatif untuk menghentikan eksekusi loop.
Contoh penggunaan break: Pertama-tama buat while dengan sebuah kondisi yang selalu bernilai true. Kemudian, menggunakan statement if definisikan kondisi berhenti. Isi blok if dengan perintah break.
count = 0 while True: print count count += 1 if count >= 10: break
While / else
Hal yang berbeda pada Python adalah bentuk perintah while/else. While/else mirip dengan if/else, namun perbedaannya adalah: blok else akan selalu dieksekusi ketika loop condition bernilai False.
Pada contoh ini, loop akan keluar / break jika A = 5, sehingga else tidak akan dieksekusi. Jika tidak, setelah 3 bilangan dibangkitkan, loop condition akan bernilai False, sehingga else akan dieksekusi.
from random import randint # Generates a number from 1 through 10 inclusive random_number = randint(1, 10) guesses_left = 3 # Start your game! while guesses_left > 0: guess = int(raw_input("Your guess: ")) if guess == random_number: print "You win!" break guesses_left -= 1 else: print "You lose."
For loop
Cara lain untuk melakukan loop adalah dengan perintah for
print "Counting..." for i in range(9): print i
d = {'a': 'apple', 'b': 'berry', 'c': 'cherry'} for key in d: print key + " " + d[key]
Multiple lists
Jika ingin iterasi pada dua list dalam satu waktu, fungsi zip akan membantu
zip akan membuah pasangan element, dan akan berhenti pada elemen terakhir list yang panjangnya lebih pendek
zip juga bisa menangani tiga atau lebih list
list_a = [3, 9, 17, 15, 19] list_b = [2, 4, 8, 10, 30, 40, 50, 60, 70, 80, 90] for a, b in zip(list_a, list_b): # Add your code here! print max(a, b)
For / else
Sama seperti while, for loops juga punya else.
Pada kasus ini, jika statement else dieksekusi setelah for, tapi hanya jika for berakhir secara normal (tidak terkena break)
fruits = ['banana', 'apple', 'orange', 'tomato', 'pear', 'grape'] print 'You have...' for f in fruits: if f == 'tomato': print 'A tomato is not a fruit!' # (It actually is.) break print 'A', f else: print 'A fine selection of fruits!'
Class
Python adalah sebuah bahasa pemrograman berorientasi objek. Untuk mudahnya, kamu dapat mengganggap objek sebagai sebuah struktur data tunggal yang mengandung data dan fungsi. Fungsi pada objek disebut method. Sebagai contoh: ketika kamu memanggil
Python akan memeriksa apakah string object yang kamu lewatkan punya atribut panjang, dan jika ada, maka value yang terasosiasi dengan atribut tersebut akan dikembalikan.
Python akan memeriksa apakan my_dict punya method items(), dan mengeksekusi method tersebut jika menemukannya.
Iterating Over Dictionaries
movies = { "Monty Python and the Holy Grail": "Great", "Monty Python's Life of Brian": "Good", "Monty Python's Meaning of Life": "Okay" } print movies.items()
Class Syntax
Sebuah basic class hanya terdiri dari keyword class, nama kelas.
class NewClass(object): # magic here
class Animal(object): def __init__(self): --> inisialisasi / kontruktor pass class Animal(object): def __init__(self, name): self.name = name zebra = Animal("Jeffrey") print zebra.name
class Animal(object): """Makes cute animals.""" is_alive = True def __init__(self, name, age): self.name = name self.age = age def description(self): print self.name print self.age hippo = Animal("Anderson", 36) hippo.description()
File input/output
Bagaimana jika kamu ingin membaca informasi dari sebuah file pada komputer kamu, dan/atau menulis informasi ke file.
Proses tersebut disebut file I/O (I/O singkatan dari "input/output")
my_list = [i ** 2 for i in range(1, 11)] # Generates a list of squares of the numbers 1 - 10 f = open("output.txt", "w") for item in my_list: f.write(str(item) + "\n") f.close()
my_file = open("output.txt", "r+") my_list = [i ** 2 for i in range(1, 11)] my_file = open("output.txt", "w") for value in my_list: my_file.write(str(value) + "\n") my_file.close()
Analisis Data dengan Python
Basic Statistics di Python
Sum
grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5] def grades_sum(scores): total = 0 for score in scores: total += score return total print grades_sum(grades)
Average
grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5] def grades_sum(scores): total = 0 for score in scores: total += score return total print grades_sum(grades) def grades_average(grades_input): sum_of_grades = grades_sum(grades_input) average = sum_of_grades / float(len(grades_input)) return average print grades_average(grades)
Median
Media adalah bilangan tengah pada sekuens bilangan yang terurut.
Kamu bisa menurutkan sekuens dengan fungsi sorted():
sorted([5, 2, 3, 1, 4]) [1, 2, 3, 4, 5]
def median(lst): sorted_list = sorted(lst) if len(sorted_list) % 2 != 0: #odd number of elements index = len(sorted_list)//2 return sorted_list[index] elif len(sorted_list) % 2 == 0: #even no. of elements index_1 = len(sorted_list)/2 - 1 index_2 = len(sorted_list)/2 mean = (sorted_list[index_1] + sorted_list[index_2])/2.0 return mean print median([2, 4, 5, 9])
Variance
Mari kita lihat bagaimana nilainya bervariasi terhadap rata-rata / menghitung variance.
Variance yang sangat besar artinya nilai siswa sangat beragam, sedangkan variance yang kecil (dekat dengan rata-rata) artinya mayoritas siswa punya nilai yang kira-kira mirip
grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5] def print_grades(grades_input): for grade in grades_input: print grade def grades_sum(scores): total = 0 for score in scores: total += score return total def grades_average(grades_input): sum_of_grades = grades_sum(grades_input) average = sum_of_grades / float(len(grades_input)) return average def grades_variance(grades): variance = 0 for number in grades: variance += (grades_average(grades) - number) ** 2 return variance / len(grades) print grades_variance(grades)
Standar Deviasi
Standar deviasi adalah kuadrat dari variance.
grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5] def print_grades(grades_input): for grade in grades_input: print grade def grades_sum(scores): total = 0 for score in scores: total += score return total def grades_average(grades_input): sum_of_grades = grades_sum(grades_input) average = sum_of_grades / float(len(grades_input)) return average def grades_variance(grades): variance = 0 for number in grades: variance += (grades_average(grades) - number) ** 2 return variance / len(grades) def grades_std_deviation(variance): return variance ** 0.5 variance = grades_variance(grades) print grades_std_deviation(variance)
Sekarang coba kalian gunakan kode diatas untuk mencetak:
- Semua nilai siswa
- Jumlah dari nilai siswa
- Rata-rata nilai
- Variance
- Standar Deviasi
Basic Statistics with Numpy
Melakukan eksplorasi statistik dasar Materi diambil dari: //cs231n.github.io/python-numpy-tutorial/
Data Analysis with Pandas
Melakukan load data, menginspeksi, dan memodifikasi data dengan Pandas. Melakukan data analisis. Materi diambil dari: //www.learnpython.org/en/Pandas_Basics
More here: //pandas.pydata.org/pandas-docs/stable/10min.html
Visualisasi Data dengan Matplotlib
Membuat grafik dengan Matplotlib untuk menyajikan data atau temuan hasil analisis data Materi diambil dari: //cs231n.github.io/python-numpy-tutorial/
[Detailed] Python Essential Libraries untuk Analisis Data
NumPy
NumPy, singkatan dari Numerical Python, adalah package dasar untuk scientific computing dengan Python. NumPy menyediakan:
- Multidimensional array object (ndarray)
- Fungsi-fungsi untuk melakukan komputasi berbasis elemen dengan array atau operasi matematis antar array
- Tools untuk membaca dan menulis datasets berbasis array
- Operasi aljabar linear, transformasi Foirier, dan random number generation
- Tools untuk mengintegrasikan kode C, C++, dan kode Fortean ke Python
Selain kemampuan pemrosesan array-nya, kegunaan utama NumPy terkait analisis data adalah sebagai container untuk data agar bisa dilewatkan ke berbagai algoritma. Untuk data numerik, array NumPy lebih efisien dibandingkan dengan array yang built-in pada struktur data Python.
pandas
Nama pandas diturunkan dari panel data, yaitu economic term untuk multidimensional structured data sets. Nama pandas juga mengandung makna Python data analysis. pandas menyediakan struktur data dan fungsi yang dirancang agar menganalisis data yang terstruktur menjadi lebih cepat dan mudah. pandas adalah salah satu komposisi utama yang membuat Python menjadi bahasa pemrograman yang powerful untuk analisis data. Objek utama pandas yang digunakan pada workshop ini adalah DataFrame, yaitu sebuah struktur data dua dimensi, tabular, dan column-oriented, dengan label pada baris dan kolomnya. Contoh DataFrame adalah sebagai berikut:
>>> frame total_bill tip sex smoker day time size 1 16.99 1.01 Female No Sun Dinner 2 2 10.34 1.66 Male No Sun Dinner 3 3 21.01 3.5 Male No Sun Dinner 3 4 23.68 3.31 Male No Sun Dinner 2 5 24.59 3.61 Female No Sun Dinner 4 6 25.29 4.71 Male No Sun Dinner 4 7 8.77 2 Male No Sun Dinner 2 8 26.88 3.12 Male No Sun Dinner 4 9 15.04 1.96 Male No Sun Dinner 2 10 14.78 3.23 Male No Sun Dinner 2
pandas juga punya kemampuan manipulasi data dari spreadsheets dan basis data relasional (seperti SQL).
matplotlib
matplotlib adalah librari Python yang populer untuk menghasilkan plots dan visualisasi data 2D. matplotlib menyediakan fitur untuk dapat secara interaktif (plot) menggambar data, dan melakukan eksplorasi.
SciPy
SciPy adalah koleksi dari package-package untuk permasalahan standar di scientific computing. Beberapa package pada SciPy termasuk:
- scipy.integrate: integrasi numerik dan solvers untuk numerical integration routines and solvers untuk masalah persamaan differensial
- scipy.linalg: aljabar linear dan dekomposisi matriks
- scipy.optimize: fungsi optimisasi dan algoritma pencarian akar
- scipy.signal: tools untuk pemrosesan signal
- scipy.sparse: sparse matrices and sparse linear system solvers
- scipy.stats: distribusi kontinyu dan diskrit standar (density functions, samplers, continuous distribution functions), dan bermacam-macam pengujian statistik
- scipy.weave: tool untuk menggunakan fitur inline kode C++ untuk mengakselerasi komputasi array