文章大纲

  • NLP 可视化
    • wordCloud
    • LDA 主题模型
    • matplotlib seaborn 绘图加载中文字体
      • CentOS 安装中文字体
      • 查看matplotlib 字体目录
      • 查看系统可用的中英文字体
      • matplotlib 设置中文字体
      • seaborn设置中文字体
      • 其他解决 matplotlib 中文显示的思路
  • NLP系列文章

构思这个系列的初衷是很明显的,之前我是从图论起家搞起了计算机视觉,后来发现深度学习下的计算机视觉没的搞了,后来正好单位的语料很丰富就尝试了NLP 的一些东西,早期非常痴迷于分词等等的技术,后来发现NLP 里面是有广阔天地的。

如果你现在打开微信,可能很多公众号都在推送从哪里爬取了一些语料数据如下图,


原文链接:透过评论看Runningman

比如豆瓣电影的评论,对某某最新上映的电影做了如下一些分析,看起来花花绿绿很是高端,当然我们也能做,而且要做的更高端一些!!!


NLP 可视化

NLP 可视化有多种实现方案,包括我们熟知的词云就非常直观。当然还有主题模型,句子依存分析,知识图谱等等展现手段,下面我们分别就一些经典可视化手段进行介绍。

wordCloud

# encoding: utf-8
'''
@author: season
@contact: shiter@live.cn@file: wordCloud.py
@time: 2018/11/6 22:38
@desc:
'''import matplotlib.pyplot as plt
from wordcloud import WordCloud
import jieba
import jieba.analyse
import pandasimport osdef file_name(file_dir,extension):L = []for root, dirs, files in os.walk(file_dir):for file in files:if os.path.splitext(file)[1] == extension:L.append(os.path.join(root, file))return Lfile_list = file_name('blog/','.txt')print(file_list)def get_all_strFromTxt(file_name):str_blog = ''with open(file_name,'r',encoding='utf-8') as f:str_blog = f.read()return str_blog# file_path = u'''0.csv'''
# col_names = ["index","1","2"]
# data = pandas.read_csv(file_path, names=col_names, header = 0,engine='python', dtype=str,encoding='utf-8')
# # 返回前n行
# # 返回前n行
# first_rows = data.head(n=2)
# print(first_rows)
#
# data.info()
#
#
#top_word_dict = {}def getTopkeyWordsTFIDF(stop_word_file_path,topK=100,content = ''):try:jieba.analyse.set_stop_words(stop_word_file_path)tags = jieba.analyse.extract_tags(content, topK, withWeight=True,allowPOS=('ns', 'n', 'vn', 'v'))for v, n in tags:print (v + '\t' + str((n )))top_word_dict[v] = n*100except Exception as e:print(e)finally:passdef getTopkeyWordsTextRank(stop_word_file_path,topK=100,content = ''):try:jieba.analyse.set_stop_words(stop_word_file_path)tags = jieba.analyse.textrank(content, topK, withWeight=True)for v, n in tags:print (v + '\t' + str(int(n )))except Exception as e:print(e)finally:passstr_summary = ''
#
# for i in range(0, len(data)):
#     #print(data.iloc[i]['line_remark'])
#     str_summary = str_summary+data.iloc[i]['line_remark']
#for i in file_list:str_summary = str_summary + get_all_strFromTxt(i)text_from_file_with_apath = str_summarygetTopkeyWordsTFIDF('stop_words.txt',150,text_from_file_with_apath)stop_words = [' ','挂号']# 可以指定字体,或者按照词频生成
def show_WordCloud(str_all):wordlist_after_jieba = jieba.cut(str_all, cut_all=True)wl_space_split = " ".join(wordlist_after_jieba)my_wordcloud = WordCloud(background_color = "white",width = 1000,height = 860,font_path = "msyh.ttc",# 不加这一句显示口字形乱码margin = 2,max_words=150, # 设置最大现实的字数stopwords=stop_words,# 设置停用词max_font_size=250,# 设置字体最大值random_state=50# 设置有多少种随机生成状态,即有多少种配色方案)#my_wordcloud = my_wordcloud.generate(wl_space_split)my_wordcloud = my_wordcloud.generate_from_frequencies(top_word_dict)plt.imshow(my_wordcloud)plt.axis("off")plt.show()show_WordCloud(text_from_file_with_apath)

词云结果:(值得一提的是我们可以分别用TFIDF 或者TEXTRANK 算法提取关键词)


本人博客关键词 TF-IDF

算法   0.08393536068790623
图像  0.06798005803851344
数据  0.05240655130424626
文档  0.05059459998147416
博主  0.05050301638484851
使用  0.04356879903615233
函数  0.042060415733978916
查询  0.04005136456931241
匹配  0.037386342706479996
代码  0.03603846563455227
方法  0.034559914773027035
节点  0.033931860083514016
特征  0.03291738415318488
进行  0.031490540413372146
排序  0.029646884115013712
计算  0.029533756683699914
需要  0.029447451266380476
线程  0.02876913122420475
像素  0.028464105792597654
模型  0.027687724999548125
文件  0.027195920887218235
字段  0.026565494216139303
结果  0.025830152697758277
视差  0.024437895533599558
信息  0.02390653201451686
分片  0.02315742689824399
文章  0.02157718425850839
处理  0.02109550803266701
学习  0.021005721546578465
定义  0.02056261379145052
实现  0.02039579088457056
参数  0.02036164789518406
问题  0.020284272744458855
用户  0.019859257580053805
返回  0.019832118152486682
分词  0.019801132262955684
创建  0.019597880527283076
系统  0.019390564734465893
版权  0.018984989081581773
时候  0.018884022674800702
转载  0.01866584359633088
检测  0.018436606839486752
包含  0.017926737352527033
矩阵  0.017271551959541505
安装  0.0171156281612187
数据库 0.016960979586574783

LDA 主题模型

LDA 据说非常复杂,我看了半天好像也没有太懂
不过有代码可以跑,这一点是很好的。 用我的所有博客跑出来的5个主题如下:

Topic #0:
我们 自己 如果 时候 就是 没有 数据 问题 进行 排序 选择 需要 函数 什么 学习 x2 工作 知道 这样 时间
Topic #1:
const char value doc xml node element file error bool void text str project true print code size buf false
Topic #2:
cv image include mat width size img height double lib void data opencv 图像 null std char src float max
Topic #3:
算法 数据 使用 特征 进行 方法 匹配 模型 www 文档 查询 图像 需要 信息 通过 系统 结果 所有 基于 com
Topic #4:
string self left cout include right def array result root push vector class endl void null sum size char end

具体代码详见:NLP 学习仓库


matplotlib seaborn 绘图加载中文字体

如果系统,及matplotlib 本身有中文字体
可以在代码中使用

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['Microsoft YaHei']

如果没有,那么windows 系统需要下载字体,linux 系统需要安装字体。

CentOS 安装中文字体

下载ttf 格式字体,如 黑体, msyh.ttf

使用如下脚本安装:

cd /usr/share/fonts/yourfontsdir
#生成字体索引信息. 会显示字体的font-family
sudo mkfontscale
sudo mkfontdir
#更新字体缓存:
fc-cache

查看matplotlib 字体目录

import matplotlib
matplotlib.matplotlib_fname()

输出:

'/home/hadoop/anaconda/envs/playground_py36/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc'

查看系统可用的中英文字体

  • centos linux 下查看中文字体
fc-list  :lang=zh

输出

Microsoft YaHei,微软雅黑:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
Microsoft YaHei UI:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
  • matplotlib 可用字体
from matplotlib.font_manager import FontManager
import subprocessmpl_fonts = set(f.name for f in FontManager().ttflist)print ('all font list get from matplotlib.font_manager:')
for f in sorted(mpl_fonts):print('\t' + f)# 仅在Linux下能够正常运行
output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True, encoding="utf8")zh_fonts = set(f.split(',',1)[0] for f in output.split('\n'))print('\n' +'Chinese font list get from fc-list:')
for f in sorted(zh_fonts):print('\t' + f)print('\n' +'the fonts we can use:')
available = set(mpl_fonts) & set(zh_fonts)
for f in available:print('\t' + f)

输出:

all font list get from matplotlib.font_manager:DejaVu SansDejaVu Sans DisplayDejaVu Sans MonoDejaVu SerifDejaVu Serif DisplayMicrosoft YaHeiSTIXGeneralSTIXNonUnicodeSTIXSizeFiveSymSTIXSizeFourSymSTIXSizeOneSymSTIXSizeThreeSymSTIXSizeTwoSymcmb10cmex10cmmi10cmr10cmss10cmsy10cmtt10Chinese font list get from fc-list:Microsoft YaHeiMicrosoft YaHei UIthe fonts we can use:Microsoft YaHei

matplotlib 设置中文字体

效果图:

matplotlit可以采用设置字体的办法

%load_ext autoreload
%autoreload 2
%matplotlib inline# ...
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontPropertiesfont = FontProperties(fname=r"msyh.ttc", size=14)  plt.bar([1, 3, 5, 7, 9], [5, 4, 8, 12, 7], label='graph 1')plt.bar([2, 4, 6, 8, 10], [4, 6, 8, 13, 15], label='graph 2')# params# x: 条形图x轴
# y:条形图的高度
# width:条形图的宽度 默认是0.8
# bottom:条形底部的y坐标值 默认是0
# align:center / edge 条形图是否以x轴坐标为中心点或者是以x轴坐标为边缘plt.legend()plt.xlabel(u'中文',FontProperties=font)
plt.ylabel('value')plt.title(u'测试例子——条形图', FontProperties=font)plt.show()

seaborn设置中文字体

(以 matplotlib 为基础的库的可视化库的中文显示问题,都可以这么设置)

seaborn就麻烦一点,先把matplotlib调试好,才有修改配置文件,并下载相关字体的办法进行配置

配置方法:

  • 1.下载字体SimHei,放在matplotlib文件夹中

  • 2.修改配置文件,在matplotlib/mpl-data/目录下面matplotlibrc ,修改下面三项配置

    font.family : sans-serif
    font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
    axes.unicode_minus:False,#作用就是解决负号’-'显示为方块的问题

  • 3.命令行重新载入字体

from matplotlib.font_manager import _rebuild_rebuild() #reload一下

上述内容 参考链接:

https://www.zhihu.com/question/25404709/answer/309784195

那么设置完成matplotlib 后,seaborn 等依赖库,只要配置好如下对应代码即可

#首先运行下面两行
import pandas as pd
from matplotlib.font_manager import _rebuild
_rebuild()
########### 测试代码
import matplotlib.pyplot as plt
import seaborn as snsdata = {'性别':['男','女','女','男','男'],'姓名':['小明','小红','小芳','大黑','张三'],'年龄':[20,21,25,24,29]}test_pdf = pd.DataFrame(data,index=['one','two','three','four','five'],columns=['姓名','性别','年龄','职业'])sns.set_style('whitegrid',{'font.sans-serif':['SimHei','Arial']})
sns.set_context("talk")%matplotlib inlinesns.boxplot( y='年龄', data=test_pdf, palette="Set3")
plt.show()

其实核心就是这一句:设置字体

sns.set_style('whitegrid',{'font.sans-serif':['SimHei','Arial']})

效果:

参考: 天池整体可视化教程

其他解决 matplotlib 中文显示的思路

安装包:

#安装开源库pyplotzpip install pyplotz

from pyplotz.pyplotz import PyplotZ
from pyplotz.pyplotz import plt
pltz=PyplotZ()
pltz.enable_chinese()

上述方案和这个方案都有一个最大的问题,就是pandas直接调用的时候还是出问题,现在还没有找到参数传递的口子。 猜想在pandas 中还有配置文件的目录,这个目录的配置文件优先级高于matplotlib的自带配置文件,有待进一步验证。


NLP系列文章

  • 深度学习与中文短文本分析总结与梳理
  • 错误使用tf-idf的实例分享
  • 知识图谱技术分享会----有关知识图谱构建的部分关键技术简介及思考
  • 基于分布式的短文本命题实体识别之----人名识别(python实现)
  • 简单NLP分析套路(1)----语料库积累之3种简单爬虫应对大部分网站
  • 简单NLP分析套路(2)----分词,词频,命名实体识别与关键词抽取
  • 简单NLP分析套路(3)---- 可视化展现初步

简单NLP分析套路(3)---- 可视化展现初步相关推荐

  1. 简单Nlp分析套路,获取数据(爬虫),数据处理(分词,词频,命名实体识别与关键词抽取),结果展现

    简单NLP分析套路(1)----语料库积累之3种简单爬虫应对大部分网站: https://cloud.tencent.com/developer/article/1384454 简单NLP分析套路(2 ...

  2. 简单NLP分析套路(2)----分词,词频,命名实体识别与关键词抽取

    文章大纲 中文分词技术 评测参考 云服务 哈工大语言云 ltp 基于深度学习方法的中文分词 一个领域细分的中文分词工具包(北大最新开源) 信息检索与关键词提取 TF-IDF TEXTRANK word ...

  3. 简单NLP分析套路(1)----语料库积累之3种简单爬虫方式应对大部分网站

    目录 近期听课的思考 语料库的记录 3种爬虫 urllib.request + BeautifulSoup scrapy 与xpath 使用selenium 模拟浏览器行为 新的改变 相关链接 未完待 ...

  4. 微博评论内容的Chatgpt 话题聚焦和情感分析 情感分析LDA主题可视化多元线性回归

    为了分析热点话题背后演化的逻辑,本项目选取了掀起大范围讨论的OpenAI发布的语言训练模型"ChatGPT"作为研究对象.通过对微博.豆瓣.知乎等社交平台进行考察分析,微博以活跃用 ...

  5. 用python进行简单的数据分析和数据可视化

    用python进行简单的数据分析和数据可视化 本篇文章主要是初步探索数据分析,简单了解数据分析大致流程 数据来源:来自于Kaggle平台上的一个项目:Explore San Francisco cit ...

  6. 如何将数据进行数据可视化展现?

    作为一名交互设计师在进行数据可视化时,就是要把这些宝贵的数据资产变得触手可及,从而充分发挥数据的力量. 数据可视化 好的可视化设计一定集易读.突出数据价值.易于分析.美观为一体的,最终让数据变得更加简 ...

  7. 生活大爆炸(TBBT): 台词爬取、词云生成与NLP分析

    <生活大爆炸>(英文:The Big Bang Theory 简称:TBBT)广受喜爱(据说还可以练听力练口语blabla),去年随着第12季的播出而完结,最近也算是在补.有一天闲聊的时候 ...

  8. ClickHouse 实现有序漏斗分析与数据可视化

    Clickhouse 实现漏斗分析与数据可视化 1.前言 2.环境准备 2.1.测试表 2.2.插入伪造的样例数据 2.2.1.插入伪造的登录数据 2.2.2.插入伪造的浏览数据 2.2.3.插入伪造 ...

  9. 易生信高级转录组分析和数据可视化-最后一天报名

    常规转录组是我们最常接触到的一种高通量测序数据类型,其实验方法成熟,花费较低,以后应该就如做个PCR一样常见.而且分析思路简洁清晰,是入门生信,学习生信分析思路的首选. 数据分析是相通的,通过一个简单 ...

最新文章

  1. oracle分区交换速度,oracle交换分区对数据的加载提速案例
  2. leetcode算法题--解码方法★
  3. MyBatisPLus入门项目实战各教程目录汇总
  4. VTK:几何对象之Circle
  5. ArrayBlockingQueue源码
  6. CodeForces - 1255D Feeding Chicken(贪心+构造+模拟)
  7. mysql查询数据库报错sql_mode_MySQL数据库的sql_mode
  8. 【Vegas原创】巧用GridView ButtonField列
  9. 单例模式应用场景_面试:请你谈谈单例模式的优缺点,注意事项,使用场景
  10. 类的初始化和实例化之间的关系
  11. 使用 charles 进行抓包
  12. android微博表情条,类似新浪微博EditText,可@某人,#插入话题,表情
  13. java 切面 不执行,Spring AOP 切面没有执行
  14. 椭球面上的几种曲率半径
  15. wpsppt怎样让图片模糊_PPT怎么设置图片由模糊到清楚?
  16. 海外侨胞代表建议广东各市抱团出海开设名优特产品实体店
  17. h3 经典地图 第2辑(RPG)
  18. 群晖DSM桌面无法删除快捷方式(无法右键)解决方法
  19. SCAU软件开发基础C++复习
  20. 洪恩软件进军网游产业 池宇峰揭密完美世界

热门文章

  1. 【丁丁历险记】ESP32-CAM做图像识别
  2. python方法实现字符串反转
  3. 计算机实现加减乘除法的原理
  4. miui 10 android 9,基于安卓10的MIUI 10小米9开始内测!小米8没必要催
  5. Virtuoso Layout L 系列教程:05 快捷键(下)
  6. 资深人士分析:“偷菜游戏”带给我们的启示
  7. Android网络功能开发(4)——文件下载和上传
  8. 小型企业搭建网站,如何选择虚拟主机和云服务器?
  9. Windows XP不用输入密码自动登录- -
  10. 简单的数字水印加密技术