1 绘制条形图

import matplotlib  # 数据可视化
from matplotlib import pyplot as plt # 配置字体
matplotlib.rcParams["font.sans-serif"] = ["simhei"] # 黑体
matplotlib.rcParams["font.family"] = "sans-serif"
'''
left, x轴
height, y轴
width=0.8 ,轴宽
'''
# .bar(x轴, y轴, label=u"标签名", color="颜色")
plt.bar([1], [123], label="广州", color="r")
plt.bar([2], [141], label=u"北京")
plt.bar([3], [11], label=u"上海")
plt.bar([4], [41], label=u"深圳")
plt.bar([5], [181], label=u"香港")
plt.legend() # 绘图
# plt.show()
plt.savefig("1.jpg") # 保存图片

2 绘制智联招聘职位岗位数量图

python
import urllib.request
import urllib.parse
import re
import matplotlib
import matplotlib.pyplot as plt # 数据可视化 matplotlib.rcParams["font.sans-serif"] = ["simhei"] # 配置字体
matplotlib.rcParams["font.family"] = "sans-serif"
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"} def getnumberbyname(searchname):
searchname = {"kw": searchname}
searchname = urllib.parse.urlencode(searchname)
url = "http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E6%B7%B1%E5%9C%B3&" + searchname + "&p=1&isadv=0"
print(url, '==========')
req = urllib.request.Request(url, headers=header)
pagesource = urllib.request.urlopen(req).read().decode('utf-8', 'ignore')
restr = "<em>(\\d+)</em>" # 正则表达式,()只要括号内的数据
regex = re.compile(restr, re.IGNORECASE)
mylist = regex.findall(pagesource)
return mylist[0]
# 岗位列表
pythonlist = ["python", "python 运维", "python 测试", "python 数据", "python web"]
num = 0
for pystr in pythonlist:
num += 1
print(pystr, eval(getnumberbyname(pystr)))
# 绘制柱状图
plt.bar([num], eval(getnumberbyname(pystr)), label=pystr) plt.legend() # 绘制
plt.show() # 显示

3 词云

“词云”这个概念由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)提出。“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

  • 词频
  • 分词 语句切割
python
import jieba
mystr = "小姐姐,我看你挺能睡的,睡我还不好" wordsplitList = jieba.cut(mystr, cut_all=True) # 切割, 全部切割
print(wordsplitList) # 返回一个生成器对象
print('/'.join(wordsplitList))
wordsplitListforSearch = jieba.cut_for_search(mystr) # 按搜索方式切割
print(wordsplitListforSearch) print('/'.join(wordsplitListforSearch))
- 制作python岗位需求词云
python
import wordcloud 导入词云
from wordcloud import STOPWORDS # 停止词
import jieba
import numpy as np # 科学计算
import matplotlib # 数据可视化
from matplotlib import pyplot as plt
from PIL import Image # 图片处理

读取文本

pythonInfo = open('pythonworkinfo.txt', 'r', encoding='utf-8', errors='ignore').read()
print(pythonInfo)

切割

pythonCut = jieba.cut(pythonInfo, cut_all=True)
pythonInfoList = ' '.join(pythonCut) # 返回一个生成器对象
print(pythonInfoList)
backgroud = np.array(Image.open('pig.jpg')) # 将图片格式化成RBG数组
myCloudword = wordcloud.WordCloud(font_path='simkai.ttf', # 字体路径
width=400, height=200,
mask=backgroud, # 字体颜色
scale=1, # 比例
max_words=200, # 最大字数
min_font_size=4, # 最小字体
stopwords=STOPWORDS, # 默认停止词
random_state=50, # 随机角度
background_color='black', # 背景颜色
max_font_size=100 # 最大字体
).generate(pythonInfoList)
#plt.imshow(myCloudword)
#plt.show() 图片展示
plt.figimage(mywordCloud) #绘制图片
plt.imsave('python.png',mywordCloud) #保存图片

精简生成词云

import matplotlib.pyplot as plt
from wordcloud import WordCloud
import jieba text_from_file_with_apath = open('pythonworkinfo.txt',encoding='utf-8',errors='ignore').read()
print(text_from_file_with_apath)
wordlist_after_jieba = jieba.cut(text_from_file_with_apath, cut_all=True) wl_space_split = " ".join(wordlist_after_jieba)
my_wordcloud = WordCloud().generate(wl_space_split) plt.imshow(my_wordcloud)
plt.axis("off")
plt.show() #注:碰到utf-8的编码问题时候,可以去源码wordcloud.py文件中新增路径,前提下好中文字体库simkai.ttf
FONT_PATH = os.environ.get("FONT_PATH", os.path.join(os.path.dirname(__file__), "simkai.ttf"))
覆盖掉默认的DroidSansMono.ttf

4 Matplotlib 绘图

1 多个subplot

# subplot.py

import matplotlib.pyplot as plt
import numpy as np data = np.arange(100, 201)
plt.subplot(2, 1, 1)
plt.plot(data) data2 = np.arange(200, 301)
plt.subplot(2, 1, 2)
plt.plot(data2) plt.show()

2 线形图

# plot.py
import matplotlib.pyplot as plt plt.plot([1, 2, 3], [3, 6, 9], '-r')
plt.plot([1, 2, 3], [2, 4, 9], ':g') plt.show()

这段代码说明如下:

  1. plot函数的第一个数组是横轴的值,第二个数组是纵轴的值,所以它们一个是直线,一个是折线;
  2. 最后一个参数是由两个字符构成的,分别是线条的样式和颜色。前者是红色的直线,后者是绿色的点线。

3 散点图

# scatter.py

import matplotlib.pyplot as plt
import numpy as np
N = 20
plt.scatter(np.random.rand(N) * 100,
np.random.rand(N) * 100,
c='r', s=100, alpha=0.5) plt.scatter(np.random.rand(N) * 100,
np.random.rand(N) * 100,
c='g', s=200, alpha=0.5) plt.scatter(np.random.rand(N) * 100,
np.random.rand(N) * 100,
c='b', s=300, alpha=0.5)
plt.show()

这段代码说明如下:

  1. 这幅图包含了三组数据,每组数据都包含了20个随机坐标的位置
  2. 参数c表示点的颜色,s是点的大小,alpha是透明度

4 饼状图

# pie.py
import matplotlib.pyplot as plt
import numpy as np labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
data = np.random.rand(7) * 100 plt.pie(data, labels=labels, autopct='%1.1f%%')
plt.axis('equal')
plt.legend() plt.show()

这段代码说明如下:

  1. data是一组包含7个数据的随机数值
  2. 图中的标签通过labels来指定
  3. autopct指定了数值的精度格式
  4. plt.axis('equal')设置了坐标轴大小一致
  5. plt.legend()指明要绘制图例(见下图的右上角)

5 条形图

# bar.py

import matplotlib.pyplot as plt
import numpy as np
N = 7
x = np.arange(N)
data = np.random.randint(low=0, high=100, size=N)
colors = np.random.rand(N * 3).reshape(N, -1)
labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] plt.title("Weekday Data")
plt.bar(x, data, alpha=0.8, color=colors, tick_label=labels)
plt.show()

这段代码说明如下:

  1. 这幅图展示了一组包含7个随机数值的结果,每个数值是[0, 100]的随机数
  2. 它们的颜色也是通过随机数生成的。np.random.rand(N * 3).reshape(N, -1)表示先生成21(N x 3)个随机数,然后将它们组装成7行,那么每行就是三个数,这对应了颜色的三个组成部分。如果不理解这行代码,请先学习一下Python 机器学习库 NumPy 教程
  3. title指定了图形的标题,labels指定了标签,alpha是透明度

6 直方图

# hist.py

import matplotlib.pyplot as plt
import numpy as np data = [np.random.randint(0, n, n) for n in [3000, 4000, 5000]]
labels = ['3K', '4K', '5K']
bins = [0, 100, 500, 1000, 2000, 3000, 4000, 5000] plt.hist(data, bins=bins, label=labels)
plt.legend() plt.show()

上面这段代码中,[np.random.randint(0, n, n) for n in [3000, 4000, 5000]]生成了包含了三个数组的数组,这其中:

  • 第一个数组包含了3000个随机数,这些随机数的范围是 [0, 3000)
  • 第二个数组包含了4000个随机数,这些随机数的范围是 [0, 4000)
  • 第三个数组包含了5000个随机数,这些随机数的范围是 [0, 5000)

爬虫之绘图matplotlib与词云(七)的更多相关文章

  1. Python3+pdfminer+jieba+wordcloud+matplotlib生成词云(以深圳十三五规划纲要为例)

    一.各库功能说明 pdfminer----用于读取pdf文件的内容,python3安装pdfminer3k jieba----用于中文分词 wordcloud----用于生成词云 matplotlib ...

  2. python 基于 wordcloud + jieba + matplotlib 生成词云

    词云 词云是啥?词云突出一个数据可视化,酷炫.以前以为很复杂,不想python已经有成熟的工具来做词云.而我们要做的就是准备关键词数据,挑一款字体,挑一张模板图片,非常非常无脑.准备好了吗,快跟我一起 ...

  3. python预课05 爬虫初步学习+jieba分词+词云库+哔哩哔哩弹幕爬取示例(数据分析pandas)

    结巴分词 import jieba """ pip install jieba 1.精确模式 2.全模式 3.搜索引擎模式 """ txt ...

  4. Python 词云可视化

    最近看到不少公众号都有一些词云图,于是想学习一下使用Python生成可视化的词云,上B站搜索教程的时候,发现了一位UP讲的很不错,UP也给出了GitHub上的源码,是一个很不错的教程,这篇博客主要就是 ...

  5. 如何用Python 制作词云-对1000首古诗做词云分析

    公号:码农充电站pro 主页:https://codeshellme.github.io 今天来介绍一下如何使用 Python 制作词云. 词云又叫文字云,它可以统计文本中频率较高的词,并将这些词可视 ...

  6. python使用matplotlib画图,jieba分词、词云、selenuium、图片、音频、视频、文字识别、人脸识别

    一.使用matplotlib画图 关注公众号"轻松学编程"了解更多. 使用matplotlib画柱形图 import matplotlib from matplotlib impo ...

  7. 用Python爬虫对豆瓣《敦刻尔克》影评进行词云展示

    最近很想看的一个电影,去知乎上看一下评论,刚好在学Python爬虫,就做个小实例. 代码基于第三方修改 原文链接  http://python.jobbole.com/88325/#comment-9 ...

  8. 爬虫之使用requests爬取某条标签并生成词云

    一.爬虫前准备 1.工具:pychram(python3.7) 2.库:random,requests,fake-useragent,json,re,bs4,matplotlib,worldcloud ...

  9. python爬虫——词云分析最热门电影《后来的我们》

    1 模块库使用说明 1.1 requests库 requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更 ...

随机推荐

  1. hdu6325 Interstellar Travel 凸包变形

    题目传送门 题目大意: 给出n个平面坐标,保证第一个点和第n个点y值为0,其余点的x坐标都在中间,要从 i 点走到 j 点的要求是 i 点的横坐标严格小于 j 的横坐标,并且消耗的能量是(xi * y ...

  2. F查询和Q查询

    F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的实例可以 ...

  3. Json与jsonpath再认识与初识

    一.json格式的数据 1.认识 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于 ...

  4. python-基础学习篇(一)

    python基础学习(一) 不积硅步,无以至千里.基础的学习越加透彻,才能更清楚的理解和分析需求,我贯彻基础学习“永无止境”的理念,故把自学的知识梳理在博客中,基础学习篇无限更新. python介绍 ...

  5. Python 中下划线的 5 种含义

    详细请参考这篇文章 单前导下划线:_var 单末尾下划线:var_ 双前导下划线:__var 双前导和末尾下划线:__var__ 单下划线:_

  6. 如何透过上层div点击下层的元素解决方法

    一.问题描述 笔者是在些一个登录界面时遇到这个问题的,需求是点击登录按钮出现登录悬浮框,初始化时登录悬浮框是display:none的,但笔者发现登录框那一块区域的input框无法响应点击时间,也无法 ...

  7. Nginx 配置跨域权限

    今天设置静态资源服务器时发现 Font from origin 'http://start.fbzl.org' has been blocked from loading by Cross-Origi ...

  8. 关于jqgrid的一些使用

    1.jqgrid如何切换中英文 在做电力监控系统的时候,根据项目的需要涉及到中英文的切换,一直纠结了好久没有好的办法,虽然我知道可以手动更改引入的js文件就可以更改中英文,但是动态的一直没有办法更改, ...

  9. 命令行编译java项目

    命令行编译java项目 项目名: testproj 目录 src -> cn -> busix -> test bin lib 编译项目 cd testproj javac -d . ...

  10. BNU29139——PvZ once again——————【矩阵快速幂】

    PvZ once again Time Limit: 2000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java cla ...