【Python小技巧】Python中有哪些讓你覺得相見恨晚的模塊/庫/函數(shù)?
提到Python的庫,大家可能首先會想到下面幾個:
NumPy:用于矩陣計算,機器學(xué)習(xí);
pandas:基于NumPy,對標(biāo)Excel/SQL的表格數(shù)據(jù)處理,或者R的Tidyverse;
SciPy:科學(xué)計算,對標(biāo)MATLAB;
statsmodels:用于計量建模,對標(biāo)R的 AER,或者Stata;
skilearn:用于機器學(xué)習(xí)建模;
PyTorch/TensorFlow/Keras:用于深度學(xué)習(xí)建模;
matplotlib/plotly:用于數(shù)據(jù)可視化,對標(biāo)R的ggplot2;
seaborn/Bokeh:高級的/交互式的可視化;
turtle:基于游標(biāo)而不是數(shù)據(jù)畫圖,功能更加全面;
scrapy/requests/beautiful soup:網(wǎng)絡(luò)爬蟲;
NLTK:自然語言處理
...
但除此以外,Python還有大量功能豐富的庫,比如下面這些:
emoji
geopy
inspect
當(dāng)然,除了一些有意思的模塊,本文還會一些Python的獨特功能,包括:
列表推導(dǎo)式,list comprehension
匿名函數(shù),lambda function
map 映射函數(shù)
emoji 模塊可以幫助Python輸出表情符號包/符號。
# -*- coding: utf-8 -*-
"""
Created on Fri Jun 18 01:52:59 2021
@Software: Spyder
@author: 盲區(qū)行者王"""
from emoji import emojize
emojize(":thumbs_up:")
Out[19]: ' 'emojize("Python is fun :red_heart:")
Out[20]: 'Python is fun ?'
官網(wǎng):歡迎使用Geopy文檔!- GeoPy 2.0.0 文檔
geopy 模塊提供一系列地理編碼服務(wù)的API,讓地址獲取和經(jīng)度、維度、海拔等地理信息處理變得簡單。在此基礎(chǔ)之上,我們可以計算兩個地點的距離。
先看下如何從維度、經(jīng)度和海拔定義一個位置:
import geopy
p1 = geopy.point.Point(41.5, -81.0, 12.3)
str(p1) ## 查看結(jié)構(gòu)
Out[31]: '41 30m 0s N, 81 0m 0s W, 12.3km'
接下來,我們嘗試計算兩地的距離:
from geopy import distance
newport_ri = (41.49008, -71.312796) ##定義地點1
cleveland_oh = (41.499498, -81.695391) ##定義地點2
distance.distance(newport_ri, cleveland_oh).kilometers ##以km為單位Out[21]: 866.4554329098687
inspect 模塊可以幫助我們理解Python在運行背后的源代碼,以及類的結(jié)構(gòu)。
import inspect
inspect.getsource(inspect.getsource)
Out[35]: 'def getsource(object):\n """Return the text of the source code for an object.\n\n The argument may be a module, class, method, function, traceback, frame,\n or code object. The source code is returned as a single string. An\n OSError is raised if the source code cannot be retrieved."""\n lines, lnum = getsourcelines(object)\n return \'\'.join(lines)\n'
這個包兼有爬蟲了NLP的功能,可以幫助我們從大量國際出版處中檢索新聞文章,極其對應(yīng)的元數(shù)據(jù)。從新聞文章數(shù)據(jù)中,我們可以檢索具體的人名、關(guān)鍵詞、圖像等等。
## 基于Article方法檢索單條新聞from newspaper import Article
url = "https://edition.cnn.com/2021/06/18/china/billion-vaccine-shots-mic-intl-hnk/index.html"news = Article(url, language='en')
news.download() ##下載網(wǎng)頁news.parse() ##解析該網(wǎng)頁
news.title ## 標(biāo)題
Out[98]: "China's about to administer its billionth coronavirus shot. Yes, you read that right"news.text ## 新聞?wù)?
Out[99]: '(CNN) Editor\'s note: CNN is launching the Meanwhile in China newsletter on June 21, a ##很長,省略。news.authors ## 作者
Out[100]: ['Nectar Gan', 'Laura He']
news.keywords ## 關(guān)鍵詞,結(jié)果為空
Out[101]: []
news.summary ## 摘要
Out[102]: ''news.top_image ## 配圖的URL
Out[103]: 'https://cdn.cnn.com/cnnnext/dam/assets/210618002412-china-coronavirus-vaccine-0603-super-tease.jpg'news.publish_date ## 新聞發(fā)布日期
Out[104]: datetime.datetime(2021, 6, 18, 0, 0)
官網(wǎng):scalene
scalene:一個優(yōu)秀的,用于查看CPU、GPU和內(nèi)存運行情況的專用模塊。
不過在安裝的時候,我搞了半天沒裝好,所以這里給出官網(wǎng)的說明,大家了解一下。

這個包和matplotlib等不同指出在于,可以什么方便地制作html格式的圖形。pyecharts還可以進一步和Flask、Django等熱門Web框架集成,并支持基于百度地圖的地理數(shù)據(jù)可視化。
from pyecharts.charts import Bar
bargraph = Bar()
bargraph.add_xaxis(["經(jīng)濟學(xué)", "金融學(xué)", "金融工程", "Stata", "Python"])
bargraph.add_yaxis("盲區(qū)行者王 同學(xué)", [91, 92, 93, 94, 95])
render
bargraph.render()
官網(wǎng):tqdm/tqdm
tqdm,來自于阿拉伯語“taqaddum”,= progress,進程/進度 的意思。
通過tqdm,可以查看算法在具體執(zhí)行過程中的進度。尤其在一些運行時間很長的算法當(dāng)中(比如冒泡排序100萬個整數(shù)),我們可以實時查看算法運行完成的比例。
演示代碼:
from tqdm import tnrange, tqdm_notebook
from time import sleep
for i in tqdm_notebook(tnrange(4), desc = "第1層的循環(huán)"):
for j in tqdm_notebook(tnrange(100), desc = "第2層的循環(huán)", leave = False):
sleep(0.02)

列表推導(dǎo)式和下面要介紹的匿名函數(shù)有點像,兩者可以進行對比學(xué)習(xí)。它們可以大幅提升Python的效率。
a = [1, 2, 3, 4, 5]
b = [x**3 for x in a] ##列表推導(dǎo)式b
Out[49]: [1, 8, 27, 64, 125]
c = [x**3 for x in a if x%2 == 0]
c
Out[51]: [8, 64]
lambda 函數(shù)也叫匿名函數(shù),是一種不同于普通函數(shù)的函數(shù)。通過map() 函數(shù),lambda函數(shù)生成的新元素可以轉(zhuǎn)換為列表或元組等對象。
a = [1, 2, 3, 4, 5]
b = map(lambda a:a**3, a)
list(b) ##轉(zhuǎn)換為列表
Out[46]: [1, 8, 27, 64, 125]

