/
Nik_voz
/
rgpu_python_analysis
Обзор
Документация
Войти
/
Nik_voz
/
rgpu_python_analysis
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
python_analysis/second_semestr/pract3-2.py
118 строк
4 KB
Nick-voz
another commit.
23 дек 2025, 17:37
23 дек 2025, 17:37
e0763c4
Код
Авторство
О чём код?
import os import matplotlib.pyplot as plt import numpy as np import pandas as pd from constants import Columns from dotenv import load_dotenv from scipy import stats load_dotenv() DATASET_PATH = os.environ.get("DATASET_PATH") if DATASET_PATH is None: raise RuntimeWarning("DATASET_PATH not set") data = pd.read_csv(DATASET_PATH, sep=";") desc = data.describe(include=[np.number]) print("=== Describe (числовые признаки) ===") print(desc) score_cols = [ Columns.AVERAGE_SALARY_FACT_AVG, Columns.AVERAGE_SALARY_NORM_AVG, Columns.AVERAGE_SALARY_FACT_MED, ] scores = data[score_cols].dropna() sum_scores = scores.sum(axis=1) means = scores.mean() print("\n=== Средние по выбранным колонкам ===") print(means) best_exam = means.idxmax() print("\nКолонка с наибольшим средним:", best_exam) trimmed_mean_sum = stats.trim_mean(sum_scores, 0.1) # усечение 10% с концов print("\nУсечённое среднее суммы (10%):", trimmed_mean_sum) modes = stats.mode(sum_scores) print("\nМода(ы) суммы:", modes) median_sum = np.median(sum_scores) print("\nМедиана суммы:", median_sum) std_sum = np.std(sum_scores, ddof=1) print("\nСтандартное отклонение суммы (sample):", std_sum) plt.figure(figsize=(8, 6)) plt.boxplot(sum_scores, vert=True, patch_artist=True) plt.title("Boxplot: сумма трёх выбранных показателей ") plt.ylabel("Сумма значений") plt.grid(axis="y", linestyle=":", alpha=0.6) plt.show() # H0: прохождение курса подготовки не влияет на итоговую оценку. # H1: влияет. # если percent_combine_work_and_study > 0 — считаем, что выпускник совмещал работу и учёбу , # else — не совмещал. # Сравниваем среднюю average_salary_fact_avg между группами. grp_has = data[ data[Columns.PERCENT_COMBINE_WORK_AND_STUDY].notna() & (data[Columns.PERCENT_COMBINE_WORK_AND_STUDY] > 0) ] grp_no = data[ data[Columns.PERCENT_COMBINE_WORK_AND_STUDY].notna() & (data[Columns.PERCENT_COMBINE_WORK_AND_STUDY] == 0) ] x1 = grp_has[Columns.AVERAGE_SALARY_FACT_AVG].dropna() x2 = grp_no[Columns.AVERAGE_SALARY_FACT_AVG].dropna() t_stat, p_value = stats.ttest_ind(x1, x2, equal_var=False, nan_policy="omit") alpha = 0.05 print( "\n=== t-test: влияние совмещения (proxy) на average_salary_fact_avg ===" ) print("t-statistic:", t_stat, "p-value:", p_value) if p_value < alpha: print("Отвергаем") else: print("Нет оснований отвергнуть ") # Гипотеза: нормированная средняя зарплата (average_salary_norm_avg) отличается между мужчинами и женщинами. # H0: средние равны. # H1: средние различаются. male = data[(data[Columns.GENDER] == "Мужской")][ Columns.AVERAGE_SALARY_NORM_AVG ].dropna() female = data[(data[Columns.GENDER] == "Женский")][ Columns.AVERAGE_SALARY_NORM_AVG ].dropna() t_stat2, p_value2 = stats.ttest_ind( male, female, equal_var=False, nan_policy="omit" ) print("\n=== различие нормированной зарплаты по полу ===") print("t-statistic:", t_stat2, "p-value:", p_value2) if p_value2 < alpha: print("Отвергаем") else: print("Нет оснований отвергнуть") plt.figure(figsize=(10, 6)) box_data = [ data[Columns.AVERAGE_SALARY_FACT_AVG].dropna(), data[Columns.AVERAGE_SALARY_NORM_AVG].dropna(), data[Columns.AVERAGE_SALARY_FACT_MED].dropna(), ] plt.boxplot( box_data, labels=["fact_avg", "norm_avg", "fact_med"], patch_artist=True ) plt.title("Сравнение распределений: fact_avg, norm_avg, fact_med") plt.ylabel("Значения") plt.grid(axis="y", linestyle=":", alpha=0.6) plt.show()