You are on page 1of 3

import pandas as pd

import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# Đọc dữ liệu từ file CSV


data = pd.read_excel('D5 - glass.data.xlsx', sheet_name=1)
df=data.to_csv('glass.data.csv', index=False)
print(data.head())

# Hiển thị 5 dòng đầu tiên để kiểm tra


print("Dữ liệu mẫ
u:\n", df.head())

# Chọn các cột thuộc tính là giá trị liên tục


continuous_columns =
df.select_dtypes(include='number').columns.tolist()

# Loại bỏ cột nhãn 'quality' khỏi các cột thuộc tính


continuous_columns.remove('Type of glass')

# Lấy dữ liệu thuộc tính và nhãn


X = df[continuous_columns]
y = df['Type of glass']

# a. Kích thước và chiều của dữ liệu


print("\nKích thước của dữ liệu:", df.shape)
print("Chiều của dữ liệu:", df.ndim)

# b. Kiểu dữ liệu của các thuộc tính


print("\nKiể
u dữ liệu của các thuộc tính:\n", df.dtypes)

# c. Số lượng thực thể của các giá trị nhãn


print("\nSốlượng thực thểcủa các giá trị nhãn:\n", y.value_counts())

# d. Giá trị lớn nhất, bé nhất, và trung bình của các cột thuộc
tính có giá trị số thực
numerical_summary = df[continuous_columns].describe().loc[['min',
'max', 'mean']]
print("\nGiá trị lớn nhất, bé nhất, và trung bình của các cột thuộc
tính có giá trị sốthực:\n", numerical_summary)

# Áp dụng PCA để giảm số chiều xuống 2


pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# Tạo DataFrame mới từ dữ liệu giảm chiều


df_pca = pd.DataFrame(X_pca, columns=['PC1', 'PC2'])
df_pca['quality'] = y

# Vẽ biểu đồ
plt.figure(figsize=(8, 6))

unique_labels = df_pca['quality'].unique()
colors = plt.cm.rainbow(np.linspace(0, 1, len(unique_labels)))

for label, color in zip(unique_labels, colors):


subset = df_pca[df_pca['quality'] == label]
plt.scatter(subset['PC1'], subset['PC2'], color=color,
label=label)

plt.xlabel('Principal Component 1')


plt.ylabel('Principal Component 2')
plt.title('PCA of Dataset')
plt.legend(title='Quality')
plt.show()

Id RI: refractive index \


0 1 1.52101
1 2 1.51761
2 3 1.51618
3 4 1.51766
4 5 1.51742

Na: Sodium (unit measurement: weight percent in corresponding


oxide, as \
0 13.64

1 13.89

2 13.53

3 13.21

4 13.27

Mg: Magnesium Al: Aluminum Si: Silicon K: Potassium Ca: Calcium


\
0 4.49 1.10 71.78 0.06 8.75

1 3.60 1.36 72.73 0.48 7.83

2 3.55 1.54 72.99 0.39 7.78

3 3.69 1.29 72.61 0.57 8.22

4 3.62 1.24 73.08 0.55 8.07

Ba: Barium Fe: Iron Type of glass: (class attribute)


0 0.0 0.0 1
1 0.0 0.0 1
2 0.0 0.0 1
3 0.0 0.0 1
4 0.0 0.0 1

----------------------------------------------------------------------
-----
AttributeError Traceback (most recent call
last)
<ipython-input-3-dcfac36c400a> in <cell line: 12>()
10
11 # Hiển thị 5 dòng đầu tiên đểkiể m tra
---> 12 print("Dữ liệu mẫ u:\n", df.head())
13
14 # Chọn các cột thuộc tính là giá trị liên tục

AttributeError: 'NoneType' object has no attribute 'head'

You might also like