【python】python基于機器學習與數據分析的二手手機特性關聯與分類預測(源碼+數據集)【獨一無二】

請添加圖片描述


👉博__主👈:米碼收割機
👉技__能👈:C++/Python語言
👉專__注👈:專注主流機器人、人工智能等相關領域的開發、測試技術。


python基于機器學習與數據分析的二手手機特性關聯與分類預測(源碼+數據集)【獨一無二】


目錄

  • python基于機器學習與數據分析的二手手機特性關聯與分類預測(源碼+數據集)【獨一無二】
  • 一、設計要求
  • 二、設計思路
      • **1. 數據讀取與預處理**
      • **2. 描述性統計與分布分析**
      • **3. 分類變量分布分析**
      • **4. 熱力圖分析(RAM與內核搭配特征)**
      • **5. 線性回歸模型**
      • **6. 聚類分析**
  • 三、可視化分析


一、設計要求

本項目的目標是分析智能手機數據,揭示其特性與價格區間的聯系,并利用機器學習技術進行預測和聚類。設計涵蓋數據預處理、探索性分析、模型構建與性能評估:

  1. 數據預處理

    • 讀取多個數據源,清理缺失值、重復值和異常值。
    • 新增業務特征 “屏幕尺寸”,提升數據分析深度。
  2. 數據分析與可視化

    • 基于核心數值特征(如手機重量、電池容量等)進行統計特征分析。
    • 利用餅圖、直方圖、熱力圖等方式展現變量分布和關聯。
  3. 監督學習

    • 應用線性回歸模型預測價格區間(連續變量)。
    • 使用 SVM 進行價格區間分類,并分析特征重要性。
  4. 無監督學習

    • 對手機特性進行聚類分析,揭示潛在分組模式。
    • 利用肘部法選擇最佳聚類數,并評估聚類效果(輪廓系數等)。
  5. 可視化與解讀

    • 通過高質量圖表展示分析結果,為決策提供支持。
    • 輸出模型性能指標(如準確率、決定系數)并解釋結果的商業意義。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述


二、設計思路

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 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}")

輸出:

  • 聚類標簽反映了不同組群手機可能對應的特性偏好。

這段代碼從數據清洗到回歸、分類和聚類,每一步都設計得合理、高效,且充分考慮了數據和任務特點,為分析智能設備提供了系統支持。


三、可視化分析

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

---

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67329.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手撕Diffusion系列 - 第十一期 - lora微調 - 基于Stable Diffusion(代碼)

手撕Diffusion系列 - 第十一期 - lora微調 - 基于Stable Diffusion(代碼) 目錄 手撕Diffusion系列 - 第十一期 - lora微調 - 基于Stable Diffusion(代碼)Stable Diffusion 原理圖Stable Diffusion的原理解釋Stable Diffusion 和Di…

前端【8】HTML+CSS+javascript實戰項目----實現一個簡單的待辦事項列表 (To-Do List)

目錄 一、功能需求 二、 HTML 三、CSS 四、js 1、綁定事件與初始設置 2.、綁定事項 (1)添加操作: (2)完成操作 (3)刪除操作 (4)修改操作 3、完整js代碼 總結…

C++標準線程庫實現優雅退出的方式

目錄 1.通過設置共享退出標記 2.使用std::jthread創建線程 3.定義消息類型的方式 4.注意事項 1.通過設置共享退出標記 定義一個退出變量bool stop false; 表示線程是否應該停止。在主線程中設置標記stoptrue,然后join一直等待,然后線程循環檢測到stop是否為tru…

Java學習教程,從入門到精通,JDBC插入記錄語法及案例(104)

JDBC插入記錄語法及案例 一、JDBC插入記錄語法 在JDBC中,插入記錄主要通過執行SQL的INSERT語句來實現。其基本語法如下: INSERT INTO 表名 (列1, 列2, ..., 列n) VALUES (值1, 值2, ..., 值n);表名:需要插入記錄的表的名稱。列1, 列2, …,…

vue事件總線(原理、優缺點)

目錄 一、原理二、使用方法三、優缺點優點缺點 四、使用注意事項具體代碼參考: 一、原理 在Vue中,事件總線(Event Bus)是一種可實現任意組件間通信的通信方式。 要實現這個功能必須滿足兩點要求: (1&#…

圖像處理之HSV顏色空間

目錄 1 RGB 的局限性 2 HSV 顏色空間 3 RGB與HSV相互轉換 4 HSV顏色模型對圖像的色相、飽和度和明度進行調節 5 演示Demo 5.1 開發環境 5.2 功能介紹 5.3 下載地址 參考 1 RGB 的局限性 RGB 是我們接觸最多的顏色空間,由三個通道表示一幅圖像,分…

DeepSeek是由杭州深度求索人工智能基礎技術研究有限公司(簡稱“深度求索”)發布的一系列人工智能模型

DeepSeek是由杭州深度求索人工智能基礎技術研究有限公司(簡稱“深度求索”)發布的一系列人工智能模型,其在知識類任務上展現出了卓越的性能。以下是對DeepSeek的詳細介紹,內容雖無法達到10000字,但會盡可能全面且深入地…

【C++高并發服務器WebServer】-9:多線程開發

本文目錄 一、線程概述1.1 線程和進程的區別1.2 線程之間共享和非共享資源1.3 NPTL 二、線程操作2.1 pthread_create2.2 pthread_exit2.3 pthread_join2.4 pthread_detach2.5 patch_cancel2.6 pthread_attr 三、實戰demo四、線程同步五、死鎖六、讀寫鎖七、生產消費者模型 一、…

14-6-1C++STL的list

(一)list容器的基本概念 list容器簡介: 1.list是一個雙向鏈表容器,可高效地進行插入刪除元素 2.list不可以隨機存取元素,所以不支持at.(pos)函數與[ ]操作符 (二)list容器頭部和尾部的操作 list對象的默…

在sortablejs的拖拽排序情況下阻止input拖拽事件

如題 問題 在vue3的elementPlus的table中,通過sortablejs添加了行拖拽功能,但是在行內會有輸入框,此時拖拽輸入框會觸發sortablejs的拖拽功能 解決 基于這個現象,我懷疑是由于拖拽事件未綁定而冒泡到后面的行上從而導致的拖拽…

21.Word:小趙-畢業論文排版?【39】

目錄 題目? NO1.2 NO3.4 NO5.6 NO7.8.9 NO10.11.12 題目 NO1.2 自己的論文當中接收老師的修改:審閱→比較→源文檔:考生文件夾:Word.docx→修訂的文檔:考生文件夾:教師修改→確定→接收→接收所有修訂將合并之…

leetcode_鏈表 876.鏈表的中間節點

876.鏈表的中間節點 給你單鏈表的頭結點 head ,請你找出并返回鏈表的中間結點。如果有兩個中間結點,則返回第二個中間結點。思路:快慢指針,創建兩個指針fast和slow,fast指針每次移動兩步,slow指針每次移動…

深度學習 DAY3:NLP發展史及早期的前饋神經網絡(ANN)及多任務學習

NLP發展史 NLP發展脈絡簡要梳理如下: 2001 - Neural language models(神經語言模型) 2008 - Multi-task learning(多任務學習) 2013 - Word embeddings(詞嵌入) 2013 - Neural networks for NL…

全面了解 Web3 AIGC 和 AI Agent 的創新先鋒 MelodAI

不管是在傳統領域還是 Crypto,AI 都是公認的最有前景的賽道。隨著數字內容需求的爆炸式增長和技術的快速迭代,Web3 AIGC(AI生成內容)和 AI Agent(人工智能代理)正成為兩大關鍵賽道。 AIGC 通過 AI 技術生成…

54.數字翻譯成字符串的可能性|Marscode AI刷題

1.題目 問題描述 小M獲得了一個任務,需要將數字翻譯成字符串。翻譯規則是:0對應"a",1對應"b",依此類推直到25對應"z"。一個數字可能有多種翻譯方法。小M需要一個程序來計算一個數字有多少種不同的…

FileReader使用

FileReader : 讀取文件內容的api,,,在前端處理上傳的文件,,比如預覽圖片 readAsDataURL(file) : 讀取為base64編碼的 data urlreadAsText() : 讀取為文本readAsArrayBuffer() : 讀取為二進制 …

RabbitMQ5-死信隊列

目錄 死信的概念 死信的來源 死信實戰 死信之TTl 死信之最大長度 死信之消息被拒 死信的概念 死信,顧名思義就是無法被消費的消息,一般來說,producer 將消息投遞到 broker 或直接到queue 里了,consumer 從 queue 取出消息進…

JavaScript系列(48)-- 3D渲染引擎實現詳解

JavaScript 3D渲染引擎實現詳解 🎮 今天,讓我們深入探討JavaScript的3D渲染引擎實現。通過WebGL和現代JavaScript技術,我們可以構建一個功能完整的3D渲染系統。 3D渲染基礎概念 🌟 💡 小知識:3D渲染引擎的…

10JavaWeb——SpringBootWeb案例01

前面我們已經講解了Web前端開發的基礎知識,也講解了Web后端開發的基礎(HTTP協議、請求響應),并且也講解了數據庫MySQL,以及通過Mybatis框架如何來完成數據庫的基本操作。 那接下來,我們就通過一個案例,來將前端開發、后…

【面試題】 Java 三年工作經驗(2025)

問題列表 為什么選擇 spring boot 框架,它與 Spring 有什么區別?spring mvc 的執行流程是什么?如何實現 spring 的 IOC 過程,會用到什么技術?spring boot 的自動化配置的原理是什么?如何理解 spring boot 中…