Prakata
Tujuan: Menggambar Bagan Statistik, Berdasarkan Populasi Data
Misalnya sohib pembaca memiliki suatu data statistik, mungkin saja sohib bertanya-tanya bagaimana cara untuk menampilkan data dengan cara yang tepat. Artikel ini adalah latihan bagi saya, sebagai pemula di bidang statistik. Dari pemula, untuk pemula.
Saya menggunakan python
, sebagai bahasa pemrograman,
di dalam artikel ini.
Daftar Isi
Bahasa Inggris
Artikel ini juga disajikan di blog penulis yang lain, dalam bahasa Inggris:
1: Menempatkan Data Acak
Populasi Data
Supaya contoh ini berjalan dengan baik,
kita membutuhkan contoh data yang dapat dipakai.
Langkah pertama kita adalah mengisi data seperlunya.
Pilihan saya adalah kasus tinggi badan dari siswa dalam sentimeter.
Jangkauan-nya adalah antara 165
sampai dengan 174
sentimeter.
Dalam terminologi python numpy
,
ketentuan ini dapat ditulis ulang yaitu sebagai
np.random.randint(165, 175, size=...)
.
Perhatikan perbedaan +1
di sini.
Skrip selengkapnya adalah:
import numpy as np
range_min = 165
range_max = 175
np.random.seed(7)
data = np.random.randint(range_min, range_max, size=32)
data_str = ', '.join(str(x) for x in data)
print('[' + data_str + ']')
Hasilnya adalah daftar panjang dari bilangan bulat.
[169, 174, 171, 168, 168, 172, 172, 174, 172, 173, 174, 173, 172, 171, 169, 165, 172, 165, 172, 171, 168, 170, 173, 173, 172, 170, 165, 165, 167, 173, 174, 171]
Sekarang kita dapat menyalin keluaran tersebut, untuk digunakan di skrip berikutnya.
Data Statis
Cek dan ricek.
Mengapa disalin? Mengapa tidak menggunakan data acak saja? Mengapa menggunakan data statik?
Karena, saya butuh untuk memeriksa data tersebut. Misalnya dari skrip ke bagan grafik. Dalam percobaan ini, saya beberapa kali, harus menghitung secara manual.
Tentu saja nantinya kita dapat bealih ke data acak. Namun sekarang kita membutuhkan data statis. Setidaknya sebagai awalan.
2: Grafik Histogram
Sekarang saat yang tepat, untuk menggunakan populasi data di atas menjadi sesuatu yang bermanfaat.
Kepala Header
Skrip yang kita gunakan membutuhkan library
di bawah ini:
import numpy as np
import matplotlib.pyplot as plt
Data
Coba mulai dengan data
range_min = 165
range_max = 175
data = np.array([
169, 174, 171, 168, 168, 172, 172, 174,
172, 173, 174, 173, 172, 171, 169, 165,
172, 165, 172, 171, 168, 170, 173, 173,
172, 170, 165, 165, 167, 173, 174, 171
])
Bagan Chart
Coba tampilkan, tafsiran data ke histogram chart
memakai matplotlib
.
bins = np.arange(range_min, range_max+1)
plt.hist(data, bins=bins,
facecolor="tab:green", edgecolor="k", linewidth=0.7)
plt.show()
Bagan sudah jadi, namun tidak menjelaskan apapun.
Ini sebabnya kita membutuhkan bagan jenis lain,
yaitu yang bernama dotplot
.
3: Teks Histogram
Sebelum beralih lebih lanjut, kita perlu memahami,
bagaimana cara kerja skrip python
.
Header dan Data
Sama seperti sebelumnya.
Bins
Bagan dotplot
membutuhkan histogram
yang ada di numpy
.
Perhitungan nya berdasarkan bins
sebagaimana di bawah:
range_x = np.arange(range_min, range_max)
bins = np.arange(range_min, range_max+1)
freq, edges = np.histogram(data, bins=bins)
print("range_x: " + str(range_x))
print("freq: " + str(freq))
Ujung dari bins
membutuhkan nilai tambahan +1
.
Maka sekarang kita mendapatkan jumlah kekerapan frekuensi,
sebagaimana berikut di bawah:.
range_x: [165 166 167 168 169 170 171 172 173 174]
freq: [4 0 1 3 2 2 4 7 5 4]
Untuk menghindari perulangan,
kita dapat menulis variabel peubah,
menggunakan fungsi slice
yang disediakan python
.
bins = np.arange(range_min, range_max+1)
range_x = bins[:-1]
Zip
Coba bikin tuple
dari kedua daftar list
,
dan kemudian tampilkan tafsiran dari tuple
tersebut,
dalam grafik teks di command line interface
.
pairs = zip(range_x, freq)
for key, value in pairs:
print(key, ' | ', ' '.join(np.repeat('*', value)))
Lalu jalankan skrip! Kita akan mendapatkan teks histogram yang cantique.
165 | * * * *
166 |
167 | *
168 | * * *
169 | * *
170 | * *
171 | * * * *
172 | * * * * * * *
173 | * * * * *
174 | * * * *
- .
4: Dotplot
Sekali lagi sekarang saat yang tepat, untuk menggunakan populasi data di atas menjadi sesuatu yang bermanfaat.
Saqya mendapatkan carany dari stackoverflow
.
Header and Data
Sama seperti sebelumnya
Bagan
Untuk membuat dotplot
,
kita membutuhkan scatter chart
yang disediakan oleh matplotlib
.
Dan scatter chart
ini membutuhkan fungsi meshgrid
,
yang disediakan oleh numpy
.
bins = np.arange(range_min, range_max+1)
range_x = bins[:-1]
freq, edges = np.histogram(data, bins=bins)
y = np.arange(1, freq.max()+1, 1)
x = range_x
X,Y = np.meshgrid(x,y)
plt.scatter(X,Y, c=Y<=freq, cmap="Greens")
plt.show()
Hiasan Dekorasi
Sekarang kita dapat melengkapi bagan,
dengan ticks
, label
, berikut limits
.
Kita juga dapat menyembunyikan spines border
.
bins = np.arange(range_min, range_max+1)
range_x = bins[:-1]
freq, edges = np.histogram(data, bins=bins)
y = np.arange(1, freq.max()+1, 1)
x = range_x
X,Y = np.meshgrid(x,y)
plt.title('Height of Students')
plt.xlabel('Height (cm)')
plt.ylabel('Frequency')
plt.yticks(y)
plt.xticks(x)
plt.ylim(0, freq.max()+1)
plt.xlim(range_min-3, range_max+2)
plt.tick_params(top=False, bottom=True, left=False, right=False, labelleft=False, labelbottom=True)
for pos in ['right', 'top', 'left']:
plt.gca().spines[pos].set_visible(False)
plt.scatter(X,Y, c=Y<=freq, cmap="Greens")
plt.subplots_adjust(bottom=0.2)
plt.show()
Bagan dotplot
inilah yang kita butuhkan.
5: Stemplots
Karena saya penasaran,
saya juga mencoba-coba chart bernama stemplot
.
Say amendapatkan caranya dari situs geeksforgeeks
.
Menghitung Frekuensi
Bagan stemplot
menghitung kekerapan frekuensi,
berbasis dari data yang unik.
Karena itu kita dapat mengabaikan nilai yang jumlah frekuensinya nol.
Tentu saja, kita dapat memaanfaatkan perhitungan sebelumnya.
uniq = np.unique(np.sort(data))
freq = freq[freq >0]
Kalau mau lebih singkat, pakai cara di bawah.
uniq, freq = np.unique(data, return_counts=True)
Bagan
Sekarang, kita dapat melengkapi bagan, berikut hiasan dekorasinya.
uniq, freq = np.unique(data, return_counts=True)
plt.title('Height of Students')
plt.xlabel('Frequency')
plt.ylabel('Height (cm)')
plt.xticks(np.arange(1, freq.max()+1, 1))
plt.yticks(np.arange(range_min-1, range_max+1, 1))
for pos in ['right', 'top', 'left']:
plt.gca().spines[pos].set_visible(False)
plt.ylim(range_min-2, range_max+2)
plt.xlim(0, freq.max()+1)
plt.stem(freq, uniq)
plt.subplots_adjust(bottom=0.2)
plt.show()
Sudah jadi, walaupun saya juga belum paham,
apa sebetulnya kegunaan dari stemplot
.
Penutup
Gitu aja dah. Makasih yacc, sudah mampir.
Bagaimana menurut sohib?