Halo Autehemrs dan Insan Coding, jumpa lagi dalam seri Tutorial Python untuk Pemula. Bagi kamu yang mau belajar python, kamu sedang berada di website yang tepat.
Sebelumnya kita sudah membahas library math, kini saya akan bahas bagaimana cara menggunakan library statistics di python dan contoh aplikasi sedernana statistik dengan python.
š Daftar Isi
- Mengimpor Library Statistics
- Membuat Data untuk Analisis Statistik
- Menghitung Nilai Rata-rata (Mean)
- Menghitung Median
- Menghitung Modus
- Menghitung Variansi
- Menghitung Standar Deviasi
- Menentukan Nilai Minimum dan Maksimum
- Mengurutkan Data
- Contoh Aplikasi Statistik Sederhana dengan Python
- Pengembangan Aplikasi Statistik
- Kesimpulan
- FAQ: Library Statistics di Python
Dalam dunia pemrograman modern, pengolahan data menjadi salah satu kemampuan yang sangat penting. Banyak aplikasi komputer saat ini membutuhkan kemampuan untuk menganalisis data, menghitung rata-rata, mengetahui nilai maksimum dan minimum, hingga memahami penyebaran data secara statistik.
š Baca Juga
Python sebagai bahasa pemrograman yang sangat populer dalam bidang data science menyediakan berbagai alat untuk melakukan analisis data. Salah satu modul bawaan Python yang sangat berguna untuk keperluan ini adalah library statistics.
Library statistics merupakan modul standar Python yang dirancang khusus untuk melakukan berbagai perhitungan statistik dasar. Dengan modul ini, programmer dapat dengan mudah menghitung berbagai nilai statistik tanpa harus menuliskan rumus matematika secara manual.
Beberapa perhitungan statistik yang dapat dilakukan menggunakan library ini antara lain:
- menghitung rata-rata data
- mencari nilai median
- menentukan modus
- menghitung standar deviasi
- menghitung variansi
- menentukan nilai minimum dan maksimum
Modul ini sangat cocok digunakan untuk analisis data sederhana, aplikasi pendidikan, serta berbagai proyek pemrograman yang berkaitan dengan pengolahan angka.
Pada tutorial ini kita akan mempelajari berbagai fungsi penting dalam library statistics serta membuat contoh aplikasi sederhana yang memanfaatkan fungsi-fungsi tersebut.
Mengimpor Library Statistics
Sebelum menggunakan modul statistik di Python, kita harus mengimpornya terlebih dahulu.
Contoh kode:
import statistics
Setelah modul ini diimpor, kita dapat menggunakan berbagai fungsi yang tersedia di dalamnya.
Membuat Data untuk Analisis Statistik
Sebelum melakukan perhitungan statistik, kita perlu menyiapkan data terlebih dahulu. Biasanya data disimpan dalam bentuk list.
Contoh data:
data = [10, 15, 20, 25, 30, 35, 40]
List tersebut berisi beberapa angka yang akan kita analisis menggunakan fungsi statistik.
Menghitung Nilai Rata-rata (Mean)
Rata-rata merupakan salah satu ukuran statistik yang paling sering digunakan. Nilai ini diperoleh dengan menjumlahkan seluruh data kemudian membaginya dengan jumlah data.
Library statistics menyediakan fungsi mean() untuk menghitung rata-rata.
Contoh kode:
import statistics
data = [10, 15, 20, 25, 30]
hasil = statistics.mean(data)
print("Rata-rata:", hasil)
Output: Rata-rata: 20.
Fungsi ini sangat berguna dalam berbagai aplikasi seperti analisis nilai siswa, perhitungan rata-rata penjualan, atau pengolahan data penelitian.
Menghitung Median
Median adalah nilai tengah dari sebuah kumpulan data yang telah diurutkan.
Python menyediakan fungsi median() untuk menghitung nilai median.
Contoh kode:
import statistics
data = [10, 20, 30, 40, 50]
hasil = statistics.median(data)
print("Median:", hasil)
Output:
Median: 30
Median sering digunakan ketika data memiliki nilai ekstrem yang dapat mempengaruhi rata-rata.
Menghitung Modus
Modus adalah nilai yang paling sering muncul dalam sebuah kumpulan data.
Python menyediakan fungsi mode() untuk menentukan nilai modus.
Contoh kode:
import statistics
data = [10, 20, 20, 30, 40]
hasil = statistics.mode(data)
print("Modus:", hasil)
Output:
Modus: 20
Modus sering digunakan dalam analisis data kategori atau data frekuensi.
Menghitung Variansi
Variansi adalah ukuran yang menunjukkan seberapa jauh data tersebar dari nilai rata-rata.
Python menyediakan fungsi variance() untuk menghitung variansi.
Contoh kode:
import statistics
data = [10, 20, 30, 40, 50]
hasil = statistics.variance(data)
print("Variansi:", hasil)
Variansi sering digunakan dalam statistik dan analisis data untuk memahami tingkat penyebaran data.
Menghitung Standar Deviasi
Standar deviasi adalah ukuran statistik yang menunjukkan seberapa jauh nilai data menyimpang dari rata-rata.
Python menyediakan fungsi stdev() untuk menghitung standar deviasi.
Contoh kode:
import statistics
data = [10, 20, 30, 40, 50]
hasil = statistics.stdev(data)
print("Standar deviasi:", hasil)
Standar deviasi sangat penting dalam berbagai analisis statistik, termasuk penelitian ilmiah dan analisis keuangan.
Menentukan Nilai Minimum dan Maksimum
Selain fungsi statistik khusus, kita juga dapat menggunakan fungsi bawaan Python untuk menentukan nilai minimum dan maksimum dari suatu data.
Contoh kode:
data = [10, 25, 30, 45, 60]
print("Nilai minimum:", min(data))
print("Nilai maksimum:", max(data))
Output:
Nilai minimum: 10
Nilai maksimum: 60
Mengurutkan Data
Sering kali kita perlu mengurutkan data sebelum melakukan analisis statistik.
Python menyediakan fungsi sorted() untuk mengurutkan data.
Contoh kode:
data = [30, 10, 50, 20, 40]
hasil = sorted(data)
print(hasil)
Output:
[10, 20, 30, 40, 50]
Contoh Aplikasi Statistik Sederhana dengan Python
Setelah memahami berbagai fungsi statistik, sekarang kita akan membuat aplikasi sederhana yang dapat menghitung berbagai nilai statistik dari data yang dimasukkan pengguna.
Program ini akan meminta pengguna memasukkan beberapa angka, kemudian menghitung berbagai nilai statistik.
Contoh kode program:
import statistics
print("===================================")
print(" APLIKASI STATISTIK PYTHON ")
print("===================================")
data = []
jumlah = int(input("Berapa banyak data yang ingin dimasukkan? "))
for i in range(jumlah):
angka = float(input("Masukkan angka: "))
data.append(angka)
print("\nData:", data)
print("\nHASIL ANALISIS STATISTIK")
print("------------------------")
print("Rata-rata:", statistics.mean(data))
print("Median:", statistics.median(data))
print("Modus:", statistics.mode(data))
print("Variansi:", statistics.variance(data))
print("Standar deviasi:", statistics.stdev(data))
print("Nilai minimum:", min(data))
print("Nilai maksimum:", max(data))
Program ini akan membaca beberapa angka dari pengguna, kemudian menampilkan berbagai hasil analisis statistik.
Contoh output program:
APLIKASI STATISTIK PYTHON
Berapa banyak data yang ingin dimasukkan? 5
Masukkan angka: 10
Masukkan angka: 20
Masukkan angka: 30
Masukkan angka: 40
Masukkan angka: 50
HASIL ANALISIS STATISTIK
Rata-rata: 30
Median: 30
Modus: 10
Variansi: 250
Standar deviasi: 15.81
Nilai minimum: 10
Nilai maksimum: 50
Pengembangan Aplikasi Statistik
Aplikasi statistik yang telah dibuat masih sangat sederhana. Namun program ini dapat dikembangkan lebih jauh dengan berbagai fitur tambahan.
Beberapa pengembangan yang dapat dilakukan antara lain:
- membuat grafik data menggunakan matplotlib
- membaca data dari file CSV
- membuat laporan analisis statistik
- menambahkan perhitungan statistik lanjutan
- membuat aplikasi statistik berbasis GUI
Dengan menambahkan library seperti NumPy, Pandas, dan Matplotlib, Python dapat menjadi alat analisis data yang sangat kuat.
Sekarang, tugas Authemers adalah melengkapi dan menjalankan kode dibawah:
"""
APLIKASI STATISTIK LENGKAP - PYTHON
Menggabungkan statistics, numpy, scipy, pandas, dan visualisasi matplotlib
"""
import statistics as stats
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats as scipy_stats
import warnings
warnings.filterwarnings('ignore')
# Setting untuk tampilan yang lebih baik
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.float_format', '{:.4f}'.format)
class AplikasiStatistik:
"""
Kelas utama untuk aplikasi statistik komprehensif
"""
def __init__(self):
self.data = []
self.dataframe = None
self.nama_data = "Data Pengguna"
self.menu_utama()
def menu_utama(self):
"""Menu utama aplikasi"""
while True:
print("\n" + "="*60)
print(" š APLIKASI STATISTIK LENGKAP PYTHON")
print("="*60)
print("1ļøā£ Input Data Manual")
print("2ļøā£ Generate Data Random")
print("3ļøā£ Import dari CSV/Excel")
print("4ļøā£ Lihat Data")
print("5ļøā£ Statistik Dasar (Modul statistics)")
print("6ļøā£ Statistik Lanjutan (NumPy)")
print("7ļøā£ Analisis Distribusi (SciPy)")
print("8ļøā£ Uji Hipotesis")
print("9ļøā£ Visualisasi Data")
print("š Analisis DataFrame (Pandas)")
print("1ļøā£1ļøā£ Ekspor Hasil ke File")
print("0ļøā£ Keluar")
print("="*60)
pilihan = input("Pilih menu (0-11): ")
if pilihan == '1':
self.input_data_manual()
elif pilihan == '2':
self.generate_data_random()
elif pilihan == '3':
self.import_file()
elif pilihan == '4':
self.lihat_data()
elif pilihan == '5':
self.statistik_dasar()
elif pilihan == '6':
self.statistik_numpy()
elif pilihan == '7':
self.analisis_distribusi()
elif pilihan == '8':
self.uji_hipotesis()
elif pilihan == '9':
self.visualisasi()
elif pilihan == '10':
self.analisis_pandas()
elif pilihan == '11':
self.ekspor_hasil()
elif pilihan == '0':
print("š Terima kasih telah menggunakan aplikasi ini!")
break
else:
print("ā Pilihan tidak valid. Silakan coba lagi.")
def input_data_manual(self):
"""Input data secara manual"""
print("\n" + "-"*40)
print("š INPUT DATA MANUAL")
print("-"*40)
try:
n = int(input("Berapa jumlah data? "))
self.data = []
print("Masukkan data satu per satu:")
for i in range(n):
nilai = float(input(f"Data ke-{i+1}: "))
self.data.append(nilai)
self.dataframe = pd.DataFrame({self.nama_data: self.data})
print("ā
Data berhasil diinput!")
except ValueError:
print("ā Input tidak valid. Gunakan angka.")
def generate_data_random(self):
"""Generate data random dengan berbagai distribusi"""
print("\n" + "-"*40)
print("š² GENERATE DATA RANDOM")
print("-"*40)
print("Pilih distribusi:")
print("1. Normal (Gaussian)")
print("2. Uniform (Seragam)")
print("3. Eksponensial")
print("4. Binomial")
print("5. Poisson")
try:
pilihan = input("Pilih distribusi (1-5): ")
n = int(input("Jumlah data yang diinginkan: "))
if pilihan == '1':
mean = float(input("Rata-rata (mean): "))
std = float(input("Standar deviasi: "))
self.data = np.random.normal(mean, std, n).tolist()
self.nama_data = f"Distribusi Normal (μ={mean}, Ļ={std})"
elif pilihan == '2':
low = float(input("Batas bawah: "))
high = float(input("Batas atas: "))
self.data = np.random.uniform(low, high, n).tolist()
self.nama_data = f"Distribusi Uniform [{low}, {high}]"
elif pilihan == '3':
scale = float(input("Scale (1/Ī»): "))
self.data = np.random.exponential(scale, n).tolist()
self.nama_data = f"Distribusi Eksponensial (scale={scale})"
elif pilihan == '4':
n_trials = int(input("Jumlah percobaan (n): "))
p = float(input("Probabilitas sukses (p): "))
self.data = np.random.binomial(n_trials, p, n).tolist()
self.nama_data = f"Distribusi Binomial (n={n_trials}, p={p})"
elif pilihan == '5':
lam = float(input("Lambda (Ī»): "))
self.data = np.random.poisson(lam, n).tolist()
self.nama_data = f"Distribusi Poisson (Ī»={lam})"
self.dataframe = pd.DataFrame({self.nama_data: self.data})
print(f"ā
Berhasil generate {n} data!")
except Exception as e:
print(f"ā Error: {e}")
def import_file(self):
"""Import data dari file CSV/Excel"""
print("\n" + "-"*40)
print("š IMPORT DATA DARI FILE")
print("-"*40)
try:
file_path = input("Masukkan path file (CSV/Excel): ")
if file_path.endswith('.csv'):
self.dataframe = pd.read_csv(file_path)
elif file_path.endswith(('.xlsx', '.xls')):
self.dataframe = pd.read_excel(file_path)
else:
print("ā Format file tidak didukung. Gunakan CSV atau Excel.")
return
print("ā
Data berhasil diimport!")
print(f"Dimensi data: {self.dataframe.shape}")
print(f"Kolom: {list(self.dataframe.columns)}")
# Ambil kolom numerik pertama sebagai data default
numeric_cols = self.dataframe.select_dtypes(include=[np.number]).columns
if len(numeric_cols) > 0:
kolom = input(f"Pilih kolom untuk analisis ({numeric_cols[0]}): ")
if kolom == "":
kolom = numeric_cols[0]
if kolom in numeric_cols:
self.data = self.dataframe[kolom].dropna().tolist()
self.nama_data = kolom
else:
print("ā Kolom tidak valid.")
else:
print("ā Tidak ada kolom numerik.")
except FileNotFoundError:
print("ā File tidak ditemukan.")
except Exception as e:
print(f"ā Error: {e}")
def lihat_data(self):
"""Menampilkan data yang sedang aktif"""
print("\n" + "-"*40)
print("šļø LIHAT DATA")
print("-"*40)
if len(self.data) == 0:
print("ā Belum ada data. Silakan input data terlebih dahulu.")
return
print(f"Nama Data: {self.nama_data}")
print(f"Jumlah Data: {len(self.data)}")
print("\n10 Data Pertama:")
for i, val in enumerate(self.data[:10]):
print(f" {i+1:2d}. {val:.4f}")
if len(self.data) > 10:
print(f" ... dan {len(self.data)-10} data lainnya")
# Tampilkan ringkasan cepat
print("\nš Ringkasan Cepat:")
print(f" Min: {min(self.data):.4f}")
print(f" Max: {max(self.data):.4f}")
print(f" Range: {max(self.data)-min(self.data):.4f}")
def statistik_dasar(self):
"""Menampilkan semua fungsi dari modul statistics"""
print("\n" + "-"*40)
print("š STATISTIK DASAR (Modul statistics)")
print("-"*40)
if len(self.data) < 2:
print("ā Minimal membutuhkan 2 data.")
return
data = self.data
print(f"Data: {self.nama_data} ({len(data)} observasi)")
print("\n" + "="*40)
# 1. FUNGSI PEMUSATAN DATA
print("\nš FUNGSI PEMUSATAN DATA:")
print("-"*30)
try:
print(f"1. mean() - Rata-rata aritmetika : {stats.mean(data):.6f}")
except Exception as e: print(f"1. mean() - Error: {e}")
try:
print(f"2. fmean() - Rata-rata float cepat : {stats.fmean(data):.6f}")
except Exception as e: print(f"2. fmean() - Error: {e}")
try:
if all(x > 0 for x in data):
print(f"3. geometric_mean() - Rata-rata geometrik : {stats.geometric_mean(data):.6f}")
else:
print("3. geometric_mean() - Tidak bisa (data negatif/nol)")
except Exception as e: print(f"3. geometric_mean() - Error: {e}")
try:
if all(x > 0 for x in data):
print(f"4. harmonic_mean() - Rata-rata harmonik : {stats.harmonic_mean(data):.6f}")
else:
print("4. harmonic_mean() - Tidak bisa (data negatif/nol)")
except Exception as e: print(f"4. harmonic_mean() - Error: {e}")
try:
print(f"5. median() - Median : {stats.median(data):.6f}")
except Exception as e: print(f"5. median() - Error: {e}")
try:
print(f"6. median_low() - Median rendah : {stats.median_low(data):.6f}")
except Exception as e: print(f"6. median_low() - Error: {e}")
try:
print(f"7. median_high() - Median tinggi : {stats.median_high(data):.6f}")
except Exception as e: print(f"7. median_high() - Error: {e}")
try:
print(f"8. median_grouped() - Median berkelompok : {stats.median_grouped(data):.6f}")
except Exception as e: print(f"8. median_grouped() - Error: {e}")
try:
print(f"9. mode() - Modus (nilai pertama) : {stats.mode(data)}")
except Exception as e: print(f"9. mode() - Error: {e}")
try:
print(f"10. multimode() - Semua modus : {stats.multimode(data)}")
except Exception as e: print(f"10. multimode() - Error: {e}")
try:
print(f"11. quantiles() - Kuartil (4 interval) : {stats.quantiles(data, n=4)}")
q = stats.quantiles(data, n=4)
print(f" Q1 (25%): {q[0]:.4f}, Q2 (50%): {q[1]:.4f}, Q3 (75%): {q[2]:.4f}")
except Exception as e: print(f"11. quantiles() - Error: {e}")
# 2. FUNGSI SEBARAN DATA
print("\nš FUNGSI SEBARAN DATA:")
print("-"*30)
try:
print(f"12. pstdev() - Std dev populasi : {stats.pstdev(data):.6f}")
except Exception as e: print(f"12. pstdev() - Error: {e}")
try:
print(f"13. pvariance() - Varian populasi : {stats.pvariance(data):.6f}")
except Exception as e: print(f"13. pvariance() - Error: {e}")
try:
print(f"14. stdev() - Std dev sampel : {stats.stdev(data):.6f}")
except Exception as e: print(f"14. stdev() - Error: {e}")
try:
print(f"15. variance() - Varian sampel : {stats.variance(data):.6f}")
except Exception as e: print(f"15. variance() - Error: {e}")
def statistik_numpy(self):
"""Fungsi statistik lanjutan dengan NumPy"""
print("\n" + "-"*40)
print("š¢ STATISTIK LANJUTAN (NumPy)")
print("-"*40)
if len(self.data) == 0:
print("ā Belum ada data.")
return
data_array = np.array(self.data)
print("\nš STATISTIK DESKRIPTIF:")
print("-"*30)
print(f"1. np.mean() : {np.mean(data_array):.6f}")
print(f"2. np.median() : {np.median(data_array):.6f}")
print(f"3. np.std() : {np.std(data_array):.6f}")
print(f"4. np.var() : {np.var(data_array):.6f}")
print(f"5. np.min() : {np.min(data_array):.6f}")
print(f"6. np.max() : {np.max(data_array):.6f}")
print(f"7. np.ptp() : {np.ptp(data_array):.6f} (range)")
print(f"8. np.percentile 25%: {np.percentile(data_array, 25):.6f}")
print(f"9. np.percentile 50%: {np.percentile(data_array, 50):.6f}")
print(f"10. np.percentile 75%: {np.percentile(data_array, 75):.6f}")
print("\nš MOMEN STATISTIK:")
print("-"*30)
print(f"11. Skewness (kemencengan): {scipy_stats.skew(data_array):.6f}")
print(f"12. Kurtosis (keruncingan): {scipy_stats.kurtosis(data_array):.6f}")
# Jika ada 2 kolom atau lebih, hitung korelasi
if self.dataframe is not None and len(self.dataframe.columns) >= 2:
numeric_df = self.dataframe.select_dtypes(include=[np.number])
if len(numeric_df.columns) >= 2:
print("\nš MATRIKS KORELASI:")
print("-"*30)
corr_matrix = numeric_df.corr()
print(corr_matrix)
def analisis_distribusi(self):
"""Analisis distribusi data dengan SciPy"""
print("\n" + "-"*40)
print("š ANALISIS DISTRIBUSI (SciPy)")
print("-"*40)
if len(self.data) < 3:
print("ā Minimal membutuhkan 3 data.")
return
data_array = np.array(self.data)
print("\nš UJI NORMALITAS:")
print("-"*30)
# Shapiro-Wilk Test
statistic, p_value = scipy_stats.shapiro(data_array[:5000]) # Batasi untuk performa
print(f"1. Shapiro-Wilk Test:")
print(f" Statistik: {statistic:.6f}")
print(f" P-value : {p_value:.6f}")
if p_value > 0.05:
print(f" ā
Data berdistribusi normal (p > 0.05)")
else:
print(f" ā Data TIDAK berdistribusi normal (p < 0.05)")
# Kolmogorov-Smirnov Test
statistic, p_value = scipy_stats.kstest(data_array, 'norm',
args=(np.mean(data_array), np.std(data_array)))
print(f"\n2. Kolmogorov-Smirnov Test:")
print(f" Statistik: {statistic:.6f}")
print(f" P-value : {p_value:.6f}")
# D'Agostino's K-squared Test
statistic, p_value = scipy_stats.normaltest(data_array)
print(f"\n3. D'Agostino Test:")
print(f" Statistik: {statistic:.6f}")
print(f" P-value : {p_value:.6f}")
print("\nš PARAMETER DISTRIBUSI:")
print("-"*30)
# Fit distribusi normal
params = scipy_stats.norm.fit(data_array)
print(f"Normal Distribution Fit:")
print(f" Mean (loc): {params[0]:.6f}")
print(f" Std (scale): {params[1]:.6f}")
# Hitung AIC untuk beberapa distribusi
print("\nš PERBANDINGAN DISTRIBUSI (AIC):")
print("-"*30)
print("Semakin kecil AIC, semakin baik fit distribusi")
distributions = [
('norm', scipy_stats.norm),
('expon', scipy_stats.expon),
('gamma', scipy_stats.gamma),
('lognorm', scipy_stats.lognorm),
('uniform', scipy_stats.uniform)
]
for name, dist in distributions:
try:
params = dist.fit(data_array)
log_likelihood = np.sum(dist.logpdf(data_array, *params))
aic = 2 * len(params) - 2 * log_likelihood
print(f"{name:10s}: AIC = {aic:.2f}")
except:
print(f"{name:10s}: Gagal dihitung")
def uji_hipotesis(self):
"""Uji hipotesis statistik"""
print("\n" + "-"*40)
print("š¬ UJI HIPOTESIS STATISTIK")
print("-"*40)
print("\nPilih jenis uji:")
print("1. One-sample t-test (uji satu sampel)")
print("2. Independent t-test (uji dua sampel independen)")
print("3. Paired t-test (uji berpasangan)")
print("4. ANOVA satu arah")
print("5. Chi-square test")
print("6. Mann-Whitney U test (non-parametrik)")
pilihan = input("Pilih (1-6): ")
if pilihan == '1':
# One-sample t-test
if len(self.data) < 2:
print("ā Data tidak cukup.")
return
popmean = float(input("Masukkan nilai populasi yang dihipotesiskan: "))
t_stat, p_value = scipy_stats.ttest_1samp(self.data, popmean)
print(f"\nHasil One-Sample T-Test:")
print(f"t-statistic: {t_stat:.6f}")
print(f"p-value : {p_value:.6f}")
alpha = 0.05
if p_value < alpha:
print(f"ā
Tolak H0 (p < {alpha}) - Rata-rata sampel berbeda signifikan")
else:
print(f"ā Gagal tolak H0 (p > {alpha}) - Tidak ada perbedaan signifikan")
elif pilihan == '2':
# Independent t-test
print("\nMasukkan data kelompok 1:")
data1 = []
n1 = int(input("Jumlah data kelompok 1: "))
for i in range(n1):
data1.append(float(input(f"Data ke-{i+1}: ")))
print("\nMasukkan data kelompok 2:")
data2 = []
n2 = int(input("Jumlah data kelompok 2: "))
for i in range(n2):
data2.append(float(input(f"Data ke-{i+1}: ")))
t_stat, p_value = scipy_stats.ttest_ind(data1, data2)
print(f"\nHasil Independent T-Test:")
print(f"t-statistic: {t_stat:.6f}")
print(f"p-value : {p_value:.6f}")
if p_value < 0.05:
print("ā
Kedua kelompok berbeda signifikan")
else:
print("ā Kedua kelompok tidak berbeda signifikan")
elif pilihan == '3':
# Paired t-test
print("\nMasukkan data sebelum:")
before = []
n = int(input("Jumlah data: "))
for i in range(n):
before.append(float(input(f"Data sebelum ke-{i+1}: ")))
print("\nMasukkan data sesudah:")
after = []
for i in range(n):
after.append(float(input(f"Data sesudah ke-{i+1}: ")))
t_stat, p_value = scipy_stats.ttest_rel(before, after)
print(f"\nHasil Paired T-Test:")
print(f"t-statistic: {t_stat:.6f}")
print(f"p-value : {p_value:.6f}")
if p_value < 0.05:
print("ā
Ada perubahan signifikan")
else:
print("ā Tidak ada perubahan signifikan")
def visualisasi(self):
"""Visualisasi data dengan matplotlib dan seaborn"""
print("\n" + "-"*40)
print("š VISUALISASI DATA")
print("-"*40)
if len(self.data) == 0:
print("ā Belum ada data.")
return
print("\nPilih jenis visualisasi:")
print("1. Histogram")
print("2. Box Plot")
print("3. Violin Plot")
print("4. Q-Q Plot (uji normalitas)")
print("5. Semua visualisasi")
pilihan = input("Pilih (1-5): ")
# Setup figure
if pilihan == '5':
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
axes = axes.flatten()
else:
fig, axes = plt.subplots(1, 1, figsize=(10, 6))
axes = [axes]
plot_index = 0
if pilihan == '1' or pilihan == '5':
# Histogram
ax = axes[plot_index]
ax.hist(self.data, bins='auto', edgecolor='black', alpha=0.7, color='skyblue')
ax.axvline(np.mean(self.data), color='red', linestyle='--', linewidth=2, label=f'Mean: {np.mean(self.data):.2f}')
ax.axvline(np.median(self.data), color='green', linestyle='--', linewidth=2, label=f'Median: {np.median(self.data):.2f}')
ax.set_xlabel('Nilai')
ax.set_ylabel('Frekuensi')
ax.set_title(f'Histogram - {self.nama_data}')
ax.legend()
plot_index += 1
if pilihan == '2' or pilihan == '5':
# Box Plot
ax = axes[plot_index]
ax.boxplot(self.data, vert=True, patch_artist=True)
ax.set_ylabel('Nilai')
ax.set_title(f'Box Plot - {self.nama_data}')
ax.grid(True, alpha=0.3)
plot_index += 1
if pilihan == '3' or pilihan == '5':
# Violin Plot
ax = axes[plot_index]
parts = ax.violinplot(self.data, showmeans=True, showmedians=True)
ax.set_ylabel('Nilai')
ax.set_title(f'Violin Plot - {self.nama_data}')
ax.grid(True, alpha=0.3)
plot_index += 1
if pilihan == '4' or pilihan == '5':
# Q-Q Plot
ax = axes[plot_index]
scipy_stats.probplot(self.data, dist="norm", plot=ax)
ax.set_title(f'Q-Q Plot - {self.nama_data}')
plot_index += 1
plt.tight_layout()
plt.show()
# Statistik tambahan untuk visualisasi
print("\nš Statistik untuk Visualisasi:")
print(f"Mean : {np.mean(self.data):.4f}")
print(f"Median : {np.median(self.data):.4f}")
print(f"Std : {np.std(self.data):.4f}")
print(f"Skewness: {scipy_stats.skew(self.data):.4f}")
print(f"Kurtosis: {scipy_stats.kurtosis(self.data):.4f}")
def analisis_pandas(self):
"""Analisis menggunakan pandas"""
print("\n" + "-"*40)
print("š¼ ANALISIS DATAFRAME (Pandas)")
print("-"*40)
if self.dataframe is None:
print("ā Belum ada DataFrame. Buat data terlebih dahulu.")
return
print("\nš INFORMASI DATAFRAME:")
print("-"*30)
print(self.dataframe.info())
print("\nš STATISTIK DESKRIPTIF:")
print("-"*30)
print(self.dataframe.describe(include='all'))
print("\nš CEK DATA KOSONG:")
print("-"*30)
print(self.dataframe.isnull().sum())
if len(self.dataframe.select_dtypes(include=[np.number]).columns) >= 2:
print("\nš MATRIKS KORELASI:")
print("-"*30)
print(self.dataframe.corr())
def ekspor_hasil(self):
"""Ekspor hasil analisis ke file"""
print("\n" + "-"*40)
print("š¾ EKSPOR HASIL ANALISIS")
print("-"*40)
if self.dataframe is None:
print("ā Tidak ada data untuk diekspor.")
return
print("\nPilih format:")
print("1. CSV")
print("2. Excel")
print("3. Text (statistik ringkasan)")
pilihan = input("Pilih (1-3): ")
try:
if pilihan == '1':
filename = input("Nama file CSV (contoh: hasil.csv): ")
self.dataframe.to_csv(filename, index=False)
print(f"ā
Data berhasil diekspor ke {filename}")
elif pilihan == '2':
filename = input("Nama file Excel (contoh: hasil.xlsx): ")
self.dataframe.to_excel(filename, index=False)
print(f"ā
Data berhasil diekspor ke {filename}")
elif pilihan == '3':
filename = input("Nama file teks (contoh: ringkasan.txt): ")
with open(filename, 'w') as f:
f.write(f"RINGKASAN STATISTIK\n")
f.write("="*50 + "\n")
f.write(f"Data: {self.nama_data}\n")
f.write(f"Jumlah Data: {len(self.data)}\n")
f.write(f"Mean: {np.mean(self.data):.6f}\n")
f.write(f"Median: {np.median(self.data):.6f}\n")
f.write(f"Std Dev: {np.std(self.data):.6f}\n")
f.write(f"Min: {min(self.data):.6f}\n")
f.write(f"Max: {max(self.data):.6f}\n")
f.write(f"Range: {max(self.data)-min(self.data):.6f}\n")
print(f"ā
Ringkasan berhasil diekspor ke {filename}")
except Exception as e:
print(f"ā Error saat mengekspor: {e}")
# ============================================
# FUNGSI UTAMA UNTUK MENJALANKAN APLIKASI
# ============================================
def main():
"""Fungsi utama untuk menjalankan aplikasi"""
print("\n" + "="*60)
print(" š SELAMAT DATANG DI APLIKASI STATISTIK PYTHON š")
print("="*60)
print("Aplikasi ini menyediakan:")
print("ā Semua fungsi modul statistics bawaan")
print("ā Fungsi statistik NumPy dan SciPy")
print("ā Visualisasi dengan Matplotlib")
print("ā Analisis dengan Pandas")
print("ā Uji hipotesis statistik")
print("="*60)
# Jalankan aplikasi
app = AplikasiStatistik()
# ============================================
# CONTOH PENGGUNAAN LANGSUNG (TANPA INTERAKSI)
# ============================================
def contoh_cepat():
"""Contoh penggunaan cepat tanpa interaksi"""
print("\n" + "="*60)
print("š CONTOH CEPAT ANALISIS STATISTIK")
print("="*60)
# Buat data contoh
data = [12, 15, 14, 10, 8, 9, 15, 16, 14, 13,
11, 12, 15, 14, 13, 12, 11, 10, 9, 8]
print(f"\nData: {data}")
print(f"Jumlah data: {len(data)}")
# Statistik dasar
print("\nš STATISTIK DASAR:")
print(f"Mean : {stats.mean(data):.2f}")
print(f"Median : {stats.median(data):.2f}")
print(f"Mode : {stats.mode(data)}")
print(f"Variance : {stats.variance(data):.2f}")
print(f"Std Dev : {stats.stdev(data):.2f}")
# Visualisasi sederhana
plt.figure(figsize=(12, 4))
plt.subplot(1, 3, 1)
plt.hist(data, bins=8, edgecolor='black', alpha=0.7)
plt.title('Histogram')
plt.xlabel('Nilai')
plt.ylabel('Frekuensi')
plt.subplot(1, 3, 2)
plt.boxplot(data)
plt.title('Box Plot')
plt.ylabel('Nilai')
plt.subplot(1, 3, 3)
scipy_stats.probplot(data, dist="norm", plot=plt)
plt.title('Q-Q Plot')
plt.tight_layout()
plt.show()
print("\nā
Contoh selesai!")
# ============================================
# MENJALANKAN APLIKASI
# ============================================
if __name__ == "__main__":
print("\nPilih mode:")
print("1. Aplikasi Interaktif (menu)")
print("2. Contoh Cepat")
mode = input("Pilih mode (1/2): ")
if mode == '2':
contoh_cepat()
else:
main()
Sebelum menjalankan aplikasi, pastikan Anda menginstal library yang diperlukan:
# Install semua library yang dibutuhkan
pip install numpy pandas matplotlib seaborn scipy openpyxl
Selamat menyelesaikan misi.
Kesimpulan
Library statistics merupakan salah satu modul bawaan Python yang sangat berguna untuk melakukan analisis data secara sederhana. Modul ini menyediakan berbagai fungsi penting seperti menghitung rata-rata, median, modus, variansi, dan standar deviasi.
Dengan memahami cara menggunakan library ini, programmer dapat membuat berbagai aplikasi yang berkaitan dengan analisis data dan statistik. Walaupun modul ini dirancang untuk analisis sederhana, konsep yang dipelajari dapat menjadi dasar untuk mempelajari analisis data yang lebih kompleks menggunakan library Python lainnya.
Bagi pemula yang ingin belajar data science atau analisis data, memahami library statistics merupakan langkah awal yang sangat baik sebelum mempelajari alat analisis data yang lebih canggih.
FAQ: Library Statistics di Python
1. Apa itu library statistics di Python?
Library statistics adalah modul bawaan Python yang digunakan untuk melakukan berbagai perhitungan statistik dasar seperti rata-rata, median, modus, variansi, dan standar deviasi. Modul ini sangat berguna untuk analisis data sederhana tanpa harus menggunakan library tambahan.
2. Apakah library statistics perlu diinstal terlebih dahulu?
Tidak. Library statistics sudah termasuk dalam standar Python sejak versi 3.4. Artinya, Anda tidak perlu menginstalnya secara terpisah. Anda hanya perlu mengimpornya menggunakan perintah import statistics.
3. Apa fungsi mean() dalam library statistics?
Fungsi mean() digunakan untuk menghitung nilai rata-rata dari sekumpulan data numerik. Fungsi ini menjumlahkan seluruh data kemudian membaginya dengan jumlah elemen yang ada dalam data tersebut.
4. Apa perbedaan median dan mean dalam statistik?
Mean adalah nilai rata-rata dari seluruh data, sedangkan median adalah nilai tengah dari data yang telah diurutkan. Median sering digunakan ketika data memiliki nilai ekstrem yang dapat mempengaruhi hasil rata-rata.
5. Apa yang dimaksud dengan modus dalam Python statistics?
Modus adalah nilai yang paling sering muncul dalam sebuah kumpulan data. Dalam Python, nilai modus dapat dihitung menggunakan fungsi statistics.mode().
6. Kapan sebaiknya menggunakan library statistics dibandingkan NumPy atau Pandas?
Library statistics cocok digunakan untuk analisis data sederhana dan program kecil. Namun jika Anda bekerja dengan data dalam jumlah besar atau analisis yang lebih kompleks, biasanya programmer menggunakan library seperti NumPy atau Pandas.
7. Apa fungsi variance() dalam library statistics?
Fungsi variance() digunakan untuk menghitung variansi dari sebuah dataset. Variansi menunjukkan seberapa jauh penyebaran data dari nilai rata-rata.
8. Apa fungsi stdev() dalam library statistics?
Fungsi stdev() digunakan untuk menghitung standar deviasi dari data. Standar deviasi menunjukkan seberapa besar penyimpangan data dari nilai rata-rata.
9. Apakah library statistics hanya bisa digunakan untuk angka?
Ya. Fungsi dalam library statistics dirancang untuk bekerja dengan data numerik seperti integer dan float. Jika data berupa teks atau kategori, maka perlu diolah terlebih dahulu sebelum digunakan.
10. Apakah library statistics bisa digunakan untuk membuat aplikasi analisis data?
Tentu saja. Library ini sering digunakan untuk membuat aplikasi analisis data sederhana seperti program pengolahan nilai siswa, analisis penjualan, atau aplikasi statistik dasar. Untuk aplikasi yang lebih kompleks biasanya digabungkan dengan library lain seperti NumPy, Pandas, atau Matplotlib.