python数据挖掘入门与实践 pdf,文本数据挖掘与python应用
文本挖掘概述
你在做什么?
从大量文本数据中提取有价值的知识并利用这些知识更好地组织信息的过程。
目的是甚麽?
将文本信息转化为人们可以使用的知识。
例如,下图利用文本挖掘技术对库克的iphoneX发布会内容进行了分析,得出了本次发布会报告中一些常青词汇的变化和词频趋势。
(1)语料库。
python如何建立基于传统文档文件的语料库?
1.什么是语料库
语料库是我们想要分析的所有文档的集合。
在日常工作中,我们管理文章,首先一篇文章不断积累。在我们积累了大量的文章之后,对文章信息进行分类的工作一般体现在创建不同的文件夹来存放不同种类的文章。
类似地,将待分析的文本文件读入内存变量,在内存变量中使用不同的数据结构来保存这些文本文件以供下一次分析。
这个记忆变量就是语料库。
2.语料库建设实践
我们通过一个案例来了解语料库建设的过程。
在此,为了分享,成龙整理了iphone8发布后各大新闻网站评论的数据。
保存我的iphone语义文件夹的方法
file://users/apple/downloads/iphone 8
在windows系统上,替换为响应路径。
1)如何将数据导入内存作为语料库?
#-*-编码:utf-8-*-
导入操作系统
导入os.path
导入编码
文件路径=[]
内容=[]
对于root、dirs、file sinos . walk(users/apple/documents/iphone 8)):
对于文件中的名称:
文件路径=OS.path.join(根,名称))。
文件路径.追加(文件路径)
F=codecs.open(文件路径, r , utf-8 )
内容=f.read(
f.close()
内容。追加(文件内容)
进口熊猫
corpos=熊猫。数据帧({(
“文件路径”:文件路径,
“文件内容”:文件内容
() )
上面的代码注释:
您可以将包含嵌套文件夹的文件夹的完整路径读入内存变量,将其定义为filePaths数组的变量,然后使用操作系统中的walk方法将此目录作为参数传递,以遍历此文件中的所有文件。
对于os.walk中的root、dir和files,root是文件目录,dir是根目录下的所有子目录,根目录下的所有文件都是命名文件。
要获取根目录中的所有文件,我们只需将所有文件(代码:表示文件中的名称:)再次添加到filePaths变量中。
操作系统。path.join是连接文件路径的方法。由于文件路径在windows、mac和linux上的写法不同,所以这种方法可以解决在不同系统上使用文件路径时使用不同方法的问题。
最后,数据框熊猫。生成数据帧。
我们可以打印(corpos)
(2)中文分词)。
1.中文分词
英语单词用空格做自然分隔符,而汉语只是词法和段落,可以用明显的分隔符简化,只有单词没有明确的分隔符。
将一个中文字符串分割成单词。
我是数据分析部落的创始人——我/am/data/analysis/tribe/founder(@ data analysis-Jacky))。
2.停词)。
单独写文章的时候,会有很多分词。在这些分词中,并不是所有的单词都有用。处理数据时请过滤掉一些单词和短语。
泛滥语言:如网络、网站等。
情态助词、副词、介词、连词等。比如di,de。
3.分词模块-街霸分词包
有很多分词。解霸分词包是一个高效最简单的分词包。
1)朱巴峡谷法的基本用法
进口洁霸
对于jieba.cut中的w(我是数据分析-jacky)):
打印(w)。
接下来是分词时期最奇怪也是最有趣的分词问题。
信以为真的处女官
每个月都要经过下属部门,自己解释。
p24开关等技术设备的安装
进口洁霸
对于jieba.cut中的w(“”)
信以为真的处女官
以后每个月下属部门都得亲自解释。
安装技术设备,如24端口交换机
):
打印(w)
洁霸只使用默认词库,不使用自定义分词,效果还是很不错的。
2)导入同义词库
虽然解霸包已经有了默认词库,一般场景下不会有问题,但是如果在专业场景下使用分词功能会怎么样?
# -*-编码:utf-8 -*-
进口洁霸
seg _ list=jieba . cut(‘天马流星拳和庐山升龙斗士哪个更牛逼?’)
对于seg_list中的w:
打印(w)
进口洁霸
Jieba.add_word(天马流星拳)
Jieba.add_word(庐山升龙霸)
Jieba.add_word(牛逼)
seg _ list=jieba . cut(‘天马流星拳和庐山升龙斗士哪个更牛逼?’)
对于seg_list中的w:
打印(w)
我们加入了自定义分词,明显增加了分词效果。
但是我们要处理大量的分词,一个一个的用导入的方法效率非常低。我们可以使用load_userdict方法一次性导入到自定义词库中。
jieba . load _ user dict( path/saint moves . txt )
在掌握了单个字符串的分词之后,就可以对大量的单词进行分词,用load_userdict一次性导入到用户自定义的词库中。
3)结合语料库的实际案例。
# -*-编码:utf-8 -*-
#构建预期的库
导入操作系统
导入os.path
导入编解码器
文件路径=[]
fileContents=[]
对于os.walk(Iphone8 )中的根目录、目录、文件:
对于文件中的名称:
filePath=os.path.join(根,名称)
filePaths.append(文件路径)
f=codecs.open(文件路径, r , GB2312 )
fileContent=f.read()
f.close()
fileContents.append(文件内容)
进口熊猫
corpos=熊猫。数据帧({
filePath :文件路径,
fileContent :文件内容
})
#每一个分词后面都要有一个信息,这个分词的出处是哪篇文章。
#所以,除了分词,我们的结果还需要注明分词的来源,以便后续分析。
进口洁霸
segments=[]
文件路径=[]
#接下来遍历所有文章,使用数据框的方法,我们得到语料库中的每一行数据,这样遍历的行就是一个字典,
#列名索引作为键,所以我们可以通过使用列名和字典值获取方法得到filePath FilePath和fileContent FileContent。
对于索引,corpos.iterrows()中的行:
filePath=row[filePath]
fileContent=row[fileContent]
#然后调用cut方法对文件内容进行分段。
segs=jieba.cut(fileContent)
#然后遍历每个分词,并将其与分词对应的文件路径一起添加到两列中。
对于segs赛格:
分段.追加(seg)
filePaths.append(文件路径)
#最后,我们将获得的结果存储在数据帧中。
segmentDataFrame=熊猫。数据帧({
段:段,
“文件路径”:文件路径
})
打印(分段数据帧)
(三)文本挖掘的入口——词频统计
1.字频率
一个单词在本文档中出现的次数。
以词频作为指标时,没有给出具体的词。而是电脑先把文章分段,然后统计所有分段的词频,再看哪些词经常出现在文章里。
2.如何使用Python进行词频统计
然后,再来说说上面Iphone8发布会文集的案例。我们已经建立了语料库并对其进行了分段。在上面的例子中,我们得到了一个包含一列segmentation和一列filePath的数据帧。接下来,我们做词频统计就很简单了。
我们使用分组统计函数,在分词变量的数据框后直接调用groupby方法,使用分词字段进行分组,然后在聚合函数中使用numpy.size函数,即对分组后的字段进行计数,最后重置索引[segment],根据计算结果进行逆序排列。得到的结果是我们词频统计的结果。
进口数量
#进行词频统计
seg stat=segmentdata frame . group by(
by=segment
)[段]。agg({ count: numpy.size})。reset _ index()。排序(
Columns=[ count],
升序=False
)
这里要特别注意:sort函数,降序计数调用的方法,需要新版本的熊猫库。懒得升级新版本不会下降也不会影响后续处理。在这里,朋友可以自己处理。
下一步是过滤停用词:
#首先确定分词列是否包含这些停用词。
停用字词=pandas.read_csv(
路径。文本,
编码=utf-8 ,
索引栏=假
)
#用伊辛方法,包含停用词就过滤词,用~符号取反
fSegStat=segStat[
~segStat.segment.isin(停止字。停止字)
]
(四)生词词云
#导入关键字云和绘制精美的图表包
从关键字云导入关键字云
将matplotlib.pyplot作为血小板计数导入
#生成一个折线图对象,传入一个字体位置的路径和背景颜色即可
wordcloud=WordCloud(
font_path=字体路径\simhei.ttf ,
background_color=黑色
)
#WordCloud方法接受一个字典结构的输入,我们前面整理出来的词频统计结果是数据框的形式,因此需要转换,转换的方法,首先把分词设置为数据框的索引,然后在调用一个to_dict()的方法,就可以转换为字典的机构
words=fsegstat。set _ index( segment ).to_dict()
#接着调用适合_单词方法来调用我们的词频
wordcloud.fit_words(words[计数])
#绘图
plt.imshow(wordcloud)
plt.close()
(五)完整案例代码展示
# -*-编码:utf-8 -*-
导入操作系统
导入os.path
导入编解码器
文件路径=[]
fileContents=[]
对于os.walk中的根、目录、文件(用户/苹果/文档/Iphone8 ):
对于文件中的名称:
filePath=os.path.join(根,名称)
filePaths.append(文件路径)
f=codecs.open(文件路径, r , utf-8 )
fileContent=f.read()
f.close()
文件内容.追加(文件内容)
进口熊猫
corpos=熊猫。数据帧({
文件路径:文件路径,
“文件内容”:文件内容
})
进口洁霸
segments=[]
文件路径=[]
对于索引,corpos.iterrows()中的行:
filePath=row[filePath]
fileContent=row[fileContent]
segs=jieba.cut(fileContent)
对于分叶核中性白细胞赛格:
分段。追加(分段)
filePaths.append(文件路径)
segmentDataFrame=熊猫。数据帧({
段:段,
"文件路径":文件路径
})
进口数量
分段数据帧。分组依据(
by=segment
)[段]。agg({ 计数:numpy.size}).reset_index()。排序(
列=[计数],
升序=假
)
停用字词=pandas.read_csv(
路径。文本,
编码=utf-8 ,
索引栏=假
)
fSegStat=segStat[
~segStat.segment.isin(停止字。停止字)
]
从关键字云导入关键字云
将matplotlib.pyplot作为血小板计数导入
wordcloud=WordCloud(
font_path=字体路径\simhei.ttf ,
background_color=黑色
)
words=fsegstat。set _ index( segment ).to_dict()
wordcloud.fit_words(words[计数])
plt.imshow(wordcloud)
plt.close()
最后,我们来看看效果吧
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。