Python对商品属性进行二次分类并输出多层嵌套字典

题目有点长,感觉好像也解释的不太清楚,但是大概意思就是,我们在逛一个网站的时候,譬如天猫,你会看到有“女装”、“男鞋”、“手机”等等分类,点击进去又会有相应的品牌,女装下面会有“snidle”、“伊芙丽”等品牌,男鞋下面会有“nike”、“adidas”等分类,如果一个用户在搜索nike,那么相应的标签应该会带上“男鞋”,通俗的说是会在输入框下面弹出“在男鞋下面搜索nike”,那么我写这篇文章就是要预测我们在输入一个品牌的时候,相对应的一级分类的概率是多少。

然并卵,我并没有天猫的相关数据,只有我公司的数据,但是这个数据肯定不能外泄,编数据又很麻烦,所以就不讲怎么用机器学习的算法去计算这个概率了,不过这也不难,待我有时间写个爬虫把数据弄下来再写,嘿嘿。 总之,做完后的预测数据应该是酱紫的:

这个表怎么看呢,第一行是一级分类的类别,第一列是二级分类的类别。以第三行为例,我们可以看到“scofield”这个品牌被分类为“女装/内衣”的概率是0.87473829,“女鞋/男鞋/箱包”的概率是0.03394293,“化妆品/个人护理”的概率是0.21392374。所以如果你在天猫的搜索框里搜索“scofield”,下面最可能弹出来的是“在女装/内衣中搜索scofield”。 但是这个表有个缺陷,就是0值太多,而且没有排序,看起来很乱,所以我们用python中的字典进行排序。 废话不多说,上代码:

#输出排序后的字典,美化前 {"太平鸟": "[["家纺/家饰/鲜花", "0"], ["男装/户外运动/", 0.8478237190000001], ["化妆品/个人护理", 0.11242904]]", "博士伦": "[["家纺/家饰/鲜花", "0"], ["医药保健", 0.89348974], ["化妆品/个人护理", 0.11323213]]", "a02": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.9844473220000001], ["女鞋/男鞋/箱包", 0.12493492]]", "周黑鸭": "[["家纺/家饰/鲜花", "0"], ["零食/进口食品/茶酒", 0.87323123], ["厨具/收纳/宠物", 0.12432232]]", "3M": "[["家纺/家饰/鲜花", "0"], ["家居建材", 0.68213814], ["厨具/收纳/宠物", 0.32344534]]", "博士": "[["家纺/家饰/鲜花", "0"]]", "sk-II": "[["家纺/家饰/鲜花", "0"], ["化妆品/个人护理", 0.98843487], ["腕表/珠宝饰品/眼镜", 0.02324442]]", "洗洁精": "[["家纺/家饰/鲜花", "0"], ["图书音像", 0.02124194]]", "finity": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.93392424], ["女鞋/男鞋/箱包", 0.07323483]]", "selected": "[["家纺/家饰/鲜花", "0"], ["男装/户外运动/", 0.9344398420000001], ["女鞋/男鞋/箱包", 0.07438472]]", "scofield": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.87473829], ["化妆品/个人护理", 0.21392374]]", "米其林": "[["家纺/家饰/鲜花", "0.02432412"], ["汽车/配件/用品", 0.98233342]]", "好奇": "[["家纺/家饰/鲜花", "0"], ["母婴玩具", 0.89472934], ["零食/进口食品/茶酒", 0.11321412]]", "佐卡伊": "[["家纺/家饰/鲜花", "0"], ["腕表/珠宝饰品/眼镜", 0.87342324], ["化妆品/个人护理", 0.13232944]]", "波司登": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.78765673], ["化妆品/个人护理", 0.20183924]]", "breadbutter": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.684728232], ["零食/进口食品/茶酒", 0.29434974]]", "北极绒": "[["家纺/家饰/鲜花", "0.84932498"], ["家居建材", 0.11321321], ["大家电/生活电器", 0.05213923]]", "Adidas": "[["家纺/家饰/鲜花", "0"], ["男装/户外运动/", 0.8297434340000001], ["女鞋/男鞋/箱包", 0.14974892]]", "当当网": "[["家纺/家饰/鲜花", "0"], ["图书音像", 0.78947234]]", "snidle": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.83927289], ["女鞋/男鞋/箱包", 0.15237234]]", "TISSOT": "[["家纺/家饰/鲜花", "0"], ["腕表/珠宝饰品/眼镜", 0.87545234], ["大家电/生活电器", 0.13942309]]", "曼妮芬": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.93837427], ["化妆品/个人护理", 0.07239742]]", "New Balance": "[["家纺/家饰/鲜花", "0"], ["女鞋/男鞋/箱包", 0.57823432], ["母婴玩具", 0.43237442]]", "Jackjones": "[["家纺/家饰/鲜花", "0"], ["男装/户外运动/", 0.883293743], ["女鞋/男鞋/箱包", 0.10343298]]", "ZARA": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.78283128], ["女鞋/男鞋/箱包", 0.12429483]]", "海尔": "[["家纺/家饰/鲜花", "0。1323243"], ["大家电/生活电器", 0.79103821], ["厨具/收纳/宠物", 0.09354832]]", "nike": "[["家纺/家饰/鲜花", "0"], ["男装/户外运动/", 0.8912323129999999], ["化妆品/个人护理", 0.06163211]]", "双立人": "[["家纺/家饰/鲜花", "0"], ["厨具/收纳/宠物", 0.98943242], ["医药保健", 0.01943242]]", "苹果": "[["家纺/家饰/鲜花", "0"], ["手机/数码/电脑办公", 0.89232342], ["汽车/配件/用品", 0.05293713]]", "兰芝": "[["家纺/家饰/鲜花", "0"], ["化妆品/个人护理", 0.78423234], ["腕表/珠宝饰品/眼镜", 0.13213232]]"} #输出排序后的字典,美化后 {"太平鸟": "[["家纺/家饰/鲜花", "0"], ["男装/户外运动/", 0.8478237190000001], ["化妆品/个人护理", 0.11242904]]", "博士伦": "[["家纺/家饰/鲜花", "0"], ["医药保健", 0.89348974], ["化妆品/个人护理", 0.11323213]]", "a02": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.9844473220000001], ["女鞋/男鞋/箱包", 0.12493492]]", "周黑鸭": "[["家纺/家饰/鲜花", "0"], ["零食/进口食品/茶酒", 0.87323123], ["厨具/收纳/宠物", 0.12432232]]", "3M": "[["家纺/家饰/鲜花", "0"], ["家居建材", 0.68213814], ["厨具/收纳/宠物", 0.32344534]]", "博士": "[["家纺/家饰/鲜花", "0"]]", "sk-II": "[["家纺/家饰/鲜花", "0"], ["化妆品/个人护理", 0.98843487], ["腕表/珠宝饰品/眼镜", 0.02324442]]", "洗洁精": "[["家纺/家饰/鲜花", "0"], ["图书音像", 0.02124194]]", "finity": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.93392424], ["女鞋/男鞋/箱包", 0.07323483]]", "selected": "[["家纺/家饰/鲜花", "0"], ["男装/户外运动/", 0.9344398420000001], ["女鞋/男鞋/箱包", 0.07438472]]", "scofield": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.87473829], ["化妆品/个人护理", 0.21392374]]", "米其林": "[["家纺/家饰/鲜花", "0.02432412"], ["汽车/配件/用品", 0.98233342]]", "好奇": "[["家纺/家饰/鲜花", "0"], ["母婴玩具", 0.89472934], ["零食/进口食品/茶酒", 0.11321412]]", "佐卡伊": "[["家纺/家饰/鲜花", "0"], ["腕表/珠宝饰品/眼镜", 0.87342324], ["化妆品/个人护理", 0.13232944]]", "波司登": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.78765673], ["化妆品/个人护理", 0.20183924]]", "breadbutter": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.684728232], ["零食/进口食品/茶酒", 0.29434974]]", "北极绒": "[["家纺/家饰/鲜花", "0.84932498"], ["家居建材", 0.11321321], ["大家电/生活电器", 0.05213923]]", "Adidas": "[["家纺/家饰/鲜花", "0"], ["男装/户外运动/", 0.8297434340000001], ["女鞋/男鞋/箱包", 0.14974892]]", "当当网": "[["家纺/家饰/鲜花", "0"], ["图书音像", 0.78947234]]", "snidle": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.83927289], ["女鞋/男鞋/箱包", 0.15237234]]", "TISSOT": "[["家纺/家饰/鲜花", "0"], ["腕表/珠宝饰品/眼镜", 0.87545234], ["大家电/生活电器", 0.13942309]]", "曼妮芬": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.93837427], ["化妆品/个人护理", 0.07239742]]", "New Balance": "[["家纺/家饰/鲜花", "0"], ["女鞋/男鞋/箱包", 0.57823432], ["母婴玩具", 0.43237442]]", "Jackjones": "[["家纺/家饰/鲜花", "0"], ["男装/户外运动/", 0.883293743], ["女鞋/男鞋/箱包", 0.10343298]]", "ZARA": "[["家纺/家饰/鲜花", "0"], ["女装/内衣", 0.78283128], ["女鞋/男鞋/箱包", 0.12429483]]", "海尔": "[["家纺/家饰/鲜花", "0。1323243"], ["大家电/生活电器", 0.79103821], ["厨具/收纳/宠物", 0.09354832]]", "nike": "[["家纺/家饰/鲜花", "0"], ["男装/户外运动/", 0.8912323129999999], ["化妆品/个人护理", 0.06163211]]", "双立人": "[["家纺/家饰/鲜花", "0"], ["厨具/收纳/宠物", 0.98943242], ["医药保健", 0.01943242]]", "苹果": "[["家纺/家饰/鲜花", "0"], ["手机/数码/电脑办公", 0.89232342], ["汽车/配件/用品", 0.05293713]]", "兰芝": "[["家纺/家饰/鲜花", "0"], ["化妆品/个人护理", 0.78423234], ["腕表/珠宝饰品/眼镜", 0.13213232]]"}

    这里结果显示的不太好看,其实在linux下输出很清晰,看图片:

这个的难点在于python的多层嵌套字典的输出和删除python字典中的值,譬如在这里就是删除字典中value =

0的值,我最开始的时候是把value值提取出来放到一个列表里去删除,但是删除之后至少还会保留一个0值,后来想到可以把字典的key和value反转,用dict.pop删除key = 0的键值对就可以了。第二个难点就是多层嵌套字典的排序。我们知道字典是无序的,所以只能把字典按照value排序,然后把排序后的结果存到一个list里,在和原来对应的key值列表组合成字典,这样就方便多了。

ps:这个天猫数据是我编的 = =

via:http://blog.csdn.net/qq-15034741/article/details/5069918

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-11-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

2018-11-18 在 GitHub 上保持 365 天全绿是怎样一种体验?Most active GitHub users (git.io/top)

先看看这个文章https://www.zhihu.com/question/34043434/answer/57826281

14620
来自专栏CreateAMind

CAT Vehicle Testbed 自动驾驶仿真 gps 视觉 雷达

https://cps-vo.org/group/CATVehicleTestbed/wiki

13530
来自专栏Android知识点总结

看得见的数据结构Android版之开篇前言

9120
来自专栏菩提树下的杨过

PixelBender(着色器)初体验

只要是玩过photoshop的人,一定会对ps中的各式各样、功能强大的滤镜(filter)留下深刻的印象。 Adobe是靠图形处理软件起家的,这方面一直是它的强...

29860
来自专栏一个会写诗的程序员的博客

java.base.jmod

/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/jmods$ jmod list java....

18520
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

1.3K80
来自专栏叁金大数据

EmguCV学习——视频与图片互转

其实视频转图片在上篇文章中已经有些眉目了,其实就是按帧读取视频,然后把帧保存就ok。然后自己再加个进度条美化一下。。。这代码简单易懂,还是直接上代码吧。

27310
来自专栏GIS讲堂

Openlayers中热力图的实现

Heatmap 是用来呈现一定区域内的统计度量,最常见的网站访问热力图就是以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示。Heatmap.j...

55930
来自专栏菩提树下的杨过

Flash/Flex学习笔记(40):弹性运动续--弹簧

上一篇里演示的弹性运动加上摩擦力因素后,物体最终基本上都会比较准确的停在目标位置。但是我们回想一下现实世界中的弹簧,如果把弹簧的一头固定起来(即相当于目标点),...

20750
来自专栏叁金大数据

EmguCV学习——简单算法 差分与高斯

公司项目需要检测运动物体,我对opencv也没啥研究,google了好久看了好多方法,最简单的就是差分与高斯背景建模了。

18530

扫码关注云+社区

领取腾讯云代金券