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 +45 -0
- numplot-0.0.6/README.md +17 -0
- numplot-0.0.6/numplot/__init__.py +21 -0
- numplot-0.0.6/numplot/task_1.py +120 -0
- numplot-0.0.6/numplot/task_2.py +18 -0
- numplot-0.0.6/numplot/task_3.py +14 -0
- numplot-0.0.6/numplot/task_4.py +32 -0
- numplot-0.0.6/numplot/task_5_1.py +156 -0
- numplot-0.0.6/numplot/task_5_2.py +88 -0
- numplot-0.0.6/numplot/task_5_3.py +211 -0
- numplot-0.0.6/numplot.egg-info/PKG-INFO +45 -0
- numplot-0.0.6/numplot.egg-info/SOURCES.txt +16 -0
- numplot-0.0.6/numplot.egg-info/dependency_links.txt +1 -0
- numplot-0.0.6/numplot.egg-info/requires.txt +2 -0
- numplot-0.0.6/numplot.egg-info/top_level.txt +1 -0
- numplot-0.0.6/setup.cfg +4 -0
- numplot-0.0.6/setup.py +30 -0
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
|
+
----------
|
numplot-0.0.6/README.md
ADDED
|
@@ -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 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
numplot
|
numplot-0.0.6/setup.cfg
ADDED
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
|
+
)
|