【Python小技巧】Python中有哪些让你觉得相见恨晚的模块/库/函数?
提到Python的库,大家可能首先会想到下面几个:
NumPy:用于矩阵计算,机器学习;
pandas:基于NumPy,对标Excel/SQL的表格数据处理,或者R的Tidyverse;
SciPy:科学计算,对标MATLAB;
statsmodels:用于计量建模,对标R的 AER,或者Stata;
skilearn:用于机器学习建模;
PyTorch/TensorFlow/Keras:用于深度学习建模;
matplotlib/plotly:用于数据可视化,对标R的ggplot2;
seaborn/Bokeh:高级的/交互式的可视化;
turtle:基于游标而不是数据画图,功能更加全面;
scrapy/requests/beautiful soup:网络爬虫;
NLTK:自然语言处理
...
但除此以外,Python还有大量功能丰富的库,比如下面这些:
emoji
geopy
inspect
当然,除了一些有意思的模块,本文还会一些Python的独特功能,包括:
列表推导式,list comprehension
匿名函数,lambda function
map 映射函数
emoji 模块可以帮助Python输出表情符号包/符号。
# -*- coding: utf-8 -*-
"""
Created on Fri Jun 18 01:52:59 2021
@Software: Spyder
@author: 盲区行者王"""
from emoji import emojize
emojize(":thumbs_up:")
Out[19]: ' 'emojize("Python is fun :red_heart:")
Out[20]: 'Python is fun ❤'
官网:欢迎使用Geopy文档!- GeoPy 2.0.0 文档
geopy 模块提供一系列地理编码服务的API,让地址获取和经度、维度、海拔等地理信息处理变得简单。在此基础之上,我们可以计算两个地点的距离。
先看下如何从维度、经度和海拔定义一个位置:
import geopy
p1 = geopy.point.Point(41.5, -81.0, 12.3)
str(p1) ## 查看结构
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在运行背后的源代码,以及类的结构。
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的功能,可以帮助我们从大量国际出版处中检索新闻文章,极其对应的元数据。从新闻文章数据中,我们可以检索具体的人名、关键词、图像等等。
## 基于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() ##下载网页news.parse() ##解析该网页
news.title ## 标题
Out[98]: "China's about to administer its billionth coronavirus shot. Yes, you read that right"news.text ## 新闻正文
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 ## 关键词,结果为空
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 ## 新闻发布日期
Out[104]: datetime.datetime(2021, 6, 18, 0, 0)
官网:scalene
scalene:一个优秀的,用于查看CPU、GPU和内存运行情况的专用模块。
不过在安装的时候,我搞了半天没装好,所以这里给出官网的说明,大家了解一下。
这个包和matplotlib等不同指出在于,可以什么方便地制作html格式的图形。pyecharts还可以进一步和Flask、Django等热门Web框架集成,并支持基于百度地图的地理数据可视化。
from pyecharts.charts import Bar
bargraph = Bar()
bargraph.add_xaxis(["经济学", "金融学", "金融工程", "Stata", "Python"])
bargraph.add_yaxis("盲区行者王 同学", [91, 92, 93, 94, 95])
render
bargraph.render()
官网:tqdm/tqdm
tqdm,来自于阿拉伯语“taqaddum”,= progress,进程/进度 的意思。
通过tqdm,可以查看算法在具体执行过程中的进度。尤其在一些运行时间很长的算法当中(比如冒泡排序100万个整数),我们可以实时查看算法运行完成的比例。
演示代码:
from tqdm import tnrange, tqdm_notebook
from time import sleep
for i in tqdm_notebook(tnrange(4), desc = "第1层的循环"):
for j in tqdm_notebook(tnrange(100), desc = "第2层的循环", leave = False):
sleep(0.02)
列表推导式和下面要介绍的匿名函数有点像,两者可以进行对比学习。它们可以大幅提升Python的效率。
a = [1, 2, 3, 4, 5]
b = [x**3 for x in a] ##列表推导式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 函数也叫匿名函数,是一种不同于普通函数的函数。通过map() 函数,lambda函数生成的新元素可以转换为列表或元组等对象。
a = [1, 2, 3, 4, 5]
b = map(lambda a:a**3, a)
list(b) ##转换为列表
Out[46]: [1, 8, 27, 64, 125]