Загрузка данных


import math

data = [
'U','G','E','U','X','V','X','G','U','X','G','M','X','NA','I','U','NA','G',
'I','X','I','M','NA','V','NA','X','G','X','V','E','I','E','U','E','E','V',
'M','G','I','U','X','I','V','G','G','M','E','U','E','M','E','G','V','U',
'U','X','G','V','V','I','M','I','X','NA','I','X','E','E','NA','X','NA',
'X','M','U','I','G','G','U','U','I','E','M','I','NA','E','I','M','E','I',
'V','M','U','U','V','E','M','I','NA','M','I','V','G','E','V'
]

a = 0.1

d = []

for x in data:
    if x != 'NA':
        d.append(x)

vals = []

for x in d:
    if x not in vals:
        vals.append(x)

n = len(d)
m = len(vals)
df = m - 1

e = n / m

hi = 0

for v in vals:
    cnt = 0
    for x in d:
        if x == v:
            cnt += 1
    hi += (cnt - e) ** 2 / e


def cdf(x):
    y = x / 2
    return 1 - math.exp(-y) * (1 + y + y ** 2 / 2)


def ppf(q):
    l = 0
    r = 100

    for i in range(100):
        mid = (l + r) / 2

        if cdf(mid) < q:
            l = mid
        else:
            r = mid

    return (l + r) / 2


hk = ppf(1 - a)

if hi > hk:
    ans = 1
else:
    ans = 0

print(df)
print("%.8f" % hi)
print("%.8f" % hk)
print(ans)