2016-10-22 20 views
6

Tôi có một khung dữ liệu gấu trúc lớn với khoảng 80 cột. Mỗi cột trong số 80 cột trong báo cáo dữ liệu thống kê lưu lượng truy cập hàng ngày cho các trang web (các cột là các trang web).Panda pandas: Cách tốt nhất để chuẩn hóa dữ liệu?

Vì tôi không muốn làm việc với số liệu thống kê lưu lượng truy cập thô, tôi muốn bình thường hóa tất cả các cột của mình (ngoại trừ cột đầu tiên, là ngày tháng). Hoặc từ 0 đến 1 hoặc (thậm chí tốt hơn) từ 0 đến 100.

Date  A  B  ... 
10/10/2010 100.0 402.0 ... 
11/10/2010 250.0 800.0 ... 
12/10/2010 800.0 2000.0 ... 
13/10/2010 400.0 1800.0 ... 

Điều đó đang được nói, tôi tự hỏi nên chuẩn hóa để áp dụng. Min-Max scaling so với bình thường hóa z-score (tiêu chuẩn hóa)? Một số cột của tôi có các ngoại lệ mạnh mẽ. Thật tuyệt vời khi có một ví dụ. Tôi xin lỗi vì không thể cung cấp đầy đủ dữ liệu.

Trả lời

14

Trước tiên, hãy biến cột Ngày của bạn thành chỉ mục.

dates = df.pop('Date') 
df.index = dates 

Sau đó một trong hai sử dụng z-score bình thường:

df1 = (df - df.mean())/df.std() 

hoặc mở rộng quy mô min-max:

df2 = (df-df.min())/(df.max()-df.min()) 

tôi có lẽ sẽ tư vấn cho z-score bình thường, bởi vì min-max rộng là rất nhạy cảm với các ngoại lệ.

+0

Trong trường hợp các ngoại lệ quá ít đối với nhận thức của tôi, bạn có nên giới thiệu min-max sau đó không? – Rnaldinho

+0

Ngoài ra, tôi đã thử điều này. Thật không may, các giá trị không nằm trong khoảng từ 0 đến 1 hoặc 0 và 1 nhưng khác nhau từ -3 đến 1? Cũng nên có số thập phân? – Rnaldinho

+0

Nếu bạn có bất kỳ ngoại lệ mạnh nào và bạn không muốn xóa chúng khỏi tập dữ liệu trước khi phân tích, thì tôi khuyên bạn nên thực hiện bình thường hóa z-score. – User191919

Các vấn đề liên quan