numplot 0.0.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
numplot-0.0.6/PKG-INFO ADDED
@@ -0,0 +1,45 @@
1
+ Metadata-Version: 2.2
2
+ Name: numplot
3
+ Version: 0.0.6
4
+ Summary: Extension for math
5
+ Home-page: https://github.com/EgorZhizhlo/TASK_CONTROL
6
+ Author: amogusbazed
7
+ Author-email: amogusbazed@gmail.com
8
+ Project-URL: GitHub, https://github.com/EgorZhizhlo/TASK_CONTROL
9
+ Keywords: files speedfiles
10
+ Classifier: Programming Language :: Python :: 3.13
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Operating System :: OS Independent
13
+ Requires-Python: >=3.6
14
+ Description-Content-Type: text/markdown
15
+ Requires-Dist: requests>=2.25.1
16
+ Requires-Dist: openai>=0.28.0
17
+ Dynamic: author
18
+ Dynamic: author-email
19
+ Dynamic: classifier
20
+ Dynamic: description
21
+ Dynamic: description-content-type
22
+ Dynamic: home-page
23
+ Dynamic: keywords
24
+ Dynamic: project-url
25
+ Dynamic: requires-dist
26
+ Dynamic: requires-python
27
+ Dynamic: summary
28
+
29
+ # Numplot File Library #
30
+
31
+ ## What is this? ##
32
+ The module allows you to work with files in just one line of code, without the need to manually open and close the file each time
33
+
34
+ ## Quick Guide ##
35
+ The module is based on the following structure:
36
+
37
+
38
+ f = open('data.txt')
39
+ data = f.readlines()
40
+ f.close()
41
+
42
+ Which Python provides by standard.
43
+
44
+
45
+ ----------
@@ -0,0 +1,17 @@
1
+ # Numplot File Library #
2
+
3
+ ## What is this? ##
4
+ The module allows you to work with files in just one line of code, without the need to manually open and close the file each time
5
+
6
+ ## Quick Guide ##
7
+ The module is based on the following structure:
8
+
9
+
10
+ f = open('data.txt')
11
+ data = f.readlines()
12
+ f.close()
13
+
14
+ Which Python provides by standard.
15
+
16
+
17
+ ----------
@@ -0,0 +1,21 @@
1
+ from .task_1 import t_1
2
+ from .task_2 import t_2
3
+ from .task_3 import t_3
4
+ from .task_4 import t_4
5
+ from .task_5_1 import t_5_1
6
+ from .task_5_2 import t_5_2
7
+ from .task_5_3 import t_5_3
8
+
9
+ __all__ = ['t_1', 't_2', 't_3', 't_4', 't_5_1', 't_5_2', 't_5_3']
10
+
11
+ def h():
12
+ text = """
13
+ t_1 (1, 2)
14
+ t_2 (1, 2)
15
+ t_3
16
+ t_4
17
+ t_5
18
+ _1 (1, 2)
19
+ _2 (1)
20
+ _3 (1, 2, 3)"""
21
+ return text
@@ -0,0 +1,120 @@
1
+ """import openai
2
+
3
+
4
+ class GPTClient:
5
+ def __init__(self, api_key: str, model: str = "gpt-3.5-turbo-instruct-0914"):
6
+ self.api_key = api_key
7
+ self.model = model
8
+ openai.api_key = self.api_key
9
+
10
+ def send_request(self, prompt: str, max_tokens: int = 100, temperature: float = 0.7):
11
+ try:
12
+ response = openai.ChatCompletion.create(
13
+ model=self.model,
14
+ messages=[
15
+ {"role": "system", "content": "You are a helpful assistant."},
16
+ {"role": "user", "content": prompt}
17
+ ],
18
+ max_tokens=max_tokens,
19
+ temperature=temperature,
20
+ )
21
+ return response["choices"][0]["message"]["content"].strip()
22
+ except Exception as e:
23
+ return f"Ошибка при запросе: {str(e)}"
24
+ """
25
+
26
+ def t_1(var=1, prompt=""):
27
+ if var == 1:
28
+ text = """
29
+ 1. Абсолютно непрерывная случайная величина X может принимать значения только в отрезке [4,7]. На этом отрезке плотность распределения случайной величины X имеет вид: f(x)=C(1+3x0,5+6x0,7+9x0,9)1,5, где C – положительная константа. Найдите: 1) константу C; 2) математическое ожидание E(X); 3) стандартное отклонение σX; 4) квантиль уровня 0,8 распределения X.
30
+ import sympy as sp
31
+
32
+ l, r = [4, 7]
33
+
34
+ # Определение переменных
35
+ x = sp.symbols('x')
36
+ C = sp.symbols('C')
37
+
38
+ # Плотность вероятности
39
+ f_x = C * (1 + 3 * x**0.5 + 6 * x**0.7 + 9 * x**0.9)**1.5
40
+
41
+
42
+ # 1. Нахождение константы C
43
+ normalization_integral = sp.integrate(f_x, (x, l, r))
44
+ C_value = sp.solve(normalization_integral - 1, C)[0]
45
+
46
+ # 2. Математическое ожидание E(X)
47
+ f_x_with_C = f_x.subs(C, C_value)
48
+ E_X = sp.integrate(x * f_x_with_C, (x, l, r))
49
+
50
+ # 3. Стандартное отклонение σX
51
+ E_X2 = sp.integrate(x**2 * f_x_with_C, (x, l, r))
52
+ variance_X = E_X2 - E_X**2
53
+ std_dev_X = sp.sqrt(variance_X)
54
+
55
+ # 4. Квантиль уровня 0.9
56
+ quantile_eq = sp.integrate(f_x_with_C, (x, l, x)) - 0.8
57
+ quantile_90 = sp.nsolve(quantile_eq, x, l + 1) # Начальное приближение x=5
58
+
59
+ print("Нахождение константы C", round(C_value, 5))
60
+ print("Математическое ожидание E(X)", round(E_X.evalf(), 3))
61
+ print("Стандартное отклонение σX", round(std_dev_X.evalf(), 3))
62
+ print("Квантиль уровня 0.9", round(quantile_90, 3))")"""
63
+ if var == 2:
64
+ text = """2. import sympy as sp
65
+ def compute_probability_and_constant(f, x_limits, y_limits, a):
66
+ Вычисляет нормирующую константу C и вероятность P(X > a) для заданной функции плотности.
67
+
68
+ :param f: Символьная функция плотности, принимающая переменные x, y и C.
69
+ :param x_limits: Кортеж с ограничениями для x (x_min, x_max).
70
+ :param y_limits: Кортеж с ограничениями для y (y_min, y_max).
71
+ :param a: Значение для вычисления вероятности P(X > a).
72
+ :return: Кортеж (C, P(X > a)).
73
+ # Определяем переменные
74
+ x, y, C = sp.symbols('x y C')
75
+
76
+ # Шаг 1: Нормировка плотности
77
+ # Вычисляем двойной интеграл
78
+ integral = sp.integrate(sp.integrate(
79
+ f, (y, y_limits[0], y_limits[1])), (x, x_limits[0], x_limits[1]))
80
+
81
+ # Устанавливаем уравнение для нормировки
82
+ normalization_eq = sp.Eq(integral, 1)
83
+
84
+ # Решаем уравнение для C
85
+ C_value = sp.solve(normalization_eq, C)[0]
86
+
87
+ # Подставляем значение C в функцию плотности
88
+ f_with_C = f.subs(C, C_value)
89
+
90
+ # Шаг 2: Вычисление вероятности P(X > a)
91
+ probability = sp.integrate(sp.integrate(
92
+ f_with_C, (y, y_limits[0], y_limits[1])), (x, a, x_limits[1]))
93
+
94
+ # Шаг 2: Вычисление вероятности P(X < a)
95
+ # probability = sp.integrate(sp.integrate(f_with_C, (y, y_limits[0], y_limits[1])), (x, x_limits[0], a))
96
+
97
+ return C_value, probability
98
+
99
+
100
+ # Пример использования
101
+ x_limits = (0, 2)
102
+ y_limits = (0, 3)
103
+ a = 1
104
+
105
+ # Определяем функцию плотности
106
+ C, x, y = sp.symbols('C x y')
107
+ density_function = C * x * y * (2 - x)
108
+
109
+ # Вызываем функцию
110
+ C_value, probability = compute_probability_and_constant(
111
+ density_function, x_limits, y_limits, a)
112
+
113
+ print(f"Найдена константа C: {C_value}")
114
+ print(f"P(X > {a}): {probability}")
115
+ """
116
+ # if var == 30:
117
+ # API_KEY = "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"
118
+ # gpt_client = GPTClient(api_key=API_KEY)
119
+ # text = gpt_client.send_request(prompt=prompt)"""
120
+ return text
@@ -0,0 +1,18 @@
1
+ def t_2(var=1):
2
+ if var == 1:
3
+ text = """
4
+ Для эмпирической дисперсии показать справедливость формулы: (сигма^2)^ = X^2‾ - (X‾)^2, где 1/n * сумма i=1 по n (Xi^2)
5
+ (сигма^2)^ = 1/n * сумма i=1 по n (Xi - X‾)^2 = sigm((Xi)^2) - 2X‾ + X‾ = X^2‾ - (X‾)^2
6
+ """
7
+ if var == 2:
8
+ text = """
9
+ Оценка 2|3|4|5
10
+ Число 10|18|23|39
11
+ 6 преп
12
+ x0‾ = 2*10 + 3*18 + 4*23 + 5*39/10 + 18 + 23 + 39
13
+ N = 10 + ... + 39 = 90, n = 90/6 = 15
14
+ E(X‾) = X0‾
15
+ Var(X‾) = Var(X)/n * N-n/N-1
16
+ Var(X) = (2^2 * 10 + 3^2 * 18 + 4^2 * 23 + 5^2 * 39/90) - (X0‾)^2
17
+ """
18
+ return text
@@ -0,0 +1,14 @@
1
+ def t_3():
2
+ text = """
3
+ Монету подбрасывают п раз. Вероятность выпадения герба при каждом
4
+ подбрасывании равна р. В ходе опыта монета выпала гербом n1 раз. Показать,
5
+ несмещенность оценки вероятности @ (тетта) = р. Выпадения герба в каждом опыте.
6
+ n1 ~ Bin(n, p)
7
+ E(n1) = n*p
8
+ Var(n1) = np(1-p)
9
+ @ = p
10
+ @^ = n1/n
11
+ E(@^) = E(n1)/n = np/n = @
12
+ """
13
+
14
+ return text
@@ -0,0 +1,32 @@
1
+ def t_4():
2
+ text = """По выборке объёма n = 13, извлечённой из нормальной генеральной совокупности
3
+ известным средним квадратичным отклонением о = 3, при уровне значимости
4
+ 0,05 проверяется нулевая типотеза H0 : мю = мю0 = 17
5
+ Требуется: а) найти мощность критерия для проверки гипотезы H0 : мю = мю0 = 16
6
+ б) найти объём выборки n, при котором мощность критерия не меньше 0,92.
7
+ мю0 = 17
8
+ a = 0,05
9
+ w0 = 0,92
10
+ se = о/sqrt(n)
11
+ w = 1 - betta = P(H1|H1) = P(z < zлев) = P((b) < zлев - h) мю = мю1
12
+ h = (мю1 - мю0)/se
13
+ z = (x‾ - мю0)/se ~ N(0,1)
14
+ z < zлев
15
+ (x‾ - мю0)/se < zлев
16
+ (x‾ - мю1 + мю1 - мю0)/se < zлев
17
+ b = (x‾ - мю1)se
18
+ b + h < zлев
19
+ b < zлев - h
20
+ w = P(b < zлев - h)
21
+ b ~ N(0,1)
22
+ h1 = мю1 - мю0/ о/sqrt(n1) (se)
23
+ w1 = P(z < zлев) мю = мю1) = P(b < zлев - h1) >= 0,92
24
+ F0,1(Zлев - h1) >= 0,92
25
+ zлев - h1 >= F^-1 0,1(0,92)
26
+ zлев - мю1 - мю0/о/sqrt(n1) >= F^-1 0,1(0,92)
27
+ n1 >= ?
28
+ n1 >= sts.norm.ppf(0.92)
29
+ n1 = 84
30
+ """
31
+
32
+ return text
@@ -0,0 +1,156 @@
1
+ def t_5_1(var=1):
2
+ if var == 1:
3
+ text = """1. Ряд совместных наблюдений независимых нормально распределенных случайных величин X и Y, описывающих некоторый финансовый показатель двух фирм, задан двумерной выборкой:
4
+ {(-199.76, -175.45); (-219.72, -194.67);
5
+
6
+ ALPHA_MEAN = 0.01 # Уровень значимости для теста средних
7
+ APLHA_VARIANCE = 0.05 # Уровень значимости для теста дисперсий
8
+
9
+ import pandas as pd
10
+ import numpy as np
11
+ from scipy.stats import pearsonr, ttest_ind, f
12
+
13
+ raw_data = [(-195.996, -166.5), (-165.653, -176.5),]
14
+
15
+ data = pd.DataFrame(raw_data, columns=["A", "B"])
16
+ data = data.replace("NA", np.nan).dropna()
17
+
18
+ correlation, _ = pearsonr(data["A"], data["B"])
19
+ print(f"Коэффициент корреляции Пирсона: {correlation:.20f}")
20
+
21
+ t_stat, p_value_ttest = ttest_ind(data["A"], data["B"], equal_var=False, alternative='less')
22
+ print(f"P-значение (t-тест Уэлча): {p_value_ttest:.20f}")
23
+
24
+ result_mean_test = int(p_value_ttest < ALPHA_MEAN)
25
+ print(f"Результат теста средних (0.01): {result_mean_test}")
26
+
27
+ var_a = np.var(data["A"], ddof=1)
28
+ var_b = np.var(data["B"], ddof=1)
29
+ df_a = len(data["A"]) - 1
30
+ df_b = len(data["B"]) - 1
31
+
32
+ if var_a > var_b:
33
+ f_stat = var_a / var_b
34
+ p_value_f_test = 2 * min(f.cdf(f_stat, df_a, df_b), 1 - f.cdf(f_stat, df_a, df_b))
35
+ else:
36
+ f_stat = var_b / var_a
37
+ p_value_f_test = 2 * min(f.cdf(f_stat, df_b, df_a), 1 - f.cdf(f_stat, df_b, df_a))
38
+ print(f"P-значение (F-тест): {p_value_f_test:.20f}")
39
+
40
+
41
+ result_var_test = int(p_value_f_test < APLHA_VARIANCE)
42
+ print(f"Результат теста дисперсий (0.05): {result_var_test}")
43
+ """
44
+ if var == 2:
45
+ text = """2. Ряд совместных наблюдений независимых нормально распределенных случайных величин X и Y, описывающих некоторый финансовый показатель двух фирм, задан двумерной выборкой:
46
+ {(-199.76, -175.45); (-219.72, -194.67);
47
+
48
+ import pandas as pd
49
+ from scipy import stats
50
+ import numpy as np
51
+
52
+ # Исходная выборка
53
+ data_str = '{198.286; 246.779; 220.085; 246.747; 214.803; 185.845; 209.192; 194.611; 223.919; 179.129; 241.656; 217.265; 238.67; 250.006; 225.551; 226.978; 262.953; 241.953; 200.382; NA; 266.493; NA; 233.95; 180.868; 253.236; 235.486; NA; 223.485; 225.608; 180.776; 230.832; NA; 242.484; NA; 259.269; 200.804; 235.55; 211.408; 221.178; 229.775; 196.07; 221.893; 209.508; 251.971; 254.245; 220.548; 175.281; NA; 172.483; 232.299; NA; 228.23; 277.53; 193.646; 247.37; 242.237; NA; NA; 242.954; 278.095; 234.742; 216.922; 225.755; 57.2405; 140.296; 238.569; 255.539; 170.147; 213.087; 229.516; 297.115; 273.482; 255.184; 185.724; 216.916; 202.413; NA; 235.694; 234.179; 239.29; 272.892; 236.044; NA; 240.263; 199.191; 218.775; 229.579; 240.038; 192.553; NA; 189.733; 241.403; 202.706; 217.216; 213.539; 240.704; 222.891; 215.884; 211.748; 260.592; 243.107; 240.035; 191.842; 202.566; 210.37; 240.33; 177.987; 233.764; NA; 215.709; 194.024; NA; 223.56; 257.854; 192.569; NA; 234.059; 155.986; 205.711; NA; NA; 259.806; 97.862; 182.802; 216.353; 205.137; 248.445; 238.745; 226.804; 194.76; 188.979; 229.207; 222.214; 192.763; 196.348; NA; 203.879; 271.33; 183.157; 212.574; 205.584; 254.658; 145.924; 195.409; 256.001; 230.169; 202.936; 210.81; 216.317; 213.131; 222.949; 256.825; NA; 227.547; 206.946; 232.581; 234.514; 175.117; 185.762; 255.691; 222.334; 196.2; 195.761; 171.926; 262.256; 202.426; 200.09; 228.395; 246.669; 221.124; 226.906; 216.429; 263.651; 273.584; 244.739; 285.954; 232.574; 233.865; 257.806; 210.293; 215.845; 302.455; 198.001; 221.902; 217.286; 185.88; 262.461; 211.151; NA; 261.396; 229.128; NA; NA; 195.706; 187.56; NA; 238.316; 228.829; 228.331; 208.74; 220.437; NA; 217.72; 247.387; 237.704; 211.762; 216.217; 213.477; 229.971; 276.73; 180.528; 225.489; NA; 188.22; 187.836; NA; 234.212; 216.675; 238.106; 214.522; 250.688; 210.679; 237.116; 241.973; 257.346; 218.164; 422.834; 226.132; 167.298; NA; 229.316; 217.998; NA; NA; NA; 188.544; 203.947; 229.518; 172.359; 267.258; 186.823; 257.03; 168.345; 220.994; 198.383; 258.824; 183.02; 217.693; 179.737; 247.245; 192.304; 222.699; NA; 169.048; 185.635; 170.57; 193.607; 234.985; 348.11975; 231.014; 263.825; 238.719; 226.256; 213.965; 184.118; NA; 234.439; 210.868; 250.131; 263.714; NA; 228.815; 229.22; NA; 242.121; 212.691; 167.771; 168.012; 185.691; NA; 271.901; 257.318; 205.598; 211.823; 254.038; 197.852; NA; 183.742; 227.084; 182.92}'
54
+ data_list = list(map(lambda x: float(x) if x != 'NA' else None, data_str.replace('{', '').replace('}', '').split('; ')))
55
+ df = pd.DataFrame(data_list, columns=['A'])
56
+
57
+
58
+ # Количество пропущенных значений
59
+ na_count = df['A'].isna().sum()
60
+ print(f'Количество пропущенных значений: {na_count}')
61
+
62
+ # Очищенная выборка без пропусков
63
+ cleaned_data = df.dropna()['A']
64
+
65
+ # Объем очищенной выборки
66
+ n = len(cleaned_data)
67
+ print(f'Объем очищенной выборки: {n}')
68
+
69
+ # Среднее значение
70
+ mean = cleaned_data.mean()
71
+ print(f'Среднее значение: {mean}')
72
+
73
+ # Стандартное отклонение (исправленное)
74
+ std_dev = cleaned_data.std(ddof=1)
75
+ print(f'Стандартное отклонение: {std_dev}')
76
+
77
+ # Несмещенная дисперсия
78
+ var = std_dev ** 2
79
+ print(f'Несмещенная дисперсия: {var}')
80
+
81
+ # Первая квартиль
82
+ q1 = np.quantile(cleaned_data, 0.25)
83
+ print(f'Первая квартиль: {q1}')
84
+
85
+ # Третья квартиль
86
+ q3 = np.quantile(cleaned_data, 0.75)
87
+ print(f'Третья квартиль: {q3}')
88
+
89
+ # Медиана
90
+ median = np.median(cleaned_data)
91
+ print(f'Медиана: {median}')
92
+
93
+ # Максимальное значение
94
+ max_val = cleaned_data.max()
95
+ print(f'Максимальное значение: {max_val}')
96
+
97
+ # Минимальное значение
98
+ min_val = cleaned_data.min()
99
+ print(f'Минимальное значение: {min_val}')
100
+
101
+ # Размах выборки
102
+ range_ = max_val - min_val
103
+ print(f'Размах выборки: {range_}')
104
+
105
+ # Эксцесс (по формуле Excel)
106
+ kurtosis = stats.kurtosis(cleaned_data, bias=False)
107
+ print(f'Эксцесс: {kurtosis}')
108
+
109
+ # Коэффициент асимметрии (по формуле Excel)
110
+ skewness = stats.skew(cleaned_data, bias=False)
111
+ print(f'Коэффициент асимметрии: {skewness}')
112
+
113
+ # Ошибка выборки
114
+ sem = std_dev / np.sqrt(n)
115
+ print(f'Ошибка выборки: {sem}')
116
+
117
+ # Левая граница 0.95-доверительного интервала для E(X)
118
+ left_ci_mean = mean - 1.96 * sem
119
+ print(f'Левая граница 0.95-доверительного интервала для E(X): {left_ci_mean}')
120
+
121
+ # Правая граница 0.95-доверительного интервала для E(X)
122
+ right_ci_mean = mean + 1.96 * sem
123
+ print(f'Правая граница 0.95-доверительного интервала для E(X): {right_ci_mean}')
124
+
125
+ # Левая граница 0.95-доверительного интервала для Var(X)
126
+ chi_left = n * var / stats.chi2.ppf(0.975, n-1)
127
+ print(f'Левая граница 0.95-доверительного интервала для Var(X): {chi_left}')
128
+
129
+ # Правая граница 0.95-доверительного интервала для Var(X)
130
+ chi_right = n * var / stats.chi2.ppf(0.025, n-1)
131
+ print(f'Правая граница 0.95-доверительного интервала для Var(X): {chi_right}')
132
+
133
+ # Выбросы ниже нормы
134
+ outliers_low = sum(cleaned_data < q1 - 1.5 * (q3 - q1))
135
+ print(f'Выбросы ниже нормы: {outliers_low}')
136
+
137
+ # Выбросы выше нормы
138
+ outliers_high = sum(cleaned_data > q3 + 1.5 * (q3 - q1))
139
+ print(f'Выбросы выше нормы: {outliers_high}')
140
+
141
+ # Определяем выбросы
142
+ Q1 = np.quantile(cleaned_data, 0.25)
143
+ Q3 = np.quantile(cleaned_data, 0.75)
144
+ IQR = Q3 - Q1
145
+ lower_bound = Q1 - 1.5 * IQR
146
+ upper_bound = Q3 + 1.5 * IQR
147
+ no_outliers_data = cleaned_data[(cleaned_data >= lower_bound) & (cleaned_data <= upper_bound)]
148
+
149
+ import matplotlib.pyplot as plt
150
+ no_outliers_data.plot.hist()
151
+ plt.show()
152
+ no_outliers_data.plot.box()
153
+ plt.show()
154
+ """
155
+
156
+ return text
@@ -0,0 +1,88 @@
1
+ def t_5_2():
2
+ text = """Независимые наблюдения нормально распределенной случайной величины X, описывающей приращение стоимости типового контракта страховой фирмы, представлены в виде выборки:
3
+ {-194.69; -253.453; NA
4
+
5
+ ALPHA_MEAN = 0.9 # Уровень значимости для доверительного интервала для среднего
6
+ ALPHA_VAR = 0.9 # Уровень значимости для доверительного интервала для дисперсии
7
+
8
+ import numpy as np
9
+ import scipy.stats as stats
10
+ import matplotlib.pyplot as plt
11
+
12
+ data = np.array([223.9, 228.8797, None])
13
+
14
+ count_data = len(data)
15
+ print("Объём исходной выборки:", count_data)
16
+
17
+ missing_count = np.sum([x is None for x in data])
18
+ print("Количество пропущенных значений:", missing_count)
19
+
20
+ cleaned_data = np.array([x for x in data if x is not None])
21
+ sorted_data = np.sort(cleaned_data)
22
+ cleaned_size = len(sorted_data)
23
+ print("Объем очищенной выборки:", cleaned_size)
24
+
25
+ mean_value = sorted_data.mean()
26
+ print("Среднее значение:", mean_value)
27
+
28
+ std_dev = np.std(sorted_data, ddof=1)
29
+ print("Стандартное отклонение (исправленное):", std_dev)
30
+
31
+ variance = np.var(sorted_data, ddof=1)
32
+ print("Несмещенная дисперсия:", variance)
33
+
34
+ q1 = np.percentile(sorted_data, 25)
35
+ median = np.median(sorted_data)
36
+ q3 = np.percentile(sorted_data, 75)
37
+ print("Первая квартиль:", q1)
38
+ print("Медиана:", median)
39
+ print("Третья квартиль:", q3)
40
+
41
+ max_value = sorted_data.max()
42
+ print("Максимальное значение:", max_value)
43
+
44
+ min_value = sorted_data.min()
45
+ print("Минимальное значение:", min_value)
46
+
47
+ range_value = max_value - min_value
48
+ print("Размах выборки:", range_value)
49
+
50
+ kurtosis = stats.kurtosis(sorted_data, bias=False)
51
+ print("Эксцесс:", kurtosis)
52
+
53
+ skewness = stats.skew(sorted_data)
54
+ print("Коэффициент асимметрии:", skewness)
55
+
56
+ sample_error = stats.sem(sorted_data)
57
+ print("Ошибка выборки:", sample_error)
58
+
59
+ confidence_mean = stats.t.interval(
60
+ ALPHA_MEAN, cleaned_size - 1, loc=mean_value, scale=std_dev / np.sqrt(cleaned_size)
61
+ )
62
+ print(f"Левая граница {ALPHA_MEAN}-доверительного интервала для E(X):", confidence_mean[0])
63
+ print(f"Правая граница {ALPHA_MEAN}-доверительного интервала для E(X):", confidence_mean[1])
64
+
65
+ chi2_lower = stats.chi2.ppf((1 - ALPHA_VAR) / 2, cleaned_size - 1)
66
+ chi2_upper = stats.chi2.ppf(1 - (1 - ALPHA_VAR) / 2, cleaned_size - 1)
67
+ confidence_variance = (
68
+ (cleaned_size - 1) * variance / chi2_upper,
69
+ (cleaned_size - 1) * variance / chi2_lower
70
+ )
71
+ print(f"Левая граница {ALPHA_VAR}-доверительного интервала для Var(X):", confidence_variance[0])
72
+ print(f"Правая граница {ALPHA_VAR}-доверительного интервала для Var(X):", confidence_variance[1])
73
+
74
+ Q1 = np.percentile(sorted_data, 25)
75
+ Q3 = np.percentile(sorted_data, 75)
76
+ IQR = Q3 - Q1
77
+ lower_bound = Q1 - 1.5 * IQR
78
+ upper_bound = Q3 + 1.5 * IQR
79
+ outliers_below = np.sum(sorted_data < lower_bound)
80
+ outliers_above = np.sum(sorted_data > upper_bound)
81
+
82
+ print("Нижняя граница:", lower_bound)
83
+ print("Верхняя граница:", upper_bound)
84
+ print("Количество выбросов ниже нормы:", outliers_below)
85
+ print("Количество выбросов выше нормы:", outliers_above)
86
+ """
87
+
88
+ return text
@@ -0,0 +1,211 @@
1
+ def t_5_3(var=1):
2
+ if var == 1:
3
+ text = """1. По результатам социологического исследования ответы респондентов на определенный вопрос анкеты представлены в виде выборки:
4
+ {NA; Unkn; Less; More; Norm;
5
+
6
+ ALPHA = 0.1 # уровень значимости для критерия Хи-квадрат
7
+ CONFIDENCE_LEVEL = 0.99 # уровень доверия для интервала
8
+ ANSWER_KOLICHESTVO = 'A' # что ищем, когда ищем КОЛИЧЕСТВО (Есть не в каждом варианте)
9
+ ANSWER_DOLYA = 'B' # что ищем, когда ищем ДОЛЮ
10
+
11
+ import numpy as np
12
+ import pandas as pd
13
+ from scipy.stats import chi2, norm
14
+ import matplotlib.pyplot as plt
15
+
16
+ # Вставить данные (могут быть другие слова\буквы)
17
+
18
+ sample = [
19
+ 'C', 'D', 'C' ... ... ... 'A', 'A', 'D'
20
+ ]
21
+
22
+ cleaned_sample = [x for x in sample if x != 'NA']
23
+ na_count = len(sample) - len(cleaned_sample)
24
+
25
+ unique_answers = set(cleaned_sample)
26
+ num_unique_answers = len(unique_answers)
27
+ print(f"Количество различных вариантов ответов: {num_unique_answers}")
28
+
29
+ sample_size = len(cleaned_sample)
30
+ print(f"Объем очищенной выборки: {sample_size}")
31
+
32
+ num_na = na_count
33
+ print(f"Количество пропущенных данных 'NA': {num_na}")
34
+
35
+ a_count = cleaned_sample.count(ANSWER_KOLICHESTVO)
36
+ print(f"Количество респондентов, которые дали ответ 'A': {a_count}")
37
+
38
+ y_count = cleaned_sample.count(ANSWER_DOLYA)
39
+ y_ratio = y_count / sample_size
40
+ print(f"Доля респондентов, которые дали ответ '{ANSWER_DOLYA}': {y_ratio:.4f}")
41
+
42
+ z = norm.ppf(1 - (1 - CONFIDENCE_LEVEL) / 2)
43
+ se = np.sqrt(y_ratio * (1 - y_ratio) / sample_size)
44
+ lower_bound = y_ratio - z * se
45
+ upper_bound = y_ratio + z * se
46
+ print(f"Правая граница {CONFIDENCE_LEVEL} доверительного интервала: {upper_bound:.4f}")
47
+ print(f"Левая граница {CONFIDENCE_LEVEL} доверительного интервала: {lower_bound:.4f}")
48
+
49
+ observed_counts = pd.Series(cleaned_sample).value_counts().values
50
+ expected_counts = [sample_size / num_unique_answers] * num_unique_answers
51
+ chi2_stat = sum((obs - exp) ** 2 / exp for obs, exp in zip(observed_counts, expected_counts))
52
+ df = num_unique_answers - 1
53
+ critical_value = chi2.ppf(1 - ALPHA, df)
54
+ reject_null = int(chi2_stat > critical_value)
55
+ print(f"Критическое значение статистики хи-квадрат: {critical_value:.4f}")
56
+ print(f"Количество степеней свободы: {df}")
57
+ print(f"Наблюдаемое значение хи-квадрат: {chi2_stat:.4f}")
58
+ print(f"Есть основания отвергнуть гипотезу: {reject_null}")
59
+
60
+ plt.figure(figsize=(8, 5))
61
+ plt.hist(cleaned_sample, bins=len(unique_answers), alpha=0.7, color='blue', rwidth=0.85)
62
+ plt.xlabel('Ответы респондентов')
63
+ plt.ylabel('Частота')
64
+ plt.title('Гистограмма очищенной выборки')
65
+ plt.grid(axis='y')
66
+ plt.show()
67
+ """
68
+ if var == 2:
69
+ text = """2. По результатам социологического исследования ответы респондентов на определенный вопрос анкеты представлены в виде выборки:
70
+ {M; M; M; M; F; F; M; F; M; M; Child;
71
+
72
+ import pandas as pd
73
+
74
+ data_str = '{M; M; M; M; F; F; M; F; M; M; Child; F; M; M; Child; Child; Child; F; NA; M; Child; Child; F; M; M; F; Child; F; NA; M; M; M; M; M; Child; M; F; M; F; M; M; M; Child; M; F; M; Child; Child; F; Child; Child; M; F; M; Child; Child; M; M; Child; M; M; Child; Child; Child; Child; NA; M; Child; F; M; NA; M; Child; NA; M; F; M; F; M; M; Child; Child; Child; M; M; M; M; M; M; M; F; F; M; M; M; Child; M; M; M; Child; NA; M; F; Child; M; M; M; Child; M; M; M; Child; M; Child; F; M; Child; Child; M; Child; M; M; F; Child; Child; NA; M; M; F; F; M; Child; M; NA; M; M; F; F; M; M; M; F; M; Child; M; NA; M; Child; NA; F; M; NA; Child; Child; F; M; M; NA; Child; Child; F; M; F; M; Child; F; F; Child; M; M; M; F; F; M; F; M; M; M; M; F; NA; M; M; Child; Child; M; Child; M; Child; M; M; NA; M; Child; NA; NA; Child; M; Child; M; M; NA; Child; M; Child; M; Child; NA; M; M; Child; F; F; F; Child; Child; NA; F; M; M; Child; Child; M; M; NA; M; NA; F; M; Child; Child; NA; Child; NA; F; M; Child; F; F; Child; Child; M; Child; NA; M; M; Child; NA; M; F; M; M; M; M; Child; M; Child; Child; M; F; F; F; Child; M; Child; Child; M; Child; M; M; Child; M; F; M; M; M; F; Child; Child; Child; M; F; NA; M; M; M; M; F; M; M; M; F; M; M; M; M; Child; M; M; Child; Child; M; M; M; Child; M; F; F; M; M; M; M; F; M; M; M; M; F; M; M}'
75
+ data= data_str.replace('{', '').replace('}', '').split('; ')
76
+ df = pd.DataFrame(data=data, columns=['A'])
77
+
78
+ # Очистка выборки от пропусков
79
+ cleaned_df = df[df.A != 'NA']
80
+
81
+ # Количество уникальных значений
82
+ unique_values = cleaned_df['A'].unique()
83
+ print(f"Варианты ответов: {len(unique_values)}")
84
+
85
+ # Размер очищенной выборки
86
+ clean_size = len(cleaned_df)
87
+ print(f"Объем очищенной выборки: {clean_size}")
88
+
89
+ # Количество пропусков
90
+ na_count = sum(df['A'] == 'NA')
91
+ print(f"Пропуски: {na_count}")
92
+
93
+ # Доля ответов "F"
94
+ f_responses = cleaned_df.query("A == 'F'")
95
+ f_ratio = len(f_responses) / clean_size
96
+ print(f"Доля ответов 'F': {f_ratio}")
97
+
98
+ from statsmodels.stats.proportion import proportion_confint
99
+
100
+ # Вычисление доверительных интервалов
101
+ ci_low, ci_up = proportion_confint(count=len(f_responses), nobs=clean_size, alpha=0.05)
102
+ print(f"Правая граница 0.95-доверительного интервала: {ci_up}")
103
+
104
+ print(f"Левая граница 0.95-доверительного интервала: {ci_low}")
105
+
106
+ from scipy.stats import chi2
107
+
108
+ # Число степеней свободы
109
+ degrees_of_freedom = len(unique_values) - 1
110
+
111
+ # Уровень значимости
112
+ alpha = 0.1
113
+
114
+ # Критическое значение
115
+ critical_value = chi2.ppf(1 - alpha, degrees_of_freedom)
116
+ print(f"Критическое значение статистики Хи-квадрат: {critical_value}")
117
+
118
+ print(f"Степени свободы: {degrees_of_freedom}")
119
+
120
+ from scipy.stats import chisquare
121
+
122
+ # Подсчет частот каждого ответа
123
+ observed_freqs = cleaned_df['A'].value_counts().values
124
+
125
+ # Равномерное распределение
126
+ expected_freqs = [clean_size / len(unique_values)] * len(unique_values)
127
+
128
+ # Вычисление статистики Хи-квадрат
129
+ chi2_stat, p_val = chisquare(observed_freqs, expected_freqs)
130
+ print(f"Наблюдаемое значение Хи-квадрат: {chi2_stat}")
131
+
132
+ if chi2_stat > critical_value:
133
+ print("Есть основания отвергнуть гипотезу о равновероятном распределении ответов.")
134
+ else:
135
+ print("Нет оснований отвергнуть гипотезу о равновероятном распределении ответов.")
136
+
137
+ import matplotlib.pyplot as plt
138
+
139
+ plt.figure(figsize=(10, 6))
140
+ cleaned_df['A'].hist()
141
+ plt.title('Распределение ответов респондентов')
142
+ plt.xlabel('Вариант ответа')
143
+ plt.ylabel('Количество ответов')
144
+ plt.show()
145
+ """
146
+ if var == 3:
147
+ text = """3. По результатам социологического исследования ответы респондентов на определенный вопрос анкеты представлены в виде выборки:
148
+ {NA; Unkn; Less; More; Norm;
149
+
150
+ import pandas as pd
151
+ from scipy.stats import chi2, binomtest
152
+ import numpy as np
153
+ import matplotlib.pyplot as plt
154
+
155
+ data_str = '{More; More; Unkn; More; Less; Norm; More; More; NA; More; Unkn; Less; NA; Norm; More; Less; Less; Unkn; NA; NA; Less; Unkn; More; Norm; Less; Less; More; NA; Unkn; More; More; Unkn; Norm; Unkn; NA; NA; Less; Less; More; Unkn; Norm; Norm; NA; Less; Norm; Less; Norm; Norm; More; NA; Norm; More; More; Unkn; Less; Less; NA; More; More; Unkn; NA; Norm; Less; Norm; Unkn; Unkn; Norm; Norm; Unkn; More; More; More; Norm; Less; Less; Less; Unkn; Unkn; NA; NA; NA; Unkn; Unkn; Unkn; Unkn; Norm; More; More; More; Unkn; Less; Unkn; Less; More; Unkn; More; Unkn; Norm; Less; Norm; Unkn; Unkn; Unkn; Unkn; Less; Unkn; Unkn; Less; Less; More; More; Unkn; Unkn; More; Less; Unkn; Unkn; Norm; Unkn; Norm; Less; Unkn; NA; Norm; NA; NA; NA; Norm; Unkn; Less; Norm; Norm; Unkn; Unkn; More; More; Unkn; Less; Unkn; NA; Less; NA; Less; More; NA; Unkn; More; More; More; More; NA; NA; Norm; NA; NA; More; Norm; Unkn; Less; Unkn; Unkn; Unkn; NA; More; Less; NA; Norm; More; Unkn; Unkn; More; Less; More; Unkn; More; Norm; Less; More; More; Unkn; Unkn; More; NA; Unkn; Norm; NA; Unkn; Unkn; More; More; Unkn; Less; Norm; More; Unkn; More; More; Unkn; Unkn; Less; Unkn; Less; Unkn; Norm; Unkn; Unkn; More; Unkn; Unkn; More; Unkn; NA; NA; NA; Unkn; Norm; More; Unkn; NA; Unkn; NA; Norm; Unkn; More; Less; Unkn; More; More; More; Unkn; Unkn; NA; Norm; Unkn; NA; Norm; Less; More; Unkn; Unkn; Less; More; Unkn; Norm; More; Unkn; Unkn; Unkn; More; Norm; Norm; More; Norm; Less; Unkn; Norm; More; NA; NA; Less; Unkn; Unkn; Unkn; NA; Unkn; More; NA; Unkn; Unkn; Norm; Less; Unkn; More; More; More; Unkn; Unkn; Unkn; Unkn; NA; Norm; Unkn; Unkn; More; Less; Unkn; Norm; Norm; More; NA; Less; Unkn; Less; Unkn; Less; Less; Norm; Unkn; NA; Norm}'
156
+ data_list = data_str.replace('{', '').replace('}', '').split('; ')
157
+ df = pd.DataFrame(data=data_list, columns=['A'])
158
+
159
+ cleaned_df = df[df.A != 'NA']
160
+
161
+ # Часть 1: Объем очищенной от "NA" выборки
162
+ print(f"Вопрос 1: {len(cleaned_df)}")
163
+
164
+ # Часть 2: Количество различных вариантов ответов респондентов, встречающихся в очищенной выборке
165
+ print(f"Вопрос 2: {cleaned_df['A'].nunique()}")
166
+
167
+ # Часть 3: Количество респондентов, которые дали ответ "X"
168
+ print(f"Вопрос 3: {(cleaned_df['A'] == 'Less').sum()}")
169
+
170
+ # Часть 4: Доля респондентов, которые дали ответ "Y"
171
+ print(f"Вопрос 4: {(cleaned_df['A'] == 'More').mean()}")
172
+
173
+ # Часть 5: Левая граница 0.99-доверительного интервала для истинной доли ответов "Y"
174
+ y_responses = cleaned_df[cleaned_df['A'] == 'More']
175
+
176
+ from statsmodels.stats.proportion import proportion_confint
177
+
178
+ ci_low, ci_up = proportion_confint(count=len(y_responses), nobs=len(cleaned_df), alpha=0.01)
179
+
180
+ print(f"Левая граница 0.99-доверительного интервала: {ci_low}")
181
+
182
+ # Часть 6: Правая граница 0.99-доверительного интервала для истинной доли ответов "Y"
183
+ print(f"Правая граница 0.99-доверительного интервала: {ci_up}")
184
+
185
+ # Часть 7: Количество степеней свободы
186
+ k = cleaned_df['A'].nunique() - 1
187
+ print(f"Вопрос 7: {k}")
188
+
189
+ # Часть 8: Критическое значение статистики Хи-квадрат
190
+ alpha = 0.01
191
+ crit_value = chi2.ppf(1 - alpha, k)
192
+ print(f"Вопрос 8: {crit_value}")
193
+
194
+ # Часть 9: Наблюдаемое значение Хи-квадрат
195
+ observed_values = cleaned_df['A'].value_counts().values
196
+ expected_values = len(cleaned_df) / observed_values.size * np.ones_like(observed_values)
197
+ chi_squared_stat = ((observed_values - expected_values)**2 / expected_values).sum()
198
+ print(f"Вопрос 9: {chi_squared_stat}")
199
+
200
+ # Часть 10: Проверка гипотезы о равновероятном распределении ответов
201
+ if chi_squared_stat > crit_value:
202
+ print(f"Вопрос 10: 1")
203
+ else:
204
+ print(f"Вопрос 10: 0")
205
+
206
+ # Часть 11: Гистограмма для исходной выборки, очищенной от "NA"
207
+ cleaned_df['A'].hist()
208
+ plt.show()
209
+ """
210
+
211
+ return text
@@ -0,0 +1,45 @@
1
+ Metadata-Version: 2.2
2
+ Name: numplot
3
+ Version: 0.0.6
4
+ Summary: Extension for math
5
+ Home-page: https://github.com/EgorZhizhlo/TASK_CONTROL
6
+ Author: amogusbazed
7
+ Author-email: amogusbazed@gmail.com
8
+ Project-URL: GitHub, https://github.com/EgorZhizhlo/TASK_CONTROL
9
+ Keywords: files speedfiles
10
+ Classifier: Programming Language :: Python :: 3.13
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Operating System :: OS Independent
13
+ Requires-Python: >=3.6
14
+ Description-Content-Type: text/markdown
15
+ Requires-Dist: requests>=2.25.1
16
+ Requires-Dist: openai>=0.28.0
17
+ Dynamic: author
18
+ Dynamic: author-email
19
+ Dynamic: classifier
20
+ Dynamic: description
21
+ Dynamic: description-content-type
22
+ Dynamic: home-page
23
+ Dynamic: keywords
24
+ Dynamic: project-url
25
+ Dynamic: requires-dist
26
+ Dynamic: requires-python
27
+ Dynamic: summary
28
+
29
+ # Numplot File Library #
30
+
31
+ ## What is this? ##
32
+ The module allows you to work with files in just one line of code, without the need to manually open and close the file each time
33
+
34
+ ## Quick Guide ##
35
+ The module is based on the following structure:
36
+
37
+
38
+ f = open('data.txt')
39
+ data = f.readlines()
40
+ f.close()
41
+
42
+ Which Python provides by standard.
43
+
44
+
45
+ ----------
@@ -0,0 +1,16 @@
1
+ README.md
2
+ setup.cfg
3
+ setup.py
4
+ numplot/__init__.py
5
+ numplot/task_1.py
6
+ numplot/task_2.py
7
+ numplot/task_3.py
8
+ numplot/task_4.py
9
+ numplot/task_5_1.py
10
+ numplot/task_5_2.py
11
+ numplot/task_5_3.py
12
+ numplot.egg-info/PKG-INFO
13
+ numplot.egg-info/SOURCES.txt
14
+ numplot.egg-info/dependency_links.txt
15
+ numplot.egg-info/requires.txt
16
+ numplot.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ requests>=2.25.1
2
+ openai>=0.28.0
@@ -0,0 +1 @@
1
+ numplot
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
numplot-0.0.6/setup.py ADDED
@@ -0,0 +1,30 @@
1
+ from setuptools import setup, find_packages
2
+
3
+
4
+ def readme():
5
+ with open('README.md', 'r') as f:
6
+ return f.read()
7
+
8
+
9
+ setup(
10
+ name='numplot',
11
+ version='0.0.6',
12
+ author='amogusbazed',
13
+ author_email='amogusbazed@gmail.com',
14
+ description='Extension for math',
15
+ long_description=readme(),
16
+ long_description_content_type='text/markdown',
17
+ url='https://github.com/EgorZhizhlo/TASK_CONTROL',
18
+ packages=find_packages(),
19
+ install_requires=['requests>=2.25.1','openai>=0.28.0'],
20
+ classifiers=[
21
+ 'Programming Language :: Python :: 3.13',
22
+ 'License :: OSI Approved :: MIT License',
23
+ 'Operating System :: OS Independent'
24
+ ],
25
+ keywords='files speedfiles ',
26
+ project_urls={
27
+ 'GitHub': 'https://github.com/EgorZhizhlo/TASK_CONTROL'
28
+ },
29
+ python_requires='>=3.6'
30
+ )