2013-05-09 46 views
7

Tôi đang vẽ sơ đồ dữ liệu thời gian sử dụng Matplotlib và một số dữ liệu bị thiếu trong chuỗi. Matplotlib ẩn hoàn toàn tham gia điểm dữ liệu liền kề cuối cùng đến điểm tiếp theo. Nhưng trong trường hợp dữ liệu bị thiếu, cốt truyện trông xấu xí. Sau đây là cốt truyện thu được. enter image description hereLoại bỏ nội suy Matplotlib cho dữ liệu bị thiếu

Có thể thấy rằng gần điểm đánh dấu ngày 30 tháng 4, dữ liệu bị thiếu và Matplotlib gia nhập các điểm. Ngoài ra hình ảnh sau đây là ô phân tán dữ liệu. Âm mưu phân tán bao gồm lỗi này, nhưng sau đó các điểm dữ liệu liền kề sẽ không được liên kết trong trường hợp này. Hơn nữa, âm mưu phân tán là rất chậm cho số lượng lớn các điểm dữ liệu liên quan. enter image description here

Giải pháp được đề xuất cho các vấn đề như vậy là gì.

Trả lời

8

Nếu bạn có thể xác định nơi những điểm break nên bạn có thể:

  1. phá vỡ các dữ liệu và vẽ từng 'phần' bằng tay
  2. chèn np.nan trong các dữ liệu vào những khoảng trống

Xem ví dụ Plot periodic trajectories.

Bạn có thể nhận được tác dụng tương tự của scatter (nếu bạn không muốn để mở rộng kích thước hoặc màu sắc của mỗi điểm độc lập) với

ax.plot(x, y, linestyle='none', marker='o') 
+0

Đã kết thúc bằng cách sử dụng Pandas sẽ chèn NaN –

+0

@NipunBatra Nếu bạn đã làm điều gì đó khác, bạn nên viết câu trả lời đó và chấp nhận câu trả lời của riêng bạn. – tacaswell

4

Là câu trả lời trước nói, bạn nên chèn Nans nơi có không có dữ liệu. Câu trả lời này dành riêng cho Pandas và giải thích cách thức này có thể đạt được dễ dàng. Hoặc:

  • Series.resample() hoặc
  • Series.reindex()

Phương pháp đơn giản nhất để sử dụng là resample(). Đây là cách ngắn gọn nhất cho dữ liệu cách nhau thường xuyên. Vì vậy, trong ví dụ của bạn ở trên, nếu bạn có ví dụ Dữ liệu 5 phút, chỉ cần thực hiện data.resample("5 min"). Điều này sẽ trả về tập dữ liệu của bạn với 'NaT' (thời gian tương đương NaN) trong các giá trị bị thiếu.

Trường hợp duy nhất mà điều này không hoạt động tốt là khi các mẫu của bạn không được đặt cách nhau thường xuyên.

Phương án thay thế là reindex(), cũng hoạt động đối với dữ liệu đã đặt hàng (nhưng không theo thời gian). Vì vậy, ví dụ, nếu bạn có một tập dữ liệu được lập chỉ mục với các số nguyên từ 0 .. 100, nhưng với một vài mẫu bị thiếu, bạn có thể làm data.reindex([0:100]). Bạn cũng có thể sao chép hành vi của resample bằng reindex, bằng cách chuyển chức năng pandas.date_range() làm đối số.

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