Phân tích dữ liệu thực tế với dự án thực python và pandas

Bạn có phải là nhà khoa học dữ liệu đầy tham vọng muốn tìm hiểu về phân tích dữ liệu trong một dự án khoa học dữ liệu thực tế không?

Trong bài viết này, tôi sẽ giải thích về lợi ích chính của việc sử dụng gấu trúc. Cũng như tôi sẽ sử dụng…

Phần tốn thời gian nhất của dự án khoa học dữ liệu là làm sạch và chuẩn bị dữ liệu. Tuy nhiên, có nhiều công cụ mạnh mẽ để đẩy nhanh quá trình này. Một trong số đó là Pandas, một thư viện phân tích dữ liệu được sử dụng rộng rãi cho Python

nguồn hình ảnh

Trong bài đăng này, tôi sẽ đề cập đến một quy trình làm sạch dữ liệu điển hình với Pandas. Tôi sẽ làm việc trên một ví dụ bởi vì, như mọi khi, luyện tập tạo nên sự hoàn hảo

Các chủ đề chính là

  • Tạo một khung dữ liệu
  • Tổng quan về dữ liệu
  • Giá trị bị mất
  • Chọn dữ liệu

Chúng tôi luôn bắt đầu với việc nhập các thư viện cần thiết

import pandas as pd
import numpy as np
Tạo khung dữ liệu

Trong các trường hợp thực tế, chúng tôi chủ yếu đọc dữ liệu từ một tệp thay vì tạo DataFrame. Pandas cung cấp các chức năng để tạo DataFrame bằng cách đọc dữ liệu từ nhiều loại tệp khác nhau. Đối với bài đăng này, tôi sẽ sử dụng từ điển để tạo DataFrame mẫu

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df

Tổng quan về dữ liệu

Hàm mô tả gấu trúc cung cấp số liệu thống kê tóm tắt cho các cột số (int hoặc float). Nó đếm số lượng giá trị và hiển thị giá trị trung bình, tiêu chuẩn, tối thiểu và tối đa cũng như các lượng tử 25%, 50% và 75%

df.describe()

Mặc dù tất cả các cột có cùng số lượng hàng, số lượng khác nhau đối với cột d vì hàm mô tả không tính các giá trị NaN (thiếu)

value_counts() hiển thị các giá trị trong một cột với số lần xuất hiện

df.c.value_counts()
True 5
False 3
Name: c, dtype: int64

value_counts() không tính các giá trị NaN (thiếu)

Chúng ta cũng nên kiểm tra các loại dữ liệu và xem xét chúng trong phân tích của mình. Một số chức năng chỉ có thể được thực hiện trên các loại dữ liệu nhất định. Chúng ta có thể dễ dàng kiểm tra các kiểu dữ liệu bằng cách sử dụng dtypes

df.dtypes
a float64
b object
c object
d float64
e int64
dtype: object

Cả hai cột 'd' và 'e' đều có số nguyên nhưng kiểu dữ liệu của cột 'd' là float. Lý do là các giá trị NaN trong cột d. Các giá trị NaN được coi là float nên các giá trị số nguyên trong cột đó được chuyển thành kiểu dữ liệu float

gấu trúc 1. 0. 1 cho phép sử dụng NaN làm kiểu dữ liệu số nguyên. Chúng ta chỉ cần chỉ rõ dtype là pd. Kiểu int64D()

pd.Series([1, 2, 3, np.nan], dtype=pd.Int64Dtype())
0 1
1 2
2 3
3 NaN
dtype: Int64

Nếu pd. Int64Dtype() không được sử dụng, các giá trị số nguyên được upcast lên float

pd.Series([1, 2, 3, np.nan])
0 1.0
1 2.0
2 3.0
3 NaN
dtype: float64
Thiếu giá trị

Xử lý các giá trị bị thiếu là một phần thiết yếu của quy trình chuẩn bị và làm sạch dữ liệu vì hầu hết tất cả dữ liệu trong đời thực đều có một số giá trị bị thiếu

Trước khi xử lý các giá trị bị thiếu, chúng ta cần kiểm tra số lượng giá trị bị thiếu trong DataFrame. Bước này rất quan trọng vì tỷ lệ các giá trị bị thiếu trong một hàng hoặc cột đóng vai trò quan trọng trong cách xử lý chúng. isna() kiểm tra xem một mục có phải là NaN (thiếu). Khi kết hợp với phương thức tính tổng, nó sẽ đưa ra tổng số giá trị còn thiếu trong mỗi cột

df.isna().sum()
a 0
b 2
c 2
d 2
e 0
dtype: int64

Khi được kết hợp với bất kỳ (), nó trả về một giá trị boolean cho biết liệu có bất kỳ giá trị nào bị thiếu trong cột đó không

________số 8

Có nhiều cách để xử lý các giá trị bị thiếu và không có lựa chọn “tốt nhất” nào mà chúng ta có thể sử dụng cho từng tác vụ. Nó phụ thuộc nhiều vào nhiệm vụ và đặc điểm của dữ liệu. Tôi sẽ liệt kê một số cách khác nhau để xử lý các giá trị bị thiếu tại đây

Chúng ta có thể thay thế các giá trị còn thiếu trong một cột bằng giá trị lớn nhất của cột đó

df.d.fillna(df.d.max(), inplace=True)

Điều quan trọng là đặt tham số inplace là True. Nếu không, các thay đổi không được lưu

Tùy trường hợp, chúng tôi có thể quyết định bỏ hàng hoặc cột nếu thiếu quá nhiều giá trị. Điền nhiều giá trị còn thiếu mà không biết trước có thể ảnh hưởng tiêu cực đến phân tích của chúng tôi. Có 5 cột trong DataFrame của chúng tôi và tôi chỉ muốn giữ các mẫu (hàng) có ít nhất 4 giá trị. Nói cách khác, các hàng có ít nhất 2 giá trị bị thiếu sẽ bị loại bỏ. Chúng ta có thể sử dụng chức năng dropna với tham số thresh. Tham số trục dùng để chỉ hàng (0) hoặc cột (1)

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df
0

Đối số của tham số ngưỡng là số lượng giá trị không bị thiếu mà một hàng hoặc cột cần phải không bị loại bỏ

Chúng ta cũng có thể điền vào các giá trị còn thiếu bằng các giá trị đứng trước hoặc sau nó. Phương pháp này chủ yếu được sử dụng trong dữ liệu chuỗi thời gian. Tham số phương thức được sử dụng với các đối số 'fill' (truyền về phía trước) hoặc 'bfill' (truyền về phía sau)

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df
1

Chúng tôi cũng có thể điền các giá trị còn thiếu bằng giá trị phổ biến nhất trong cột đó. Value_counts() sắp xếp các giá trị theo số lần xuất hiện của chúng trong một cột. Vì vậy, chúng ta có thể sử dụng chỉ mục của value_counts() để lấy giá trị phổ biến nhất

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df
2

Chọn dữ liệu

iloc và loc cho phép chọn một phần của DataFrame

  • iloc. Chọn theo vị trí
  • lộc. Chọn theo nhãn

Hãy xem qua một số ví dụ bởi vì, như mọi khi, luyện tập tạo nên sự hoàn hảo

iloc

Chọn hàng thứ hai

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df
3

Chọn hàng đầu tiên, cột thứ hai (i. e. giá trị thứ hai trong hàng đầu tiên)

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df
4

Tất cả các hàng, cột thứ ba (Cũng giống như chọn cột thứ hai nhưng tôi chỉ muốn hiển thị việc sử dụng '. ’ )

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df
5

Hai hàng đầu tiên, cột thứ hai

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df
6

lộc

Hàng lên đến 2, cột 'b'

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df
7

Hàng lên đến 2 và cột lên đến 'b'

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df
8

Hàng '2' và các cột lên đến 'b'

df = pd.DataFrame({'a':np.random.rand(10),
'b':np.random.randint(10, size=10),
'c':[True,True,True,False,False,np.nan,np.nan,
False,True,True],
'b':['London','Paris','New York','Istanbul',
'Liverpool','Berlin',np.nan,'Madrid',
'Rome',np.nan],
'd':[3,4,5,1,5,2,2,np.nan,np.nan,0],
'e':[1,4,5,3,3,3,3,8,8,4]})
df
9

Bạn có thể thắc mắc tại sao chúng tôi sử dụng cùng một giá trị cho các hàng trong cả loc và iloc. Lý do là chỉ số. Loc chọn theo vị trí nhưng vị trí của các hàng giống như chỉ mục

Hãy tạo một DataFrame mới với chỉ mục không phải là số để chúng ta có thể thấy sự khác biệt

df.describe()
0

df.describe()
1

Sau khi bạn hoàn tất việc làm sạch hoặc xử lý trước dữ liệu, tốt hơn là lưu nó vào một tệp để bạn không phải thực hiện các bước tương tự vào lần tiếp theo khi bạn làm việc với dự án. Pandas cung cấp nhiều công cụ IO để đọc hoặc ghi vào các định dạng tệp khác nhau. Cái phổ biến nhất là to_csv

df.describe()
2Kết luận

Những gì tôi trình bày ở đây chỉ là một phần nhỏ khả năng của Pandas trong quá trình phân tích dữ liệu nhưng chắc chắn sẽ hữu ích trong các dự án của bạn. Không hợp lý khi cố gắng học tất cả cùng một lúc. Thay vào đó, học từng phần nhỏ và tiếp thu thông tin bằng thực hành sẽ giúp bạn xây dựng kỹ năng phân tích dữ liệu toàn diện

Một số dự án phân tích dữ liệu tốt là gì?

Dự án phân tích dữ liệu tốt nhất cho người mới bắt đầu .
Dự án phát hiện màu sắc. Phát hiện màu là quá trình xác định bất kỳ màu nào trong ảnh. .
Dự án phân tích dữ liệu khám phá (EDA).
Phân tích tình cảm. .
Giám sát danh tiếng truyền thông xã hội. .
Phát hiện tin giả

Có thể sử dụng gấu trúc để phân tích dữ liệu không?

Pandas, một gói Python mạnh mẽ và được sử dụng rộng rãi, được dùng trong phân tích dữ liệu và để thực hiện các thao tác dữ liệu. Nó được xây dựng trên NumPy. Bài viết này sẽ nhấn mạnh phân tích dữ liệu bằng Pandas.

Việc sử dụng NumPy và gấu trúc trong Python viết triển khai thực tế của các thư viện này là gì?

Tương tự như NumPy, Pandas là một trong những thư viện python được sử dụng rộng rãi nhất trong khoa học dữ liệu. Nó cung cấp các công cụ phân tích dữ liệu và cấu trúc hiệu suất cao, dễ sử dụng . Không giống như thư viện NumPy cung cấp các đối tượng cho mảng nhiều chiều, Pandas cung cấp đối tượng bảng 2d trong bộ nhớ có tên là Dataframe.

Tôi có thể thực hành gấu trúc ở đâu?

Bạn có thể kiểm tra kỹ năng Pandas của mình bằng Bài tập của W3Schools .