一行代码制作数据分析交叉表,太便捷了

之前我们了解到Pandas模块中的pivot_table()函数可以用来制作数据透视表,今天小编来介绍一下Pandas模块中的另外一个函数corsstab(),我们可以通过调用该函数来制作交叉表,下面就来看看其中的主要流程和步骤吧。

模块导入和数据读取

那我们按照惯例,首先导入模块并且来读取所要使用到的数据集,引用的依然是之前制作数据透视表的数据集

import pandas as pd

def load_data():
    return pd.read_csv('coffee_sales.csv', parse_dates=['order_date'])

那这里小编是通过自定义一个函数,然后通过调用该函数来读取数据,在实际工作当中每个人都可以根据自己的喜好来操作

df = load_data()
df.head()

output

b4897910ae5123d74b2a5ef0f276a23e.png

牛刀小试

交叉表是用于统计分组频率的特殊透视表。简单来说,就是将两个或者多个列中不重复的元素组成一个新的DataFrame,新数据的行和列交叉的部分值为其组合在原数据中的数量,我们先来看一个简单的例子,代码如下

pd.crosstab(index = df['region'], columns = df['product_category'])

output

637d9427c763ec5bc63a07f83f217353.png

在行方向上代表的是不同的地区,而在列方向上代表的则是不同的咖啡种类,出来的结果表示的是不同地区不同咖啡种类的汇总数据,

df[(df["region"] == "Central")&(df["product_category"] == "Tea")].shape[0]

output

336

例如我们筛选出地区是中部地区并且品种是茶饮的数据,出来的结果总共有336条数据,和交叉表中的结果一致,

1bc19db9e363465c0b4d3f38fc899fe2.png

我们可以对列名以及行索引更换名字,通过调用rownames参数以及colnames参数,代码如下

pd.crosstab(
    index = df['region'], 
    columns = df['product_category'], 
    rownames=['US Region'], 
    colnames=['Product Category']
)

output

5d189b64db140b252fbfd065ef82d597.png

除了咖啡的品类之外,我们还想要知道到底不同品种的咖啡在批发和零售之间销量的数据,就可以这么来操作

pd.crosstab(
    index = df['region'], 
    columns = [df['product_category'], df['market']]
)

output

62880c8e05ca0c7b9f57ff58db0afd5b.png

或者是

pd.crosstab(
    index = df['region'], 
    columns = [df['product_category'], df['market']],
    rownames=['US Region'], 
    colnames=['Product Category', 'Market']
)

output

f39b9abaf899994833981dc6d2204c98.png

输出的DataFrame数据集当中的列有两层,最上面的是咖啡的种类,然后紧接着第二层的便是不同的市场,当然我们也可以在行方向上添加多个层次的索引,代码如下

pd.crosstab(
    index = [df['region'], df['market']], 
    columns = df['product_category']
)

output

bd30feb9c84cafe6180d72824a713f6f.png

进阶的操作

pd.pivot_table()函数一样,我们也可以通过调用当中的margin参数来给整合出来的数据做一个加总,代码如下

pd.crosstab(index = df['region'],
            columns = df['product_category'],
            margins = True)

output

6be43eb4bc2fec117c1ab42d887c977e.png

我们还能指定该列的列名,

pd.crosstab(
    index = df['region'],
    columns = df['product_category'], 
    margins = True, 
    margins_name = 'Subtotals'
)

output

a7ecdf20ea5fdb90ba7efee0c87b9618.png

另外还有参数normalize用来将所有值除以值的总和进行归一化

pd.crosstab(index = df['region'], 
            columns = df['product_category'],
            normalize = True)

output

8eff31df25ac458bd795277144e37fda.png

我们从美观的角度出发,想要保留两位小数,代码如下

pd.crosstab(
    index = df['region'], 
    columns = df['product_category'], 
    normalize = True
).style.format('{:.2%}')

output

c836a7377b3fb0e8de11db1cc45d1726.png

要是和之间的margin参数相结合来使用的话,将所有的结果汇总到一起等于100%,代码如下

pd.crosstab(
    index = df['region'], 
    columns = df['product_category'], 
    margins = True, 
    normalize = True
).style.format('{:.2%}')

output

7cdd0e177dbb7d2cf3fc9de4e385296c.png

进一步衍生

最后还有values以及aggfunc两参数,其中aggfunc参数具体指的是指定聚合函数,例如平均数、求和以及中位数等统计方法,对value参数指定的连续性变量的列进行计算,

df.info()

output

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4248 entries, 0 to 4247
Data columns (total 9 columns):
 #   Column            Non-Null Count  Dtype         
---  ------            --------------  -----         
 0   order_date        4248 non-null   datetime64[ns]
 1   market            4248 non-null   object        
 2   region            4248 non-null   object        
 3   product_category  4248 non-null   object        
 4   product           4248 non-null   object        
 5   cost              4248 non-null   int64         
 6   inventory         4248 non-null   int64         
 7   net_profit        4248 non-null   int64         
 8   sales             4248 non-null   int64         
dtypes: datetime64[ns](1), int64(4), object(4)
memory usage: 298.8+ KB

当前数据集中“market”、“region”、“product_category”、“product”四列是离散型变量,而有“cost”、“inventory”、“net_profit”、“sales”四列是连续性变量,分别代表的是成本、库存、净利润以及销量,其中我们想针对不同地区、不同咖啡种类的成本做一个平均值,那么代码如下

pd.crosstab(
    index = df['region'], 
    columns = df['product_category'], 
    values = df['cost'],
    aggfunc = 'mean'
)

output

195294c07edd32fc02f1e3d93f86b8f3.png

要是我们想要对计算出来的结果保留两位小数,代码如下

pd.crosstab(
    index = df['region'], 
    columns = df['product_category'], 
    values = df['cost'],
    aggfunc = 'mean'
).round(2)

output

837a09082766d91883d1bd70b9d5d4f2.png

当然要是针对存在缺失值的情况,我们也可以替换成其他值来处理,代码如下

pd.crosstab(
    index = df['region'], 
    columns = df['product_category'], 
    values = df['cost'],
    aggfunc = 'mean',
).fillna(0)

output

387c14a15aa117c78a60a11df95de04f.png

END

推荐阅读



牛逼!Python常用数据类型的基本操作(长文系列第①篇)
牛逼!Python的判断、循环和各种表达式(长文系列第②篇)

牛逼!Python函数和文件操作(长文系列第③篇)

牛逼!Python错误、异常和模块(长文系列第④篇)

吴恩达deeplearining.ai的经典总结资料
Ps:从小程序直接获取下载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据交叉分析是数据分析中非常重要的一部分,常见的交叉分析包括透视交叉等。在python中,可以使用pandas库来进行数据的交叉分析。下面是一个简单的示例代码,用于展示如何使用pandas来进行数据交叉分析和可视化。 首先,我们需要导入pandas和matplotlib库: ```python import pandas as pd import matplotlib.pyplot as plt ``` 接下来,我们可以使用pandas的read_csv函数来读取数据文件: ```python data = pd.read_csv('data.csv') ``` 然后,我们可以使用pandas的crosstab函数来创建交叉: ```python cross_tab = pd.crosstab(data['column1'], data['column2']) ``` 这里的'column1'和'column2'是数据中的两个列,可以根据实际情况进行替换。创建好交叉之后,我们可以使用matplotlib库来进行可视化: ```python cross_tab.plot(kind='bar', stacked=True) plt.show() ``` 这里使用了交叉的plot函数来进行绘图,kind参数指定了绘图类型,stacked参数指定了是否堆叠柱形图。最后使用plt.show()函数来展示绘制的图形。 除了使用交叉,我们还可以使用pandas的pivot_table函数来创建透视。透视交叉类似,但是可以对数据进行更复杂的聚合操作。下面是一个简单的透视示例: ```python pivot_table = pd.pivot_table(data, values='value', index=['column1'], columns=['column2'], aggfunc=np.sum) ``` 这里的'value'是要聚合的值,'column1'和'column2'是行和列的索引,aggfunc参数指定了聚合函数。创建好透视之后,我们也可以使用matplotlib库来进行可视化。 总的来说,使用pandas进行数据交叉分析和可视化非常简单,只需要几行代码就可以完成。对于更复杂的分析和可视化需求,也可以使用pandas和其他数据分析库来进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值