Tuesday, June 12, 2018

Visualisasi Matplotlib - Visualizing Errors

Untuk setiap pengukuran ilmiah, perhitungan akurat untuk kesalahan hampir sama pentingnya, jika tidak lebih penting, daripada pelaporan akurat dari angka itu sendiri. Sebagai contoh, bayangkan bahwa saya menggunakan beberapa pengamatan astrofisika untuk memperkirakan Konstan Hubble, pengukuran lokal tingkat ekspansi alam semesta. Saya tahu bahwa literatur saat ini menunjukkan nilai sekitar 71 (km / s) / Mpc, dan saya mengukur nilai 74 (km / s) / Mpc dengan metode saya. Apakah nilai-nilai itu konsisten? Satu-satunya jawaban yang benar, mengingat informasi ini, adalah ini: tidak ada cara untuk mengetahuinya.

Misalkan saya menambah informasi ini dengan ketidakpastian yang dilaporkan: literatur saat ini menunjukkan nilai sekitar 71 ± 2,5 (km / s) / Mpc, dan metode saya telah mengukur nilai 74 ± 5 (km / s) / Mpc. Sekarang, apakah nilai-nilainya konsisten? Itu adalah pertanyaan yang dapat dijawab secara kuantitatif.

Dalam visualisasi data dan hasil, menunjukkan kesalahan ini secara efektif dapat membuat plot menyampaikan informasi yang jauh lebih lengkap.

Untuk kode program silahkan dosenload di sini https://drive.google.com/open?id=1QCmzedWE03OHi0-NOXGNTfNv7Zzbqe3H

Basic Errorbars
Errorbars dasar dapat dibuat dengan satu panggilan fungsi Matplotlib:

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np

x = np.linspace(0, 10, 50)
dy = 0.8
y = np.sin(x) + dy * np.random.randn(50)

plt.errorbar(x, y, yerr=dy, fmt='.k');
Di sini, fmt adalah kode format yang mengontrol tampilan garis dan titik, dan memiliki sintaksis yang sama dengan singkatan yang digunakan dalam plt.plot, yang diuraikan dalam Line Plots dan Scatter Plots.

Selain opsi dasar ini, fungsi errorbar memiliki banyak opsi untuk menyempurnakan output. Menggunakan opsi tambahan ini Anda dapat dengan mudah menyesuaikan estetika plot kesalahan Anda. Saya sering merasa berguna, terutama dalam plot yang padat, untuk membuat errorbar lebih terang daripada titiknya:

plt.errorbar(x, y, yerr=dy, fmt='o', color='black',
             ecolor='lightgray', elinewidth=3, capsize=0);
Selain opsi ini, Anda juga dapat menentukan horizontal errorbars (xerr), one-side errorbars, dan banyak varian lainnya. Untuk informasi lebih lanjut tentang opsi yang tersedia, lihat doctring plt.errorbar.

Continuous Errors
Dalam beberapa situasi, diinginkan untuk menunjukkan errorbars pada kuantitas terus menerus. Meskipun Matplotlib tidak memiliki rutinitas bawaan yang terintegrasi untuk aplikasi jenis ini, namun relatif mudah untuk menggabungkan cara primitif seperti plt.plot dan plt.fill_between untuk hasil yang bermanfaat.

Di sini kita akan melakukan regresi proses Gaussian sederhana, menggunakan API Scikit-Learn. Ini adalah metode pemasangan fungsi non-parametrik yang sangat fleksibel untuk data dengan ukuran ketidakpastian yang terus menerus. Kami tidak akan menyelidiki rincian regresi proses Gaussian pada titik ini, tetapi akan berfokus pada bagaimana Anda dapat memvisualisasikan pengukuran kesalahan kontinu seperti itu:



lanjut lain waktu ....

Monday, June 11, 2018

Visualisasi Matplotlib - Plot Scatter Sederhana

Tipe plot lain yang biasa digunakan adalah plot scatter/sebar sederhana, sepupu dekat dari plot line/garis. Alih-alih titik yang digabung dengan segmen garis, di sini titik diwakili secara individual dengan titik, lingkaran, atau bentuk lainnya.

Untuk script Python materi plot scatter dapat di download di https://drive.google.com/open?id=1pZ3-RGGUMSKHkeI5A1ErlFlA4ERTbdDS

Kami akan mulai dengan menyiapkan notebook untuk merencanakan dan mengimpor fungsi yang akan kami gunakan:

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np

Plot Scatter Dengan plt.plot
Di bagian sebelumnya, kami melihat plt.plot / ax.plot untuk membuat plot garis. Ternyata fungsi yang sama ini bisa menghasilkan plot scatter juga:

x = np.linspace(0, 10, 30)
y = np.sin(x)

plt.plot(x, y, 'o', color='black');
Argumen ketiga dalam pemanggilan fungsi adalah karakter yang mewakili jenis simbol yang digunakan untuk plotting. Anda juga dapat menentukan opsi seperti '-', '--' untuk mengontrol model garis, model penanda memiliki kumpulan kode string singkatnya sendiri. Daftar lengkap simbol yang tersedia dapat dilihat dalam dokumentasi plt.plot, atau dalam dokumentasi online Matplotlib. Sebagian besar kemungkinannya cukup intuitif, dan kami akan menampilkan sejumlah yang lebih umum di sini:

rng = np.random.RandomState(0)
for marker in ['o', '.', ',', 'x', '+', 'v', '^', '<', '>', 's', 'd']:
    plt.plot(rng.rand(5), rng.rand(5), marker,
             label="marker='{0}'".format(marker))
plt.legend(numpoints=1)
plt.xlim(0, 1.8);
Untuk lebih banyak kemungkinan, kode-kode karakter ini dapat digunakan bersama dengan kode garis dan warna untuk memplot titik-titik bersama dengan garis yang menghubungkannya:

plt.plot(x, y, '-ok');
Argumen kata kunci tambahan untuk plt.plot menentukan berbagai properti garis dan marker:

plt.plot(x, y, '-p', color='gray',
         markersize=15, linewidth=4,
         markerfacecolor='white',
         markeredgecolor='gray',
         markeredgewidth=2)
plt.ylim(-1.2, 1.2);
Fleksibilitas jenis ini dalam fungsi plt.plot memungkinkan berbagai kemungkinan opsi visualisasi. Untuk keterangan lengkap tentang opsi yang tersedia, lihat dokumentasi plt.plot.

Plot Scatter Dengan plt.scatter
Metode kedua yang lebih powerful untuk membuat plot scatter adalah fungsi plt.scatter, yang penggunaannya sangat mirip dengan fungsi plt.plot:

plt.scatter(x, y, marker='o');
Perbedaan utama plt.scatter dari plt.plot adalah ia dapat digunakan untuk membuat plot scatter di mana property setiap titik individual (ukuran, warna wajah, warna tepi, dll.) Dapat dikontrol secara individual atau dipetakan ke data.

Mari kita tunjukkan ini dengan membuat plot scatter acak dengan banyak warna dan ukuran. Untuk lebih baik melihat hasil yang tumpang tindih, kami juga akan menggunakan kata kunci alpha untuk menyesuaikan tingkat transparansi:

rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)

plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,
            cmap='viridis')
plt.colorbar();  # show color scale
Perhatikan bahwa argumen warna secara otomatis dipetakan ke skala warna (diperlihatkan di sini oleh perintah colorbar()), dan bahwa argumen ukuran diberikan dalam piksel. Dengan cara ini, warna dan ukuran poin dapat digunakan untuk menyampaikan informasi dalam visualisasi, untuk memvisualisasikan data multidimensi.

Sebagai contoh, kita dapat menggunakan data Iris dari Scikit-Learn, di mana setiap sampel adalah salah satu dari tiga jenis bunga yang memiliki ukuran kelopak dan sepal yang diukur dengan hati-hati:

from sklearn.datasets import load_iris
iris = load_iris()
features = iris.data.T

plt.scatter(features[0], features[1], alpha=0.2,
            s=100*features[3], c=iris.target, cmap='viridis')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1]);
Kita dapat melihat bahwa plot pencar ini telah memberi kita kemampuan untuk secara simultan mengeksplorasi empat dimensi data yang berbeda: lokasi (x, y) dari setiap titik sesuai dengan panjang dan lebar sepal, ukuran titik terkait dengan kelopak lebar, dan warnanya terkait dengan spesies bunga tertentu. Multi warna dan plot scatter multi fitur seperti ini dapat berguna baik untuk eksplorasi dan penyajian data.

---*** SEMOGA BERMANFAAT ***---

Sunday, June 10, 2018

Visualisasi Matplotlib - Plot Line Sederhana

Visualisasi grafis pada data scientist sangatlah penting dan jika kita bekerja dengan Python maka sudah dapat dipastikan untuk memvisualisasi data digunakan library Matplotlib. Oleh karena itu kali ini kita akan belajar penggunaan matplotlib tingkat dasar (tenang saya juga pemula....😅).

Untuk coding full menggunakan Jupyter Notebook bisa di download di sini  https://drive.google.com/open?id=1AfmlgAEZbmDodg_08F8X5gVpP5VKFKbA

Plot Garis Sederhana (Simple Plot Lines)
Mungkin yang paling sederhana dari semua plot adalah visualisasi dari satu fungsi y = f (x). Di sini kita membuat plot sederhana dari jenis ini. Kita akan mulai dengan menyiapkan notebook untuk merencanakan dan mengimpor paket yang akan kita gunakan:

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np

Untuk semua plot Matplotlib, kita mulai dengan membuat figur dan sumbu. Dalam bentuk yang paling sederhana, figur dan sumbu dapat dibuat sebagai berikut:

fig = plt.figure()
ax = plt.axes()
Di Matplotlib, gambar (contoh kelas plt.Figure) dapat dianggap sebagai wadah tunggal yang berisi semua objek yang mewakili sumbu, grafik, teks, dan label. Sumbu (contoh kelas plt.Axes) adalah apa yang kita lihat di atas: kotak pembatas dengan titik dan label, yang pada akhirnya akan berisi elemen plot yang membentuk visualisasi. Sepanjang buku ini, kita umumnya akan menggunakan nama variabel fig untuk merujuk ke contoh gambar, dan ax untuk merujuk ke instance sumbu atau grup instance sumbu.

Setelah kami membuat axes/sumbu, kita dapat menggunakan fungsi ax.plot untuk merencanakan beberapa data. Mari kita mulai dengan sinusoid sederhana:

fig = plt.figure()
ax = plt.axes()

x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x));
Sebagai alternatif, kita dapat menggunakan antarmuka pylab dan membiarkan figur dan sumbu dibuat untuk kita di latar belakang:

plt.plot(x, np.sin(x));

Jika kita ingin membuat gambar tunggal dengan banyak baris, kita cukup memanggil fungsi plot beberapa kali:

plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x));
Demikianlah untuk merencanakan fungsi sederhana di Matplotlib! Kami sekarang akan menyelami beberapa detail lebih lanjut tentang cara mengontrol tampilan sumbu dan garis.

Menyesuaikan Plot: Warna Garis dan Gaya
Penyesuaian pertama yang mungkin ingin Anda lakukan pada plot adalah mengontrol warna dan gaya garis. Fungsi plt.plot() membutuhkan argumen tambahan yang dapat digunakan untuk menentukan ini. Untuk menyesuaikan warna, Anda dapat menggunakan keyword warna, yang menerima argumen string yang mewakili hampir semua warna yang bisa dibayangkan. Warnanya dapat ditentukan dalam berbagai cara:

plt.plot(x, np.sin(x - 0), color='blue')        # specify color by name
plt.plot(x, np.sin(x - 1), color='g')           # short color code (rgbcmyk)
plt.plot(x, np.sin(x - 2), color='0.75')        # Grayscale between 0 and 1
plt.plot(x, np.sin(x - 3), color='#FFDD44')     # Hex code (RRGGBB from 00 to FF)
plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB tuple, values 0 to 1
plt.plot(x, np.sin(x - 5), color='chartreuse'); # all HTML color names supported
Jika tidak ada warna yang ditentukan, Matplotlib akan secara otomatis menggilir satu set warna default untuk beberapa baris.

Demikian pula, gaya garis dapat disesuaikan menggunakan kata kunci linestyle:

plt.plot(x, x + 0, linestyle='solid')
plt.plot(x, x + 1, linestyle='dashed')
plt.plot(x, x + 2, linestyle='dashdot')
plt.plot(x, x + 3, linestyle='dotted');

# For short, you can use the following codes:
plt.plot(x, x + 4, linestyle='-')  # solid
plt.plot(x, x + 5, linestyle='--') # dashed
plt.plot(x, x + 6, linestyle='-.') # dashdot
plt.plot(x, x + 7, linestyle=':');  # dotted
Jika Anda ingin menjadi sangat singkat, linestyle dan kode warna ini dapat digabungkan menjadi satu argumen non-keyword ke fungsi plt.plot():

plt.plot(x, x + 0, '-g')  # solid green
plt.plot(x, x + 1, '--c') # dashed cyan
plt.plot(x, x + 2, '-.k') # dashdot black
plt.plot(x, x + 3, ':r');  # dotted red
Kode warna satu karakter ini mencerminkan singkatan standar dalam sistem warna RGB (Merah / Hijau / Biru) dan CMYK (Cyan / Magenta / Kuning / blacK), umumnya digunakan untuk grafis warna digital.

Ada banyak argumen kata kunci lain yang dapat digunakan untuk menyempurnakan tampilan plot; untuk lebih jelasnya, saya sarankan melihat docstring fungsi plt.plot () menggunakan alat bantu IPython (Lihat Bantuan dan Dokumentasi dalam IPython).

Menyesuaikan Plot: Batas Sumbu
Matplotlib melakukan pekerjaan yang layak untuk memilih batas sumbu default untuk plot Anda, tetapi terkadang bagus untuk memiliki kontrol yang lebih baik. Cara paling dasar untuk menyesuaikan batas sumbu adalah dengan menggunakan metode plt.xlim () dan plt.ylim ():

plt.plot(x, np.sin(x))

plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5);
Jika karena alasan tertentu Anda ingin salah satu poros ditampilkan terbalik, Anda dapat membalik urutan argumen:

plt.plot(x, np.sin(x))

plt.xlim(10, 0)
plt.ylim(1.2, -1.2);
Metode terkait yang bermanfaat adalah plt.axis() (perhatikan di sini potensi kebingungan antara axes dengan e, dan axis dengan i). Metode plt.axis() memungkinkan Anda menetapkan batas x dan y dengan satu panggilan, dengan meneruskan daftar yang menetapkan [xmin, xmax, ymin, ymax]:

plt.plot(x, np.sin(x))
plt.axis([-1, 11, -1.5, 1.5]);
Metode plt.axis () bahkan melampaui hal ini, memungkinkan Anda melakukan hal-hal seperti memperketat batas secara otomatis di sekitar plot saat ini:

plt.plot(x, np.sin(x))
plt.axis('tight');
Hal ini memungkinkan spesifikasi tingkat yang lebih tinggi, seperti memastikan rasio aspek yang sama sehingga pada layar Anda, satu unit dalam x sama dengan satu unit dalam y:

plt.plot(x, np.sin(x))
plt.axis('equal');
Untuk informasi lebih lanjut tentang batas sumbu dan kemampuan lain dari metode plt.axis, lihat plt.axis docstring.

Labeling Plots
Sebagai bagian terakhir dari bagian ini, kita akan secara singkat melihat pelabelan plot: judul, label sumbu, dan legenda sederhana.

Judul dan label sumbu adalah label paling sederhana — ada metode yang dapat digunakan untuk mengaturnya dengan cepat:

plt.plot(x, np.sin(x))
plt.title("A Sine Curve")
plt.xlabel("x")
plt.ylabel("sin(x)");
Posisi, ukuran, dan gaya label ini dapat disesuaikan menggunakan argumen opsional ke fungsi tersebut. Untuk informasi lebih lanjut, lihat dokumentasi Matplotlib dan dokumentasi dari masing-masing fungsi ini.

Ketika beberapa garis ditampilkan dalam satu sumbu, dapat berguna untuk membuat legenda plot yang menandai setiap jenis garis. Sekali lagi, Matplotlib memiliki cara built-in untuk menciptakan legenda dengan cepat. Hal ini dilakukan melalui metode (plt.legend). Meskipun ada beberapa cara yang valid untuk menggunakan ini, saya merasa paling mudah untuk menentukan label setiap baris menggunakan kata kunci label dari fungsi plot:

plt.plot(x, np.sin(x), '-g', label='sin(x)')
plt.plot(x, np.cos(x), ':b', label='cos(x)')
plt.axis('equal')

plt.legend();
Seperti yang Anda lihat, fungsi plt.legend () melacak gaya dan warna garis, dan mencocokkannya dengan label yang benar. Informasi lebih lanjut tentang menentukan dan memformat legenda plot dapat ditemukan di plt.legend docstring; Selain itu, kami akan membahas beberapa opsi legenda lanjutan dalam Menyesuaikan Legenda Plot.

---*** SEMOGA BERMANFAAT ***---