Hướng dẫn dùng np.shuffle python



Hàm shuffle() trong Python sắp xếp các item trong list một cách ngẫu nhiên.


Cú pháp

Cú pháp của shuffle() trong Python:

import random
random.shuffle(lst)

Ghi chú: Hàm này không có thể truy cập trực tiếp, vì thế chúng ta cần import random module và sau đó chúng ta cần gọi hàm này bởi sử dụng đối tượng random.

Chi tiết về tham số:

  • lst: Đây có thể là một list hoặc tuple.


Ví dụ sau minh họa cách sử dụng của hàm shuffle() trong Python.

import random
list = [20, 5, 10, 15, 50];
random.shuffle(list)
print ("List sau khi bị xáo trộn là: ",  list)
random.shuffle(list)
print ("List sau khi bị xáo trộn là: ",  list)

Chạy chương trình Python trên sẽ cho kết quả:

List sau khi bị xáo trộn là:  [10, 15, 50, 20, 5]
List sau khi bị xáo trộn là:  [20, 5, 10, 50, 15]



Hoán vị ngẫu nhiên trong Numpy

Nội Dung

  • 1. Hoán vị ngẫu nhiên là gì?
  • 2. Xáo trộn phần tử trong mảng
  • 3. Tạo hoán vị phần tử trong mảng

Trong toán học, hoán vị là mỗi cách sắp xếp n phần tử của tập hợp A theo một thứ tự nào đó được gọi là một hoán vị của n phần tử trong tập A.

Trong mảng Numpy, một hoán vị đề cập đến một sự sắp xếp của các phần tử thuộc trong mảng.Ví dụ [3, 2, 1] là hoán vị của [1, 2, 3] và ngược lại.

Mô-đun Numpy cung cấp hai hàm thường được sử dụng cho hoán vị phần tử trong mảng Numpy đó là:

  • Hàm shuffle() – xáo trộn các phần tử trong mảng
  • Hàm permutation() – hoán vị các phần tử trong mảng

2. Xáo trộn phần tử trong mảng

Việc xáo trộn các phần tử trong mảng có nghĩa là thực hiện đổi lại vị trí của các phần tử ban đầu thành các vị trí khác ngẫu nhiên trong mảng. Để làm được việc này, chúng ta cần sử dụng hàm random.shuffle() – hàm này nhận vào một mảng ban đầu và thực hiện xáo trộn các vị trí phần tử trong mảng.

Ví dụ dưới đây, sử dụng hàm random.shuffle() để xáo trộn các vị trí phần tử có trong mảng 1 chiều như sau:

from numpy import random
import numpy as np

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

random.shuffle(arr)

print(arr)

Kết quả:

[4 2 5 3 1]

Lưu ý: Khi thực thi lại chương trình, một mảng với các phần tử tại ví trị mới sẽ được tạo ra.

Tương tự như mảng 1 chiều, ta cũng có thể sử dụng hàm random.shuffle() để xáo trộn vị trí phần tử có trong mảng 2 chiều như sau:

from numpy import random
import numpy as np

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

random.shuffle(arr)

print(arr)

Kết quả:

[[5 2 9]
 [4 5 0]
 [1 7 4]
 [1 2 3]
 [8 2 6]]

Lưu ý: Vì trong mảng 2 chiều, các phần tử sẽ là mảng 1 chiều. Vậy nên, khi xáo trộn các vị trí phần tử có trong mảng 2 chiều thì việc này thực chất là xáo trộn các mảng 1 chiều thuộc trong mảng 2 chiều ban đầu.

3. Tạo hoán vị phần tử trong mảng

Chúng ta có thể tạo ra một mảng hoán vị từ một mảng ban đầu thông qua hàm random.permutation() – hàm này truyền vào một mảng cần hoán vị và thực hiện hoán vị ngẫu nhiên một dãy hoặc trả về một dãy đã hoán vị. 

Nếu mảng nhập vào hàm random.permutation() là một mảng nhiều chiều, nó chỉ được hoán vị dọc trục mà ta chỉ định cho nó (trục dọc hoặc trục ngang)

Ví dụ dưới đây, tạo hoán vị ngẫu nhiên các phần tử của mảng 1 chiều bằng cách sử dụng hàm random.permutation() như sau:

from numpy import random
import numpy as np

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

print(random.permutation(arr))

Kết quả:

[1 5 3 2 4]

Ví dụ tiếp theo, tạo hoán vị ngẫu nhiên các phần tử trong mảng 2 chiều dựa theo trục dọc bằng cách sử dụng hàm random.permutation() như sau:

from numpy import random
import numpy as np

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

print(random.permutation(arr))

Kết quả:

[[4 5 0]
 [8 2 6]
 [1 2 3]
 [5 2 9]
 [1 7 4]]

Bằng cách sử dụng pandas.DataFrame.sample() bạn có thể xáo trộn các hàng DataFrame một cách ngẫu nhiên, nếu bạn đang sử dụng NumPy bạn có thể dùng permutation() phương pháp thay đổi thứ tự của các hàng còn được gọi là xáo trộn. Python cũng có các gói khác như sklearn có một phương pháp shuffle() để xáo trộn thứ tự các hàng trong DataFrame

Nội dung chính

  • 1. Tạo DataFrame với Từ điển danh sách
  • 3. Pandas Shuffle Rows bằng cách thiết lập chỉ mục mới
  • 4. Sử dụng numpy.random.shuffle để thay đổi thứ tự của hàng
  • 5. Sử dụng hoán vị () Từ numpy để lấy mẫu ngẫu nhiên
  • 6. Sử dụng sklearn shuffle () để sắp xếp lại các hàng DataFrame
  • 7. Sử dụng DataFrame.apply () & numpy.random.permutation () để Shuffle
  • 8. Pandas DataFrame Shuffle / Hoán vị các hàng bằng cách sử dụng hàm Lambda
  • 9. Trộn dữ liệu ngẫu nhiên theo hàng và cột
  • 10. Hoàn thành ví dụ về xáo trộn các hàng DataFrame
  • Sự kết luận
  • Bạn cũng có thể thích
  • Người giới thiệu

  • 1. Tạo DataFrame với Từ điển danh sách
  • 2. Pandas Shuffle DataFrame Rows
  • 3. Pandas Shuffle Rows bằng cách thiết lập chỉ mục mới
  • 4. Sử dụng numpy.random.shuffle để thay đổi thứ tự của hàng
  • 5. Sử dụng hoán vị () Từ numpy để lấy mẫu ngẫu nhiên
  • 6. Sử dụng sklearn shuffle () để sắp xếp lại các hàng DataFrame
  • 7. Sử dụng DataFrame.apply () & numpy.random.permutation () để Shuffle
  • 8. Pandas DataFrame Shuffle / Hoán vị các hàng bằng cách sử dụng hàm Lambda
  • 9. Trộn dữ liệu ngẫu nhiên theo hàng và cột
  • 10. Hoàn thành ví dụ về xáo trộn các hàng DataFrame
    • Sự kết luận
    • Bạn cũng có thể thích
    • Người giới thiệu

1. Tạo DataFrame với Từ điển danh sách

Hãy tạo một Pandas DataFrame với từ điển danh sách, tên các cột của gấu trúc DataFrame Courses, Fee, Duration, Discount.


import pandas as pd
technologies = {
    'Courses':["Spark","PySpark","Hadoop","Python","pandas","Oracle","Java"],
    'Fee' :[20000,25000,26000,22000,24000,21000,22000],
    'Duration':['30day','40days','35days','40days','60days','50days','55days'],
    'Discount':[1000,2300,1500,1200,2500,2100,2000]
               }
df = pd.DataFrame(technologies)
print(df)

Sản lượng thấp hơn sản lượng.


   Courses    Fee Duration  Discount
0    Spark  20000    30day      1000
1  PySpark  25000   40days      2300
2   Hadoop  26000   35days      1500
3   Python  22000   40days      1200
4   pandas  24000   60days      2500
5   Oracle  21000   50days      2100
6     Java  22000   55days      2000

Sử dụng pandas.DataFrame.sample(frac=1) phương pháp xáo trộn thứ tự của các hàng. Các frac đối số chỉ định phần hàng sẽ trả về trong DataFrame mẫu ngẫu nhiên. frac=None chỉ trả về 1 bản ghi ngẫu nhiên. frac=.5 trả về ngẫu nhiên 50% số hàng.

Lưu ý rằng phương thức sample () theo mặc định trả về một DataFrame mới sau khi xáo trộn.


# shuffle the DataFrame rows & return all rows
df1 = df.sample(frac = 1)
print(df1)

Sản lượng thấp hơn sản lượng.


   Courses    Fee Duration  Discount
0    Spark  20000    30day      1000
6     Java  22000   55days      2000
1  PySpark  25000   40days      2300
5   Oracle  21000   50days      2100
2   Hadoop  26000   35days      1500
3   Python  22000   40days      1200
4   pandas  24000   60days      2500

Nếu bạn muốn lấy n hàng ngẫu nhiên, hãy sử dụng df.sample(n=2).

3. Pandas Shuffle Rows bằng cách thiết lập chỉ mục mới

Như bạn thấy ở trên, Chỉ mục cũng xáo trộn cùng với các hàng. Nếu bạn muốn một Chỉ mục mới bắt đầu từ 0 bằng cách giữ cho Chỉ mục xáo trộn nguyên trạng reset_index().


# Create a new Index starting from zero
df1 = df.sample(frac = 1).reset_index()
print(df1)

Sản lượng thấp hơn sản lượng.


   index  Courses    Fee Duration  Discount
0      6     Java  22000   55days      2000
1      2   Hadoop  26000   35days      1500
2      4   pandas  24000   60days      2500
3      3   Python  22000   40days      1200
4      5   Oracle  21000   50days      2100
5      0    Spark  20000    30day      1000
6      1  PySpark  25000   40days      2300

Trong trường hợp nếu bạn không muốn chỉ mục xáo trộn thì hãy sử dụng .reset_index(drop=True)


# Drop shuffle Index
df1 = df.sample(frac = 1).reset_index(drop=True)
print(df1)

4. Sử dụng numpy.random.shuffle để thay đổi thứ tự của hàng

Bạn có thể dùng numpy.random.shuffle() để thay đổi thứ tự của các hàng DataFrame. Đảm bảo bạn nhập NumPy trước khi sử dụng phương pháp này.


# using NumPy
import numpy as np
np.random.shuffle(DataFrame.values)

5. Sử dụng hoán vị () Từ numpy để lấy mẫu ngẫu nhiên

Chúng tôi cũng có thể sử dụng NumPy.random.permutation() phương thức để xáo trộn các hàng Pandas DataFrame. Các chỉ số xáo trộn được sử dụng để chọn các hàng bằng cách sử dụng .iloc[] phương pháp. Bạn có thể xáo trộn các hàng của DataFrame bằng cách lập chỉ mục với chỉ mục xáo trộn. Ví dụ, df.iloc[np.random.permutation(df.index)].reset_index(drop=True).


# Using numpy permutation() method to shuffle DataFrame rows
df1 = df.iloc[np.random.permutation(df.index)].reset_index(drop=True)
print(df1)

Sản lượng thấp hơn sản lượng.


   Courses    Fee Duration  Discount
0   pandas  24000   60days      2500
1    Spark  20000    30day      1000
2     Java  22000   55days      2000
3   Oracle  21000   50days      2100
4   Python  22000   40days      1200
5  PySpark  25000   40days      2300
6   Hadoop  26000   35days      1500

6. Sử dụng sklearn shuffle () để sắp xếp lại các hàng DataFrame

Bạn cũng có thể dùng sklearn.utils.shuffle() phương pháp xáo trộn các hàng DataFrame của gấu trúc. Để sử dụng sklearn, bạn cần cài đặt nó bằng PIP (Python Package Installer). Ngoài ra, để sử dụng nó trong một chương trình, hãy đảm bảo bạn nhập nó.


# Using sklearn to shuffle rows
from sklearn.utils import shuffle
df = shuffle(df)

7. Sử dụng DataFrame.apply () & numpy.random.permutation () để Shuffle

Bạn cũng có thể dùng df.apply(np.random.permutation,axis=1). Sản lượng dưới đầu ra làm xáo trộn các hàng, dtype:object.


# Using apply() method to shuffle the DataFrame rows
import numpy as np
df1 = df.apply(np.random.permutation, axis=1)    
print(df1)

Sản lượng thấp hơn sản lượng.


0       [30day, Spark, 1000, 20000]
1    [40days, PySpark, 25000, 2300]
2     [1500, Hadoop, 26000, 35days]
3     [40days, 1200, Python, 22000]
4     [60days, pandas, 2500, 24000]
5     [2100, 21000, 50days, Oracle]
6       [2000, Java, 22000, 55days]
dtype: object

8. Pandas DataFrame Shuffle / Hoán vị các hàng bằng cách sử dụng hàm Lambda

Sử dụng df.apply(lambda x: x.sample(frac=1).values để lấy mẫu độc lập trên mỗi cột. Sử dụng áp dụng để lặp lại từng cột và .value để có được một mảng NumPy. frac=1 tất cả các hàng của DataFrame.


# Using lambda method to Shuffle/permutating DataFrame rows
df2 = df.apply(lambda x: x.sample(frac=1).values)
print(df2)

Sản lượng thấp hơn sản lượng.


   Courses    Fee Duration  Discount
0   Oracle  20000   40days      1000
1   Hadoop  21000   60days      2300
2   pandas  26000   40days      1500
3  PySpark  24000    30day      1200
4    Spark  22000   35days      2000
5     Java  22000   50days      2500
6   Python  25000   55days      2100

9. Trộn dữ liệu ngẫu nhiên theo hàng và cột

Bạn có thể dùng df.sample(frac=1, axis=1).sample(frac=1).reset_index(drop=True) để xáo trộn các hàng và cột một cách ngẫu nhiên. DataFrame mong muốn của bạn trông hoàn toàn ngẫu nhiên. Tôi thực sự không biết trường hợp sử dụng của điều này nhưng tôi muốn đề cập đến nó vì điều này có thể thực hiện được với phương thức sample ().


# Using sample() method to shuffle DataFrame rows and columns
df2 = df.sample(frac=1, axis=1).sample(frac=1).reset_index(drop=True)
print(df2)

Sản lượng thấp hơn sản lượng.


  Duration    Fee  Discount  Courses
0   60days  24000      2500   pandas
1   55days  22000      2000     Java
2   40days  25000      2300  PySpark
3   40days  22000      1200   Python
4   35days  26000      1500   Hadoop
5   50days  21000      2100   Oracle
6    30day  20000      1000    Spark

10. Hoàn thành ví dụ về xáo trộn các hàng DataFrame


import pandas as pd
technologies = {
    'Courses':["Spark","PySpark","Hadoop","Python","pandas","Oracle","Java"],
    'Fee' :[20000,25000,26000,22000,24000,21000,22000],
    'Duration':['30day','40days','35days', '40days','60days','50days','55days'],
    'Discount':[1000,2300,1500,1200,2500,2100,2000]
               }
df = pd.DataFrame(technologies)
print(df)

# shuffle the DataFrame rows & return all rows
df1 = df.sample(frac = 1)
print(df1)

# Create a new Index starting from zero
df1 = df.sample(frac = 1).reset_index()
print(df1)

# using NumPy
import numpy as np
np.random.shuffle(DataFrame.values)

# Using numpy permutation() method to shuffle DataFrame rows
df1 = df.iloc[np.random.permutation(df.index)].reset_index(drop=True)
print(df1)

# Using sklearn to shuffle rows
from sklearn.utils import shuffle
df = shuffle(df)

# Using apply() method to shuffle the DataFrame rows
import numpy as np
df1 = df.apply(np.random.permutation, axis=1)    
print(df1)

# Using lambda method to Shuffle/permutating DataFrame rows
df2 = df.apply(lambda x: x.sample(frac=1).values)
print(df2)

# Using sample() method to shuffle DataFrame rows and columns
df2 = df.sample(frac=1, axis=1).sample(frac=1).reset_index(drop=True)
print(df2)

Sự kết luận

Trong bài viết này, bạn đã học cách xáo trộn các hàng Pandas DataFrame bằng cách sử dụng các phương pháp khác nhau DataFrame.sample(), DataFrame.apply(), DataFrame.iloc[], hàm lambda. Ngoài ra, bạn đã học cách xáo trộn các hàng Pandas DataFrame bằng cách sử dụng NumPy.random.permutation()sklearn.utils.shuffle() các phương pháp.

Học vui vẻ !!

Bạn cũng có thể thích

Người giới thiệu