Pythonと過ごすクリスマス・イブ

# Pythonと過ごすクリスマス・イブ
クリスマス・イブを楽しく過ごすためのPythonプロジェクトを紹介します。
素晴らしいPythonプロジェクトであれば[Awesome-Python](https://github.com/vinta/awesome-python)にリストがありますが、そういうところには載らない（orギリギリ載ってるかも？）ような珠玉の逸品揃いです。
役に立つものから役に立たないもの、冗談のようでいて実は便利なものまで4品を列挙しますので、どうかお楽しみください。
（＊＊＊ご利用は自己責任でお願いします＊＊＊）

## Eve
トップバッターは[Eve](http://python-eve.org/rest_api_for_humans.html)です。
Eveは人間向けをコンセプトにしたシンプルなREST APIフレームワークです。

インストール方法は`pip install Eve`だけです。
サンプルは[eve demo](https://github.com/pyeve/eve-demo)として用意されており、`git clone https://github.com/pyeve/eve-demo.git`で入手可能です。

これでREST APIを作ることができます。
基本的にdict（辞書型）で階層構造にしてエンドポイントとデータ構造を表現します。
http://python-eve.org/rest_api_for_humans.html

https://github.com/pyeve/eve
http://python-eve.org/


## fuzzywuzzy
続いてfuzzywuzzyです。
fuzzywuzzyはファジーな文字列マッチングツールで、比較対象の文字列がどのくらい似ているかを[レーベンシュタイン距離](https://en.wikipedia.org/wiki/Levenshtein_distance)によって計算してくれます。

インストールは以下です。
fuzzywuzzyとpython-Levenshteinをインストールします。

```bash

pip install fuzzywuzzy
pip install python-Levenshtein

```

使い方は以下のとおりです。

```python

from fuzzywuzzy import fuzz
from fuzzywuzzy import process
fuzz.ratio("this is a test", "this is a test!")
# 97

fuzz.partial_ratio("this is a test", "this is a test!")
# 100

```

fuzzywuzzyの便利なところは、複数候補にも同時に評価することができる点です。
さらには上位2位まで選択するというような使い方もできます。

```python

choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
process.extract("new york jets", choices, limit=2)
# [('New York Jets', 100), ('New York Giants', 79)]

```

日本語にも対応しています。
マルチバイト対応もされているようです。

```python

fuzz.ratio("サンタさんは良い子の家にきます。", "サンタさんは良い子の家にきます")
# 97　#読点の有無

fuzz.ratio("サンタさんは良い子の家にきます", "サンタさんは悪い子の家にきます")
# 93　#良いvs悪い

fuzz.ratio("サンタさんは良い子の家にきます", "サタンさんは悪い子の家にきます")
# 87　#サンタvsサタン、良いvs悪い

```

https://github.com/seatgeek/fuzzywuzzy
http://chairnerd.seatgeek.com/fuzzywuzzy-fuzzy-string-matching-in-python/


## faker
3番手はfakerです。
fakerは嘘データを生成してくれるツールです。
データ登録やテストのためのモック・データがほしい！というときに最適です。

インストールは`pip install Faker`です。
2秒くらいで済みます。

以下のような使い方をします。

```python

from faker import Faker
fake = Faker()
print(fake.name())
# Mark Merritt

print(fake.address())
# 09646 Jessica Canyon Suite 800
# West Jeremychester, ND 96041-2287

print(fake.profile())
#{'address': 'PSC 3090, Box 7203\nAPO AP 74167', 'blood_group': 'B-', 'website': ['http://garcia.com/', 'http://singh.com/', 'https://www.lopez.com/'], 'username': 'jamesrhonda', 'mail': 'summerfernandez@hotmail.com', 'sex': 'M', 'name': 'Anthony Williams', 'ssn': '323-17-6270', 'residence': '52101 Cesar Glen Suite 343\nLake Matthewville, NV 14221-4334', 'company': 'Hopkins and Sons', 'job': "Nurse, children's", 'current_location': (Decimal('27.258387'), Decimal('-135.924368')), 'birthdate': '1983-11-07'}

fake = Faker()
print(fake.text())
# Ducimus eum minus ullam. Vel harum modi maxime consectetur natus. Blanditiis saepe quas minima.
# Eos tempore mollitia non iure error error assumenda.

```

日本語および各種言語にも対応していて名前や住所は本物ぽいです。

```python

fake = Faker("ja_JP")
print(fake.name())
# 木村 裕太

print(fake.address())
# 広島県足立区池之端18丁目18番10号

```

文章やテキストも生成できますが、ちょっと変です。

```python

print(fake.sentence())
#オークション敵対的なダイヤモンド参加する血まみれの風景。

```

素でこういう文を作ってドキドキさせてくれます。

https://github.com/joke2k/faker
https://faker.readthedocs.io/en/latest/



## thefuck
最後はクリスマス・イブの夜を飾るのに最適なプロジェクト、thefuckです。
これも有名どころですね。
thefuckはターミナル・コマンドの打ち間違いを修正してくれるソフトウェアです。
使い方は簡単で、打ち間違いを実行したあとに、`fuck`と打ち込むだけです。
正しいコマンド候補を教えてくれます。

![f0.PNG](https://qiita-image-store.s3.amazonaws.com/0/55384/c6323158-539f-bd4f-e64a-e828e26de39e.png)


インストール方法は簡単です。
OS別に、以下のいずれかでインストールできます。

```bash

# OS X
brew install thefuck

# Ubuntu
sudo apt update
sudo apt install python3-dev python3-pip
sudo pip3 install thefuck

# other OS
pip install thefuck

```

これであなたも`fuck`し放題です。

![f0.PNG](https://qiita-image-store.s3.amazonaws.com/0/55384/bc2b585e-1ae6-b16f-1006-4be689605663.png)


打ち間違いのあとに`fuck`すれば、正解候補を教えてくれます。正しいコマンドを↑↓で選び、確認して実行しましょう。
しかし確認せずに`fuck`したいこともあると思います。
その場合は`fuck -y`で自動的に第1候補を実行してくれます。

![f2.PNG](https://qiita-image-store.s3.amazonaws.com/0/55384/af9153fc-6520-f28f-9af3-7d876fa31a48.png)

更にthefuckのにくいところは、`fuck`は履歴に残りません。
`history`しても自分が`fuck`したことはバレないので、誰も見ていない間に`fuck`し放題です。

![f1.PNG](https://qiita-image-store.s3.amazonaws.com/0/55384/3c6821bb-4f35-bcd7-3a75-09162efc3f0d.png)


なお、`fuck`は`fuck`できないのでご注意ください。

![f3.PNG](https://qiita-image-store.s3.amazonaws.com/0/55384/2046649c-a5b4-2725-f76e-0333b5809c19.png)

https://github.com/nvbn/thefuck
https://nvbn.github.io/2015/10/08/how-thefuck-works/