PyHubWeekly | 第十七期:5款Python小工具,第4款超級實用!

  • 2020 年 5 月 11 日
  • AI

前言

PyHubWeekly每周定期更新,精選GitHub上優質的Python項目/小工具。

我把PyHubWeekly託管到了Github,感興趣的可以搜索Github項目PyHubWeekly,如果喜歡,麻煩給個Star支持一下吧。此外,歡迎大家通過提交issue來投稿和推薦自己的項目~

本期為大家推薦GitHub上5個優質的Python項目,<!–more–>它們分別是:

  • jukebox
  • python-patterns
  • dabl
  • missingno
  • emot

下面分別來介紹一下上述5個GitHub項目。

jukebox

Star:1.8k

jukebox是一款由OpenAI開源的一款自動生成音樂的神經網絡。

生成網絡用於自動生成是這兩年人工智能領域研究比較熱門的一個方面,例如,自動生成圖像、自動生成音樂。

OpenAI開源的jukebox神經網絡可以生成各種流派和藝術家風格的原始音頻,也包括基本的歌唱。

jukebox在生成音樂的過程中,主要包括2個過程,

  • 採樣
  • 訓練
# Required: Sampling
conda create --name jukebox python=3.7.5
conda activate jukebox
conda install mpi4py=3.0.3
conda install pytorch=1.4 torchvision=0.5 cudatoolkit=10.0 -c pytorch
git clone https://github.com/openai/jukebox.git
cd jukebox
pip install -r requirements.txt
pip install -e .

# Required: Training
conda install av=7.0.01 -c conda-forge 
pip install ./tensorboardX
 
# Optional: Apex for faster training with fused_adam
conda install pytorch=1.1 torchvision=0.3 cudatoolkit=10.0 -c pytorch
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./apex

python-patterns

Star:24.6k

python-patterns是Python中設計模式/習慣用法的集合。

我曾經不止在一篇文章中提及過設計模式的重要性,而對於Python這類語法簡單、效率偏低的編程語言,更加重視設計模式。

設計模式並不是一種老生常談的固定知識,而更加偏重於一種思維方式的轉變,例如,原型模式、工廠模式。也就是說,即便你不使用這種設計模式也可以實現某種功能,但是如果使用,執行效率、維護成本、可讀性都會得到極大程度的優化。

例如,下面示例的原型模式,

class Prototype:

    value = 'default'

    def clone(self, **attrs):
        """Clone a prototype and update inner attributes dictionary"""
        # Python in Practice, Mark Summerfield
        obj = self.__class__()
        obj.__dict__.update(attrs)
        return obj


class PrototypeDispatcher:
    def __init__(self):
        self._objects = {}

    def get_objects(self):
        """Get all objects"""
        return self._objects

    def register_object(self, name, obj):
        """Register an object"""
        self._objects[name] = obj

    def unregister_object(self, name):
        """Unregister an object"""
        del self._objects[name]


def main():
    """
    >>> dispatcher = PrototypeDispatcher()
    >>> prototype = Prototype()
    >>> d = prototype.clone()
    >>> a = prototype.clone(value='a-value', category='a')
    >>> b = prototype.clone(value='b-value', is_checked=True)
    >>> dispatcher.register_object('objecta', a)
    >>> dispatcher.register_object('objectb', b)
    >>> dispatcher.register_object('default', d)
    >>> [{n: p.value} for n, p in dispatcher.get_objects().items()]
    [{'objecta': 'a-value'}, {'objectb': 'b-value'}, {'default': 'default'}]
    """


if __name__ == '__main__':
    import doctest
    doctest.testmod()

dabl

Star:438

dabl是一款數據分析基準庫。

這個項目試圖使監督機器學習對於初學者變的更容易,並減少見任務的複雜度。

例如,利用dabl進行分類的一個示例,

import dabl
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digits
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
sc = dabl.SimpleClassifier().fit(X_train, y_train)
Running ...
print("Accuracy score", sc.score(X_test, y_test))
Accuracy score 0.9...

就這樣簡單的幾行代碼,幾秒鐘的時間內既可以獲得分類結果。

其實,dabl的最大優點並不在於機器學習,而是在於為數據探索提供了簡單的接口。下面是一個簡單地通過調用plot(X, y)生成的可視化示例:

missingno

Star:2.2k

missingno是一款Python缺失數據的可視化工具。

數據,是我們在工作中最為重要的一個環節,沒有之一。

無論是做人工智能,還是做業務相關,或者簡單的做一些用戶畫像,如果沒有數據,或者數據質量差,一切產品規劃都無從談起。我想,在互聯網、IT行業工作過的同學應該都會有這樣的體會。

而數據缺失,又是我們在數據質量驗證中最為重要的一項任務。

很多剛從業的同學,剛接觸到項目便開始把目光放在算法的研究和開發方面,一番努力之後,發現效果並沒有達到預期,回頭定位問題的時候才發現數據確實嚴重,而在這個過程中已經浪費掉很多時間和精力。

而,如果我們在着手研發之前,先對數據質量進行驗證,可視化一下缺失情況,這樣就避免不必要的人力浪費。

emot

Star:64

emot是一款用於提取文本中表情的簡單小工具。

>>> import emot
>>> text = "I love python   :-)"
>>> emot.emoji(text)
>>> [{'value': ' ', 'mean': ':man:', 'location': [14, 14], 'flag': True}]
>>> emot.emoticons(text)
>>> {'value': [':-)'], 'location': [[16, 19]], 'mean': ['Happy face smiley'], 'flag': True}

emot可以用於從文本(字符串)中提取emojis和emoticon等,所有的表情符號。

安裝

通過pip安裝,

$ pip install emot --upgrade

從master分支安裝,

$ git clone https://github.com/NeelShah18/emot.git
$ cd emot
$ python setup.py install


推薦閱讀