【Python小技巧】Python中有哪些让你觉得相见恨晚的模块/库/函数?

Python日志

共 4143字,需浏览 9分钟

 · 2021-07-08

【Python小技巧】Python中有哪些让你觉得相见恨晚的模块/库/函数?



引言 Introduction


提到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 映射函数



1 表情包库:emoji


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 '


2 地理数据处理模块:geopy


官网:欢迎使用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


3 Python自带的 inspect


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'


4 新闻网页爬取包:newspaper3k


这个包兼有爬虫了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)


5 CPU和内存分析包 Scalene


官网:scalene

scalene:一个优秀的,用于查看CPU、GPU和内存运行情况的专用模块。

不过在安装的时候,我搞了半天没装好,所以这里给出官网的说明,大家了解一下。


6 Web可视化包:pyecharts


这个包和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()


7 漂亮简单的进度条:tqdm


官网: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)


8 列表推导 List Comprehension


列表推导式和下面要介绍的匿名函数有点像,两者可以进行对比学习。它们可以大幅提升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]


9 lambda 函数和 map 映射


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]
一键三连~~
关注小编~




浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报