Cara menggunakan NP.MAX pada Python

Iconic trio pada Machine Learning dengan Python

Pada tutorial ini, kita akan membahas 3 library yang sering digunakan pada saat mengimplementasikan Machine Learning pada Python, yaitu NumPy, Pandas, dan Matplotlib. Langsung kita mulai dengan NumPy.

NumPy

NumPy (Numerical Python) adalah library Python yang fokus pada scientific computing. NumPy memiliki kemampuan untuk membentuk objek N-dimensional array, yang mirip dengan list pada Python. Keunggulan NumPy array dibandingkan dengan list pada Python adalah konsumsi memory yang lebih kecil serta runtime yang lebih cepat. NumPy juga memudahkan kita pada Aljabar Linear, terutama operasi pada Vector (1-d array) dan Matrix (2-d array).

List pada Python tidak mendukung penuh kemudahan scientific computing, sebagai contoh kita akan lakukan operasi penjumlahan pada 2 list.

Ketika kita ingin menjumlahkan tiap elemen pada list a dan list b, hasilnya dengan operator + adalah penggabungan (concat) keduanya. Tentu tidak sesuai yang diharapkan, maka kita harus menggunakan perulangan for untuk menambahkan tiap elemen pada list a dan list b. Proses penjumlahan list yang menggunakan perulangan for membutuhkan waktu yang lama dan tidak efisien dari sisi penulisan code.

Pengenalan NumPy Arrays

Membuat Array

Lakukan import terlebih dahulu library numpy as np. Penggunaan as disini, artinya kita menggantikan pemanggilan numpy dengan prefix np untuk proses berikutnya.

Untuk membuat sebuah array, kita menggunakan fungsi array() yang terdapat pada NumPy. Pada NumPy, terdapat upcasting, yaitu ketika tipe data element array tidak sama, dilakukan penyamaan tipe data pada yang lebih tinggi. Misalkan kita membuat array numeric dengan semua element bertipe integer, kecuali 1 element bertipe float, maka otomatis akan dilakukan upcasting menjadi tipe float pada semua element array.

Cek Tipe

Untuk melakukan pengecekan tipe pada array menggunakan fungsi type().

NumPy array merupakan sebuah objek ndarray, yang merupakan singkatan dari n-dimensional array.

Tipe Data untuk Element

Pengecekan tipe data element pada array menggunakan fungsi dtype.

Dalam membuat sebuah array, kita dapat menetapkan tipe data dengan menambahkan parameter dtype.

Array a memiliki tipe data int32 dan int64 yang keduanya sama-sama bertipekan integer.Perbedaan keduanya pada kapasitas penyimpanan data. Pada int32 mampu menampung hingga (-2,147,483,648 to +2,147,483,647) sedangkan int64 mampu menampung hingga (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807). Penting bagi kita memperhatikan tipe data beserta kapasitas penyimpanannya agar dapat mengalokasikan memory penyimpanan dengan baik. Beberapa tipe data standar yang terdapat pada NumPy adalah sebagai berikut:

Jumlah Dimensi

NumPy array memiliki keunggulan mendukung operasi pada data dimensional seperti Vektor dan Matriks. Untuk mengetahui jumlah dimensi pada data menggunakan fungsi ndim.

Array a memiliki jumlah dimensi 1. Jika kita membentuk array dengan 2-dimensi, maka jumlah dimensinya adalah 2, begitu juga dengan dimensi yang lebih besar.

Array Shape

Pada fungsi shape menghasilkan sebuah tuple yang berisikan panjang sebuah array pada tiap dimensi.

Array a memiliki shape 3, yaitu panjang array pada 1-dimensi array.

Operasi pada Array

NumPy memudahkan kita untuk operasi elementwise pada Vektor dan Matriks seperti penjumlahan, perkalian, pangkat, dan operasi lainnya.

Pada NumPy telah disediakan universal functions (ufunc) yaitu fungsi yang dapat melakukan operasi pada NumPy array dengan eksekusi elemen-demi-elemen. ufunc merupakan sebuah ‘vectorized’ wrapper untuk sebuah fungsi yang memiliki input dan output yang sepesifik. Contoh dari ufunc misalkan fungsi sin dan cos.

Element pada Array

Array Indexing

Indeks pada suatu array dimulai pada indeks ke-0. Untuk mengakses element pada array, kita menggunakan indeks sebagai alamat elemen pada array.

Kita dapat melakukan assign nilai baru pada suatu element berdasarkan alamat indeks. Maka, setelah dilakukan assign nilai element pada indeks ke-0 berganti menjadi 10.

Perlu kita perhatikan jika dtype pada array adalah integer, misalkan int32. Kemudian kita assign nilai baru pada salah satu elemen dengan tipe data float. Maka, nilai baru tersebut akan dipaksa menjadi tipe int32 sesuai dengan tipe data pada array.

Multi-Dimensional Arrays

NumPy array memudahkan kita untuk membuat array multi-dimensi.

Fungsi shape pada array multi-dimensi menghasilkan tuple berisikan (jumlah baris, jumlah kolom).

Untuk mengetahui jumlah elemen pada array multi-dimensi menggunakan fungsi size.

Untuk mengetahui jumlah dimensi dari array multi-dimensi menggunakan fungsi ndim. Jumlah dimensi pada array a adalah 2, karena merupakan array 2-dimensi.

Pada array multi-dimensi kita dapat mengakses nilai elemen berdasarkan indeks dengan pemisah tanda koma [,]. Misalkan kita ingin mendapatkan data pada baris ke-1 dan kolom ke-3 dari array a, maka dilakukan perintah a[1, 3].

Misalkan, kita akan mengganti data pada baris ke-1 dan kolom ke-3 pada array a dengan nilai -1, kita dapat langsung assign nilai baru tersebut pada indeks.

Slicing

Selain kita dapat mengambil sebuah element array dengan cara indexing seperti cara di atas, kita dapat melakukan slicing, yaitu melakukan ekstraksi elemen atau beberapa elemen pada array, dengan menggunakan tanda [:].

var[lower:upper:step]

Perlu kita perhatikan, elemen pada lower akan dimasukkan hasil slicing, sedangkan element pada upper TIDAK dimasukkan hasil slicing, dan step adalah jarak antar elemen.

Kita dapat mendefinisikan indeks dengan nilai negatif. Misalkan indeksnya adalah [-1], maka indeks terdapat pada elemen ke-1 yang dari lokasi akhir elemen suatu array.

NumPy masih menyediakan banyak sekali fungsi yang sangat memudahkan kita untuk scientific computing. Untuk mempelajari lebih jauh dapat mengakses dokumentasi NumPy.

Pandas

Pandas (Python for Data Analysis) adalah library Python yang fokus untuk proses analisis data seperti manipulasi data, persiapan data, dan pembersihan data. Pandas menyediakan struktur data dan fungsi high-level untuk membuat pekerjaan dengan data terstruktur/tabular lebih cepat, mudah, dan ekspresif. Dalam pandas terdapat dua objek yang akan dibahas pada tutorial ini, yaitu DataFrame dan Series. DataFrame adalah objek yang memiliki struktur data tabular, berorientasi pada kolom dengan label baris dan kolom. Sedangkan Series adalah objek array 1-dimensi yang memiliki label.

Pandas memadukan library NumPy yang memiliki kemampuan manipulasi data yang fleksibel dengan database relasional (seperti SQL). Sehingga memudahkan kita untuk melakukan reshape, slice dan dice, agregasi data, dan mengakses subset dari data.

Menurut penulis buku Python for Data Analysis sekaligus pembuat pandas, Wes McKinney, nama pandas berdasarkan dari panel data, yaitu istilah ekonometrik untuk data multi-dimensi terstruktur, dan berdasarkan dari kata yang merupakan fungsional library itu sendiri yaitu Python data analysis.

Untuk memulai, lakukan import terlebih dahulu library pandas as pd. Penggunaan as disini, artinya kita menggantikan pemanggilan pandas dengan prefix pd untuk proses berikutnya.

Series

Series adalah objek 1-dimensi yang berisi sequence nilai dan berasosiasi dengan label data, yang disebut indeks. Untuk membuat sebuah Series, kita dapat membentuknya dari sebuah array dengan memanggil fungsi Series pada pandas.

Dapat kita lihat, pada Series obj ditampilkan dua buah kolom, bagian kiri adalah index dan bagian kanan adalah values. Pada index, karena kita tidak mendefinisikan index pada data, maka secara default dimulai dari integer 0 hingga N-1 (dimana N adalah panjang data). Kita dapat mendefinisikan index dengan menambahkan parameter index saat membuat objek Series.

Kita dapat mengambil index dari objek Series dengan menggunakan fungsi index dan mengambil values dari objek Series dengan menggunakan fungsi values.

Untuk mengakses suatu value pada objek Series, kita dapat menggunakan index sebagai alamat value tersebut. Hal ini memungkinkan untuk melakukan assign nilai baru pada objek Series.

Series juga memungkinan untuk melakukan operasi aritmatika pada dua objek Series dengan indeks yang sama.

Hasil operasi arimatika tambah pada 2 objek Series mirip dengan operasi join pada pengolahan database. Indeks yang tidak memiliki kesamaan pada 2 objek Series akan memiliki value NaN.

DataFrame

DataFrame merupakan tabel data yang terdapat kolom dan baris, dimana nilai-nilai yang terdapat di dalamnya dapat berupa tipe berbeda seperti numeric, string, boolean, dll. DataFrame mirip dengan data 2-dimensi dengan adanya baris dan kolom. Selain itu, DataFrame bisa dikatakan gabungan dari dictionary objek Series yang memiliki indeks yang sama.

Terdapat berbagai macam cara untuk membentuk objek DataFrame. Salah satu cara yang biasa dilakukan untuk membentuk objek DataFrame dengan menggunakan data masukan berupa dictionary.

Kita dapat menggunakan fungsi shape untuk mengetahui jumlah baris dan kolom dari DataFrame. Fungsi shape pada DataFrame memiliki hasil keluaran yang sama dengan fungsi shape pada NumPy, dimana menghasilkan keluaran sebuah tuple dari jumlah baris dan jumlah kolom.

Fungsi info() sangat berguna untuk mengetahui keterangan dari objek DataFrame yang kita buat seperti index dari DataFrame lengkap dengan range dari index, jumlah kolom beserta informasi tiap kolom untuk null data dan tipe data, dan jumlah total penggunaan memory pada tiap kolom dalam satuan bytes. Saat kita input data dictionary pada DataFrame, kita tidak perlu mendefinisikan tipe data untuk masing-masing kolom, karena secara otomatis pandas akan memberikan tipe data sesuai dengan values untuk tiap kolom, meskipun kita juga bisa mendefinisikan tipe data secara manual.

Misalkan kita memiliki objek DataFrame yang memiliki baris hingga jutaan, kita tidak ingin menampilkan data secara keseluruhan karena akan menghabiskan memory. Kita dapat menggunakan fungsi head() dan tail() untuk menampilkan data secara default untuk 5 data teratas dan 5 data terbawah.

Seperti pada Series, kita juga dapat mengakses kolom pada DataFrame menggunakan fungsi columns dan untuk mengakses indeks dari DataFrame menggunakan fungsi index. Jika ingin mendapatkan data pada DataFrame secara keseluruhan menggunakan fungsi values yang akan menghasilkan output berupa array 2-dimensi sesuai dengan jumlah baris dan kolom.

DataFrame menyediakan fungsi describe() untuk mengetahui statistika data untuk data numeric seperti count, mean, standard deviation, maximum, minum, dan quartile. Untuk data string, misalkan data tersebut adalah kategori, kita dapat menggunakan fungsi value_counts() untuk mengetahui jumlah tiap kategori pada data.

Mengakses Data pada DataFrame

Terkadang kita butuh mengakses kolom tertentu atau lebih spesifik elemen tertentu pada DataFrame. Untuk mengakses suatu data, alamat data tersebut adalah pada nama kolom sebagai petunjuk lokasi kolom dan indeks sebagai petunjuk lokasi baris. Misalkan untuk mengakses semua data pada kolom populasi, maka kita menggunakan perintah frame[‘populasi’]. Perlu diingat karena nama kolom adalah tipe data string, maka kita menggunakan petik.

Sedangkan mengakses data pada baris tertentu, kita menggunakan fungsi loc[indeks]. Kita juga bisa mendapatkan lebih dari 1 baris dengan menggunakan titik dua ‘:’, misalkan kita ingin mengakses indeks 2–3, maka menggunakan perintah loc[2:3].

Elemen pada DataFrame dapat diakses dengan mendefinisikan nama kolom dan indeks baris secara bersamaan. Misalkan kita ingin mendapatkan data populasi pada indeks ke-2, maka digunakan perintah frame[‘populasi’][2].

Pandas masih menyediakan banyak sekali fungsi yang sangat memudahkan kita untuk analisis data seperti mengisi data kosong dengan fungsi fillna(), menerapkan suatu fungsi pada DataFrame menggunakan apply(), mengubah format DataFrame dari wide ke long menggunakan melt(), dan masih banyak lagi. Untuk mempelajari lebih jauh dapat mengakses dokumentasi pandas.

Matplotlib

Matplotlib adalah library Python yang fokus pada visualisasi data seperti membuat plot grafik. Matplotlib pertama kali diciptakan oleh John D. Hunter dan sekarang telah dikelola oleh tim developer yang besar. Awalnya matplotlib dirancang untuk menghasilkan plot grafik yang sesuai pada publikasi jurnal atau artikel ilmiah. Matplotlib dapat digunakan dalam skrip Python, Python dan IPython shell, server aplikasi web, dan beberapa toolkit graphical user interface (GUI)lainnya.

Visualisasi dari matplotlib adalah sebuah gambar grafik yang terdapat satu sumbu atau lebih. Setiap sumbu memiliki sumbu horizontal (x) dan sumbu vertikal (y), dan data yang direpresentasikan menjadi warna dan glyphs seperti marker (contohnya bentuk lingkaran) atau lines (garis) atau poligon.

Gambar di bawah menunjukkan bagian-bagian dari visualisasi matplotlib dibuat oleh Nicolas P. Rougier.

Hal yang penting dalam visualisasi data adalah penentuan warna, tekstur, dan style yang menarik untuk dilihat dan representatif terhadap data. Seorang Cartographer yaitu Jacques Bertin mengembangkan rekomendasi berikut untuk pemilihan informasi visual yang cocok, dan kita dapat menerapkannya menggunakan matplotlib.

J. Krygier and D. Wood, Making Maps: A Visual Guide to Map Design for GIS, 1 edition. New York: The Guilford Press, 2005.

Untuk memulai menggunakan matplotlib, lakukan import terlebih dahulu library matplotlib.pyplot as plt. Penggunaan as disini, artinya kita menggantikan pemanggilan fungsi pyplot pada matplotlib dengan prefix plt untuk proses berikutnya. Disini terdapat magic command %matplotlib inline, untuk pengaturan pada backend matplotlib agar setiap grafik ditampilkan secara ‘inline’, yaitu akan ditampilkan langsung pada cell notebook.

Membuat Line Plot

Line plot berguna untuk melacak perubahan pada periode waktu pendek dan panjang. Ketika terdapat perubahan kecil, line plot lebih baik dalam melakukan visualisasi dibandingkan grafik bar.

Tutorial kali ini akan membuat plot grafik line menggunakan gelombang cos. Kita akan menggunakan numpy untuk generate data gelombang cos dengan jumlah data 100 yang berjarak dari 0 sampai 2π.

Sumbu x dan y pada kurva cos seharusnya memiliki rasio yang sama karena keduanya merupakan satuan unit yang sama. Kita dapat mengaturnya menggunakan fungsi .set_aspect.

Kita dapat mengatur bentuk marker menggunakan parameter linestyle, ukuran marker menggunakan parameter markersize, warna menggunakan parameter color, dan memberikan legend menggunakan parameter legend.

Membuat Scatter Plot

Scatter plot biasanya digunakan untuk melakukan observasi dan menunjukkan hubungan relasi antara dua variabel numeric. Titik-titik pada scatter plot juga dapat menggambarkan pola dari data secara keseluruhan. Matplotlib menyediakan fungsi scatter() untuk mempermudah dalam visualisasi scatter plot.

Membuat Bar Plot

Bar plot digunakan untuk membandingkan perubahan tiap waktu pada beberapa kelompok data. Bar plot sangat bagus digunakan dalam visualisasi ketika perubahan data sangat besar dibandingkan dengan line plot. Bar plot biasanya memiliki dua sumbu yaitu sumbu x untuk jenis kelompok dan sumbu y untuk proporsi kelompok. Matplotlib menyediakan fungsi bar() untuk mempermudah dalam visualisasi bar plot.

Matplotlib masih menyediakan banyak sekali fungsi untuk melakukan visualisasi dengan berbagai jenis grafik seperti pie, histogram, grafik 3-dimensi, dll. Untuk mempelajari lebih jauh dapat mengakses dokumentasi matplotlib.

Demikian tutorial pengenalan trio ikonik pada Machine Learning. Semoga dapat memberikan manfaat dan terbuka jika ada kritik dan saran. Terima kasih.

Referensi

  1. Python for Data Analysis 2nd Edition
  2. Numpy Documentation
  3. Pandas Documentation
  4. Matplotlib Documentation
  5. Workshop Introduction to Numerical Computing with NumPy | SciPy 2019 Tutorial | Alex Chabot-Leclerc
  6. Workshop Introduction to Data Processing in Python with Pandas | SciPy 2019 Tutorial | Daniel Che
  7. Workshop Introduction to Matplotlib | SciPy 2019 Tutorial | Hannah Aizenman, Thomas Caswell
  8. Medium Pengenalan NumPy oleh Muhammad Noerhidayatullah