38个常⽤Python库:数值计算、可视化、机器学习等8⼤领域都有了
⼀、数值计算
数值计算是数据挖掘、机器学习的基础。Python提供多种强⼤的扩展库⽤于数值计算,常⽤的数值计算库如下所⽰。
1. NumPy
⽀持多维数组与矩阵运算,也针对数组运算提供⼤量的数学函数库。通常与SciPy和Matplotlib⼀起使⽤,⽀持⽐Python更多种类的数值类型,其中定义的最重要的对象是称为ndarray的n维数组类型,⽤于描述相同类型的元素集合,可以使⽤基于0的索引访问集合中元素。
2. SciPy
在NumPy库的基础上增加了众多的数学、科学及⼯程计算中常⽤的库函数,如线性代数、常微分⽅程数值求解、信号处理、图像处理、稀疏矩阵等,可进⾏插值处理、信号滤波,以及使⽤C语⾔加速计算。
3. Pandas
基于NumPy的⼀种⼯具,为解决数据分析任务⽽⽣。纳⼊⼤量库和⼀些标准的数据模型,提供⾼效地操作⼤型数据集所需的⼯具及⼤量的能快速便捷处理数据的函数和⽅法,为时间序列分析提供很好的⽀持,提供多种数据结构,如Series、Time-Series、DataFrame和Panel。
⼆、数据可视化
数据可视化是展⽰数据、理解数据的有效⼿段,常⽤的Python数据可视化库如下所⽰。
4. Matplotlib
第⼀个Python可视化库,有许多别的程序库都是建⽴在其基础上或者直接调⽤该库,可以很⽅便地得到数据的⼤致信息,功能⾮常强⼤,但也⾮常复杂。
5. Seaborn
利⽤了Matplotlib,⽤简洁的代码来制作好看的图表。与Matplotlib最⼤的区别为默认绘图风格和⾊彩搭配都具有现代美感。
6. ggplot
基于R的⼀个作图库ggplot2,同时利⽤了源于《图像语法》(The Grammar of Graphics)中的概念,允许叠加不同的图层来完成⼀幅图,并不适⽤于制作⾮常个性化的图像,为操作的简洁度⽽牺牲了图像的复杂度。
7. Bokeh
跟ggplot⼀样,Bokeh也基于《图形语法》的概念。与ggplot不同之处为它完全基于Python⽽不是从R处引⽤。长处在于能⽤于制作可交互、可直接⽤于⽹络的图表。图表可以输出为JSON对象、HTML⽂档或者可交互的⽹络应⽤。
Bokeh也⽀持数据流和实时数据,为不同的⽤户提供了3种控制⽔平:
最⾼的控制⽔平⽤于快速制图,主要⽤于制作常⽤图像;中等控制⽔平与Matplotlib⼀样允许开发⼈员控制图像的基本元素(例如分布图中的点);最低的控制⽔平主要⾯向开发⼈员和软件⼯程师。没有默认值,需要定义图表的每⼀个元素。8. Plotly
可以通过Python notebook使⽤,与Bokeh⼀样致⼒于交互图表的制作,但提供在别的库中⼏乎没有的⼏种图表类型,如等值线图、树形图和三维图表。
9. pygal
与Bokeh和Plotly⼀样,提供可直接嵌⼊⽹络浏览器的可交互图像。与其他两者的主要区别在于可将图表输出为SVG格式,所有的图表都被封装成⽅法,且默认的风格也很漂亮,⽤⼏⾏代码就可以很容易地制作出漂亮的图表。
10. geoplotlib
⽤于制作地图和地理相关数据的⼯具箱。可⽤来制作多种地图,⽐如等值区域图、热度图、点密度图。必须安装Pyglet(⼀个⾯向对象编程接⼝)⽅可使⽤。
11. missingno
⽤图像的⽅式快速评估数据缺失的情况,可根据数据的完整度对数据进⾏排序或过滤,或者根据热度图或树状图对数据进⾏修正。
三、Web开发
Web应⽤开发可以说是⽬前软件开发中最重要的部分。Python提供各种Web开发框架,帮助使⽤者快速实现功能开发。常⽤的Python⽹络开发类库如下所⽰。
12. Django
⼀个⾼级的Python Web框架,⽀持快速开发,提供从模板引擎到ORM所需的⼀切东西,使⽤该库构建App时,必须遵循Django的⽅式。
13. Socket
⼀个套接字通讯底层库,⽤于在服务器和客户端间建⽴TCP或UDP连接,通过连接发送请求与响应。
14. Flask
⼀个基于Werkzeug、Jinja 2的Python轻量级框架(microframework),默认配备Jinja模板引擎,也包含其他模板引擎或ORM供选择,适合⽤来编写API服务(RESTful rervices)。
15. Twisted
⼀个使⽤Python实现的基于事件驱动的⽹络引擎框架,建⽴在deferred object之上,⼀个通过异步架构实现的⾼性能的引擎,不适⽤于编写常规的Web Apps,更适⽤于底层⽹络。
16. Tornado
⼀个由FriendFeed开发的Python Web框架和异步⽹络库,采⽤⾮阻塞⽹络I/O模型,可以处理数以千计
的⽹络连接。对于long polling、WebSockets和其他需要长时间实时连接的Apps,Tornado是⼀个理想的Web框架,它介于Django和Flask之间,能很好地处理C10K问题。
四、数据库管理
数据库是企业⽤于存放数据的主要⼯具,数据库管理包括了数据定义、数据操作、数据库运⾏管理、数据组织、数据库库保护、数据库维护等。Python提供了所有主流关系数据库管理接⼝,常⽤的Python MySQL连接库及其简介如下所⽰。
17. MySQL-python
⼜称MySQLdb,是Python连接MySQL最流⾏的⼀个驱动,很多框架也基于此库进⾏开发。只⽀持Python 2.x,且安装时有许多前置条件。由于该库基于C语⾔开发,在Windows平台上的安装⾮常不友好,经常出现失败的情况,现在基本不推荐使⽤,取代品为衍⽣版本。
18. mysqlclient
完全兼容MySQLdb,同时⽀持Python 3.x,是Django ORM的依赖⼯具,可使⽤原⽣SQL来操作数据库,安装⽅式与MySQLdb⼀致。
19. PyMySQL
纯Python实现的驱动,速度⽐MySQLdb慢,最⼤的特点为安装⽅式简洁,同时也兼容MySQL-python。
20. SQLAlchemy
⼀种既⽀持原⽣SQL,⼜⽀持ORM的⼯具。ORM是Python对象与数据库关系表的⼀种映射关系,可有效提⾼写代码的速度,同时兼容多种数据库系统,如SQLite、MySQL、PostgreSQL,代价为性能上的⼀些损失。
五、⾃动化运维
运维的主要内容包括保障业务长期稳定运⾏、保障数据安全可靠、⾃动化完成部署任务。Python能够满⾜绝⼤部分⾃动化运维的需求,⽬前在Linux运维中已⽤Python实现的应⽤如下所⽰。
21. jumpsever跳板机
⼀种由Python编写的开源跳板机(堡垒机)系统,实现了跳板机的基本功能,包含认证、授权和审计,集成了Ansible、批量命令等。
⽀持WebTerminal Bootstrap编写,界⾯美观,⾃动收集硬件信息,⽀持录像回放、命令搜索、实时监控、批量上传下载等功能,基于SSH协议进⾏管理,客户端⽆须安装agent。主要⽤于解决可视化安全管理,因完全开源,容易再次开发。
22. Magedu分布式监控系统
⼀种⽤Python开发的⾃动化监控系统,可监控常⽤系统服务、应⽤、⽹络设备,可在⼀台主机上监控多个不同服务,不同服务的监控间隔可以不同,同⼀个服务在不同主机上的监控间隔、报警阈值可以不同,并提供数据可视化界⾯。
23. Magedu的CMDB
⼀种⽤Python开发的硬件管理系统,包含采集硬件数据、API、页⾯管理3部分功能,主要⽤于⾃动化管理笔记本、路由器等常见设备的⽇常使⽤。由服务器的客户端采集硬件数据,将硬件信息发送⾄API,API负责将获取的数据保存⾄数据库中,后台管理程序负责对服务器信息进⾏配置和展⽰。
24. 任务调度系统
⼀种由Python开发的任务调度系统,主要⽤于⾃动化地将⼀个服务进程分布到其他多个机器的多个进程中,⼀个服务进程可作为调度者依靠⽹络通信完成这⼀⼯作。
25. Python运维流程系统
⼀种使⽤Python语⾔编写的调度和监控⼯作流的平台,内部⽤于创建、监控和调整数据管道。允许⼯作
流开发⼈员轻松创建、维护和周期性地调度运⾏⼯作流,包括了如数据存储、增长分析、Email发送、A/B测试等诸多跨多部门的⽤例。
六、GUI编程
GUI(Graphical User Interface,图形⽤户界⾯)是指采⽤图形⽅式显⽰的计算机操作⽤户界⾯。Python提供多个图形开发界⾯的库⽤于GUI编程,常⽤Python GUI库如下所⽰。
26. Tkinter
⼀个Python的标准GUI库,可以快速地创建GUI应⽤程序,可以在⼤多数的UNIX平台下使⽤,同样可以应⽤在Windows和Macintosh系统中,Tkinter 8.0的后续版本可以实现本地窗⼝风格,并良好地运⾏在绝⼤多数平台中。
27. wxPython
⼀款开源软件跨平台GUI库wxWidgets的Python封装和Python模块,是Python语⾔的⼀套优秀的GUI图形库,允许程序员很⽅便地创建完整的、功能健全的GUI⽤户界⾯。
28. PyQt
⼀个创建GUI应⽤程序的⼯具库,是Python编程语⾔和Qt的成功融合,可以运⾏在所有主要操作系统上,包括UNIX、Windows和Mac。PyQt采⽤双许可证,开发⼈员可以选择GPL和商业许可,从PyQt的版本4开始,GPL许可证可⽤于所有⽀持的平台。
29. PySide
⼀个跨平台的应⽤程式框架Qt的Python绑定版本,提供与PyQt类似的功能,并相容API,但与PyQt不同处为其使⽤LGPL授权。
七、机器学习
Python作为⼀门理想的集成语⾔,将各种技术绑定在⼀起,除了为⽤户提供更⽅便的功能之外,还是⼀个理想的粘合平台,在开发⼈员与外部库的低层次集成⼈员之间搭建连接,以便⽤C/C++实现更⾼效的算法。
对于研究⼈员者⽽⾔,使⽤Python编程可以快速迁移代码并进⾏改动,⽽⽆须花费过多的精⼒在修改代码与代码规范上。开发者在Python中封装了很多优秀的依赖库,其中NumPy和SciPy库提供了⽬前解决机器学习问题所需的标准配置。
Python⽬前集成了⼤量的机器学习框架,其中常⽤机器学习库如下所⽰。
30. Scikit-Learn
Scikit-Learn基于NumPy和SciPy,是专门为机器学习建造的⼀个Python模块,提供了⼤量⽤于数据挖掘和分析的⼯具,包括数据预处理、交叉验证、算法与可视化算法等⼀系列接⼝。
Sklearn的基本功能可分为6个部分:
分类回归聚类数据降维模型选择数据预处理其中集成了⼤量分类、回归和聚类的算法,包括⽀持向量机、逻辑回归、朴素贝叶斯、随机森林、Gradient Boosting、K-means和DBSCAN等。
31. Orange3
Orange3是⼀个基于组件的数据挖掘和机器学习软件套装,⽀持Python进⾏脚本开发。它包含⼀系列的数据可视化、检索、预处理和建模技术,具有⼀个良好的⽤户界⾯,同时也可以作为Python的⼀个模块使⽤。
⽤户可通过数据可视化进⾏数据分析,包括统计分布图、柱状图、散点图,以及更深层次的决策树、分层聚簇、热点图、MDS(多维度分析)、线性预测等,并可使⽤Orange⾃带的各类附加功能组件进⾏NLP、⽂本挖掘、构建⽹络分析、推断⾼频数据集和关联规则数据分析。
32. XGBoost
XGBoost是专注于梯度提升算法的机器学习函数库,因其优良的学习效果及⾼效的训练速度⽽获得⼴泛的关注。XGBoost⽀持并⾏处理,⽐起同样实现了梯度提升算法的Scikit-Learn库,其性能提升10倍以上。XGBoost可以处理回归、分类和排序等多种任务。
33. NuPIC
NuPIC是专注于时间序列的⼀个机器学习平台,其核⼼算法为HTM算法,相⽐于深度学习,其更为接近⼈类⼤脑的运⾏结构。HTM算法的理论依据主要是⼈脑中处理⾼级认知功能的新⽪质部分的运作原理。NuPIC可⽤于预测及异常检测,适⽤⾯⾮常⼴,仅要求输⼊时间序列即可。
34. Milk
Milk(Machine Learning Toolkit)是Python中的⼀个机器学习⼯具包。
Milk注重提升运⾏速度与降低内存占⽤,因此⼤部分对性能敏感的代码都是使⽤C++编写的,为了便利性在此基础上提供Python接⼝。重点提供监督分类⽅法,如SVMs、KNN、随机森林和决策树,也⽀持⽆监督学习算法,如K-means和密切关系传播。
⼋、深度学习
深度学习作为机器学习的分⽀,绽放了耀眼的光芒。由于Python的易⽤性与可扩展性,众多深度学习框架提供了Python接⼝,其中较为流⾏的深度学习库如下所⽰。
35. Caffe
Caffe(Convolutional Architecture for Fast Feature Embedding)是⼀个以表达式、速度和模块化为核⼼的深度学习框架,具备清晰、可读性⾼和快速的特性,在视频、图像处理⽅⾯应⽤较多。
Caffe中的⽹络结构与优化都以配置⽂件形式定义,容易上⼿,⽆须通过代码构建⽹络;⽹络训练速度快,能够训练⼤型数据集与State-of-the-art的模型;模块化的组件可以⽅便地拓展到新的模型与学习任务上。
36. Theano
Theano诞⽣于2008年,是⼀个⾼性能的符号计算及深度学习库,被认为是深度学习库的始祖之⼀,也被认为是深度学习研究和应⽤的重要标准之⼀。其核⼼是⼀个数学表达式的编译器,专门为处理⼤规模神经⽹络训练的计算⽽设计。
Theano很好地整合了NumPy,可以直接使⽤NumPy的ndarray,使得API接⼝学习成本⼤为降低;其计算稳定性好,可以精准地计算输出值很⼩的函数,如log(1+x);可动态地⽣成C或者CUDA代码,⽤来编
译成⾼效的机器代码。
37. TensorFlow
TensorFlow是相对⾼阶的机器学习库,其核⼼代码使⽤C++编写,并⽀持⾃动求导,使得⽤户可以⽅便地设计神经⽹络结构,不需要亲⾃编写C++或CUDA代码,也⽆须通过反向传播求解梯度。由于底层使⽤C++语⾔编写,运⾏效率得到了保证,并简化了线上部署的复杂度。
除了核⼼代码的C++接⼝以外,TensorFlow还有官⽅的Python、Go和Java接⼝以外,⽤户可以在⼀个硬件配置较好的机器中⽤Python进⾏实验,并在资源⽐较紧张的嵌⼊式环境或需要低延迟的环境中⽤C++部署模型。
TensorFlow不只局限于神经⽹络,其数据流式图还⽀持⾮常⾃由的算法表达,也可以轻松实现深度学习以外的机器学习算法。
38. Keras
Keras是⼀个⾼度模块化的神经⽹络库,使⽤Python实现,并可以同时运⾏在TensorFlow和Theano上。
Keras专精于深度学习,其提供了到⽬前为⽌最⽅便的API,⽤户仅需将⾼级的模块拼在⼀起便可设计神经⽹络,⼤⼤降低了编程开销(code overhead)与理解开销(cognitive overhead)。
Keras同时⽀持卷积⽹络和循环⽹络,⽀持级联的模型或任意的图结构的模型,从CPU上计算切换到GPU加速⽆须任何代码的改动。简化了编程的复杂度的同时,在性能上丝毫不逊⾊于TensorFlow和Theano。
________________________________________________________________________________________________________________________________________⽤于不同数据科学任务的Python库
⽤于数据收集的Python库
· Beautiful Soup
· Scrapy
· Selenium
⽤于数据清理和数据操作的Python库
· Pandas
· PyOD
·
NumPy
· Spacy
⽤于数据可视化的Python库
· Matplotlib
· Seaborn
· Bokeh
⽤于建模的Python库
· Scikit-learn
· TensorFlow
· PyTorch
⽤于模型解释的Python库
·
Lime
· H2O
⽤于语⾳处理的Python库
· Librosa
· Madmom
· pyAudioAnalysis
⽤于图像处理的Python库
· OpenCV-Python
· Scikit-image
· Pillow
作为数据库的Python库
·
Psycopg
· SQLAlchemy
⽤于模型部署的Python库
· Flask
⽤于数据收集的Python库
你是否曾遇到过这样的情况:缺少解决问题的数据?这是数据科学中⼀个永恒的问题。这也是为什么学习提取和收集数据对数据科学家来说是⼀项⾮常重要的技能。数据提取和收集开辟了前所未有的道路。
以下是三个⽤于提取和收集数据的Python库:
Beautiful Soup
收集数据的最佳⽅式之⼀就是抓取⽹站(当然是以合乎道德和法律的⼿段!)徒⼿做这件事需要耗费⼤量的劳动和时间。Beautiful Soup⽆疑是⼀⼤救星。
Beautiful Soup是⼀个HTML和XML解析器,可为被解析的页⾯创建解析树,从⽽⽤于从web页⾯中提取
数据。从⽹页中提取数据的过程称为⽹页抓取。
使⽤以下代码可安装BeautifulSoup:
pip install beautifulsoup4
下⾯是⼀个可实现从HTML中提取所有锚标记的Beautiful Soup简单代码:
#!/usr/bin/python3
# Anchor extraction from html document
from bs4 import BeautifulSoup
quest import urlopen
with urlopen('LINK') as response:
soup = BeautifulSoup(response, 'html.parser')
for anchor in soup.find_all('a'):
('href', '/'))
建议阅读下⾯的⽂章,学习如何在Python中使⽤Beautiful Soup:
《新⼿指南:在Python中使⽤BeautifulSoup进⾏⽹页抓取》
Scrapy
Scrapy是另⼀个可有效⽤于⽹页抓取的Python库。它是⼀个开源的协作框架,⽤于从⽹站中提取所需数据。使⽤起来快捷简单。
下⾯是⽤于安装Scrapy的代码:
pip install scrapy
Scrapy是⼀个⽤于⼤规模⽹页抓取的框架。可提供所有需要的⼯具有效地从⽹站中抓取数据,且依需要处理数据,并以使⽤者偏好的结构和格式存储数据。
下⾯是⼀个实现Scrapy的简单代码:
import scrapy
class Spider(scrapy.Spider):
name = 'NAME'
start_urls = ['LINK']
def parse(self, response):
for title in response.css('.post-header>h2'):
yield {'title': title.css('a ::text').get()}
for next_page in response.css('a.next-posts-link'):
yield response.follow(next_page, self.parse
下⾯是⼀个学习Scrapy并在Python中实现Scrapy的绝佳教程:
《使⽤Scrapy在Python中进⾏⽹页抓取(含多个⽰例)》numpy库不具有的功能有
Selenium
Selenium是⼀个倍受欢迎的⾃动化浏览器⼯具。在业界常⽤于测试,但对于⽹页抓取也⾮常⽅便。Selenium在IT领域⾮常流⾏。
编写Python脚本来⾃动化使⽤Selenium的web浏览器是很容易的。它允许免费⾼效地提取数据,并将其存储在⾸选格式中以备后⽤。
关于使⽤Python和Selenium抓取YouTube视频数据的⽂章:
《数据科学项⽬:使⽤Python和Selenium抓取YouTube数据对视频进⾏分类》
⽤于数据清理和数据操作的Python库
收集了数据之后,接下来要清理可能⾯临的任何混乱数据,并学习如何操作数据,⽅便数据为建模做好准备。
下⾯是四个可⽤于数据清理和数据操作的Python库。请记住,⽂中仅指明在现实世界中处理结构化(数值)数据和⽂本数据(⾮结构化)——⽽该库列表涵盖了所有内容。Pandas
在数据操作和数据分析⽅⾯,Pandas绝⽆敌⼿。Pandas⼀度是最流⾏的Python库。Pandas是⽤Python语⾔编写的,主要⽤于数据操作和数据分析。
这个名称来源于术语“⾯板数据”,“⾯板数据”是⼀个计量经济学术语,指的是包含同⼀个⼈在多个时间段内的观察结果的数据集。
Pandas在Python or Anaconda中已完成预安装,但以防需要,安装代码如下:
pip install pandas
Pandas有以下特点:
· 数据集连接和合并
· 删除和插⼊数据结构列
· 数据过滤
· 重塑数据集
· 使⽤DataFrame对象来操作数据等
下⾯是⼀篇⽂章以及⼀份很棒的Cheatsheet,有助于使Pandas技能达标:
《Python中⽤于数据操作的12种有⽤的Pandas技术》
《CheatSheet:在Python中使⽤Pandas进⾏数据探索》
PyOD
难以发现异常值?这绝⾮个例。别担⼼,PyOD库就在这⾥。
PyOD是⼀个全⾯的、可伸缩的Python⼯具包,⽤于检测外围对象。离值检测基本上是识别与⼤多数数据显著不同的稀有项或观测值。
以下代码可⽤于下载pyOD:
pip install pyod
PyOD是如何⼯作的?如何实现PyOD?下⾯⼀则指南将回答所有关于PyOD的问题:
《学习在Python中使⽤PyOD库检测异常值的绝佳教程》
NumPy
与Pandas⼀样,NumPy也是⼀个⾮常受欢迎的Python库。NumPy引⼊了⽀持⼤型多维数组和矩阵的函数,同时还引⼊了⾼级数学函数来处理这些数组和矩阵。
NumPy是⼀个开源库,有多⽅贡献者。在 Anaconda和Python中已预安装Numpy,但以防需要,下⾯是安装代码:
$ pip install numpy
SpaCy
⽬前已经讨论了如何清理数据和处理数值数据。但是如果正在处理⽂本数据呢?到⽬前为⽌,现有的库都⽆法解决该问题。
Spacy是⼀个⾮常有⽤且灵活的⾃然语⾔处理( NLP )库和框架,⽤于清理创建模型的⽂本⽂档。与类似⽤途的其他库相⽐,SpaCy速度更快。
在Linux中安装Spacy:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论