Logo Zephyrnet

3 tính năng Python nâng cao bạn nên biết

Ngày:

3 tính năng Python nâng cao bạn nên biết

Với tư cách là Nhà khoa học dữ liệu, bạn đã dành phần lớn thời gian để chuẩn bị sẵn sàng dữ liệu của mình. Hãy theo dõi các tình huống thực tế này để tìm hiểu cách tận dụng các kỹ thuật nâng cao về hiểu danh sách, biểu thức Lambda và hàm Map trong Python để hoàn thành công việc nhanh hơn.


Photo by david clode on Unsplash.

Trong bài viết này, tôi sẽ thảo luận về 3 tính năng quan trọng của Python có ích cho nhà khoa học dữ liệu và tiết kiệm rất nhiều thời gian. Hãy bắt đầu mà không lãng phí thời gian.

Hiểu danh sách & chính tả

Hiểu danh sách & chính tả là một công cụ rất mạnh mẽ trong Python, rất hữu ích để tạo danh sách. Nó tiết kiệm thời gian, cú pháp dễ dàng và làm cho logic dễ dàng hơn so với việc tạo danh sách bằng vòng lặp for Python thông thường.

Về cơ bản, chúng được sử dụng thay vì một vòng lặp for rõ ràng với logic đơn giản bên trong nó để nối thêm hoặc thực hiện điều gì đó với một danh sách hoặc từ điển. Đây là những dòng đơn và làm cho mã dễ đọc hơn.

Liệt kê toàn bộ

Will sẽ thấy một ví dụ python bình thường trước và sau đó sẽ thấy nó tương đương bằng cách sử dụng danh sách hiểu.

Kịch bản

Giả sử chúng ta có một khung dữ liệu đơn giản trong Pandas với kết quả học sinh thuộc 3 môn học.

Trong [1]: results = [[10,8,7],[5,4,3],[8,6,9]] Trong [2]: results = pd.DataFrame(results, columns=['Maths ','Tiếng Anh','Khoa học']) 

Và nếu chúng ta in nó,

Trong [5]: kết quả Ra[5]: Toán Tiếng Anh Khoa học 0 10 8 7 1 5 4 3 2 8 6 9 

Bây giờ, giả sử chúng ta muốn tạo một danh sách có điểm tối đa của từng môn học, tức là danh sách đó phải bằng [10,8,9] vì đây là điểm tối đa của từng môn học.

Mã Python

Trong [7]: maxlist = [] Trong [8]: for i in results: ...: maxlist.append(max(results[i])) 

Và nếu chúng ta in nó,

Trong [9]: danh sách tối đa Ra[9]: [10, 8, 9] 

Sử dụng tính năng hiểu danh sách

Cú pháp cơ bản để hiểu danh sách là

[varname cho varname trong iterableName] 

Ở đây chúng ta có thể làm bất cứ điều gì với tên sơn dầu để sửa đổi nó.

Trong trường hợp của chúng tôi, việc hiểu danh sách của chúng tôi sẽ là

Trong [27]:maxlist = [max(results[i]) for i in results] 

Và đầu ra của chúng tôi sẽ là

Ra[27]: [10, 8, 9] 

Bạn có thấy nó giống với mã Python của chúng ta không? Chúng tôi đã thêm vào tối đa(kết quả[i]) in danh sách tối đa bên trong vòng lặp trong mã Python thông thường, ở đây chúng tôi không thêm nó vào, nhưng bất cứ điều gì bạn muốn thêm vào phải là đối số đầu tiên trong phần hiểu danh sách. Vì vậy bây giờ tôi có thể viết lại cú pháp cơ bản như

newlist = [whatYouwantToAppend cho mọi thứ trong AnyIterable] 

Do đó, trong các ví dụ của chúng tôi, chúng tôi muốn nối thêm số lượng tối đa của mỗi hàng trong khung dữ liệu, tức là tối đa(kết quả[i]) vì vậy chúng tôi đã sử dụng

[max(results[i]) cho i trong kết quả] 

Hiểu từ điển

Tương tự, chúng tôi sử dụng cùng một ý tưởng để hiểu từ điển. Cú pháp cơ bản thường được sử dụng là

{khóa, giá trị cho khóa, giá trị trong AnyIterable} 

Ví dụ: giả sử tôi có một bảng giả cho bảng chữ cái tiếng Anh,

df = {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F', 6: 'G', 7: 'H' , 8: 'Tôi', 9: 'J', 10: 'K', 11: 'L', 12: 'M', 13: 'N', 14: 'O', 15: 'P', 16 : 'Q', 17: 'R', 18: 'S', 19: 'T', 20: 'U', 21: 'V', 22: 'W', 23: 'X', 24: ' Y', 25: 'Z'} 

Bây giờ, nếu chúng ta muốn sử dụng các số (0–25) làm giá trị của từ điển vì mô hình học máy chỉ có thể xử lý các số và chúng ta muốn cung cấp các giá trị từ điển, thì cần phải hoán đổi các khóa và giá trị của từ điển. Cách dễ nhất để trao đổi khóa và giá trị trong từ điển là sử dụng hiểu chính tả.

{number: bảng chữ cái cho bảng chữ cái , số trong df.items()} 

Nếu bạn tập trung vào nó trong một giây, bạn sẽ bắt đầu hiểu được cách nó đảo ngược một từ điển, rằng chúng ta đang lặp lại bảng chữ cái và con số đó là thứ tự thông thường của từ điển nhưng những gì chúng tôi muốn chèn lại theo thứ tự ngược lại nên chúng tôi đang sử dụng số: bảng chữ cái thay vì bảng chữ cái: số.

Biểu thức Lambda

Biểu thức Lambda là một công cụ rất mạnh mẽ dành cho các nhà khoa học dữ liệu. Chúng rất hữu ích đặc biệt khi được sử dụng với DataFrame.apply(), bản đồ(), bộ lọc () or giảm(). Chúng cung cấp một cách dễ dàng để tránh các hàm được xác định thủ công và viết chúng thành một dòng làm cho mã rõ ràng hơn.

Hãy xem cú pháp cơ bản của Biểu thức Lambda, trong đó chúng ta trả về số tiếp theo của bất kỳ số nào được truyền trong bất kỳ hàm nào.

z = hàm lambdaArgument1 : functionArgument1 + 1 

Ở đây, đối số chức năng của chúng tôi là hàmArgument1, và chúng tôi đang trở lại hàmArgument1 +1 là số tiếp theo.

Vì vậy để sử dụng nó,

z(5) >>>6 

Hãy xem, nó thật đơn giản. Hãy xem một ví dụ thực tế trong đó chúng tôi có một khung dữ liệu gồm các tên (lấy từ tập dữ liệu titanic) và chúng tôi muốn tạo một tính năng mà chúng tôi muốn trích xuất tiêu đề (Ông, Cô, Thưa ông, v.v.) từ tên.

Vì vậy, mã cho khung dữ liệu của chúng tôi là

df = pd.DataFrame([ 'Braud, Mr. Owen Harris', 'Cumings, Mrs. John Bradley', 'Heikkeinen, Miss. Laina', 'Futrelle, Mrs. Jacques Heath', 'Allen, Mr. William Henry' , 'Moran, ông James']) 

và khung dữ liệu là

Bây giờ, nếu chúng tôi nhận thấy rằng chúng tôi tìm thấy một mẫu cụ thể ở đây, đó là chúng tôi có dấu phẩy sau tên và 'dấu chấm đầy đủ' sau tiêu đề mà chúng tôi muốn trích xuất. Vì vậy chúng ta có thể sử dụng cắt danh sách để trích xuất từ ​​dấu phẩy cho đến dấu chấm hết.

Chúng tôi muốn cắt từ 2 chỉ mục bên cạnh dấu phẩy vì chúng tôi không muốn bao gồm dấu phẩy và dấu cách sau dấu phẩy nên chỉ mục bắt đầu của chúng tôi sẽ là str.find(',')+2, và chúng ta muốn cắt đến hết dấu chấm (không bao gồm), vì vậy chúng ta sẽ cắt cho đến khi str.find('.'). May mắn thay, chỉ mục cuối cùng không được đưa vào, vì vậy chúng ta không cần phải thực hiện -1 một cách rõ ràng từ chỉ mục. Hãy sử dụng biểu thức lambda để giải quyết vấn đề này.

df['Title'] = df[0].apply(lambda a: a[a.find(',')+2: a.find('.')]) 

Ở đây chúng tôi đang sử dụng .áp dụng hàm từ pandas trên df[0], là cột có tất cả các tên. Bên trong nó, chúng ta đang truyền một biểu thức lambda nhận từng tên và trả về phiên bản được cắt lát của tên đó. Phiên bản cắt lát này chính là tiêu đề của cái tên đó. Đầu ra của khung dữ liệu của chúng tôi bây giờ là

Và ở đây, chúng ta có thể thấy cách chúng tôi trích xuất các tiêu đề từ tên bằng thủ thuật khá rõ ràng này.

Biểu thức Lambda rất hữu ích khi áp dụng với bản đồgiảm or lọc bằng Python.

Chức năng bản đồ

Trong Python, hàm Map là những hàm được sử dụng rất phổ biến, giúp công việc của chúng ta trở nên dễ dàng hơn rất nhiều. Ý tưởng của bản đồ đó là khi được truyền một hàm và một hàm có thể lặp lại trong bản đồ, nó thực hiện chức năng đó trên mọi thực thể của lần lặp đó.

Nó có nghĩa là gì?

Giả sử tôi có một iterable là một danh sách có dữ liệu sau [0, 5, 10, 15, 20, 25, 30]và một hàm tùy chỉnh isEven(anyInteger) điều đó cho biết nếu bất kỳ số nguyên nào truyền vào nó có chẵn hay không. Nếu chúng ta chuyển hàm này và iterable vào bản đồ, sau đó nó sẽ tự động áp dụng hàm này cho tất cả các thực thể trong danh sách và trả về bản đồ đối tượng mà chúng ta có thể chuyển đổi thành một danh sách hoặc bộ dữ liệu hoặc từ điển.

Ví dụ

Giả sử chức năng của chúng tôi là

def isEven(anyInteger): trả về AnyInteger % 2 == 0 

và lần lặp của chúng tôi là

myList = [0, 5, 10, 15, 20, 25, 30] 

Nếu muốn sử dụng cách tiếp cận truyền thống thì chúng ta sẽ phải lặp danh sách của mình và áp dụng hàm cho từng mục riêng lẻ.

# Cách tiếp cận truyền thống isEvenList = [] for i in myList: isEvenList.append(isEven(i)) 

Điều này sẽ trả lại cho chúng tôi một danh sách mới isEvenList với True cho số chẵn và Sai cho số lẻ.

Để sử dụng nó với bản đồ nó sẽ làm cho nhiệm vụ của chúng tôi dễ dàng hơn nhiều. Mã của chúng tôi sẽ là

isEvenList = list(map(isEven, myList)) 

và mã của chúng tôi đã hoàn tất!

Ở đây, những gì chúng tôi đang làm là bên trong bản đồ hàm, chúng ta đang truyền vào hàm của mình là chẵn và khả năng lặp lại của chúng tôi danh sách của tôi, đang trả về một bản đồ đối tượng mà chúng ta đang đúc vào  .

Vì vậy cú pháp cơ bản cho hàm bản đồ là

danh sách/dict/tuple(map(myFunction, myIterable)) 

May mắn thay, Pandas đã đưa ra lời đề nghị bản đồứng dụngvà áp dụng bản đồ như các hàm dựng sẵn. Chúng được sử dụng rất phổ biến và rất hữu ích. Ý tưởng cơ bản đằng sau cả 3 hàm này cũng giống như hàm bản đồ tích hợp sẵn của Python. Bạn có thể tìm hiểu thêm về các chức năng này trong tài liệu chính thức của Pandas tại đây.

Liên quan:

Nguồn: https://www.kdnuggets.com/2020/07/3-advanced-python-features.html

tại chỗ_img

Tin tức mới nhất

tại chỗ_img