【気軽に実現！】FileMakerでIoT｜取得したデータを機械学習に利用する方法


# この記事でわかること
- 最強ローコード開発ツール「FileMaker」を使用したIoT・AIシステムの実現方法
- CoreMLの使用方法
- Pythonを利用した機械学習方法

# 対象
- FileMakerを使用していて、Pythonも少しかじった。これから２つを融合して世界を変える方法を探究している人
- FileMakerのCoreML利用に興味がある人

# 今回実装すること
- 取得したデータからモデルを作成し、FileMakerで利用します。
    - IoT機器からのデータ取得については[こちら](https://qiita.com/tsumugiya/items/de1cf0493213ad931a49)をご参考ください。
    - 機械学習モデルの作成にはGoogle Colaboratoryを使用します。
    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/5104a98d-0ac4-f367-0ba2-afa0772cf765.png)


# 環境
- OS:Mac(IoTデータから機械学習モデルの作成まではWindowsでも可能です。DataAPIを使用すると、Pythonから予測を行い、FileMakerに書き込むことができます。)
- FileMakerバージョン:19

# 実装の流れ
1. IoTでデータ収集
1. 機械学習モデル作成
1. Core　MLに変換
1. FileMakerでCoreMLモデルを使用

# 実装
## 1.IoTでデータ収集
[【ローコードIoT】FileMakerで実現！快適快速IoTシステム！](https://qiita.com/tsumugiya/items/de1cf0493213ad931a49)の記事で解説しました。
お手数ですがこちらを参照してご開発お願いします。

## 2.機械学習モデル作成
Google Colaboratoryを使用して機械学習モデルを作成します。
### Google Colaboratoryを開いてください。
https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja&authuser=1

↑こちらにアクセスしてください
### 「ファイル」⇨「ノートブックを開く」とクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/778250f1-26bd-17f7-8410-32e4832a84c8.png)

### 「GitHub」タブをクリックし「https://github.com/jackasser/FileMaker-coreML/blob/main/lenier_regression.ipynb 」を入力し、虫眼鏡マークをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/b61329f4-d652-89cd-c77a-10fac4e5937e.png)


### 「ドライブにコピー」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/d4ca9f2b-1a17-94ae-8057-6efd6dae343f.png)

### Google Colaboratoryについて
https://qiita.com/beehibiki/items/3ae6ea5e5a011ebcd0b7
こちらの記事などをご参照ください。

### Pythonについて
https://www.udemy.com/course/python-copype/?referralCode=2C42127F7604AF086436

↑こちらのコースなどをご参照してください。

### 一番上のセルから順に「Shift」キーと「Enter」キーを同時押しして実行してください。
ここでは今回の実装に必要なライブラリのインストールを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/8f537039-edea-6d64-1676-5fbcb48b8d76.png)
下記のように表示された場合は「RESTART RUNTIME」をクリックし再度一番上のセルから実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/f831ab3a-2b79-23f2-aa50-52e412c68fe8.png)

### 今回学習に使用するデータをGoogle Colaboratoryへダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/cb94adeb-21c3-d9ce-797f-b8ea7939ff04.png)

### 今回使用するライブラリをインポートします。
FileMakerでいうとカスタム関数をインポートして使用できる状態にするイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/27861f65-bd67-155a-c02c-17f7d2d71c39.png)

### ダウンロードした情報をpandasのDataFrameに読み込みます。
FileMakerでいうとCSVデータをインポートするイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/ef705690-a54a-75f5-7a91-e21ea99095f5.png)

### データ内容の確認やデータの統計基礎情報を確認します。
今回のモデルは、「気温」、「湿度」、「土中湿度」より人間が0から3で記録した植物の「元気」を予測するモデルの作成を行います。
湿度のminが-87.000000、maxが153.000000　とおかしな値が入ってしまっていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/ecdd0288-c676-d2e3-9d7a-acdbb9823e32.png)

### データの可視化を行うと湿度（青）に外れ値（異常な値）が含まれていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/c3412edf-3974-e475-a657-ddb29d625965.png)

### 湿度の外れ値を除外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/9a0d829e-565a-6d6a-0fc6-98ec851b658b.png)

### 外れ値を除外した後のデータの統計基礎情報とデータの可視化します。
外れ値が除去されたことがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/526af0a9-aade-1b76-14ea-609ffcb5d34d.png)

### 機械学習モデルを学習させるためにデータの型を変換します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/951d9f4f-9ed5-4c19-f360-2ea82820d88b.png)

### 線形回帰モデルで学習を行います。
学習後に「clf.coef_」と実行すると回帰係数を確認することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/46314b71-17ad-6fcc-7a21-30ae5891b3cc.png)

### 学習したモデルを使用して植物の元気を予測してみます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/d82d821c-88f0-8724-babe-ff74b2e9e1fd.png)

### テストデータを予測します。
X_testに入っている気温、湿度、土中湿度のデータを使用して元気の予測を行った結果がy_predに格納されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/1e3f8b61-ce04-2918-de25-ae259726870f.png)

### 精度を求めます。
今回はaccuracyを使用して精度を求めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/a774ef4f-4ba3-9b95-25f7-4809ee77a539.png)

## 3.Core　MLに変換
### 作成した機械学習モデルをCoreMLに変換します。
ここで設定した["temp","humid","modhumid"]は後ほどFileMakerでこのモデルを使用する時に利用するので覚えておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/d93bcea3-667b-fa63-7689-bac45a1b1caf.png)

### 完成したCoreMLのモデルをダウンロードします。
ダイアログが表示されるのでわかりやすい場所に保存してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/60c0d41a-840f-49a9-54b4-e52154dbcb69.png)

## 4.FileMakerでCoreMLモデルを使用
[こちら](https://github.com/jackasser/FileMaker-coreML/raw/main/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%A2%E3%83%87%E3%83%AB%E5%88%A9%E7%94%A8.fmp12)から今回利用するファイルをダウンロードしてください。

### まずは予測してみましょう！
「モデル」に上でダウンロードしたCoreMLのファイルを挿入してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/68b78491-fc30-f7ce-a852-080d9a30bdd1.png)

### 気温、湿度、土中湿度に値を入力し、「予測」ボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/a87cb83e-18d1-e3b9-a85d-8244e2f8c34b.png)

### 予測元気に予測結果が表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/903a3df8-0a17-50fe-27f5-24a023f78994.png)

# FileMakerファイルの解説
## データベース管理
テーブルは「g_機械学習モデル」テーブルのみ、フィールドはグローバルフィールドの「g_モデル」、「g_気温」、「g_湿度」、「g_土中湿度」、「g_予測元気」となっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/ef834b2e-1b2c-f6d5-bcc5-bdff11d7725f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/4fd5ad31-f512-63da-9c1b-1b26cc054657.png)

## スクリプト
「予測」という１スクリプトを「予測」ボタンクリック時に呼び出しています。
### モデルの読み込み
数値予測のため処理を「一般」に設定し、名前は好きな名前を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/2c37f990-b92c-ec9a-6fb6-7cbe99c420b7.png)

### 予測
上で読み込んだ機械学習モデルを利用して予測を行います。
上で設定したモデル名（"genki_predict"）を使用して予測を行います。
Google Colaboratoryで設定した変数名をここで使用して入力データを設定します。

```python
ComputeModel ( "genki_predict";//モデル名
 "temp" ;g_機械学習モデル::g_気温;
"humid";g_機械学習モデル::g_湿度;
"modhumid";g_機械学習モデル::g_土中湿度)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/f338b5ad-7d0a-36a3-6fa8-8ad85ba2f844.png)

### モデルのメモリ解放
CoreMLモデルを使用する際はアンロードしない限りメモリ上に残ってしまうので必ずアンロードしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184509/fb39ecbf-8fde-3495-9c20-58439316c0af.png)

# まとめ
以上でIoTで取得したデータから機械学習モデルを作成し、FileMakerで使用する方法を解説しました。
機械学習モデルについては様々なものがあるのでいろんなモデルやパラメータ調整を試すと精度が向上します。
気になる方はkaggleをご覧ください。(https://www.kaggle.com/)

FileMakerを使用したIoTや機械学習についてのご相談は弊社HPよりお待ちしております。（https://tsumugiya-it.com/ ）