Skip to content

1. 导入库

python
import pandas
import numpy as np
import matplotlib.pyplot as plt
  • pandas用于数据处理和分析(这里没有使用常见的缩写pd)
  • numpy用于数值计算,简写为np
  • matplotlib.pyplot用于数据可视化,简写为plt(虽然代码中未实际使用绘图功能)

2. 数据采集

python
data = pandas.read_csv('user_behavior_data.csv')
  • 使用pandas的read_csv函数读取名为user_behavior_data.csv的用户行为数据文件
  • 将数据存储在名为data的DataFrame中
python
print("数据采集完成,已加载到DataFrame中")
  • 打印数据加载完成的信息
python
print(data.head())
  • 使用head()方法打印DataFrame的前5行数据
  • 用于快速查看数据结构和内容

3. 数据清洗与预处理

python
data = data.dropna()
  • 使用dropna()方法删除包含缺失值(NaN)的行
  • 直接修改原DataFrame
python
data['Age'] = data['Age'].astype(int)
  • 将Age列的数据类型转换为整数型(int)
  • 确保年龄数据为整数
python
data['PurchaseAmount'] = data['PurchaseAmount'].astype(float)
  • 将PurchaseAmount列的数据类型转换为浮点型(float)
  • 确保购买金额可以有小数
python
data['ReviewScore'] = data['ReviewScore'].astype(int)
  • 将ReviewScore列的数据类型转换为整数型(int)
  • 确保评分数据为整数
python
data = data[(data['Age'].between(18, 70)) & (data['PurchaseAmount'] > 0) & (data['ReviewScore'].between(1, 5))]
  • 筛选保留合理范围内的数据:
    • 年龄在18-70岁之间
    • 购买金额大于0
    • 评分在1-5分之间
  • 使用布尔索引过滤不合理数据
python
data['PurchaseAmount'] = (data['PurchaseAmount'] - data['PurchaseAmount'].mean()) / data['PurchaseAmount'].std()
  • 对PurchaseAmount列进行标准化(Z-score标准化)
  • 公式:(原始值 - 平均值)/ 标准差
  • 使数据均值为0,标准差为1
python
data['ReviewScore'] = (data['ReviewScore'] - data['ReviewScore'].mean()) / data['ReviewScore'].std()
  • 对ReviewScore列进行同样的标准化处理
python
data.to_csv('cleaned_user_behavior_data.csv', index=False)
  • 将清洗后的数据保存到新的CSV文件cleaned_user_behavior_data.csv
  • index=False表示不保存行索引
python
print("数据清洗完成,已保存为'cleaned_user_behavior_data.csv'")
  • 打印数据清洗完成的信息

4. 数据统计

python
purchase_category_counts = data['PurchaseCategory'].value_counts()
  • 统计PurchaseCategory列中各购买类别的用户数量
  • value_counts()返回各分类的计数
  • 结果存储在purchase_category_counts变量中
python
print("每个购买类别的用户数:\n", purchase_category_counts)
  • 打印购买类别统计结果
python
gender_purchase_amount_mean = data.groupby('Gender')['PurchaseAmount'].mean()
  • 按Gender列分组
  • 计算每组中PurchaseAmount的平均值
  • 结果存储在gender_purchase_amount_mean变量中
python
print("不同性别的平均购买金额:\n", gender_purchase_amount_mean)
  • 打印不同性别的平均购买金额
python
bins = [18, 26, 36, 46, 56, 66, np.inf]
labels = ['18-25', '26-35', '36-45', '46-55', '56-65', '65+']
  • 定义年龄区间的边界点
  • 定义对应的年龄组标签
python
data['AgeGroup'] = pandas.cut(data['Age'], bins=bins, labels=labels, right=False)
  • 使用cut()方法将年龄划分到指定区间
  • bins参数指定区间边界
  • labels参数指定区间标签
  • right=False表示使用左闭右开区间
  • 结果存储在新列AgeGroup
python
age_group_counts = data['AgeGroup'].value_counts().sort_index()
  • 统计各年龄组的用户数量
  • value_counts()计算各组的数量
  • sort_index()按索引(年龄组标签)排序
  • 结果存储在age_group_counts变量中
python
print("不同年龄段的用户数:\n", age_group_counts)
  • 打印各年龄段的用户数量统计结果