DevWeekly/docs/28-pyhubweekly.md

193 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 前言
PyHubWeekly每周定期更新精选GitHub上优质的Python项目/小工具。
我把PyHubWeekly托管到了Github感兴趣的可以**搜索Github项目**[PyHubWeekly](Jackpopc/PyHubWeekly)如果喜欢麻烦给个Star支持一下吧。此外**欢迎大家通过提交issue来投稿和推荐自己的项目**~
本期为大家推荐GitHub上5个优质的Python项目它们分别是
- **PandasGUI**
- **Pippi**
- **pylambdarest**
- **Fixit**
- **isort**
下面分别来介绍一下上述5个GitHub项目。
### PandasGUI
![img](https://mmbiz.qpic.cn/mmbiz_png/DGwXCh99GDDlDQOyvDHzSObrS4BeIeqIyQiafTsDxPq6WxaoHfAXVPgFWStGMcWp2cQe9IuRPyP6af3N4boEReQ/640?wx_fmt=png)
学习Python数据分析有2个工具包一定会被用到分别是`numpy`和`pandas`。
`pandas`可以说是Python数据分析中的神器它可以在Python语言中实现很多SQL语句的功能。而且还具备很多数据清洗和处理的附加功能。
但是,对比于很多数据库工具,它有一点不好的地方就是,它在可视化方面做的很差。
而**PandasGUI**的出现让我大为经验它能够直接把pandas的DataFrames进行可视化让我们数据分析过程中对数据有一个更加清晰的认知。
**安装**
```shell
$ pip install pandasgui
$ pip install git+https://github.com/adamerose/pandasgui.git
```
**用法**
首先创建一个简单的DataFrames
```Python
import pandas as pd
from pandasgui import show
df = pd.DataFrame(([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['a', 'b', 'c'])
show(df)
```
如果你将代码作为脚本而不是在IPython或Jupyter中运行则需要这样做
```Python
show(df, settings={'block': True})
```
### Pippi
从事计算机视觉能够找到很多和图像处理相关的Python库。从事自然语言处理NLP相关的工具包也是层出不穷。
而音乐作为一种常见的多媒体形式却鲜有相关的Python工具包。
如果你想通过代码处理一段音乐,然后对它进行控制和调整,就会不知所措、无从下手。
Pippi[3]就可以满足你的这个需求它是一款用于Python的音乐处理库它包含了一些方便的音乐数据结构如SoundBuffer和Wavetable使得处理音乐变得非常简单。除此之外它还可以对音乐格式进行**转换**。
```Python
from pippi import dsp
sound1 = dsp.read('sound1.wav')
sound2 = dsp.read('sound2.flac')
# Mix two sounds
both = sound1 & sound2
# Apply a skewed hann Wavetable as an envelope to a sound
enveloped = sound * dsp.win('hann').skewed(0.6)
# Or just a sine envelope via a shortcut method on the `SoundBuffer`
enveloped = sound.env('sine')
# Synthesize a 10 second graincloud from the sound,
# with grain length modulating between 20ms and 2s
# over a triangle shaped curve.
cloudy = enveloped.cloud(10, grainlength=dsp.win('tri', dsp.MS*20, 2))
```
### pylambdarest
当让你用Python写一个REST API接口时大概率会想到Flask。
而pylambdarest[4]是Flask之外一个非常不错的选择。
它是一款轻量级的框架用于使用AWS Lambda + API网关构建REST API。
与大多数其他Python框架不同它不提供任何路由功能路由由API网关本身处理。
下面通过一个示例来对于pylambdarest与其他工具包的不同之处
**其他工具包**
```Python
import json
def handler(event, context):
body = json.loads(event["body"])
query_params = event["queryStringParameters"]
path_params = event["pathParameters"]
return {
"statusCode": 200,
"body": json.dumps({
"message": f"Hello from AWS Lambda {body['name']}!!"
})
}
```
**pylambdarest**
```Python
from pylambdarest import route
@route()
def handler(request):
body = request.json
query_params = request.query_params
path_params = request.path_params
return200, {"message": f"Hello from AWS Lambda {body['name']}!!"}
```
当使用API网关和python Lambdas时最常见的模式是由代理API网关资源触发一个唯一的Lambda。Lambda然后使用类似于Flask的框架来完成所有的路由。在API Gateway + Lambda上下文中作者认为路由应该由API Gateway本身处理然后将请求转发给针对每个资源或endoint的特定Lambda函数。
### Fixit
Fixit[5]是一个对Flake8进行补充的lint框架。它基于LibCST这使得提供自动修复成为可能。通过模式匹配、测试工具包和实用工具助手(例如范围分析)可以很容易地构建Lint规则。它是优化的效率易于定制。
**安装**
```
$ pip install fixit
```
通过配置fixit规则可以对Python代码进行静态检查能够有效的提升Python代码的质量。
### isort
Python是一门对语法要求相对宽松的编程语言因此对于很多Python初学者来说这门语言非常简单。
但是Python中有很多约定成俗的规则通过这个规则的约束和遵从能够提升Python代码的可读性降低维护成本。
以Python代码中的`import`为例,就有一定的规则,内置模块、自定义模块、第三方模块的导入都是有一定顺序的。
isort[6]就是针对Python中`import`部分自动规范化的工具包通过使用isort可以迅速按照规则调整模块导入部分。
使用isort之前
```Python
from my_lib import Object
import os
from my_lib import Object3
from my_lib import Object2
import sys
from third_party import lib15, lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, lib9, lib10, lib11, lib12, lib13, lib14
import sys
from __future__ import absolute_import
from third_party import lib3
print("Hey")
print("yo")
```
使用isort之后
```Python
from __future__ import absolute_import
import os
import sys
from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8,
lib9, lib10, lib11, lib12, lib13, lib14, lib15)
from my_lib import Object, Object2, Object3
print("Hey")
print("yo")
```