Python常用库

Python常见库

Matplotlib

可视化视图都有哪些?

按照数据之间的关系,我们可以把可视化视图划分为4类,它们分别是比较、联系、构成和分布。我来简单介绍下这四种关系的特点:

  1. 比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图;
  2. 联系:查看两个或两个以上变量之间的关系,比如散点图;
  3. 构成:每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图;
  4. 分布:关注单个变量,或者多个变量的分布情况,比如直方图。

同样,按照变量的个数,我们可以把可视化视图划分为单变量分析和多变量分析。

单变量分析指的是一次只关注一个变量。比如我们只关注“身高”这个变量,来看身高的取值分布,而暂时忽略其他变量。

多变量分析可以让你在一张图上可以查看两个以上变量的关系。比如“身高”和“年龄”,你可以理解是同一个人的两个参数,这样在同一张图中可以看到每个人的“身高”和“年龄”的取值,从而分析出来这两个变量之间是否存在某种联系。

可视化的视图可以说是分门别类,多种多样,今天我主要介绍常用的10种视图,这些视图包括了散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图、二元变量分布和成对关系。

import matplotlib.pyplot as plt

# 0.准备数据
x = [1, 2, 3, 4, 5, 6, 7]
y_shanghai = [17, 17, 18, 15, 11, 11, 13]

# 1.创建画布
# figsize:指定图的长宽
# dpi:图像的清晰度
# 返回fig对象
plt.figure(figsize=(20, 8), dpi=100)

# 2.绘制图像
plt.plot(x, y_shanghai)

# 3.图像显示
plt.show()

添加自定义x,y刻度

# 增加以下两行代码

# 2.1 添加x,y轴刻度
# 设置x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 修改x,y轴坐标刻度显示
# plt.xticks(x_ticks_label[::5]) # 坐标刻度不可以直接通过字符串进行修改
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

添加网格显示

# 2.2 添加网格显示
plt.grid(True, linestyle="--", alpha=1)

添加x轴、y轴描述信息及标题

# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点-12点某城市温度变化图", fontsize=20)

绘制多个图像

# 增加北京的温度数据
y_beijing = [random.uniform(1, 3) for i in x]

# 2.绘制图像
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")  # 新增绘制北京的数据

显示图例

# 绘制折线图
plt.plot(x, y_shanghai, label="上海")
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")

# 显示图例
plt.legend(loc="best")

多个坐标系显示

# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]

# 1.创建画布
# plt.figure(figsize=(20, 8), dpi=100)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)

# 2.绘制图像
# plt.plot(x, y_shanghai, label="上海")
# plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")

# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 刻度显示
# plt.xticks(x[::5], x_ticks_label[::5])
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])

# 2.2 添加网格显示
# plt.grid(True, linestyle="--", alpha=0.5)
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)

# 2.3 添加描述信息
# plt.xlabel("时间")
# plt.ylabel("温度")
# plt.title("中午11点--12点某城市温度变化图", fontsize=20)
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20)

# # 2.4 图像保存
plt.savefig("./test.png")

# # 2.5 添加图例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)

# 3.图像显示
plt.show()

小结

  • 添加x,y轴刻度【知道】
    • plt.xticks()
    • plt.yticks()
    • 注意:在传递进去的第一个参数必须是数字,不能是字符串,如果是字符串吗,需要进行替换操作
  • 添加网格显示【知道】
    • plt.grid(linestyle=“–”, alpha=0.5)
  • 添加描述信息【知道】
    • plt.xlabel()
    • plt.ylabel()
    • plt.title()
  • 图像保存【知道】
    • plt.savefig(“路径”)
  • 多次plot【了解】
    • 直接进行添加就OK
  • 显示图例【知道】
    • plt.legend(loc=“best”)
    • 注意:一定要在plt.plot()里面设置一个label,如果不设置,没法显示
  • 多个坐标系显示【了解】
    • plt.subplots(nrows=, ncols=)
  • 折线图的应用【知道】
    • 1.应用于观察数据的变化
    • 2.可是画出一些数学函数图像

附录:中文显示问题

在Python脚本中动态设置matplotlibrc,这样也可以避免由于更改配置文件而造成的麻烦,具体代码如下:

import matplotlib.pyplot as plt
# 设置显示中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体

有时候,字体更改后,会导致坐标轴中的部分字符无法正常显示,此时需要更改axes.unicode_minus参数:

# 设置正常显示符号
plt.rcParams['axes.unicode_minus'] = False 

Numpy

NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- NumericalPythonNumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。在数据分析和机器学习领域被广泛使用。他有以下几个特点:

  1. Numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算。
  2. Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。
  3. 实用的线性代数、傅里叶变换和随机数生成函数。

总而言之,Numpy一个非常高效的用于处理数值型运算的包。

Pyecharts

pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。

基本使用

渲染图表 | 图表配置 | 基本图表 | 自定义图表 | 数据解析与导入

高级话题

图表 API | 自定义地图 | 回调函数和事件处理 | 语言翻译扩展

平台支持

Jupyter Notebook/nteract | Flask | Django | web 框架整合

其他资源

示例项目 | 地理地图数据

项目发布

版本日志 | 里程碑

项目开发

技术文档 | 开发团队 | 赞助者名单 | FAQ

Pandas

Pandas是一个开源的,BSD许可的库,为Pythonopen in new window编程语言提供高性能,易于使用的数据结构和数据分析工具。

PandasNumFOCUSopen in new window赞助的项目。这将有助于确保Pandas成为世界级开源项目的成功,并有可能捐赠open in new window给该项目。

Pandas 是 Python 语言的一个扩展程序库,用于数据分析。

Pandas 名字衍生自术语 “panel data”(面板数据)和 “Python data analysis”(Python 数据分析)。

Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。

Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。

Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。

Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。

FastAPI

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJSGo 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一
  • 高效编码:提高功能开发速度约 200% 至 300%。*
  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema

* 根据对某个构建线上应用的内部开发团队所进行的测试估算得出。

上一次的全栈项目自动安全上报后端启用的是flask,这次让我们来拥抱FastAPI!

官网文档:FastAPI (tiangolo.com)

Scrapy

Scrapy是用纯python实现一个爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度。

异步:调用在发出之后,这个调用就直接返回,不管有无结果

非阻塞:关注的是程序在等待结果时的状态,不能立刻得到结果之前,该调用不会阻塞当前线程

scrapy框架

  • scrapy Engine(引擎):总指挥:负责数据和信号的在不同模块间的传递,scrapy已经实现
  • scheduler(调度器):一个队列,存放引擎发过来的request请求,scrapy已经实现
  • Downloader (下载器):下载把引擎发过来的requests请求,并返回给引擎,scrapy已经实现
  • Spider (爬虫):处理引擎发来来的response,提取数据,提取url,并交给引擎,需要手写
  • Item Pipeline(管道):处理引擎传过来的数据,比如存储,需要手写
  • Downloader Middlewares(下载中间件):可以自定义的下载扩展,比如设置代理,一般不用手写
  • Spider MiddlewaresSpider(中间件):可以自定义requests请求和进行response过滤,一般不用手写

创建Spider

  1. 创建一个scrapy项目——scrapy startproject myspider
  2. 生成一个爬虫——scrapy genspider xxxx “xxxx.cn
  3. 提取数据——完善spider,使用xpath等方法
  4. 保存数据——pipeline中保存数据

定义多个pipeline,例如先处理数据再存储数据,例如不同的域名要进行不同的提取,但要注意process_item名称不能变,其形参(spider)可以通过spider.name == "itcast"进行判断操作。

# logging:不同等级的日志,保存到本地,
import logging
# 获取当前日志输出位置
logger = logging.getLogger(__name__)
# setting可以设置LOG_FILE = './log.log'保存到本地
logger.warning(item)

scrapy

  • settings中设置LOG_LEVEL=“WARNING”
  • settings中设置LOG_FILE=“./a.log”#设置日志保存的位置,设置会后终端不会显示日志内容
  • import logging,实例化logger的方式在任何文件中使用logger输出内容。

普通项目中

import logging
#设置日志输出的样式,格式。
logging.basicConfig(...)
# 实例化logger=logging.getLogger(__name__) 在任何py文件中调用logger即可