Pandas là một thư viện phát triển cho Python, cung cấp các công cụ và kỹ thuật để thực hiện các tác vụ phân tích dữ liệu. Trong pandas, DataFrame là một đối tượng dữ liệu phổ biến cho việc phân tích dữ liệu. Giống như các hệ thống SQL, chúng ta có thể tách và xử lý phức tạp các truy vấn dữ liệu với pandas. Reshaping Data là quá trình biến đổi dữ liệu từ một dạng sang một dạng khác để thuận tiện cho việc phân tích và xử lý. Trong bài viết này, chúng ta sẽ đi sâu vào các khái niệm cơ bản của Reshaping Data và giới thiệu một số kỹ thuật phổ biến để thực hiện việc này.
Reshaping Data trong pandas
Reshaping Data là một kỹ thuật phổ biến trong pandas. Như vậy, chúng ta có thể biến đổi dữ liệu trong DataFrame dựa trên những nhu cầu khác nhau. Từ đó giúp cho việc phân tích trở nên dễ dàng hơn.
Reshaping DataJS sẽ giúp chúng ta cấu trúc lại DataFrame để dễ hiểu hơn. Reshaping DataJS khá quan trọng, vì ta có thể dễ dàng tạo ra dữ liệu từ bất kỳ nguồn nào, ví dụ dữ liệu trên trang web, tệp tin hoặc hệ thống.
Stacking Data
Stacking là một kỹ thuật để làm phẳng các tập dữ liệu khác nhau. Đó là cách để trả lời cho các câu hỏi có tính chất chứa trong đó các phê tê bị đan xen. Ví dụ, tôi có ba bảng dữ liệu với tên là thu nhập, giới tính và phân loại dân tộc. Tôi muốn biến đổi chúng để chỉ có một cột với tên là Giá trị và các giá trị của các nơi lưu trữ được đưa ra ngăn cách với nhau. Táo phạm vi sử dụng pandas và NumPy.
Ở đây, tôi đang sử dụng CSV sau đây như một ví dụ.
gender,year,income
Male,2010,50000
Female,2010,60000
Male,2011,55000
Female,2011,65000
Male,2012,60000
Female,2012,70000
Trong dữ liệu này, ta có tập dữ liệu về thu nhập với các giá trị về giới tính, năm và thu nhập của họ. Ta biêu diễn chúng dưới dạng một dataframe.
import pandas as pd
income = pd.read_csv('data.csv')
income = income.loc[:, ["gender", "year", "income"]]
income.head()
print(income)
Nếu chúng ta sử dụng phương pháp “stack” để “tích lũy” DataFrame trên đầu nhau và chuyển nó thành một chuỗi với một cột đại diện cho các giá trị.
Sắp xếp lại bảng thu nhập theo thứ tự tăng dần theo giới tính bằng đoạn code sau:
income_sorted = income.sort_values(["gender", "year"])
income_sorted.head()
print(income_sorted)
Ảnh minh họa sau đây sẽ giải thích được cách “stack” hoạt động:
Unstacking Data
Unstacking Data là một kỹ thuật chuyển đổi từng cột trong DataFrame thành các hàng. Vì vậy, chúng ta có thể tạo ra các yếu tố cột từ các cột khác nhau. Xét ví dụ bên dưới:
import pandas as pd
import numpy as np
products = ["iphone", "ipad", "apple watch"]
price = pd.DataFrame(np.random.randint(5, 10, size=(3,3)), columns=products)
quantity = pd.DataFrame(np.random.randint(1, 5, size=(3,3)), columns=products)
print("Price:")
print(price)
print("")
print("Quantity:")
print(quantity)
Các bảng này dường như phù hợp với “stack” nhưng chúng ta muốn tích hợp các bảng này với nhau để tạo thành một bảng dữ liệu mới, có các mục hàng và cột được sử dụng từ bảng dữ liệu trên. Để áp dụng Unstacking cho các tập dữ liệu này, chúng ta sẽ sử dụng phương pháp “concat”. Ví dụ cho bản ghi sau:
data = pd.concat([price, quantity], axis=0)
print(data)
Pivoting Data
Pivoting Data là một công cụ để định hình lại bảng dữ liệu với các dữ liệu đã đặt trên trục x và trục y. Ví dụ, nếu bạn có tệp nhiễu từ các phân loại khác nhau, bạn có thể đặt chúng trong các hàng và cột. Tùy thuộc vào mục đích của bạn, bạn có thể tạo nhiều khối chồng lên nhau. Sau đây là ví dụ mẫu bên dưới cho giá trị thành tiền:
Sau đó ta áp dụng pivot_table để xử lý các giá trị của Lettuce và Tomato. Bằng cách thực hiện như vậy, chúng ta có thể giải quyết những câu hỏi như: yêu cầu tính tổng lượng mua và giá trị số tiền từng khách hàng.
Dưới đây là đoạn mã để làm như vậy:
“_Có thể copy & paste code bên dưới để kiểm tra phần mềm pandas của bản thân_”
import pandas as pd
import numpy as np
# Create a sample dataset
data = {'Date': ['2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02'],
'Variable': ['AAPL_x', 'AAPL_y', 'AAPL_x', 'AAPL_y'],
'Value': [300, 77.44539475, 301, 77.04557544]}
sample_df = pd.DataFrame(data)
print("Sample Data:")
print(sample_df)
# Pivot the sample data using pandas
pivoted_df = sample_df.pivot(index='Date', columns='Variable', values='Value')
print("Pivoted Data using pandas:")
print(pivoted_df)
# Pivot the sample data using numpy
dates = np.unique(sample_df['Date'])
variables = np.unique(sample_df['Variable'])
pivoted_array = np.empty((len(dates), len(variables)))
pivoted_array[:] = np.nan
for idx_date, date in enumerate(dates):
for idx_var, var in enumerate(variables):
value = sample_df.loc[(sample_df['Date'] == date) & (sample_df['Variable'] == var), 'Value']
if not value.empty:
pivoted_array[idx_date, idx_var] = value.values[0]
pivoted_np_df = pd.DataFrame(pivoted_array, columns=variables, index=dates)
print("Pivoted Data using numpy:")
print(pivoted_np_df)
Melt Data
Melt Data là một cách khác để “reshape” DataFrame. Đây là một công cụ phân tích quan trọng và tiện lợi mang lại một số lợi ích như:
- Biến đổi các giá trị của các cột thành các hàng
- Biến đổi kiểu khái niệm chéo (name crossings)
Sau đây là một ví dụ trực quan cho tệp melting:
“_Có thể copy & paste code bên dưới để kiểm tra phần mềm pandas của bản thân_”
import pandas as pd
table = pd.DataFrame({'Name': {0: 'Liv', 1: 'Liv', 2: 'Liv', 3: 'Jenny', 4: 'Jenny', 5: 'Jenny', 6: 'Lindsey', 7: 'Lindsey', 8: 'Lindsey'},
'Subject': {0: 'Streeet', 1: 'Workout', 2: 'Eating', 3: 'Stress', 4: 'Workout', 5: 'Eating', 6: 'Stress', 7: 'Workout', 8: 'Eating'},
'Hours': {0: 20, 1: 12, 2: 3, 3: 30, 4: 8, 5: 4, 6: 20, 7: 12, 8: 7}})
print(table)
Bằng cách sử dụng “melt”, ta có thể chuyển đổi DataFrame của chúng ta thành bảng được xếp theo dạng sít chéo nâng cao. Ví dụ: Bảng dữ liệu trên có thể định hình lại và sử dụng phương pháp “melt”.
“_Có thể copy & paste code bên dưới để kiểm tra phần mềm pandas của bản thân_”
melted = pd.melt(table, id_vars=['Name', 'Subject'], value_vars=['Hours'])
Kết luận
Như vậy, pandas là một thư viện hữu ích trong lĩnh vực phân tích dữ liệu. Các kỹ thuật “Reshaping Data” mà chúng ta vừa tìm hiểu như “Stacking Data”, “Unstacking Data”, “Pivoting Data” và “Melting Data” sẽ giúp cho việc xử lý và cấu trúc dữ liệu dễ dàng hơn.
Học bài tiếp theo: Nắm bắt kỹ thuật phân tích dữ liệu chuỗi thời gian với Python Pandas
Bài trước: Reshaping Data with pandas: Học cách thay đổi cấu trúc và phân tích dữ liệu dễ dàng hơn
Quay về trang chủ của khoá học: Python Pandas – Thao tác và phân tích dữ liệu
