機械学習入門 vol.1 Pythonの基礎1 記述とデータ型

本コンテンツは機械学習入門講座を各所でやっている内容の一部を、受講者の皆様の予習・復習のために公開しているものです。対象読者は、Pythonをやったことがほとんどない方やつまづいてしまっている方でも概ね実行できるようになるレベルで書いています。解説は講座でそれなりに詳しくしているため、コードにコメントする以上の説明はあまり記述していません。

各コードはJupyterシリーズやiPythonで記述しながら実行できるように記述しています。

AI/DX/機械学習/Pythonのアドバイザリー、社内研修、セミナー等承っております。
webサイトからお問い合わせください。
[BeeComb Grid株式会社](https://beecomb-grid.co.jp/)

# 機械学習入門シリーズ記事

1. 機械学習入門 vol.1 Pythonの基礎１ 記述とデータ型 -> 講座第3回に相当
1. [機械学習入門 vol.2 Pythonの基礎2 条件分岐と処理](https://qiita.com/mychaelstyle/items/891dcad83e94f8edd3aa) -> 講座第3回に相当
1. [機械学習入門 vol.3 Pythonの基礎3 関数・クラス・モジュール](https://qiita.com/mychaelstyle/items/d5506f372219b162c8c8) -> 講座第3回に相当
1. [機械学習入門 vol.4 表（Pandas）の基本操作](https://qiita.com/mychaelstyle/items/96ea9e8c679f908205ab) -> 講座第3回/第4回に相当
1. [機械学習入門 vol.5 グラフ(Seaborn)の基本操作](https://qiita.com/mychaelstyle/items/5acf7fdb1f11ba5478d1) -> 講座第3/4回に相当
1. [機械学習入門 vol.6 回帰 - 線形回帰](https://qiita.com/mychaelstyle/items/a12882a75d348952b1b9) -> 講座第4回に相当
1. [機械学習入門 vol.7 回帰 - ランダムフォレストとパラメータチューニング](https://qiita.com/mychaelstyle/items/48238d70c7602ca14a0c) -> 講座第4回に相当
1. [機械学習入門 vol.8 回帰 - その他の回帰 (k近傍法,ラッソ回帰,リッジ回帰..etc)](https://qiita.com/mychaelstyle/items/fc51cf384b517fb405f8) -> 講座第4回に相当
1. [機械学習入門 vol.9 判別（分類）](https://qiita.com/mychaelstyle/items/34ca447a625c752dbfda) -> 講座第5回に相当
1. [機械学習入門 vol.10 次元削減](https://qiita.com/mychaelstyle/items/69aab0c098dfa1e19e7d) -> 講座第6回に相当
1. [機械学習入門 vol.11 クラスタリング](https://qiita.com/mychaelstyle/items/89d04ce33c3e05d9545c) -> 講座第6回に相当

# 機械学習入門 vol.1 Pythonの基礎 記述とデータ型

本講では、Pythonを使ってデータを読み込み、最低限の分析や機械学習に必要なPython知識だけを説明していきます。

# Pythonの基本文法 - コメント

```Python
# コメントは#から始めて行末まで。コメントはプログラム内にメモを書くためでプログラムとして実行されない
```

# 変数

Pythonの変数に型宣言はなく、変数名には半角英数字と_（アンダースコア）を利用することができます。変数の1文字目は数字で始めることはできませんが、それ以外は好きな並び順で定義することができます。

```Python
value_1 = 10
value2 = 5
_val = 3
```

# 配列とタプルと繰り返し処理

配列とは、変数の中に複数の値を順序通り保持することができる仕組みです。
Pythonには配列とタプルという似たような機能を持つデータ型があり、どちらも繰り返し処理が可能なイテラブルオブジェクトとして実装されています。

```Python
# 配列の定義 - 大カッコで囲んで、複数の値をカンマ区切りで記述します。個々の値を「要素」と言います。
array = [1,2,3,4,5]
# １番目の要素を表示するには大カッコで囲んだ順序の添字を指定します。順序は０から始まります。
print( array[0] )
```

タプルは同様に順序通り値を保持するデータ型ですが、最初に定義して、後から要素の値を変更することができません。関数型プログラミングの思想のもとに途中で変更しないという使い方で利用しますが、初心者の方は、他の人が書いたプログラミング読めるように、そういう形式の配列があるんだ程度に覚えておけば問題ありません。

```Python
# タプルはカッコで囲んで定義します
tpl = (1,1,2,3,5,8,13)
# 要素の表示の仕方は配列と同じ大カッコに順序の添字を指定します。
print( tpl[1] ) # 2番目の要素を表示
```

配列もタプルもfor文で繰り返し処理を行うことができます。Pythonのfor文は他のプログラミング言語と違って、イテラブルオブジェクトに対してのみ行うことができる点は注意が必要です。

```Python
# 配列を繰り返し処理
for value in array : # for文は 要素 in イテラブルオブジェクトでコロンを記述します
    print("要素の値:")     # 繰り返し処理を行う部分を全て段下げ（インデントします）
    print(value)          # 繰り返す処理は複数行書くことができます。同じインデントの塊をブロックと言います。
print( "end" )            # 段下げを止めると繰り返し処理の中ではないと判断されます。

# タプルを繰り返し処理する記述も全く同様です
for value in tpl :
    print("要素の値:")
    print(value)
```

Pythonはデータや数値を扱うことが多いため、配列、タプルの他にもシリーズなどイテラブルオブジェクトとして用意されているデータ型がたくさん存在します。

## 配列の要素の操作

```Python
# 配列の操作 - 要素の値の変更
array[0] = 0
print(array)
# 要素を最後に追加
array.append(34)
print(array)
# 要素を指定番目に追加
array.insert(1,55)
print(array)
# 指定要素を取り出して削除
v = array.pop(0)
print(array)
print(v)
```

## 配列全体の操作

```python
# 並べ替え
array.sort()
print(array)
# 順序反転
array.reverse()
print(array)
# 配列を結合
array = array + [89, 144, 233]
print(array)
# 配列を部分取り出し（スライスと言います）
ns = array[2:5]
print(ns)
```

# 文字列

```python
# 文字列リテラルの記述
words = "これが文字列です"
words = 'これが文字列です'
print(words)

# ３連引用符
words = """これは改行を入れることができる
３連引用符です。
最後をまた３連のクォーテーションで閉じます"""
print(words)
```

```python
# 文字列の連結
name = "中島"
words = "こんにちは、" + name + "さん、私は" + "Pythonです"
print(words)
# 文字列の繰り返し結合
words = "こんにちは\n" * 5
print(words)
```

# 辞書（Dict）
Pythonの辞書は他のプログラミング言語でいうところのマップ型データ型です。キーと値をセットで保持するデータ集合です。キー（添字):(コロン)値のペアをカンマ区切りで複数記述していきます。値には辞書や配列などオブジェクトを入れることができるため、データの塊を保持するために非常によく使われます。

```python
# dictの宣言
dct = {"A":"中島", "B":"田中", "C":"杉山"}
print(mydict["A"])    # 添字（キー）を指定して取り出し
val = mydict.get("A","未定義") # getを使った取り出し
print(val)
mydict.pop("C") # 指定のキーの要素を削除
print(mydict)
keys = mydict.keys() # 全ての添字のみの取得
print(keys)
values   = mydict.values() # 全ての値のみの取得
print(values)
pairs    = mydict.items() # 添字と値を組み合わせて取り出し
print(pairs)
```

# 集合（Set)
Pythonの集合（Set)は他のプログラミング言語のセット型同様に順番を保証しないデータの集まりで複数の値を持つことができます。

```python
# setはdictと同じく中括弧で定義します。
myset = {"A", "B", "C"}
print(myset)
# 空の集合を宣言するときは{}だとdictになってしまうためset関数を使います
myset = set()
print(myset)
```
# 機械学習入門シリーズ記事

1. 機械学習入門 vol.1 Pythonの基礎１ 記述とデータ型 -> 講座第2回に相当
1. [機械学習入門 vol.2 Pythonの基礎2 条件分岐と処理](https://qiita.com/mychaelstyle/items/891dcad83e94f8edd3aa) -> 講座第2回に相当
1. [機械学習入門 vol.3 Pythonの基礎3 関数・クラス・モジュール](https://qiita.com/mychaelstyle/items/d5506f372219b162c8c8) -> 講座第3回に相当
1. [機械学習入門 vol.4 表（Pandas）の基本操作](https://qiita.com/mychaelstyle/items/96ea9e8c679f908205ab) -> 講座第3回/第4回に相当
1. [機械学習入門 vol.5 グラフ(Seaborn)の基本操作](https://qiita.com/mychaelstyle/items/5acf7fdb1f11ba5478d1) -> 講座第3/4回に相当
1. [機械学習入門 vol.6 回帰 - 線形回帰](https://qiita.com/mychaelstyle/items/a12882a75d348952b1b9) -> 講座第4回に相当
1. [機械学習入門 vol.7 回帰 - ランダムフォレストとパラメータチューニング](https://qiita.com/mychaelstyle/items/48238d70c7602ca14a0c) -> 講座第4回に相当
1. [機械学習入門 vol.8 回帰 - その他の回帰 (k近傍法,ラッソ回帰,リッジ回帰..etc)](https://qiita.com/mychaelstyle/items/fc51cf384b517fb405f8) -> 講座第4回に相当
1. [機械学習入門 vol.9 判別（分類）](https://qiita.com/mychaelstyle/items/34ca447a625c752dbfda) -> 講座第5回に相当
1. [機械学習入門 vol.10 次元削減](https://qiita.com/mychaelstyle/items/69aab0c098dfa1e19e7d) -> 講座第6回に相当
1. [機械学習入門 vol.11 クラスタリング](https://qiita.com/mychaelstyle/items/89d04ce33c3e05d9545c) -> 講座第6回に相当

AI/DX/機械学習/Pythonのアドバイザリー、社内研修、セミナー等承っております。
webサイトからお問い合わせください。
[BeeComb Grid株式会社](https://beecomb-grid.co.jp/)