【データサイエンティスト入門】Pythonの基礎♬

今日から、[「東京大学のデータサイエンティスト育成講座」](https://www.amazon.co.jp/%E6%9D%B1%E4%BA%AC%E5%A4%A7%E5%AD%A6%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%83%86%E3%82%A3%E3%82%B9%E3%83%88%E8%82%B2%E6%88%90%E8%AC%9B%E5%BA%A7-Python%E3%81%A7%E6%89%8B%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E5%AD%A6%E3%81%B6%E3%83%87%E2%80%95%E3%82%BF%E5%88%86%E6%9E%90-%E5%A1%9A%E6%9C%AC%E9%82%A6%E5%B0%8A/dp/4839965250/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=)を読んで、ちょっと疑問を持ったところや有用だと感じた部分をまとめて行こうと思う。
したがって、あらすじはまんまになると思うが内容は本書とは関係ないと思って読んでいただきたい。
また、環境は問題が発生するまで、Python3.6で実施する。
Python 3.6.10 |Anaconda, Inc.| (default, Jan  7 2020, 15:18:16) [MSC v.1916 64 bit (AMD64)] on win32
###Chapter1-1 データサイエンティストの仕事
図1-1-1は、．．．会計士というのが入っているけど、何だろう？？
ドメイン知識とかでいいような気がした。
###Chapter1-2 Pythonの基礎
Jupyter Notebookの使い方から、入るけど割愛します。
####1-2-2 Pythonの基礎
#####1-2-2-1　変数
以下のコードは、

```py
msg = 'test'
print(msg)
print(msg[0])
print(msg[1])
print(msg[5])
```
結果

```
test
t
e
Traceback (most recent call last):
  File "msg-ex.py", line 5, in <module>
    print(msg[5])
IndexError: string index out of range
```
errorが出たらググれとあるので、ググってみます。
そのものずばりの回答もありますが、今回はよく使うStackOverflowのサイトのものを貼っておきます。
この程度のエラーでも、躓くことはありそうです。
[IndexError: string index out of range in Python [closed]](https://stackoverflow.com/questions/41597415/indexerror-string-index-out-of-range-in-python)
回答は以下のとおり

```
As other people have indicated, s[s.Length] isn't actually a valid index; indices are in the closed interval [0, length - 1] (i.e. the last valid index is length - 1 and the first index is 0). Note that this isn't true for every language (there are languages where the first index is 1), but it's certainly true for Python.
```
Google翻訳してみると以下のとおりです。

```
他の人が示したように、s [s.Length]は実際には有効なインデックスではありません。インデックスは閉じた間隔[0、length-1]にあります（つまり、最後の有効なインデックスはlength-1で、最初のインデックスは0です）。これはすべての言語に当てはまるわけではないことに注意してください（最初のインデックスが1である言語があります）が、Pythonには確かに当てはまります。
```
#####1-2-2-2　演算
```py
data=1
print(data)
data = data+10
print(data)
```
結果

```
1
11
```
ここで大切なお話は、「変数名は大事」というメッセージが大切
以下で確認しておくといいと思います。
[Python命名規則一覧](https://qiita.com/naomi7325/items/4eb1d2a40277361e898b)
**コーディング規約は、一度読んでおくといいと思います。**
pythonの標準的なコーディング規約（参考URLの[B-4];p413）
[PEP: 8 Python の標準ライブラリに含まれているPythonコードのコーディング規約](https://pep8-ja.readthedocs.io/ja/latest/)
[PEP 命名規約](https://pep8-ja.readthedocs.io/ja/latest/#id24)
#####1-2-2-3　予約語
予約語と組み込み関数名は、変数名として使えない。
[Python3.7予約語またはkeyword一覧と組み込み関数取得・確認方法](https://wpchiraura.xyz/python3-7-reserved-words-keyword-list-and-built-in-function-acquisition-confirmation-method/)
####1-2-3　リストと辞書型
#####<class 'list'>
```py
data_list = [1,2,3,4,5,6,7,8,9]
print(data_list)
print(type(data_list))
print(data_list[1])
print(len(data_list))
```
結果

```
[1, 2, 3, 4, 5, 6, 7, 8, 9]
<class 'list'>
2
9
```
listは、以下のような変更ができる。

```py
data_list = [1,2,3,4,5,6,7,8,9]
print(data_list*2)
data_list.append(4)
print(data_list)
data_list.remove(5)
print(data_list)
print(data_list.pop(6))
print(data_list)
del data_list[3:6]
print(data_list)
```
結果

```
[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 4]
[1, 2, 3, 4, 6, 7, 8, 9, 4]
8
[1, 2, 3, 4, 6, 7, 9, 4]
[1, 2, 3, 9, 4]
```
【参考】
[Pythonでリスト（配列）の要素を削除するclear, pop, remove, del](https://note.nkmk.me/python-list-clear-pop-remove-del/)
#####<class 'tuple'>
tupleは、listに似ているが変更できない。

```py
data_tuple = (1,2,3,4,5,6,7,8,9)
print(data_tuple)
print(type(data_tuple))
print(data_tuple[1])
print(len(data_tuple))
```
結果

```
(1, 2, 3, 4, 5, 6, 7, 8, 9)
<class 'tuple'>
2
9
```
#####<class 'set'>
setは**集合**であり、要素の重複を許さない

```py
data_set = {1,2,3,4,5,6,7,8,9}
print(data_set)
print(type(data_set))
#print(data_set[1])
print(len(data_set))
```
結果
コメントアウトの行
TypeError: 'set' object does not support indexing
setはインデックスをサポートしていない

```
{1, 2, 3, 4, 5, 6, 7, 8, 9}
<class 'set'>
9
```
#####class 'list' 'tuple''set'の使い方
listは、自由度高く、要素を追加削除できる。
tupleは、自由度無く、変更できない
setは、重複しない要素（同じ値ではない要素、ユニークな要素）のコレクションで、和集合、積集合、差集合などの集合演算を行うことができる。
要素の重複を許さないので、以下のような変更でユニークな要素に出来る。
組み合わせると、以下のようなことが出来る。

```py
data_list = [1,2,3,4,5,6,7,2,3,4,8,9]
print(data_list)
data_tuple = tuple(data_list)
print(data_tuple)
data_set = set(data_list)
print(data_set)
data_list_new = list(data_set)
print(data_list_new)
data_tuple_new = tuple(data_set)
print(data_tuple_new)
data_set.discard(6)
print(data_set)
data_set.add(11)
print(data_set)
```
結果

```
[1, 2, 3, 4, 5, 6, 7, 2, 3, 4, 8, 9]
(1, 2, 3, 4, 5, 6, 7, 2, 3, 4, 8, 9)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
[1, 2, 3, 4, 5, 6, 7, 8, 9]
(1, 2, 3, 4, 5, 6, 7, 8, 9)
{1, 2, 3, 4, 5, 7, 8, 9}
{1, 2, 3, 4, 5, 7, 8, 9, 11}
```
【参考】
[Pythonのsetを知る](https://qiita.com/yossyyossy/items/ddc285ad90c305e21eda)
[Python, set型で集合演算（和集合、積集合や部分集合の判定など）](https://note.nkmk.me/python-set/)
#####辞書型
```py
dict_data = {'apple':100,'banana':100,'orange':300,'mango':400,'melon':500}
print(dict_data['apple'])
print(dict_data['apple']+dict_data['orange'])
```
結果

```
100
400
```
#####辞書型追加
```py
dict_data['りんご'] = 100
print(dict_data)
```
結果

```
{'apple': 100, 'banana': 100, 'orange': 300, 'mango': 400, 'melon': 500, 'りんご': 100}
```
#####辞書型削除
```py
removed_value = dict_data.pop('banana')
print(removed_value)
print(dict_data)
```
結果

```
100
{'apple': 100, 'orange': 300, 'mango': 400, 'melon': 500, 'りんご': 100}
```
もう一つの削除

```py
del dict_data['mango']
print(dict_data)
```
結果

```
{'apple': 100, 'orange': 300, 'melon': 500, 'りんご': 100}
```
#####辞書同士を連結（結合）、複数の要素を追加・更新: update()
######連結（結合）

```py
d1 = {'apple': 100, 'banana': 100}
d2 = {'orange': 300, 'mango': 400}
d3 = {'melon': 500, 'りんご': 100}
d1.update(d2)
print(d1)
d1.update(**d2, **d3)
print(d1)
```
結果

```
{'apple': 100, 'banana': 100, 'orange': 300, 'mango': 400}
{'apple': 100, 'banana': 100, 'orange': 300, 'mango': 400, 'melon': 500, 'りんご': 100}
```
######複数の要素を追加・更新
```py
d={'apple': 100, 'banana': 100}
print(d)
d.update([('orange', 300), ('mango', 400), ('melon', 500), ('りんご', 100)])
print(d)
```
結果

```
{'apple': 100, 'banana': 100}
{'apple': 100, 'banana': 100, 'orange': 300, 'mango': 400, 'melon': 500, 'りんご': 100}
```
【参考】
[Pythonで辞書に要素を追加、辞書同士を連結（結合）](https://note.nkmk.me/python-dict-add-update/)
###まとめ
・変数
・演算
・予約語と組み込み関数
・リストと集合、そして辞書型
を見た

基本に立ち返って、並べてみると分かり易い。