事業企画1年生のpython学習2日目

# 本記事について
とある事業会社で事業企画をやっています。
元々は、新規営業1年→エンプラ営業3年やっていました。
事業企画への異動に伴って、ルーチンワークの自動化やスクレイピングに興味を持ちpython学習をスタートしました。
目的達成までは記事を執筆予定です。どうぞよろしくお願いいたします。

# 開発環境
jupyterlab

# 使っている本
すっきりわかるpython入門
https://sukkiri.jp/books/sukkiri_python

# 勉強計画
週5日間1h勉強する。
最初の1weekは1冊終わらせることをgoalに。
start@ 2022/2/21

# 学習時間
1.5h

# 学び

## データの集まりの概念
コレクションとコンテナ

### リスト、ディクショナリ、タプル、セットの4つ
* リスト:複数の値を1列に並べて管理するコレクション
先頭から順にインデックスと言われる管理番号(0から始まる)が振られる。

```py
list[1,2,3,4]
dictionary{キー1:値,キー2:値,キー３:値, ...}
tapple(1,2,3,4,)
set {}  # キーは設定しない。
```

```py
members = ['kamon','asakura','sakamoto']
print(members)
['kamon', 'asakura', 'sakamoto']
print(members[0])
# kamon

# リストの活用
scores = [90,90,90]
total = scores[0] +scores[1] + scores[2]
print('合計{}点'.format(total))
# 合計270点

# 便利なsum関数
sum(scores)
# 270

# 平均を求める
# リストの要素数に置き換わるこの場合、３つ。
avg = total/ len(scores)
print('合計{}点、平均{}点'.format(total,avg))
# 合計270点、平均90.0点

# リストに要素を追加する(append)
members.append('kojima')
members.append('oosaka')
members.append('tokyo')
print(members)
# ['kamon', 'asakura', 'sakamoto', 'kojima', 'oosaka', 'tokyo']

# リストから削除したい
members.remove('oosaka')
print(members)
# ['kamon', 'asakura', 'sakamoto', 'kojima', 'tokyo']

# リストも変更可能
members[0] = 'kamon2'
print(members)
# ['kamon2', 'asakura', 'sakamoto', 'kojima', 'tokyo']

# wantで知っておきたいslice関数
a = [10,20,30,40,50]
print(a[1:3])  # 添字が1以上3未満
# [20, 30]
print(a[0:4])
# [10, 20, 30, 40]  # 添字が0以上4未満

# wantで知りたい負の数による指定
print(a[-1])  # 末尾の要素を参照
print(a[-2])  # 末尾から二番目の要素を参照
# 50 
# 40
```

* ディクショナリ
リストは0からはじまる整数をpythonがつける。ディクショナリは開発者が任意の名前をつける。

```py
scores = {'network':60,'database':50,'security':80} 
print(scores)
# {'network': 60, 'database': 50, 'security': 80}

scores['programming'] = 65  # programingを追加
scores['security'] = 55  # 要素変更
print(scores)
# {'network': 60, 'database': 50, 'security': 55, 'programming': 65}

del scores['security']
print(scores)
# {'network': 60, 'database': 50, 'programming': 65}

total = sum(scores.values())  # ディクショナリ内の値を合計した数字を変数に代入
print(total)
# 175
```

* タプル
リストとほぼ同じだが、要素の追加・変更・削除ができない。

```py
score = (70,70,65)  # ()で管理する
print(score)
# (70, 70, 65)
```


* セット
セットは、種類を管理するときに使う。

```py
scores = {30,40,50,60}
scores.add(80);
print(scores)
print('要素は{}'.format(len(scores)))
print('合計は{}'.format(sum(scores)))
# {40, 80, 50, 60, 30}
# 要素は5
# 合計は260
```

# コレクションの応用
 
## コレクションの相互変換

```py
scores = {'network':60,'database':80,'security':60}  # ディクショナリ
members  = ['kamon','asakura','sakamoto']  # リスト
print(tuple(members))  # タプルに変換
print(list(scores))  # リストに変換
print(set(scores.values()))  # スコアの値をリストに変換して表示
# ('kamon2', 'asakura', 'sakamoto', 'kojima', 'tokyo')
# ['network', 'database', 'security']
# {80, 60}
```

## コレクションのネスト

```py
kamon_scores = {'network':60,'database':80,'security':50}
asakura_scores = {'network':60,'database':80,'security':40}
member_scores = {'kamon':kamon_scores,'asakura':asakura_scores}
print(member_scores)
# {'kamon': {'network': 60, 'database': 80, 'security': 50}, 'asakura': {'network': 60, 'database': 80, 'security': 40}}
```
### 二次元リスト　
(同じことがディクショナリ及びセットで活用可能)
リストの中にリストを突っ込む
多重構造も可能で、ネストや入れ子と呼ぶ。
本格的なデータ分析にはネストしたコレクションは必須。

```py
a = [1,2,3]
b = [4,5,6]
c = [a,b]
print(c[0])  # cの0番目つまりaのリストを表示
print(c[-1])  # cの末尾から一番目つまり、bのリスト表示
# [1, 2, 3]
# [4, 5, 6]
```
### セットのみに許された集合演算

```
# 同じ趣味を出してくる演算
members_hobbies = {
    'kamon':{'sns','FB','LINE'},
    'asakura':{'sns','FB','LINE','旅'}
}
​
common_hobbies = members_hobbies['kamon'] & members_hobbies['asakura']
print(common_hobbies)
# {'sns', 'LINE', 'FB'}
```

その他にも差集合・積集合・対象差がある
引用元： https://monozukuri-c.com/python-set-operation/
![e18ecda40e94c57dab646966bbe3f6fa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44581/24fa2441-3475-1a89-3ba3-b010caeb768b.png)
e18ecda40e94c57dab646966bbe3f6fa.png

```py
# 構文は下記・データ分析にはますと！
A = {1,2,3,4}
B = {2,3,4,5}
print (A|B)  # 和集合
print (A &B)  # 積集合
print(A - B)  # 差集合
print(A^B)  # 対象差
# {1, 2, 3, 4, 5}  # どっちかにある
# {2, 3, 4}  # どちらにもある
# {1}  # Aにだけある
# {1, 5}  # どっちかにしかない
```

# 今日ミスったところ

f文字列（f-strings）は文字列リテラルの前にfまたはFを置く（f'xxx', F'xxx'）。文字列中の置換フィールドに変数をそのまま指定できる。

```py
print(f'{a} and {b}')
# 123 and abc

print(F'{a} and {b}')
# 123 and abc
```