用 Python 爬取糗事百科
探索性数据分析 (EDA) 涉及两个基本步骤
数据分析 (数据预处理、清洗以及处理) 。
数据可视化 (使用不同类型的图来展示数据中的关系) 。
Pandas 是 Python 中最常用的数据分析库。Python 提供了大量用于数据可视化的库,Matplotlib 是最常用的,它提供了对绘图的完全控制,并使得绘图自定义变得容易。
但是,Matplotlib 缺少了对 Pandas 的支持。而 Seaborn 弥补了这一缺陷,它是建立在 Matplotlib 之上并与 Pandas 紧密集成的数据可视化库。
然而,Seaborn 虽然活干得漂亮,但是函数众多,让人不知道到底该怎么使用它们?不要怂,本文就是为了理清这点,让你快速掌握这款利器。
这篇文章主要涵盖如下内容,
Seaborn 中提供的不同的绘图类型。
Pandas 与 Seaborn 的集成如何实现以最少的代码绘制复杂的多维图?
如何在 Matplotlib 的辅助下自定义 Seaborn 绘图设置?
谁适合阅读这篇文章?
如果你具备 Matplotlib 和 Pandas 的基本知识,并且想探索一下 Seaborn,那么这篇文章正是不错的起点。
如果目前只掌握 Python,建议 翻阅文末相关文章,特别是 在掌握 Pandas 的基本使用之后再回到这里来或许会更好一些。
1 Matplotlib
尽管仅使用最简单的功能就可以完成许多任务,但是了解 Matplotlib 的基础非常重要,其原因有两个,
Seaborn 在底层使用 Matplotlib 绘图。
一些自定义项需要直接使用 Matplotlib。
这里对 Matplotlib 的基础作个简单概述。下图显示了 Matplotlib 窗口的各个要素。
需要了解的三个主要的类是图形 (Figure) ,图轴 (Axes) 以及坐标轴 (Axis) 。
图形 (Figure)
它指的就是你看到的整个图形窗口。同一图形中可能有多个子图 (图轴) 。在上面的示例中,在一个图形中有四个子图 (图轴) 。
图轴 (Axes)
图轴就是指图形中实际绘制的图。一个图形可以有多个图轴,但是给定的图轴只是整个图形的一部分。在上面的示例中,我们在一个图形中有四个图轴。
坐标轴 (Axis)
坐标轴是指特定图轴中的实际的 x-轴和 y-轴。
本帖子中的每个示例均假设已经加载所需的模块以及数据集,如下所示,
import pandas as pd import numpy as np from matplotlib import pyplot as plt import seaborn as snstips = sns.load_dataset('tips') iris = sns.load_dataset('iris')
import matplotlib matplotlib.style.use('ggplot')
tips.head()
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
iris.head()
sepal_length | sepal_width | petal_length | petal_width | species | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa |
让我们通过一个例子来理解一下 Figure 和 Axes 这两个类。
dates = ['1981-01-01', '1981-01-02', '1981-01-03', '1981-01-04', '1981-01-05','1981-01-06', '1981-01-07', '1981-01-08', '1981-01-09', '1981-01-10']min_temperature = [20.7, 17.9, 18.8, 14.6, 15.8, 15.8, 15.8, 17.4, 21.8, 20.0] max_temperature = [34.7, 28.9, 31.8, 25.6, 28.8, 21.8, 22.8, 28.4, 30.8, 32.0]fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10,5)); axes.plot(dates, min_temperature, label='Min Temperature'); axes.plot(dates, max_temperature, label = 'Max Temperature'); axes.legend();
plt.subplots() 创建一个 Figure 对象实例,以及 nrows x ncols 个 Axes 实例,并返回创建的 Figure 对象和 Axes 实例。在上面的示例中,由于我们传递了 nrows = 1 和 ncols = 1,因此它仅创建一个 Axes 实例。如果 nrows > 1 或 ncols > 1,则将创建一个 Axes 网格并将其返回为 nrows 行 ncols 列的 numpy 数组。
Axes 类最常用的自定义方法有,
Axes.set_xlabel() Axes.set_ylabel() Axes.set_xlim() Axes.set_ylim() Axes.set_xticks() Axes.set_yticks() Axes.set_xticklabels() Axes.set_yticklabels() Axes.set_title() Axes.tick_params()
下面是一个使用上述某些方法进行自定义的例子,
fontsize =20 fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(15,7)) axes.plot(dates, min_temperature, label='Min Temperature') axes.plot(dates, max_temperature, label='Max Temperature')axes.set_xlabel('Date', fontsize=fontsize) axes.set_ylabel('Temperature', fontsize=fontsize)axes.set_title('Daily Min and Max Temperature', fontsize=fontsize)axes.set_xticks(dates) axes.set_xticklabels(dates) axes.tick_params('x', labelsize=fontsize, labelrotation=30, size=15)axes.set_ylim(10,40) axes.set_yticks(np.arange(10,41,2)) axes.tick_params('y',labelsize=fontsize)axes.legend(fontsize=fontsize,loc='upper left', bbox_to_anchor=(1,1));
上面我们快速了解了下 Matplotlib 的基础知识,现在让我们进入 Seaborn。
2 Seaborn
Seaborn 中的每个绘图函数既是图形级函数又是图轴级函数,因此有必要了解这两者之间的区别。
如前所述,图形指的是你看到的整个绘图窗口上的图,而图轴指的是图形中的一个特定子图。
图轴级函数只绘制到单个 Matplotlib 图轴上,并不影响图形的其余部分。
而图形级函数则可以控制整个图形。
我们可以这么来理解这一点,图形级函数可以调用不同的图轴级函数在不同的图轴上绘制不同类型的子图。
sns.set_style('darkgrid')
2.1 图轴级函数
下面罗列的是 Seaborn 中所有图轴级函数的详细列表。
关系图Relational Plots
scatterplot( )
lineplot( )
类别图Categorical Plots
striplot( )、swarmplot( )
boxplot( )、boxenplot( )
violinplot( )、countplot( )
pointplot( )、barplot( )
分布图Distribution Plots
distplot( )
kdeplot( )
rugplot( )
回归图Regression Plots
regplot( )
residplot( )
矩阵图MatrixPlots( )
heatmap( )
使用任何图轴级函数需要了解的两点,
将输入数据提供给图轴级函数的不同方法。
指定用于绘图的图轴。
2.1.1 将输入数据提供给图轴级函数的不同方法
1、列表、数组或系列
将数据传递到图轴级函数的最常用方法是使用迭代器,例如列表 list,数组 array 或序列 series
total_bill = tips['total_bill'].values tip = tips['tip'].valuesfig = plt.figure(figsize=(10, 5)) sns.scatterplot(total_bill, tip, s=15);
tip = tips['tip'].values day = tips['day'].valuesfig = plt.figure(figsize=(10, 5)) sns.boxplot(day, tip, palette="Set2");
用 Python 爬取糗事百科相关推荐
- Python爬取糗事百科段子+定时发送QQ邮箱
文章目录 前言 1. 库导入及介绍 2. 获取网页源码 3. 提取需要的信息 4. 优化输出数据 5. 发送邮件 6. 实现定时发送 7. 源码 前言 学习Python爬虫也有段时间了,总想着搞点事做 ...
- Python爬取糗事百科段子
Python爬取糗事百科段子 Python2.7.15 今天我们来爬取糗事百科的段子 一.获取糗事百科的网页源码 首先,打开浏览器,进入糗事百科,复制它的网址. 然后我们翻个页,可以看到,网址变成了这 ...
- 利用Python爬取糗事百科段子信息
文章来源:公众号-智能化IT系统. 爬虫技术目前越来越流行,这里介绍一个爬虫的简单应用. 爬取的内容为糗事百科文字内容中的信息,如图所示: 爬取糗事百科文字35页的信息,通过手动浏览,以下为前四页的网 ...
- JavaScript获取本机浏览器UA助力Python爬取糗事百科首页
问题背景: 使用Python编写爬虫时,经常会遇到反爬机制,例如网站要求必须使用浏览器访问.就像下面的403错误: 或者下面这种错误信息: 一般来说,这是遇到反爬机制了,对方要求使用浏览器访问.这时可 ...
- 读书笔记(4)——python爬取糗事百科,并存到MySQL中
2019独角兽企业重金招聘Python工程师标准>>> 安装MySQL.使用phpStudy集成工具来安装MySQL服务器,或者可以用USBwebserve进行安装. 打开USBwe ...
- 用Python爬取糗事百科段子,可视化后结果发现
大家好,我是小五???? 生活真是太苦了,需要找点快乐的精神食粮支撑社畜生活,听说糗事百科段子挺多,今天就来看一看! 糗事百科的段子栏目声称:幽默笑话大全__爆笑笑话__笑破你的肚子的搞笑段子,我们用 ...
- python 爬取糗事百科的段子
本篇目标 1.抓取糗事百科热门段子 2.过滤带有图片的段子 3.实现每按一次回车显示一个段子的发布时间,发布人,段子内容,点赞数. 糗事百科是不需要登录的,所以也没必要用到Cookie,另外糗事百科有 ...
- python爬虫练习1:通过python爬取糗事百科的搞笑图片
爬取糗百的图片 最近在研究python,想着自学爬虫获取数据,到时候进行数据分析 在爬取图片的时候有些曲折,但是最终还是被我攻克下来了 话不多说,我们开始 我们要爬取的网站是 糗事百科 的图片 首先, ...
- python爬取糗事百科
本次要爬取的是糗事百科,地址如下:http://www.qiushibaike.com/8hr/page/1 1.思路分析: url地址的规律非常明显,一共只有13页url地址 2.确定数据的位置 数 ...
- python爬取糗事百科超搞笑图片
先说说思路 首先,遍历遍历糗事百科的每一页的url,为每一页创建一个文件夹,并得到每一页的所有图片的url,再用content得到每一张图片的二进制数据,并try将其写入一个文件,若写入文件失败则输出 ...
最新文章
- Nature综述:如何获得理想的微生物组
- jQuery JavaScript库达到新的里程碑
- 继承:深度优先和广度优先
- 第三课时:PowerDesigner15基本操作
- php 实现进制相互转换
- html+单选+回显,VUE+elementUI表格多选框实现单选以及数据回显时toggleRowSelection失效问题...
- 广东省计算机大赛设计什么时候,2017年广东省大学生计算机设计大赛
- 大厂offer手到擒来,Java面试真题精选
- 标线markLine的用法
- jqgrid 列表条件查询的几步关键操作
- 周鸿祎内部讲话:大公司要创新,就必须做小
- ECharts 3.0 初学感想及学习中遇到的瓶颈
- Android ExpandableListView示例教程
- WebView优化提升H5加载速度方案
- 动态服务器值 回放报错 没有关联到_LR关联(带附件) - 缺1份淡定ㄣ - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- 业务安全情报第四期:新能源车企重金打造的私域流量,成为黑灰产“掘金发财”的新目标
- 思路清晰的软光栅小引擎和四元数结合案例
- Opencv入门(播放AVI视频)
- /Users/apple/.zshrc:2: command not found: i 终端报错解决方法
- java/php/net/python学生社团管理系统设计
热门文章
- 【NEEPU OJ】1010--Good luck n' eatfried chicken tonight!
- 短波宽带通信系统的信道建模仿真及优化
- Python学习笔记:好玩的图形Python代码
- 论文阅读:A Survey of Open Domain Event Extraction 综述:开放域事件抽取
- DirectDraw基础篇(学东西还是基础的好哦!)
- C语言实现QQ聊天室小项目 [完整源码]
- C语言编译出现一个警告,16种C语言编译警告(Warning)类型的解决方法
- 用C语言打印棱形图案
- java person类_定义一个Person类,含姓名、性别、年龄等字段;继承Person类设计
- ESP32-C3入门教程 WiFi篇⑨——WiFi配网失败常见问题与解决办法(找不到WiFi AP | WiFi密码错误 | 距离AP过远 RSSI判断)