文本挖掘概要

搞什么的?

从大量文本数据中,抽取出有价值的知识,并且利用这些知识更好的组织信息的过程。

目的是什么?

把文本信息转化为人们可利用的知识。

举例来说,下面的图表利用文本挖掘技术对库克iphoneX 发布会的内容进行分析,得出此次发布会报告中的几个常青词汇、词频的趋势变化情况。

(一)语料库(Corpus)

在python中,如何根据以往的文档文件搭建一个语料库?

1.什么是语料库

语料库是我们要分析的所有文档的集合。

在日常工作中我们对文章的管理,先是一篇篇的文章不断的积累,我们存了大量的文章之后,会对文章信息进行一些归类的工作,一般体现于建立不同的文件夹来保存不同类别的文章。

同样的,我们把我们需要分析的文本文件,读取内存变量中,然后在内存变量中使用不同的数据结构,对这些文本文件进行存储,以便进行下一步的分析。

这个内存变量就是语料库

2.语料库构建实操

我们通过一个案例来了解语料库构建的过程。

这里,jacky为了分享,整理了一份iphone8发布后,主流新闻网站评论的语料数据。

我存放iphone 语义文件夹的路

file:///Users/apple/Downloads/Iphone8

如果是windows系统要替换成响应的路径。

1) 如何把语料数据作为语料库导入到内存中

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

import os

import os.path

import codecs

filePaths=[]

fileContents=[]

for root,dirs,files in os.walk('Users/apple/Documents/Iphone8'):

for name in files:

filePath=os.path.join(root,name)

filePaths.append(filePath)

f=codecs.open(filePath,'r','utf-8')

fileContent=f.read()

f.close()

fileContents.append(fileContent)

import pandas

corpos=pandas.DataFrame({

'filePath':filePaths,

'fileContent':fileContents

})

上述代码注解:

把一个文件夹中,包括嵌套文件夹的全路径,读入到一个内存变量中,我们定义为filePaths数组变量,接着使用os中walk方法,传入这个目录作为参数,就可以遍历该文件中的所有文件了

for root,dirs,files in os.walk中root为文件目录,dirs为root目录下的所有子目录,root目录下的所有文件,我们命名为files,然后进行遍历。

为了拿到root目录下的所有文件,我们再次便利所有的文件(代码:for name in files:)把它追加到filePaths变量中去即可。

os.path.join是拼接文件路径的方法,因为文件路径在windows,mac,linux中的写法是不同的,使用这个方法可以解决在不同系统中使用文件路径要使用不同方法的问题。

最后组建数据框pandas.DataFrame

我们可以print(corpos)

(二)中文分词(Chinese Word Segmentation)

1.中文分词

英文中单词是以空格作为自然分界符,而中文只是字句和段,能够通过明显的分界符简单化简,唯独词没有一个明显的分界符

将一个汉字序列切分成一个一个单独的词

我是数据分析部落的发起人 —-> 我/是/数据/分析/部落/的/发起人(@数据分析-jacky)

2.停用词(Stop Words)

对文章进行分词后,会产生大量的分词,这些分词中并不是每个词都有用的,在我们进行数据处理时,要过滤掉某些字或词

泛滥的词:如web,网站等;

语气助词、副词、介词、连接词等:如的、地、得

3.分词模块-jieba分词包

分词包有很多,jieba分词包是效率高,最简单的分词包

1)jieba基本使用方法-cut方法

import jieba

for w in jieba.cut('我是数据分析-jacky'):

print(w)

下面是“分词届”最奇葩,也是最津津乐道的分词难题:

工信处女干事

每月经过下属科室都要亲口交代

24口交换机等技术性器件的安装工作

import jieba

for w in jieba.cut('''

工信处女干事

每月经过下属科室都要亲口交代

24口交换机等技术性器件的安装工作

'''):

print(w)

jieba在没有使用自定义分词的情况下,只使用默认词库,效果还是非常好的。

2)导入词库

虽然jieba包已经有默认词库,一般场景使用不会出现什么问题,但是我们要是把分词的功能用于专业的场景,会出现什么状况呢?

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

import jieba

seg_list = jieba.cut('天马流星拳和庐山升龙霸哪个更牛逼呢?')

for w in seg_list:

print(w)

import jieba

jieba.add_word('天马流星拳')

jieba.add_word('庐山升龙霸')

jieba.add_word('牛逼')

seg_list = jieba.cut('天马流星拳和庐山升龙霸哪个更牛逼呢?')

for w in seg_list:

print(w)

我们增加了自定义分词,明显增加了分词效果

但是我们要处理的分词很多,使用一个个导入的方法就显得非常不高效了,我们可以使用load_userdict方法一次导入用户自定义词库中

jieba.load_userdict('路径/圣斗士招数.txt')

掌握了对单个字符串进行分词后,我们就可以对大量的文字进行分词了,用load_userdict一次性导入自定义词库中

3) 与语料库结合的实操案例

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

#搭建预料库

import os

import os.path

import codecs

filePaths=[]

fileContents=[]

for root,dirs,files in os.walk('Iphone8'):

for name in files:

filePath=os.path.join(root,name)

filePaths.append(filePath)

f=codecs.open(filePath,'r','GB2312')

fileContent=f.read()

f.close()

fileContents.append(fileContent)

import pandas

corpos=pandas.DataFrame({

'filePath':filePaths,

'fileContent':fileContents

})

#每个分词后面都要跟着一个信息,那就是这个分词来源是哪篇文章

#因此,我们的结果除了分词,还需要指明分词的出处,以便进行后续的分析

import jieba

segments=[]

filePaths=[]

#接下来,遍历所有文章,使用数据框的方法,我们获取到语料库的每行数据,这样遍历得到的行是一个字典,

#列名index作为key,于是我们可以通过列名,使用字典的值的获取方法,获取到文件路径filePath,和文件内容fileContent

for index,row in corpos.iterrows():

filePath=row['filePath']

fileContent=row['fileContent']

#接着调用cut方法,对文件内容进行分词

segs=jieba.cut(fileContent)

#接着遍历每个分词,和分词对应的文件路径一起,把它加到两列中

for seg in segs:

segments.append(seg)

filePaths.append(filePath)

#最后我们把得到的结果存在一个数据框中

segmentDataFrame=pandas.DataFrame({

'segment':segments,

'filePath':filePaths

})

print(segmentDataFrame)

(三)文本挖掘的入口-词频统计

1.词频

某个词在该文档中出现的次数

用词频这个指标来做应用的时候,并不会给定特定的词,而是计算机先对文章进行分词,然后对所得到的所有分词进行词频统计,然后看看哪些词在文章中经常出现。

2.如何使用Python进行词频统计

接着说上面Iphone8发布会语料库的案例,我们已经把语料库搭建好,对语料库进行了分词,上面的案例我们得到了一列为分词(segment),一列为分词所属文件(filePath)的数据框,接下来我们进行词频统计就非常简单了

我们使用分组统计函数,直接在分词变量数据框后调用groupby方法,使用分词字段进行分组,然后聚合函数使用numpy.size函数,也就是对分组字段做一个计数,最后重新设定索引[‘segment’],在根据计算进行倒序排列,得到的结果就是我们词频统计的结果了

import numpy

#进行词频统计

segStat=segmentDataFrame.groupby(

by='segment'

)['segment'].agg({'计数':numpy.size}).reset_index().sort(

columns=['计数'],

ascending=False

)

这里要特别注意的是:降序计数调用的方法sort函数,需要新版本的pandas库,懒得升新版本不降序也不影响后续的处理,这里小伙伴们可以自己处理。

接下来就是过滤停用词:

#首先判断分词列里面是否包含这些停用词

stopwords=pandas.read_csv(

"路径.txt",

encoding='utf-8',

index_col=False

)

#用isin方法,包含停用词就过滤词,用~符号取反

fSegStat=segStat[

~segStat.segment.isin(stopwords.stopword)

]

(四)生词词云

#导入WordCloud和matplotlib包

from wordcloud import WordCloud

import matplotlib.pyplot as plt

#生成一个matplot对象,传入一个字体位置的路径和背景颜色即可

wordcloud=WordCloud(

font_path='字体路径\simhei.ttf',

background_color='black'

)

#WordCloud方法接受一个字典结构的输入,我们前面整理出来的词频统计结果是数据框的形式,因此需要转换,转换的方法,首先把分词设置为数据框的索引,然后在调用一个to_dict()的方法,就可以转换为字典的机构

words=fSegStat.set_index('segment').to_dict()

#接着调用fit_words方法来调用我们的词频

wordcloud.fit_words(words['计数'])

#绘图

plt.imshow(wordcloud)

plt.close()

(五)完整案例代码展示

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

import os

import os.path

import codecs

filePaths=[]

fileContents=[]

for root,dirs,files in os.walk('Users/apple/Documents/Iphone8'):

for name in files:

filePath=os.path.join(root,name)

filePaths.append(filePath)

f=codecs.open(filePath,'r','utf-8')

fileContent=f.read()

f.close()

fileContents.append(fileContent)

import pandas

corpos=pandas.DataFrame({

'filePath':filePaths,

'fileContent':fileContents

})

import jieba

segments=[]

filePaths=[]

for index,row in corpos.iterrows():

filePath=row['filePath']

fileContent=row['fileContent']

segs=jieba.cut(fileContent)

for seg in segs:

segments.append(seg)

filePaths.append(filePath)

segmentDataFrame=pandas.DataFrame({

'segment':segments,

'filePath':filePaths

})

import numpy

segStat=segmentDataFrame.groupby(

by='segment'

)['segment'].agg({'计数':numpy.size}).reset_index().sort(

columns=['计数'],

ascending=False

)

stopwords=pandas.read_csv(

"路径.txt",

encoding='utf-8',

index_col=False

)

fSegStat=segStat[

~segStat.segment.isin(stopwords.stopword)

]

from wordcloud import WordCloud

import matplotlib.pyplot as plt

wordcloud=WordCloud(

font_path='字体路径\simhei.ttf',

background_color='black'

)

words=fSegStat.set_index('segment').to_dict()

wordcloud.fit_words(words['计数'])

plt.imshow(wordcloud)

plt.close()

最后,我们来看看效果吧

如何用python数据挖掘_Python数据挖掘-文本挖掘相关推荐

  1. 如何用Python进行大数据挖掘和分析

    互联网创业离不开数据,如果能自己做个数据爬虫,那岂不是一件很美好的事情吗? 其实自己做数据挖掘不是梦,学点Python的基本功能,5步就能让你成为一个爬虫高手!

  2. python 数据挖掘_Python数据挖掘框架scikit数据集之iris

    一.iris数据集简介 iris数据集的中文名是安德森鸢尾花卉数据集,英文全称是Anderson's Iris data set.iris包含150个样本,对应数据集的每行数据.每行数据包含每个样本的 ...

  3. python 调用数据挖掘_Python数据挖掘 环境搭建

    deepin 有很多小伙伴想学习python,但windows写python基本是坑,deepin属于linux分支,界面美观,内置大量桌面软件,对新手十分友好,这里尝试在深度系统(deepin)内安 ...

  4. python与财务数据挖掘_Python数据挖掘实战2:财政收入影响因素及预测

    Reference <Python数据分析与挖掘实战(第2版)> 第6章,页码:P170,代码略有改进 data.csv数据下载 分析过程 import pandas as pd impo ...

  5. python数据分类_Python数据挖掘实践—KNN分类

    # -*- coding: UTF-8 -*- import math import csv import random import operator '''@author:hunter@time: ...

  6. 3次根号如何用python表达_python怎么表示根号运算

    平方根,又叫二次方根,表示为[√ ̄],如:数学语言为:√ ̄16=4.语言描述为:根号下16=4. 以下实例为通过用户输入一个数字,并计算这个数字的平方根:# -*- coding: UTF-8 -*- ...

  7. python大数据分析实例-如何用Python分析大数据(以Twitter数据挖掘为例)

    原标题:如何用Python分析大数据(以Twitter数据挖掘为例) 来源:艾翻译(http://www.itran.cc/) 原文标题:Twitter Data Mining: A Guide to ...

  8. python数据挖掘视频课程_Python数据挖掘应用班——3天视频

    一.课程目标 1.数据分析工作中遇到的典型数据分析和挖掘案例进行深刻地分析 2.初学者快速掌握Python 数据分析和数据挖掘(含机器学习)的思想和方法 3.形成科学有效的知识和能力结构体系框架,为今 ...

  9. python数据挖掘需要的库_python数据挖掘需要学的内容

    1.Pandas库的操作 Panda是数据分析特别重要的一个库,我们要掌握以下三点: · pandas 分组计算; · pandas 索引与多重索引; 索引比较难,但是却是非常重要的 · pandas ...

最新文章

  1. 错误: 程序包r2不存在_坚果 R2 使用体验:它是一款真旗舰,也是不一样的旗舰...
  2. mysql 5.5 5.6 主从_mysql5.6+主从集的版本号(mysql5.5主机和从机载带后,5.5在设置有一定的差距)...
  3. 2019年python就业前景_2019年Python数据挖掘就业前景前瞻
  4. msc货物跟踪查询_运联研究 | 货物全程可视,能否真正消除物流信息盲点?
  5. mysql 表字段部分替换
  6. visjs使用小记-2.option参数注释说明
  7. excel文件损坏修复绝招_高手都在用的PDF转换PPT、WORD、EXCEL工具
  8. xbox手柄测试_【喂你播】苹果官网上架Xbox无线手柄,那么未来会有果牌手柄吗?...
  9. 沉没成本效应:每个人终其一生的断舍离
  10. 罗马数字数字1到10对照表
  11. 小猿圈之常见java面试题总结,你学会了吗?
  12. 你选择了你的记忆,和生活。
  13. torch.logical_and()方法
  14. mysql索引linke和等于_MySQL之SQL优化详解(三)
  15. 基于网格搜索优化支持向量机的负荷预测方法
  16. 操盘手曝光神秘庄家下单要诀
  17. Unity入门--Unity的下载安装及基本使用
  18. Xshell配置密钥公钥(Public key)与私钥(Private Key)登录
  19. python 私有属性_Python 私有属性和私有方法
  20. 【Python】Jupyter

热门文章

  1. 包 java中导入awt_Java 查找并高亮显示PDF文本
  2. 能进这个Java组织的都是大神,现在只有三个中国人
  3. 皮一皮:六神终于出奶茶了!
  4. I Cannot Breathe:如果没有这些软件的话(Mac篇)
  5. 应用监控指标采集器 Prometheus 核心介绍
  6. 面试投行的20个Java问题
  7. 全球最大“同性”交友网站GitHub或被微软收购,收购价可能高达 50 亿美元
  8. scrapy爬虫储存到mysql_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
  9. linux创建隐藏进程6,在Linux 2.6内核下实现进程隐藏
  10. Visual Studio2019 应用程序无法正常启动0xc000007b