Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Trừ khi đồ họa của bạn là rất lớn, nhiều trong số 3 triệu điểm đó sẽ trùng lặp. (Hình ảnh 400x600 chỉ có 240k chấm ...)

Vì vậy, điều dễ dàng nhất để làm là lấy một mẫu nói, 1000 điểm, từ dữ liệu của bạn:

import random
delta_sample=random.sample(delta,1000)

và chỉ vẽ ra điều đó.

Ví dụ:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Hoặc, nếu bạn cần chú ý nhiều hơn đến các ngoại lệ, thì có lẽ bạn có thể sử dụng dữ liệu của mình bằng

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
0, sau đó soạn một
xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
1 có đại diện từ mỗi thùng.

Thật không may, khi sử dụng

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
0, tôi không nghĩ rằng có bất kỳ cách nào dễ dàng để liên kết các thùng với các điểm dữ liệu riêng lẻ. Một giải pháp đơn giản, nhưng gần đúng là sử dụng vị trí của một điểm trong hoặc trên chính Bin Edge làm proxy cho các điểm trong đó:

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Sử dụng plt.scatter () để trực quan hóa dữ liệu trong Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Using plt.scatter() to Visualize Data in Python

Các sơ đồ phân tán có tốt cho các bộ dữ liệu lớn không?visualize it. Python has several third-party modules you can use for data visualization. One of the most popular modules is Matplotlib and its submodule pyplot, often referred to using the alias

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
3. Matplotlib provides a very versatile tool called
xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4
that allows you to create both basic and more complex scatter plots.

Các biểu đồ biểu đồ hộp và phân tán được cho là trong số các biểu đồ được thử nghiệm và đã được chứng minh mà bạn có thể sử dụng để trực quan hóa dữ liệu lớn. Các biểu đồ phù hợp nhất để hiển thị dữ liệu phức tạp và cồng kềnh sử dụng không gian tối thiểu.

Các sơ đồ phân tán có tốt cho cỡ mẫu lớn không?

  • Mặc dù không có hướng dẫn chính thức về lượng dữ liệu cần thiết cho một biểu đồ phân tán, các mẫu lớn hơn chỉ ra rõ ràng các mẫu trong dữ liệu. Một biểu đồ phân tán có đường hồi quy được trang bị có hiệu quả nhất khi kích thước mẫu xấp xỉ 40 hoặc lớn hơn.scatter plot using
    xedges=np.linspace(-10,10,100)
    yedges=np.linspace(-10,10,100)
    zedges=np.linspace(-10,10,10)
    hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
    xidx,yidx,zidx=np.where(hist>0)
    plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
    plt.show()
    
    4
  • Sử dụng các tham số đầu vào cần thiết và tùy chọninput parameters
  • Tùy chỉnh các lô phân tán cho các lô cơ bản và nâng cao hơnbasic and more advanced plots
  • Biểu thị nhiều hơn hai chiều trên một âm mưu phân tánmore than two dimensions on a scatter plot

Để tận dụng tối đa hướng dẫn này, bạn nên làm quen với các nguyên tắc cơ bản của lập trình Python và những điều cơ bản của Numpy và đối tượng

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
6 của nó. Bạn không cần phải làm quen với Matplotlib để làm theo hướng dẫn này, nhưng nếu bạn muốn tìm hiểu thêm về mô -đun, thì hãy xem Python vẽ âm mưu với matplotlib (Hướng dẫn).

Tạo các lô phân tán

Một biểu đồ phân tán là một đại diện trực quan về cách hai biến liên quan đến nhau. Bạn có thể sử dụng các sơ đồ phân tán để khám phá mối quan hệ giữa hai biến, ví dụ bằng cách tìm kiếm bất kỳ mối tương quan nào giữa chúng.

Trong phần này của hướng dẫn, bạn sẽ trở nên quen thuộc với việc tạo ra các sơ đồ phân tán cơ bản bằng cách sử dụng matplotlib. Trong các phần sau, bạn sẽ học cách tùy chỉnh thêm các lô của mình để biểu diễn dữ liệu phức tạp hơn bằng cách sử dụng nhiều hơn hai chiều.

Bắt đầu với xedges=np.linspace(-10,10,100) yedges=np.linspace(-10,10,100) zedges=np.linspace(-10,10,10) hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges)) xidx,yidx,zidx=np.where(hist>0) plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired) plt.show() 4

Trước khi bạn có thể bắt đầu làm việc với

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4, bạn sẽ cần cài đặt matplotlib. Bạn có thể làm như vậy bằng cách sử dụng Manger Gói tiêu chuẩn Python,
xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
9, bằng cách chạy lệnh sau trong bảng điều khiển:

$ python -m pip install matplotlib

Bây giờ bạn đã cài đặt matplotlib, hãy xem xét trường hợp sử dụng sau. Một quán cà phê bán sáu loại đồ uống cam đóng chai khác nhau. Chủ sở hữu muốn hiểu mối quan hệ giữa giá của đồ uống và số lượng mỗi người anh ta bán, vì vậy anh ta theo dõi số lượng mỗi chiếc đồ uống anh ta bán mỗi ngày. Bạn có thể hình dung mối quan hệ này như sau:

import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

plt.scatter(price, sales_per_day)
plt.show()

Trong tập lệnh Python này, bạn nhập mô hình con

$ python -m pip install matplotlib
0 từ matplotlib bằng bí danh
xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
3. Bí danh này thường được sử dụng bởi quy ước để rút ngắn tên mô -đun và mô hình con. Sau đó, bạn tạo danh sách với giá cả và doanh số trung bình mỗi ngày cho mỗi sáu đồ uống màu cam được bán.

Cuối cùng, bạn tạo biểu đồ phân tán bằng cách sử dụng

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4 với hai biến bạn muốn so sánh làm đối số đầu vào. Khi bạn sử dụng tập lệnh Python, bạn cũng cần hiển thị rõ ràng con số bằng cách sử dụng
$ python -m pip install matplotlib
3.

Khi bạn sử dụng một môi trường tương tác, chẳng hạn như bảng điều khiển hoặc máy tính xách tay Jupyter, bạn không cần phải gọi

$ python -m pip install matplotlib
3. Trong hướng dẫn này, tất cả các ví dụ sẽ ở dạng tập lệnh và sẽ bao gồm cuộc gọi đến
$ python -m pip install matplotlib
3.

Ở đây, đầu ra từ mã này:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Cốt truyện này cho thấy, nói chung, một thức uống càng đắt tiền, càng ít mặt hàng được bán. Tuy nhiên, đồ uống có giá 4,02 đô la là một ngoại lệ, có thể cho thấy nó là một sản phẩm đặc biệt phổ biến. Khi sử dụng các sơ đồ phân tán theo cách này, kiểm tra chặt chẽ có thể giúp bạn khám phá mối quan hệ giữa các biến. Sau đó, bạn có thể thực hiện phân tích thêm, cho dù đó là sử dụng hồi quy tuyến tính hoặc các kỹ thuật khác.

So sánh xedges=np.linspace(-10,10,100) yedges=np.linspace(-10,10,100) zedges=np.linspace(-10,10,10) hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges)) xidx,yidx,zidx=np.where(hist>0) plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired) plt.show() 4 và $ python -m pip install matplotlib 7

Bạn cũng có thể tạo ra biểu đồ phân tán được hiển thị ở trên bằng cách sử dụng một chức năng khác trong

$ python -m pip install matplotlib
8. Matplotlib từ
$ python -m pip install matplotlib
7 là một hàm âm mưu đa năng sẽ cho phép bạn tạo các sơ đồ đánh dấu hoặc dòng khác nhau khác nhau.

Bạn có thể đạt được biểu đồ phân tán tương tự như bản đồ bạn thu được trong phần trên với cuộc gọi sau đến

$ python -m pip install matplotlib
7, sử dụng cùng một dữ liệu:

plt.plot(price, sales_per_day, "o")
plt.show()

Trong trường hợp này, bạn phải bao gồm đánh dấu

import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

plt.scatter(price, sales_per_day)
plt.show()
1 làm đối số thứ ba, vì nếu không
$ python -m pip install matplotlib
7 sẽ vẽ biểu đồ dòng. Cốt truyện bạn đã tạo với mã này giống hệt với cốt truyện bạn đã tạo trước đó với
xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4.

Trong một số trường hợp, đối với âm mưu phân tán cơ bản mà bạn đang vẽ trong ví dụ này, sử dụng

$ python -m pip install matplotlib
7 có thể thích hợp hơn. Bạn có thể so sánh hiệu quả của hai chức năng bằng mô -đun
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

plt.scatter(price, sales_per_day)
plt.show()
5:

import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)

Hiệu suất sẽ thay đổi trên các máy tính khác nhau, nhưng khi bạn chạy mã này, bạn sẽ thấy rằng

$ python -m pip install matplotlib
7 hiệu quả hơn đáng kể so với
xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4. Khi chạy ví dụ trên trên hệ thống của tôi,
$ python -m pip install matplotlib
7 nhanh hơn bảy lần.

Nếu bạn có thể tạo các sơ đồ phân tán bằng cách sử dụng

$ python -m pip install matplotlib
7 và nó cũng nhanh hơn nhiều, tại sao bạn nên sử dụng
xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4? Bạn sẽ tìm thấy câu trả lời trong phần còn lại của hướng dẫn này. Hầu hết các tùy chỉnh và sử dụng nâng cao mà bạn sẽ tìm hiểu trong hướng dẫn này chỉ có thể khi sử dụng
xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4. Ở đây, một quy tắc của ngón tay cái bạn có thể sử dụng:

  • Nếu bạn cần một biểu đồ phân tán cơ bản, hãy sử dụng
    $ python -m pip install matplotlib
    
    7, đặc biệt nếu bạn muốn ưu tiên hiệu suất.
  • Nếu bạn muốn tùy chỉnh sơ đồ phân tán của mình bằng cách sử dụng các tính năng vẽ sơ đồ nâng cao hơn, hãy sử dụng
    xedges=np.linspace(-10,10,100)
    yedges=np.linspace(-10,10,100)
    zedges=np.linspace(-10,10,10)
    hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
    xidx,yidx,zidx=np.where(hist>0)
    plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
    plt.show()
    
    4.

Trong phần tiếp theo, bạn sẽ bắt đầu khám phá các cách sử dụng nâng cao hơn của

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4.

Tùy chỉnh các điểm đánh dấu trong các sơ đồ phân tán

Bạn có thể trực quan hóa nhiều hơn hai biến trên biểu đồ phân tán hai chiều bằng cách tùy chỉnh các điểm đánh dấu. Có bốn tính năng chính của các điểm đánh dấu được sử dụng trong một biểu đồ phân tán mà bạn có thể tùy chỉnh với

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4:

  1. Kích thước
  2. Màu sắc
  3. Hình dạng
  4. Tính minh bạch

Trong phần này của hướng dẫn, bạn sẽ học cách sửa đổi tất cả các thuộc tính này.

Thay đổi kích thước

Hãy để trở lại với chủ quán cà phê mà bạn đã gặp trước đó trong hướng dẫn này. Các loại đồ uống màu cam khác nhau mà anh ta bán đến từ các nhà cung cấp khác nhau và có tỷ suất lợi nhuận khác nhau. Bạn có thể hiển thị thông tin bổ sung này trong biểu đồ phân tán bằng cách điều chỉnh kích thước của điểm đánh dấu. Biên lợi nhuận được đưa ra dưới dạng phần trăm trong ví dụ này:

import matplotlib.pyplot as plt
import numpy as np

price = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin = np.asarray([20, 35, 40, 20, 27.5, 15])

plt.scatter(x=price, y=sales_per_day, s=profit_margin * 10)
plt.show()

Bạn có thể nhận thấy một vài thay đổi từ ví dụ đầu tiên. Thay vì danh sách, bạn hiện đang sử dụng các mảng numpy. Bạn có thể sử dụng bất kỳ cấu trúc dữ liệu giống như mảng nào cho dữ liệu và các mảng numpy thường được sử dụng trong các loại ứng dụng này vì chúng cho phép các hoạt động theo yếu tố được thực hiện hiệu quả. Mô -đun Numpy là một sự phụ thuộc của matplotlib, đó là lý do tại sao bạn không cần phải cài đặt nó theo cách thủ công.element-wise operations that are performed efficiently. The NumPy module is a dependency of Matplotlib, which is why you don’t need to install it manually.

Bạn cũng đã sử dụng các tham số được đặt tên làm đối số đầu vào trong lệnh gọi hàm. Các tham số

plt.plot(price, sales_per_day, "o")
plt.show()
6 và
plt.plot(price, sales_per_day, "o")
plt.show()
7 là bắt buộc, nhưng tất cả các tham số khác là tùy chọn.named parameters as input arguments in the function call. The parameters
plt.plot(price, sales_per_day, "o")
plt.show()
6 and
plt.plot(price, sales_per_day, "o")
plt.show()
7 are required, but all other parameters are optional.

Tham số

plt.plot(price, sales_per_day, "o")
plt.show()
8 biểu thị kích thước của điểm đánh dấu. Trong ví dụ này, bạn sử dụng biên lợi nhuận như một biến để xác định kích thước của điểm đánh dấu và nhân nó với
plt.plot(price, sales_per_day, "o")
plt.show()
9 để hiển thị chênh lệch kích thước rõ ràng hơn.

Bạn có thể thấy biểu đồ phân tán được tạo bởi mã này bên dưới:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Kích thước của điểm đánh dấu cho thấy tỷ suất lợi nhuận cho mỗi sản phẩm. Hai loại đồ uống màu cam bán nhiều nhất cũng là những thứ có tỷ suất lợi nhuận cao nhất. Đây là tin tốt cho chủ quán cà phê!

Thay đổi màu sắc

Nhiều khách hàng của quán cà phê muốn đọc các nhãn một cách cẩn thận, đặc biệt là để tìm ra hàm lượng đường của đồ uống mà họ mua. Chủ quán cà phê muốn nhấn mạnh lựa chọn thực phẩm lành mạnh trong chiến dịch tiếp thị tiếp theo của mình, vì vậy anh ta phân loại đồ uống dựa trên hàm lượng đường của họ và sử dụng hệ thống đèn giao thông để biểu thị hàm lượng đường thấp, trung bình hoặc đường cao cho đồ uống.

Bạn có thể thêm màu sắc vào các điểm đánh dấu trong biểu đồ phân tán để hiển thị hàm lượng đường của mỗi đồ uống:

# ...

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

sugar_content = [low, high, medium, medium, high, low]

plt.scatter(
    x=price,
    y=sales_per_day,
    s=profit_margin * 10,
    c=sugar_content,
)
plt.show()

Bạn xác định các biến

import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
0,
import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
1 và
import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
2 là bộ dữ liệu, mỗi bộ chứa ba giá trị đại diện cho các thành phần màu đỏ, xanh lục và xanh lam theo thứ tự đó. Đây là các giá trị màu RGB. Các bộ dữ liệu cho
import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
0,
import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
1 và
import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
2 lần lượt đại diện cho màu xanh lá cây, vàng và đỏ.

Sau đó, bạn đã xác định biến

import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
6 để phân loại từng đồ uống. Bạn sử dụng tham số tùy chọn
import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
7 trong lệnh gọi hàm để xác định màu của mỗi điểm đánh dấu. Ở đây, cốt truyện phân tán được sản xuất bởi mã này:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Chủ quán cà phê đã quyết định loại bỏ đồ uống đắt nhất khỏi thực đơn vì điều này không bán được và có hàm lượng đường cao. Anh ta cũng có nên ngừng dự trữ đồ uống rẻ nhất để tăng thông tin sức khỏe của doanh nghiệp, mặc dù nó bán tốt và có tỷ suất lợi nhuận tốt?

Thay đổi hình dạng

Chủ quán cà phê đã thấy bài tập này rất hữu ích, và anh ta muốn điều tra một sản phẩm khác. Ngoài đồ uống màu cam, bây giờ bạn cũng sẽ vẽ dữ liệu tương tự cho phạm vi của các thanh ngũ cốc có sẵn trong quán cà phê:

import matplotlib.pyplot as plt
import numpy as np

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

price_orange = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day_orange = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin_orange = np.asarray([20, 35, 40, 20, 27.5, 15])
sugar_content_orange = [low, high, medium, medium, high, low]

price_cereal = np.asarray([1.50, 2.50, 1.15, 1.95])
sales_per_day_cereal = np.asarray([67, 34, 36, 12])
profit_margin_cereal = np.asarray([20, 42.5, 33.3, 18])
sugar_content_cereal = [low, high, medium, low]

plt.scatter(
    x=price_orange,
    y=sales_per_day_orange,
    s=profit_margin_orange * 10,
    c=sugar_content_orange,
)
plt.scatter(
    x=price_cereal,
    y=sales_per_day_cereal,
    s=profit_margin_cereal * 10,
    c=sugar_content_cereal,
)
plt.show()

Trong mã này, bạn tái cấu trúc các tên biến cần tính đến rằng bây giờ bạn có dữ liệu cho hai sản phẩm khác nhau. Sau đó, bạn vẽ cả hai sơ đồ phân tán trong một hình duy nhất. Điều này cho đầu ra sau:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Thật không may, bạn không còn có thể tìm ra điểm dữ liệu nào thuộc về đồ uống màu cam và với các thanh ngũ cốc. Bạn có thể thay đổi hình dạng của điểm đánh dấu cho một trong các sơ đồ phân tán:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()
0

Bạn giữ hình dạng điểm đánh dấu mặc định cho dữ liệu đồ uống màu cam. Điểm đánh dấu mặc định là

import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

plt.scatter(price, sales_per_day)
plt.show()
1, đại diện cho một dấu chấm. Đối với dữ liệu thanh ngũ cốc, bạn đặt hình dạng điểm đánh dấu thành
import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
9, đại diện cho một điểm đánh dấu kim cương. Bạn có thể tìm thấy danh sách tất cả các điểm đánh dấu bạn có thể sử dụng trong trang tài liệu trên các điểm đánh dấu. Dưới đây là hai ô phân tán được đặt chồng lên trên cùng một hình:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Bây giờ bạn có thể phân biệt các điểm dữ liệu cho đồ uống màu cam với các điểm cho các thanh ngũ cốc. Nhưng có một vấn đề với cốt truyện cuối cùng bạn tạo ra mà bạn sẽ khám phá trong phần tiếp theo.

Thay đổi tính minh bạch

Một trong những điểm dữ liệu cho đồ uống màu cam đã biến mất. Cần có sáu đồ uống màu cam, nhưng chỉ có thể nhìn thấy năm điểm đánh dấu trong hình. Một trong những điểm dữ liệu thanh ngũ cốc là ẩn một điểm dữ liệu đồ uống màu cam.

Bạn có thể khắc phục sự cố trực quan này bằng cách tạo các điểm dữ liệu trong suốt một phần bằng cách sử dụng giá trị alpha:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()
1

Bạn đã đặt giá trị

import matplotlib.pyplot as plt
import numpy as np

price = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin = np.asarray([20, 35, 40, 20, 27.5, 15])

plt.scatter(x=price, y=sales_per_day, s=profit_margin * 10)
plt.show()
0 của cả hai bộ điểm đánh dấu thành
import matplotlib.pyplot as plt
import numpy as np

price = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin = np.asarray([20, 35, 40, 20, 27.5, 15])

plt.scatter(x=price, y=sales_per_day, s=profit_margin * 10)
plt.show()
1, điều đó có nghĩa là chúng là semitransarent. Bây giờ bạn có thể thấy tất cả các điểm dữ liệu trong lô này, bao gồm cả những điểm trùng khớp:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Bạn cũng đã thêm một tiêu đề và các nhãn khác vào cốt truyện để hoàn thành con số với nhiều thông tin hơn về những gì mà được hiển thị.

Tùy chỉnh Colormap và phong cách

Trong các sơ đồ phân tán mà bạn đã tạo ra cho đến nay, bạn đã sử dụng ba màu để thể hiện hàm lượng đường thấp, trung bình hoặc cao cho đồ uống và thanh ngũ cốc. Bây giờ, bạn sẽ thay đổi điều này để màu trực tiếp đại diện cho hàm lượng đường thực tế của các mặt hàng.

Trước tiên bạn cần phải tái cấu trúc các biến

import matplotlib.pyplot as plt
import numpy as np

price = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin = np.asarray([20, 35, 40, 20, 27.5, 15])

plt.scatter(x=price, y=sales_per_day, s=profit_margin * 10)
plt.show()
2 và
import matplotlib.pyplot as plt
import numpy as np

price = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin = np.asarray([20, 35, 40, 20, 27.5, 15])

plt.scatter(x=price, y=sales_per_day, s=profit_margin * 10)
plt.show()
3 để chúng đại diện cho giá trị nội dung đường thay vì chỉ các giá trị màu RGB:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()
2

Đây là các danh sách hiện có phần trăm của lượng đường được khuyến nghị hàng ngày trong mỗi mặt hàng. Phần còn lại của mã vẫn giữ nguyên, nhưng giờ đây bạn có thể chọn colormap để sử dụng. Bản đồ này giá trị thành màu:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()
3

Màu sắc của các điểm đánh dấu hiện dựa trên quy mô liên tục và bạn cũng đã hiển thị thanh màu hoạt động như một huyền thoại cho màu sắc của các điểm đánh dấu. Ở đây, âm mưu phân tán kết quả:colorbar that acts as a legend for the color of the markers. Here’s the resulting scatter plot:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Tất cả các ô mà bạn đã vẽ cho đến nay đã được hiển thị theo kiểu matplotlib gốc. Bạn có thể thay đổi kiểu này bằng cách sử dụng một trong một số tùy chọn. Bạn có thể hiển thị các kiểu có sẵn bằng lệnh sau:

>>>

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()
4

Bây giờ bạn có thể thay đổi kiểu cốt truyện khi sử dụng matplotlib bằng cách sử dụng cuộc gọi chức năng sau khi gọi

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()
5

Điều này thay đổi phong cách của Seaborn, một gói trực quan của bên thứ ba khác. Bạn có thể thấy phong cách khác nhau bằng cách vẽ sơ đồ biểu đồ phân tán cuối cùng mà bạn đã hiển thị ở trên bằng cách sử dụng phong cách Seaborn:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Bạn có thể đọc thêm về việc tùy chỉnh các lô trong matplotlib, và cũng có những hướng dẫn tiếp theo trên các trang tài liệu matplotlib.

Sử dụng

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4 để tạo các sơ đồ phân tán cho phép bạn hiển thị nhiều hơn hai biến. Dưới đây là các biến được thể hiện trong ví dụ này:

Biến đổiĐại diện bởi
Giá bánTrục x
Số trung bình được bánTrục y
Tỷ suất lợi nhuậnKích thước đánh dấu
Loại sản phẩmHình dạng đánh dấu
Hàm lượng đườngMàu đánh dấu

Khả năng thể hiện nhiều hơn hai biến làm cho

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4 trở thành một công cụ rất mạnh mẽ và linh hoạt.

Khám phá ________ 77 ()

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4 cung cấp sự linh hoạt hơn nữa trong việc tùy chỉnh các sơ đồ phân tán. Trong phần này, bạn sẽ khám phá cách che dấu dữ liệu bằng các mảng numpy và phân tán các sơ đồ thông qua một ví dụ. Trong ví dụ này, bạn sẽ tạo ra các điểm dữ liệu ngẫu nhiên và sau đó tách chúng thành hai vùng riêng biệt trong cùng một biểu đồ phân tán.

Một người đi lại, người rất quan tâm đến việc thu thập dữ liệu đã đối chiếu thời gian đến xe buýt tại trạm xe buýt địa phương của cô trong khoảng thời gian sáu tháng. Thời gian đến thời khóa

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Cốt truyện này cho thấy khả năng tương đối của một chiếc xe buýt đến mỗi phút trong vòng một giờ. Phân phối xác suất này có thể được biểu diễn bằng Numpy và

import matplotlib.pyplot as plt
import numpy as np

price = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin = np.asarray([20, 35, 40, 20, 27.5, 15])

plt.scatter(x=price, y=sales_per_day, s=profit_margin * 10)
plt.show()
9:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()
6

Bạn đã tạo ra hai phân phối bình thường tập trung vào

# ...

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

sugar_content = [low, high, medium, medium, high, low]

plt.scatter(
    x=price,
    y=sales_per_day,
    s=profit_margin * 10,
    c=sugar_content,
)
plt.show()
0 và
# ...

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

sugar_content = [low, high, medium, medium, high, low]

plt.scatter(
    x=price,
    y=sales_per_day,
    s=profit_margin * 10,
    c=sugar_content,
)
plt.show()
1 phút qua giờ và tổng hợp chúng. Bạn đặt thời gian đến nhất thành giá trị
# ...

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

sugar_content = [low, high, medium, medium, high, low]

plt.scatter(
    x=price,
    y=sales_per_day,
    s=profit_margin * 10,
    c=sugar_content,
)
plt.show()
2 bằng cách chia cho giá trị tối đa.

Bây giờ bạn có thể mô phỏng thời gian đến bus bằng cách sử dụng phân phối này. Để làm điều này, bạn có thể tạo thời gian ngẫu nhiên và xác suất tương đối ngẫu nhiên bằng mô-đun

# ...

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

sugar_content = [low, high, medium, medium, high, low]

plt.scatter(
    x=price,
    y=sales_per_day,
    s=profit_margin * 10,
    c=sugar_content,
)
plt.show()
3 tích hợp. Trong mã bên dưới, bạn cũng sẽ sử dụng danh sách toàn diện:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()
7

Bạn đã mô phỏng

# ...

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

sugar_content = [low, high, medium, medium, high, low]

plt.scatter(
    x=price,
    y=sales_per_day,
    s=profit_margin * 10,
    c=sugar_content,
)
plt.show()
4 đến xe buýt, mà bạn có thể hình dung với biểu đồ phân tán sau:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Cốt truyện của bạn sẽ trông khác nhau vì dữ liệu bạn tạo là ngẫu nhiên. Tuy nhiên, không phải tất cả các điểm này có khả năng gần với thực tế mà người đi lại quan sát được từ dữ liệu cô thu thập và phân tích. Bạn có thể vẽ sơ đồ phân phối mà cô ấy thu được từ dữ liệu với các xe buýt được mô phỏng:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()
8

Điều này cho đầu ra sau:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Để giữ cho mô phỏng thực tế, bạn cần đảm bảo rằng các bus đến ngẫu nhiên khớp với dữ liệu và phân phối thu được từ các dữ liệu đó. Bạn có thể lọc các điểm được tạo ngẫu nhiên bằng cách chỉ giữ các điểm nằm trong phân phối xác suất. Bạn có thể đạt được điều này bằng cách tạo mặt nạ cho biểu đồ phân tán:mask for the scatter plot:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
import random

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)

N=3*10**6
delta=np.random.normal(size=N)
vf=np.random.normal(size=N)
dS=np.random.normal(size=N)

idx=random.sample(range(N),1000)

plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
plt.show()
9

Các biến

# ...

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

sugar_content = [low, high, medium, medium, high, low]

plt.scatter(
    x=price,
    y=sales_per_day,
    s=profit_margin * 10,
    c=sugar_content,
)
plt.show()
5 và
# ...

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

sugar_content = [low, high, medium, medium, high, low]

plt.scatter(
    x=price,
    y=sales_per_day,
    s=profit_margin * 10,
    c=sugar_content,
)
plt.show()
6 là các mảng không có chứa các giá trị boolean dựa trên việc các khả năng được tạo ngẫu nhiên giảm trên hay dưới phân phối
plt.plot(price, sales_per_day, "o")
plt.show()
7. Sau đó, bạn vẽ hai sơ đồ phân tán riêng biệt, một với các điểm nằm trong phân phối và một điểm khác cho các điểm nằm ngoài phân phối. Các điểm dữ liệu nằm trên phân phối không phải là đại diện cho dữ liệu thực:

Hướng dẫn scatter plot large data set python - biểu đồ phân tán tập dữ liệu lớn python

Bạn đã phân đoạn các điểm dữ liệu từ biểu đồ phân tán ban đầu dựa trên việc liệu chúng có nằm trong phân phối và sử dụng một màu và điểm đánh dấu khác để xác định hai bộ dữ liệu hay không.

Xem lại các tham số đầu vào chính

Bạn đã học về các tham số đầu vào chính để tạo các sơ đồ phân tán trong các phần trên. Dưới đây, một bản tóm tắt ngắn gọn về các điểm chính cần nhớ về các tham số đầu vào chính:

Tham sốSự mô tả
plt.plot(price, sales_per_day, "o")
plt.show()
6 và
plt.plot(price, sales_per_day, "o")
plt.show()
7
Các tham số này đại diện cho hai biến chính và có thể là bất kỳ loại dữ liệu giống như mảng nào, chẳng hạn như danh sách hoặc mảng numpy. Đây là những thông số bắt buộc.
plt.plot(price, sales_per_day, "o")
plt.show()
8
Tham số này xác định kích thước của điểm đánh dấu. Nó có thể là một sự nổi nếu tất cả các điểm đánh dấu có cùng kích thước hoặc cấu trúc dữ liệu giống như mảng nếu các điểm đánh dấu có kích thước khác nhau.
import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
7
Tham số này đại diện cho màu của các điểm đánh dấu. Nó thường sẽ là một mảng các màu, chẳng hạn như các giá trị RGB hoặc một chuỗi các giá trị sẽ được ánh xạ vào colormap bằng tham số
import matplotlib.pyplot as plt
import numpy as np

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

price_orange = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day_orange = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin_orange = np.asarray([20, 35, 40, 20, 27.5, 15])
sugar_content_orange = [low, high, medium, medium, high, low]

price_cereal = np.asarray([1.50, 2.50, 1.15, 1.95])
sales_per_day_cereal = np.asarray([67, 34, 36, 12])
profit_margin_cereal = np.asarray([20, 42.5, 33.3, 18])
sugar_content_cereal = [low, high, medium, low]

plt.scatter(
    x=price_orange,
    y=sales_per_day_orange,
    s=profit_margin_orange * 10,
    c=sugar_content_orange,
)
plt.scatter(
    x=price_cereal,
    y=sales_per_day_cereal,
    s=profit_margin_cereal * 10,
    c=sugar_content_cereal,
)
plt.show()
2.
import matplotlib.pyplot as plt
import numpy as np

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

price_orange = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day_orange = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin_orange = np.asarray([20, 35, 40, 20, 27.5, 15])
sugar_content_orange = [low, high, medium, medium, high, low]

price_cereal = np.asarray([1.50, 2.50, 1.15, 1.95])
sales_per_day_cereal = np.asarray([67, 34, 36, 12])
profit_margin_cereal = np.asarray([20, 42.5, 33.3, 18])
sugar_content_cereal = [low, high, medium, low]

plt.scatter(
    x=price_orange,
    y=sales_per_day_orange,
    s=profit_margin_orange * 10,
    c=sugar_content_orange,
)
plt.scatter(
    x=price_cereal,
    y=sales_per_day_cereal,
    s=profit_margin_cereal * 10,
    c=sugar_content_cereal,
)
plt.show()
3
Tham số này được sử dụng để tùy chỉnh hình dạng của điểm đánh dấu.
import matplotlib.pyplot as plt
import numpy as np

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

price_orange = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day_orange = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin_orange = np.asarray([20, 35, 40, 20, 27.5, 15])
sugar_content_orange = [low, high, medium, medium, high, low]

price_cereal = np.asarray([1.50, 2.50, 1.15, 1.95])
sales_per_day_cereal = np.asarray([67, 34, 36, 12])
profit_margin_cereal = np.asarray([20, 42.5, 33.3, 18])
sugar_content_cereal = [low, high, medium, low]

plt.scatter(
    x=price_orange,
    y=sales_per_day_orange,
    s=profit_margin_orange * 10,
    c=sugar_content_orange,
)
plt.scatter(
    x=price_cereal,
    y=sales_per_day_cereal,
    s=profit_margin_cereal * 10,
    c=sugar_content_cereal,
)
plt.show()
2
Nếu một chuỗi các giá trị được sử dụng cho tham số
import timeit
import matplotlib.pyplot as plt

price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40]
sales_per_day = [34, 62, 49, 22, 13, 19]

print(
    "plt.scatter()",
    timeit.timeit(
        "plt.scatter(price, sales_per_day)",
        number=1000,
        globals=globals(),
    ),
)
print(
    "plt.plot()",
    timeit.timeit(
        "plt.plot(price, sales_per_day, 'o')",
        number=1000,
        globals=globals(),
    ),
)
7, thì tham số này có thể được sử dụng để chọn ánh xạ giữa các giá trị và màu sắc, thường bằng cách sử dụng một trong các colormaps tiêu chuẩn hoặc colormap tùy chỉnh.
import matplotlib.pyplot as plt
import numpy as np

price = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin = np.asarray([20, 35, 40, 20, 27.5, 15])

plt.scatter(x=price, y=sales_per_day, s=profit_margin * 10)
plt.show()
0
Tham số này là một phao có thể lấy bất kỳ giá trị nào giữa
import matplotlib.pyplot as plt
import numpy as np

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

price_orange = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
sales_per_day_orange = np.asarray([34, 62, 49, 22, 13, 19])
profit_margin_orange = np.asarray([20, 35, 40, 20, 27.5, 15])
sugar_content_orange = [low, high, medium, medium, high, low]

price_cereal = np.asarray([1.50, 2.50, 1.15, 1.95])
sales_per_day_cereal = np.asarray([67, 34, 36, 12])
profit_margin_cereal = np.asarray([20, 42.5, 33.3, 18])
sugar_content_cereal = [low, high, medium, low]

plt.scatter(
    x=price_orange,
    y=sales_per_day_orange,
    s=profit_margin_orange * 10,
    c=sugar_content_orange,
)
plt.scatter(
    x=price_cereal,
    y=sales_per_day_cereal,
    s=profit_margin_cereal * 10,
    c=sugar_content_cereal,
)
plt.show()
7 và
# ...

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

sugar_content = [low, high, medium, medium, high, low]

plt.scatter(
    x=price,
    y=sales_per_day,
    s=profit_margin * 10,
    c=sugar_content,
)
plt.show()
2 và thể hiện tính minh bạch của các điểm đánh dấu, trong đó
# ...

low = (0, 1, 0)
medium = (1, 1, 0)
high = (1, 0, 0)

sugar_content = [low, high, medium, medium, high, low]

plt.scatter(
    x=price,
    y=sales_per_day,
    s=profit_margin * 10,
    c=sugar_content,
)
plt.show()
2 đại diện cho một điểm đánh dấu mờ đục.

Đây không phải là các tham số đầu vào duy nhất có sẵn với

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4. Bạn có thể truy cập danh sách đầy đủ các tham số đầu vào từ tài liệu.

Sự kết luận

Bây giờ bạn đã biết cách tạo và tùy chỉnh các sơ đồ phân tán bằng cách sử dụng

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4, bạn đã sẵn sàng để bắt đầu thực hành với các bộ dữ liệu và ví dụ của riêng bạn. Chức năng đa năng này cung cấp cho bạn khả năng khám phá dữ liệu của bạn và trình bày những phát hiện của bạn một cách rõ ràng.

Trong hướng dẫn này, bạn đã học được cách:

  • Tạo một biểu đồ phân tán bằng cách sử dụng ________ 77 ()scatter plot using
    import matplotlib.pyplot as plt
    import numpy as np
    
    price = np.asarray([2.50, 1.23, 4.02, 3.25, 5.00, 4.40])
    sales_per_day = np.asarray([34, 62, 49, 22, 13, 19])
    profit_margin = np.asarray([20, 35, 40, 20, 27.5, 15])
    
    plt.scatter(x=price, y=sales_per_day, s=profit_margin * 10)
    plt.show()
    
    7()
  • Sử dụng các tham số đầu vào cần thiết và tùy chọninput parameters
  • Tùy chỉnh các lô phân tán cho các lô cơ bản và nâng cao hơnbasic and more advanced plots
  • Đại diện cho nhiều hơn hai chiều với
    xedges=np.linspace(-10,10,100)
    yedges=np.linspace(-10,10,100)
    zedges=np.linspace(-10,10,10)
    hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
    xidx,yidx,zidx=np.where(hist>0)
    plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
    plt.show()
    
    4more than two dimensions with
    xedges=np.linspace(-10,10,100)
    yedges=np.linspace(-10,10,100)
    zedges=np.linspace(-10,10,10)
    hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
    xidx,yidx,zidx=np.where(hist>0)
    plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
    plt.show()
    
    4

Bạn có thể tận dụng tối đa trực quan hóa bằng cách sử dụng

xedges=np.linspace(-10,10,100)
yedges=np.linspace(-10,10,100)
zedges=np.linspace(-10,10,10)
hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
xidx,yidx,zidx=np.where(hist>0)
plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
plt.show()
4 bằng cách tìm hiểu thêm về tất cả các tính năng trong matplotlib và xử lý dữ liệu bằng cách sử dụng Numpy.

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Sử dụng plt.scatter () để trực quan hóa dữ liệu trong Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Using plt.scatter() to Visualize Data in Python

Các sơ đồ phân tán có tốt cho các bộ dữ liệu lớn không?

Các biểu đồ biểu đồ hộp và phân tán được cho là trong số các biểu đồ được thử nghiệm và đã được chứng minh mà bạn có thể sử dụng để trực quan hóa dữ liệu lớn.Các biểu đồ phù hợp nhất để hiển thị dữ liệu phức tạp và cồng kềnh sử dụng không gian tối thiểu.. The charts are best suited to displaying complex and bulky data using minimal space.

Các sơ đồ phân tán có tốt cho cỡ mẫu lớn không?

Mặc dù không có hướng dẫn chính thức về lượng dữ liệu cần thiết cho một biểu đồ phân tán, các mẫu lớn hơn chỉ ra rõ ràng các mẫu trong dữ liệu.Một biểu đồ phân tán có đường hồi quy được trang bị có hiệu quả nhất khi kích thước mẫu xấp xỉ 40 hoặc lớn hơn.larger samples more clearly indicate patterns in the data. A scatterplot that has a fitted regression line is most effective when the sample size is approximately 40 or greater.

Sự khác biệt giữa lô PLT và phân tán PLT là gì?

Sự khác biệt chính của PLT.Phân tán từ plt.Biểu đồ là nó có thể được sử dụng để tạo các sơ đồ phân tán trong đó các thuộc tính của từng điểm riêng lẻ (kích thước, màu mặt, màu cạnh, v.v.) có thể được kiểm soát riêng lẻ hoặc ánh xạ vào dữ liệu.it can be used to create scatter plots where the properties of each individual point (size, face color, edge color, etc.) can be individually controlled or mapped to data.