metodi/app/labs/lab3.py

93 lines
4.8 KiB
Python
Raw Normal View History

2024-10-17 03:04:08 +03:00
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()