📜  python - 在两列之间创建频率表 - Python (1)

📅  最后修改于: 2023-12-03 15:04:02.953000             🧑  作者: Mango

Python - 在两列之间创建频率表

当我们需要将两列数据之间的频率关系可视化时,Python为我们提供了便捷的工具。在本文中,我们将介绍如何使用Python创建频率表。

准备工作

在开始之前,我们需要导入pandas库和numpy库。如果您还没有安装这些库,请先执行下面的命令:

!pip install pandas
!pip install numpy
加载数据

首先,我们需要加载我们的数据并将其存储在pandas dataframe中。在这个例子中,我们将使用另一个名为“data.csv”的文件。你可以将你自己的数据集替换掉。

import pandas as pd 

data = pd.read_csv('data.csv')

print(data.head())
计算频率

接下来,我们需要计算两列数据之间的频率。现在假设我们的数据有两列:gender和age。

我们将使用pd.crosstab()函数来计算频率。下面是它的语法:

pd.crosstab(index, columns, margins=False, dropna=True)
  • index:表示要用作行的列名或位置
  • columns:表示要用作列的列名或位置
  • margins:(可选)默认为false。如果为True,则添加行/列,其值为频率的总和
  • dropna:(可选)默认是True。如果为False,则忽略NA值
freq = pd.crosstab(data.gender, data.age, margins=True, dropna=True)
print(freq)
可视化

现在我们已经计算了频率。让我们将频率表转换为百分比,并使用matplotlib库创建一个柱状图可视化频率表。

import matplotlib.pyplot as plt
import numpy as np

# 利用除以总和,将频率表转为百分比
freq_pct = freq.div(freq.iloc[-1, -1]*0.01) 
freq_pct = freq_pct.iloc[:-1,:-1]

# 创建柱状图
fig = plt.figure(figsize=(10, 10))

# 按行遍历每个单元格
for i in range(0,freq_pct.shape[0]):
    plt.bar(np.arange(freq_pct.shape[1])+(0.1*i), freq_pct.iloc[i,:], width = 0.1, label = freq_pct.index[i])

# 添加坐标轴标签和标题
plt.xlabel('Age Group')
plt.ylabel('Percentage')
plt.title('Gender Distribution by Age Group')
    
# 添加图例
plt.legend(loc='upper right')

# 显示图形
plt.show()
完整代码
import pandas as pd 
import matplotlib.pyplot as plt
import numpy as np

data = pd.read_csv('data.csv')

freq = pd.crosstab(data.gender, data.age, margins=True, dropna=True)

freq_pct = freq.div(freq.iloc[-1, -1]*0.01) 
freq_pct = freq_pct.iloc[:-1,:-1]

fig = plt.figure(figsize=(10, 10))

for i in range(0,freq_pct.shape[0]):
    plt.bar(np.arange(freq_pct.shape[1])+(0.1*i), freq_pct.iloc[i,:], width = 0.1, label = freq_pct.index[i])

plt.xlabel('Age Group')
plt.ylabel('Percentage')
plt.title('Gender Distribution by Age Group')
    
plt.legend(loc='upper right')

plt.show()

以上就是本文介绍的如何使用Python在两列之间创建频率表的步骤。如果你有任何问题或建议,请随时在评论区留言。谢谢!