Statistik Deskriptif
Setiap kelompok data numerik mempunyai properti tersendiri yang menjelaskan secara unik data tersebut:
Sebelum mulai, mari kita mengambil beberapa sampel data
import pandas as pd import statistics, itertools from IPython.display import HTML, display from tabulate import tabulate def table(df): display(HTML(tabulate(df, tablefmt='html', headers='keys', showindex=False)))
df = pd.read_csv('leaf.csv', nrows=9, usecols=['Aspect Ratio']) # Ambil Sampel data = [round(x[0],1) for x in df.values] # Bulat-bulat df = pd.DataFrame(data, columns=['sample']); # Data Frame dari Sample dc = df['sample'] # Data set kolom sample dc
0 1.5 1 1.5 2 1.6 3 1.5 4 1.8 5 1.5 6 1.8 7 1.6 8 1.8 Name: sample, dtype: float64
Data ini dapat kita deskripsikan menggunakan properti-properti berikut.
Mean
Mean adalah rata-rata dari suatu dataset. Diperoleh dari sum dataset lalu dibagi dengan jumlah elemen dataset. Biasa disimbolkan sebagai μ
print("Rata-rata", dc.values, "=", dc.mean())
Rata-rata [1.5 1.5 1.6 1.5 1.8 1.5 1.8 1.6 1.8] = 1.6222222222222222
Mean dalam built-in python:
print("Rata-rata", data, "=", statistics.mean(data))
Rata-rata [1.5, 1.5, 1.6, 1.5, 1.8, 1.5, 1.8, 1.6, 1.8] = 1.6222222222222222
Median
Median merupakan titik data yang paling baik apabila dataset telah diurutkan. Dalam data numerik non interval, data ke-(n-1)/2 adalah median jika n ganjil atau rata-rata dari data ke-(n/2) dan data ke-(n/2+1) jika n genap.
print("Median", dc.values, "=", dc.median())
Median [1.5 1.5 1.6 1.5 1.8 1.5 1.8 1.6 1.8] = 1.6
Median dalam built-in python:
print("Median", data, "=", statistics.median(data))
Median [1.5, 1.5, 1.6, 1.5, 1.8, 1.5, 1.8, 1.6, 1.8] = 1.6
Pembuktian dengan menyortir + eliminasi data:
sorteddata = data[:]; sorteddata.sort(); print(sorteddata) while(len(sorteddata)>1): sorteddata = sorteddata[1:-1] print(sorteddata)
[1.5, 1.5, 1.5, 1.5, 1.6, 1.6, 1.8, 1.8, 1.8] [1.5, 1.5, 1.5, 1.6, 1.6, 1.8, 1.8] [1.5, 1.5, 1.6, 1.6, 1.8] [1.5, 1.6, 1.6] [1.6]
Mode
Mode merupakan statistik untuk angka mana yang paling banyak frekuensinya dalam dataset. Mode bisa dalam bentuk diskrit atau kelompok.
Mode (diskrik) dalam built-in python:
print("Median", data, "=", statistics.mode(data))
Median [1.5, 1.5, 1.6, 1.5, 1.8, 1.5, 1.8, 1.6, 1.8] = 1.5
scipy
mempunyai tool untuk mendeteksi mode secara lebih detail jika ada >1 value dengan frekuensi yang sama
from scipy import stats from numpy import transpose modedata = stats.mode(dc) table(pd.DataFrame(transpose([modedata.mode, modedata.count]), columns=["Mode", "Count"]))
Mode | Count |
---|---|
1.5 | 4 |
Gunakan seaborn
untuk melihat frekuensi secara grafikal:
from seaborn import distplot ax = distplot(data)
Range
Range dalam suatu dataset ialah angka tertinggi dan angka terendah dalam dataset.
print("Range", dc.values, ", Max:", dc.max(), "Min:", dc.min())
Range [1.5 1.5 1.6 1.5 1.8 1.5 1.8 1.6 1.8] , Max: 1.8 Min: 1.5
Range dalam built-in python:
print("Range", data, ", Max:", max(data), "Min:", min(data))
Range [1.5, 1.5, 1.6, 1.5, 1.8, 1.5, 1.8, 1.6, 1.8] , Max: 1.8 Min: 1.5
Quantile
Quantil adalah jarak data yang memisahkan data sekin persen dari yang terkecil hingga tertinggi. Quantil dipisah menjadi: + Q1 sebagai Quantil bawah (25%) + Q2 sebagai Quantil tengah (50%) + Q3 sebagai Quantil atas (75%)
print("Quantil", dc.values, "Q1:", dc.quantile(0.25), "Q2:", dc.quantile(0.5), "Q3:", dc.quantile(0.75))
Quantil [1.5 1.5 1.6 1.5 1.8 1.5 1.8 1.6 1.8] Q1: 1.5 Q2: 1.6 Q3: 1.8
Quantil bisa dihitung menggunakan numpy
:
from numpy import quantile print("Quantil", data, "Q1:", quantile(data, 0.25), "Q2:", dc.quantile(0.5), "Q3:", dc.quantile(0.75))
Quantil [1.5, 1.5, 1.6, 1.5, 1.8, 1.5, 1.8, 1.6, 1.8] Q1: 1.5 Q2: 1.6 Q3: 1.8
Variance
Properti tentang seberapa jauh nilai dari rata-rata (alias variasi). Biasa disimbolkan σ2
print("Variansi", dc.values, "=", dc.var())
Variansi [1.5 1.5 1.6 1.5 1.8 1.5 1.8 1.6 1.8] = 0.01944444444444445
print("Variansi", data, "=", statistics.variance(data))
Variansi [1.5, 1.5, 1.6, 1.5, 1.8, 1.5, 1.8, 1.6, 1.8] = 0.01944444444444445
Standar Deviasi
Standar nilai tentang seberapa jauh data dari mean. Rumus:
print("Standar Deviasi", dc.values, "=", dc.std())
Standar Deviasi [1.5 1.5 1.6 1.5 1.8 1.5 1.8 1.6 1.8] = 0.1394433377556793
print("Variansi", data, "=", statistics.stdev(data))
Variansi [1.5, 1.5, 1.6, 1.5, 1.8, 1.5, 1.8, 1.6, 1.8] = 0.1394433377556793
Summary
Deskripsi Data set dalam leaf.csv
:
adf = pd.read_csv('leaf.csv') adata = [[x, '{:.2f}'.format(adf[x].mean()), '{:.2f}'.format(adf[x].median()), '{:.2f}'.format(adf[x].min()), '{:.2f}'.format(adf[x].max()), '{:.2f}'.format(adf[x].skew()), '{:.2f}'.format(adf[x].var()), '{:.2f}'.format(adf[x].std())] for x in adf.columns[1:]] table(pd.DataFrame(adata, columns=['Nama Kolom', 'Mean', 'Median', 'Min', 'Max', 'Skew', 'Var', 'Std']))
Nama Kolom | Mean | Median | Min | Max | Skew | Var | Std |
---|---|---|---|---|---|---|---|
Specimen Number | 6.28 | 6 | 1 | 16 | 0.2 | 11.99 | 3.46 |
Eccentricity | 0.72 | 0.76 | 0.12 | 1 | -0.56 | 0.04 | 0.21 |
Aspect Ratio | 2.44 | 1.57 | 1.01 | 19.04 | 3.33 | 6.76 | 2.6 |
Elongation | 0.51 | 0.5 | 0.11 | 0.95 | 0.34 | 0.04 | 0.2 |
Solidity | 0.9 | 0.95 | 0.49 | 0.99 | -2.06 | 0.01 | 0.11 |
Stochastic Convexity | 0.94 | 0.99 | 0.4 | 1 | -2.63 | 0.01 | 0.12 |
Isoperimetric Factor | 0.53 | 0.58 | 0.08 | 0.86 | -0.48 | 0.05 | 0.22 |
Maximal Indentation Depth | 0.04 | 0.02 | 0 | 0.2 | 1.71 | 0 | 0.04 |
Lobedness | 0.52 | 0.1 | 0 | 7.21 | 3.12 | 1.08 | 1.04 |
Average Intensity | 0.05 | 0.04 | 0.01 | 0.19 | 0.94 | 0 | 0.04 |
Average Contrast | 0.12 | 0.12 | 0.03 | 0.28 | 0.47 | 0 | 0.05 |
Smoothness | 0.02 | 0.01 | 0 | 0.07 | 1.21 | 0 | 0.01 |
Third moment | 0.01 | 0 | 0 | 0.03 | 1.78 | 0 | 0.01 |
Uniformity | 0 | 0 | 0 | 0 | 2.13 | 0 | 0 |
Entropy | 1.16 | 1.08 | 0.17 | 2.71 | 0.49 | 0.34 | 0.58 |