【python】python基于机器学习与数据分析的二手手机特性关联与分类预测(源码+数据集)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


python基于机器学习与数据分析的二手手机特性关联与分类预测(源码+数据集)【独一无二】


目录

  • python基于机器学习与数据分析的二手手机特性关联与分类预测(源码+数据集)【独一无二】
  • 一、设计要求
  • 二、设计思路
  • **1. 数据读取与预处理**
  • **2. 描述性统计与分布分析**
  • **3. 分类变量分布分析**
  • **4. 热力图分析(RAM与内核搭配特征)**
  • **5. 线性回归模型**
  • **6. 聚类分析**
  • 三、可视化分析

  • 一、设计要求

    本项目的目标是分析智能手机数据,揭示其特性与价格区间的联系,并利用机器学习技术进行预测和聚类。设计涵盖数据预处理、探索性分析、模型构建与性能评估:

    1. 数据预处理

    2. 读取多个数据源,清理缺失值、重复值和异常值。
    3. 新增业务特征 “屏幕尺寸”,提升数据分析深度。
    4. 数据分析与可视化

    5. 基于核心数值特征(如手机重量、电池容量等)进行统计特征分析。
    6. 利用饼图、直方图、热力图等方式展现变量分布和关联。
    7. 监督学习

    8. 应用线性回归模型预测价格区间(连续变量)。
    9. 使用 SVM 进行价格区间分类,并分析特征重要性。
    10. 无监督学习

    11. 对手机特性进行聚类分析,揭示潜在分组模式。
    12. 利用肘部法选择最佳聚类数,并评估聚类效果(轮廓系数等)。
    13. 可视化与解读

    14. 通过高质量图表展示分析结果,为决策提供支持。
    15. 输出模型性能指标(如准确率、决定系数)并解释结果的商业意义。


    二、设计思路

    1. 数据读取与预处理

    目的:

  • 利用 pandas 读取 Excel 文件,合并数据集,并进行清洗与扩展,以生成干净、可信的数据供后续使用。
  • 关键环节:

  • 加载两个 Excel 数据集。
  • 检查缺失值并填充(使用bfill策略填充)。
  • 删除重复数据行。
  • 删除特定非法值(如 m_dep 非正数的非法行)。
  • 创建业务衍生字段 “屏幕尺寸”,计算公式为屏幕宽高的欧几里得长度。
  • import pandas as pd
    
    # 读取 Excel 文件
    file1 = "phone1.xlsx"
    file2 = "phone2.xlsx"
    
    # 使用 openpyxl 引擎读取数据
    df1 = pd.read_excel(file1, engine='openpyxl')
    df2 = pd.read_excel(file2, engine='openpyxl')
    
    # 合并数据集
    merged_df = pd.concat([df1, df2], ignore_index=True)
    
    # 代码略...至少10行
    # 代码略...至少10行
    # 代码略...至少10行
    
    # 新增字段“屏幕尺寸”
    if 'px_height' in merged_df.columns and 'px_width' in merged_df.columns:
        merged_df['屏幕尺寸'] = (merged_df['px_height']**2 + merged_df['px_width']**2) ** 0.5
    

    核心作用:

  • 数据预处理旨在防止后续分析因数据空值、重复值或非法值而产生报错或异常结果。
  • “屏幕尺寸” 字段的添加是基于业务逻辑拓展的重要步骤,为模型提供了额外的特征支持。

  • 2. 描述性统计与分布分析

    目的:

  • 对特定数值变量(如 mobile_wtbattery_power)进行数据分布的探索,以及统计特征(均值、中位数、众数)的提取。
  • 代码实现:

  • 显示均值、中位数和众数:
  • # 核心数值特征的统计描述
    print("描述性统计分析 - 手机基本属性")
    for col in ['mobile_wt', 'battery_power', 'pc']:
        if col in merged_df.columns:
    # 代码略...至少10行
    # 代码略...至少10行
    # 代码略...至少10行
            mode = merged_df[col].mode()[0] if not merged_df[col].mode().empty else None
            print(f"{col} - 平均值: {mean:.2f}, 中位数: {median}, 众数: {mode}")
    
  • 绘制数据分布:
    通过直方图 + 核密度估计展示数据分布,便于判断变量的分布是否对称,是否存在偏态。
  • import matplotlib.pyplot as plt
    
    # 分布特征:带核密度估计的直方图
    fig, axes = plt.subplots(3, 1, figsize=(8, 12))
    
    for i, col in enumerate(['mobile_wt', 'battery_power', 'pc']):
        if col in merged_df.columns:
            axes[i].hist(merged_df[col], bins=20, density=True, alpha=0.6, label=f'{col}直方图')
            merged_df[col].plot.kde(ax=axes[i], color='red', label=f'{col}核密度估计')
    # 代码略...至少10行
    # 代码略...至少10行
    # 代码略...至少10行
            axes[i].legend()
    
    plt.tight_layout()
    

    输出如下:

  • 从分布图可以直观查看特征数据的分布形状:
  • 若为双峰形态或偏态分布,可考虑使用对数变换等手段消除偏态。
  • 若为近似正态分布,则适合直接用于建模。

  • 3. 分类变量分布分析

    目的:

  • 分析手机特征(如是否支持双卡、是否支持 4G)的类别分布,展示百分比占比。
  • 代码实现:

  • 利用饼状图显示不同类别型特征的分布比例。
  • # 分类特征分布分析 - 饼图
    categorical_cols = ['dual_sim', 'four_g', 'three_g', 'touch_screen']
    
    for col in categorical_cols:
        if col in merged_df.columns:
            # 统计频数
            value_counts = merged_df[col].value_counts(normalize=True) * 100  # 计算百分比
            labels = value_counts.index.map(lambda x: f"{x} ({value_counts[x]:.2f}%)")
    # 代码略...至少10行
    # 代码略...至少10行
    # 代码略...至少10行
            plt.show()
    

    特点:

  • 各类别的比例直接反映了特征倾斜性。例如,若 dual_sim 中某类占比远超50%,则该变量可能对模型贡献不足。

  • 4. 热力图分析(RAM与内核搭配特征)

    目的:

  • 使用交叉表和热力图分析不同运行内存与核心数的分布特征,观察变量是否存在某种偏好模式。
  • 代码实现:

    import seaborn as sns
    
    # RAM、内核分组后统计频次,绘制热力图
    # 代码略...至少10行
    # 代码略...至少10行
    # 代码略...至少10行
    
    plt.figure(figsize=(8, 6))
    sns.heatmap(group_counts, annot=True, fmt="d", cmap="YlGnBu")
    plt.title("运行内存与内核分组统计热力图")
    plt.xlabel("处理器内核数分组")
    plt.ylabel("运行内存分组")
    plt.show()
    

    分析:

  • 热力图便于观察分组统计结果。若某些分组对应的频数特别高,表明这些分组有更高的用户偏好或商业价值。

  • 5. 线性回归模型

    目的:

  • 预测 price_range,并解读特征对价格的线性贡献。
  • 代码实现:

  • 建模:
  • from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LinearRegression
    from sklearn.metrics import mean_squared_error, r2_score
    
    # 提取特征及目标变量
    X = merged_df[['battery_power', 'ram', 'n_cores']]  # 自变量
    # 代码略...至少10行
    # 代码略...至少10行
    # 代码略...至少10行
    
    # 数据集拆分
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    # 线性回归模型
    model = LinearRegression()
    # 代码略...至少10行
    # 代码略...至少10行
    # 代码略...至少10行
    
    
    # 模型评估
    print("线性回归模型的系数:", model.coef_)
    print("线性回归模型的截距:", model.intercept_)
    # 代码略...至少10行
    # 代码略...至少10行
    # 代码略...至少10行
    print(f"均方误差(MSE):{mse:.2f}")
    print(f"决定系数(R²):{r2:.2f}")
    
  • 分析结果:
  • 若 R² 接近 1,说明模型有较强的拟合能力。
  • 若某些特征系数(model.coef_)的值很小或负数,表明这些特征对预测贡献甚微或为负面影响。

  • 6. 聚类分析

    目的:

  • 用无监督学习了解手机特性分组行为。
  • 代码实现:

    from sklearn.cluster import KMeans
    from sklearn.preprocessing import StandardScaler
    
    # 特征标准化
    features = merged_df[['px_height', 'px_width', '屏幕尺寸', 'four_g']].copy()
    scaler = StandardScaler()
    scaled_features = scaler.fit_transform(features)
    
    # K 均值聚类分析
    optimal_k = 4
    # 代码略...至少10行
    # 代码略...至少10行
    # 代码略...至少10行
    features['Cluster'] = clusters
    
    # 聚类评价
    from sklearn.metrics import silhouette_score
    # 代码略...至少10行
    # 代码略...至少10行
    # 代码略...至少10行
    print(f"轮廓系数 (Silhouette Score): {silhouette_avg:.2f}")
    

    输出:

  • 聚类标签反映了不同组群手机可能对应的特性偏好。
  • 这段代码从数据清洗到回归、分类和聚类,每一步都设计得合理、高效,且充分考虑了数据和任务特点,为分析智能设备提供了系统支持。


    三、可视化分析





    ---

    作者:米码收割机

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【python】python基于机器学习与数据分析的二手手机特性关联与分类预测(源码+数据集)【独一无二】

    发表回复