Thông thường khi phải đối mặt với một lượng lớn dữ liệu, bước đầu tiên là tính toán số liệu thống kê tóm tắt cho dữ liệu được đề cập. Có lẽ số liệu thống kê tóm tắt phổ biến nhất là độ lệch trung bình và độ lệch chuẩn, cho phép bạn tóm tắt các giá trị "điển hình" trong bộ dữ liệu, nhưng các tập hợp khác cũng hữu ích [tổng, sản phẩm, trung bình, tối thiểu và tối đa, lượng tử, v.v. ]. Numpy có các chức năng tổng hợp tích hợp nhanh để làm việc trên các mảng; Chúng tôi sẽ thảo luận và chứng minh một số trong số họ ở đây. Ví dụ nhanh, hãy xem xét tính toán tổng của tất cả các giá trị trong một mảng. Bản thân Python có thể làm điều này bằng cách sử dụng hàm Tóm tắt các giá trị trong một mảng
10 loops, best of 3: 104 ms per loop
1000 loops, best of 3: 442 µs per loop
5 tích hợp:
In [2]:
L = np.random.random[100] sum[L]
Cú pháp khá giống với hàm
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop5 của Numpy và kết quả giống nhau trong trường hợp đơn giản nhất:
Tuy nhiên, vì nó thực hiện thao tác trong mã được biên dịch, phiên bản hoạt động của Numpy được tính toán nhanh hơn nhiều:
In [4]:
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop
Mặc dù vậy, hãy cẩn thận: hàm
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop5 và hàm
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop8 không giống nhau, đôi khi có thể dẫn đến sự nhầm lẫn! Cụ thể, các đối số tùy chọn của chúng có ý nghĩa khác nhau và
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop8 nhận thức được nhiều kích thước mảng, như chúng ta sẽ thấy trong phần sau.
Tối thiểu và tối đa
Tương tự, Python đã tích hợp các hàm
min[big_array], max[big_array]0 và
min[big_array], max[big_array]1, được sử dụng để tìm giá trị tối thiểu và giá trị tối đa của bất kỳ mảng nào đã cho:
In [5]:
min[big_array], max[big_array]
Out[5]:
[1.1717128136634614e-06, 0.9999976784968716]
Các chức năng tương ứng của Numpy có cú pháp tương tự và một lần nữa hoạt động nhanh hơn nhiều:
In [6]:
np.min[big_array], np.max[big_array]
Out[6]:
[1.1717128136634614e-06, 0.9999976784968716]
In [7]:
%timeit min[big_array] %timeit np.min[big_array]
10 loops, best of 3: 82.3 ms per loop 1000 loops, best of 3: 497 µs per loop
Đối với
min[big_array], max[big_array]0,
min[big_array], max[big_array]1,
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop5 và một số tập hợp numpy khác, một cú pháp ngắn hơn là sử dụng các phương thức của chính đối tượng mảng:
In [8]:
print[big_array.min[], big_array.max[], big_array.sum[]]
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]0
Bất cứ khi nào có thể, hãy chắc chắn rằng bạn đang sử dụng phiên bản Numpy của các tập hợp này khi hoạt động trên các mảng Numpy!
Tập hợp đa chiều
Một loại hoạt động tổng hợp phổ biến là một tập hợp dọc theo một hàng hoặc cột. Giả sử bạn có một số dữ liệu được lưu trữ trong một mảng hai chiều:
In [9]:
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]1
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]2
Theo mặc định, mỗi hàm tổng hợp Numpy sẽ trả về tổng hợp trên toàn bộ mảng:
Các hàm tổng hợp có một đối số bổ sung chỉ định trục dọc theo đó tổng hợp được tính toán. Ví dụ: chúng ta có thể tìm thấy giá trị tối thiểu trong mỗi cột bằng cách chỉ định
min[big_array], max[big_array]5:
Out[11]:
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]3
Hàm trả về bốn giá trị, tương ứng với bốn cột của số.
Tương tự, chúng ta có thể tìm thấy giá trị tối đa trong mỗi hàng:
Out[12]:
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]4
Cách mà trục được chỉ định ở đây có thể gây nhầm lẫn cho người dùng đến từ các ngôn ngữ khác. Từ khóa
min[big_array], max[big_array]6 chỉ định kích thước của mảng sẽ bị thu gọn, thay vì kích thước sẽ được trả về. Vì vậy, việc chỉ định
min[big_array], max[big_array]5 có nghĩa là trục đầu tiên sẽ bị thu gọn: đối với các mảng hai chiều, điều này có nghĩa là các giá trị trong mỗi cột sẽ được tổng hợp.
Các chức năng tổng hợp khác
Numpy cung cấp nhiều chức năng tổng hợp khác, nhưng chúng tôi sẽ không thảo luận chi tiết về chúng ở đây. Ngoài ra, hầu hết các tập hợp đều có đối tác ____ 38 an toàn tính toán kết quả trong khi bỏ qua các giá trị bị thiếu, được đánh dấu bằng giá trị IEEE nổi đặc biệt của IEEE [để thảo luận đầy đủ về dữ liệu bị thiếu, xem xử lý dữ liệu bị thiếu]. Một số chức năng an toàn ____ 38 này không được thêm vào cho đến khi Numpy 1.8, vì vậy chúng sẽ không có sẵn trong các phiên bản Numpy cũ hơn.
Bảng sau đây cung cấp một danh sách các chức năng tổng hợp hữu ích có sẵn trong Numpy:
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop8 | [1.1717128136634614e-06, 0.9999976784968716]2 | Tính tổng các phần tử |
[1.1717128136634614e-06, 0.9999976784968716]3 | [1.1717128136634614e-06, 0.9999976784968716]4 | Tính toán sản phẩm của các yếu tố |
[1.1717128136634614e-06, 0.9999976784968716]5 | [1.1717128136634614e-06, 0.9999976784968716]6 | Tính trung bình của các yếu tố |
[1.1717128136634614e-06, 0.9999976784968716]7 | [1.1717128136634614e-06, 0.9999976784968716]8 | Tính độ lệch chuẩn |
[1.1717128136634614e-06, 0.9999976784968716]9 | np.min[big_array], np.max[big_array]0 | Tính phương sai |
np.min[big_array], np.max[big_array]1 | np.min[big_array], np.max[big_array]2 | Tìm giá trị tối thiểu |
np.min[big_array], np.max[big_array]3 | np.min[big_array], np.max[big_array]4 | Tìm giá trị tối đa |
np.min[big_array], np.max[big_array]5 | np.min[big_array], np.max[big_array]6 | Tìm chỉ số giá trị tối thiểu |
np.min[big_array], np.max[big_array]7 | np.min[big_array], np.max[big_array]8 | Tìm chỉ mục giá trị tối đa |
np.min[big_array], np.max[big_array]9 | [1.1717128136634614e-06, 0.9999976784968716]0 | Tính trung bình của các yếu tố |
[1.1717128136634614e-06, 0.9999976784968716]1 | [1.1717128136634614e-06, 0.9999976784968716]2 | Tính toán thống kê dựa trên xếp hạng của các yếu tố |
[1.1717128136634614e-06, 0.9999976784968716]3 | N/a | Đánh giá xem bất kỳ yếu tố nào có đúng không |
[1.1717128136634614e-06, 0.9999976784968716]4 | N/a | Đánh giá xem bất kỳ yếu tố nào có đúng không |
[1.1717128136634614e-06, 0.9999976784968716]4
Đánh giá xem tất cả các yếu tố có đúng không
Chúng ta sẽ thấy các tập hợp này thường xuyên trong suốt phần còn lại của cuốn sách.
In [13]:
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]5
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]6
Chúng tôi sẽ sử dụng gói Pandas, chúng tôi sẽ khám phá đầy đủ hơn trong Chương 3, để đọc tệp và trích xuất thông tin này [lưu ý rằng độ cao được đo bằng centimet].
In [14]:
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]7
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]8
Bây giờ chúng tôi có mảng dữ liệu này, chúng tôi có thể tính toán nhiều số liệu thống kê tóm tắt:
In [15]:
big_array = np.random.rand[1000000] %timeit sum[big_array] %timeit np.sum[big_array]9
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop0
Lưu ý rằng trong mỗi trường hợp, hoạt động tổng hợp đã giảm toàn bộ mảng thành một giá trị tóm tắt duy nhất, cung cấp cho chúng tôi thông tin về phân phối các giá trị. Chúng tôi cũng có thể muốn tính toán các lượng tử:
In [16]:
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop1
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop2
Chúng tôi thấy rằng chiều cao trung bình của các tổng thống Hoa Kỳ là 182 cm, hoặc chỉ ngại sáu feet.
Tất nhiên, đôi khi sẽ hữu ích hơn khi thấy biểu diễn trực quan của dữ liệu này, chúng ta có thể thực hiện bằng cách sử dụng các công cụ trong matplotlib [chúng ta sẽ thảo luận về matplotlib đầy đủ hơn trong Chương 4]. Ví dụ: mã này tạo ra biểu đồ sau:
In [17]:
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop3
In [18]:
10 loops, best of 3: 104 ms per loop 1000 loops, best of 3: 442 µs per loop4
Các tập hợp này là một số phần cơ bản của phân tích dữ liệu khám phá mà chúng ta sẽ khám phá sâu hơn trong các chương sau của cuốn sách.