分享python一些有趣的第三方库

1、wordcloud 词云库

这个库的作用是可以读入字符串或文本生成对应的词云。

但是初次使用词云库来进行中文字符词云生成时可能会出现乱码。举个栗子:

import wordcloud
w = wordcloud.WordCloud()
w.generate("在这个充满机会与挑战的时代,我们面临着着许多选择和抉择。无论是个人还是企业,都需要紧跟时代的步伐,不断创新和进化才能够生存和发展下去。同时,我们也需要时刻保持着一份善良、快乐和感恩的心态,珍惜眼前所拥有的一切,踏实做事、不忘初心,才能赢得更多的尊重、认可和幸福。")
w.to_file('cloud.png')

这是一段最简单的生成词云的代码,但是生成效果却是这样的:

 这是因为wordcloud默认是不支持显示中文字符的,中文会展现为乱码。我们需要更改WordCloud的字体参数。在windows操作系统下,我们的字体文件都被默认存储在这个路径之下C:\Windows\Fonts,我们可以在里面选择一个觉得好看的font。

然后修改字体的路径参数:

import wordcloud
w = wordcloud.WordCloud(font_path=r"C:\Windows\Fonts\msyh.ttc")
w.generate("在这个充满机会与挑战的时代,我们面临着着许多选择和抉择。无论是个人还是企业,都需要紧跟时代的步伐,不断创新和进化才能够生存和发展下去。同时,我们也需要时刻保持着一份善良、快乐和感恩的心态,珍惜眼前所拥有的一切,踏实做事、不忘初心,才能赢得更多的尊重、认可和幸福。")
w.to_file('cloud.png')

这样中文乱码的问题就被顺利解决了。

但是你可以看到我们的图片其实很丑,好在我们可以通过蒙版图片来进行一些更好看的设置。

首先我们可以在网上来下载一个蒙版图片,或者自己用turtle库画一个。这里值得注意的是,一旦指定蒙版图片,你设定的宽高参数将无效,词云将会填充图片中除了白色以外的其他部分,

然后我们指定生成蒙版图片的词云。

import wordcloud
import matplotlib.pyplot as plt
import cv2

mask=cv2.imread('girl.png')
w=wordcloud.WordCloud(mask=mask,background_color='lightpink',font_path=r"C:\Windows\Fonts\msyh.ttc")
with open('resource.txt', encoding='utf-8') as f:
    w.generate(f.read())
    plt.imshow(w)
    plt.axis('off')
    plt.show()
    w.to_file('cloudtwo.png')

通过这种方式,你就能获得一个词云图片

plt.imshow(wc) # 传入wordcloud对象

plt.axis('off') # 关闭坐标轴

plt.show()是展示图片。因为cv2.showimg的参数是一个numpy数组,所以我们用matplotlib来读取。

2、jieba 中文分词库

中文分词就是给中文语段分为一个一个的词汇,不是现在分词过去分词中的分词,就是将语段拆分为词汇。在分词的实现上,jieba 库使用了基于字典的前缀匹配算法。它首先通过加载一个预定义的词典,构建一个有向无环图(DAG),然后通过词频和词语的概率,利用动态规划算法计算出最大概率路径,从而找到最可能的分词结果。读过《数学之美》的朋友们应该比较熟悉目前的NLP不是基于语法分析而是基于概率统计的。

这个库的分词模式有三种

  1. 精确模式。jieba.lcut(s),能够将文本精确地切分开,切分结果不存在冗余单词。
  2. 全模式。jieba.lcut(s, cut_all=True),把文本中所有可能的词组都找出来。
  3. 搜索模式。jieba.lcut_for_search(s),在精确模式的基础上,对长词再进行切分。

精确模式:

import jieba
text = '''冬天不像夏天,没入深夜,路上已静悄悄的,再加上这里本就人烟稀少,更是静的可怕。一个人静静的走着,就这样静静的走着,任凭影子拉的长长的。你呢?怎么不
打个电话? 是不是发信了我没看见?掏出手机,空空的,没有。继续走吧。怎么这么静呢?没有鸟叫,也没有小虫的唧唧声。哎,不可能有嘛,小傻瓜,这是冬天啊。冬天?怎么
也没人呢?小猫小狗也没有,偶尔有辆车疾驰而过,赶趟似的。手机依然没动静。不看了,每次看过,都是沮丧。一辆车疾驰而过又停下,耳边传来一声大喝。叫我吗?转过身,看一眼,
又迅速转过来,心跳开始加快。不会是坏人吧 !脚步不由得加快,若遇到坏人,怎么办。你呢?在哪里呢?你说要保护我的。四十分钟的路,有一半了吧。还好,没事。继续走吧。'''
fenci = jieba.lcut(text)
print(fenci)

打印出来的结果如下,可见jieba库将分词形成了列表:['冬天', '不像', '夏天', ',', '没入', '深夜', ',', '路上', '已', '静悄悄', '的', ',', '再', '加上', '这里', '本', '就', '人烟稀少', ',', '更是', '静', '的', '可怕', '。', '一个', '人', '静静的', '走', '着', ',', '就', '这样', '静静的', '走', '着', ',', '任凭', '影子', '拉', '的', '长长的', '。', '你', '呢', '?', '怎么', '不', '\n', '打个', '电话', '?', ' ', '是不是', '发信', '了', '我', '没', '看见', '?', '掏出', '手机', ',', '空空', '的', ',', '没有', '。', '继续', '走', '吧', '。', '怎么', '这么', '静', '呢', '?', '没有', '鸟叫', ',', '也', '没有', '小虫', '的', '唧唧', '声', '。', '哎', ',', '不', '可能', '有', '嘛', ',', '小', '傻瓜', ',', '这是', '冬天', '啊', '。', '冬天', '?', '怎么', '\n', '也', '没人', '呢', '?', '小猫', '小狗', '也', '没有', ',', '偶尔', '有', '辆车', '疾驰', '而', '过', ',', '赶趟', '似的', '。', '手机', '依然', '没动静', '。', '不看', '了', ',', '每次', '看过', ',', '都', '是', '沮丧', '。', '一辆车', '疾驰', '而', '过', '又', '停下', ',', '耳边', '传来', '一声', '大喝', '。', '叫', '我', '吗', '?', '转过身', ',', '看', '一眼', ',', '\n', '又', '迅速', '转过', '来', ',', '心跳', '开始', '加快', '。', '不会', '是', '坏人', '吧', ' ', '!', '脚步', '不由得', '加快', ',', '若', '遇到', '坏人', ',', '怎么办', '。', '你', '呢', '?', '在', '哪里', '呢', '?', '你', '说', '要', '保护', '我', '的', '。', '四十分钟', '的', '路', ',', '有', '一半', '了', '吧', '。', '还好', ',', '没事', '。', '继续', '走', '吧', '。']而且标点符号也会被分。列表长为215。

除此之外,jieba库还有两种分词模式全模式和搜索模式。

这是全模式的分词:
['冬天', '不', '像', '夏天', ',', '没入', '深夜', ',', '路上', '已', '静悄悄', '悄悄', '悄悄的', ',', '再加', '加上', '这里', '本', '就', '人烟', '人烟稀少', '稀少', ',', '更是', '静', '的', '可怕', '。', '一个', '个人', '静静', '静静的', '走', '着', ',', '就', '这样', '静静', '静静的', '走', '着', ',', '任凭', '影子', '拉', '的', '长长', '长长的', '。', '你', '呢', '?', '怎么', '不', '', '\n', '', '打', '个', '电话', '?', ' ', '', '是不是', '不是', '发信', '了', '我', '没看', '看见', '?', '掏出', '出手', '手机', ',', '空空', '的', ',', '没有', '。', '继续', '走', '吧', '。', '怎么', '这么', '静', '呢', '?', '没有', '鸟叫', ',', '也', '没有', '小虫', '的', '唧唧', '声', '。', '哎', ',', '不可', '可能', '有', '嘛', ',', '小', '傻瓜', ',', '这', '是', '冬天', '啊', '。', '冬天', '?', '怎么', '', '\n', '', '也', '没人', '呢', '?', '小猫', '小狗', '也', '没有', ',', '偶尔', '有', '辆车', '疾驰', '而过', ',', '赶趟', '似的', '。', '手机', '依然', '没动', '没动静', '动静', '。', '不', '看', '了', ',', '每次', '看过', ',', '都', '是', '沮丧', '。', '一辆', '一辆车', '辆车', '疾驰', '而过', '又', '停下', ',', '耳边', '传来', '一声', '大', '喝', '。', '叫', '我', '吗', '?', '转过', '转过身', ',', '看', '一眼', ',', '\n', '', '又', '迅速', '转过', '过来', ',', '心跳', '跳开', '开始', '加快', '。', '不会', '是', '坏人', '吧', '', ' ', '!', '脚步', '不由', '不由得', '加快', ',', '若', '遇到', '坏人', ',', '怎么', '怎么办', '。', '你', '呢', '?', '在', '哪里', '呢', '?', '你', '说', '要', '保护', '我', '的', '。', '四十', '四十分钟', '十分', '十分钟', '分钟', '的', '路', ',', '有', '一半', '了', '吧', '。', '还好', ',', '没事', '。', '继续', '走', '吧', '。']可以看到'静悄悄', '悄悄', '悄悄的',重复了多次。列表长为245。

这是搜索模式的分词
['冬天', '不像', '夏天', ',', '没入', '深夜', ',', '路上', '已', '悄悄', '静悄悄', '的', ',', '再', '加上', '这里', '本', '就', '人烟', '稀少', '人烟稀少', ',', '更是', '静', '的', '可怕', '。', '一个', '人', '静静', '静静的', '走', '着', ',', '就', '这样', '静静', '静静的', '走', '着', ',', '任凭', '影子', '拉', '的', '长长', '长长的', '。', '你', '呢', '?', '怎么', '不', '\n', '打个', '电话', '?', ' ', '不是', '是不是', '发信', '了', '我', '没', '看见', '?', '掏出', '手机', ',', '空空', '的', ',', '没有', '。', '继续', '走', '吧', '。', '怎么', '这么', '静', '呢', '?', '没有', '鸟叫', ',', '也', '没有', '小虫', '的', '唧唧', '声', '。', '哎', ',', '不', '可能', '有', '嘛', ',', '小', '傻瓜', ',', '这是', '冬天', '啊', '。', '冬天', '?', '怎么', '\n', '也', '没人', '呢', '?', '小猫', '小狗', '也', '没有', ',', '偶尔', '有', '辆车', '疾驰', '而', '过', ',', '赶趟', '似的', '。', '手机', '依然', '没动', '动静', '没动静', '。', '不看', '了', ',', '每次', '看过', ',', '都', '是', '沮丧', '。', '一辆', '辆车', '一辆车', '疾驰', '而', '过', '又', '停下', ',', '耳边', '传来', '一声', '大喝', '。', '叫', '我', '吗', '?', '转过', '转过身', ',', '看', '一眼', ',', '\n', '又', '迅速', '转过', '来', ',', '心跳', '开始', '加快', '。', '不会', '是', '坏人', '吧', ' ', '!', '脚步', '不由', '不由得', '加快', ',', '若', '遇到', '坏人', ',', '怎么', '怎么办', '。', '你', '呢', '?', '在', '哪里', '呢', '?', '你', '说', '要', '保护', '我', '的', '。', '四十', '十分', '分钟', '十分钟', '四十分钟', '的', '路', ',', '有', '一半', '了', '吧', '。', '还好', ',', '没事', '。', '继续', '走', '吧', '。']列表长为233。

所以我们要根据具体情况选择我们的分词模式,善于联想的话肯定会发现,jieba库是不是可以和wordcloud库梦幻联动啊??确实是这样的捏。其实细心的同学应该发现我之前的中文词云很丑对吧,而且与其说是词云,不如说是句云。

这是因为wordcloud库是根据空格和标点符号进行分词的来生成词云的,所以我们之前那个不叫词云而是”句云“。现在我们结合jieba库将其转换为词云。

import wordcloud
import jieba
text = '''在这个充满机会与挑战的时代,我们面临着着许多选择和抉择。无论是个人还是企业,
都需要紧跟时代的步伐,不断创新和进化才能够生存和发展下去。同时,我们也需要时刻保持着一份
善良、快乐和感恩的心态,珍惜眼前所拥有的一切,踏实做事、不忘初心,才能赢得更多的尊重、认可和幸福。'''
fenci = jieba.lcut(text)
print(fenci)
print(len(fenci))
text2 = " ".join(fenci)
w = wordcloud.WordCloud(font_path=r"C:\Windows\Fonts\msyh.ttc")
w.generate(text2)
w.to_file("cloudthree.png")

这样才算的上是词云吧。

3、数据分析三剑客numpy、pandas、matplotlib

我觉得如果把这三个库都聊一聊的话可能我们就跑题了,为什么呢?因为我们的标题是“有趣的第三方库”,而这三个库中称的上还算有趣的也只有matplotlib了,其他两个实在是无趣!!但人家其余两个库确实很实用。

所以我们就重点来聊matplotlib:

这个库来头可不小,您所看到的科研论文里精美的图片,有很多都是出自它的手笔。

最基本的使用就是

plt.plot([1,2,3,4],[1,4,9,16])

plt.show()

我们还可以指定plt.plot([1,2,3,4],[1,4,9,16],‘ro’)来指定图像为红色的圆点。

其颜色和线条参数如下表:

实际上这就为我们绘制图像提供了很多样式。且参数的顺序并不重要。

我们还可以通过axis来设置图形坐标轴的边界

                                        plt.axis([xmin,xmax,ymin,ymax])

不过我们传入plt的基本都是numpy数组而不是py的列表。

我们是可以在一副图像中画多条线的。只要用,隔开即可。

也可以通过linspace来指定生成图片的x轴区间:

数据分析我推荐大家还是用jupyter来做的画更加清晰一点:

这里的话是关闭了红线的抗锯齿,如果直接用列表来接收两条线的话,是无法具体线条具体设置的。

一个比较重要的函数plt.subplot()可以在一个图中生成多个子图:subplot(行,列,序号)。

到此为止我们画的都是线条,我们接下来来画柱状图等:

避免中文乱码的配置:

plt.rcParams['font.sans-serif']=['SimHei']

还可以设定xlabel、ylabel、tick_params、xticks(rotation=xxx)旋转角度

1、柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中。

特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)

api:plt.bar(x, width, align='center', **kwargs)

for a,b in zip(x,y):

        plt.text(a,b+10,ha='center',b)来设置在图像上显示的文本

2、直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。

特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)

api:plt.hist(x, bins=None)

3、饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。        
特点:分类数据的占比情况(占比)
api:plt.pie(x, labels=,autopct=,colors)

这些绘制方法都很类似。

如果在折线图中要想等步长设置text,还有一些小妙招:

for a,b in zip(x【::10】,y【::10】):

        plt.text(a,b+10,ha='center',b)来设置在图像上显示的文本

不过我的评价是matplotlib的函数往往参数很难记,这里有一个快捷键ctrl+P快速查看函数参数,不过仍然可能需要非常熟练甚至是天天都在用才能达到随心所欲的境界。。通常还需要与pandas,numpy结合使用,难度更高了。

实现一个箭头这么多参数,让我反而不知道python不用声明数据类型是好是坏了。。

大家读到这里来可能已经审美疲劳了,心中会想:matplotlib就这??我用excel不是照做??

其实plt还能做很多高级图像,比如热力图、相关系数矩阵图、箱线图等等,这才是更贴近于数据分析、数学建模的领域。但是由于笔者时间能力有限,不能继续深入探讨了,最后分享两张图。

这是对于问题进行分析的图表建议。

这次的分享就到这里,谢谢大家的观看。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值