宋應星 2024-12-25 15:47 采纳率: 80%
浏览 21
已结题

2024年全国大学生数据分析大赛A题:直播带货与电商产品的大数据分析 求Python代码

2024年全国大学生数据分析大赛A题:直播带货与电商产品的大数据分析
包含但不限于以下问题:对数据进行预处理与探索
对附件中直播带货商品进行统计分析并可视化。
顾客画像是指根据顾客的属性、顾客偏好、顾客行为等信息而抽象出来的标签化用户模型。通俗说就是给顾客打标签,而标签是通过对顾客信息分析而来的高度精炼的特征标识。通过打标签可以利用一些高度概括、容易理解的特征来描述顾客,可以让人更容易理解顾客,请构建顾客属性、消费水平和消费偏好等标签,并绘制顾客画像。
求具体Python代码

  • 写回答

1条回答 默认 最新

  • 九月镇灵将 新星创作者: Python技术领域 2024-12-25 16:10
    关注
    
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    from sklearn.preprocessing import LabelEncoder
    
    # 假设数据已经以CSV格式存储,并包含以下列:
    # 商品信息表:product_df(商品ID, 商品名称, 商品类别, 商品价格, ...)
    # 销售记录表:sales_df(销售ID, 商品ID, 顾客ID, 购买数量, 购买时间, ...)
    # 顾客信息表:customer_df(顾客ID, 顾客姓名, 顾客年龄, 顾客性别, 顾客地区, ...)
    
    # 加载数据
    product_df = pd.read_csv('products.csv')
    sales_df = pd.read_csv('sales.csv')
    customer_df = pd.read_csv('customers.csv')
    
    # 数据预处理(示例)
    # 处理缺失值(这里以填充0为例,实际情况可能需要根据数据特点进行处理)
    sales_df.fillna(0, inplace=True)
    
    # 统计分析商品销量和销售额
    sales_grouped = sales_df.groupby('商品ID')['购买数量', '商品价格'].agg({'购买数量': 'sum', '商品价格': 'mean'}).reset_index()
    sales_grouped['销售额'] = sales_grouped['购买数量'] * sales_grouped['商品价格']
    
    # 可视化商品销量和销售额
    plt.figure(figsize=(14, 7))
    plt.subplot(1, 2, 1)
    sns.barplot(x='购买数量', y='商品ID', data=sales_grouped.sort_values(by='购买数量', ascending=False).head(10), palette='viridis')
    plt.title('Top 10 商品销量')
    plt.xlabel('销量')
    plt.ylabel('商品ID')
    
    plt.subplot(1, 2, 2)
    sns.barplot(x='销售额', y='商品ID', data=sales_grouped.sort_values(by='销售额', ascending=False).head(10), palette='viridis')
    plt.title('Top 10 商品销售额')
    plt.xlabel('销售额')
    plt.ylabel('商品ID')
    
    plt.tight_layout()
    plt.show()
    
    # 构建顾客画像(示例)
    # 合并销售记录和顾客信息
    customer_sales_df = sales_df.merge(customer_df, on='顾客ID', how='left')
    
    # 计算顾客的消费水平(总购买金额)和消费偏好(购买最多的商品类别)
    customer_spending = customer_sales_df.groupby('顾客ID')['购买数量', '商品价格'].agg({'购买数量': 'sum', '商品价格': 'mean'}).reset_index()
    customer_spending['总购买金额'] = customer_spending['购买数量'] * customer_spending['商品价格']
    
    # 假设商品类别信息已经合并到销售记录表中
    customer_preference = customer_sales_df.groupby(['顾客ID', '商品类别'])['购买数量'].sum().reset_index()
    customer_preference = customer_preference.sort_values(by=['顾客ID', '购买数量'], ascending=[True, False]).groupby('顾客ID').head(1)
    
    # 为顾客打标签(示例)
    def assign_labels(customer_df):
        labels = []
        for _, row in customer_df.iterrows():
            age_label = '青年' if row['顾客年龄'] < 35 else '中老年'
            gender_label = '男性' if row['顾客性别'] == '男' else '女性'
            spending_label = '高消费' if row['总购买金额'] > np.percentile(customer_df['总购买金额'], 75) else '低消费'
            preference_label = row['商品类别']  # 这里简单以购买最多的商品类别作为偏好标签
            labels.append(f'{age_label}_{gender_label}_{spending_label}_{preference_label}')
        return labels
    
    customer_df['顾客标签'] = assign_labels(customer_spending.merge(customer_preference[['顾客ID', '商品类别']], on='顾客ID', how='left'))
    
    # 绘制顾客画像(示例)
    # 这里以顾客标签的分布为例进行可视化
    label_counts = customer_df['顾客标签'].value_counts().reset_index()
    label_counts.columns = ['顾客标签', '人数']
    
    plt.figure(figsize=(10, 6))
    sns.barplot(x='人数', y='顾客标签', data=label_counts, palette='muted')
    plt.title('顾客画像 - 顾客标签分布')
    plt.xlabel('人数')
    plt.ylabel('顾客标签')
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()
    
    # 注意:以上代码为示例框架,实际使用时需要根据具体的数据结构和需求进行调整和优化。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 12月25日