Khái niệm về Mặt nạ trong Python – che dữ liệu trong python

Nếu bạn từng băn khoăn về cách lọc hoặc xử lý dữ liệu không mong muốn, bị thiếu hoặc không hợp lệ trong các dự án khoa học dữ liệu của mình hoặc nói chung là lập trình Python, thì bạn phải tìm hiểu khái niệm hữu ích về Masking. Trong…

Bạn đang xem: che dữ liệu trong python

Ảnh của Pille-Riin Priske trên Hủy gắn thẻ

Khái niệm về Mặt nạ trong Python 2021

Một tính năng thú vị của NumPy để lọc dữ liệu không mong muốn

Tất cả đàn ông đều là những nhà điêu khắc, thường xuyên cắt bỏ những phần không mong muốn trong cuộc sống của họ, cố gắng tạo ra ý tưởng về một kiệt tác… Eddie Murphy < / p>

Nếu bạn từng băn khoăn về cách lọc hoặc xử lý dữ liệu không mong muốn, bị thiếu hoặc không hợp lệ trong các dự án khoa học dữ liệu của mình hoặc nói chung là lập trình Python, thì bạn phải tìm hiểu khái niệm hữu ích về Đắp mặt nạ . Trong bài đăng này, trước tiên tôi sẽ hướng dẫn bạn làm ví dụ về mảng 1-d, tiếp theo là mảng 2-d (ma trận), và sau đó cung cấp ứng dụng của Mặt nạ trong vấn đề khoa học dữ liệu < / .

1-d Mảng

Giả sử chúng ta có mảng NumPy sau:

 

import numpy as np

arr = np.array ([1, 2, 3, 4, 5, 6, 7, 8])

Bây giờ, chúng tôi muốn tính tổng các phần tử nhỏ hơn 4 và lớn hơn 6. Một tẻ nhạt cách là sử dụng vòng lặp for, kiểm tra xem một số có đáp ứng các điều kiện này không, sau đó thêm nó vào một biến. Điều này sẽ giống như sau:

 

total = 0 # Biến để lưu trữ tổng

for num in arr:
if (num & lt ; 4) hoặc (num & gt; 6):
total + = num

print (tổng số)
& gt; & gt; & gt; 21

Bạn có thể giảm mã này thành một lớp lót bằng cách sử dụng liệt kê dễ hiểu as,

 

total = sum ([num cho num trong arr if (num & lt; 4) or (num & gt; 6)] )
& gt; & gt; & gt; 21

Bạn có thể đạt được nhiệm vụ tương tự bằng cách sử dụng khái niệm Masking . Về cơ bản, nó hoạt động với danh sách Boolean (True / False) , khi được áp dụng cho mảng ban đầu sẽ trả về các phần tử được quan tâm. Ở đây, True đề cập đến các phần tử thỏa mãn điều kiện (nhỏ hơn 4 và lớn hơn 6 trong trường hợp của chúng tôi) và False đề cập đến các phần tử không thỏa mãn điều kiện.

Đầu tiên chúng ta hãy tạo mặt nạ này theo cách thủ công.

 

mask = [Đúng, Đúng, Đúng, Sai, Sai, Sai, Đúng, Đúng]

Tiếp theo, chúng tôi chuyển mặt nạ này (danh sách Boolean) cho mảng của chúng tôi bằng cách sử dụng lập chỉ mục. Điều này sẽ trả về chỉ những phần tử thỏa mãn điều kiện này. Sau đó, bạn có thể tính tổng mảng con này. Đoạn mã sau đây giải thích điều đó. Bạn sẽ nhận thấy rằng bạn không nhận lại được 4, 5 và 6 vì giá trị tương ứng là False .

 

arr [mask]
& gt; & gt; & gt; array ([1, 2, 3, 7, 8])

arr [mask]. sum ()
& gt; & gt; & gt; 21

Mô-đun MaskedArray của Numpy

Numpy cung cấp mô-đun MaskedArray tích hợp được gọi là ma . Hàm masked_array () của mô-đun này cho phép bạn trực tiếp tạo một “mảng được che” trong đó các phần tử không đáp ứng điều kiện sẽ được hiển thị / gắn nhãn “không hợp lệ” . Điều này đạt được bằng cách sử dụng đối số mask , chứa True / False hoặc các giá trị 0/1.

Thận trọng : Bây giờ, khi mask = False hoặc mask = 0 , nghĩa đen là có nghĩa là không gắn nhãn giá trị này là không hợp lệ. Nói một cách đơn giản, bao gồm nó trong quá trình tính toán. Tương tự, mask = True hoặc mask = 1 có nghĩa là gắn nhãn giá trị này là không hợp lệ. Ngược lại, trước đó bạn đã thấy rằng giá trị False bị loại trừ khi chúng tôi sử dụng lập chỉ mục.

Xem Thêm  Truy cập danh sách và các phần tử của nó bằng Python - danh sách truy cập trong python

Do đó, bây giờ bạn phải hoán đổi giá trị Đúng và Sai khi sử dụng ma mô-đun < / strong>. Vì vậy, mặt nạ mới trở thành

mask = [Sai, Sai, Sai, Đúng, Đúng, Đúng, Sai, Sai]

 

import numpy.ma as ma

" "" Đầu tiên tạo một mảng Numpy bình thường "" "
arr = np.array ([1, 2, 3 , 4, 5, 6, 7, 8])

ma_arr = ma.masked_array (arr , mask = [False, False, False, True,
True, True, False, False])
& gt; & gt; & gt; masked_array (data = [1, 2, 3, -, -, -, 7, 8],
mask = [False, False, False, True, True, True, False,
Sai], fill_value = 999999)
ma_arr.sum ()
& gt; & gt; & gt; 21

Các giá trị bị che (không hợp lệ) hiện được biểu thị bằng - . Hình dạng / kích thước của masked_array tạo ra là giống với mảng ban đầu. Trước đây, khi chúng ta sử dụng arr [mask] , mảng kết quả không có cùng độ dài với mảng ban đầu vì các phần tử không hợp lệ không có trong đầu ra. Tính năng này cho phép dễ dàng thực hiện các phép tính số học trên các mảng có độ dài bằng nhau nhưng với các mặt nạ khác nhau.

Giống như trước đây, bạn cũng có thể tạo mặt nạ bằng cách sử dụng tính năng hiểu danh sách. Tuy nhiên, vì bạn muốn hoán đổi giá trị True False , bạn có thể sử dụng toán tử dấu ngã ~ để đảo ngược Boolean.

 

" "" Sử dụng toán tử Dấu ngã để đảo ngược Boolean "" "
ma_arr = ma.masked_array (arr, mask = [~ ((a & lt; 4) or (a & gt; 6 )) cho a trong arr])

ma_arr.sum ()
& gt; & gt; & gt; 21

Bạn cũng có thể sử dụng mặt nạ bao gồm 0 và 1.

ma_arr = ma.masked_array (arr, mask = [0, 0, 0, 1, 1, 1, 0, 0] )

Tùy thuộc vào loại điều kiện mặt nạ, NumPy cung cấp một số mặt nạ tích hợp khác giúp bạn không phải thực hiện thao tác chỉ định mặt nạ Boolean theo cách thủ công. Một vài điều kiện như vậy là:

  • less hơn (hoặc nhỏ hơn bằng) một số
  • lớn hơn ( hoặc lớn hơn bằng) một số
  • trong một phạm vi nhất định < / li>
  • nằm ngoài một phạm vi nhất định

Nhỏ hơn (hoặc nhỏ hơn hơn bằng) a number

Hàm masked_less () sẽ che / lọc các giá trị nhỏ hơn một số.

 

arr = np.array ([1, 2, 3, 4, 5, 6 , 7, 8])

ma_arr = ma.masked_less (arr, 4)
& gt; & gt; & gt; masked_array (data = [-, -, -, 4, 5, 6, 7, 8],
mask = [True, True, True, False, False, False,
False, Sai], fill_value = 999999)

ma_arr.sum ()
& gt; & gt ; & gt; 30

Để lọc các giá trị nhỏ hơn hoặc bằng thành một số, hãy sử dụng masked_less_equal () .

Lớn hơn (hoặc lớn hơn bằng) một số

Chúng ta sử dụng hàm masked_greater () để lọc các giá trị lớn hơn 4.

 

arr = np.array ([1, 2, 3, 4, 5, 6, 7, 8])

ma_arr = ma.masked_greater (arr, 4)

& gt; & gt; & gt; masked_array (data = [1, 2, 3, 4, -, -, -, -],
mask = [False, False, False, False, True, True,
True , True], fill_value = 999999)

ma_arr.sum ()
& gt; & gt; & gt; 10

Tương tự, masked_greater_equal () lọc giá trị lớn hơn hoặc bằng 4.

Trong một phạm vi nhất định

Hàm masked_inside () sẽ che / lọc các giá trị nằm giữa hai số nhất định (cả hai bao gồm). Các giá trị của bộ lọc sau đây từ 4 đến 6.

 

arr = np.array ([1, 2, 3, 4, 5, 6, 7, 8])

ma_arr = ma.masked_inside (arr, 4, 6)
& gt; & gt; & gt; masked_array (data = [1, 2, 3, -, -, -, 7, 8],
mask = [False, False, False, True, True, True,
False, Sai], fill_value = 999999)

ma_arr.sum ()
& gt; & gt ; & gt; 21

Nằm ngoài một dải ô đã cho

Hàm masked_inside () sẽ che / lọc các giá trị nằm giữa hai số nhất định (bao gồm cả hai). Các giá trị bộ lọc sau nằm ngoài 4-6.

 

arr = np.array ([1, 2, 3, 4, 5, 6, 7, 8])

ma_arr = ma.masked_outside (arr, 4, 6)
& gt; & gt; & gt; masked_array (data = [-, -, -, 4, 5, 6, -, -],
mask = [True, True, True, False, False, False,
True, True], fill_value = 999999)

ma_arr.sum ()
& gt ; & gt; & gt; 15

Bỏ qua NaN và / hoặc các giá trị vô hạn trong các phép toán số học

Đây là một tính năng thú vị! Thường thì một tập dữ liệu thực tế có rất nhiều giá trị bị thiếu (NaN) hoặc một số giá trị vô cực, kỳ lạ. Các giá trị như vậy tạo ra các vấn đề trong tính toán và do đó, bị bỏ qua hoặc bị áp đặt.

Ví dụ: tổng hoặc giá trị trung bình của mảng NumPy 1-d này sẽ là nan .

 

arr = np.array ([1, 2, 3, np.nan, 5, 6, np.inf, 8])
arr.sum ()
& gt; & gt; & gt; nan

Bạn có thể dễ dàng loại trừ NaN và các giá trị vô hạn bằng cách sử dụng masked_invalid () sẽ loại trừ các giá trị này khỏi tính toán. Các giá trị không hợp lệ này bây giờ sẽ được biểu diễn dưới dạng - . Tính năng này cực kỳ hữu ích trong việc xử lý dữ liệu bị thiếu trong tập dữ liệu lớn trong các bài toán khoa học dữ liệu.

 

ma_arr = ma.masked_invalid (arr)
& gt; & gt; & gt; masked_array (data = [1.0, 2.0, 3.0, -, 5.0, 6.0, -, 8.0],
mask = [False, False, False, True, False, False,
True, False ], fill_value = 1e + 20)

ma_arr.mean ()
& gt; & gt; & gt; 4.166666666666667

Giả sử bạn muốn áp dụng hoặc điền vào các giá trị NaNs hoặc inf này với giá trị trung bình là giá trị còn lại, hợp lệ. Bạn có thể thực hiện việc này một cách dễ dàng bằng cách sử dụng fill () as,

 

ma_arr.filled (ma_arr.mean ())
& gt; & gt; & gt; [1., 2., 3., 4.16666667, 5., 6., 4.16666667, 8.]

Che mảng 2-d (ma trận)

< p class = "pw-post-body-paragraph ls lt ka lv b lw nk lb ly lz nl le mb mp nm me mf mq nn mi mj mr no mm mn mo je gc" id = "d8f0"> Thường thì dữ liệu lớn của bạn ở dạng ma trận 2-d lớn. Hãy xem cách bạn có thể sử dụng tính năng tạo mặt nạ cho ma trận. Hãy xem xét ma trận 3 x 3 sau đây.

 

arr = np.array ([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])

Giả sử chúng ta muốn tính tổng theo cột không bao gồm các số lớn hơn 4. Bây giờ, chúng ta phải sử dụng một mặt nạ 2-d >. Như đã đề cập trước đó, bạn cũng có thể sử dụng mặt nạ 2-d của True / False trong phần sau.

 

ma_arr = ma.masked_array (arr, mask = [[0, 0, 0],
[0, 1, 1],
[1, 1, 1]])

& gt; & gt; & gt; masked_array (data = [[1, 2, 3],
[4, -, -],
[-, -, -]],
mask = [ [Sai, Sai, Sai],
[Sai, Đúng, Đúng],
[Đúng, Đúng, Đúng]], fill_value = 999999)

" "" Tổng theo cột được tính bằng cách sử dụng đối số axis = 0 "" "
ma_arr.sum (axis = 0)

& gt; & gt; & gt; masked_array (data = [5, 2, 3], mask = [False, False, False],
fill_value = 999999)

Trong đoạn mã trên, chúng tôi đã tạo một mặt nạ 2-d sử dụng 0 và 1 theo cách thủ công. Bạn có thể làm cho cuộc sống của mình dễ dàng hơn bằng cách sử dụng các chức năng tương tự như trước đó cho trường hợp 1-d . Tại đây, bạn có thể sử dụng masked_greater () để loại trừ các giá trị lớn hơn 4.

 

ma_arr = ma.masked_greater (arr, 4)

ma_arr.sum (axis = 0)
& gt; & gt; & gt; masked_array (data = [5, 2, 3], mask = [False, False, False],
fill_value = 999999)

LƯU Ý: Bạn có thể sử dụng tất cả các hàm, được hiển thị trước đó cho mảng 1-d, cũng cho mảng 2-d.

Sử dụng che trong một bài toán khoa học dữ liệu

Nhiệm vụ thường xuyên của bất kỳ dự án khoa học dữ liệu nào là phân tích dữ liệu khám phá (EDA). Một bước quan trọng theo hướng này là hình dung mối quan hệ thống kê (tương quan) giữa các đặc điểm đầu vào. Ví dụ: hệ số tương quan của Pearson cung cấp thước đo tương quan tuyến tính giữa hai biến.

Hãy xem xét Tập dữ liệu nhà ở Boston và tính toán ma trận tương quan dẫn đến các hệ số nằm trong khoảng từ -1 đến 1.

 

nhập gấu trúc dưới dạng pd
import seaborn dưới dạng sns
import matplotlib.pyplot as plt
từ sklearn.datasets import load_boston

boston = load_boston ()
df = pd.DataFrame (boston.data, cột = boston.feature_names)

Bây giờ hãy vẽ biểu đồ ma trận tương quan bằng cách sử dụng thư viện Seaborn.

 

tương quan = df.corr ()

ax = sns.heatmap (dữ liệu = tương quan, cmap = 'coolwarm',
linewidths = 2, cbar = True)

Ma trận tương quan cho các tính năng đầu vào của Bộ dữ liệu nhà ở Boston.

Bây giờ, giả sử bạn muốn đánh dấu hoặc dễ dàng phân biệt các giá trị có tương quan tuyệt đối trên 70%, tức là 0,7 < / strong>. Các khái niệm về Mặt nạ được giới thiệu ở trên sẽ phát huy tác dụng ở đây. Bạn có thể sử dụng hàm masked_outside () , đã giải thích trước đó, để che các giá trị bắt buộc của bạn và đánh dấu chúng bằng màu đặc biệt trong biểu đồ Seaborn của bạn.

 

tương quan = df.corr ()

< p class = "gc nv mt ka nw b do oa ob oc od oe ny l nz" id = "53e8"> "" "Tạo mặt nạ cho abs (corr) & gt; 0.7" ""
corr_masked = ma .masked_outside (np.array (tương quan), -0,7, 0,7)

"" "Bộ màu vàng cho các giá trị bị che / xấu "" "
cmap = plt.get_cmap ('coolwarm')
cmap.set_bad ('vàng')

ax = sns.heatmap (dữ liệu = tương quan, cmap = cmap,
mask = corr_masked.mask,
linewidths = 2, cbar = True)

Ma trận tương quan của Tập dữ liệu nhà ở Boston với các giá trị được che dấu được đánh dấu bằng màu vàng.


Xem thêm những thông tin liên quan đến chủ đề che dữ liệu trong python

Dataframe Validation In Python - A Practical Introduction - Yotam Perkal - PyCon Israel 2018

  • Tác giả: PyCon Israel
  • Ngày đăng: 2018-07-10
  • Đánh giá: 4 ⭐ ( 7544 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: As Machine Learning models rely on data in order to make their predictions, data quality evaluation is a crucial aspect of any ML pipeline. We as Engineers/Data-Scientists, should validate our data in the same manner in which we validate our code. Data errors can lead to: Bad and costly decisions, Inaccurate predictions due to invalid data and Time waste. There is an abundance of different libraries that perform various kinds of data integrity checks. I will specifically focus on Dataframe validation.

    In this talk, I will present the problem and give a practical overview (accompanied by Jupyter Notebook code examples) of three libraries that aim to address it: Voluptuous - Which uses Schema definitions in order to validate data [https://github.com/alecthomas/voluptuous] Engarde - A lightweight way to explicitly state your assumptions about the data and check that they're actually true [https://github.com/TomAugspurger/engarde] * TDDA - Test Driven Data Analysis [ https://github.com/tdda/tdda]

    By the end of this talk, you will understand the Importance of data validation and get a sense of how to integrate data validation principles as part of the ML pipeline.

Bài 04. Kiểu dữ liệu trong python

  • Tác giả: pythonnangcao.com
  • Đánh giá: 4 ⭐ ( 5766 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

  • Tác giả: mcivietnam.com
  • Đánh giá: 4 ⭐ ( 8298 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

[Tự học Python] Lập trình hướng đối tượng trong Python

  • Tác giả: cafedev.vn
  • Đánh giá: 3 ⭐ ( 2126 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong Python, chúng ta sử dụng hai dấu gạch dưới liên tiếp (tức là __) trước tên của các thuộc tính, và các thuộc tính đó sẽ không thể được nhìn thấy trực tiếp, khi ở bên ngoài lớp.

Bài 3: Lấy dữ liệu

  • Tác giả: vncoder.vn
  • Đánh giá: 3 ⭐ ( 4838 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: xử lý dữ liệu bằng python, xử lý dữ liệu trong hòi quy logistic

Xử lý các ô dữ liệu trống với Python

  • Tác giả: datasciencevn.com
  • Đánh giá: 4 ⭐ ( 2214 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài viết này, mình sẽ hướng dẫn các bạn quy trình căn bản và các kỹ thuật để xử lý các ô dữ liệu trống trong bảng bằng Python.

Python cơ bản

  • Tác giả: hiepsiit.com
  • Đánh giá: 3 ⭐ ( 8779 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình