import math
from collections import Counter
import matplotlib.pyplot as plt
data = [
"S", "NA", "Y", "D", "R", "K", "D", "NA", "C", "S", "Y", "S", "H", "C", "D", "K", "S", "S", "Y", "C",
"NA", "Y", "NA", "S", "D", "H", "K", "C", "H", "Y", "D", "NA", "H", "H", "H", "Y", "K", "NA", "K", "D",
"Y", "S", "H", "H", "S", "C", "H", "R", "C", "C", "NA", "S", "Y", "R", "K", "R", "C", "D", "K", "K",
"K", "S", "C", "H", "K", "R", "H", "R", "NA", "NA", "S", "D", "K", "S", "Y", "K", "S", "H", "D", "C",
"D", "S", "D", "NA", "K", "C", "R", "D", "D", "D", "K", "D", "D", "NA", "C", "C", "H", "C", "D", "D",
"H", "D", "NA", "H", "S"
]
# 1. Объем исходной выборки
n_total = len(data)
# 2. Количество NA
na_count = data.count("NA")
# 3. Очищенная выборка
clean_data = [x for x in data if x != "NA"]
n_clean = len(clean_data)
# 4. Количество различных ответов
unique_count = len(set(clean_data))
# 5. Количество ответов H
h_count = clean_data.count("H")
# 6. Доля ответов H
p_hat = h_count / n_clean
# 7-8. 0.98-доверительный интервал для доли
z = 2.3263478740408408 # квантиль нормального распределения для 0.99
se = math.sqrt(p_hat * (1 - p_hat) / n_clean)
left = p_hat - z * se
right = p_hat + z * se
print("1.", n_total)
print("2.", na_count)
print("3.", n_clean)
print("4.", unique_count)
print("5.", h_count)
print("6.", f"{p_hat:.8f}")
print("7.", f"{left:.8f}")
print("8.", f"{right:.8f}")
# 9. Гистограмма (по факту для категориальных данных это столбчатая диаграмма частот)
freq = Counter(clean_data)
plt.figure(figsize=(8, 5))
plt.bar(freq.keys(), freq.values())
plt.xlabel("Ответ")
plt.ylabel("Частота")
plt.title("Частоты ответов в очищенной выборке")
plt.show()