python抓取淘宝商品评论并分词分析Word格式文档下载.docx

上传人:b****4 文档编号:8287499 上传时间:2023-05-10 格式:DOCX 页数:18 大小:2.93MB
下载 相关 举报
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第1页
第1页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第2页
第2页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第3页
第3页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第4页
第4页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第5页
第5页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第6页
第6页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第7页
第7页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第8页
第8页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第9页
第9页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第10页
第10页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第11页
第11页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第12页
第12页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第13页
第13页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第14页
第14页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第15页
第15页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第16页
第16页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第17页
第17页 / 共18页
python抓取淘宝商品评论并分词分析Word格式文档下载.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

python抓取淘宝商品评论并分词分析Word格式文档下载.docx

《python抓取淘宝商品评论并分词分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《python抓取淘宝商品评论并分词分析Word格式文档下载.docx(18页珍藏版)》请在冰点文库上搜索。

python抓取淘宝商品评论并分词分析Word格式文档下载.docx

估计有大量刷单

3、追评数和追评率看不到特殊异状。

第三个文件是差评词云图,主要看差到哪了。

首先定义差评:

评论中包含下列词汇的我们认为这条评价是差评

【'

太差'

'

材料差'

各种问题'

出现问题'

质量差'

坑人'

很差'

不满意'

冒牌'

假的'

服务差'

毛病'

非常差'

废物'

垃圾'

破烂'

不值'

差评'

坏的'

坏了'

烂了'

无良'

骗子'

欺骗'

不达标'

出问题'

特差'

上当'

不能用'

报废'

残次'

u'

差劲'

坑爹'

太黑'

不要买'

后悔'

有多差'

被坑'

根据差评的评论可以先分词,再按词统计生成词云。

如图所示我们有以下分析结果:

1、大家关注的要点是公里、续航、电池,大概就是电池不够、续航差,一班也就15、20、30公里

2、【作出评价】【15】【一个月】【好评】,这个词主要来源是

说明差评的买家在首次多数是没有评价的,主要是追评,追评为差评

3、【坏了】【螺丝】【质量】【客服】【售后】为特征词,大概可以想象差评的主要原因。

质量不好,某个东西容易坏、比如螺丝。

售后也不咋地,客服很垃圾。

等等

第四个是剔除刷单买家评论、绝对好评客户后的其他评论生成的词云图,主要用来看客户大致评价

首先定义疑似刷单评价,这个包含两方面一是当天评价又在10个小时内追评的(当然不包含差评),按照买家习惯。

正常买家一般不会追评,追评的一般都都是过了些天发现有问题才来差评(除非商户给买家优惠或者是买家太无聊才会追好评,这个大家经常网购的清楚),何况当天就追评的那是少之又少,我们是秉承宁可错杀1000也不放过一个原则,将能找到的刷单尽量找出来。

二是从买家ID评论的次数来看。

虽然淘宝隐藏了买家ID中间的一些文字。

但是我们还是可以从这买家ID来识别刷单。

这种买家ID出现相同的概率还不是很大,而且在同一商品下出现相同的买家ID概率会更小,但是不排除这种可能。

所以我们可以定义同一买家ID出现超过4次的认为该买家ID存在刷单行为。

至于为什么是4这个是我通过几家店铺的的评论数据百分比得出的(而且有句老话就是是不过三),当然你也可以设为5,甚至6、7、8。

按买家ID评论统计如下,同一个买家ID评论数多大36次,很显然认为是刷单专业户。

如下图

有意思t***0,t***1,t***2,t***3……t***8,t***9,这0到9都到齐了,不是刷单才怪了。

比较账号多了不好记,这样取名符合刷单特征。

极端情况我们甚至可以把以数字结尾,字母开头的非差评买家定义为刷单,这里没有,但是如果这样定义后的仍然有几百条买家评论存在也是可以的。

接着定义绝对好评,绝对好评就是首次评论中使用非常绝对的好评词汇。

例如:

很好'

'

非常好'

完美'

很棒'

很满意'

很实用'

u'

很喜欢'

很耐心'

很不错'

很拉风'

很负责'

非常棒'

十分满意'

非常满意'

满分'

很赞'

非常实惠'

'

很耐用'

】。

作为首次评论用这样绝对的词汇是很有可能是刷单买家评论。

接着来分析剔除刷单买家评论、绝对好评客户后的词云图:

1、评论关注的还是公里数、续航能力

2、找到好评词汇【很快】【方便】【好评】【速度】【折叠】【喜欢】,优点词汇很少

3、找到差评词汇【坏了】【螺丝】【刹车】【差评】

4、好评都是没有从质量出发的,差评都是质量问题

5、从这里无法确定买还是不买

第五个文档是生成的评价word文档,是分析的结果文档,包含各种分析结果。

将前面的各个图表都输入到word文档上。

里面有一个非常重要的指标项可以用来判断买还是不买

就是重复评论(刷单)用户占比、扣除刷单后差评率、绝对好评率三项指标。

在重复评论(刷单)用户占比24.55%、绝对好评为37.32%的情况下,差评率仍然高达14.86显然不值得买。

这里写的算法都是对单个商品就行分析的,没有对商品群分析,所以结果不是完美。

比如从商品群的评价库提取常用的评价词汇和语句,就行更细的评价分类,和重点的分词词汇,这样词云图的结果会更明显。

再比如刷单买家的识别,如果我们有很多商品的话就可以通过买家的购买频率识别是不是刷单买家了,下面是三家电动滑板车的刷单买家统计:

商品1、

商品2、

商品3、

看了这几副图后,是不是感觉刷单的还是那几个人啊。

哈哈,废话不说了,直接贴上分析代码

#coding=utf-8

importos

importurllib2

importjieba

fromrandomimportrandint

importpandasaspd

importtime

importjson

importmath

importtypes

importmatplotlib.pyplotasplt

fromwordcloudimportWordCloud

importnumpy

fromdocximportDocument

fromdocx.sharedimportInches

#importsys

#reload(sys)

#sys.setdefaultencoding('

utf-8'

#差评定义词汇

mywords=[u'

\

\

]

#绝对好评

goodwords=[u'

defgetItemId(url):

uid=url[url.find('

id='

)+3:

url.find('

)+18]

ifuid.find('

&

'

)>

0:

itemid=uid[0:

uid.find('

)]

else:

itemid=uid

returnitemid

defgetRedf(url):

#将list数据转换

relist=[]#printurl

try:

content=json.loads(urllib2.urlopen(url).read().replace('

"

rateDetail"

:

).replace('

<

b>

/b>

),'

gbk'

)#gb18030比gbk含更多字符

except:

printurl,'

json解析错误'

returnpd.DataFrame(),99

ifcontent.has_key(u'

rateList'

):

hasprice=content[u'

][0][u'

attributesMap'

].has_key('

t_payTime'

foriinxrange(len(content[u'

])):

iftype(content['

][i]['

appendComment'

])istypes.DictType:

ifhasprice==True:

relist.append((content[u'

displayUserNick'

],content[u'

rateContent'

rateDate'

]\

content[u'

][i][u'

]['

t_detailPrice'

t_buyAmount'

][u'

commentTime'

content'

]))

gmtCreateTime'

],0,1\

]))

]\

numpy.nan))

else:

],0,1,u'

returnpd.DataFrame(relist),content['

paginator'

lastPage'

]#最大页数

time.sleep(5)

print'

等待5毫秒:

#,url

returngetRedf(url)

defgetDeatail(itemid='

534388747823'

baseurl="

url=baseurl.format(itemid,randint(100000000,700000000),1)

mydf,pages=getRedf(url)#mydf=pd.concat(mydf,first)#pages=totals/20+1;

p=2

while(p<

=pages):

url=baseurl.format(itemid,randint(100000000,700000000),p)

正在读取第{0}页'

.format(p)

p=p+1

tpdf,n=getRedf(url)

mydf=pd.concat([mydf,tpdf])

mydf.columns=['

user'

contents'

datetime'

appendtime'

appendcontents'

returnmydf

defgetSeg(scarydata):

#获取分词的DataFrame注意修改一些文件路径

afterseg=[]

foruinmywords:

jieba.add_word(u)

stopwords={}.fromkeys([line.rstrip().decode('

)forlineinopen('

E:

/360yun/myprog/outwords.txt'

)])#如果确保唯一可以直接用list

stopwords[u'

不错'

]='

0'

车子'

fori,tinscarydata.iterrows():

tp=t[0].replace('

segs=jieba.cut(tp)

forseginsegs:

iflen(seg)>

1andsegnotinstopwords.keys():

afterseg.append((tp,seg))

userwords=pd.DataFrame(afterseg)

userwords.columns=['

words'

returnuserwords

defwcfigure(wordsdf,path=r'

test.jpg'

mytitle='

#画云图图,传入dataframe,保存文件路径和名字wdcounts.head(2000).itertuples(index=False)

wordcloud=WordCloud(font_path='

c:

\windows\fonts\STCAIYUN.TTF'

background_color="

white"

margin=5,width=1800,height=1000)

#必须要加载文字体不然中文乱码#printsegStat.head(100).itertuples(index=False)

wordcloud=wordcloud.fit_words(wordsdf.itertuples(index=False))

plt.figure(num=None,figsize=(25,16),dpi=8,facecolor='

w'

edgecolor='

k'

plt.imshow(wordcloud)

plt.axis("

off"

#plt.title(mytitle)

plt.savefig(path)

plt.show()

plt.close()

defrefind((x,y)):

ifx>

15000orx<

20:

returnFalse

returny

deffindBad(words):

flag=False

#printtype(words)

#ifisNan()

words=words.decode('

forxinmywords:

#x=x.encode('

ifxinwords:

flag=True

break

returnflag

deffindBest(words):

forxingoodwords:

#url='

url='

itemid=getItemId(url)

ifos.path.exists(itemid):

#当前路径shous=os.getcwd()查找是否曾经抓取数据

mydata=pd.read_csv(itemid)

mydata=getDeatail(itemid)

mydata.to_csv(itemid,encoding='

index=False)

mydata['

paytime'

]=mydata['

].apply(lambdax:

time.strftime('

%Y-%m-%d%H:

%M:

%S'

time.localtime(x/1000)))

hours'

]=mydata['

].str[11:

13]

price'

]/mydata['

delmydata['

],mydata['

dates'

].str[0:

10]

groupby_date=mydata.groupby(by=[u'

])[u'

].agg({u'

总评论数'

numpy.size,u'

追评数'

count'

})

mydata=mydata.fillna('

badcontents'

].apply(findBad)|mydata['

].apply(findBad)

best'

].apply(findBest)|mydata['

].apply(findBest)

]=pd.to_datetime(mydata['

])

difftime'

]=(mydata['

]-mydata['

]).apply(lambdax:

pd.isnull(x)and200orx.total_seconds())#追评相差天数

wordsnum'

]=((mydata['

].str.len().f

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2