Pandas是Python中一个功能强大的数据分析库,其中对于Categorical类型字段的数据统计也提供了非常便利的支持。下面我们将详细讲解如何使用Pandas进行Categorical类型字段的数据统计,包括以下内容:
- Categorical类型字段的基本介绍
- Categorical类型字段的创建和转换
- Categorical类型字段的数据统计
- 案例分析:统计某网站用户访问页面的情况
- 案例分析:统计某电商网站用户购买商品的情况
1. Categorical类型字段的基本介绍
Categorical类型字段指的是具有离散值的数据类型,也称作分类或因子数据。这类数据通常用于某些列的值只可能为有限个数的情况,例如性别、教育程度、颜色等。
2. Categorical类型字段的创建和转换
要创建一个Categorical类型字段,可以通过pandas.Series()方法,并将参数dtype设置为'category'来实现,例如:
import pandas as pd
data = pd.Series(['male', 'female', 'male', 'male'], dtype='category')
print(data)
输出结果如下:
0 male
1 female
2 male
3 male
dtype: category
Categories (2, object): ['female', 'male']
我们看到输出结果中有两个部分,一部分是字段的值,另一部分是可用分类列表。这意味着,Pandas将字段的值映射为类别,并按照字母顺序对类别进行排序,这样有助于在Pandas中快速进行分类数据分析。
可以使用astype()方法将现有的Series或DataFrame转换为Categorical类型字段,例如:
import pandas as pd
data = pd.Series(['male', 'female', 'male', 'male'])
data = data.astype('category')
print(data)
输出结果如下:
0 male
1 female
2 male
3 male
dtype: category
Categories (2, object): ['female', 'male']
3. Categorical类型字段的数据统计
Categorical类型字段的数据统计通常包括以下函数:
- value_counts(): 统计字段每个值的出现次数
- describe(): 描述分类数据的统计信息
- groupby(): 对分类数据按照指定的某一列进行分组
- pivot_table(): 对分类数据进行透视表分析等。
这里给出一个使用groupby()函数对分类数据进行分组的例子,假设有一个DataFrame包含用户ID、访问页面和访问时间,要统计每个用户访问页面的总次数和最近一次访问时间,可以如下实现:
import pandas as pd
import numpy as np
data = pd.DataFrame({
'userID': ['ID001', 'ID001', 'ID002', 'ID003', 'ID003'],
'page': ['home', 'about', 'home', 'contact', 'about'],
'time': ['2021-01-01', '2021-01-02', '2021-01-01', '2021-01-03', '2021-01-02']
})
# 统计每个用户访问页面的总次数
total_times = data.groupby('userID').count()
print(total_times)
# 统计每个用户访问页面的最近一次时间
latest_time = data.groupby('userID')['time'].max()
print(latest_time)
输出结果如下:
page time
userID
ID001 2 2
ID002 1 1
ID003 2 2
userID
ID001 2021-01-02
ID002 2021-01-01
ID003 2021-01-03
Name: time, dtype: object
经过对groupby()函数的分析,我们可以看到,该函数确实非常适用于Categorical类型字段的数据统计。
4. 案例分析:统计某网站用户访问页面的情况
假设有一个数据集,包含多个用户的ID、页面名称和访问时间,现在需要统计每个用户访问的页面总次数,并按照页面名称分别进行统计,可以如下实现:
import pandas as pd
data = pd.read_csv('data.csv')
# 将页面名称转换为Categorical类型字段
data['page'] = data['page'].astype('category')
# 统计每个用户访问页面的总次数
total_times = data.groupby('userId')['page'].count()
print(total_times)
# 统计每个用户按照页面名称分别访问的总次数
page_times = data.groupby(['userId', 'page'])['page'].count()
print(page_times)
输出结果如下:
userId
001 3
002 2
003 1
004 4
Name: page, dtype: int64
userId page
001 about 1
contact 1
home 1
002 about 1
home 1
003 contact 1
004 about 1
contact 2
home 1
Name: page, dtype: int64
5. 案例分析:统计某电商网站用户购买商品的情况
假设有一个数据集,包含多个用户的ID、商品名称、数量和购买时间,现在需要统计每个用户购买商品的数量和总价格,可以如下实现:
import pandas as pd
data = pd.read_csv('data.csv')
# 将商品名称转换为Categorical类型字段
data['product'] = data['product'].astype('category')
# 计算每个商品的单价
price = {
'apple': 2.0,
'banana': 3.0,
'orange': 4.0
}
data['price'] = data['product'].apply(lambda x: price[x])
# 计算每个用户购买商品的数量和总价格
data['total'] = data['quantity'] * data['price']
user_data = data.groupby('userId').agg({'quantity': 'sum', 'total': 'sum'})
print(user_data)
输出结果如下:
quantity total
userId
001 5 12.0
002 4 14.0
003 2 8.0
004 7 24.0
从结果中可以看出,该电商网站的用户购买数据中,用户004购买商品的数量最多,总价格也是最高的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas如何对Categorical类型字段数据统计实战案例 - Python技术站