python数据分析与挖掘实战第十五章

本博客旨在帮助学生自己巩固所学,若能帮得上他人也是荣幸之至
首先以下是借鉴过的几个github库,非常感谢:
https://github.com/apachecn/python_data_analysis_and_mining_action
https://github.com/keefecn/python_practice_of_data_analysis_and_mining
https://github.com/Stormzudi/Python-Data-Mining
https://github.com/Echo9573/DataAnalysisbyPython

1 数据提取案例

data=data[[u'评论']][data[u'品牌']==u'美的']

2 查看表格是否有缺失值等信息

result.info()

3 去除重复数据

data=pd.DataFrame(data[0].unique())

4 编码报错处理

# 必须导入下面这个包,要不然会报错'ascii' codec can't encode characters in position
# Python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
result.to_csv('1_1my_meidi_jd.txt', index = False, header = False) # 将评论提取后保存到txt中,不要索引,不要列名(***)

5 正则表达式使用

data1 = pd.DataFrame(data1[0].str.replace('.*?\d+?\\t', '')) # 使用正则表达式替换掉前缀
data2 = pd.DataFrame(data2[0].str.replace('.*?\d+?\\t', '')) # 使用正则表达式替换掉前缀

6 多行分词

mycut = lambda s: " ".join(jieba.cut(s)) # 自定义简单分词函数
data1 = data1[0].apply(mycut) # 通过广播形式分词,加快速度
data2 = data2[0].apply(mycut) # 通过广播形式分词,加快速度

7 LDA主题模型

#-*- coding: utf-8 -*-
import pandas as pd

#参数初始化
negfile = '../data/meidi_jd_neg_cut.txt'
posfile = '../data/meidi_jd_pos_cut.txt'
stoplist = '../data/stoplist.txt'

neg = pd.read_csv(negfile, encoding = 'utf-8', header = None) #读入数据
pos = pd.read_csv(posfile, encoding = 'utf-8', header = None)
stop = pd.read_csv(stoplist, encoding = 'utf-8', header = None, sep = 'tipdm',engine='python')
#sep设置分割词,由于csv默认以半角逗号为分割词,而该词恰好在停用词表中,因此会导致读取出错
#所以解决办法是手动设置一个不存在的分割词,如tipdm。
stop = [' ', ''] + list(stop[0]) #Pandas自动过滤了空格符,这里手动添加

neg[1] = neg[0].apply(lambda s: s.split(' ')) #定义一个分割函数,然后用apply广播
neg[2] = neg[1].apply(lambda x: [i for i in x if i not in stop]) #逐词判断是否停用词,思路同上
pos[1] = pos[0].apply(lambda s: s.split(' '))
pos[2] = pos[1].apply(lambda x: [i for i in x if i not in stop])

from gensim import corpora, models

#负面主题分析
neg_dict = corpora.Dictionary(neg[2]) #建立词典
neg_corpus = [neg_dict.doc2bow(i) for i in neg[2]] #建立语料库
neg_lda = models.LdaModel(neg_corpus, num_topics = 3, id2word = neg_dict) #LDA模型训练
for i in range(3):
  neg_lda.print_topic(i) #输出每个主题

#正面主题分析
pos_dict = corpora.Dictionary(pos[2])
pos_corpus = [pos_dict.doc2bow(i) for i in pos[2]]
pos_lda = models.LdaModel(pos_corpus, num_topics = 3, id2word = pos_dict)
for i in range(3):
  print(neg_lda.print_topic(i)) #输出每个主题
# 正面主题的,一行为一个主题
0.040*"安装" + 0.029*"不错" + 0.019*"热水器" + 0.018*"加热" + 0.011*"知道" + 0.011*"送货" + 0.010*"使用" + 0.009*"有点" + 0.009*"速度" + 0.007*"买"
0.021*"买" + 0.019*"热水器" + 0.016*"安装" + 0.013*"好" + 0.010*"京东" + 0.009*"东西" + 0.009*"师傅" + 0.007*"n" + 0.007*"知道" + 0.007*"装"
0.053*"安装" + 0.020*"买" + 0.018*"好" + 0.015*"美的" + 0.014*"师傅" + 0.013*"不错" + 0.013*"热水器" + 0.010*"东西" + 0.009*"安装费" + 0.008*"问题"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值