Little boy questioned his mother, he asked what he can be in the future..with a sad smile, she tells him he can be anything he wants to be.... Boy said he’d become (an) astronaut and fly out into space crews around the universe he wanted to see the stars and also see other planets in outer space------------- "Why don’t we just keep dreaming, let’s keep our mind with dream and faith, as long as we wish we can make it come true, how old you are never forget your dream and keep dreaming "

Saturday 5 January 2019

Python : Fungsi dan Operasi dasar Pandas (Bagian 1)

Pandas (python data analysis liblary)

Pandas adalah salah satu liblary paling populer untuk data science, pandas memudahkan kita untuk mengolah data data berbentuk tabular yang tersimpan dalam baris dan kolom.
Pandas bersifat open source, menyediakan kinerja tinggi, struktur data yang kuat digunakan sebagai alat analisis data untuk bahasa pemrograman Python.
Dengan panda kita dapat dengan mudah merubah data (CSV, excel, JSON atau SQL) menjadi sebuah object data yang terdiri dari baris dan kolom yang disebut dengan DataFrame.
Fitur :
  • DataFrame Object untuk manipulasi data dengan pengindeksan terintegrasi.
  • Alat untuk membaca dan menulis data antara struktur data dalam memori dan berbagai format file.
  • Penyelarasan data dan penanganan terpadu pada kehilangan data.
  • Membentuk kembali dan memutar set data.
  • Seleksi berbasis label, pengindeksan fantastis, dan melakukan subset kumpulan data besar.
  • Penyisipan dan penghapusan kolom struktur data.
  • Memungkinkan operasi split-apply-combine pada Data set.
  • Menghubugkan dan menggabungkan Data set.
  • Pengindeksan hierarki untuk bekerja dengan data dimensi tinggi dalam struktur data dimensi rendah.
  • Fungsionalitas seri waktu: Pembuatan rentang tanggal dan konversi frekuensi.
  • Menyediakan penyaringan data (sorting dan filtering).

Nama pandas berasal dari istilah "panel data" yang merujuk pada istilah ekonometrik untuk set data multidimensi terstruktur. bukan diambil dari nama hewan asal negeri tirai bambu panda, apalagi dari merk minuman liang teh cap panda.

Requirement :

Saya sarankan menggunakan Anaconda Navigator, paket all-in-one dengan sistem antarmuka grafis (GUI) desktop yang mencakup tautan ke semua aplikasi termasuk dalam distribusi ini adalah Python, RStudio, iPython, Jupyter Notebook, JupyterLab, Spyder, Lem, dan Orange. Didalamnya sudah terdapat lebih dari 1400 liblary, termasuk Pandas, Numpy dan Matplotlib.
Python memiliki IDE bawaan pada paket installasinya yaitu IDLE, akan tetapi untuk lebih memudahkan kita dalam Manipulasi dan analisis data dengan Pandas, saya rekomendasikan anda menggunakan IDE Spyder. IDE yang dirancang khusus untuk seorang engineers dan scientist untuk keperluan analisis.
Spyder disertakan secara default termasuk dalam distribusi Anaconda Python, yang dilengkapi dengan semua yang kita butuhkan untuk memulai menuju Python Data Science.

Oke cukup.. Langsung saja, sebelum kita melakukan analis dan manipulasi data menggunakan pandas, pertama kita perlajari dasar dasar operasi dan fungsi pada pandas.
Enjoy!


1. Membuat Series

Series adalah array satu dimensi yang mampu menampung data jenis apa pun (integer, string, float, objek python, dll.). Label axis/label baris secara kolektif disebut indeks.
Membuat series dari sebuah List
import pandas as pd
import numpy as np

nilai = pd.Series([10,20,30,40,np.nan,50])
print(nilai)
Outputnya :
0    10.0
1   20.0
2    30.0
3    40.0
4     NaN
5    50.0
dtype: float64
Secara default, pandas secara otomatis memberi index pada setiap baris dari series

Thursday 27 December 2018

Python : Lambda

Lambda, dikenal juga sebagai anonymous functions/fungsi anonim atau one line function, disebut demikian karena lambda berupa kode satu baris yang tidak memiliki nama, lambda hanya memiliki kode untuk dieksekusi. Biasanya, fungsi lambda diimplementasikan untuk melakukan sesuatu yang sangat sederhana, seperti mengalikan angka atau mengekstraksi bagian dari string.
Jika kita menggunakan statemen yang sama secara berulang-ulang dalam kode python, Kita bisa mempertimbangkan untuk menggunakan fungsi lambda ini.

Sintaks dasarnya seperti ini :
lambda argumen : ekspresi

Kita tidak dapat menempatkan statemen apapun dalam ekspresi lambda. Ini berarti kita tidak bisa menambahkan statemen if dalam ekspresi lambda, ataupun deklarasi variabel. 
Kita bisa menghindari pembuatan fungsi python untuk hal yang benar benar sangat sederhana sehingga menghindari kita menulis def namafungsi (parameter) : return (expression).
contoh : 
Function
def kali(x,y) :
    return x*y
Lambda
kali = lambda x,y : x * y

Diatas adalah perbandingan antara function biasa dengan lambda, keduanya memiliki tujuan yang sama yaitu mengalikan 2 buah bilangan akan tetapi implementasinya menjadi lebih sederhana jika memakai fungsi lambda. 
kode kali pada lambda di atas bukanlah sebuah variabel, tapi sebuah label, cara menggunakannya seperti ini :
>>> kali(9,8)
72

>>>kali(10,10)
100

Contoh lain :
Membalik string
>>>reverse = lambda s:s[::-1]
>>>reverse('python')
'nohtyp'
Mengekstrak huruf pertama
>>>huruf_awal = lambda s : s[0]
>>>huruf_awal('python')
'p'
Lambda didalam function
>>>def myfunc(n):
    return lambda a : a * n
>>>doubler = myfunc(3)
>>>doubler(11)
33

Python : Akses database PostgreSQL dengan psycopg

Psycopg adalah adaptor database PostgreSQL paling populer untuk bahasa pemrograman Python. Psycopg sepenuhnya memenuhi standar DB API 2.0. Versi saat ini adalah 2.0 dan masih terus aktif dikembangkan yang menjanjikan performa cepat dan stabil. Psycopg dirancang untuk aplikasi multi-threaded yang mendukung pembuatan dan penghapusan banyak kursor serta pembuatan fungsi INSERT atau UPDATE secara bersamaan.

Ketika kita ingin menjalankan SQL query SELECT, UPDATE, DELETE atau INSERT kedalam database postgreSQL kita membutuhkan psycopg sebagai penghubung antara bahasa pemrograman Python dengan Database PostgresSQL.

Homepage : http://initd.org/
Github : https://github.com/psycopg/psycopg2

Cara instalasi psycopg pada python :
pip install psycopg2

Sintaks koneksi seperti ini :
import psycopg2

try:
    conn = psycopg2.connect('''user=username 
                               password=password
                               dbname=namadatabase
                               host=127.0.0.1 
                               port=5432''')
print ("Berhasil terkoneksi")
except:
    print ("Tidak dapat terkoneksi dengan database")

Sintaks diatas akan mengimpor adaptor dan mencoba untuk terhubung ke database. Jika koneksi gagal, maka akan menampilkan eksepsi "Tidak dapat terkoneksi dengan database".

Kemudian kita perlu mendefinisikan cursor :
cur = conn.cursor()

Seletah cursor terdefinisi, kita sudah bisa melakukan eksekusi query dengan cara :
cur.execute('sql query')

cur.execute("""SELECT * from users""")
Kemudian kita perlu menyimpan result-set hasil eksekusi query kedalam variabel, contoh variabel record
record = cur.fetchall()

**kelebihan dari psycopg adalah result set hasil query secara otomatis dikonversi kedalam varible tipe list
untuk menampikan hasil query :
for row in record :
    print(row)
karena record adalah variabel dengan tipe data list maka kita bisa menampilkan data berdasarkan index posisi kolom seperti ini :
for row in record :
    print("{}  {} ".format(row[0],row[1]))

Wednesday 26 December 2018

Python : SQL Query menjadi Excel dengan Pandas

Bahasa Queri (Bahasa Inggris: query language) adalah suatu bahasa komputer yang digunakan untuk melakukan permintaan terhadap basis data dan sistem informasi.



Wikipedia
Seorang database administrator pasti sehari hari berhubungan dengan yang namanya transaksi query database, yang paling banyak kita gunakan adalah SQL Query.
Ketika memerlukan data dari database, kita menggunakan statement SQL SELECT untuk mengambil data dari tabel database dan mengembalikan data ini dalam bentuk tabel hasil. Tabel hasil ini disebut result-set.

Dibawah ini adalah contoh untuk menuliskan, memindahkan hasil query (result-set) kedalam file excel menggunakan python dengan bantuan module 'pandas'. Kode ini merupakan contoh koneksi python dengan database PostgresSQL, akan tetapi fuction untuk menuliskan hasil query ke excel ini dapat digunakan pada database lainnnya seperti SQL server, mySQL, dll.

Pertama, install modul pandas kedalam python, buka command prompt ketikan perintah :
pip install pandas


sql_list_query = "SELECT * from User"

def export_excel (sql_query, namafile,namasheet):
    cursor.execute(sql_query)
    record = cursor.fetchall()
    columns = [desc[0] for desc in cursor.description]
    df = pd.DataFrame(list(record), columns=columns)
    writer = pd.ExcelWriter(namafile)
    df.to_excel(writer, sheet_name=namasheet,index=False)
    writer.save()

import_excel(sql_list_query,'contoh.xlsx','hasil_query')

Penjelasan skrip diatas :
  • sql_list_query adalah variable tipe string yang berisi sintaks query SQL
  • def export_excel (sql_query, namafile,namasheet) adalah fungsi dengan nama export_excel yang berisi tiga parameter inputan yaitu : sql_query (nama variable yang menampung sintaks query SQL), namafile> (nama file excel) dan namasheet (nama sheet excel).
  • cursor.execute(sql_query) dan record = cursor.fetchall() method eksekusi query dan menyimpan hasilnya pada variabel record
  • columns = [desc[0] for desc in cursor.description], men set nama kolom excel dari deskripsi query Sql.
  • df = pd.DataFrame(list(record), columns=columns), membuat dataframe yang datanya diambil dari result-set dengan nama header kolom = variable colomns.
  • writer = pd.ExcelWriter(namafile), inisialisasi fungsi writer
  • df.to_excel(writer, sheet_name=namasheet,index=False),  menulis dataframe kedalam format excel tanpa meyertakan index dataframe.
  • writer.save(), menyimpan file excel,
  • import_excel(sql_list_query,'nama_file_excel.xlsx','nama_sheet') adalah contoh pemanggilan fuction export_excel yang akan menghasilkan file excel dengan nama file = 'contoh.xlsx', nama sheet = 'hasil_query' dari eksekusi query SQL variable sql_list_query.

Sunday 23 December 2018

Python : *args dan **kwargs

Ketika anda memperlajari kode pada bahasa pemrograman python pasti menemukan variable *args atau **kwargs ini menjadi parameter dari suatu fuction (fungsi) dalam suatu program. dan terheran sebenarnya variable apa ini?!
*args dan **kwargs
Kedua parameter ajaib ini adalah sebuah fungsonal parameter, *args adalah arguments dan **kwargs adalah keyword arguments. dengan kedua parameter tsb kita dapat membuat function yang kita buat dapat menerima sejumlah parameter argumen dan parameter keyword secara arbitrary (sewenang wenang) tanpa menentukan predefined parameter sebelumnya.

Perlu diketahui pada *args dan **kwargs yang paling penting adalah tanda *(asterik) dan ** (asterik ganda). anda bisa saja mengganti nama variablenya, semisal menjadi *var atau **vars.

Contoh :

Function pada python
def komisi (a,b):
    return sum((a,b))*0.05

komisi(40,60)
In [5]: komisi(40,60)
Out[5]: 5.0
function untuk mengembalikan nilai sejumlah 5% dari penjumlahan dua buah nilai. terdapat dua buah parameter a dan b, didalam function tsb terdapat operasi menjulahkan nilai dari dua paramter tsb kemudian dikalikan dengan 0.05, sehingga jika input nilai parameter a = 40 dan b = 60 maka nilai yang dikembalikan fuction adalah 5.0
So far ga ada masalah ya...hehe

Wednesday 19 December 2018

Python : Mengirim email dengan yagmail 'Yet Another GMAIL/SMPTP Client'



Module yang dapat digunakan untuk mengirim email pada python yang paling sering dipakai adalah kombinasi module smtplib dengan email. Selain itu ternyata ada module email lain yang dapat digunakan dengan sintaks yang lebih sederhana dan lebih mudah dipakai.

Module yagmail yang ditulis dan dikembangkan oleh Pascal van Kooten dibagikan di halaman githubnya : 

https://github.com/kootenpv/yagmailhttps://github.com/kootenpv/yagmail 

Dihalaman tsb dideskripsikan bahwa tujuan dari yagmail adalah 'The goal here is to make it as simple and painless as possible to send emails.' artinya dilarang makan sebelum berdoa

Seberapa sederhana kah sintaks nya? kira kira untuk mengirim email begini sintaks nya : 


import yagmail
yag = yagmail.SMTP()
contents = ['This is the body, and here is just text http://somedomain/image.png',
            'You can find an audio file attached.', '/local/path/song.mp3']
yag.send('to@someone.com', 'subject', contents)

Lebih sederhana lagi begini :
yagmail.SMTP('mygmailusername').send('to@someone.com', 'subject', 'This is the body')

Sunday 9 December 2018

Python : Kompilasi source code ke bytecode (.py ke .pyc)



Ketika kita menulis kode program dalam bahasa pemrograman python, script yang kita tulis dalam high level language yang artinya bahasa dan perintah yang dimengerti manusia akan disimpan menjadi source file python berekstensi .py, file tsb dapat dibaca dan diubah oleh python intepreter dengan mengubah setiap baris perintah perintah menjadi instruksi instruksi byte code yang dapat dipahami oleh komputer, file byte code tsb disimpan dalam file berekstensi .pyc dan akhirnya dieksekusi oleh python virtual machine.

Proses mengubah dari high level language ke byte code atau kode instruksi komputer tsb dinamakan dengan proses kompliasi (compile).

Mengubah file souces code ke byte code ini memiliki beberapa kelebihan :

  • File source code dan byte code bisa sama sama langsung dieksekusi oleh python intepreter, akan tetapi byte code akan lebih cepat dieksekusi.
  • Proses eksekusi byte code lebih cepat karena tidak ada kompilasi lagi untuk mengubah source code ke byte code.
  • Dari sisi keamanan jauh lebih aman dibandingkan souce code yang masih berupa kode yang bisa dibaca siapa saja. bayangkan ada orang lain yg memiliki akses ke source code anda yang berisi user name, password dan setingan lainnya.  
Cara mengkompilasi file source code (.py) ke file bytecode (.pyc) bisa dilakukan dengan bantuan module 'py_compile'.

Python : String Formatting


String Formatting atau Pemformatan string memungkinkan kita menyuntikkan item ke dalam string daripada kita mencoba menggabungkan string menggunakan koma atau string concatenation. 
Sebagai gambaran, perbandingannya seperti ini :
Nama = 'Budi'
Umur = 25

'Nama saya '+Nama+', umur saya sekarang '+str(Umur)+' Tahun.'  # concatenation

f'Nama saya {Nama}, umur saya sekarang {Umur} Tahun'          # string formatting

Ada tiga cara untuk melakukan pemformatan string.
  • Metode lama menggunakan placeholder menggunakan karakter '%' (modulo)
  • Teknik yang ditingkatkan menggunakan metode string .format ().
  • Metode terbaru, diperkenalkan dengan Python 3.6, menggunakan string literal yang diformat, disebut f-string.