mgr/py/2.py

74 lines
2.7 KiB
Python
Raw Normal View History

2025-05-03 19:50:29 +02:00
#!/usr/bin/env python3
# analysis.py
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
def main():
# Wczytanie danych
df = pd.read_json("../data/data.json")
# Definiujemy X i y do wielozmiennej regresji (możemy się nimi posłużyć w analizie statystycznej)
X_multi = df[['DL', 'L2_Exposure', 'AoA', 'Usage_Frequency', 'Social_Support', 'Interference']]
y = df['L2_Competence']
X_multi = sm.add_constant(X_multi)
# Wielowymiarowy model (tu raczej do publikacji w tabeli ze współczynnikami)
model_multi = sm.OLS(y, X_multi).fit()
print(model_multi.summary())
# --- [1] WYKRES: L2_Competence vs. L2_Exposure z dopasowaną prostą ---
# Jednowymiarowa regresja względem L2_Exposure
X_exp = sm.add_constant(df['L2_Exposure'])
model_exp = sm.OLS(y, X_exp).fit()
y_pred_exp = model_exp.predict(X_exp)
# Sortujemy, by linia była ciągła
sort_idx = np.argsort(df['L2_Exposure'])
X_sorted_exp = df['L2_Exposure'].values[sort_idx]
y_pred_sorted_exp = y_pred_exp.values[sort_idx]
plt.figure()
plt.scatter(df['L2_Exposure'], df['L2_Competence'])
plt.plot(X_sorted_exp, y_pred_sorted_exp) # Linia regresji
plt.xlabel('L2 Exposure (h/tyg.)')
plt.ylabel('L2 Competence (punkty)')
plt.title('Kompetencja L2 vs. Ekspozycja na język drugi\n(z dopasowaną linią regresji)')
plt.savefig('../figs/figure_1.png', dpi=300)
plt.close()
# --- [2] WYKRES: L2_Competence vs. DL z dopasowaną prostą ---
# Jednowymiarowa regresja względem DL
X_dl = sm.add_constant(df['DL'])
model_dl = sm.OLS(y, X_dl).fit()
y_pred_dl = model_dl.predict(X_dl)
# Sortowanie
sort_idx_dl = np.argsort(df['DL'])
X_sorted_dl = df['DL'].values[sort_idx_dl]
y_pred_sorted_dl = y_pred_dl.values[sort_idx_dl]
plt.figure()
plt.scatter(df['DL'], df['L2_Competence'])
plt.plot(X_sorted_dl, y_pred_sorted_dl) # Linia regresji
plt.xlabel('Dominujący język (h/tyg.)')
plt.ylabel('L2 Competence (punkty)')
plt.title('Kompetencja L2 vs. Czas w języku dominującym\n(z dopasowaną linią regresji)')
plt.savefig('../figs/figure_2.png', dpi=300)
plt.close()
# Eksport tabeli z danymi do LaTeX (opcjonalnie)
with open("../doc/inc/table.tex", "w", encoding="utf-8") as f:
f.write(df.to_latex(index=False,
caption="Przykładowe dane dotyczące kompetencji językowych.",
label="tab:data"))
print("\n[INFO] Zapisano wykresy (figure_1.png, figure_2.png) z dopasowanymi liniami regresji.")
print("[INFO] Zapisano tabelę (table.tex) w folderze figs/.")
if __name__ == "__main__":
main()