首页天道酬勤python 舆论分析,python相关性分析步骤

python 舆论分析,python相关性分析步骤

admin 08-24 10:30 288次浏览

1 #-*- coding: utf-8 -*-

2 """

3 Created on Mon Oct 1 12:13:11 20184

5 @author: Luove6 """

7

8 importos9 importpandas as pd10 importjieba11 from gensim importcorpora, models12

13 os.chdir(‘D:\Analyze\Python Matlab\Python\BookCodes\Python数据分析与挖掘实战\图书配套数据、代码\chapter15\demo\code‘)14 filepath=‘../data/huizong.csv‘

15 data=pd.read_csv(filepath)16 data.head()17 data_target=data[[‘评论‘]][data[‘品牌‘]==‘美的‘]18 #set(data[‘品牌‘])

19 count_1=len(data_target) #55774

20 data_target=pd.DataFrame(data_target[‘评论‘].unique()) #去重后返回时array,需要DataFrame化

21 count_2=len(data_target) #53049

22 same_comment_count=count_1-count_2 #2725,5%

23

24 inputfile1 = ‘../data/meidi_jd_process_end_负面情感结果.txt‘ #来之ROSTCM6软件,情感倾向性分析,负面、中性、正面,这里只研究负面、正面

25 inputfile2 = ‘../data/meidi_jd_process_end_正面情感结果.txt‘

26

27 with open(inputfile1,‘r‘,encoding=‘UTF-8‘) as data1: # 针对含中文名的文件的读取方式,重编码成utf-828 data1 = pd.read_csv(data1,header = None) #读入数据

29 with open(inputfile2,‘r‘,encoding=‘UTF-8‘) as data2:30 data2 = pd.read_csv(data2,header = None) #读入数据

31 data1 = pd.DataFrame(data1[0].str.replace(‘.*?\d+?\\t‘, ‘‘)) #用正则表达式修改数据,非贪婪模式:*?,0个或多个非\n字符 +?,1个或多个数字

32 data2 = pd.DataFrame(data2[0].str.replace(‘.*?\d+?\\t‘, ‘‘))33 #jieba分词

34 mycut = lambda s: ‘ ‘.join(jieba.cut(s)) #自定义简单分词函数,分词结果通过空格链接

35 data1 = data1[0].apply(mycut) #通过“广播”形式分词,加快速度。

36 data2 =data2[0].apply(mycut)37 #去停用词

38 stopfilepath=‘../data/stoplist.txt‘

39 stop = pd.read_csv(stopfilepath, encoding = ‘utf-8‘, header = None, sep = ‘tipdm‘) #这里sep分割符 非停用词符均可,这里选的是竞赛站名

40 #sep设置分割词,由于csv默认以半角逗号为分割词,而该词恰好在停用词表中,因此会导致读取出错

41 #所以解决办法是手动设置一个不存在的分割词,如tipdm。

42 stop = [‘ ‘, ‘‘] + list(stop[0]) #Pandas自动过滤了空格符,这里手动添加

43 neg=pd.DataFrame(data1.copy())44 pos=pd.DataFrame(data2.copy())45 neg[1] = neg[0].apply(lambda s: s.split(‘ ‘)) #定义一个分割函数,然后用apply广播,每行按空格分隔,每行由str转变为list

46 neg[2] = neg[1].apply(lambda x: [i for i in x if i not in stop]) #逐词判断是否停用词,思路同上

47 pos[1] = pos[0].apply(lambda s: s.split(‘ ‘))48 pos[2] = pos[1].apply(lambda x: [i for i in x if i not instop])49

50

51 #=============================================================================

52 #ldamodel = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=3, id2word = dictionary, passes=20)

53 #corpus: 必须。语料库

54 #num_topics: 必须。LDA 模型要求用户决定应该生成多少个主题。由于我们的文档集很小,所以我们只生成三个主题;

55 #id2word:必须。LdaModel 类要求我们之前的 dictionary 把 id 都映射成为字符串;

56 #passes:可选。模型遍历语料库的次数。遍历的次数越多,模型越精确。但是对于非常大的语料库,遍历太多次会花费很长的时间。

57 #调整模型的主题数和遍历次数对于得到一个好的结果是很重要的

58 #=============================================================================

59 #负面主题分析

60 neg_dict = corpora.Dictionary(neg[2]) #建立词典

61 neg_corpus = [neg_dict.doc2bow(i) for i in neg[2]] #建立语料库

62 neg_lda = models.LdaModel(neg_corpus, num_topics = 3, id2word = neg_dict) #LDA模型训练,一种主题模型,它基于一组文档中的词频生成主题

63 for i in range(3): #num_topics = 3

64 print(neg_lda.print_topic(i)) #输出每个主题

65

66 #正面主题分析

67 pos_dict = corpora.Dictionary(pos[2])68 pos_corpus = [pos_dict.doc2bow(i) for i in pos[2]]69 pos_lda = models.LdaModel(pos_corpus, num_topics = 3, id2word =pos_dict)70 for i in range(3):71 print(pos_lda.print_topic(i)) #输出每个主题

72 print(pos_lda.print_topic(num_topics = 3, num_words = 3))

汇总在vue中写jsx的方式Android使用ListView实现下拉刷新及上拉显示更多的方法UCloud优刻得乌兰察布数据中心预计一年减碳7380吨javascript中有哪些类型解析属性键中带有特殊字符的JSON对象海外云手机有什么功能?历史中提交的图片或压缩文件javascript如何求3个数的和element-plus/element-ui跑马灯配备照片及图片自适应的方式
lda主题聚类的优缺点,lda是聚类方法吗 gensim lda 获得文档主题分布
相关内容