74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
#!/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()
|
|
|