Utilizziamo i cookie per migliorare la tua esperienza sul sito
CodeWorlds

Statystyka - matematyka danych

Statystyka to fundament Data Science - pozwala wyciągać wnioski z danych!

Statystyki opisowe

1import numpy as np
2import scipy.stats as stats
3
4data = np.array([120, 450, 85, 200, 330, 150, 280, 95, 400, 175])
5
6# Miary tendencji centralnej
7print(f"Średnia: {np.mean(data):.2f}")
8print(f"Mediana: {np.median(data):.2f}")
9print(f"Moda: {stats.mode(data, keepdims=True)[0][0]}")
10
11# Miary rozproszenia
12print(f"Odchylenie std: {np.std(data):.2f}")
13print(f"Wariancja: {np.var(data):.2f}")
14print(f"Rozstęp: {np.ptp(data)}")
15print(f"IQR: {stats.iqr(data):.2f}")
16
17# Kwartyle i percentyle
18print(f"Q1 (25%): {np.percentile(data, 25):.2f}")
19print(f"Q2 (50%): {np.percentile(data, 50):.2f}")
20print(f"Q3 (75%): {np.percentile(data, 75):.2f}")
21print(f"95 percentyl: {np.percentile(data, 95):.2f}")
22
23# Skośność i kurtoza
24print(f"Skośność: {stats.skew(data):.2f}")
25print(f"Kurtoza: {stats.kurtosis(data):.2f}")

Rozkłady prawdopodobieństwa

1import matplotlib.pyplot as plt
2
3# Rozkład normalny
4x = np.linspace(-4, 4, 1000)
5y_normal = stats.norm.pdf(x, loc=0, scale=1)
6
7plt.figure(figsize=(10, 6))
8plt.plot(x, y_normal, label='Normal(0,1)')
9plt.fill_between(x, y_normal, alpha=0.3)
10plt.title('Rozkład normalny')
11plt.legend()
12plt.show()
13
14# Generowanie danych z rozkładów
15normal_data = np.random.normal(loc=100, scale=15, size=1000)
16poisson_data = np.random.poisson(lam=5, size=1000)
17exponential_data = np.random.exponential(scale=2, size=1000)
18
19# Test normalności (Shapiro-Wilk)
20stat, p_value = stats.shapiro(normal_data)
21print(f"Shapiro-Wilk: statystyka={stat:.4f}, p-value={p_value:.4f}")
22if p_value > 0.05:
23    print("Dane prawdopodobnie pochodzą z rozkładu normalnego")

Testy statystyczne

1# T-test - porównanie średnich dwóch grup
2group_a = np.random.normal(100, 15, 50)
3group_b = np.random.normal(105, 15, 50)
4
5t_stat, p_value = stats.ttest_ind(group_a, group_b)
6print(f"T-test: t={t_stat:.4f}, p={p_value:.4f}")
7
8# Test chi-kwadrat - zależność zmiennych kategorycznych
9observed = np.array([[50, 30], [20, 40]])
10chi2, p_value, dof, expected = stats.chi2_contingency(observed)
11print(f"Chi-kwadrat: chi2={chi2:.4f}, p={p_value:.4f}")
12
13# Korelacja Pearsona
14x = np.random.rand(100)
15y = x + np.random.rand(100) * 0.5
16corr, p_value = stats.pearsonr(x, y)
17print(f"Korelacja Pearsona: r={corr:.4f}, p={p_value:.4f}")
18
19# Korelacja Spearmana (rangowa)
20rho, p_value = stats.spearmanr(x, y)
21print(f"Korelacja Spearmana: rho={rho:.4f}, p={p_value:.4f}")

Przedziały ufności

1# Przedział ufności dla średniej
2data = np.random.normal(100, 15, 100)
3mean = np.mean(data)
4sem = stats.sem(data)  # Standard error of mean
5ci_95 = stats.t.interval(0.95, len(data)-1, loc=mean, scale=sem)
6
7print(f"Średnia: {mean:.2f}")
8print(f"95% CI: ({ci_95[0]:.2f}, {ci_95[1]:.2f})")

Regresja liniowa

1from scipy import stats
2
3# Dane
4x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
5y = 2 * x + 1 + np.random.randn(10)
6
7# Regresja
8slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
9
10print(f"Współczynnik kierunkowy: {slope:.4f}")
11print(f"Wyraz wolny: {intercept:.4f}")
12print(f"R-squared: {r_value**2:.4f}")
13print(f"P-value: {p_value:.4f}")
14
15# Wykres
16plt.figure(figsize=(10, 6))
17plt.scatter(x, y, label='Dane')
18plt.plot(x, slope * x + intercept, 'r-', label=f'y = {slope:.2f}x + {intercept:.2f}')
19plt.legend()
20plt.title('Regresja liniowa')
21plt.show()
Vai a CodeWorlds