今天给大家推荐一个数据分析与挖掘的实战项目案例“基于京东手机销售数据用回归决策树预测价格”。该项目先基于京东手机销售数据做出一系列分析后,利用回归决策树仅根据手机外部特征进行价格预测。
本项目来自于实验楼《楼+ 数据分析与挖掘实战》第五期学员:Ted_Wei。
数据获取
由于手机的价格以及评论数是需要经过 javascript 渲染的动态信息,单纯用 requests 模块是爬取不到的。我的解决方案是首先使用 selenium 的 webbrowser 模块使用本地 Chrome 浏览器爬取每一款手机在京东的内部id,价格,以及评论数。然后再根据爬取到的id找到每款手机的销售页面,爬取每款手机的关键参数。
爬虫代码
parsing_code.py
可通过此页面: https://www.kaggle.com/ted0001/dm05-998494/data 获取。
数据清洗
获取到的数据包含1199行,21列,每一行代表一款正在销售的手机,每一列包含关于手机的一项参数(比如价格,内存大小,像素,等等)。 获取到的数据大多为自然语言,非数值信息,对于分析十分不友好。所以数据分析的重点在于,找到实际上的缺失信息(如‘无’,‘参考官方数据’等都可认为是缺失数据NaN),以使用re模块解析自然语言,提取其中有用的数值信息。
数据清洗的步骤其实相当繁琐,如果把代码贴出也会占用过多篇幅,因此数据清洗的代码
data_clean.py
可通过此页面: https://www.kaggle.com/ted0001/dm05-998494/data 获取。
数据分析
下面直接进入正题,主要完成估计各品牌手机销量并进行比较分析、对决定手机价格因素的探索、尝试用机器学习方法预测手机价格。
首先调用所需的模块
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error as mae
读取已经清洗好的数据,数据也可在 https://www.kaggle.com/ted0001/dm05-998494/data 获取。
data=pd.read_csv('../input/data-acquisitioncleaning/cleaned_data.csv')
data=data.set_index(['Unnamed: 0']) #DataFrame在存储为csv file以后原来的index会变为一个列,因此要重新设置index
data.shape
输出结果:
(1199,21)
估计各品牌手机销量并进行比较分析
拿到清洗好的数据后的第一个想法,便是对各个品牌的手机的销量进行一个比较。由于京东只显示了每部手机的评论数量而不是具体销量,我们只好默认评论数量comments和销量成正比,从而估计各个手机品牌的销量占比
pie_plt=data.groupby(['brand']).sum()['comments'].sort_values(ascending=False)#统计每个品牌评论总数,以此作为我们对销量的估计
pie_plt
输出结果:
brand
HUAWEI 11320592.0
Apple 9797100.0
XIAOMI 7995236.0
NOKIA 1324000.0
Philips 1227100.0
OPPO 1205300.0
vivo 1101330.0
K-Touch 793300.0
MEIZU 574900.0
SAMSUNG 539800.0
smartisan 364000.0
lenovo 275500.0
realme 157000.0
Meitu 109200.0
nubia 86000.0
chilli 58000.0
360 31000.0
ZTE 17000.0
Coolpad 12000.0
BlackBerry 10000.0
WE 90.0
Name: comments, dtype: float64