python cheatsheet

# 1. 標準ライブラリ
[Python 標準ライブラリ](https://docs.python.org/ja/3/library/index.html)

### 1.1. 値
|データ型  | 例|説明|
|---|---|---|
|int   |120|整数|
|float |3.1415|浮動小数点数|
|str   |"test"|	文字列  |
|bool  |True,False|真偽値 |

### 1.2. データタイプ
|データ操作  | 例|説明|
|---|---|---|
|list    |["test1","test2"]|要素を変更・追加・削除ができる  |
|tuple   |("test1","test2")|要素を変更・追加・削除することはできない  |
|dict    |{"one":1,"two":2}|キーとなる値（key）とバリューとなる値（value）をセットで１つの要素として持つことができる  |
|function|lambda x:2*x  |名前を持たない無名関数を作成|

### 1.3. 四則演算
|演算子  | 例|説明|
|---|---|---|
|+ |a + b|足し算|
|- |a - b|引き算|
|* |a * b|掛け算|
|/ |a / b|割り算|
|// |a // b|整数割り算|
|% |a % b|割り算あまり|
|** |a ** b|べき乗|

### 1.4. 比較演算子
|演算子  | 例|説明|
|---|---|---|
|== |a == b|aとbが等しいとき True|
|!= |a != b|aとbが等しくないとき True|
|>  |a >  b|aがbより大きいとき True|
|>= |a >= b|aがb以上のとき True|
|<  |a <  b|aがbより小さいとき True|
|<= |a <= b|aがb以下のとき True|

### 1.5. 論理演算子
|演算子  | 例|説明|
|---|---|---|
|and |a and b|aかつbの両方がTrueのとき True|
|or  |a or  b|aまたはbのどちらかがTrueのとき True|
|not |a not b|aがFalseのとき True|

### 1.6. 複合代入演算子
|演算子  | 例|説明|
|---|---|---|
|+= |a += b|a = a + bと同じ|
|-= |a -= b|a = a - bと同じ|
|*= |a *= b|a = a * bと同じ|
|/= |a /= b|a = a / bと同じ|
|//= |a //= b|a = a // bと同じ|
|%= |a %= b|a = a % bと同じ|
|** |a ** b|a = a ** bと同じ|

### 1.6. 条件分岐、繰り返し、例外処理
[Pythonのfor文によるループ処理（range, enumerate, zipなど）](https://note.nkmk.me/python-for-usage/)
[Pythonの例外処理（try, except, else, finally）](https://note.nkmk.me/python-try-except-else-finally/)
[Pythonで多重ループ（ネストしたforループ）からbreak](https://note.nkmk.me/python-break-nested-loops/)
```if.py
# 条件分岐(if,elif,else)
if 条件式1:
    `条件式1がTrueのときに行う処理`
elif 条件式2:
    `条件式1がFalseで条件式2がTrueのときに行う処理`
elif 条件式3:
    `条件式1, 2がFalseで条件式3がTrueのときに行う処理`
...
else:
    `すべての条件式がFalseのときに行う処理`

# 繰り返し(for,while)
mylist = ["Orange", "Peach", "Lemon", "Apple"]
for val in mylist:
    print("value:" + val)

while 条件1:
    ...
# 繰り返し + 条件分岐(break,continue)

# 条件によってfor文を途中で終了(break)
l = ['Alice', 'Bob', 'Charlie']
for name in l:
    if name == 'Bob':
        print('!!BREAK!!')
        break
    print(name)
# Alice
# !!BREAK!!
# 特定の要素の処理をスキップ(continue)
l = ['Alice', 'Bob', 'Charlie']

for name in l:
    if name == 'Bob':
        print('!!SKIP!!')
        continue
    print(name)
# Alice
# !!SKIP!!
# Charlie

#0から5まで1stepずづ
for i in range(6):
    print(i)
print('\n')

#1から5まで1stepずづ
for i in range(1,6):
    print(i)
print('\n')

#1から5まで2 stepずづ
for i in range(1,6,2):
    print(i)
print('\n')

#　例外処理
try:
    print(1 / 0)
except ZeroDivisionError:
    print('Error')
# Error
```
## 1.7 list
 
```list.py

# listに要素を追加する
list=[]
list.append("XX")

# すべての要素を削除 
list.clear()

# インデックス・スライスで位置・範囲を指定して削除する

#リストの作成
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

#リストのサイズ(要素数)を取得
print(len(l))
# 10

#リストを逆順にする
l.reverse()
print(l)
# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

print(origin)
# [3, 5, 2, 4, 1]

del l[0] # 最初を削除
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[-1]
print(l) # 末尾を削除
# [1, 2, 3, 4, 5, 6, 7, 8]

l = [3, 1, 4, 5, 2]

# 昇順に並べる
l.sort()
print(l)
# [1, 2, 3, 4, 5]

# 降順に並べる
l.sort(reverse=True)
print(l)
# [5, 4, 3, 2, 1]

```

### 1.8 文字列操作

``` replace.py
# 置換
my_str = "あいうえお"
my_str = my_str.replace("うえ", "した")
print(my_str)
```

### 1.9 デバック
```type()```を使用すると、オブジェクトの型を判定できる
```type.py
print(type('string'))
# <class 'str'>

print(type(100))
# <class 'int'>

print(type([0, 1, 2]))
# <class 'list'>
```

デバック時に使用するコマンド、```sys```のライブラリをimportする。
```debug.py
import sys

#実行しているファイルが置いてあるpath
print(sys._getframe().f_code.co_filename)
#関数名
print(sys._getframe().f_code.co_name)
#実行している関数の先頭行
print(sys._getframe().f_code.co_firstlineno) 
#コンパイルされたバイトコードそのままの文字列
print(sys._getframe().f_code.co_code)
#置いた場所の行数
print(sys._getframe().f_lineno)
```

# 2. pandasライブラリ

## 2.1 コマンド

```pandas.py
# import 
import pandas as pd

#import column側のヘッダーに名前を付ける。
df = pd.read_csv('xx.csv', names=['T','P','H','date','T1','P1','H1'])

#import データをinsertする。
df.insert(0, 'item', 'base')
df.insert(1, 'item1', 'comp')

#import 3行までのデータを出力、ファイルの確認
print(df[:3])
#指定したnameの出力
print(df['T'][0:3])

#指定したカラムの情報を取り出す。
df.to_csv('output/stack.csv', columns=['item','T'])
# データを追記する。
df.to_csv('output/stack.csv', mode='a', header=False, columns=['item1','T1'])
#print(df['T1'])

# int型のdfをstrに変換
df.['T1'].astype(str)

#データフレームのデータ型やメモリ使用量など
df.info()

# 行数を取得
len(df)

# 列数を取得
len(df.columns)

# 行数、列数を取得
df.shape
# 行数を取得
df.shape[0]
# 列数を取得
df.shape[1]



# indexをlist表示
print(df.index.to_numpy())
# columnをlist表示
print(df.columns.to_numpy())  

# シリーズからリストへの変換 tolist()
s = pd.Series([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
s_to_list = s.tolist()

# 任意の要素を取得し、listに追加
list =[]
for i in range(len(df)):
    get_list = df.iloc[i]['xx']
    list.append(get_list .tolist())

# グループごとの統計情報を使ってすべての行を集計する
def transformation_sample(s):
    return (s / s.sum() * 100).astype(str) + '%'

df.groupby(['city']).transform(transformation_sample)

```
### 2.1.2 dfの結合tiと分割
```test.py
# keyを指定して結合
merged_df = df1.merge(df2, on='key')
# 複数のkeyでの結合
merged_df = df1.merge(df2, on=['key1', 'key2'])
# 条件を指定して分割
df1 = df[df['column1'] = 10]

```
### 2.1.1 リンク
[Pandas の groupby の使い方](https://qiita.com/propella/items/a9a32b878c77222630ae)
[Pandas の transform と apply の基本的な違い](https://qiita.com/greenteabiscuit/items/132e0f9b1479926e07e0)


# 3. matplotlibライブラリ

## 3.1 コマンド
```matplotlib.py
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
import pandas as pd

# 表の作榮
data = {
    'Name': ["test", "test1"],
    'Name': ["test", "test1"],    
}

df = pd.DataFrame(data)

fig, ax = plt.subplots(figsize=(3, 3))

# 横軸の非表示
ax.axis('off')
ax.axis('tight')

tb = ax.table(cellText=df.values,
              colLabels=df.columns,
              bbox=[0, 0, 1, 1],
              )

# テーブルの背景削除
tb[0, 1].set_facecolor('#ff0000')
tb[0, 2].set_facecolor('#ffff00')

# イメージの表示
plt.show()

```

## 3.2. 日本語対応
1. パッケージのインストール
```
pip install japanize_matplotlib
```
2. プログラムに"import japanize_matplotlib" を追加すると、日本語対応する。

### 3.1.1 リンク
[matplotlibのめっちゃまとめ](https://qiita.com/nkay/items/d1eb91e33b9d6469ef51)
[文字列の表に色付するにはどうすれば良い？](https://qiita.com/erikakondoyamazawa/questions/9b0489354c72cf22a133#answer-11d3a9b2be2c771d8add)

# 4. tkinter

### 4.x. ウィジェット変数
|変数の種類|説明|
|---|---|
|StringVar |文字列を扱う|
|IntVar |整数を扱う|
|DoubleVar |浮動小数点数を扱う|
|BooleanVar |真偽値（True / False）を扱う|

```
# ウィジェット変数を作成
str_var = tkinter.StringVar()

# ラベルウインドウにウィジェット変数を入れる
label = tkinter.Label(frame,textvariable=str_vstr_var)
label.pack()

# 5. osライブラリ

## 5.1 コマンド

```os.py
import os
# 特定のディレクトリのファイルの一覧を取得する
input_path  =  r"input"
files = os.listdir(input_path)
file_list = [f for f in files if os.path.isfile(os.path.join(input_path, f))]

# ファイル名、拡張子情報を取得する。
# os.path.splitext(img_file)[0] => 拡張子前の情報
# os.path.splitext(img_file)[1] => 拡張子
for imgfile in file_list:
    if ".jpeg" == os.path.splitext(img_file)[1]:
        print(os.path.splitext(imgfile)[0])

```
# 6. Imageライブラリ

## 6.1 コマンド

```Image.py
from PIL import Image
# jpgからpngへのコンバート
img = Image.open(img_file).convert("RGB")
```
## 6.2 リンク
Will update the link someday.

# x.その他

## pip

```x.sh
# パッケージのインストール
pip install <package-name>
# パッケージのバージョン指定インストール
pip install <package-name>==<version>
# パッケージリストの全表示
pip list 
# 依存性チェック
pip check
# パッケージのアップデート
pip install -U <package-name>
# パッケージのバージョン確認
pip show <package-name>
```
# 7. groupby

## 7.1 コマンド
|command|説明|
|---|---|
|SeriesGroupBy.apply(func, *args, **kwargs)|Apply function func group-wise and combine the results together.|
|SeriesGroupBy.transform(func, *args[, ...])|Call function producing a same-indexed Series on each group.|
|DataFrameGroupBy.count()|Compute count of group, excluding missing values.|
|DataFrameGroupBy.describe([percentiles, ...])|Generate descriptive statistics.|
|DataFrameGroupBy.max([numeric_only, ...])|Compute max of group values.|
|DataFrameGroupBy.mean([numeric_only, ...])|Compute mean of groups, excluding missing values.|
|DataFrameGroupBy.median([numeric_only])|Compute median of groups, excluding missing values.|
|DataFrameGroupBy.sum([numeric_only, ...])|Compute sum of group values.|

[groupby](https://pandas.pydata.org/docs/reference/groupby.html)

### x.1.1 リンク
[Pandas の groupby の使い方](https://qiita.com/propella/items/a9a32b878c77222630ae)
[pandas.DataFrameに列や行を追加](https://note.nkmk.me/python-pandas-assign-append/)
[cheet sheet](https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf)
[subprocess](https://docs.python.org/ja/3.13/library/subprocess.html)