导读
当下,数据从业者大多需要掌握Python语言,更准确的说要学会使用Python提供的一些主流第三方库。考虑眼下正值金三银四的找工作最佳时机,现将个人曾经历过的一道面试真题做以分享,具有一定的代表性。
面试题:日常工作中常用的Python第三方库有哪些?
问题解析:这在很多数据岗位面试中很可能会遇到的一道题,笔者在去年的面试中就曾遇到过。表面来看,回答本题并不难,甚至常常如实回答就能说出许多Python中数据相关的第三方库,但实际上面试官可能更想透过求职者的回答了解其对数据处理各流程的理解和掌握情况,良好的回答不仅能原原本本的体现求职者的技术深度,更能表现出良好的逻辑思维以及对数据处理流程的理解。
参考答案:按照数据处理的一般流程,各阶段常用的Python第三方库如下:
1)数据采集。Python做数据采集的方式有很多,比如Python爬虫常用于从Web页面获取一些结构化的数据。而在Python爬虫过程中,常用的第三方数据库如下
- urllib:Python内置的网络请求库,包含了请求网页的常用方法,相较于其替代品requests而言,API接口更为基础多样;
- requests,基于urllib开发,slogen就是“让HTTP服务人类”,求功能也恰如其宣传口号一般,使用起来相较原生urllib更为简洁易用,也是众多Python爬虫爱好者广泛使用的库;
- beautifulsoup:爬虫解析库之一,处理requests请求获得的网页源码文件,从中提取目标字段。名字直译为美丽汤,用其解析网页源码就像从汤中捞取干货一般,用起来还是比较简单易懂的;
- lxml:从名字可见其应该与xml语言有关,实际也正是如此,也是爬虫解析库之一,由于通过xml语言标识符来查找定位相应字段,所以解析效率比beautifulsoup更为高效,但使用难度也略有提升,需要掌握一定的xml语法;
- re:Python中的正则表达式库,对于requests获取的网页源码而言,实际就是字符串,所以也可用正则表达式库来解析提取,效率不俗;
- pyquery:实际上是干了网页获取+网页解析两阶段的事,当然网页获取实际上也是调用的urllib或requests。
2)数据读写。数据读写主要是涉及数据库及文件交互的部分库。常用的数据库也无非就是那么几种,包括:
- pymysql:python处理MySQL数据库的驱动引擎;
- cx-oracle:python处理Oracle数据库的驱动引擎;
- psycopg2:python处理PostgreSQL数据库的驱动引擎;
- sqlite3:python处理SQLite数据库的驱动引擎;
- sqlalchemy:python建立多种数据库的连接,底层实际上仍然是调用各数据库驱动,相当于集成化的驱动引擎;
- pymongodb:NoSQL数据库MongoDB的Python驱动引擎;
- xlrd和xlwt:分别用于excel的read和write;
- csv:处理csv数据库的python包。
3)数据分析与处理。从这里开始进入到Python数据处理的主要环节,也是真正考察python数据分析技能的重点。常用的数据处理库包括:
- Numpy:python数据分析三剑客之一,也是另外两个包的基础,核心数据结构是ndarray,即n维数组,由于底层是用C语言实现,所以具有非常高的执行效率,并内置了大量的数组运算,与matplotlib的组合号称是替代Matlab的核心产品;
- Pandas:在数据分析界曾流传这样一句话:分析不识潘大师(PANDAS),纵是老手也枉然!可见其在Python数据分析行业的江湖地位,且实际情况也正是如此。Pandas继承了Numpy,从网页爬虫到数据读写,从类SQL操作到数据预处理,从聚合统计到数据透视表,从时序数据到字符串的正则表达式,直至数据可视化输出图表,pandas都提供了一站式解决方案,堪称是数据分析界的瑞士军刀。其向量化操作也保证了执行效率,对于千万级以下数据量处理起来毫无压力;
- PySpark:Pandas速度虽快,但终究是单点执行,当数据量超过千万时考虑分布式处理往往是更为明智之选,而分布式处理框架当首选Spark,而Pyspark则是其Python语言实现版本,尤其是pyspark.sql组件,提供了与Pandas极为类似的处理API,使用起来也非常方便;
- Scipy:科学计算包,提供了numpy之外更多的科学计算功能,例如各类统计分布等;
- geopandas:基于Pandas实现的地理空间数据处理,相较于Pandas的DataFrame数据结构,仅增加了一列核心的geometry,用于表达地理空间信息,对于含有经纬度等地理空间数据,处理起来极为高效和丝滑。
4)数据可视化。数据分析和处理的重要环节是数据可视化,往往也是决定自己工作质量好坏的关键环节。可用于输出可视化图表的Python库有很多,例如基于numpy的matplotlib,基于matplotlib的seaborn,基于Echarts的pyecharts等等,当然还有很多其他可选的库,但个人最常使用的还是这三个。
- matplotlib:是Python中绘图的基础库,内部实现非常强大,常用的是matplotlib.pyplot,除了pyplot外还有pylab,不仅提供了可视化功能,还直接import进了numpy的核心功能。matplotlib绘图的API更为底层,意味着完成一幅图表的输出,需设置很多参数,定制化更强,但同时也较为繁琐。所以是很多高级可视化库的底层依赖;
- seaborn:是基于matplotlib的一个高级实现,提供了更为简洁的API和更为集成化的显示效果,尤其适用于pandas.dataframe数据结构;
- pyecharts:Python与百度Echarts组间的结合体,优点是支持动态图表绘制,可交互,绘制的图形也相对更为美观。
5)数据挖掘。在简单的数据分析之后,往往要进入到统计学习和数据挖掘阶段,或者用更专业的术语讲,叫机器学习。也正是得益于机器学习的盛行,Python语言才有了不断发展壮大的今天。用Python做机器学习,主要是以下几个常用的库:
- scikit-learn:经典机器学习算法的核心库,提供了常用的分类、回归、聚类、降维以及关联分析等经典算法,且内置了一些经典数据集、常用特征工程、评分准则等实现,更重要的是scikit-learn提供了非常详尽和到位的配套文档和注释,API调用也堪称简洁优雅;
- xgboost:算是对scikit-learn中集成学习算法的一个补充,主要是实现了近年来火爆的xgboost算法实现;
- lightgbm:与xgboost类似,也是对scikit-learn中集成算法的一个补充,实现了另一个轻量级的继承算法lightgbm;
- pytorch和TensorFlow,二者均为深度学习库,功能定位也较为相似,前者源于Facebook,后者源于谷歌;前者在学术界使用广泛,后者在工业界更为流行,二者本是瑜亮之争不分伯仲,依据个人喜好择其一即可,个人目前在学的是pytorch。
以上就是依据数据分析和处理的各个环节中常用的python第三方库,面试时可以围绕上述阶段划分思路予以拓展分析回答,在实际工作中也足以支持大部分内容。