Hướng dẫn how do you create a cross tabulation in python? - làm thế nào để bạn tạo một bảng chéo trong python?

Mục tiêu công thức

Bạn đã bao giờ cố gắng thực hiện một phân tích các tính năng chéo cho rằng bạn cần tạo cơ sở crosstabs trên các tính năng khác nhau.

Vì vậy, đây là công thức trên chúng ta có thể tạo crosstabs từ một từ điển trong Python.

Làm chủ nghệ thuật làm sạch dữ liệu trong học máy

Mục lục

  • Mục tiêu công thức
    • Bước 1 - Nhập thư viện
    • Bước 2 - Thiết lập dữ liệu
    • Bước 3 - Làm bảng crosstab

Bước 1 - Nhập thư viện

import pandas as pd
import seaborn as sns
4

Bước 2 - Thiết lập dữ liệu

Bước 2 - Thiết lập dữ liệu

Bước 3 - Làm bảng crosstab

Bước 3 - Làm bảng crosstab

Chúng tôi đã nhập khẩu gấu trúc cần thiết.

  first_name     last_name  age  Comedy_Score  Rating_Score
0    Sheldon        Copper   42             9            25
1        Raj  Koothrappali   38             7            25
2    Leonard    Hofstadter   36             8            49
3     Howard      Wolowitz   41             8            62
4        Amy        Fowler   35             5            70

age         35  36  38  41  42  All
first_name                         
Amy          1   0   0   0   0    1
Howard       0   0   0   1   0    1
Leonard      0   1   0   0   0    1
Raj          0   0   1   0   0    1
Sheldon      0   0   0   0   1    1
All          1   1   1   1   1    5

first_name        Amy  Howard  Leonard  Raj  Sheldon  All
age Comedy_Score                                         
35  5               1       0        0    0        0    1
36  8               0       0        1    0        0    1
38  7               0       0        0    1        0    1
41  8               0       1        0    0        0    1
42  9               0       0        0    0        1    1
All                 1       1        1    1        1    5

first_name                     Amy  Howard  Leonard  Raj  Sheldon  All
age Comedy_Score Rating_Score                                         
35  5            70              1       0        0    0        0    1
36  8            49              0       0        1    0        0    1
38  7            25              0       0        0    1        0    1
41  8            62              0       1        0    0        0    1
42  9            25              0       0        0    0        1    1
All                              1       1        1    1        1    5

Hướng dẫn how do you create a cross tabulation in python? - làm thế nào để bạn tạo một bảng chéo trong python?

Giới thiệu

Pandas cung cấp một số tùy chọn để nhóm và tóm tắt dữ liệu nhưng sự đa dạng của các tùy chọn này có thể là một phước lành và một lời nguyền. Các cách tiếp cận này là tất cả các công cụ phân tích dữ liệu mạnh mẽ nhưng có thể khó hiểu khi biết nên sử dụng một

import pandas as pd
import seaborn as sns
7,
import pandas as pd
import seaborn as sns
8 hoặc
import pandas as pd
import seaborn as sns
9 để xây dựng bảng tóm tắt. Vì trước đây tôi đã đề cập đến Pivot_Tables, bài viết này sẽ thảo luận về chức năng Pandas
import pandas as pd
import seaborn as sns
9, giải thích việc sử dụng nó và minh họa cách nó có thể được sử dụng để nhanh chóng tóm tắt dữ liệu. Mục tiêu của tôi là có bài viết này là một tài nguyên mà bạn có thể đánh dấu và tham khảo khi bạn cần nhắc nhở bản thân những gì bạn có thể làm với chức năng
import pandas as pd
import seaborn as sns
9.

Tổng quan

Hàm pandas crosstab xây dựng một bảng phân loại chéo có thể hiển thị tần số mà các nhóm dữ liệu nhất định xuất hiện. Ví dụ nhanh, bảng này hiển thị số lượng hai hoặc bốn xe cửa được sản xuất bởi các nhà sản xuất xe hơi khác nhau: các nhà sản xuất:

num_doorsBốnhaiTổng cộng
làm
Honda5 8 13
Mazda7 9 16
Mitsubishi4 9 13
Nissan9 9 18
Subaru9 3 12
Toyota18 14 32
Volkswagen8 4 12
Volvo11 0 11
Tổng cộng71 56 127

làm

Honda

Mazda

Mitsubishi

import pandas as pd
import seaborn as sns

NissanUCI Machine Learning Repository and make some label changes for clarity:

# Define the headers since the data does not have any
headers = ["symboling", "normalized_losses", "make", "fuel_type", "aspiration",
           "num_doors", "body_style", "drive_wheels", "engine_location",
           "wheel_base", "length", "width", "height", "curb_weight",
           "engine_type", "num_cylinders", "engine_size", "fuel_system",
           "bore", "stroke", "compression_ratio", "horsepower", "peak_rpm",
           "city_mpg", "highway_mpg", "price"]

# Read in the CSV file and convert "?" to NaN
df_raw = pd.read_csv("http://mlr.cs.umass.edu/ml/machine-learning-databases/autos/imports-85.data",
                     header=None, names=headers, na_values="?" )

# Define a list of models that we want to review
models = ["toyota","nissan","mazda", "honda", "mitsubishi", "subaru", "volkswagen", "volvo"]

# Create a copy of the data with only the top 8 manufacturers
df = df_raw[df_raw.make.isin(models)].copy()

Subaru

Toyota

pd.crosstab(df.make, df.body_style)

body_styleVolkswagenVolvoTrong bảng trên, bạn có thể thấy rằng bộ dữ liệu chứa 32 chiếc xe Toyota trong đó 18 là bốn cửa và 14 là hai cửa. Đây là một bảng tương đối đơn giản để giải thích và minh họa lý do tại sao phương pháp này có thể là một cách mạnh mẽ để tóm tắt dữ liệu lớn & NBSP; bộ.Pandas làm cho quá trình này dễ dàng và cho phép chúng tôi tùy chỉnh các bảng trong một số cách cư xử khác nhau. Trong phần còn lại của bài viết, tôi sẽ đi qua cách tạo và tùy chỉnh các bảng & nbsp;Bắt đầu & NBSP;
làm
Honda0 0 7 5 1
Mazda0 0 10 7 0
Mitsubishi0 0 9 4 0
Nissan0 1 5 9 3
Subaru0 0 3 5 4
Toyota1 3 14 10 4
Volkswagen1 0 1 9 1
Volvo0 0 0 8 3

Trong bảng trên, bạn có thể thấy rằng bộ dữ liệu chứa 32 chiếc xe Toyota trong đó 18 là bốn cửa và 14 là hai cửa. Đây là một bảng tương đối đơn giản để giải thích và minh họa lý do tại sao phương pháp này có thể là một cách mạnh mẽ để tóm tắt dữ liệu lớn & NBSP; bộ.

Pandas làm cho quá trình này dễ dàng và cho phép chúng tôi tùy chỉnh các bảng trong một số cách cư xử khác nhau. Trong phần còn lại của bài viết, tôi sẽ đi qua cách tạo và tùy chỉnh các bảng & nbsp;

Đầu tiên, chúng ta có thể sử dụng

import pandas as pd
import seaborn as sns
7 theo sau là
# Define the headers since the data does not have any
headers = ["symboling", "normalized_losses", "make", "fuel_type", "aspiration",
           "num_doors", "body_style", "drive_wheels", "engine_location",
           "wheel_base", "length", "width", "height", "curb_weight",
           "engine_type", "num_cylinders", "engine_size", "fuel_system",
           "bore", "stroke", "compression_ratio", "horsepower", "peak_rpm",
           "city_mpg", "highway_mpg", "price"]

# Read in the CSV file and convert "?" to NaN
df_raw = pd.read_csv("http://mlr.cs.umass.edu/ml/machine-learning-databases/autos/imports-85.data",
                     header=None, names=headers, na_values="?" )

# Define a list of models that we want to review
models = ["toyota","nissan","mazda", "honda", "mitsubishi", "subaru", "volkswagen", "volvo"]

# Create a copy of the data with only the top 8 manufacturers
df = df_raw[df_raw.make.isin(models)].copy()
8 để có được cùng & nbsp; Kết quả:

df.groupby(['make', 'body_style'])['body_style'].count().unstack().fillna(0)

Đầu ra cho ví dụ này trông rất giống với crosstab nhưng phải mất một vài bước bổ sung để có được nó được định dạng & nbsp; chính xác.

Cũng có thể làm điều gì đó tương tự bằng cách sử dụng

import pandas as pd
import seaborn as sns
8:

df.pivot_table(index='make', columns='body_style', aggfunc={'body_style':len}, fill_value=0)

Đảm bảo xem lại bài viết trước của tôi trên PIVOT_TABLES nếu bạn muốn hiểu cách thức này & NBSP;

Câu hỏi vẫn còn, tại sao thậm chí sử dụng chức năng crosstab? Câu trả lời ngắn gọn là nó cung cấp một vài hàm tiện dụng để dễ dàng định dạng và tóm tắt dữ liệu & nbsp;

Câu trả lời dài hơn là đôi khi có thể khó nhớ tất cả các bước để thực hiện điều này. API Crosstab đơn giản là con đường nhanh nhất đến giải pháp và cung cấp một số phím tắt hữu ích cho một số loại & nbsp; phân tích.API is the quickest route to the solution and provides some useful shortcuts for certain types of analysis.

Theo kinh nghiệm của tôi, điều quan trọng là phải biết về các tùy chọn và sử dụng cái chảy tự nhiên nhất từ ​​phân tích. Tôi đã có những trải nghiệm khi tôi cố gắng cố gắng tạo ra một giải pháp pivot_table và sau đó nhanh chóng có được thứ tôi muốn bằng cách sử dụng crosstab. Điều tuyệt vời về gấu trúc là một khi dữ liệu nằm trong DataFrame, tất cả các thao tác này là 1 dòng mã để bạn được tự do & nbsp; thử nghiệm.

Lặn sâu hơn vào & nbsp; crosstab

Bây giờ chúng tôi đã đi qua quy trình crosstab cơ bản, tôi sẽ giải thích một số thay đổi hữu ích khác mà bạn có thể thực hiện đối với đầu ra bằng cách thay đổi các tham số & nbsp;

Một nhu cầu phổ biến trong crosstab là bao gồm các phụ. Chúng tôi có thể thêm chúng bằng từ khóa

pd.crosstab(df.make, df.body_style)
0:

pd.crosstab(df.make, df.num_doors, margins=True, margins_name="Total")

num_doorsBốnhaiTổng cộng
làm
Honda5 8 13
Mazda7 9 16
Mitsubishi4 9 13
Nissan9 9 18
Subaru9 3 12
Toyota18 14 32
Volkswagen8 4 12
Volvo11 0 11
Tổng cộng71 56 127

làm

Honda

pd.crosstab(df.make, df.body_style, values=df.curb_weight, aggfunc='mean').round(0)

body_styleMazdaMitsubishiNissanSubaruToyota
làm
HondaMazdaMazda1970.0 2289.0 2024.0
MazdaMazdaMazda2254.0 2361.0 Mazda
MitsubishiMazdaMazda2377.0 2394.0 Mazda
NissanMazda2008.0 2740.0 2238.0 2452.0
SubaruMazdaMazda2137.0 2314.0 2454.0
Toyota2975.0 2585.0 2370.0 2338.0 2708.0
Volkswagen2254.0 Mazda2221.0 2342.0 2563.0
VolvoMazdaMazdaMazda3023.0 3078.0

Mitsubishi

Nissan

pd.crosstab(df.make, df.body_style, normalize=True)

body_styleMazdaMitsubishiNissanSubaruToyota
làm
Honda0.000000 0.000000 0.054688 0.039062 0.007812
Mazda0.000000 0.000000 0.078125 0.054688 0.000000
Mitsubishi0.000000 0.000000 0.070312 0.031250 0.000000
Nissan0.000000 0.007812 0.039062 0.070312 0.023438
Subaru0.000000 0.000000 0.023438 0.039062 0.031250
Toyota0.007812 0.023438 0.109375 0.078125 0.031250
Volkswagen0.007812 0.000000 0.007812 0.070312 0.007812
Volvo0.000000 0.000000 0.000000 0.062500 0.023438

Từ khóa

pd.crosstab(df.make, df.body_style)
0 đã hướng dẫn gấu trúc để thêm tổng số cho mỗi hàng cũng như tổng số ở phía dưới. Tôi cũng đã chuyển một giá trị cho
pd.crosstab(df.make, df.body_style)
2 trong cuộc gọi chức năng vì tôi muốn gắn nhãn kết quả là tổng số thay vì mặc định & nbsp;

Tất cả các ví dụ này chỉ đơn giản là đếm các lần xuất hiện riêng lẻ của các kết hợp dữ liệu.

import pandas as pd
import seaborn as sns
9 cho phép chúng tôi thực hiện tóm tắt nhiều hơn bằng cách bao gồm các giá trị để tổng hợp. Để minh họa điều này, chúng ta có thể tính toán trọng lượng trung bình của xe hơi theo phong cách cơ thể và & nbsp; nhà sản xuất: nhà sản xuất:

pd.crosstab(df.make, df.body_style, normalize='columns')

body_styleMazdaMitsubishiNissanSubaruToyota
làm
Honda0.0 0.00 0.142857 0.087719 0.0625
Mazda0.0 0.00 0.204082 0.122807 0.0000
Mitsubishi0.0 0.00 0.183673 0.070175 0.0000
Nissan0.0 0.25 0.102041 0.157895 0.1875
Subaru0.0 0.00 0.061224 0.087719 0.2500
Toyota0.5 0.75 0.285714 0.175439 0.2500
Volkswagen0.5 0.00 0.020408 0.157895 0.0625
Volvo0.0 0.00 0.000000 0.140351 0.1875

Từ khóa

pd.crosstab(df.make, df.body_style)
0 đã hướng dẫn gấu trúc để thêm tổng số cho mỗi hàng cũng như tổng số ở phía dưới. Tôi cũng đã chuyển một giá trị cho
pd.crosstab(df.make, df.body_style)
2 trong cuộc gọi chức năng vì tôi muốn gắn nhãn kết quả là tổng số thay vì mặc định & nbsp;

Chúng ta có thể làm điều tương tự & nbsp; hàng khôn ngoan:

import pandas as pd
import seaborn as sns
0

body_stylechuyển đổiHardtophatchbackSedantoa xe
làm
Honda0.000000 0.000000 0.538462 0.384615 0.076923
Mazda0.000000 0.000000 0.588235 0.411765 0.000000
Mitsubishi0.000000 0.000000 0.692308 0.307692 0.000000
Nissan0.000000 0.055556 0.277778 0.500000 0.166667
Subaru0.000000 0.000000 0.250000 0.416667 0.333333
Toyota0.031250 0.093750 0.437500 0.312500 0.125000
Volkswagen0.083333 0.000000 0.083333 0.750000 0.083333
Volvo0.000000 0.000000 0.000000 0.727273 0.272727

Quan điểm này về dữ liệu cho thấy rằng những chiếc xe Mitsubishi trong bộ dữ liệu này, 69,23% là hatchback và phần còn lại (30,77%) là & nbsp; mui trần.

Tôi hy vọng bạn sẽ đồng ý rằng các phím tắt này có thể hữu ích trong nhiều loại & nbsp; phân tích.

Nhóm

Một trong những tính năng hữu ích nhất của Crosstab là bạn có thể vượt qua nhiều cột DataFrame và Pandas thực hiện tất cả các nhóm cho bạn. Chẳng hạn, nếu chúng ta muốn xem dữ liệu được phân phối bằng ổ đĩa bánh trước (FWD) và ổ bánh sau (RWD) như thế nào, chúng ta có thể bao gồm cột Drive_Wheels bằng cách đưa nó vào danh sách các cột hợp lệ trong đối số thứ hai cho

import pandas as pd
import seaborn as sns
9 .

import pandas as pd
import seaborn as sns
1

body_stylechuyển đổiHardtophatchbackSedantoa xe
drive_wheelslàmHondalàmHonda4wdlàmHonda4wdlàmHonda4wdlàmHonda
làm
Honda0 0 0 0 0 7 0 0 5 0 0 1 0
Mazda0 0 0 0 0 6 4 0 5 2 0 0 0
Mitsubishi0 0 0 0 0 9 0 0 4 0 0 0 0
Nissan0 0 1 0 0 2 3 0 9 0 0 3 0
Subaru0 0 0 0 1 2 0 2 3 0 2 2 0
Toyota0 1 0 3 0 8 6 0 7 3 2 1 1
Volkswagen1 0 0 0 0 1 0 0 9 0 0 1 0
Volvo0 0 0 0 0 0 0 0 0 8 0 0 3

Quan điểm này về dữ liệu cho thấy rằng những chiếc xe Mitsubishi trong bộ dữ liệu này, 69,23% là hatchback và phần còn lại (30,77%) là & nbsp; mui trần.

import pandas as pd
import seaborn as sns
2

Tôi hy vọng bạn sẽ đồng ý rằng các phím tắt này có thể hữu ích trong nhiều loại & nbsp; phân tích.chuyển đổiHardtophatchbackSedantoa xe
làm4wdlàmHonda4wdlàmHonda4wdlàmHonda4wdlàmHonda4wdlàmHonda
MazdaMitsubishi
HondaMazda0 0 0 0 0 0 0 0 0 0 4 0 0 1 0
Mitsubishi0 0 0 0 0 0 0 7 0 0 1 0 0 0 0
MazdaMazda0 0 0 0 0 0 0 1 0 0 4 2 0 0 0
Mitsubishi0 0 0 0 0 0 0 5 4 0 0 0 0 0 0
MitsubishiMazda0 0 0 0 0 0 0 0 0 0 4 0 0 0 0
Mitsubishi0 0 0 0 0 0 0 9 0 0 0 0 0 0 0
NissanMazda0 0 0 0 0 0 0 1 0 0 5 0 0 3 0
Mitsubishi0 0 0 0 1 0 0 1 3 0 4 0 0 0 0
SubaruMazda0 0 0 0 0 0 0 0 0 2 3 0 2 2 0
Mitsubishi0 0 0 0 0 0 1 2 0 0 0 0 0 0 0
ToyotaMazda0 0 0 0 0 0 0 6 0 0 7 1 2 1 1
Mitsubishi0 0 1 0 0 3 0 2 6 0 0 2 0 0 0
VolkswagenMazda0 0 0 0 0 0 0 0 0 0 7 0 0 1 0
Mitsubishi0 1 0 0 0 0 0 1 0 0 2 0 0 0 0
VolvoMazda0 0 0 0 0 0 0 0 0 0 0 8 0 0 3
Mitsubishi0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Nissan

Subaru

Toyota

Volkswagen

Volvo

Quan điểm này về dữ liệu cho thấy rằng những chiếc xe Mitsubishi trong bộ dữ liệu này, 69,23% là hatchback và phần còn lại (30,77%) là & nbsp; mui trần.

Tôi hy vọng bạn sẽ đồng ý rằng các phím tắt này có thể hữu ích trong nhiều loại & nbsp; phân tích.

import pandas as pd
import seaborn as sns
3

Hướng dẫn how do you create a cross tabulation in python? - làm thế nào để bạn tạo một bảng chéo trong python?

Nhóm

Một trong những tính năng hữu ích nhất của Crosstab là bạn có thể vượt qua nhiều cột DataFrame và Pandas thực hiện tất cả các nhóm cho bạn. Chẳng hạn, nếu chúng ta muốn xem dữ liệu được phân phối bằng ổ đĩa bánh trước (FWD) và ổ bánh sau (RWD) như thế nào, chúng ta có thể bao gồm cột Drive_Wheels bằng cách đưa nó vào danh sách các cột hợp lệ trong đối số thứ hai cho

import pandas as pd
import seaborn as sns
9 .

Cheat Sheet

FWDPDF version here.

Hướng dẫn how do you create a cross tabulation in python? - làm thế nào để bạn tạo một bảng chéo trong python?

RWD

Chúng ta cũng có thể làm điều tương tự với & nbsp; index:

Làm thế nào để bạn tạo ra một crosstab trong Python?

Bước 1 - Nhập thư viện.Nhập GANDAS dưới dạng PD.....
Bước 2 - Thiết lập dữ liệu.Chúng tôi đã tạo một bộ dữ liệu bằng cách tạo một từ điển với các tính năng và truyền nó thông qua chức năng DataFrame.....
Bước 3 - Làm bảng crosstab ..

Gấu trúc bảng chéo là gì?

Hàm pandas crosstab xây dựng một bảng phân loại chéo có thể hiển thị tần số mà các nhóm dữ liệu nhất định xuất hiện.builds a cross-tabulation table that can show the frequency with which certain groups of data appear.

Một ví dụ về lập bảng chéo là gì?

Ví dụ về bảng chéo lập bảng chéo giúp bạn hiểu làm thế nào hai biến khác nhau có liên quan với nhau.Ví dụ, giả sử bạn muốn xem liệu có mối quan hệ giữa giới tính của người phản ứng khảo sát và nếu giáo dục giới tính ở trường trung học là quan trọng.suppose you wanted to see if there is a relationship between the gender of the survey responder and if sex education in high school is important.