ゼロから始める機械学習 #1

# 最終目的

プログラミングを全くやったことがないという状態から，機械学習を行えるようになるまで，順に勉強する．

投稿目標 リチウムイオン電池の充電率予測

https://www.nishika.com/competitions/16/summary


# 開発環境の準備
分かる人は，好きなように
分からない人は，下記リンクのように
作りたくない人は，作ってもらった環境で

https://qiita.com/t-baba-11/items/1aa80df8df27e30dac4e

https://qiita.com/t-baba-11/items/9d74710ce960b582dcd2


# 第一回 目標と流れ

- 目標 : Pythonを使って，CSVファイルをデータフレーム形式で読み込み，出力するプログラムを書く
- 流れ : 
    - サーバー環境をもらって最初にやること
    - 機械学習とは
    - 使用するアプリや言語の説明
    - Jupyter Notebookの起動
    - ipynbファイルの作成
    - プログラムを書くときに注意すること
    - Pythonライブラリのインポート
    - ファイルの読み込みと出力

# サーバー環境をもらって最初にやること
### 秘密鍵，公開鍵の作成

秘密鍵，公開鍵を作成し，サーバーにアクセスできるようにする(リンク先参照)

https://qiita.com/t-baba-11/items/2af338e63ac24570093e

### パスワードの変更

初期パスワードを変更する.
ターミナルでログインして，初期パスワードを入力し，
新しいパスワードを二度入力する．

```
$ passwd 
Current password:
新しいパスワード:
新しいパスワードを再入力してください:
```

### Jupyter notebookの設定ファイルを記述

jupyter notebookはデフォルトでは，localからしか接続できないので，
設定ファイルを作成し情報を追記．
※0.0.0.0はすべてアクセスを許可する設定のため，セキュリティには，注意が必要．使用していないときは，Jupyter notebookをシャットダウンするなど

```
$ jupyter notebook --generate-config
$ sed -i "$ a c.NotebookApp.ip = '0.0.0.0'" .jupyter/jupyter_notebook_config.py
```

Ctrl + Cでシャットダウンできる．


# 機械学習とは

[![thumbnail](https://image.slidesharecdn.com/machinelearning-210616232850/95/machine-learning-1-638.jpg?cb=1623886145)](https://www.slideshare.net/TakahiroBaba3/machine-learning-249384884)



# 使用するアプリや言語の説明
今回使用するのは
- Python3
    - pandas
- Jupyter Notebook

### Python3

インタプリタ型のプログラミング言語のひとつ．
※Python3とPython2は互換性がない．
インデントが構文規則として使用されており，書きやすく読みやすいという特徴がある．
使われる分野が広く機械学習でも使用される．

プログラミング言語 : コンピュータ言語の内コンピュータプログラムを記述するための言語．
インタプリタ型 : プログラムを実行する手段の一つ．ソースコードを1行ずつ読みこみ実行命令として，動作する．

#### pandas

Pythonライブラリの一つ．
データ解析を支援する機能を提供する．
データフレームという，データ操作のための高速で効率的な独自のデータ構造を備えており，
機械学習の前処理を効率的に行うことが可能．

### Jupyter Notebook

Jupyter Notebookドキュメントを作成・共有するためのWebアプリケーション．
IPythonのREPLを提供している．
Jupyter Notebookドキュメントはプログラムコード、Markdownテキスト、数式、図式等を含むことができ，
下記のことがブラウザ上で可能．

- 数値計算アルゴリズムとシミュレーション結果の表示
- 統計解析コードとその実行結果グラフの表示
- 機械学習モデルと推論出力
- プログラムとその結果を再実行可能
	

IPython : Pythonを対話的に実行するためのシェル．
REPL : 入力・評価・出力のループ．ユーザーとインタプリタが対話的にコード片を実行できる．


# Jupyter Notebookの起動

SSHクライアントからターミナルを使い，Jupyter Notebookを起動.
(SSHクライアントが分からない場合は，Windowsのコマンドプロントから使用可能)

```
$ jupyter notebook
```

起動後に表示されるリンクをブラウザで起動し，
アップロードから学習用のデータを設置する．
ターミナルに戻り，データを解凍する．

```
$ unzip data.zip
$ cd data
$ unzip train.zip
```

#ipynbファイルの作成

Pythonプログラムを書くために
まずは，ブラウザを開き，
新規作成ボタンから，Python3を選択する．
ipynbファイルが作成される．

![img10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/fc04ec13-8d9b-0ac0-d6d0-2378e2ec5ef9.png)
#Pythonライブラリのインポート


今回使用するpandasライブラリをインポート
※ライブラリのインポートは，基本的にコードの最初に行う必要がある．理由はPythonはインタプリタ型であり，インポートとした行より下の行でしか反映されないため．

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

![img11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/6e168046-5267-7162-6f55-a19fb9833da9.png)

#CSVファイルの読み込みと出力

```.py
filename = "data/train/n10degC_Cycle_1_Pan18650PF.csv"
raw_dataset = pd.read_csv(filename)
df = raw_dataset.copy()
print(df)
```

1行目でCSVファイルパスを指定．
2行目でそのファイルをpandasのデータフレーム形式で呼び出す．この時，引数にファイルパス以外指定していないので，自動的にCSVファイルの1行目がカラム名として使用される．
3行目は呼び出したデータをコピーしている．
※ pandasのデータフレームは参照渡しを行うため，下記のようには書くときは注意が必要．複製を作る場合はcopy()を使用しなければならない．copy()を使わない場合，dfの中身を変更した時に，参照元であるraw_datasetの中身も変更される．

```.py
df = raw_dataset #この記述はダメ
```

4行目は，呼び出したデータフレームの内容を出力している．


![img12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/435a594a-d756-8c07-6808-bbe9f0fed463.png)