Seaborn - Hướng dẫn nhanh
Trong thế giới của Analytics, cách tốt nhất để có được thông tin chi tiết là trực quan hóa dữ liệu. Dữ liệu có thể được trực quan hóa bằng cách biểu diễn nó dưới dạng các ô rất dễ hiểu, dễ khám phá và nắm bắt. Dữ liệu này giúp thu hút sự chú ý của các yếu tố chính.
Để phân tích tập hợp dữ liệu bằng Python, chúng tôi sử dụng Matplotlib, một thư viện vẽ đồ thị 2D được triển khai rộng rãi. Tương tự như vậy, Seaborn là một thư viện trực quan hóa bằng Python. Nó được xây dựng trên Matplotlib.
Seaborn Vs Matplotlib
Người ta tóm tắt rằng nếu Matplotlib “cố gắng biến những điều dễ dàng trở nên dễ dàng và những điều khó khăn có thể”, thì Seaborn cũng cố gắng biến một tập hợp những điều khó khăn được xác định rõ ràng cũng trở nên dễ dàng.
Seaborn giúp giải quyết hai vấn đề lớn mà Matplotlib phải đối mặt; vấn đề là -
- Tham số Matplotlib mặc định
- Làm việc với khung dữ liệu
Khi Seaborn khen ngợi và mở rộng Matplotlib, đường cong học tập khá dần dần. Nếu bạn biết Matplotlib, bạn đã đi được một nửa chặng đường qua Seaborn.
Các tính năng quan trọng của Seaborn
Seaborn được xây dựng dựa trên thư viện trực quan hóa cốt lõi của Python Matplotlib. Nó có nghĩa là để phục vụ như một sự bổ sung, và không phải là một sự thay thế. Tuy nhiên, Seaborn đi kèm với một số tính năng rất quan trọng. Hãy để chúng tôi xem một vài trong số họ ở đây. Các tính năng trợ giúp trong -
- Tích hợp các chủ đề để tạo kiểu đồ họa matplotlib
- Trực quan hóa dữ liệu đơn biến và song biến
- Phù hợp và hình dung các mô hình hồi quy tuyến tính
- Lập đồ thị dữ liệu chuỗi thời gian thống kê
- Seaborn hoạt động tốt với cấu trúc dữ liệu NumPy và Pandas
- Nó đi kèm với các chủ đề tích hợp để tạo kiểu đồ họa Matplotlib
Trong hầu hết các trường hợp, bạn vẫn sẽ sử dụng Matplotlib để vẽ sơ đồ đơn giản. Kiến thức về Matplotlib được khuyến nghị để điều chỉnh các âm mưu mặc định của Seaborn.
Trong chương này, chúng ta sẽ thảo luận về thiết lập môi trường cho Seaborn. Hãy để chúng tôi bắt đầu cài đặt và hiểu cách bắt đầu khi chúng tôi tiếp tục.
Cài đặt Seaborn và bắt đầu
Trong phần này, chúng ta sẽ hiểu các bước liên quan đến quá trình cài đặt Seaborn.
Sử dụng Pip Installer
Để cài đặt bản phát hành mới nhất của Seaborn, bạn có thể sử dụng pip -
pip install seaborn
Đối với Windows, Linux và Mac sử dụng Anaconda
Anaconda (từ https://www.anaconda.com/là một bản phân phối Python miễn phí cho ngăn xếp SciPy. Nó cũng có sẵn cho Linux và Mac.
Cũng có thể cài đặt phiên bản đã phát hành bằng conda -
conda install seaborn
Để cài đặt phiên bản phát triển của Seaborn trực tiếp từ github
https://github.com/mwaskom/seaborn"
Sự phụ thuộc
Hãy xem xét các phụ thuộc sau của Seaborn:
- Python 2.7 hoặc 3.4+
- numpy
- scipy
- pandas
- matplotlib
Trong chương này, chúng ta sẽ thảo luận về cách nhập Bộ dữ liệu và Thư viện. Chúng ta hãy bắt đầu bằng cách tìm hiểu cách nhập thư viện.
Nhập thư viện
Chúng ta hãy bắt đầu bằng cách nhập Pandas, đây là một thư viện tuyệt vời để quản lý tập dữ liệu quan hệ (định dạng bảng). Seaborn rất tiện lợi khi xử lý DataFrames, đây là cấu trúc dữ liệu được sử dụng rộng rãi nhất để phân tích dữ liệu.
Lệnh sau sẽ giúp bạn nhập gấu trúc -
# Pandas for managing datasets
import pandas as pd
Bây giờ, hãy nhập thư viện Matplotlib, thư viện này giúp chúng tôi tùy chỉnh các lô của mình.
# Matplotlib for additional customization
from matplotlib import pyplot as plt
Chúng tôi sẽ nhập thư viện Seaborn bằng lệnh sau:
# Seaborn for plotting and styling
import seaborn as sb
Nhập tập dữ liệu
Chúng tôi đã nhập các thư viện cần thiết. Trong phần này, chúng ta sẽ hiểu cách nhập các tập dữ liệu cần thiết.
Seaborn đi kèm với một vài bộ dữ liệu quan trọng trong thư viện. Khi Seaborn được cài đặt, bộ dữ liệu sẽ tự động tải xuống.
Bạn có thể sử dụng bất kỳ bộ dữ liệu nào trong số này cho việc học của mình. Với sự trợ giúp của hàm sau, bạn có thể tải tập dữ liệu cần thiết
load_dataset()
Nhập dữ liệu dưới dạng Pandas DataFrame
Trong phần này, chúng tôi sẽ nhập một tập dữ liệu. Tập dữ liệu này tải dưới dạng Pandas DataFrame theo mặc định. Nếu có bất kỳ chức năng nào trong Pandas DataFrame, nó sẽ hoạt động trên DataFrame này.
Dòng mã sau sẽ giúp bạn nhập tập dữ liệu -
# Seaborn for plotting and styling
import seaborn as sb
df = sb.load_dataset('tips')
print df.head()
Dòng mã trên sẽ tạo ra kết quả sau:
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
Để xem tất cả các tập dữ liệu có sẵn trong thư viện Seaborn, bạn có thể sử dụng lệnh sau với get_dataset_names() chức năng như hình dưới đây -
import seaborn as sb
print sb.get_dataset_names()
Dòng mã trên sẽ trả về danh sách các bộ dữ liệu có sẵn dưới dạng đầu ra sau
[u'anscombe', u'attention', u'brain_networks', u'car_crashes', u'dots',
u'exercise', u'flights', u'fmri', u'gammas', u'iris', u'planets', u'tips',
u'titanic']
DataFrameslưu trữ dữ liệu dưới dạng lưới hình chữ nhật mà dữ liệu có thể được xem qua một cách dễ dàng. Mỗi hàng của lưới hình chữ nhật chứa các giá trị của một phiên bản và mỗi cột của lưới là một vectơ chứa dữ liệu cho một biến cụ thể. Điều này có nghĩa là các hàng của DataFrame không cần phải chứa các giá trị của cùng kiểu dữ liệu, chúng có thể là số, ký tự, logic, v.v. DataFrame cho Python đi kèm với thư viện Pandas và chúng được định nghĩa là cấu trúc dữ liệu có nhãn hai chiều với các loại cột tiềm năng khác nhau.
Để biết thêm chi tiết về DataFrames, hãy truy cập hướng dẫn của chúng tôi về gấu trúc.
Trực quan hóa dữ liệu là một bước và tiếp tục làm cho dữ liệu trực quan hóa dễ chịu hơn là một bước khác. Hình dung đóng một vai trò quan trọng trong việc truyền đạt những hiểu biết định lượng cho khán giả để thu hút sự chú ý của họ.
Thẩm mỹ có nghĩa là một tập hợp các nguyên tắc liên quan đến bản chất và sự đánh giá cao vẻ đẹp, đặc biệt là trong nghệ thuật. Trực quan là một nghệ thuật biểu diễn dữ liệu theo cách hiệu quả và dễ dàng nhất có thể.
Thư viện Matplotlib hỗ trợ khả năng tùy chỉnh cao, nhưng biết những cài đặt nào cần chỉnh sửa để đạt được một cốt truyện hấp dẫn và được mong đợi là điều người ta nên biết để sử dụng nó. Không giống như Matplotlib, Seaborn đi kèm với các chủ đề tùy chỉnh và giao diện cấp cao để tùy chỉnh và kiểm soát giao diện của các hình Matplotlib.
Thí dụ
import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
x = np.linspace(0, 14, 100)
for i in range(1, 5):
plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
sinplot()
plt.show()
Đây là cách một âm mưu trông với Matplotlib mặc định -
Để thay đổi cùng một cốt truyện thành mặc định của Seaborn, hãy sử dụng set() chức năng -
Thí dụ
import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
x = np.linspace(0, 14, 100)
for i in range(1, 5):
plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set()
sinplot()
plt.show()
Đầu ra
Hai hình trên cho thấy sự khác biệt trong lô Matplotlib và Seaborn mặc định. Cách biểu diễn dữ liệu giống nhau, nhưng kiểu biểu diễn khác nhau ở cả hai.
Về cơ bản, Seaborn chia các tham số Matplotlib thành hai nhóm−
- Các kiểu âm mưu
- Quy mô lô đất
Kiểu dáng Seaborn
Giao diện để thao tác các kiểu là set_style(). Sử dụng chức năng này, bạn có thể đặt chủ đề của cốt truyện. Theo phiên bản cập nhật mới nhất, dưới đây là năm chủ đề có sẵn.
- Darkgrid
- Whitegrid
- Dark
- White
- Ticks
Hãy để chúng tôi thử áp dụng một chủ đề từ danh sách được đề cập ở trên. Chủ đề mặc định của cốt truyện sẽ làdarkgrid mà chúng ta đã thấy trong ví dụ trước.
Thí dụ
import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip=1):
x = np.linspace(0, 14, 100)
for i in range(1, 5):
plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("whitegrid")
sinplot()
plt.show()
Đầu ra
Sự khác biệt giữa hai ô trên là màu nền
Loại bỏ gai trục
Trong chủ đề màu trắng và dấu tích, chúng ta có thể loại bỏ các gai trục trên cùng và bên phải bằng cách sử dụng despine() chức năng.
Thí dụ
import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip=1):
x = np.linspace(0, 14, 100)
for i in range(1, 5):
plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("white")
sinplot()
sb.despine()
plt.show()
Đầu ra
Trong các ô thông thường, chúng tôi chỉ sử dụng trục trái và trục dưới cùng. Sử dụngdespine() , chúng ta có thể tránh các gai trục phải và trục trên cùng không cần thiết, không được hỗ trợ trong Matplotlib.
Ghi đè các phần tử
Nếu bạn muốn tùy chỉnh các kiểu Seaborn, bạn có thể chuyển một từ điển các tham số vào set_style() chức năng. Các thông số có sẵn được xem bằng cách sử dụngaxes_style() chức năng.
Thí dụ
import seaborn as sb
print sb.axes_style
Đầu ra
{'axes.axisbelow' : False,
'axes.edgecolor' : 'white',
'axes.facecolor' : '#EAEAF2',
'axes.grid' : True,
'axes.labelcolor' : '.15',
'axes.linewidth' : 0.0,
'figure.facecolor' : 'white',
'font.family' : [u'sans-serif'],
'font.sans-serif' : [u'Arial', u'Liberation
Sans', u'Bitstream Vera Sans', u'sans-serif'],
'grid.color' : 'white',
'grid.linestyle' : u'-',
'image.cmap' : u'Greys',
'legend.frameon' : False,
'legend.numpoints' : 1,
'legend.scatterpoints': 1,
'lines.solid_capstyle': u'round',
'text.color' : '.15',
'xtick.color' : '.15',
'xtick.direction' : u'out',
'xtick.major.size' : 0.0,
'xtick.minor.size' : 0.0,
'ytick.color' : '.15',
'ytick.direction' : u'out',
'ytick.major.size' : 0.0,
'ytick.minor.size' : 0.0}
Thay đổi các giá trị của bất kỳ tham số nào sẽ thay đổi kiểu âm mưu.
Thí dụ
import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip=1):
x = np.linspace(0, 14, 100)
for i in range(1, 5):
plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("darkgrid", {'axes.axisbelow': False})
sinplot()
sb.despine()
plt.show()
Đầu ra
Phần tử lô mở rộng
Chúng tôi cũng có quyền kiểm soát các yếu tố của cốt truyện và có thể kiểm soát quy mô của cốt truyện bằng cách sử dụng set_context()chức năng. Chúng tôi có bốn mẫu đặt trước cho các ngữ cảnh, dựa trên kích thước tương đối, các ngữ cảnh được đặt tên như sau
- Paper
- Notebook
- Talk
- Poster
Theo mặc định, ngữ cảnh được đặt thành sổ ghi chép; và đã được sử dụng trong các ô ở trên.
Thí dụ
import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
x = np.linspace(0, 14, 100)
for i in range(1, 5):
plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("darkgrid", {'axes.axisbelow': False})
sinplot()
sb.despine()
plt.show()
Đầu ra
Kích thước đầu ra của ô thực tế có kích thước lớn hơn so với các ô trên.
Note - Do tỷ lệ hình ảnh trên trang web của chúng tôi, bạn có thể bỏ lỡ sự khác biệt thực tế trong các ô mẫu của chúng tôi.
Màu sắc đóng một vai trò quan trọng hơn bất kỳ khía cạnh nào khác trong hình dung. Khi được sử dụng hiệu quả, màu sắc sẽ tăng thêm giá trị cho cốt truyện. Bảng màu có nghĩa là một bề mặt phẳng, trên đó họa sĩ sắp xếp và trộn các loại sơn.
Bảng màu tòa nhà
Seaborn cung cấp một hàm được gọi là color_palette(), có thể được sử dụng để tạo màu sắc cho các ô và tăng thêm giá trị thẩm mỹ cho nó.
Sử dụng
seaborn.color_palette(palette = None, n_colors = None, desat = None)
Tham số
Bảng sau liệt kê các thông số để xây dựng bảng màu:
Sr.No. | Palatte & Mô tả |
---|---|
1 | n_colors Số lượng màu trong bảng màu. Nếu Không, giá trị mặc định sẽ phụ thuộc vào cách chỉ định bảng màu. Theo mặc định, giá trị củan_colors là 6 màu. |
2 | desat Tỷ lệ để khử bão hòa từng màu. |
Trở về
Return đề cập đến danh sách các bộ giá trị RGB. Sau đây là các bảng màu Seaborn có sẵn -
- Deep
- Muted
- Bright
- Pastel
- Dark
- Colorblind
Bên cạnh những thứ này, người ta cũng có thể tạo bảng màu mới
Thật khó để quyết định bảng màu nào nên được sử dụng cho một tập dữ liệu nhất định nếu không biết các đặc điểm của dữ liệu. Nhận thức được điều đó, chúng tôi sẽ phân loại các cách khác nhau để sử dụngcolor_palette() các loại -
- qualitative
- sequential
- diverging
Chúng tôi có một chức năng khác seaborn.palplot()liên quan đến bảng màu. Hàm này vẽ bảng màu dưới dạng mảng ngang. Chúng tôi sẽ biết thêm vềseaborn.palplot() trong các ví dụ sắp tới.
Bảng màu định tính
Các bảng phân loại hoặc định tính phù hợp nhất để vẽ dữ liệu phân loại.
Thí dụ
from matplotlib import pyplot as plt
import seaborn as sb
current_palette = sb.color_palette()
sb.palplot(current_palette)
plt.show()
Đầu ra
Chúng tôi chưa chuyển bất kỳ thông số nào vào color_palette();theo mặc định, chúng tôi đang thấy 6 màu. Bạn có thể thấy số lượng màu mong muốn bằng cách chuyển một giá trị chon_colorstham số. Đây,palplot() được sử dụng để vẽ các mảng màu theo chiều ngang.
Bảng màu tuần tự
Biểu đồ tuần tự phù hợp để thể hiện sự phân bố dữ liệu từ giá trị tương đối thấp hơn đến giá trị cao hơn trong một phạm vi.
Việc thêm một ký tự bổ sung vào màu được truyền vào tham số màu sẽ vẽ biểu đồ Tuần tự.
Thí dụ
from matplotlib import pyplot as plt
import seaborn as sb
current_palette = sb.color_palette()
sb.palplot(sb.color_palette("Greens"))
plt.show()
Note −Chúng ta cần thêm 's' vào tham số như 'Greens' trong ví dụ trên.
Bảng màu phân kỳ
Bảng phân kỳ sử dụng hai màu khác nhau. Mỗi màu đại diện cho sự thay đổi về giá trị từ một điểm chung theo một trong hai hướng.
Giả sử vẽ dữ liệu từ -1 đến 1. Các giá trị từ -1 đến 0 có một màu và 0 đến +1 có màu khác.
Theo mặc định, các giá trị được căn giữa từ 0. Bạn có thể kiểm soát nó với trung tâm tham số bằng cách chuyển một giá trị.
Thí dụ
from matplotlib import pyplot as plt
import seaborn as sb
current_palette = sb.color_palette()
sb.palplot(sb.color_palette("BrBG", 7))
plt.show()
Đầu ra
Đặt bảng màu mặc định
Chức năng color_palette() có một người bạn đồng hành được gọi là set_palette()Mối quan hệ giữa chúng tương tự như các cặp được đề cập trong chương mỹ học. Các đối số giống nhau cho cả haiset_palette() và color_palette(), nhưng các tham số Matplotlib mặc định được thay đổi để bảng màu được sử dụng cho tất cả các ô.
Thí dụ
import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
x = np.linspace(0, 14, 100)
for i in range(1, 5):
plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("white")
sb.set_palette("husl")
sinplot()
plt.show()
Đầu ra
Lập kế hoạch phân phối đơn biến
Phân phối dữ liệu là điều quan trọng nhất mà chúng ta cần hiểu trong khi phân tích dữ liệu. Ở đây, chúng ta sẽ thấy cách seaborn giúp chúng ta hiểu được sự phân phối đơn biến của dữ liệu.
Chức năng distplot()cung cấp cách thuận tiện nhất để xem nhanh phân phối đơn biến. Hàm này sẽ vẽ một biểu đồ phù hợp với ước tính mật độ nhân của dữ liệu.
Sử dụng
seaborn.distplot()
Thông số
Bảng sau liệt kê các thông số và mô tả của chúng -
Sr.No. | Mô tả về Thông Số |
---|---|
1 | data Chuỗi, mảng 1d hoặc danh sách |
2 | bins Đặc điểm kỹ thuật của thùng lịch sử |
3 | hist bool |
4 | kde bool |
Đây là những thông số cơ bản và quan trọng cần xem xét.
Biểu đồ thể hiện sự phân bố dữ liệu bằng cách tạo thành các thùng dọc theo phạm vi dữ liệu và sau đó vẽ các thanh để hiển thị số lượng quan sát rơi vào mỗi thùng.
Seaborn đi kèm với một số bộ dữ liệu và chúng tôi đã sử dụng một số bộ dữ liệu trong các chương trước của chúng tôi. Chúng ta đã học cách tải tập dữ liệu và cách tra cứu danh sách các tập dữ liệu có sẵn.
Seaborn đi kèm với một số bộ dữ liệu và chúng tôi đã sử dụng một số bộ dữ liệu trong các chương trước của chúng tôi. Chúng ta đã học cách tải tập dữ liệu và cách tra cứu danh sách các tập dữ liệu có sẵn.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.distplot(df['petal_length'],kde = False)
plt.show()
Đầu ra
Đây, kdecờ được đặt thành Sai. Do đó, biểu diễn của biểu đồ ước lượng nhân sẽ bị loại bỏ và chỉ biểu đồ được vẽ biểu đồ.
Ước tính mật độ hạt nhân (KDE) là một cách để ước tính hàm mật độ xác suất của một biến ngẫu nhiên liên tục. Nó được sử dụng để phân tích phi tham số.
Đặt hist cờ thành Sai trong distplot sẽ mang lại biểu đồ ước tính mật độ hạt nhân.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.distplot(df['petal_length'],hist=False)
plt.show()
Đầu ra
Phân phối tham số phù hợp
distplot() được sử dụng để trực quan hóa phân phối tham số của tập dữ liệu.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.distplot(df['petal_length'])
plt.show()
Đầu ra
Lập đồ thị phân phối lưỡng biến
Phân phối Bivariate được sử dụng để xác định mối quan hệ giữa hai biến. Điều này chủ yếu giải quyết mối quan hệ giữa hai biến và cách một biến hoạt động đối với biến kia.
Cách tốt nhất để phân tích Phân bố Bivariate ở trẻ sơ sinh là sử dụng jointplot() chức năng.
Jointplot tạo ra một hình nhiều bảng chiếu mối quan hệ hai biến giữa hai biến và cũng như phân phối đơn biến của mỗi biến trên các trục riêng biệt.
Lô phân tán
Biểu đồ phân tán là cách thuận tiện nhất để hình dung sự phân bố trong đó mỗi quan sát được biểu diễn trong biểu đồ hai chiều qua trục x và y.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.jointplot(x = 'petal_length',y = 'petal_width',data = df)
plt.show()
Đầu ra
Hình trên cho thấy mối quan hệ giữa petal_length và petal_widthtrong dữ liệu Iris. Một xu hướng trong biểu đồ nói rằng tồn tại mối tương quan thuận giữa các biến được nghiên cứu.
Lô Hexbin
Phương pháp binning lục giác được sử dụng trong phân tích dữ liệu lưỡng biến khi dữ liệu có mật độ thưa thớt, tức là khi dữ liệu rất phân tán và khó phân tích thông qua các biểu đồ phân tán.
Một tham số bổ sung được gọi là 'loại' và giá trị 'hex' vẽ biểu đồ hexbin.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.jointplot(x = 'petal_length',y = 'petal_width',data = df,kind = 'hex')
plt.show()
Ước tính mật độ nhân
Ước tính mật độ hạt nhân là một cách không tham số để ước tính phân phối của một biến. Trong seaborn, chúng ta có thể vẽ một kde bằng cách sử dụngjointplot().
Truyền giá trị 'kde' cho loại tham số để vẽ biểu đồ hạt nhân.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.jointplot(x = 'petal_length',y = 'petal_width',data = df,kind = 'hex')
plt.show()
Đầu ra
Tập dữ liệu trong nghiên cứu thời gian thực chứa nhiều biến. Trong những trường hợp như vậy, mối quan hệ giữa mỗi và mọi biến cần được phân tích. Lập đồ thị Phân phối Bivariate cho (n, 2) kết hợp sẽ là một quá trình rất phức tạp và mất thời gian.
Để vẽ biểu đồ nhiều phân phối song biến theo cặp trong một tập dữ liệu, bạn có thể sử dụng pairplot()chức năng. Điều này cho thấy mối quan hệ đối với (n, 2) sự kết hợp của biến trong DataFrame dưới dạng ma trận các ô và các ô đường chéo là các ô đơn biến.
Axes
Trong phần này, chúng ta sẽ tìm hiểu Axes là gì, cách sử dụng, các thông số của chúng, v.v.
Sử dụng
seaborn.pairplot(data,…)
Thông số
Bảng sau liệt kê các thông số cho Axes -
Sr.No. | Mô tả về Thông Số |
---|---|
1 | data Khung dữ liệu |
2 | hue Có thể thay đổi dữ liệu để ánh xạ các khía cạnh của ô thành các màu khác nhau. |
3 | palette Tập hợp các màu để ánh xạ biến màu |
4 | kind Loại cốt truyện cho các mối quan hệ không danh tính. {'scatter', 'reg'} |
5 | diag_kind Loại âm mưu cho các ô đường chéo. {'hist', 'kde'} |
Ngoại trừ dữ liệu, tất cả các thông số khác là tùy chọn. Có một số tham số khácpairplotcó thể chấp nhận. Những điều được đề cập ở trên thường được sử dụng params.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.set_style("ticks")
sb.pairplot(df,hue = 'species',diag_kind = "kde",kind = "scatter",palette = "husl")
plt.show()
Đầu ra
Chúng ta có thể quan sát các biến thể trong mỗi âm mưu. Các ô có định dạng ma trận trong đó tên hàng thể hiện trục x và tên cột biểu thị trục y.
Các ô đường chéo là các ô mật độ nhân trong đó các ô khác là các ô phân tán như đã đề cập.
Trong các chương trước, chúng ta đã học về biểu đồ phân tán, biểu đồ hexbin và biểu đồ kde được sử dụng để phân tích các biến liên tục đang được nghiên cứu. Các đồ thị này không phù hợp khi biến đang nghiên cứu là phân loại.
Khi một hoặc cả hai biến đang nghiên cứu là phân loại, chúng tôi sử dụng các biểu đồ như striplot (), swarmplot (), v.v. Seaborn cung cấp giao diện để làm như vậy.
Biểu đồ phân tán phân tán
Trong phần này, chúng ta sẽ tìm hiểu về các âm mưu phân tán phân loại.
Stripplot ()
stripplot () được sử dụng khi một trong các biến đang nghiên cứu là phân loại. Nó đại diện cho dữ liệu theo thứ tự được sắp xếp dọc theo bất kỳ trục nào.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.stripplot(x = "species", y = "petal_length", data = df)
plt.show()
Đầu ra
Trong sơ đồ trên, chúng ta có thể thấy rõ sự khác biệt của petal_lengthở mỗi loài. Tuy nhiên, vấn đề lớn với biểu đồ phân tán ở trên là các điểm trên biểu đồ phân tán bị chồng lên nhau. Chúng tôi sử dụng tham số 'Jitter' để xử lý loại tình huống này.
Jitter thêm một số nhiễu ngẫu nhiên vào dữ liệu. Tham số này sẽ điều chỉnh các vị trí dọc theo trục phân loại.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.stripplot(x = "species", y = "petal_length", data = df, jitter = Ture)
plt.show()
Đầu ra
Bây giờ, sự phân bố của các điểm có thể được nhìn thấy một cách dễ dàng.
Swarmplot ()
Một tùy chọn khác có thể được sử dụng thay thế cho 'Jitter' là chức năng swarmplot(). Hàm này định vị từng điểm của biểu đồ phân tán trên trục phân loại và do đó tránh được các điểm chồng chéo -
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.swarmplot(x = "species", y = "petal_length", data = df)
plt.show()
Đầu ra
Trong các biểu đồ phân tán phân loại mà chúng ta đã đề cập trong chương trước, cách tiếp cận trở nên hạn chế về thông tin mà nó có thể cung cấp về sự phân bố các giá trị trong mỗi danh mục. Bây giờ, đi xa hơn, chúng ta hãy xem điều gì có thể tạo điều kiện cho chúng tôi thực hiện so sánh với trong danh mục.
Ô hộp
Boxplot là một cách thuận tiện để trực quan hóa việc phân phối dữ liệu thông qua các phần tư của chúng.
Ô hộp thường có các đường thẳng đứng kéo dài từ ô được gọi là râu. Những râu này biểu thị sự thay đổi bên ngoài phần tư trên và dưới, do đó Ô Hộp còn được gọi làbox-and-whisker âm mưu và box-and-whisker biểu đồ. Bất kỳ giá trị ngoại lai nào trong dữ liệu được vẽ dưới dạng các điểm riêng lẻ.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.swarmplot(x = "species", y = "petal_length", data = df)
plt.show()
Đầu ra
Các dấu chấm trên âm mưu cho biết ngoại lệ.
Lô đàn Violin
Lô Violin là sự kết hợp giữa ô hộp với ước tính mật độ hạt nhân. Vì vậy, những biểu đồ này dễ dàng phân tích và hiểu sự phân bố của dữ liệu hơn.
Hãy để chúng tôi sử dụng tập dữ liệu mẹo được gọi để tìm hiểu thêm về âm mưu của violin. Tập dữ liệu này chứa thông tin liên quan đến các mẹo mà khách hàng trong nhà hàng đưa ra.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.violinplot(x = "day", y = "total_bill", data=df)
plt.show()
Đầu ra
Các giá trị phần tư và râu từ ô hộp được hiển thị bên trong cây đàn violin. Khi ô violin sử dụng KDE, phần violin rộng hơn biểu thị mật độ cao hơn và vùng hẹp thể hiện mật độ tương đối thấp hơn. Phạm vi Liên phần tư trong âm mưu hình hộp và phần mật độ cao hơn tính bằng kde rơi vào cùng một vùng của mỗi loại âm mưu vĩ cầm.
Biểu đồ trên cho thấy phân phối của tổng_bill vào bốn ngày trong tuần. Tuy nhiên, ngoài điều đó, nếu chúng ta muốn xem cách phân phối hoạt động đối với tình dục, hãy khám phá nó trong ví dụ dưới đây.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.violinplot(x = "day", y = "total_bill",hue = 'sex', data = df)
plt.show()
Đầu ra
Bây giờ chúng ta có thể thấy rõ hành vi chi tiêu giữa nam và nữ. Chúng ta có thể dễ dàng nói rằng, đàn ông kiếm được nhiều tiền hơn phụ nữ bằng cách nhìn vào cốt truyện.
Và, nếu biến màu chỉ có hai lớp, chúng ta có thể làm đẹp cốt truyện bằng cách chia mỗi cây vĩ cầm thành hai thay vì hai cây vĩ cầm vào một ngày nhất định. Một trong hai bộ phận của violin đề cập đến từng lớp trong biến màu.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.violinplot(x = "day", y="total_bill",hue = 'sex', data = df)
plt.show()
Đầu ra
Trong hầu hết các tình huống, chúng tôi xử lý các ước tính của toàn bộ phân phối dữ liệu. Nhưng khi nói đến ước lượng xu hướng trung tâm, chúng ta cần một cách cụ thể để tóm tắt sự phân bố. Trung bình và trung vị là các kỹ thuật thường được sử dụng để ước tính xu hướng trung tâm của phân phối.
Trong tất cả các lô mà chúng ta đã học ở phần trên, chúng ta đã hình dung ra toàn bộ sự phân bố. Bây giờ, chúng ta hãy thảo luận về các lô mà chúng ta có thể ước tính xu hướng trung tâm của phân phối.
Lô đất
Các barplot()cho thấy mối quan hệ giữa một biến phân loại và một biến liên tục. Dữ liệu được biểu thị bằng các thanh hình chữ nhật trong đó độ dài của thanh thể hiện tỷ lệ của dữ liệu trong danh mục đó.
Biểu đồ thanh thể hiện ước tính của xu hướng trung tâm. Hãy để chúng tôi sử dụng tập dữ liệu 'titanic' để tìm hiểu các biểu đồ thanh.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('titanic')
sb.barplot(x = "sex", y = "survived", hue = "class", data = df)
plt.show()
Đầu ra
Trong ví dụ trên, chúng ta có thể thấy rằng số lượng sống sót trung bình của nam và nữ trong mỗi lớp. Từ cốt truyện, chúng ta có thể hiểu rằng số lượng phụ nữ sống sót nhiều hơn nam giới. Ở cả nam và nữ, số người sống sót nhiều hơn từ hạng nhất.
Một trường hợp đặc biệt trong barplot là hiển thị không có quan sát trong mỗi danh mục hơn là tính toán thống kê cho biến thứ hai. Đối với điều này, chúng tôi sử dụngcountplot().
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('titanic')
sb.countplot(x = " class ", data = df, palette = "Blues");
plt.show()
Đầu ra
Plot nói rằng, số lượng hành khách ở khoang hạng ba nhiều hơn hạng nhất và hạng hai.
Lô điểm
Biểu đồ điểm phục vụ giống như biểu đồ thanh nhưng theo một phong cách khác. Thay vì thanh đầy đủ, giá trị của ước tính được biểu thị bằng điểm ở một độ cao nhất định trên trục khác.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('titanic')
sb.pointplot(x = "sex", y = "survived", hue = "class", data = df)
plt.show()
Đầu ra
Việc sử dụng các tập dữ liệu 'dài từ' hoặc 'gọn gàng' luôn được ưu tiên hơn. Nhưng vào những lúc chúng ta không có lựa chọn nào khác hơn là sử dụng tập dữ liệu 'dạng rộng', các chức năng tương tự cũng có thể được áp dụng cho dữ liệu "dạng rộng" ở nhiều định dạng, bao gồm cả Khung dữ liệu Pandas hoặc NumPy hai chiều mảng. Các đối tượng này phải được chuyển trực tiếp đến tham số dữ liệu, các biến x và y phải được chỉ định dưới dạng chuỗi
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.boxplot(data = df, orient = "h")
plt.show()
Đầu ra
Ngoài ra, các hàm này chấp nhận vectơ của các đối tượng Pandas hoặc NumPy hơn là các biến trong DataFrame.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.boxplot(data = df, orient = "h")
plt.show()
Đầu ra
Lợi thế chính của việc sử dụng Seaborn đối với nhiều nhà phát triển trong thế giới Python là vì nó có thể lấy đối tượng DataFrame gấu trúc làm tham số.
Dữ liệu phân loại chúng ta có thể hình dung bằng hai biểu đồ, bạn có thể sử dụng các hàm pointplot()hoặc chức năng cấp cao hơn factorplot().
Factorplot
Factorplot vẽ một âm mưu phân loại trên FacetGrid. Sử dụng tham số 'kind', chúng ta có thể chọn âm mưu như boxplot, violinplot, barplot và stripplot. FacetGrid sử dụng pointplot theo mặc định.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('exercise')
sb.factorplot(x = "time", y = pulse", hue = "kind",data = df);
plt.show()
Đầu ra
Chúng ta có thể sử dụng các biểu đồ khác nhau để trực quan hóa cùng một dữ liệu bằng cách sử dụng kind tham số.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('exercise')
sb.factorplot(x = "time", y = "pulse", hue = "kind", kind = 'violin',data = df);
plt.show()
Đầu ra
Trong factorplot, dữ liệu được vẽ trên một lưới khía cạnh.
Facet Grid là gì?
Facet grid tạo thành một ma trận các bảng được xác định theo hàng và cột bằng cách chia các biến. Do các tấm, một mảnh đất trông giống như nhiều mảnh. Sẽ rất hữu ích khi phân tích tất cả các kết hợp theo hai biến rời rạc.
Hãy để chúng tôi hình dung định nghĩa ở trên với một ví dụ
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('exercise')
sb.factorplot(x = "time", y = "pulse", hue = "kind", kind = 'violin', col = "diet", data = df);
plt.show()
Đầu ra
Lợi thế của việc sử dụng Facet là chúng ta có thể nhập một biến khác vào trong biểu đồ. Ô trên được chia thành hai ô dựa trên một biến thứ ba gọi là 'chế độ ăn uống' sử dụng tham số 'col'.
Chúng ta có thể tạo nhiều khía cạnh cột và căn chỉnh chúng với các hàng của lưới -
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('titanic')
sb.factorplot("alive", col = "deck", col_wrap = 3,data = df[df.deck.notnull()],kind = "count")
plt.show()
đầu ra
Hầu hết, chúng tôi sử dụng tập dữ liệu có chứa nhiều biến định lượng và mục tiêu của phân tích thường là liên hệ các biến đó với nhau. Điều này có thể được thực hiện thông qua các đường hồi quy.
Trong khi xây dựng các mô hình hồi quy, chúng tôi thường kiểm tra multicollinearity,nơi chúng tôi phải xem mối tương quan giữa tất cả các tổ hợp của các biến liên tục và sẽ thực hiện hành động cần thiết để loại bỏ đa cộng tuyến nếu tồn tại. Trong những trường hợp như vậy, các kỹ thuật sau đây sẽ hữu ích.
Các chức năng để vẽ mô hình hồi quy tuyến tính
Có hai chức năng chính trong Seaborn để hình dung mối quan hệ tuyến tính được xác định thông qua hồi quy. Các chức năng này làregplot() và lmplot().
regplot vs lmplot
regplot | lmplot |
---|---|
chấp nhận các biến x và y ở nhiều định dạng khác nhau bao gồm mảng numpy đơn giản, đối tượng chuỗi gấu trúc hoặc dưới dạng tham chiếu đến các biến trong DataFrame gấu trúc | có dữ liệu là tham số bắt buộc và các biến x và y phải được chỉ định dưới dạng chuỗi. Định dạng dữ liệu này được gọi là dữ liệu "dạng dài" |
Bây giờ chúng ta hãy vẽ các âm mưu.
Thí dụ
Vẽ regplot và sau đó lmplot với cùng một dữ liệu trong ví dụ này
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.regplot(x = "total_bill", y = "tip", data = df)
sb.lmplot(x = "total_bill", y = "tip", data = df)
plt.show()
Đầu ra
Bạn có thể thấy sự khác biệt về kích thước giữa hai mảnh đất.
Chúng ta cũng có thể điều chỉnh hồi quy tuyến tính khi một trong các biến nhận các giá trị rời rạc
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.lmplot(x = "size", y = "tip", data = df)
plt.show()
Đầu ra
Phù hợp với các loại mô hình khác nhau
Mô hình hồi quy tuyến tính đơn giản được sử dụng ở trên rất đơn giản để phù hợp, nhưng trong hầu hết các trường hợp, dữ liệu là phi tuyến tính và các phương pháp trên không thể tổng quát hóa đường hồi quy.
Hãy để chúng tôi sử dụng tập dữ liệu của Anscombe với các biểu đồ hồi quy -
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('anscombe')
sb.lmplot(x="x", y="y", data=df.query("dataset == 'I'"))
plt.show()
Trong trường hợp này, dữ liệu phù hợp với mô hình hồi quy tuyến tính với ít phương sai hơn.
Chúng ta hãy xem một ví dụ khác trong đó dữ liệu có độ lệch cao cho thấy dòng phù hợp nhất là không tốt.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('anscombe')
sb.lmplot(x = "x", y = "y", data = df.query("dataset == 'II'"))
plt.show()
Đầu ra
Biểu đồ cho thấy độ lệch cao của các điểm dữ liệu từ đường hồi quy. Thứ tự cao hơn, phi tuyến tính như vậy có thể được hình dung bằng cách sử dụnglmplot() và regplot(). Mô hình này có thể phù hợp với mô hình hồi quy đa thức để khám phá các loại xu hướng phi tuyến tính đơn giản trong tập dữ liệu -
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('anscombe')
sb.lmplot(x = "x", y = "y", data = df.query("dataset == 'II'"),order = 2)
plt.show()
Đầu ra
Một cách tiếp cận hữu ích để khám phá dữ liệu trung bình bằng cách vẽ nhiều phiên bản của cùng một biểu đồ trên các tập con khác nhau của tập dữ liệu của bạn.
Kỹ thuật này thường được gọi là vẽ "lưới", hoặc "lưới mắt cáo", và nó liên quan đến ý tưởng về "bội số nhỏ".
Để sử dụng các tính năng này, dữ liệu của bạn phải ở trong Pandas DataFrame.
Lập đồ thị bội số nhỏ của tập dữ liệu con
Trong chương trước, chúng ta đã thấy ví dụ về FacetGrid trong đó lớp FacetGrid giúp trực quan hóa phân phối của một biến cũng như mối quan hệ giữa nhiều biến riêng biệt trong các tập con của tập dữ liệu của bạn bằng cách sử dụng nhiều bảng.
Một FacetGrid có thể được vẽ với tối đa ba thứ nguyên - hàng, cột và màu. Hai đầu tiên có sự tương ứng rõ ràng với mảng kết quả của các trục; hãy nghĩ về biến màu sắc như một chiều thứ ba dọc theo trục chiều sâu, nơi các mức khác nhau được vẽ với các màu khác nhau.
FacetGrid đối tượng lấy khung dữ liệu làm đầu vào và tên của các biến sẽ tạo thành kích thước hàng, cột hoặc màu của lưới.
Các biến phải được phân loại và dữ liệu ở mỗi cấp của biến sẽ được sử dụng cho một khía cạnh dọc theo trục đó.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
g = sb.FacetGrid(df, col = "time")
plt.show()
Đầu ra
Trong ví dụ trên, chúng tôi vừa khởi tạo facetgrid đối tượng không vẽ bất cứ thứ gì trên chúng.
Cách tiếp cận chính để hiển thị dữ liệu trên lưới này là với FacetGrid.map()phương pháp. Hãy để chúng tôi xem xét sự phân bố các mẹo trong mỗi tập hợp con này, sử dụng biểu đồ.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
g = sb.FacetGrid(df, col = "time")
g.map(plt.hist, "tip")
plt.show()
Đầu ra
Số ô nhiều hơn một vì tham số col. Chúng tôi đã thảo luận về tham số col trong các chương trước của chúng tôi.
Để tạo một biểu đồ quan hệ, hãy chuyển nhiều tên biến.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
g = sb.FacetGrid(df, col = "sex", hue = "smoker")
g.map(plt.scatter, "total_bill", "tip")
plt.show()
Đầu ra
PairGrid cho phép chúng ta vẽ một lưới các ô con sử dụng cùng một loại ô để trực quan hóa dữ liệu.
Không giống như FacetGrid, nó sử dụng các cặp biến khác nhau cho mỗi ô con. Nó tạo thành một ma trận gồm các ô con. Nó cũng đôi khi được gọi là "ma trận biểu đồ phân tán".
Việc sử dụng pairgrid tương tự như facetgrid. Đầu tiên khởi tạo lưới và sau đó chuyển chức năng vẽ đồ thị.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
g = sb.PairGrid(df)
g.map(plt.scatter);
plt.show()
Cũng có thể vẽ một hàm khác trên đường chéo để hiển thị phân phối đơn biến của biến trong mỗi cột.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
g = sb.PairGrid(df)
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter);
plt.show()
Đầu ra
Chúng tôi có thể tùy chỉnh màu sắc của các ô này bằng cách sử dụng một biến phân loại khác. Ví dụ: tập dữ liệu về hoa diên vĩ có bốn phép đo cho mỗi trong ba loài hoa mống mắt khác nhau để bạn có thể thấy chúng khác nhau như thế nào.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
g = sb.PairGrid(df)
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter);
plt.show()
Đầu ra
Chúng ta có thể sử dụng một hàm khác trong tam giác trên và dưới để xem các khía cạnh khác nhau của mối quan hệ.
Thí dụ
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
g = sb.PairGrid(df)
g.map_upper(plt.scatter)
g.map_lower(sb.kdeplot, cmap = "Blues_d")
g.map_diag(sb.kdeplot, lw = 3, legend = False);
plt.show()