精华内容
下载资源
问答
  • Python数据挖掘-文本挖掘

    万次阅读 多人点赞 2017-09-13 11:15:19
    举例来说,下面的图表利用文本挖掘技术对库克iphoneX 发布会的内容进行分析,得出此次发布会报告中的几个常青词汇、词频的趋势变化情况。(一)语料库(Corpus) 在python中,如何根据以往的文档文件搭建一个语料库...

    文本挖掘概要

    搞什么的?

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

    目的是什么?

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

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

    (一)语料库(Corpus)

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

    1.什么是语料库

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

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

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

    这个内存变量就是语料库

    2.语料库构建实操

    我们通过一个案例来了解语料库构建的过程。
    这里,jacky为了分享,整理了一份iphone8发布后,主流新闻网站评论的语料数据。
    数据分析-jacky
    数据分析- jacky

    我存放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)
    @数据分析-jacky

    (二)中文分词(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)

    @数据分析-jacky

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

    工信处女干事
    每月经过下属科室都要亲口交代
    24口交换机等技术性器件的安装工作

    import jieba
    for w in jieba.cut('''
    工信处女干事 
    每月经过下属科室都要亲口交代 
    24口交换机等技术性器件的安装工作
    
    '''):
        print(w)

    @数据分析-jacky

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

    2)导入词库

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

    # -*- coding:utf-8 -*-
    import jieba
    seg_list = jieba.cut('天马流星拳和庐山升龙霸哪个更牛逼呢?')
    for w in seg_list:
        print(w)

    数据分析- jacky

    import jieba
    jieba.add_word('天马流星拳')
    jieba.add_word('庐山升龙霸')
    jieba.add_word('牛逼')
    seg_list = jieba.cut('天马流星拳和庐山升龙霸哪个更牛逼呢?')
    for w in seg_list:
        print(w)

    @数据分析-jacky

    • 我们增加了自定义分词,明显增加了分词效果
    • 但是我们要处理的分词很多,使用一个个导入的方法就显得非常不高效了,我们可以使用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)

    @数据分析-jacky

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

    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()

    最后,我们来看看效果吧
    数据分析-jacky

    展开全文
  • 本人在做毕业设计当中,做的是文本挖掘,主题是对某一商品的评论进行区分垃圾与真实评论,已经利用Python对文本数据进行了文本清洗,去重,压缩,分词,去停用词等操作,并利用Gensim对语料库进行了向量转换,现在有...
  • 文本挖掘tmSVM开源项目集成libSVM和liblinear包含Python和Java两种版本带PDF源码参考文档 简介 文本挖掘无论在学术界还是在工业界都有很广泛的应用场景。而文本分类是文本挖掘中一个非常重要的手段与技术。现有的...
  • 利用Python读取外部数据文件

    千次阅读 2019-04-07 16:46:24
    利用Python进行数据分析,同样最重要的一步就是如何将数据导入到Python中,然后才可以实现后面的数据分析、数据可视化、数据挖掘等。 在本期的Python学习中,我们将针对Python如何获取外部数据做一个详细的介绍,...

    不论是数据分析,数据可视化,还是数据挖掘,一切的一切全都是以数据作为最基础的元素。利用Python进行数据分析,同样最重要的一步就是如何将数据导入到Python中,然后才可以实现后面的数据分析、数据可视化、数据挖掘等。

    在本期的Python学习中,我们将针对Python如何获取外部数据做一个详细的介绍,从中我们将会学习以下4个方面的数据获取:

    1、读取文本文件的数据,如txt文件和csv文件

    2、读取电子表格文件,如Excel文件

    3、读取统计软件生成的数据文件,如SAS数据集、SPSS数据集等

    4、读取数据库数据,如MySQL数据、SQL Server数据

    一、读取文本文件的数据

    大家都知道,Python中pandas模块是专门用来数据分析的一个强大工具,下面我们就来介绍pandas是如何读取外部数据的。

    1、读取txt数据

    In [1]: import pandas as pd

    In [2]: mydata_txt = pd.read_csv('C:\\test_code.txt',sep = '\t',encoding = 'utf-8')

    对于中文的文本文件常容易因为编码的问题而读取失败,正如上图所示。

    遇到这样的编码问题该如何处置呢?解决办法有两种情况:

    1)当原始文件txt或csv的数据不是uft8格式时,需要另存为utf8格式编码;

    2)如果原始的数据文件就是uft8格式,为了正常读入,需要将read_csv函数的参数encoding设置为utf-8

    将原始数据另存为utf8格式的数据,重新读入txt数据

    In [3]: mydata_txt = pd.read_csv('C:\\test.txt',sep = '\t',encoding = 'utf-8')

    In [4]: mydata_txt

    很顺利,txt文本文件数据就这样进入了Python的口袋里了。

    2、读取csv数据

    csv文本文件是非常常用的一种数据存储格式,而且其存储量要比Excel电子表格大很多,下面我们就来看看如何利用Python读取csv格式的数据文件:

    In [5]: mydata_csv = pd.read_csv('C:\\test.csv',sep = ',',encoding = 'utf-8')

    In [6]: mydata_csv

    如果你善于总结的话,你会发现,txt文件和csv文件均可以通过pandas模块中的read_csv函数进行读取。该函数有20多个参数,类似于R中的read.table函数,如果需要查看具体的参数详情,可以查看帮助文档:help(pandas.read_csv)。

    二、读取电子表格文件

    这里所说的电子表格就是Excel表格,可以是xls的电子表格,也可以是xlsx的电子表格。在日常工作中,很多数据都是存放在Excel电子表格中的,如果我们需要使用Python对其进行分析或处理的话,第一步就是如何读取Excel数据。下面我们来看看如果读取Excel数据集:

    In [7]: mydata_excel = pd.read_excel('C:\\test.xlsx',sep = '\t',encoding = 'utf-8')

    In [8]: mydata_excel

    三、读取统计软件生成的数据文件

    往往在集成数据源的时候,可能会让你遇到一种苦恼,那就是你的电脑里存放了很多统计软件自带的或生成的数据集,诸如R语言数据集、SAS数据集、SPSS数据集等。那么问题来了,如果你电脑里都装了这些软件的话,这些数据集你自然可以看见,并可以方便的转换为文本文件或电子表格文件,如果你的电脑里没有安装SAS或SPSS这样大型的统计分析软件的话,那么你该如何查看这些数据集呢?请放心,Python很万能,它可以读取很多种统计软件的数据集,下面我们介绍几种Python读取统计数据集的方法:

    1、读取SAS数据集

    SAS数据集的读取可以使用pandas模块中的read_sas函数,我们不妨试试该函数读取SAS数据集。下图是使用SAS打开的数据集,如果你的电脑中没有安装SAS,那你也可以通过Python实现数据的读取。

    In [1]: import pandas as pd

    In [2]: mydata_sas = pd.read_sas('G:\\class.sas7bdat',encoding='utf8')

    2、读取SPSS数据集

    读取SPSS数据就稍微复杂一点,自己测试了好多次,查了好多资料,功夫不负有心人啊,最终还是搞定了。关于读取SPSS数据文件,需要为您的Python安装savReaderWriter模块,该模块可以到如下链接进行下载并安装:https://pypi.python.org/pypi/savReaderWriter/3.4.2。

    安装savReaderWriter模块

    可以通过该命令进行savReaderWriter模块的安装:python setup.py install

    下图是SPSS数据在SPSS中打开的样子:

    In [1]: import savReaderWriter

    In [2]: mydata_spss = savReaderWriter.SavReader('employee_data.sav')

    In [3]: mydata_spss

    3、实在没办法该怎么办?

           如果你尝试了好多种模块都无法读取某个统计软件的数据,我建议你还是回到R中,R也是开源的统计分析工具,体积也非常小,只有40M左右,而且R自带的foreign包可以读取很多种统计软件的数据集,当读取成功后,再利用write.csv函数将数据集写出为csv格式的数据,这样Python就可以轻松读取csv数据集了,万事灵活一点就可以完成你想要的任何结果~

    四、读取数据库数据

    企业中更多的数据还是存放在诸如MySQL、SQL Server、DB2等数据库中,为了能够使Python连接到数据库中,科学家专门设计了Python DB API的接口。我们仍然通过例子来说明Python是如何实现数据库的连接与操作的。

    1、Python连接MySQL

    MySQLdb模块是一个连接Python与MySQL的中间桥梁,但目前只能在Python2.x中运行,但不意味着Python3就无法连接MySQL数据库。这里向大家介绍一个非常灵活而强大的模块,那就是pymysql模块。我比较喜欢他的原因是,该模块可以伪装成MySQLdb模块,具体看下面的例子:

    In [1]: import pymysql

    In [2]: pymysql.install_as_MySQLdb()    #伪装为MySQLdb模块

    In [3]: import MySQLdb

    使用Connection函数联通Python与MySQL

     

    使用conn的游标方法(cursor),目的是为接下来的数据库操作做铺垫。

     

    执行SQL语句

    In [7]: cursor.execute(sql)

    Out[7]: 4

    In [8]: data = cursor.fetchall()

    In [9]: data

    我们发现data中存储的是元组格式的数据集,我们之前讲到,构造DataFrame数据结构只能通过数组、数据框、字典、列表等方式构建,但这里是元组格式的数据,该如何处理呢?很简单,只需使用list函数就可以快速的将元组数据转换为列表格式的数据。

    In [10]: data = list(data)

    In [11]: data

    下面我们就是要pandas模块中的DataFrame函数将上面的data列表转换为Python的数据框格式:

    In [14]: import pandas as pd

    In [15]: mydata = pd.DataFrame(data, columns = ['id','name','age','gender'])

    In [16]: mydata

    最后千万千万注意的是,当你的数据读取完之后一定要记得关闭游标和连接,因为不关闭会导致电脑资源的浪费。

    In [19]: cursor.close()

    In [20]: conn.close()

    2、Python连接SQL Server

    使用Python连接SQL Server数据库,我们这里推荐使用pymssql模块,该模块的语法与上面讲的pymysql是一致的,这里就不一一讲解每一步的含义了,直接上代码:

     

     

    展开全文
  • 利用Python定制个性化词云

    千次阅读 多人点赞 2018-08-09 14:36:48
    在新媒体时代,人们面对层出不穷的大数据,很容易陷入信息盲区,如何有效处理和利用这些数据,成为人们急须解决的问题之一。针对文本数据,目前人们通常采用自然语言处理技术进行重要信息的挖掘。而这些挖掘出的信息...

    一、实验介绍

    1.1 实验内容

    在新媒体时代,人们面对层出不穷的大数据,很容易陷入信息盲区,如何有效处理和利用这些数据,成为人们急须解决的问题之一。针对文本数据,目前人们通常采用自然语言处理技术进行重要信息的挖掘。而这些挖掘出的信息究竟以何种方式组织起来才能方便人们进行理解、浏览、传播及应用,是一个值得关注的问题。“词云”就是为此而诞生的。“词云”是对文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的无意义信息,让人看过词云图片就可以抓住内容的主旨。本实验将使用Pythonwordcloud扩展包制作词云,生成图片保存。并介绍如何改进wordcloud扩展包使其能显示中文字符,最后介绍如何使用自己喜欢的图片定制词云图片轮廓。

    1.2 词云原理

    词云的原理是对输入的文本数据进行词频统计,根据词汇出现频率的不同,按不同比例显示出词汇,生成图片。频率高的词汇显示的大,频率低的词汇显示的小。文本数据可以是本地数据,也可是是爬虫动态从网络中获取的。

    1.3 实验前期准备

    下载并安装实验需要的扩展包 。无论是Windows还是Linux还是Mac,都强烈推荐安装Anaconda,这是一个Python的科学计算包,里面几乎包含了常用的所有扩展包,不用自己费力安装了,该软件由Python之父带头维护,三个平台同时更新。但是有些扩展包不包含在内需要自行安装,本文实验环境为python 3 。

    1、安装wordcloud扩展包

    pip install wordcloud

    2、下载测试文本constitution.txt和小说《三体》I、 II、 III,链接地址如下:

    http://labfile.oss.aliyuncs.com/courses/756/constitution.txt

    http://labfile.oss.aliyuncs.com/courses/756/santi.txt

    http://labfile.oss.aliyuncs.com/courses/756/santi2.txt

    http://labfile.oss.aliyuncs.com/courses/756/santi3.txt

    二、实验步骤

    2.1 简单测试

    首先我们做一个简单的测试,程序运行时会搜寻python脚本所在的路径下的文本文件“constitution.txt”,所以我们在运行脚本前需要将这个文本放入脚本的同级目录下,码如下所示。

    
    from os import path
    from wordcloud import WordCloud
     
    d = path.dirname(__file__)
     
    # Read the whole text.
    text = open(path.join(d, 'constitution.txt')).read()
     
    # Generate a word cloud image
    wordcloud = WordCloud().generate(text)
     
    # Display the generated image:
    # the matplotlib way:
    import matplotlib.pyplot as plt
    plt.imshow(wordcloud)
    plt.axis("off")
     
    # lower max_font_size
    wordcloud = WordCloud(max_font_size=40).generate(text)
    plt.figure()
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()

    脚本运行结果如下:

                                                     

    至此,我们得到了一个英文词云。

    2.2 中文测试

    我们将文本文档换成《三体》I,进行中文词云的生成。

    from os import path
    from wordcloud import WordCloud
     
    d = path.dirname(__file__)
     
    # Read the whole text.
    #text = open(path.join(d, 'constitution.txt')).read()
    text = open("santi.txt").read()
     
    # Generate a word cloud image
    wordcloud = WordCloud().generate(text)
     
    # Display the generated image:
    # the matplotlib way:
    import matplotlib.pyplot as plt
    plt.imshow(wordcloud)
    plt.axis("off")
     
    # lower max_font_size
    wordcloud = WordCloud(max_font_size=40).generate(text)
    plt.figure()
    plt.imshow(wordcloud)
    plt.axis("off")
    

    脚本运行结果如下:

                                                        

    出现上图的原因是wordcloud没有找到用于显示汉字的字体,因此我们可以指定一个字体文件给wordcloud,代替默认的字体显示词云。系统中存在字体库,一般在'C:\Windows\Fonts'路径下,我们这选择了该目录下的simkai.ttf进行实验。我们将simkai.ttf文件位置作为字体参数传递给wordcloud。

    wordcloud = WordCloud(font_path='C:\Windows\Fonts\simkai.ttf',max_font_size=40).generate(text)

                                                                       

    此时,我们发现中文词云显示正常。但是这种形式的词云我们是很难接受的,毕竟太丑了!接下来我们需要对该词云进行深加工,这就需要我们了解wordcloud的参数。

    2.3 wordcloud参数简单介绍

    font_path : string //字体路径,需要展现什么字体就把该字体路径+后缀名写上,如:font_path = '黑体.ttf'

    width : int (default=400) //输出的画布宽度,默认为400像素

    height : int (default=200) //输出的画布高度,默认为200像素

    prefer_horizontal : float (default=0.90) //词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )

    mask : nd-array or None (default=None) //如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:bg_pic = imread('读取一张图片.png'),背景图片的画布一定要设置为白色(#FFFFFF),然后显示的形状为不是白色的其他颜色。可以用ps工具将自己要显示的形状复制到一个纯白色的画布上再保存,就ok了。

    scale : float (default=1) //按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。

    min_font_size : int (default=4) //显示的最小的字体大小

    font_step : int (default=1) //字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差。

    max_words : number (default=200) //要显示的词的最大个数

    stopwords : set of strings or None //设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS

    background_color : color value (default=”black”) //背景颜色,如background_color='white',背景颜色为白色。

    max_font_size : int or None (default=None) //显示的最大的字体大小

    mode : string (default=”RGB”) //当参数为“RGBA”并且background_color不为空时,背景为透明。

    relative_scaling : float (default=.5) //词频和字体大小的关联性

    color_func : callable, default=None //生成新颜色的函数,如果为空,则使用 self.color_func

    regexp : string or None (optional) //使用正则表达式分隔输入的文本

    collocations : bool, default=True //是否包括两个词的搭配

    colormap : string or matplotlib colormap, default=”viridis” //给每个单词随机分配颜色,若指定color_func,则忽略该方法。

    fit_words(frequencies) //根据词频生成词云(frequencies,为字典类型)

    generate(text) //根据文本生成词云

    generate_from_frequencies(frequencies[, ...]) //根据词频生成词云

    generate_from_text(text) //根据文本生成词云

    process_text(text) //将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies) )

    recolor([random_state, color_func, colormap]) //对现有输出重新着色。重新上色会比重新生成整个词云快很多。

    to_array() //转化为 numpy array

    to_file(filename) //输出到文件

    针对于如何让词云显示的更清晰,对一些参数进行详细的分析。

    mask:遮罩图,字的大小布局和颜色都会依据遮罩图生成。其实理论上这对字大小和清晰程度的影响不大, 但是遮罩图色和背景色background_color如果易混淆,则可能是一个导致看起来不清晰的因素; 另外遮罩图自身各个颜色之间的对比不强烈,也可能使图看起来层次感不够。 比如,一些图明度比较高,再加上背景白色,有可能导致字色太浅(背景色background_color又是白色)于是看起来不够“清晰”。

    background_color:背景色,默认黑。 这个本来其实也不怎么影响清晰度,但是,就像之前在mask中提到的,如果遮罩图像颜色过浅、背景设置白色, 可能导致字看起来“不清晰”。而实际上,我对一个浅色遮罩图分别用白、黑两种背景色后发现, 黑色背景的强烈对比之下会有若干很浅也很小的词浮现出来,而之前因背景色、字色过于相近而几乎无法用肉眼看出这些词。

    mode:默认“RGB”。根据说明文档,如果想设置透明底色的云词图,那么可以设置

    :background_color=None, mode="RGBA" 但是!!!实际中我尝试设置透明背景色并没有成功过! 当我选取的遮罩图是白色底时,如果background_color设置为"white"或"black"时,生成的云词确实是对应的“白色”“黑色”; 但是按照上述参数设置透明色时,结果出来依然是白色。 当我选取的遮罩图是透明底时,那么不管我background_color设置为"white"或"black",还是None加上mode="RGBA", 结果都是把背景部分当做黑色图块,自动匹配黑色的字!——也就是并没有实现透明底的云词。)

    max_font_size:最大字号。源文件中也有讲到,图的生成会依据最大字号等因素去自动判断词的布局。 经测试,哪怕同一个图像,只要图本身尺寸不一样(比如我把一个300×300的图拉大到600×600再去当遮罩),那么同样的字号也是会有不同的效果。 原理想想也很自然,字号决定了字的尺寸,而图的尺寸变了以后,最大字相对于图的尺寸比例自然就变了。 所以,需要根据期望显示的效果,去调整最大字号参数值。 min_font_size:最小字号。不设置的情况下,默认是4。 尝试了设置比4大的字号,例如8、10,结果就是原本小于设定值且大于4号的词都直接不显示了,其它内容和未设置该值时都一样。

    relative_scaling:表示词频和云词图中字大小的关系参数,默认0.5。 为0时,表示只考虑词排序,而不考虑词频数;为1时,表示两倍词频的词也会用两倍字号显示。

    scale:根据说明文档,当云词图很大的,加大该值会比使用更大的图更快,但值越高也会越慢(计算更复杂)。 默认值是1。实际测试中,更大的值,确实输出图像看起来更精细(较小较浅的词会颜色更重,也感觉清楚,大的词差异不明显)。

    三、定制词云

     看着我们自己方方正正的词云,是不是感觉太中规中矩了?都不好意思拿出手了吧? 没关系,我们也可以做一个不规则边缘的词云! 为了达到一个定制词云的效果,我们需要一个图片作为mask,这个mask的作用就是为我们的词云提供一个空间,让我们的词云只在这个空间里显示。我们的mask图片是星github上有关于wordcloud项目的开源代码: https://github.com/amueller/word_cloud 中所提供的,图片是这个样子的。

                                              

    为此,我们需要修改我们的代码,增加图片mask,修改后的代码如下:

    import numpy as np
    from PIL import Image
    from os import path
    import matplotlib.pyplot as plt
    import matplotlib
    import os
    from wordcloud import WordCloud
    
    d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()
    mask = np.array(Image.open(path.join(d, "alice_mask.png")))
    text = open(path.join(d, 'santi.txt')).read()
    
    text = text.replace(u"汪淼说", u"汪淼")
    text = text.replace(u"汪淼问", u"汪淼")
    text = text.replace(u"叶文洁说", u"叶文洁")
    text = text.replace(u"元首说", u"元首")
    
    wc = WordCloud(font_path='C:\Windows\Fonts\simkai.ttf',max_words=200, mask=mask, margin=10,background_color='white',
                   min_font_size=4,max_font_size=100,random_state=1,mode='RGBA').generate(text)
    default_colors = wc.to_array()
    #标题字体设置
    myfont = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
    
    wc.to_file("a_new_hope.png")
    
    plt.figure(figsize=(20,20))
    plt.title(u"三体-词频统计",fontproperties=myfont,fontsize=100)
    plt.imshow(default_colors, interpolation="bilinear")
    plt.axis("off")
    plt.show()
    

    脚本执行结果如下:

                                                      

    是不是美观了很多~

    但这跟我们定制的要求还有出入,形状要根据咱们的要求来指定,那就要求对图片进行处理,在这里我用的是比较简单的美图秀秀。

    原图是这样儿的~

                                            

    美图秀秀抠图后

                                             

    之后只需要将新图传给mask

    mask = np.array(Image.open(path.join(d, "panda_new.png")))

                                                  

    搞定!

    致谢

    https://blog.csdn.net/oxuzhenyi/article/details/58587447

    https://blog.csdn.net/fly910905/article/details/77763086

    展开全文
  • 今天主要介绍一下,文本挖掘的数据获取方式,上一篇很多人在问数据如何获取,今天给大家介绍下数据获取的方式,主要利用爬虫抓取数据。基于,之前对python爬虫没接触过,尝试过用R爬虫,今天就来介绍下,如何用R爬取...
           今天主要介绍一下,文本挖掘的数据获取方式,上一篇很多人在问数据如何获取,今天给大家介绍下数据获取的方式,主要利用爬虫抓取数据。基于,之前对python爬虫没接触过,尝试过用R爬虫,今天就来介绍下,如何用R爬取股吧的评论数据,关于R爬虫网上也有很多参考资料,在参考了网上大神的思路方法后,自己尝试了对股吧数据进行爬取,结果爬取下来的数据还是比较规范,能够满足我的分析需求的。

           R进行爬虫,经常用的包有RCurl和rvest两个包,这里我主要介绍rvest包爬虫,大致的思路其实是一样的,爬虫之前需要对网页有个基本的了解,会查看网页相应的审核元素,找到相应的节点所在的位置,找到节点的类型class,这些了解了,后面爬虫就会得心应手很多。不多说了,先上代码吧。

    library(rvest)
    library(xml2)
    library(sqldf)
    library(gsubfn)
    library(proto)
    library(RSQLite)
    library(DBI)
    library(data.table)
    library(stringr)

    extradata<-function(i,non_pn_url){
         url<-paste0(non_pn_url,i)##先给一个没有页码的网页#
         web<-html(url)#通过html解析网页##
         title<-web %>% html_nodes("div.articleh span.l3 a")%>%html_text()%>% .[c(seq(1,86,1))] %>% as.character()##找到评论数据对应的节点类型,匹配获取节点##
         paperlink<-gsub("\\?source\\=search","",web %>% html_nodes("div.articleh") %>% html_attr("href"))%>% .[c(seq(2,20,2))]##获取网页跳转连接##
         paperlink<-paste0("http://www.eastmoney.com/",paperlink) %>% as.character()###输入无页码链接 ##
         author<-web %>% html_nodes("div.articleh span.l4") %>% html_text()##匹配获取作者的class节点
         posttime<-web %>% html_nodes("div.articleh span.l6") %>% html_text()
         update_time<-web %>% html_nodes("div.articleh span.l5") %>% html_text()
         count_of_comment<-web %>% html_nodes("div.articleh span.l2") %>% html_text()
         count_of_read<-web %>% html_nodes("div.articleh span.l1") %>% html_text()
         data.frame(title,author,posttime,update_time,count_of_comment,count_of_read)##构造一个数据框##
    }
    finaldata<-data.frame()
    url<-'http://guba.eastmoney.com/list,002373.html?from=BaiduAladdin'##获取有页码的第一页的链接
    for(i in 1:25){
        extradata(i,url)
        finaldata<-rbind(finaldata,extradata(i,url))
    }##这里是抓取了25页的数据#
    finaldata1<-as.data.frame(finaldata)
    names(finaldata)
    dim(finaldata1)
    head(finaldata)

           最后来看看爬虫抓取的数据效果

          爬虫内容今天就介绍到这里,后续有新的发现在跟进 ,希望小伙伴们多提提意见,这里也感谢参考的牛人大神们的分享。

    文章改编自《文本挖掘之数据爬虫》

    原文链接:http://quant.jd.com/community/subjectDetails/175

    欢迎加入京东金融量化官方交流群:456448095,有任何问题和建议均可讨论交流。


    展开全文
  • 最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的...
  • 最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的...
  • NLP实践 使用这些NLP,文本挖掘和...如何使用Gensim访问预训练的GloVe和Word2Vec嵌入以及如何利用这些嵌入实现文本相似性的示例 笔记本 开始进行文本分类。 了解如何使用Logistic回归构建和评估用于新闻分类的文本分
  • 图像检索一、图像检索1.1基本原理1.2 BOW原理简述(同BOF...此次实验的内容主要有关于图像检索的内容,与教材《python计算机视觉编程》衔接,将展示如何利用文本挖掘技术对基于图像视觉内容进行图像搜索。 一、图像检索
  • 本章将展示如何利用文本挖掘技术对基于图像视觉内容进行图像搜索。本章阐明了提出利用视觉单词的基本思想,并解释了完整的安装细节,还在一个示例数据集上进行了测试。 1 基于内容的图像检索 在大型数据库上,CBIR...
  • Python计算机视觉:第七章 图像搜索

    千次阅读 2016-02-27 21:37:46
    本章将展示如何利用文本挖掘技术基于图像视觉内容进行图像搜索。在本章中,阐明了利用视觉单词的基本思想,完整解释了的安装细节,并且还在一个示例数据集上进行测试。 本章图像搜索模型是建立在BoW词袋基础上,先...
  • 最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的...
  • python进行机器学习(一)之数据预处理 - 光彩照人 - 博客园 随机森林sklearn FandomForest,及其调参 - 码灵薯的博客 - CSDN博客 【集成学习】scikit-learn随机森林调参小结 - sun_shengyun的专栏 - CSDN博客 加州...
  • 得到文章内容数据TXT文件,接着我们将新闻正文文本数据进行中文分词,对数据进行的一些初步处理,包括缺失值填写、噪声处理、不一致数据修正、中文分词等,其目标是通过分析解析文章得到更标准、高质量的数据,纠正...
  • 本课程还将使用大量的案例研究,您还将学习如何运用学习算法构建智能机器人(感知,控制),文本的理解(Web搜索,反垃圾邮件),计算机视觉,医疗信息,音频,数据挖掘,和其他领域。 本课程需要10周共18节课,相对...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    模型元素的特征和语义的文本描述—模型的“肉” 形成了承载模型的语义背板,赋予模型意义,各种图仅仅是该背板的视图或者可视化投影 修饰 修饰:图中建模元素上暴露的信息项 任何UML图仅是模型的视图, 只有在修饰...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

如何利用python进行文本挖掘

python 订阅