Gấu trúc Python - Dữ liệu phân loại
Thông thường trong thời gian thực, dữ liệu bao gồm các cột văn bản, được lặp lại. Các tính năng như giới tính, quốc gia và mã luôn lặp lại. Đây là những ví dụ cho dữ liệu phân loại.
Các biến phân loại chỉ có thể nhận một số giá trị giới hạn và thường là cố định. Bên cạnh độ dài cố định, dữ liệu phân loại có thể có thứ tự nhưng không thể thực hiện thao tác số. Categorical là một kiểu dữ liệu Pandas.
Kiểu dữ liệu phân loại hữu ích trong các trường hợp sau:
Một biến chuỗi chỉ bao gồm một vài giá trị khác nhau. Chuyển đổi một biến chuỗi như vậy thành một biến phân loại sẽ tiết kiệm một số bộ nhớ.
Thứ tự từ vựng của một biến không giống với thứ tự lôgic (“một”, “hai”, “ba”). Bằng cách chuyển đổi thành phân loại và chỉ định thứ tự trên các danh mục, sắp xếp và min / max sẽ sử dụng thứ tự logic thay vì thứ tự từ vựng.
Như một tín hiệu cho các thư viện python khác rằng cột này nên được coi là một biến phân loại (ví dụ: sử dụng các phương pháp thống kê hoặc kiểu âm mưu phù hợp).
Tạo đối tượng
Đối tượng phân loại có thể được tạo theo nhiều cách. Các cách khác nhau đã được mô tả bên dưới -
thể loại
Bằng cách chỉ định dtype là "category" trong việc tạo đối tượng gấu trúc.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
print s
Nó là output như sau -
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
Số phần tử được chuyển đến đối tượng chuỗi là bốn, nhưng danh mục chỉ có ba. Quan sát tương tự trong các Danh mục đầu ra.
pd.Categorical
Sử dụng hàm tạo Categorical của gấu trúc tiêu chuẩn, chúng ta có thể tạo một đối tượng danh mục.
pandas.Categorical(values, categories, ordered)
Hãy lấy một ví dụ -
import pandas as pd
cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat
Nó là output như sau -
[a, b, c, a, b, c]
Categories (3, object): [a, b, c]
Hãy lấy một ví dụ khác -
import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat
Nó là output như sau -
[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]
Ở đây, đối số thứ hai biểu thị các danh mục. Do đó, bất kỳ giá trị nào không có trong các danh mục sẽ được coi làNaN.
Bây giờ, hãy xem ví dụ sau:
import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat
Nó là output như sau -
[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]
Về mặt logic, thứ tự có nghĩa là, a lớn hơn b và b lớn hơn c.
Sự miêu tả
Sử dụng .describe() trên dữ liệu phân loại, chúng tôi nhận được kết quả tương tự với Series hoặc là DataFrame sau đó type chuỗi.
import pandas as pd
import numpy as np
cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})
print df.describe()
print df["cat"].describe()
Nó là output như sau -
cat s
count 3 3
unique 2 2
top c c
freq 2 2
count 3
unique 2
top c
freq 2
Name: cat, dtype: object
Nhận thuộc tính của danh mục
obj.cat.categories lệnh được sử dụng để lấy categories of the object.
import pandas as pd
import numpy as np
s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print s.categories
Nó là output như sau -
Index([u'b', u'a', u'c'], dtype='object')
obj.ordered lệnh được sử dụng để lấy thứ tự của đối tượng.
import pandas as pd
import numpy as np
cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered
Nó là output như sau -
False
Hàm trả về false bởi vì chúng tôi chưa chỉ định bất kỳ thứ tự nào.
Đổi tên danh mục
Việc đổi tên danh mục được thực hiện bằng cách gán các giá trị mới cho series.cat.categoriesthuộc tính series.cat.categories.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
s.cat.categories = ["Group %s" % g for g in s.cat.categories]
print s.cat.categories
Nó là output như sau -
Index([u'Group a', u'Group b', u'Group c'], dtype='object')
Danh mục ban đầu [a,b,c] được cập nhật bởi s.cat.categories tài sản của đối tượng.
Thêm các danh mục mới
Sử dụng phương thức Categorical.add.categories (), các danh mục mới có thể được thêm vào.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories
Nó là output như sau -
Index([u'a', u'b', u'c', 4], dtype='object')
Xóa danh mục
Sử dụng Categorical.remove_categories() phương pháp, danh mục không mong muốn có thể được loại bỏ.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
print ("Original object:")
print s
print ("After removal:")
print s.cat.remove_categories("a")
Nó là output như sau -
Original object:
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
After removal:
0 NaN
1 b
2 c
3 NaN
dtype: category
Categories (2, object): [b, c]
So sánh dữ liệu phân loại
So sánh dữ liệu phân loại với các đối tượng khác có thể trong ba trường hợp:
so sánh đẳng thức (== và! =) với một đối tượng dạng danh sách (danh sách, Chuỗi, mảng, ...) có cùng độ dài với dữ liệu phân loại.
tất cả các so sánh (==,! =,>,> =, <, và <=) của dữ liệu phân loại với một Chuỗi phân loại khác, khi có thứ tự == Đúng và các danh mục giống nhau.
tất cả các so sánh của dữ liệu phân loại với dữ liệu vô hướng.
Hãy xem ví dụ sau:
import pandas as pd
cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)
print cat>cat1
Nó là output như sau -
0 False
1 False
2 True
dtype: bool