爬虫入门之绘图matplotlib与词云(七)

简介: 1 绘制条形图import matplotlib # 数据可视化from matplotlib import pyplot as plt# 配置字体matplotlib.

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 绘制智联招聘职位岗位数量图

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)提出。“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

  • 词频
  • 分词 语句切割
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岗位需求词云
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)
相关文章
|
2月前
|
Python
Matplotlib 绘图标记
Matplotlib 绘图标记
33 2
|
2月前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
2月前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
2月前
|
数据采集 存储 数据库
Python中实现简单爬虫的入门指南
【10月更文挑战第22天】本文将带你进入Python爬虫的世界,从基础概念到实战操作,一步步指导你如何使用Python编写一个简单的网络爬虫。我们将不展示代码示例,而是通过详细的步骤描述和逻辑讲解,帮助你理解爬虫的工作原理和开发过程。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你打开一扇通往数据收集新世界的大门。
|
4月前
|
Python
Matplotlib 教程 之 Matplotlib 绘图标记 9
在本教程中,我们将探讨如何使用 Matplotlib 的 `plot()` 方法中的 `marker` 参数来自定义图表标记。您可以选择不同的线类型(如实线 `&#39;-&#39;`、虚线 `&#39;:&#39;` 等),以及颜色类型(如红色 `&#39;r&#39;`、绿色 `&#39;g&#39;` 等)。同时,通过调整 `markersize (ms)`、`markerfacecolor (mfc)` 和 `markeredgecolor (mec)` 参数,可以定制标记的大小和颜色。
41 1
|
4月前
|
Python
Matplotlib 教程 之 Matplotlib 绘图标记 3
这段Matplotlib教程展示了如何通过`plot()`方法的`marker`参数来自定义图表标记,为数据点添加独特的视觉风格。例如,通过设置`marker = &#39;*&#39;`,可以使每个数据点显示为星形标记。这在需要对坐标轴进行特殊标注时尤为有用。下面的示例代码生成了一个带有星形标记的简单折线图。
43 2
|
3月前
|
数据可视化 定位技术 Python
Python数据可视化--Matplotlib--入门
Python数据可视化--Matplotlib--入门
34 0
|
4月前
|
搜索推荐 数据可视化 Python
Matplotlib 教程 之 Matplotlib 绘图标记 4
本教程介绍如何使用 Matplotlib 的 `plot()` 方法中的 `marker` 参数来自定义图表标记,使你的数据可视化更加直观和个性化。通过实例演示了如何设置下箭头作为数据点标记。
29 1
|
4月前
|
Python
Matplotlib 教程 之 Matplotlib 绘图标记 8
在 Matplotlib 中,可以通过 `plot()` 方法的 `marker` 参数自定义图表标记。此外,还可以设置线类型(如 `&#39;-&#39;` 实线、`&#39;:&#39;` 虚线等)和颜色(如 `&#39;r&#39;` 红色、`&#39;g&#39;` 绿色等)。使用 `markersize` (`ms`) 定义大小,`markerfacecolor` (`mfc`) 和 `markeredgecolor` (`mec`) 分别定义标记的内部和边框颜色。
38 0
|
4月前
|
数据可视化 Python
Matplotlib 教程 之 Matplotlib 绘图标记 6
在本教程中,我们将探讨如何利用 Matplotlib 的 `plot()` 方法中的 `marker` 参数来自定义图表标记,以增强数据可视化效果。此外,还介绍了线类型(如实线 `&#39;-&#39;`、虚线 `&#39;:&#39;` 等)、颜色类型(如红色 `&#39;r&#39;`、绿色 `&#39;g&#39;` 等)以及如何通过 `markersize` (`ms`)、`markerfacecolor` (`mfc`) 和 `markeredgecolor` (`mec`) 来调整标记的大小和颜色。通过一个示例展示了如何设置标记大小。
36 0