Bài thực hành - Các thư viện quan trọng sử dụng trong KHDL#
Phần 1: Thư viện numpy#
Bài 1.1#
Tạo một ma trận 3x3 có tên A với các phần tử sau:
Chuyển đổi ma trận A thành kiểu số nguyên và lưu vào ma trận B. In ra ma trận B và kiểu dữ liệu của ma trận B.
Tạo một vector u với giá trị \([0.5, 1.5, 2.5]\) và kiểu dữ liệu là
float64
. Cộng ma trận B với vector u và lưu kết quả vào ma trận C. In ra ma trận C và kiểu dữ liệu của ma trận C.Tạo một vector v với giá trị \([10, 20, 30]\) và kiểu dữ liệu là
int32
. Cộng ma trận B với vector v và lưu kết quả vào ma trận D. In ra ma trận D và kiểu dữ liệu của ma trận D.
# Nhập thư viện numpy với bí danh np
import numpy as np
# 1. Tạo một mảng numpy có tên A
A = np.array([
[5.1, 8.7, 3.3],
[4.4, 0.9, 9.5],
[6.2, 7.5, 1.8]
])
# 2. Ma trận B
# 3. Ma trận C
# 4. Ma trận D
Bài 1.2#
Tạo một ma trận 6x6 có tên M, chứa các số từ 0 đến 35.
Trích xuất vùng trung tâm 4x4 của ma trận M. Vùng này bao gồm các hàng từ 1 đến 4 và cột từ 1 đến 4.
Chọn các hàng 0 và 3 của ma trận con P.
Gán giá trị -99 cho các cột 1 và 2 của ma trận M.
Trích xuất các giá trị trong các cột lẻ (1, 3, 5) của ma trận M đã bị thay đổi, và tìm các giá trị lớn hơn 20 trong các cột này.
import numpy as np
# 1. Tạo ma trận M
# 2. Trích xuất vùng trung tâm 4x4
# Hàng từ 1 đến 4, cột từ 1 đến 4
# 3. Chọn các hàng 0 và 3 của P
# 4. Gán giá trị cho các cột 1 và 2 của M
# 5. Trích xuất giá trị theo điều kiện kết hợp
# Lấy ra các cột lẻ từ ma trận đã bị thay đổi
Bài 1.3#
Tạo một ma trận
data
kích thước 4x5 với các giá trị ngẫu nhiên trong khoảng từ 10 đến 100. In ra ma trậndata
.Tính ma trận chuyển vị của
data
và in ra kết quả.Tính giá trị lớn nhất và nhỏ nhất cho từng hàng trong ma trận
data
. In ra kết quả.Tìm chỉ số của cột chứa giá trị lớn nhất trong mỗi hàng của ma trận
data
. In ra kết quả.
import numpy as np
# 1. Tạo ma trận data
# 2. Chuyển vị
# 3. Tính max và min cho từng hàng
# 4. Tìm chỉ số của giá trị lớn nhất trong mỗi hàng
Bài 1.4#
Tạo một ma trận chi phí có tên
costs
với các phần tử như sau:Dòng 1: Chi phí nguyên vật liệu, nhân công, vận hành cho sản phẩm A.
Dòng 2: Chi phí nguyên vật liệu, nhân công, vận hành cho sản phẩm B.
Dòng 3: Chi phí nguyên vật liệu, nhân công, vận hành cho sản phẩm C.
Tạo một vector
production_volume
chứa số lượng sản phẩm A, B, C được sản xuất lần lượt là 1000, 500, 1500.Tính tổng chi phí cho từng loại chi phí (Nguyên vật liệu, Nhân công, Vận hành).
Tính tổng chi phí cho từng sản phẩm (trên một đơn vị sản phẩm).
import numpy as np
# 1. Tạo ma trận chi phí
costs = np.array([
[10, 5, 2], # Sản phẩm A
[12, 7, 3], # Sản phẩm B
[9, 4, 2.5] # Sản phẩm C
])
print("Ma trận chi phí (Sản phẩm x Loại chi phí)")
print(costs)
# 2. Tạo vector số lượng
# 3. Tính tổng chi phí cho từng loại
# 4. Tính tổng chi phí cho từng sản phẩm (trên 1 đơn vị)
Ma trận chi phí (Sản phẩm x Loại chi phí)
[[10. 5. 2. ]
[12. 7. 3. ]
[ 9. 4. 2.5]]
Bài 1.5#
Tạo một mảng
x
từ -3 đến 3 với bước nhảy là 0.5. In ra mảngx
sau khi làm tròn đến 2 chữ số thập phân.Tính giá trị hàm Sigmoid cho từng phần tử trong mảng
x
và in kết quả ra mảng mới. In ra mảng kết quả sau khi làm tròn đến 4 chữ số thập phân.
import numpy as np
# 1. Tạo mảng x
# 2. Tính hàm Sigmoid
Bài 1.6#
Tạo một ma trận 3x3 có tên A và một vector b
Tính định thức của ma trận A và kiểm tra xem ma trận A có khả nghịch hay không.
Tính ma trận nghịch đảo của A (A^{-1}).
Tìm nghiệm của hệ phương trình \(A \cdot x = b\) bằng công thức \(x = A^{-1} \cdot b\).
Kiểm tra lại nghiệm x bằng cách nhân lại với ma trận A và so sánh kết quả với vector b ban đầu.
import numpy as np
# 1. Tạo ma trận 3x3 có tên A
A = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
print(f"Ma trận A: \n{A}")
b = np.array([10, 20, 30])
print(f"Vector b: {b}")
# 2. Tính định thức của A
# 3. Tính ma trận nghịch đảo A^{-1}
# 4. Tìm nghiệm x bằng công thức x = A^{-1}b
# Sử dụng toán tử @ để nhân ma trận
# 5. Kiểm tra lại kết quả
Ma trận A:
[[1 2 3]
[4 5 6]
[7 8 9]]
Vector b: [10 20 30]
Phần 2: Thư viện Pandas#
Bài 2.1#
Tạo một Series từ Dictionary với các thành phố và dân số của chúng như sau:
“Hanoi”: 8.5 triệu
“HCMC”: 9.3 triệu
“Danang”: 1.2 triệu
“Haiphong”: 2.1 triệu
Trích xuất dân số của Hà Nội và Đà Nẵng từ Series và in ra.
Thực hiện phép toán vector hóa để chuyển đổi dân số các thành phố từ triệu người sang người (nhân với 1 triệu), sau đó in kết quả ra dưới dạng số nguyên.
import pandas as pd
# 1. Tạo Series từ Dictionary
population_dict = {"Hanoi": 8.5, "HCMC": 9.3, "Danang": 1.2, "Haiphong": 2.1}
print("Dân số các thành phố (triệu người)")
print(city_pop)
# 2. Trích xuất dữ liệu
# 3. Thực hiện phép toán vector hóa
Dân số các thành phố (triệu người)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[7], line 6
3 population_dict = {"Hanoi": 8.5, "HCMC": 9.3, "Danang": 1.2, "Haiphong": 2.1}
5 print("Dân số các thành phố (triệu người)")
----> 6 print(city_pop)
8 # 2. Trích xuất dữ liệu
9
10 # 3. Thực hiện phép toán vector hóa
NameError: name 'city_pop' is not defined
Bài 2.2#
Tạo một DataFrame có tên
sales_df
với các cột sau:nhan_vien
: Danh sách tên nhân viên (“An”, “Binh”, “Chi”, “Dung”).khu_vuc
: Danh sách khu vực làm việc của các nhân viên (“Bắc”, “Nam”, “Trung”, “Bắc”).doanh_so
: Danh sách doanh số bán hàng của các nhân viên (120, 250, 180, 90).
Thêm cột “thuong” vào DataFrame. Cột “thuong” có giá trị True nếu doanh số lớn hơn 100, ngược lại là False.
Thêm cột “tien_thuong” vào DataFrame. Cột “tien_thuong” tính toán tiền thưởng cho nhân viên. Nếu cột “thuong” là True, tiền thưởng sẽ bằng 10% doanh số bán hàng, nếu không sẽ là 0.
Xóa cột “khu_vuc” khỏi DataFrame.
import pandas as pd
# 1. Tạo DataFrame
sales_data = {
"nhan_vien": ["An", "Binh", "Chi", "Dung"],
"khu_vuc": ["Bắc", "Nam", "Trung", "Bắc"],
"doanh_so": [120, 250, 180, 90]
}
sales_df = pd.DataFrame(sales_data)
print("DataFrame Bán hàng ban đầu")
print(sales_df)
# 2. Thêm cột "thuong" dựa trên điều kiện
# 3. Thêm cột "tien_thuong"
# Sử dụng np.where(điều_kiện, giá_trị_nếu_đúng, giá_trị_nếu_sai)
# 4. Xóa cột "khu_vuc"
Bài 2.3#
Tạo một DataFrame với dữ liệu từ 0 đến 15, có kích thước 4x4. Đặt tên cho các chỉ mục hàng là “A”, “B”, “C”, “D” và tên các cột là “W”, “X”, “Y”, “Z”.
Lựa chọn dữ liệu từ hàng “A” và “C”, cột “W” và “Y” bằng cách sử dụng
.loc
(theo nhãn).Lựa chọn dữ liệu từ 2 hàng cuối (vị trí 2 và 3) và 2 cột đầu (vị trí 0 và 1) bằng cách sử dụng
.iloc
(theo vị trí số nguyên).Lấy giá trị tại hàng “B”, cột “Z”.
import pandas as pd
import numpy as np
# 1. Tạo DataFrame
df = pd.DataFrame(
np.arange(16).reshape(4, 4),
index=["A", "B", "C", "D"],
columns=["W", "X", "Y", "Z"]
)
print("DataFrame gốc")
print(df)
# 2. Lựa chọn bằng .loc (theo nhãn)
# 3. Lựa chọn bằng .iloc (theo vị trí số nguyên)
# 4. Lấy một giá trị đơn lẻ
Bài 2.4#
Tạo một Series có tên
product_stock
với các giá trị[10, 50, 30]
và chỉ số[0, 3, 5]
.Sử dụng phương thức
reindex
để tạo ra các chỉ số từ 0 đến 5. In ra Series sau khi reindex.Sử dụng phương thức
reindex
và điền giá trị bị thiếu bằng phương thứcffill
(forward-fill). In ra Series sau khi reindex và điền giá trị.
import pandas as pd
import numpy as np
product_stock = pd.Series([10, 50, 30], index=[0, 3, 5])
print("Series ban đầu")
print(product_stock)
# 1. Reindex để tạo ra các chỉ số bị thiếu
# 2. Reindex và điền giá trị bằng 'ffill' (forward-fill)
Bài 2.5#
Tạo một DataFrame với thông tin điểm số của các sinh viên (môn Toán, Lý, Hóa) với các sinh viên là Hùng, Lan, Minh, An. In ra bảng điểm ban đầu.
Sắp xếp bảng điểm theo điểm môn Toán giảm dần. In ra bảng điểm sau khi sắp xếp.
Tính tổng điểm của mỗi sinh viên và thêm cột tổng điểm vào bảng điểm. In ra bảng điểm với cột tổng điểm.
Thực hiện thống kê mô tả cho các môn Toán, Lý và Hóa. In ra kết quả thống kê mô tả.
import pandas as pd
import pandas as pd
# 1. Tạo DataFrame
scores_data = {
"Toan": [7, 5, 9, 8],
"Ly": [8, 9, 6, 7],
"Hoa": [6, 8, 9, 5]
}
student_scores = pd.DataFrame(scores_data, index=["Hùng", "Lan", "Minh", "An"])
print("Bảng điểm ban đầu")
print(student_scores)
# 2. Sắp xếp theo điểm Toán giảm dần
# 3. Tính tổng điểm mỗi sinh viên
# 4. Thống kê mô tả
Bài 2.6#
Đọc file
transactions.csv
vào DataFrameHiển thị thông tin cơ bản về DataFrame
In ra 5 dòng đầu tiên của DataFrame.
Hiển thị thông tin và kiểu dữ liệu của DataFrame.
Điền giá trị thiếu trong cột “SoLuong”
Điền giá trị thiếu bằng 1 cho cột “SoLuong”.
Sử dụng
inplace=True
để thay đổi trực tiếp trên DataFrame gốc.
Tạo cột mới “ThanhTien”
Tính giá trị của cột “ThanhTien” bằng cách nhân cột “DonGia” với cột “SoLuong”.
Lọc các giao dịch thuộc nhóm hàng “Điện tử”
Lọc và in ra các giao dịch có nhóm hàng là “Điện tử”.
# Link file: https://drive.google.com/file/d/1Nty62dcwCcSbXWLK6vXUzUoU8s2Qy7j9/view?usp=sharing
# pip install gdown
!gdown 1Nty62dcwCcSbXWLK6vXUzUoU8s2Qy7j9
import pandas as pd
import numpy as np
# 1. Đọc file CSV vào DataFrame
# Giả sử file transactions.csv nằm cùng thư mục với code
df = pd.read_csv("transactions.csv")
print("DataFrame sau khi đọc từ file CSV")
print(df)
# 2. Hiển thị thông tin cơ bản
# 3. Điền giá trị thiếu trong cột "SoLuong"
# 4. Tạo cột mới "ThanhTien"
# 5. Lọc các giao dịch thuộc nhóm hàng "Điện tử"