原标题:利用pandas+python制作100G亚马逊用户评论数据词云

数据挖掘入门与实战 公众号: datadw

我们手里面有一个差不多100G的亚马逊用户在购买商品后留下的评论数据(数据格式为json)。我们需要统计这100G数据中,出现频率最高的100个词语。然后制作一个词云表现表现出来,所谓的词云,就是类似于这样的一张图片

,显然还是图片让我们对单词出现的热度一目了然。

问题难点

数据量太大,而我的电脑内存只有32G,无法将数据一次性装入内存。需要我们队数据进行分块处理。在解决问题之前,我们需要对要处理的数据一探究竟。我的数据来源是公开的,由MIT一位教授放在,http://jmcauley.ucsd.edu/data/amazon/

只需要给他发一个邮件,说一下自己的意图,就可以直接下载了。下面我结合着代码,介绍整个项目的流程。

import dask.bag as db

import ujson as json #听说用ujson解析比普通json快好几倍哦

import pandas as pd

import numpy as np

import gzip #解析gzip等压缩文件

import re

b = db.from_filenames(r'E:研究生阶段课程作业pythonzhihu_bigdatacomplete.json.gz',encoding='utf-8').map(json.loads)

b.take(1) #检查数据的格式

>>out[1]:'asin': 'B003UYU16G',

'helpful': [0, 0],

'overall': 5.0,

'reviewText': "It is and does exactly what the deion said it would be and would do. Couldn't be happier with it.",

'reviewTime': '11 21, 2012',

'reviewerID': 'A00000262KYZUE4J55XGL',

'reviewerName': 'Steven N Elich',

'summary': "Does what it's supposed to do",

'unixReviewTime': 1353456000}

在这段代码中,我们首先读取complete.json.gz里面的数据,这里我用到了dask里面的bag类型,dask会根据你的内存情况来适当读取不超过内存大小的数据

因为我们只对里面的 "reviewText"字段感兴趣,我们对其他的字段直接忽略。在提取" "reviewText"数据之前,我们看一下需要处理多少行这样的数据。

print(sum([1 for _ in gzip.open(r'E:研究生阶段课程作业pythonzhihu_bigdatacomplete.json.gz')])) #计算用户的评论数目

out[2]:143674325 #差不多1.5亿行数据,在我电脑上跑了差不多三分钟

没错,只有一行数据,不用把数据全部装入内存,我们就可以计算这100G数据,究竟有多少个类似于out[1]这样的数据段。你问我为什么喜欢python,这就是理由,因为他强大,简洁,优雅,代码可读性好。

我们需要处理的数据差不多有100G,远超我们的内存极限。

采用的步骤如下:

step 1:对每一个用户数据,转化成字典结构。

step 2: 提取里面的 reviewText

step 3: 使用分词,把句子转化成单词

step 4:对每个单词进行hash,对于相同的hash值,写进txt文件

step 5: 对于同一个单词,肯定在一个txt文件中,分别统计单词的出现频率

step 6: 制作词云

在这片文章的剩下内容,我将针对这六个步骤进行详细讲解:

tempDir = 'E:/研究生阶段课程作业/python/好玩的数据分析/制作亚马逊200G用户评论词云' #把评论数据分散到这个文件下下面的100个txt文件

pattern = re.compile(r'w+') #编译正则表达式,把短句转化成list

def hashFile():

temp_path_list = []

for i in range(1,101):

temp_path_list.append(open(tempDir+'/'+str(i)+'.txt',mode='w'))

for each in (gzip.open(r'E:研究生阶段课程作业pythonzhihu_bigdatacomplete.json.gz')):

sentence = eval(each) # turn string to dict

words = sentence['reviewText'] #提取 reviewText

words_list = pattern.findall(words) # example:words:"I love china" to words_list:["I","love","china"]

#print(words_list)

for word in words_list:

if not word.lower() in stopwords and len(word) >= 2: #忽略一些太简单的单词,例如“a”,"an",把你不想要的的单词全部放在stopwords中。最好是set格式的stopwords。

word = word.lower() #全部为小写单词

print(hash(word)%100) #对单词进行hash,相同的单词一定会hash到同一个文件中

temp_path_list[hash(word)%100].write(word+'n') #写入文件

for f in temp_path_list:

f.close()

hashFile()

以上的一段代码,首先是遍历100G的数据,提取每一行中的我们感兴趣的部分。然后使用正则表达式,把字符串转化成单词列表,过滤到我们不感兴趣的单词。对剩下的单词进行hash,这样我们可以把相同的单词写到同一个文件中,因为我们的目标是找出出现频率前1000的单词,那么我们只要对这1000个文件,各自找出出现频率在1000以内的单词,在进行排序,即可得出最终的结果。

经过上面的步骤,我们已经把可能相同的单词放在了一个文件中,共计100个文件

下面分别读取每个文件到一个列表中

计算每个列表出现频率最高的1000个单词

最后在找出100个文件中出现频率最高的1000个单词

import os

from collections import Counter

results = Counter() # 初始化

for root, dirs, files in os.walk(r'E:研究生阶段课程作业python好玩的数据分析制作亚马逊200G用户评论词云'):

for file in files:

with open(os.path.join(root, file)) as f:

words_list = f.readlines()

words_list = list(map(lambda x: x.strip('n'),words_list))

word_common_1000 = Counter(words_list).most_common(1000)

results.update(word_common_1000)

以上的一段代码,把100个txt里面的单词,分别遍历,找出每个出现频率为1000的单词,全部放在results中

import heapq

words_fren_list = list(results.keys())

words_fren_list_100 = heapq.nlargest(100,words_fren_list,key = lambda x:x[1])

哈哈大功告成,特别提醒一下,这里我是用了一个小的trick,找出出现频率最高的100个单词的时候,我并没有对全部数据进行排序,而是使用了heaapq中的nlarges函数,可以提升不小的效率。

最后根据这些词出现的频率,画出词云。

from wordcloud import WordCloud

wordcloud = WordCloud(max_font_size=40, relative_scaling=.5).fit_words(words_fren_list_100)

import matplotlib.pyplot as plt

plt.imshow(wordcloud)

plt.axis("off")

plt.imshow()

最后的结果如下图所示:

数据挖掘入门与实战

教你机器学习,教你数据挖掘

公众号: weic2c

责任编辑:

python根据频率画出词云_利用pandas+python制作100G亚马逊用户评论数据词云相关推荐

  1. python评论数据分析_Python亚马逊智能产品评论数据分析

    一.概述 本文主要使用Python对亚马逊智能产品评论数据集进行数据清洗,通过对不同产品的评分进行变换后得到产品的好评数.中评数.差评数以及对应的比率等,通过上述这些指标,找到好评率最高的产品.并尝试 ...

  2. 利用python对亚马逊智能产品评论进行分析

    一.分析目标 Amazon是网络上最早开始经营电子商务的公司之一,是全球电商行业的佼佼者.而人们在电商平台进行购物时,会根据评论数量以及好评和坏评作为判断依据来购买商品.故本文采取亚马逊智能产品评论作 ...

  3. Amazon EMR(Elastic MapReduce):亚马逊Hadoop托管服务运行架构Hadoop云服务之战:微软vs.亚马逊...

    http://s3tools.org/s3cmd Amazon Elastic MapReduce (Amazon EMR)简介 Amazon Elastic MapReduce (Amazon EM ...

  4. 亚太地区,阿里云凭什么连续两年领先亚马逊AWS?

    两年前,阿里云在迪拜推出辐射中东和北非地区的数据中心时,我写了一篇文章:<阿里云能否把亚马逊拉下神坛?>.在文章中,我的观点是:尽管阿里云与亚马逊的局部战争才刚开打,但未来阿里云很可能会将 ...

  5. 如何将另外一个表里的数据与联动_跨境电商(亚马逊)后台财务数据包

    亚马逊后台的财务数据包是刚进这个行业的财务人员最希望能了解熟悉的,这块也是相对于国内财务比较有难度的内容,主要难点是亚马逊平台是新的东西,国内财务对规则,费用内容,流程都比较懵,另外就是各项资料都是外 ...

  6. 基于Python获取亚马逊的评论

    上次亚马逊的商品信息都获取到了,自然要看一下评论的部分.用户的评论能直观的反映当前商品值不值得购买,亚马逊的评分信息也能获取到做一个评分的权重. 亚马逊的评论区由用户ID,评分及评论标题,地区时间,评 ...

  7. 【AI每日播报】亚马逊发布多项AI云服务 魅族初试人工智能化系统

    [AI每日播报]每日早8点为您搜罗24小时内AI圈新鲜要闻,涵盖从资讯到声音.从论文到活动的全方位AI消息. CSDN AI周刊也已全面开启: 订阅请点击这里. 以下为今日要闻: 资讯 亚马逊发布多项 ...

  8. Python实现通过ASIN爬取亚马逊产品评论

    Python实现通过ASIN爬取亚马逊产品评论 一.最近一直在研究爬取亚马逊评论相关的信息,亚马逊的反爬机制还是比较严格的,时不时就封cookie啊封ip啊啥的.而且他们的网页排版相对没有那么规则,所 ...

  9. 服务的实例已在运行中_亚马逊首次把macOS引入云服务

    亚马逊 (Amazon) 有史以来第一次将 macOS 引入其 AWS 云服务.新的 Mac mini 实例将在亚马逊弹性计算服务 (EC2) 上提供,允许开发者为 iPhone.iPad.Mac 和 ...

最新文章

  1. 第十周项目5:贪心的富翁
  2. 《性能测试从零开始--LoadRunner入门》读书笔记(四)
  3. php cksql,金蝶KSQL规范
  4. 【OpenCV学习笔记】【函数学习】十(常用的OpenCV函数汇总说明)
  5. 37、HTMLQQ彩贝高级搜索框页面制作,鼠标悬停出现下拉框
  6. Halcon教程二:内置实例程序库
  7. chrome主页被修改(Google Chrome主页被hao123劫持解决办法)
  8. 你好2010,再见2009
  9. Google Scanned Objects: A High-Quality Dataset of 3D Scanned Household Items【google 3D数据集】
  10. js 获取每个月的第一天和最后一天日期
  11. 转:PM产品设计九步法
  12. 如何搭建自己的博客网站(手把手教你搭建免费个人博客网站)
  13. Oracle怎么安装
  14. yu bie diu
  15. 面试常问的sql语句
  16. javax.mail包的官网下载地址
  17. dwcc2019写php,dreamweaver
  18. 工程机械比例阀电流采集方案
  19. 使用zabbix聚合图形
  20. VScode 状态条 StatusBar

热门文章

  1. WebAssembly 为何能改变软件的分发?
  2. 跑路后再删库?思科前员工离职后恶意删库,损失达 240 万美元!
  3. 为什么许多程序员讨厌结对编程?
  4. 漫画 | 如何获得关系数据库王国的永久居住权?
  5. Python 大数据分析疫情:如何实现实时数据爬取及 Matplotlib 可视化?
  6. 20行 Python 代码爬取王者荣耀全英雄皮肤 | 原力计划
  7. Facebook 与 Twitter 再曝漏洞!用户数据再次被共享?
  8. 从技术、服务到共创 声网 Agora 携手合作伙伴共建 RTC 生态
  9. @程序员,欠下的技术债怎么还?
  10. 软件唯有开源才是出路?