數(shù)據(jù)崗面試:常用哪些Python第三方庫?
導(dǎo)讀
當(dāng)下,數(shù)據(jù)從業(yè)者大多需要掌握Python語言,更準(zhǔn)確的說要學(xué)會使用Python提供的一些主流第三方庫??紤]眼下正值金三銀四的找工作最佳時機(jī),現(xiàn)將個人曾經(jīng)歷過的一道面試真題做以分享,具有一定的代表性。

面試題:日常工作中常用的Python第三方庫有哪些?
問題解析:這在很多數(shù)據(jù)崗位面試中很可能會遇到的一道題,筆者在去年的面試中就曾遇到過。表面來看,回答本題并不難,甚至常常如實回答就能說出許多Python中數(shù)據(jù)相關(guān)的第三方庫,但實際上面試官可能更想透過求職者的回答了解其對數(shù)據(jù)處理各流程的理解和掌握情況,良好的回答不僅能原原本本的體現(xiàn)求職者的技術(shù)深度,更能表現(xiàn)出良好的邏輯思維以及對數(shù)據(jù)處理流程的理解。
參考答案:按照數(shù)據(jù)處理的一般流程,各階段常用的Python第三方庫如下:
1)數(shù)據(jù)采集。Python做數(shù)據(jù)采集的方式有很多,比如Python爬蟲常用于從Web頁面獲取一些結(jié)構(gòu)化的數(shù)據(jù)。而在Python爬蟲過程中,常用的第三方數(shù)據(jù)庫如下

urllib:Python內(nèi)置的網(wǎng)絡(luò)請求庫,包含了請求網(wǎng)頁的常用方法,相較于其替代品requests而言,API接口更為基礎(chǔ)多樣;
requests,基于urllib開發(fā),slogen就是“讓HTTP服務(wù)人類”,求功能也恰如其宣傳口號一般,使用起來相較原生urllib更為簡潔易用,也是眾多Python爬蟲愛好者廣泛使用的庫;
beautifulsoup:爬蟲解析庫之一,處理requests請求獲得的網(wǎng)頁源碼文件,從中提取目標(biāo)字段。名字直譯為美麗湯,用其解析網(wǎng)頁源碼就像從湯中撈取干貨一般,用起來還是比較簡單易懂的;
lxml:從名字可見其應(yīng)該與xml語言有關(guān),實際也正是如此,也是爬蟲解析庫之一,由于通過xml語言標(biāo)識符來查找定位相應(yīng)字段,所以解析效率比beautifulsoup更為高效,但使用難度也略有提升,需要掌握一定的xml語法;
re:Python中的正則表達(dá)式庫,對于requests獲取的網(wǎng)頁源碼而言,實際就是字符串,所以也可用正則表達(dá)式庫來解析提取,效率不俗;
pyquery:實際上是干了網(wǎng)頁獲取+網(wǎng)頁解析兩階段的事,當(dāng)然網(wǎng)頁獲取實際上也是調(diào)用的urllib或requests。
2)數(shù)據(jù)讀寫。數(shù)據(jù)讀寫主要是涉及數(shù)據(jù)庫及文件交互的部分庫。常用的數(shù)據(jù)庫也無非就是那么幾種,包括:

pymysql:python處理MySQL數(shù)據(jù)庫的驅(qū)動引擎;
cx-oracle:python處理Oracle數(shù)據(jù)庫的驅(qū)動引擎;
psycopg2:python處理PostgreSQL數(shù)據(jù)庫的驅(qū)動引擎;
sqlite3:python處理SQLite數(shù)據(jù)庫的驅(qū)動引擎;
sqlalchemy:python建立多種數(shù)據(jù)庫的連接,底層實際上仍然是調(diào)用各數(shù)據(jù)庫驅(qū)動,相當(dāng)于集成化的驅(qū)動引擎;
pymongodb:NoSQL數(shù)據(jù)庫MongoDB的Python驅(qū)動引擎;
xlrd和xlwt:分別用于excel的read和write;
csv:處理csv數(shù)據(jù)庫的python包。
3)數(shù)據(jù)分析與處理。從這里開始進(jìn)入到Python數(shù)據(jù)處理的主要環(huán)節(jié),也是真正考察python數(shù)據(jù)分析技能的重點。常用的數(shù)據(jù)處理庫包括:

Numpy:python數(shù)據(jù)分析三劍客之一,也是另外兩個包的基礎(chǔ),核心數(shù)據(jù)結(jié)構(gòu)是ndarray,即n維數(shù)組,由于底層是用C語言實現(xiàn),所以具有非常高的執(zhí)行效率,并內(nèi)置了大量的數(shù)組運(yùn)算,與matplotlib的組合號稱是替代Matlab的核心產(chǎn)品;
Pandas:在數(shù)據(jù)分析界曾流傳這樣一句話:分析不識潘大師(PANDAS),縱是老手也枉然!可見其在Python數(shù)據(jù)分析行業(yè)的江湖地位,且實際情況也正是如此。Pandas繼承了Numpy,從網(wǎng)頁爬蟲到數(shù)據(jù)讀寫,從類SQL操作到數(shù)據(jù)預(yù)處理,從聚合統(tǒng)計到數(shù)據(jù)透視表,從時序數(shù)據(jù)到字符串的正則表達(dá)式,直至數(shù)據(jù)可視化輸出圖表,pandas都提供了一站式解決方案,堪稱是數(shù)據(jù)分析界的瑞士軍刀。其向量化操作也保證了執(zhí)行效率,對于千萬級以下數(shù)據(jù)量處理起來毫無壓力;
PySpark:Pandas速度雖快,但終究是單點執(zhí)行,當(dāng)數(shù)據(jù)量超過千萬時考慮分布式處理往往是更為明智之選,而分布式處理框架當(dāng)首選Spark,而Pyspark則是其Python語言實現(xiàn)版本,尤其是pyspark.sql組件,提供了與Pandas極為類似的處理API,使用起來也非常方便;
Scipy:科學(xué)計算包,提供了numpy之外更多的科學(xué)計算功能,例如各類統(tǒng)計分布等;
geopandas:基于Pandas實現(xiàn)的地理空間數(shù)據(jù)處理,相較于Pandas的DataFrame數(shù)據(jù)結(jié)構(gòu),僅增加了一列核心的geometry,用于表達(dá)地理空間信息,對于含有經(jīng)緯度等地理空間數(shù)據(jù),處理起來極為高效和絲滑。
4)數(shù)據(jù)可視化。數(shù)據(jù)分析和處理的重要環(huán)節(jié)是數(shù)據(jù)可視化,往往也是決定自己工作質(zhì)量好壞的關(guān)鍵環(huán)節(jié)??捎糜谳敵隹梢暬瘓D表的Python庫有很多,例如基于numpy的matplotlib,基于matplotlib的seaborn,基于Echarts的pyecharts等等,當(dāng)然還有很多其他可選的庫,但個人最常使用的還是這三個。

matplotlib:是Python中繪圖的基礎(chǔ)庫,內(nèi)部實現(xiàn)非常強(qiáng)大,常用的是matplotlib.pyplot,除了pyplot外還有pylab,不僅提供了可視化功能,還直接import進(jìn)了numpy的核心功能。matplotlib繪圖的API更為底層,意味著完成一幅圖表的輸出,需設(shè)置很多參數(shù),定制化更強(qiáng),但同時也較為繁瑣。所以是很多高級可視化庫的底層依賴;
seaborn:是基于matplotlib的一個高級實現(xiàn),提供了更為簡潔的API和更為集成化的顯示效果,尤其適用于pandas.dataframe數(shù)據(jù)結(jié)構(gòu);
pyecharts:Python與百度Echarts組間的結(jié)合體,優(yōu)點是支持動態(tài)圖表繪制,可交互,繪制的圖形也相對更為美觀。
5)數(shù)據(jù)挖掘。在簡單的數(shù)據(jù)分析之后,往往要進(jìn)入到統(tǒng)計學(xué)習(xí)和數(shù)據(jù)挖掘階段,或者用更專業(yè)的術(shù)語講,叫機(jī)器學(xué)習(xí)。也正是得益于機(jī)器學(xué)習(xí)的盛行,Python語言才有了不斷發(fā)展壯大的今天。用Python做機(jī)器學(xué)習(xí),主要是以下幾個常用的庫:

scikit-learn:經(jīng)典機(jī)器學(xué)習(xí)算法的核心庫,提供了常用的分類、回歸、聚類、降維以及關(guān)聯(lián)分析等經(jīng)典算法,且內(nèi)置了一些經(jīng)典數(shù)據(jù)集、常用特征工程、評分準(zhǔn)則等實現(xiàn),更重要的是scikit-learn提供了非常詳盡和到位的配套文檔和注釋,API調(diào)用也堪稱簡潔優(yōu)雅;
xgboost:算是對scikit-learn中集成學(xué)習(xí)算法的一個補(bǔ)充,主要是實現(xiàn)了近年來火爆的xgboost算法實現(xiàn);
lightgbm:與xgboost類似,也是對scikit-learn中集成算法的一個補(bǔ)充,實現(xiàn)了另一個輕量級的繼承算法lightgbm;
pytorch和TensorFlow,二者均為深度學(xué)習(xí)庫,功能定位也較為相似,前者源于Facebook,后者源于谷歌;前者在學(xué)術(shù)界使用廣泛,后者在工業(yè)界更為流行,二者本是瑜亮之爭不分伯仲,依據(jù)個人喜好擇其一即可,個人目前在學(xué)的是pytorch。
以上就是依據(jù)數(shù)據(jù)分析和處理的各個環(huán)節(jié)中常用的python第三方庫,面試時可以圍繞上述階段劃分思路予以拓展分析回答,在實際工作中也足以支持大部分內(nèi)容。

相關(guān)閱讀:
