Tin tức và phân tích của tất cả các thiết bị di động

[Explained] Cách tạo bản đồ nhiệt trong python

Trực quan hóa là một cách quan trọng để hiểu dữ liệu và rút ra những hiểu biết hữu ích và mang tính thông tin. Đồ họa tốt cho phép người đọc hiểu được ý nghĩa thiết yếu của thông tin trong nháy mắt.

Một hình ảnh trực quan phổ biến được sử dụng để xem dữ liệu là bản đồ nhiệt. Trong bài viết này, tôi sẽ giải thích một bản đồ nhiệt và cách tạo một bản đồ nhiệt trong Python bằng Matplotlib, Seaborn và Plotly.

Bản đồ nhiệt là gì?

Nguồn: seaborn.pydata.org

Bản đồ nhiệt là hình ảnh hai chiều hiển thị dữ liệu dưới dạng ma trận hoặc lưới điểm. Màu sắc của biểu đồ màu đại diện cho từng điểm dữ liệu. Màu tối hơn đại diện cho giá trị cao hơn màu sáng hơn.

Bản đồ nhiệt giúp bạn xác định các mẫu, xu hướng và thay đổi trong dữ liệu của mình. Chúng cung cấp thông tin tóm tắt cho phép người dùng nhanh chóng xem các khu vực có giá trị cao hoặc thấp, cụm hoặc ngoại lệ.

Bản đồ nhiệt được sử dụng ở đâu?

Bản đồ nhiệt rất hữu ích trong việc hiển thị những thay đổi về giá trị trong không gian. Các trường hợp sử dụng hàng ngày bao gồm:

Thời tiết

Bản đồ nhiệt phổ biến nhất mà hầu hết mọi người từng thấy là bản đồ nhiệt theo nghĩa đen – cho thấy nhiệt độ thay đổi như thế nào ở những nơi khác nhau.

Đây là dự báo thời tiết mẫu từ Daily Express hiển thị nhiệt độ dự kiến ​​​​dưới dạng bản đồ nhiệt. Điều này giúp bạn dễ dàng hình dung được điểm nào sẽ nóng, lạnh hoặc ở giữa.

Xem việc sử dụng trang web/ứng dụng

Nguồn: HotJar

Bằng cách theo dõi chuyển động của chuột, số lần nhấp và kiểu cuộn, bản đồ nhiệt giúp xác định các khu vực phổ biến hoặc chưa được phục vụ của trang web. Điều này sau đó có thể được sử dụng để tối ưu hóa giao diện người dùng và cải thiện trải nghiệm người dùng.

Hình ảnh y tế

Nguồn: Researchgate.net

Bản đồ nhiệt trực quan hóa các khu vực hoạt động cao hoặc thấp trong cơ thể. Điều này có thể xác định những bất thường và bệnh tật, đồng thời đánh giá sự tiến triển hoặc đáp ứng với điều trị trong các tình trạng như ung thư.

Thư viện bản đồ nhiệt Python

Python là một ngôn ngữ phổ biến để phân tích và trực quan hóa dữ liệu. Điều này là do cú pháp đơn giản và hệ sinh thái rộng lớn. Có nhiều thư viện bạn có thể sử dụng để tạo bản đồ nhiệt trong python. Chúng bao gồm:

  • Matplotlib – một thư viện trực quan hóa dữ liệu phổ biến. Đây là thư viện cấp thấp cung cấp nhiều tùy chọn tùy chỉnh hơn nhưng phức tạp.
  • Seaborn – Thư viện trực quan này được xây dựng dựa trên Matplotlib và đơn giản hóa một số tính năng của nó đồng thời cung cấp hình ảnh đẹp hơn.
  • Plotly – Đây là thư viện trực quan cung cấp API bản đồ nhiệt Python dễ sử dụng.

Trong phần tiếp theo, chúng ta sẽ xem cách tạo bản đồ nhiệt bằng cách sử dụng tất cả các thư viện này.

Làm cách nào để tạo bản đồ nhiệt?

Trong phần này, tôi sẽ khám phá cách tạo bản đồ nhiệt bằng Matplotlib, Seaborn và Plotly. Tôi sẽ sử dụng Google Collaboration để viết mã. Đây là phiên bản Python Notepad miễn phí sử dụng cơ sở hạ tầng của Google để chạy mã của bạn. Nó không yêu cầu thiết lập nên bạn cũng có thể sử dụng nó để theo dõi. Để bắt đầu, trước tiên chúng ta sẽ đề cập đến Matplotlib.

matplotlib

Để bắt đầu, chúng tôi bắt đầu bằng cách nhập Matplotlib.

import matplotlib.pyplot as plt

Chúng tôi cũng sẽ cần NumPy để tạo một bộ dữ liệu ngẫu nhiên.

import numpy as np

Để tạo tập dữ liệu, chúng tôi sẽ thêm đoạn mã sau:

# Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

Để vẽ đồ thị dữ liệu, chúng tôi sử dụng phương pháp imshow. Chúng tôi truyền dữ liệu dưới dạng đối số. Chúng ta có thể làm được nhiều hơn bằng cách chuyển các đối số bổ sung mà chúng ta sẽ giải quyết sau.

plt.imshow(data)

Nếu bạn chạy di động, bạn sẽ thấy bản đồ nhiệt.

Mặc dù điều này thật tuyệt vời nhưng có rất nhiều tùy chọn tùy chỉnh có sẵn. Để bắt đầu, bạn có thể thay đổi màu được sử dụng trong hình ảnh bằng đối số cmap mà bạn chuyển tới imshow. Ví dụ: nếu bạn muốn thay đổi màu được bản đồ nhiệt sử dụng thành các sắc thái khác nhau của màu xanh lam, bạn sẽ tạo biểu đồ sau.

plt.imshow(data, cmap = 'Blues')

Có một danh sách đầy đủ các tùy chọn cmap ở đây. Dù sao, kết quả của những điều trên sẽ là:

Bản đồ nhiệt sẽ hữu ích hơn nếu có chìa khóa giải thích ý nghĩa của màu sắc. Để thực hiện việc này, hãy thêm đoạn mã sau:

plt.colorbar()

Sau đó, bạn sẽ có được một hình trông như thế này:

Thanh màu rất hữu ích nhưng trong một số trường hợp, bạn có thể muốn gắn nhãn các giá trị khác nhau để người xem có thể thấy chính xác những gì đang được thể hiện. Để thực hiện việc này, bạn sẽ nhập văn bản vào từng ô bằng plt.text().

for i in range(data.shape[0]):
   for j in range(data.shape[1]):
      plt.text(j, i, '%d' % data[i, j],
         horizontalalignment="center",
         verticalalignment="center",
      )

Điều cuối cùng chúng ta sẽ làm với bản đồ nhiệt là đặt các điểm đánh dấu trên các trục. Chúng ta sẽ sử dụng hàm plt.xticks cho trục x và hàm plt.yticks cho trục y. Các phương thức này được đặt tên giống nhau; sự khác biệt duy nhất là trục bị ảnh hưởng bởi mỗi phương pháp.

Đối số đầu tiên là danh sách các vị trí để chèn thẻ. Điều này được thể hiện dưới dạng một mảng các chỉ mục. Đối số sau đây là danh sách thực tế các nhãn sẽ được chèn vào. Đây là một ví dụ về cách chúng tôi chèn các thẻ:

x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

Và đó là tất cả! Đây là cách bạn tạo bản đồ nhiệt trong Matplotlib. Giải pháp mã đầy đủ được trình bày chi tiết bên dưới.

import numpy as np
import matplotlib.pyplot as plt

# Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Creating a plot with blue as a color
plt.imshow(data, cmap = 'Blues')

# Displaying a color bar
plt.colorbar()

# Annotating values
for i in range(data.shape[0]):
   for j in range(data.shape[1]):
      plt.text(j, i, '%d' % data[i, j],
         horizontalalignment="center",
         verticalalignment="center",
      )

# Creating lists of tick labels
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

# Adding the tick labels
plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

Tuy nhiên, sử dụng Matplotlib không phải là giải pháp dễ dàng nhất. Như chúng ta sẽ thấy sau, các thư viện khác như Seaborn và Matplotlib đơn giản hóa quy trình bản đồ nhiệt.

Sinh ra ở biển

Trong phần này, chúng ta sẽ tạo lại ví dụ trước bằng Seaborn. Seaborn là một thư viện dựa trên Matplotlib. Nó chứa các phần trừu tượng giúp công việc của bạn dễ dàng hơn. Để tạo bản đồ nhiệt, chúng tôi bắt đầu bằng cách nhập các thư viện mà chúng tôi sẽ sử dụng.

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sn

Chúng tôi đã nhập Matplotlib vì Seaborn yêu cầu nó. Sau đó, chúng tôi cũng cần nhập NumPy để tạo tập dữ liệu ngẫu nhiên. Cuối cùng, chúng ta cần import Seaborn.

Sau đó, chúng tôi tạo tập dữ liệu bằng NumPy.

# Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

Sau khi thực hiện việc này, chúng tôi tạo danh sách nhãn đánh dấu.

# Tick labels
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

Cuối cùng, chúng ta tạo bản đồ nhiệt thực tế bằng cách gọi hàm bản đồ nhiệt mô-đun sn.

hm = sn.heatmap(data = data, cmap = 'Oranges', annot = True, yticklabels = y_labels, xticklabels = x_labels)

Như bạn có thể thấy, chúng tôi đã liệt kê một số đối số. Dưới đây là lời giải thích cho mỗi:

  • dữ liệu là tập hợp dữ liệu chúng ta muốn vẽ
  • cmap là bảng màu mà chúng tôi muốn tạo bản đồ nhiệt
  • annot chỉ định liệu chúng ta có muốn chú thích các điểm dữ liệu bằng giá trị thực của chúng hay không
  • yticklabels là danh sách các nhãn chúng tôi muốn cho các dấu trục dọc
  • xticlabels là danh sách các nhãn cho các dấu trục ngang.

Cuối cùng, chúng tôi hiển thị cốt truyện bằng mã:

plt.show()

Điều này sẽ tạo ra bản đồ nhiệt sau:

âm mưu

Đối với Plotly, quá trình này tương tự như Seaborn. Dưới đây là tóm tắt mã để tạo bản đồ nhiệt trong Plotly:

import plotly.express as px
import numpy as np

# Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Tick labels
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

px.imshow(data, text_auto = True, x = x_labels, y = y_labels, color_continuous_scale="greys")

Như bạn có thể thấy, bản đồ nhiệt được tạo ở dòng cuối cùng bằng hàm px.imshow(). Hàm này lấy dữ liệu để vẽ làm đối số vị trí. Ngoài ra, cần có một đối số từ khóa như sau:

  • text_auto là giá trị boolean cho phép chú thích khi được đặt thành true
  • x là danh sách các nhãn trục x
  • y là danh sách các dấu tích trên trục y
  • color_continuous_scale chỉ định bảng màu được sử dụng trong biểu đồ.

Như bạn có thể thấy, Plotly đơn giản hơn Seaborn và Matplotlib. Ngoài ra, biểu đồ được tạo có tính tương tác so với các thư viện tạo hình ảnh tĩnh khác.

Đây là ảnh chụp màn hình cuối cùng của kết quả:

những từ cuối

Trong bài viết này, chúng tôi đã thảo luận về cách tạo bản đồ nhiệt trong Python. Chúng tôi đã đề cập đến các thư viện chính – Matplotlib, Seaborn và Plotly. Chúng tôi cũng đã thấy Seaborn và Plotly cung cấp các khái niệm trừu tượng được đơn giản hóa trong Matplotlib. Một trong những ứng dụng quan trọng của bản đồ nhiệt là theo dõi cách mọi người sử dụng trang web của bạn.

Sau đó, hãy xem các công cụ bản đồ nhiệt cho bạn biết người dùng của bạn đang nhấp vào đâu.