引自免费微信小程序:皆我百晓生
要解决这个问题,我们可以分步骤来进行。首先,我们加载数据并进行预处理,然后进行探索性数据分析,接着执行聚类分析,并最后基于聚类结果提出营销策略建议。
步骤 1: 数据加载与预处理
import pandas as pd
import numpy as np
from datetime import datetime
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import seaborn as sns
# 加载数据
df = pd.read_csv('MembershipSale.csv')
# 数据预处理
# 将出生日期转换为年龄
df['BirthDate'] = pd.to_datetime(df['BirthDate'])
df['Age'] = (datetime.now().date() - df['BirthDate']).apply(lambda x: x.days / 365).round()
# 处理缺失值
df.fillna(0, inplace=True)
# 提取消费时间中的小时部分
df['ConsumptionTime'] = pd.to_datetime(df['ConsumptionTime'])
df['HourOfDay'] = df['ConsumptionTime'].dt.hour
# 创建购买频次、购买产品均价、购买金额总量和商品偏好的列
df['PurchaseFrequency'] = df.groupby(['CardNo'])['CardNo'].transform('count')
df['AveragePrice'] = df['SalesPrice'] / df['Quantity']
df['TotalAmount'] = df['Quantity'] * df['SalesPrice']
# 商品偏好可以通过计算每个会员对不同商品类别的购买比例来表示
# 首先,将商品名称转换为类别编码
df['ProductName'] = pd.Categorical(df['ProductName']).codes
步骤 2: 探索性数据分析
# 分析不同年龄层次、性别占比情况
age_gender_summary = df.groupby(['Age', 'Gender'])['CardNo'].nunique().unstack().fillna(0)
age_gender_summary.plot(kind='bar', stacked=True)
plt.show()
# 不同消费时间中消费人数
hourly_consumption = df['HourOfDay'].value_counts().sort_index()
hourly_consumption.plot(kind='line', title='Hourly Consumption')
plt.show()
步骤 3: 聚类分析
# 准备聚类特征
features = ['Age', 'PurchaseFrequency', 'AveragePrice', 'TotalAmount', 'ProductName']
X = df[features]
# 标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 使用KMeans进行聚类
kmeans = KMeans(n_clusters=5) # 假设我们选择5个聚类
kmeans.fit(X_scaled)
df['Cluster'] = kmeans.labels_
步骤 4: 结果解释与营销策略建议
# 每个聚类的特征描述
cluster_summary = df.groupby('Cluster')[features].mean()
print(cluster_summary)
# 根据聚类结果提出营销策略
# 例如,对于高消费频次和高总消费的群组,可以设计VIP计划或忠诚度奖励;
# 对于年轻且低消费频次的群组,可以考虑推广入门级产品或服务;
# 对于平均价格较高的群组,可以推荐高端或定制化的产品。
通过上述代码,你可以完成数据的加载、预处理、探索性分析、聚类分析以及结果解释。这将帮助你理解不同会员群体的特性,并据此制定相应的营销策略。