Python便利ライブラリ

# はじめに
Pythonって，ライブラリとかパッケージ,モジュールが多くて実装がとっても楽なんですけど，自分の知らないライブラリとか，こんなのあるの！？楽じゃんみたいなこと結構自分はあったので，自分用にメモみたいな感じで便利なものリストアップしていきます

# Web
Herokuと組み合わせて使うことで簡単にサービス公開とかできます！
### Django
Djangoは大規模開発に向いてるフレームワーク
自分のポートフォリオはDjangoで作りました．
まだまだ大規模なWeb作ったことないので個人的な範囲内の利用だとFlaskでいいかなってことが多かった．

### Flask
Flaskは軽量フレームワーク，すぐに開発できる
稲が健康かどうかを深層学習で求めるシステム作った時に，FlaskでWeb上から使えるようにしたー．めっちゃ早く作れる．

# 科学計算
### Numpy
機械学習とか画像分類をするときの画像処理とかで使う．
行列作って〜みたいな時にめっちゃ便利だし早い．

### Scipy
プログラミング数学，科学，工学のための数値解析に便利
配列とか行列の演算に使う，時計とか高度な数学的計算が簡単にできる．

# グラフ作成
ここは結構好みが分かれるところ．Kaggleやる人がよく使う！
８割くらいの人はmatplot使ってるかも？
個人的にはseabornが好きです．
### matplotlib
```python
import matplotlib.pyplot as plt
```
でよく使われるやつ！
### seaborn
```python
import seaborn as sns
```
でよく使う．

# 機械学習・深層学習
最近の流行りのコレ．
Pythonだとライブラリがいっぱいあってすぐに実装できる．
### scikit-learn
機械学習モデルで，色々な機械学習の手法が使える．
訓練データ，テストデータの分割もコレでやる！
あとは，データを標準化する時も使う．
### statsmodels
統計解析ソフトで，最小二乗法とか加重最小二乗法とかやる時に使う．
###PyTorch
ディープラーニングを実装するためのライブラリ．
FacebookのAIグループによって開発された．
自然言語処理で使われる．
define by run方式っていうのをとっていて，直感的にRNNを書くことができて，デバックが容易だったりする．

### TensorFlow
Googleが開発したやつ
ディープラーニングを実装するためのライブラリ
大規模データセットとか，パフォーマンスが高い方がいいとか，物体検出によく使うイメージ．

### Keras
最近はTensorFlowの中に組み込まれたやつ．
コードがめっちゃシンプルでモデル作成に時間がかからない！

# ファイル，フォルダ操作
### os
OSに依存している様々な機能が利用できる．ディレクトリ，ファイル操作ができたり，ファイルの一覧を取得したりできる．ファイル作成も可能．
osでファイル一覧を取得して，for文で1つずつ読み込んだりできたのが便利だと感じた．それにファイル名が複雑な時とか，打ち間違いとか無くなってとても良い
### Pathlib
ファイルやフォルダ操作が可能
### OpenPyXL
Excel操作ができる
### requests
htmlデータ取得とかできる．
### Selenium
動的ページのスクレイピングに向いてる
### Beautiful soup
スクレイピングがしたい時に結構使う
### Pandas
Excel，CSVデータ加工する時によく使う．Kaggleとかやる人は必修
### subprocess
Pythonのプログラムから他のアプリを実行したり，実行結果を取得するためのモジュール．
コマンドを実行したり，外部ファイルを実行したりできる

# GUI，デスクトップアプリ
Pythonでデスクトップアプリを作りたいときはここら辺が便利．
### Tkinter
シンプルな文法で作れて，起動も早い
Pythonの中で一番人気が高いGUIライブラリだと思う

### PySimpleGUI
2018年から開発が始まったらしい！
こっちもGUIを作るのに便利なライブラリ

# ネットワーク系
### scapy
CTFでよく使われる．幅広いプロトコルに対応したパケット操作プログラム．
パケット解析とかもできる
### socket
低水準ネットワークインターフェース．
ソケット通信を実装するときとかに使う．
サーバークライアント間の通信とか
TCP,UDP通信系
### telnetlib
Telnetプロトコルを実装しているtelnetクラスが提供される．
サーバやネットワーク機器の情報をexpectコマンドを使って取得可能
### Netmiko
ssh接続とかする時に使う
まだ使ったことがないので，使ってみたら追記
ファイル転送も可能
リモート機器に接続して，操作の補助をする
ログイン，ログアウト，モード移行，ページング設定コマンド
Cisco,Juniper,Palo Alto,Dell,Linuxに対応

### NAPALM
Arista,Cisco,Fortinet Fortios,IBM,Juniper,Mikrotic RouterOS等に対応している．
ネットワーク機器に対して何かをすると言った感じ
ARPテーブルの取得や，MACアドレステーブル，ルーティング情報，環境情報の取得，装置情報の取得等ができる

### struct
バイトオーダーの変換が可能
ネットワークバイトオーダーからホストバイオーダーに変える必要性（ソケット通信等）をする時に重宝

# 非同期処理
### asyncio
シングルスレッド下で動作し，試行した複数の処理は順次に処理され，IO待ち時間にぶつかると実行可能な別の処理を実行すると言う感じに，無駄なIO待ち時間を有効活用すべく，別の処理を割り当てるらしい．

[ここ](https://note.crohaco.net/2019/python-asyncio/)を参考．
詳しく知りたい人はクリックしてみてください！

# forで使えるもの
## tqdm
https://qiita.com/pontyo4/items/76145cb10e030ad8186a
進捗管理をしたい時に便利．繰り返しが何%終了したかを確認できる

```python
# coding: utf-8
from tqdm import tqdm
import time

for i in tqdm(range(100)):
    time.sleep(1)
#100%|██████████| 100/100 [01:40<00:00,  1.00s/it]
```
# zip
繰り返す要素が複数個ある時に便利．
https://note.nkmk.me/python-zip-usage-for/

```python

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)

# Alice 24
# Bob 50
# Charlie 18
```

# enumerate
要素とインデックス番号を取得できる．

```python
for i, name in enumerate(l):
    print(i, name)
# 0 Alice
# 1 Bob
# 2 Charlie
```



# 最後に
便利なものはこれだけにとどまらないです．これから自分もコードを書いていく中でまた，便利なものを見つけたりしたらまたどんどん追記していく予定です．なにかおすすめなものあったりしたらコメントください！