京东全网手机爬虫scrapy_redis及决策树数据分析
参考了实验楼并进行延伸
SqlServer版本:13.0.1742.0 (也可使用mongodb)
Python版本3.7.1
软件:Pycharm , Navicat , SSMS,RedisDesktopManager
项目架构:
爬虫scrapy_redis框架:Jdphone
jd_category.py (手机分类的名称以及网址) jd_product.py(手机详细信息)
数据分析:test
data_clean.py 清洗数据 analysis.py 图表分析
DesicionTree.py 决策树预测 GraphvizTree 决策树可视化
数据库表:
phone_url.sql phone_info.sql 清洗后:phone_info_cleaned.csv
京东手机销售数据分析:(回归CART)
第一步:爬虫爬京东手机各项数据(品牌,屏幕材料,内存,存储空间,电池容量
摄像头数,屏幕大小,评分,价格,评论数等)
第二步:存储到SqlServer数据库,转换输出成csv文件进行分析
第三步:通过pandas清洗数据,统计csv文件各类属性的数量
第四步:通过matplotlib以图表的形式可视化分析
第五步:用回归决策树(Regression Decision Tree) 预测 品牌,重量,评论等属性对价格的影响
问题及解决方案:
1.爬虫抓取手机参数,价格和评论写在动态js里,而其他属性大多在html里用xpath可以抓取。两个要同时兼并,最后把js的url写到html方法进行返回从而抓取。
2.保存数据到SqlServer数据库,之前保存到MongoDB全部当字符串即可,而sql需要考虑是否空值,如果强行获取不能存入数据库。还有pyssml模块导入由于python版本问题会有警告问题,可以忽略。(提前在数据库中建好表,再用insert语句插入)
3.数据清洗,首先把数据库文件以csv形式导出,然后用pandas和numpy对数据进行规范,因为决策树回归算法等需要用数值型,所以要把字符型转换,同时剔除无关词汇,思路简单但过程繁琐。
4.数据分析,数据项太多比如品牌 以至于图可能信息展示不完全。
5.运用决策树预测分析,由于部分数据为空以及差异太大,比如价格低至-1,高至4w,导入部分品牌平均绝对误差可能会大,但是绝大部分都在正常范围。
爬取:(7853, 25)
7853条手机数据,25条属性
分析:
品牌词云图
品牌饼图
结论:网商市场占比 华为>apple>飞利浦>小米>vivo>opple
和线下销售情形基本符合
属性关联度影响热图
结论: 此图只考虑了数值类属性,未考虑字符串如 年份 品牌 等
与价格关联度最高的有 好评率0.77 差评率0.7 评论数0.64 (可以都理解为评论数)
其他属性如 摄像头数 0.66 运行内存RAM 0.45 物理内存ROM 0.45
而 屏幕大小 重量 和 长度这些因素对价格的影响没有那么大
手机品牌对应价格图
结论:根据手机价格中位数来大致估计各品牌。
价格最高的是Vertu(奢侈品)–25000
偏高的有 8848 gemry(詹姆士) royole(柔宇) vetas kreta --均价12000 (轻奢)
大众品牌:苹果 --7000 华为 --3000 一加–4000 三星–6000 vivo–2000
而像 诺基亚 菲利普 这种品牌大多都是老人机 和我们固有的印象相符,平均价格在200,300左右
屏幕材料对应价格图
结论:从手机屏幕材料对应手机价格来判断关联度,如图示
价格依次排序:
OLED折叠屏–28000 XDR AMOLED-- 15000 a-si LCD --14000
Dynamic AMOLED (三星)–7000 OLED(华为) - 4000
LCD (vivo/小米) / LTPS (华为)–2000 IPS–1000 TFT(荣耀)–500
部分屏幕材料对应价格图
结论:由上图总结抽选了部分代表来分析价格分布。红色部分为IPS和TFT,这些材料大多应用于像诺基亚这种老年机和华为的低端机,基本价格都在1000多,而绿色部分为Dynamic AMOLED,对应的是三星这种屏幕好的手机,大多价格在4000多,而蓝色部分对应的是OLED ,对应的是苹果手机平均价格在7000左右,这和我们平常的认知相符。
通过DecisionTreeRegressor回归树分析一下模型的平均误差:
(总数据大概为7800条,下图为缺失数据,由上文中热图属性来分析重要属性,运存和内存缺失了三分之一,摄像头数缺失一半,评论虽然未缺失,但是未处理0这个数据可能会造成误差)
分析准确性:(以品牌为索引,分析其他属性对价格影响的平均误差率)
1.总评论数 和 好评数 以及重量的影响误差:
大部分误差都小于百分之十,说明评论和重量对价格的影响切实有效
2.运存 和 内存 的影响误差:
结论:可能因为运存和内存缺少数据二分之一太多,导致误差变大。
可视化