华为和三星的距离还有多远?
17年的时候,华为曾放言 “三年之内超过苹果,五年之内超过三星”,成为全球第一手机厂商。可没想到刚过去一年,在知名研究公司 IDC 发布的 2019 年一季度全球手机市场统计中,华为就已经超越了苹果,仅次于三星,成为全球第二大手机手机厂商。
超越第二名之后,下一个目标就是第一名了,目前华为和三星的距离还有多远?可能比你想象中还要近很多…… 至少从京东上的手机销售数据来看,华为的销量完完全全碾压了三星(相差 20 倍左右),而后者在京东的销量和罗老师的锤子不相上下。
本文来自 「楼+ 数据分析与挖掘实战」的学员 TED wei 的作业,他爬取并分析了京东上的手机销售数据,有一些意想不到的发现和大家分享。
具体的步骤和分析结果如下:
项目思路
在这次项目挑战中,我爬取了京东手机销售网页,并单独获取了前20页销售的1199部手机信息,之后对爬取到的信息进行了清理和分析。
整个kernel的结构如下:
1. 数据获取
2. 数据清洗
3. 数据分析:
估计各品牌手机销量并进行比较分析
对决定手机价格因素的探索
尝试用机器学习方法预测手机价格
数据获取和清洗
手机的价格和评论数是需要经过javascript渲染的动态信息,单纯用requests模块是爬取不到的。我的解决方案是首先使用selenium的webbrowser模块和本地Chrome浏览器,爬取每一款手机在京东的内部id,价格,以及评论数,然后再根据爬取到的id找到每款手机的销售页面,爬取每款手机的关键参数。
(完整的代码可在文末查看。)
最后获取到的数据包含1199行,21列,每一行代表一款正在销售的手机,包含该手机的每一项参数(如价格,内存大小,像素,等等)。
数据清洗的步骤其实相当繁琐,完整的代码可在文末查看。
数据分析
拿到清洗好的数据后的第一个想法,便是对各个品牌的手机的销量进行一个比较。
由于京东只显示了每部手机的评论数量而不是具体销量,我们只好默认评论数量comments和销量成正比,从而估计各个手机品牌的销量占比:
我们可以对以上数据用扇形图更好地展现出来:
从以上扇形图我们可以估计,在中国市场销量前三的手机品牌分别是华为,苹果,小米,分别占到了总销量的30.6%,26.5%,21.6%,剩下的品牌销量则远远不及销量前三的品牌。
为了验证以上估计的正确性,我查阅了2019年中国手机市场各个品牌份额的 相关资料。发现华为,苹果,小米的占比分别为34%,9%,12%,除华为外,小米和苹果的市场份额数据均有较大出入。而vivo,oppo的市场份额则分别是19%和18%,与原来的数据差距就更大了。
如果京东的评论数量可以大致反映手机线上销售情况的话,我想造成数据有如此大差异的原因可能在于没有考虑中国市场的线下销售。根据平时的生活经验,苹果和小米的线下门店数量(特别是在小城市)是远远不及oppo、vivo的门店数量的。整个手机市场既包括线上市场也包括线下市场,而造成我统计到的数据与权威数据差异的原因,很可能是因为我的数据没有包含线下销售。
如果能够获得线下销售数据,那么也可以对以上推论进行进一步的验证。
还有一点出乎我意料的是,诺基亚和飞利浦手机的估计销量占比竟然也都超过了3%(甚至超过vivo,oppo),于是便想看看这两个品牌分别销售哪种价位手机:
中位数:208.5
平均价:336.1190476190476
这样看来,诺基亚和飞利浦的手机价格多在200-300元左右,再根据item id访问京东网站后,发现果不其然,这两个品牌所销售的大多是功能机。
(诺基亚有部分智能手机)在这个智能手机已经全面普及的年代,想不到功能机也还是有它的一亩三分地,并没有完全被市场淘汰(尤其是线上销售渠道)。
这可能是因为部分老人仍然更习惯使用功能机,以及功能机待机时间长,铃声音量大,能满足部分人群的特殊需求。
探究手机价格
另一个值得研究的问题是:手机的价格和手机配置参数的关系。为了让我们有一个整体把握,我们会先画出各个数值数据间的correlation matrix,然后再探索非数值数据(categorical data),如品牌,屏幕材料,对价格的影响。
画出Correlation Matrix 并进行分析
从上图我们可以看出,价格 price 和存储空间 ROM 以及内存 RAM 的关联度最大,分别达到了0.71和0.68。
其次便是电池容量battery,后置摄像头个数rear camera,屏幕大小screen size,关联度都分别达到了0.42。
这也比较符合我们常识性的判断。
我们还可以很明显的看到,评价个数comments的column和row都呈现深紫色,代表comments和各个数值参数的关联都很小。
用机器学习预测手机价格
在前面,我们探索了决定手机价格的几大因素,手机存储空间ROM
,内存RAM
,以及品牌,屏幕材料等都是决定手机价格的关键因素。
在这一小节中,我会使用回归决策树(Regression Decision Tree)的算法根据手机的外部特征来预测手机的价格。决策树的特征值采用了手机的品牌brand
、后置摄像头数量rear camera
、以及手机重量weight
作为我们的特征(feature),目标(target)当然是价格price
(省略五千字,具体分析代码可在文末查看。)
最终预测的数据偏差是这样的:
以上的 DataFrame error_df
表示该决策树模型对于每个品牌手机预测的准确性,误差都均在15%以内,这个模型还是相对比较准确的。
总结
虽然没有详细地呈现数据采集以及数据清理的过程,但是这两个步骤确是所花时间最多的步骤。京东的网页对于爬虫新手已经十分友好,但是头一回爬取 javascript 渲染后的价格、评论数据还是颇有挑战性。数据清理主要难点在于数据大多以自然语言呈现,要找到实际上的缺失值,以及将自然语言转变为数值(比如评论数comments
,后置摄像头数量rear cameras
)。除去写这个kaggle kernel,这两个步骤大概花了所有时间的70%。
对于采集到的数据进行分析也不是之前想象到的那么容易,为了发掘更深一层次的信息,对于每一次通过pandas函数得到的结果都需要认真地分析结果,思考为什么会有这个结果。
总之,这次项目挑战收获还是比较大,也是头一次自己完成数据的采集,清洗,以及分析的全过程。
完结撒花~ ???
该项目的完整报告,可以在这个联系查看:
https://www.kaggle.com/ted0001
还有很多优秀的同学的作品,可以在这里查看:
https://github.com/shiyanlou/louplus-dm/tree/master/Assignments
如果你也想像这些同学一样,系统地学习数据挖掘和数据分析技能,从小白成长为数据分析师。可以了解一下《数据分析与挖掘实战》,目前已经开到第六期,一线大牛授课,带你在6周内成长为有真实工作能力的数据科学工程师。
现在扫码添加小姐姐微信,还可领取:100元优惠券 + 数据分析与学习大纲~
更多优秀作品:
点击「阅读原文」,查看课程详情
现在扫码添加小姐姐微信咨询/报名,还可领取:
100元优惠券 + 数据分析与挖掘学习脑图!