metodi/app/labs/lab3.py

93 lines
4.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt
class lab3:
def __init__(self):
pass
def main(self):
data = load_iris()
X = data.data
print('Все данные', data.data)
Y = data.target
print(data.target)
Y_str = data.target_names
print(Y_str)
setosa_inds = Y == np.where(Y_str == 'setosa')
setosa_data = X[np.ravel(setosa_inds), :]
print('Индексы setosa', setosa_inds)
print('Признаки setosa:', setosa_data)
versicolor_inds = Y == np.where(Y_str == 'versicolor')
versicolor_data = X[np.ravel(versicolor_inds), :]
virginica_inds = Y == np.where(Y_str == 'virginica')
virginica_data = X[np.ravel(virginica_inds), :]
plt.scatter(setosa_data[:, 0], setosa_data[:, 1])
plt.title('Скаттерограмма setosa по признакам 1 и 2')
plt.xlabel('Длина чашелистика')
plt.ylabel('Ширина чашелистика')
plt.show()
plt.scatter(versicolor_data[:, 0], versicolor_data[:, 1])
plt.title('Скаттерограмма versicolor по признакам 1 и 2')
plt.xlabel('Длина чашелистика')
plt.ylabel('Ширина чашелистика')
plt.show()
plt.scatter(virginica_data[:, 0], virginica_data[:, 1])
plt.title('Скаттерограмма virginica по признакам 1 и 2')
plt.xlabel('Длина чашелистика')
plt.ylabel('Ширина чашелистика')
plt.show()
# расчет статистических характеристик коэф. корреляции для признаков
setosa_sl_mean = np.mean(setosa_data[:, 0])
setosa_sl_std = np.std(setosa_data[:, 0])
setosa_sw_mean = np.mean(setosa_data[:, 1])
setosa_sw_std = np.std(setosa_data[:, 1])
setosa_cor = np.corrcoef(setosa_data[:, 0], setosa_data[:, 1])[0, 1]
versicolor_sl_mean = np.mean(versicolor_data[:, 0])
versicolor_sl_std = np.std(versicolor_data[:, 0])
versicolor_sw_mean = np.mean(versicolor_data[:, 1])
versicolor_sw_std = np.std(versicolor_data[:, 1])
versicolor_cor = np.corrcoef(versicolor_data[:, 0], versicolor_data[:, 1])[0, 1]
virginica_sl_mean = np.mean(virginica_data[:, 0])
virginica_sl_std = np.std(virginica_data[:, 0])
virginica_sw_mean = np.mean(virginica_data[:, 1])
virginica_sw_std = np.std(virginica_data[:, 1])
virginica_cor = np.corrcoef(virginica_data[:, 0], virginica_data[:, 1])[0, 1]
print('Setosa: Среднее значение длины чашелистика:', setosa_sl_mean, 'СКО длины чашелистика:', setosa_sl_std, 'Среднее значение ширины чашелистика:', setosa_sw_mean, 'СКО ширины чашелистика:', setosa_sw_std)
print('Коэффициент корреляции:', setosa_cor)
print('Versicolor: Среднее значение длины чашелистика:', versicolor_sl_mean, 'СКО длины чашелистика:', versicolor_sl_std, 'Среднее значение ширины чашелистика:', versicolor_sw_mean, 'СКО ширины чашелистика:', versicolor_sw_std)
print('Коэффициент корреляции:', versicolor_cor)
print('Virginica: Среднее значение длины чашелистика:', virginica_sl_mean, 'СКО длины чашелистика:', virginica_sl_std, 'Среднее значение ширины чашелистика:', virginica_sw_mean, 'СКО ширины чашелистика:', virginica_sw_std)
print('Коэффициент корреляции:', virginica_cor)
# построение гистограммы и коробочковой диаграммы для setosa по признакам 1 и 2
hist_data = np.vstack((setosa_data[:, 0], setosa_data[:, 1]))
plt.hist(hist_data.T, label=['Длина чашелистика', 'Ширина чашелистика'])
# Настройка графика
plt.title('Гистограмма setosa по признакам 1 и 2')
plt.xlabel('Значение')
plt.ylabel('Частота')
plt.legend()
plt.show()
plt.boxplot((setosa_data[:, 0].ravel(), setosa_data[:, 1].ravel()), notch=False, labels=['Длина чашелистика', 'Ширина чашелистика'])
plt.title('Коробочковая диаграмма setosa по признакам 1 и 2')
plt.ylabel('Значение')
plt.show()
if __name__ == "__main__":
l3 = lab3()
l3.main()