👉博__主👈:米碼收割機
👉技__能👈:C++/Python語言
👉專__注👈:專注主流機器人、人工智能等相關領域的開發、測試技術。
python基于機器學習與數據分析的二手手機特性關聯與分類預測(源碼+數據集)【獨一無二】
目錄
- python基于機器學習與數據分析的二手手機特性關聯與分類預測(源碼+數據集)【獨一無二】
- 一、設計要求
- 二、設計思路
- **1. 數據讀取與預處理**
- **2. 描述性統計與分布分析**
- **3. 分類變量分布分析**
- **4. 熱力圖分析(RAM與內核搭配特征)**
- **5. 線性回歸模型**
- **6. 聚類分析**
- 三、可視化分析
一、設計要求
本項目的目標是分析智能手機數據,揭示其特性與價格區間的聯系,并利用機器學習技術進行預測和聚類。設計涵蓋數據預處理、探索性分析、模型構建與性能評估:
-
數據預處理
- 讀取多個數據源,清理缺失值、重復值和異常值。
- 新增業務特征 “屏幕尺寸”,提升數據分析深度。
-
數據分析與可視化
- 基于核心數值特征(如手機重量、電池容量等)進行統計特征分析。
- 利用餅圖、直方圖、熱力圖等方式展現變量分布和關聯。
-
監督學習
- 應用線性回歸模型預測價格區間(連續變量)。
- 使用 SVM 進行價格區間分類,并分析特征重要性。
-
無監督學習
- 對手機特性進行聚類分析,揭示潛在分組模式。
- 利用肘部法選擇最佳聚類數,并評估聚類效果(輪廓系數等)。
-
可視化與解讀
- 通過高質量圖表展示分析結果,為決策提供支持。
- 輸出模型性能指標(如準確率、決定系數)并解釋結果的商業意義。
二、設計思路
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_wt
、battery_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 Noneprint(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"決定系數(R2):{r2:.2f}")
- 分析結果:
- 若 R2 接近 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}")
輸出:
- 聚類標簽反映了不同組群手機可能對應的特性偏好。
這段代碼從數據清洗到回歸、分類和聚類,每一步都設計得合理、高效,且充分考慮了數據和任務特點,為分析智能設備提供了系統支持。
三、可視化分析