[Nhập môn Machine Learning] Bài 9: Giới thiệu các thư viện Numpy, Matplotlib, Pandas (P2: Matplotlib và Pandas)
Ở bài viết này, chúng ta lại tiếp tục tìm hiểu về 2 thư viện còn lại là Matplotlib và Pandas. Các bạn có thể tự hỏi rằng tại sao chúng ta cần phải biết thêm 2 thư viện này trong khi chỉ với Numpy chúng ta đã có thể cài đặt thuật toán Linear Regression rồi. Đúng là như vậy, nhưng Numpy chỉ giúp chúng ta về mặt tính toán chứ không giúp ta hiểu được hoạt động của thuật toán đó. Thay vào đó, biểu đồ và bảng biểu sẽ giúp ta có cái nhìn rõ ràng hơn những vấn đề đang xảy ra với thuật toán ta đang sử dụng. Ví dụ như Cost Function của chúng ta đang tăng hay giảm, tăng mạnh hay không, những điều đó chúng ta rất khó có thể nhận ra mà phải cần đến một công cụ có thể chuyển số liệu thành hình ảnh. Đó là chỗ mà Matplotlib nhảy vào để hỗ trợ chúng ta.
Pandas cũng không phải ngoại lệ, thông thường các dữ liệu của bạn đều được tải từ một tệp tin, phổ biến nhất là tệp .csv (Comma Separated Value), vào trong chương trình. Pandas có sẵn những hàm để làm việc này. Chưa kể đến chúng ta còn phải xử lý, dọn dẹp trước dữ liệu trước khi ta đưa chúng vào thuật toán.
Matplotlib
Chúng ta thường tương tác với module pyplot trong matplotlib là chủ yếu, vậy nên chúng ta cần import module này trước khi sử dụng nóimport matplotlib.pyplot as plt
import numpy as np
Biểu đồ đường (line plot)
Đây có lẽ là biểu đồ thường được dùng nhiều nhất khi làm Machine Learning. Ta sử dụng hàmplot()
trong pyplot để làm điều này, hàm này cần ít nhất hai tham số đó là:- Mảng chứa các tọa độ x của các điểm trong đồ thị
- Mảng chứa các tọa độ y tương ứng của các điểm trong đồ thị
# Tạo một mảng numpy từ 0 -> 5
x = np.arange(0, 6)
# Tạo một mảng numpy với giá trị của các phần tử trong x mũ 2
y = x**2
# Tạo một biểu đồ đường
plt.plot(x, y)
# Hiển thị biểu đồ đường ra màn hình
# Đừng quên dòng này. Nếu không, bạn sẽ không thấy gì cả
plt.show()
Chúc mừng, bạn vừa mới vẽ biểu đồ đầu tiên của mình chỉ bằng code. Tuy nhiên, đồ thị này vẫn chưa mượt như ta mong muốn. Đó là vì chúng ta chỉ sử dụng 5 điểm để vẽ. Tuy nhiên, ta có thể làm cho nó mượt hơn bằng cách tăng số điểm lên. Trong hàm
arange
của numpy có một tham số thứ 3 là step. Ta có thể giảm step xuống để tăng số điểm lên.x = np.arange(0, 6, 0.05) # Giảm step xuống còn 0.05 thay vì 1 (mặc định)
y = x**2 # Tức là 100 điểm tọa độ tất cả (từ 0 đến 1 có 20 điểm)
plt.plot(x, y)
plt.show()
Mượt hơn rồi đúng không? Điều tuyệt vời hơn cả là bây giờ bạn đã có công cụ để vẽ tất cả các dạng hàm bạn có thể nghĩ ra. Dưới đây là một vài ví dụ, nhưng mình sẽ để các bạn tự tìm ra cách làm coi như là một bài tập dành cho bạn.
Chú ý: Khi cửa sổ hiển thị biểu đồ của bạn vẫn chưa đóng, chương trình của bạn vẫn coi như đang chạy trên cửa sổ terminal. Hãy đóng cửa sổ đó lại để dừng chương trình python.
Ngoài việc đơn giản là plot, ta cũng có thể chỉnh sửa nét vẽ trên biểu đồ như là vẽ nét đứt, vẽ hình tròn, hình tam giác ở các điểm thay vì nối chúng lại với nhau, ... Nhưng mình thấy bản thân xài khá ít nên sẽ không đề cập ở đây.
Các bạn có thể tham khảo thêm tại đây:
matplotlib.pyplot.plot()
Biểu đồ điểm (scatter plot)
Là hàmscatter()
trong matplotlib, hàm này cũng lấy 2 tham số là x, y là tọa độ các điểm cần vẽ.t = np.arange(0, 2*np.pi, 0.1)
x = np.cos(t)
y = np.sin(t)
plt.scatter(x,y)
plt.show()
Đối với hàm này thì mình có hay dùng thêm 2 tham số
marker
với color
(2 tham số này cũng có ở hàm plot()
). Dưới đây là một ví dụ.t = np.arange(0, 2*np.pi, 0.1)
x = np.cos(t)
y = np.sin(t)
plt.scatter(x,y, marker = 'x', color = 'red') # vẽ những dấu gạch chéo màu đỏ
plt.show()
Tìm hiểu thêm:
Biểu đồ Contour
Contour là một biểu đồ dùng để biểu diễn mặt phẳng trong không gian ba chiều xuống thành hai chiều. Bằng cách vẽ các đường đồng mức là các đường mà trên đó, giá trị của chiều thứ ba là bằng nhau. Ví dụ, đây là đồ thị contour của hàm số .Ta có thể thấy mặt phẳng của nó có dạng một cái tô trong không gian ba chiều.
Ta có thể sử dụng hàm
contour()
để vẽ biểu đồ contour. Tuy nhiên trước đó ta cần biết đến meshgrid()
trong Numpy đã. Giả sử ta cần biểu thị tọa độ x từ 0 đến 2 và y từ 0 đến 1. Vậy ta có thể tạo ra hai danh sách gồm các giá trị của x và của y. Nhưng contour()
nhận ba tọa độ x, y, z theo một cách đặc biệt như thế này.Và thay vì ta phải code tay hai ma trận x, y như trong hình, ta có thể sử dụng hàm
meshgrid
để tạo ra hai ma trận này từ hai dãy chứa giá trị tọa độ của x và y. sau đó, ta chỉ cần sử dụng các tính chất của ma trận ndarray để tính ra z.Đoạn code để tạo một biểu đồ contour như sau
import numpy as np
import matplotlib.pyplot as plt
# Tạo hai dãy bao gồm các tọa độ x và y
# từ -10 đến 10 và tổng cộng 20 tọa độ tất cả
x = np.linspace(-10,10,20)
y = np.linspace(-10,10,20)
# Tạo meshgrid. XX và YY là hai ma trận có kích thước 20x20
# Công thức chung để xác định kích thước là (số tọa độ y) x (số tọa độ x)
XX, YY = np.meshgrid(x,y)
# Tính các giá trị Z
Z = np.sqrt(XX**2 +YY**2)
# Vẽ biểu đồ
cs = plt.contour(XX, YY, Z)
# Hiển thị giá trị của các đường đồng mức
plt.clabel(cs)
# Hiển thị biểu đồ
plt.show()
Ta cũng có thể tăng số đường đồng mức muốn hiện thị lên bằng cách truyền tham số thứ 4 vào
contour()
là số đường đồng mức.import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10,10,20)
y = np.linspace(-10,10,20)
XX, YY = np.meshgrid(x,y)
Z = np.sqrt(XX**2 +YY**2)
cs = plt.contour(XX, YY, Z, 10) # <-- Hiển thị 10 đường đồng mức
plt.clabel(cs)
plt.show()
Tạm thời, đây là các đồ thị quan trọng trong việc tìm hiểu Machine Learning nhưng đó cũng chỉ là một số nhỏ các đồ thị mà Matplotlib có thể cung cấp. Để có thể tìm hiểu thêm, các bạn có thể đọc thêm tại:
https://matplotlib.org/3.1.1/tutorials/introductory/sample_plots.html
Pandas
Như các bạn đã biết, Machine Learning hoạt động dựa trên dataset. Bây giờ, điều chúng ta quan tâm là làm sao để lấy dataset từ file vào bộ nhớ làm việc của máy tính. Pandas có thể là việc đó bằng câu lệnh sau# import thư viện
import pandas as pd
# Truyền địa chỉ tương đối từ file .py đến file .csv
dataset = pd.read_csv('path/to/filename.csv')
# Để dễ dàng, bạn có thể để chúng vào cùng một thư mục và sử dụng
dataset = pd.read_csv('filename.csv)
print(type(dataset))
# In ra 5 mẫu đầu trong dataset
print(dataset.head())
data = dataset.to_numpy() # Chuyển Dataframe thành ndarray
print(type(data))
print(data.shape)
print(data)
Nhận xét
Đăng nhận xét