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 μ

¯x=Ni=1xiN=x1+x2++xNN
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:

ni=1(xi¯x)2n1
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.0119.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