import numpy as np
from sklearn.datasets import load_iris
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
import pingouin as pg
from scipy import stats

# Датасет Ирисы Фишера
iris = load_iris()
#iris_pd=pd.DataFrame(data=np.c_[iris['data'], iris['target']], columns=iris['feature_names'] + ['target'])
iris_pd=pd.DataFrame(data=np.c_[iris['data']], columns=iris['feature_names'])

# Формирование выборок по признакам
x1 = np.array(iris_pd['sepal length (cm)']) # первый признак - длина чашелистика
x2 = np.array(iris_pd['sepal width (cm)']) # второй признак - ширина чашелистика
x3 = np.array(iris_pd['petal length (cm)']) # третий признак - длина лепестка
x4 = np.array(iris_pd['petal width (cm)']) # четвертый признак - ширина лепестка

# Проверка на нормальность по критерию К-С
print('Тест Колмогорова-Смирнова. Уровень значимости a = 0.05')

for col in iris['feature_names']:
    x = iris_pd[col]
    x_mean, std = np.mean(x), np.std(x, ddof = 1)
    x_std = (x - x_mean)/std
    pvalue = stats.kstest(x_std, "norm", alternative='less').pvalue
    if pvalue > 0.05: result = 'H0 не должна быть отвергнута'
    else: result = 'H0 должна быть отвергнута'
    print('Для {}: p-value: {}, так что {}'.format(col, pvalue, result))

# Построение диаграммы Тьюки
fig1, axes = plt.subplots(1, 3, figsize=(20, 4))  
axes[0].boxplot([x1,x2,x3,x4], tick_labels = ['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width'])
axes[0].set_title('Диаграмма Тьюки')


# Построение тепловой карты парных коэффициентов корреляции
corrMatrix = iris_pd.corr()
axes[1].set_title('Тепловая карта парных коэфф. корреляции')
sb.heatmap(corrMatrix, annot=True, linewidths=0.5, xticklabels = False, yticklabels = False, ax = axes[1])


# Построение тепловой карты частных коэффициентов корреляции
pCorrMatrix = iris_pd.pcorr()
axes[2].set_title('Тепловая карта частных коэфф. корреляции')
sb.heatmap(pCorrMatrix, annot=True, linewidths=0.5, xticklabels = False, yticklabels = False, ax = axes[2])


# Построение гистограмм по выборкам
fig2, axes = plt.subplots(2, 2, figsize=(10, 7))

axes[0,0].hist(x1)
axes[0,0].set_title('Гисотграмма по значениям X1')

axes[0,1].hist(x2)
axes[0,1].set_title('Гисотграмма по значениям X2')

axes[1,0].hist(x3)
axes[1,0].set_title('Гисотграмма по значениям X3')

axes[1,1].hist(x4)
axes[1,1].set_title('Гисотграмма по значениям X4')

plt.show()