Trăn bản đồ nhiệt ở đâu

Giờ đây, phong cách trực quan hóa này đã đi một chặng đường dài từ các bảng mã màu đơn giản. Nó được sử dụng rộng rãi với dữ liệu không gian địa lý. Nó thường được áp dụng để mô tả mật độ hoặc cường độ của các biến, trực quan hóa các mẫu, phương sai và thậm chí cả sự bất thường

Ma trận Tương quan — Thành phần của một mẫu Ngũ cốc

Với rất nhiều ứng dụng, phương pháp cơ bản này đáng được chú ý. Bài viết này sẽ đi qua những kiến ​​thức cơ bản về bản đồ nhiệt và xem cách tạo chúng bằng Matplotlib và Seaborn

thực hành

Chúng tôi sẽ sử dụng Pandas và Numpy để giúp chúng tôi sắp xếp dữ liệu

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
import numpy as np

Tập dữ liệu cho ví dụ này là một chuỗi thời gian của tỷ giá hối đoái trên mỗi U. S. đô la

Thay vì biểu đồ đường thông thường biểu thị các giá trị theo thời gian, tôi muốn trực quan hóa dữ liệu này bằng một bảng được mã hóa màu, với các tháng ở dạng cột và các năm ở dạng hàng

Tôi sẽ thử phác thảo cả biểu đồ đường và bản đồ nhiệt để hiểu nó trông như thế nào

Vẽ bằng sketchpad. ứng dụng

Biểu đồ đường sẽ hiệu quả hơn trong việc hiển thị dữ liệu;

Bản đồ nhiệt sẽ có tác động cao hơn vì chúng không phải là cách hiển thị loại dữ liệu thông thường. Chúng sẽ mất đi một số độ chính xác, đặc biệt là trong trường hợp này, vì chúng tôi sẽ cần tổng hợp các giá trị trong nhiều tháng. Nhưng nhìn chung, chúng vẫn có thể hiển thị các mẫu và tóm tắt các khoảng thời gian trong dữ liệu của chúng tôi

Hãy đọc tập dữ liệu và sắp xếp lại dữ liệu theo phác thảo

# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])

Đối với ví dụ này, chúng tôi sẽ sử dụng các cột 1 và 7, là 'Chuỗi thời gian' và 'CANADA — ĐÔ LA CANADIAN/US$'

Hãy đổi tên các cột đó thành 'DATE' và 'CAD_USD' và vì chúng ta đang chuyển các tiêu đề của mình nên chúng ta cũng cần bỏ qua hàng đầu tiên

Chúng tôi cũng cần phân tích cú pháp cột đầu tiên, vì vậy các giá trị ở định dạng DateTime và chúng tôi sẽ xác định ngày làm chỉ mục của mình

Khung dữ liệu

Hãy đảm bảo rằng tất cả các giá trị của chúng tôi là số và cũng loại bỏ các hàng trống

df['CAD_USD'] = pd.to_numeric(df.CAD_USD, errors='coerce')
df.dropna(inplace=True)

Chúng ta cần tổng hợp các giá trị đó theo tháng. Hãy tạo các cột riêng biệt cho tháng và năm, sau đó chúng tôi nhóm các cột mới và lấy giá trị trung bình

# create a copy of the dataframe, and add columns for month and year
df_m = df.copy()
df_m['month'] = [i.month for i in df_m.index]
df_m['year'] = [i.year for i in df_m.index]
# group by month and year, get the average
df_m = df_m.groupby(['month', 'year']).mean()

Năm hàng đầu tiên được nhóm lại

Tất cả những gì còn lại phải làm là giải nén các chỉ mục và chúng ta sẽ có bảng của mình

df_m = df_m.unstack(level=0)

Khung dữ liệu được định hình lại

bản đồ màu

Mọi thứ đều ở đúng vị trí. Bây giờ chúng ta có thể sử dụng

# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])
4 của Seaborn và vẽ biểu đồ đầu tiên của chúng ta

fig, ax = plt.subplots(figsize=(11, 9))sb.heatmap(df_m)plt.show()

Bản đồ nhiệt đầu tiên

Được rồi, còn nhiều việc phải làm trước khi hình ảnh trực quan này sẵn sàng

Màu sắc là phần quan trọng nhất trong biểu đồ của chúng tôi và bản đồ màu hơi phức tạp. Chúng tôi không cần điều đó;

Chúng ta cũng có thể làm rõ các giới hạn của bản đồ màu bằng cách xác định

# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])
6 và
# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])
7. Pandas
# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])
8 và
# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])
9 có thể giúp chúng tôi tìm ra đâu là giá trị tốt nhất cho những

fig, ax = plt.subplots(figsize=(11, 9))# plot heatmap
sb.heatmap(df_m, cmap="Blues", vmin= 0.9, vmax=1.65,
linewidth=0.3, cbar_kws={"shrink": .8})
plt.show()

Bản đồ nhiệt thứ hai

tùy chỉnh

Có rất nhiều lập luận khác sẽ được khám phá với

# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])
4

Ví dụ:

df['CAD_USD'] = pd.to_numeric(df.CAD_USD, errors='coerce')
df.dropna(inplace=True)
1 xác định kích thước của đường kẻ giữa các hộp và thậm chí chúng ta có thể chuyển đối số trực tiếp tới thanh màu với
df['CAD_USD'] = pd.to_numeric(df.CAD_USD, errors='coerce')
df.dropna(inplace=True)
2

Màu sắc trông đẹp và bây giờ chúng ta có thể chuyển sự chú ý của mình sang các dấu tích. Tôi không nghĩ CAD_USD-1 là tên phù hợp cho tháng 1. Hãy thay thế chúng bằng một số văn bản thân thiện hơn

Di chuyển các dấu kiểm lên đầu biểu đồ sẽ cải thiện khả năng hiển thị và làm cho biểu đồ trông giống một bảng hơn. Chúng tôi cũng có thể loại bỏ các nhãn x và y vì các giá trị trong trục của chúng tôi khá dễ hiểu và tiêu đề cũng sẽ khiến chúng trở nên dư thừa

# figure
fig, ax = plt.subplots(figsize=(11, 9))
# plot heatmap
sb.heatmap(df_m, cmap="Blues", vmin= 0.9, vmax=1.65, square=True,
linewidth=0.3, cbar_kws={"shrink": .8})
# xticks
ax.xaxis.tick_top()
xticks_labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
plt.xticks(np.arange(12) + .5, labels=xticks_labels)
# axis labels
plt.xlabel('')
plt.ylabel('')
# title
title = 'monthly Average exchange rate\nValue of one USD in CAD\n'.upper()
plt.title(title, loc='left')
plt.show()

Bản đồ nhiệt cuối cùng

Có một đối số cuối cùng tôi chuyển đến bản đồ nhiệt, đó là

df['CAD_USD'] = pd.to_numeric(df.CAD_USD, errors='coerce')
df.dropna(inplace=True)
3. Điều đó sẽ làm cho các ô của ma trận của chúng ta có dạng hình vuông bất kể kích thước của hình

Nhìn chung, nó có vẻ tốt. Chúng ta có thể thấy rằng U. S. đô la cao hơn gần 50% so với đô la Canada vào đầu những năm 2000, bắt đầu thay đổi vào khoảng năm 2003. Đồng đô la thấp hơn này được duy trì cho đến cuối năm 2014, với một số thay đổi trong cuộc khủng hoảng tài chính năm 2008

Đến năm 2015, nó đã ổn định khoảng 1. 20~1. 40, với sự thay đổi tương đối nhỏ trong mức trung bình hàng tháng cho đến năm 2019, kết thúc hồ sơ của chúng tôi

Ma trận tương quan

Đối với ví dụ sau, tôi sẽ đi qua một ma trận tương quan để xem thêm một số chức năng của bản đồ nhiệt của Seaborn

Tập dữ liệu là mẫu của 80 loại ngũ cốc khác nhau và tôi muốn xem xét thành phần của chúng

Để xây dựng ma trận tương quan, chúng ta có thể sử dụng Pandas

df['CAD_USD'] = pd.to_numeric(df.CAD_USD, errors='coerce')
df.dropna(inplace=True)
4

# read dataset
df = pd.read_csv('data/cereal.csv')
# get correlations
df_corr = df.corr()
# irrelevant fields
fields = ['rating', 'shelf', 'cups', 'weight']
# drop rows
df_corr.drop(fields, inplace=True)
# drop cols
df_corr.drop(fields, axis=1, inplace=True)

Khung dữ liệu ngũ cốc

Có rất nhiều dư thừa trong một ma trận tương quan;

mặt nạ

May mắn thay, chúng ta có thể sử dụng mặt nạ với bản đồ nhiệt của Seaborn và Numpy có các chức năng để tạo một mặt nạ

np.ones_like(df_corr, dtype=np.bool)

Ma trận của những cái (boolean)

Numpy

df['CAD_USD'] = pd.to_numeric(df.CAD_USD, errors='coerce')
df.dropna(inplace=True)
5 có thể tạo ma trận booleans có cùng hình dạng với khung dữ liệu của chúng ta, trong khi
df['CAD_USD'] = pd.to_numeric(df.CAD_USD, errors='coerce')
df.dropna(inplace=True)
6 sẽ chỉ trả về tam giác trên của ma trận đó

# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])
0

Mặt nạ

Ma trận tương quan đầu tiên

Mặt nạ có thể hữu ích, nhưng vẫn còn hai ô trống trong ma trận của chúng ta

Không có gì sai với điều đó cả. Những giá trị đó có thể thêm vào tính đối xứng của cốt truyện của chúng tôi — Điều đó có nghĩa là, sẽ dễ dàng biết được hai danh sách giống nhau hơn nếu chúng bắt đầu và kết thúc với cùng các giá trị

Nếu như tôi, bạn cảm thấy phiền với điều đó, bạn có thể lọc chúng ra khi vẽ sơ đồ

# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])
1

Ma trận tương quan thứ hai

Thật tuyệt, điều duy nhất không được đề cập là các chú thích. Chúng ta có thể thiết lập những cái đó với tham số

df['CAD_USD'] = pd.to_numeric(df.CAD_USD, errors='coerce')
df.dropna(inplace=True)
7 và chúng ta có thể truyền hàm định dạng cho nó bằng
df['CAD_USD'] = pd.to_numeric(df.CAD_USD, errors='coerce')
df.dropna(inplace=True)
8

Bảng phân kỳ

Chúng tôi vẫn cần một tiêu đề và các dấu tích sẽ đẹp hơn với chữ hoa, nhưng đó vẫn chưa phải là ưu tiên

Các mối tương quan nằm trong khoảng từ -1 đến 1, vì vậy chúng có hai hướng và trong trường hợp này, bảng phân kỳ hoạt động tốt hơn bảng tuần tự

Bảng phân kỳ Seaborn

Seaborn có một phương pháp hiệu quả cho việc đó, được gọi là

df['CAD_USD'] = pd.to_numeric(df.CAD_USD, errors='coerce')
df.dropna(inplace=True)
9, nó dùng để xây dựng các bản đồ màu chúng ta cần với một màu ở mỗi bên, hội tụ thành một màu khác ở trung tâm

Phương pháp đó sử dụng màu HUSL, vì vậy bạn cần màu sắc, độ bão hòa và độ sáng. tôi ngồi lặng thinh. org để chọn màu của biểu đồ này

# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])
2

Ma trận tương quan cuối cùng

Khá tuyệt, chúng tôi đã xây dựng một hình ảnh trực quan tuyệt đẹp cho ma trận tương quan. Bây giờ dễ dàng hơn để xem các hệ số tương quan quan trọng nhất, chẳng hạn như Chất xơ và Kali

Tỉ trọng

Thông thường, sau ma trận tương quan, chúng ta có cái nhìn rõ hơn về các biến có mối quan hệ chặt chẽ

Trong trường hợp này, chúng tôi không có quá nhiều dữ liệu để xem xét, do đó, một biểu đồ phân tán sẽ đủ để bắt đầu điều tra các biến đó

Vấn đề với các biểu đồ phân tán là chúng có xu hướng trở nên khó đọc với quá nhiều dữ liệu, vì các điểm bắt đầu chồng lên nhau. Đó là khi các bản đồ nhiệt quay trở lại hiện trường để trực quan hóa mật độ

# read file
df = pd.read_csv('data/Foreign_Exchange_Rates.csv',
usecols=[1,7], names=['DATE', 'CAD_USD'],
skiprows=1, index_col=0, parse_dates=[0])
3

Ước tính mật độ

Nếu bạn muốn tìm hiểu thêm về KDE, tôi khuyên bạn nên xem bài viết của Matthew Conlen về chủ đề này

Chúng tôi đã khám phá hầu hết những điều cơ bản trong bản đồ nhiệt và xem xét cách chúng có thể tăng độ phức tạp với bản đồ màu, thanh, mặt nạ và ước tính mật độ