センサーデータアナリティクスの開発から運用まで
MathWorks
®Japan
アプリケーションエンジニアリング部
アプリケーションエンジニア
Agenda
センサーデータの整理整頓
時系列の分類
解析環境の構築
データへの
CSV ファイルデータの整理整頓
生データそのままでは解析作業が進まない
生データに潜む様々な課題
1.
不要なデータが混入してしまっている
2.
データが取得できていない(欠損データの存在)
3.
想定していたファイルが丸ごとない
4.
異なるファイル同士を結合したい(同期処理)
5.
カラム名 / 変数名 が日本語になってしまっている
6.
データ量が膨大
This file contains sensor data from a 3D acceleration …Time Location Temperature AccelerationX AccelerationY 加速度Z … 2016/10/19 00:00:00 outside 30 8.6007 3.5105 2.4395 2016/10/19 00:00:01 outside 30 8.5656 3.6618 2.3949 2016/10/19 00:00:02 outside 30 8.6011 3.549 2.3051 2016/10/19 00:00:03 outside 30 3.6602 2.3353 2016/10/19 00:00:04 outside 30 8.8312 3.7 2.2306 2016/10/19 00:00:05 outside 30 8.8293 3.5471 2.2613 2016/10/19 00:00:06 outside 30 8.829 3.5477 2.277 2016/10/19 00:00:07 outside 30 3.3935 2.3979 2016/10/19 00:00:08 outside 30 9.1325 3.5467 2.4437 2016/10/19 00:00:09 outside 30 8.9045 3.4698 2.3974データの整理整頓
Case# 1/6 : 不要データをスキップしたインポート
Challenge
–
先頭の数行には、ファイルまたはデータの説明やメタ情報がありこれらは不要
–
解析には不要なカラムが存在
This file contains sensor data from a 3D acceleration …
Time Location Temperature AccelerationX AccelerationY AccelerationZ … 2016/10/19 00:00:00 outside 30 8.6007 3.5105 2.4395 2016/10/19 00:00:01 outside 30 8.5656 3.6618 2.3949 2016/10/19 00:00:02 outside 30 8.6011 3.549 2.3051 2016/10/19 00:00:03 outside 30 3.6602 2.3353 2016/10/19 00:00:04 outside 30 8.8312 3.7 2.2306 2016/10/19 00:00:05 outside 30 8.8293 3.5471 2.2613 2016/10/19 00:00:06 outside 30 8.829 3.5477 2.277 2016/10/19 00:00:07 outside 30 3.3935 2.3979 2016/10/19 00:00:08 outside 30 9.1325 3.5467 2.4437 2016/10/19 00:00:09 outside 30 8.9045 3.4698 2.3974 …
データの整理整頓
Case# 1/6 : 不要データをスキップしたインポート
Solution
–
detectImportOptions
の利用
This file contains sensor data from a 3D acceleration …
Time Location Temperature AccelerationX AccelerationY AccelerationZ …
2016/10/19 00:00:00 outside 30 8.6007 3.5105 2.4395 2016/10/19 00:00:01 outside 30 8.5656 3.6618 2.3949 2016/10/19 00:00:02 outside 30 8.6011 3.549 2.3051 2016/10/19 00:00:03 outside 30 3.6602 2.3353 2016/10/19 00:00:04 outside 30 8.8312 3.7 2.2306 2016/10/19 00:00:05 outside 30 8.8293 3.5471 2.2613 2016/10/19 00:00:06 outside 30 8.829 3.5477 2.277 2016/10/19 00:00:07 outside 30 3.3935 2.3979 2016/10/19 00:00:08 outside 30 9.1325 3.5467 2.4437 2016/10/19 00:00:09 outside 30 8.9045 3.4698 2.3974 …
>> FileName =
'sampledata.csv'
;
>> fileinfo = detectImportOptions(FileName,
'NumHeaderLines'
, 1);
% 先頭行をスキップ
>>
>>
% 必要な変数名を指定
>> fileinfo.SelectedVariableNames = {
'Time'
,
'AccelerationX'
,
'AccelerationY'
,
…
};
>>
データの整理整頓
Case# 2/6 : 欠損データの取り扱い
Challenge
–
欠損値があるけど記述統計量(平均や最大値、最小値など)を求めたい
–
欠損箇所を補間したい
Solution
–
nan○○ 関数の利用
nanmean / nanmax / nanmin / nanstd / nanvar / etc.
–
interp1 関数の利用
スプライン補間した例
>> x = DataTable.AccelerationX(1:5) x = 8.6007 8.5656 8.6011 NaN 8.8312 >> >> mean(x) ans = NaN >> >> nanmean(x) ans = 8.6497データの整理整頓
Case# 3/6 : ファイルの欠損
Challenge
–
想定しているファイルが存在しない事が
ありプログラムが異常停止する
Solution
–
exist 関数の利用
–
try
–
catch
構文の利用
PATH =
'<File Path>'
;
if
exist(PATH,
'file'
) == 2
:
else
warning([
'Failed: '
, PATH,
' is missing!!'
]);
end
フォルダの場合は
exist(PATH, 'dir') == 7
ErrorData = cell(1,1);
% Initialize
n = 0;
for
m = 1:NumFiles
% Or while loop
try
:
catch
ME
n = n + 1;
ErrorData{n,1} = ME;
end
データの整理整頓
Case# 4/6 : ファイルの結合 / データの同期
Challenge
–
2つのファイルを時刻情報に基いて結合したい
–
サンプリング周波数が異なるデータを結合したい
Solution
–
timetable の利用
時刻情報に基づいた結合の例
>> % 時刻に該当する列を datetime 配列へ変換>> DataVar.Time = datetime(DataVar.Time, 'InputFormat', …
'yyyy/MM/dd HH:mm:SS', 'Format', 'yyyy-MM-dd HH:mm:SS'); >>
>> % テーブル配列をタイムテーブルへ変換
>> TimeTabel = table2timetable(DataVar, 'RowTimes', 'Time');
>>
% 2つのタイムテーブル配列が有する Time 列を利用して結合
データの整理整頓
Case# 4/6 : ファイルの結合 / データの同期
Solution
–
timetable の利用
サンプリング周期が異なる
データを結合する例
データの整理整頓
Case# 5/6 : 日本語のカラム名
Challenge
–
変数名 / カラム名に日本語が入ってしまっている
Solution
–
対処療法として、Excel を使って 日本語名と英語名を管理し
警告: 有効な MATLAB 識別子になるように変数名が変更されました。 元の名前は VariableDescriptions プロパティに保存されています。データの整理整頓
Case# 5/6 : 日本語のカラム名
–
インポートした後、VariableNames プロパティによる刷新
>>
% カラム名対応表を収めた Excel のインポート
>> [~, ColumnNameDict] = xlsread(
'ColumnsNameList.xlsx'
,
'Sheet1'
,
'B1:G2'
);
>>
>>
% 対象ファイルのメタ情報を取得
>> FileName =
'Sample.csv'
;
>> fileinfo = detectImportOptions(FileName);
>>
>>
% VariableNames の値を刷新
>> fileinfo.VariableNames = ColumnNameDict(2,:);
>> DataTable = readtable(FileName, fileinfo);
データの整理整頓
Case# 6/6 : 大量データへの対応
Challenge
–
ファイル数が膨大なため解析ができない
Solution
–
並列分散処理が有効
Parallel Computing Toolbox
™& MATLAB Distributed Computing Server
™の利用
ある
データセット (約1200のCSVファイル / 計約400MB) に
対する統計および集約処理のベンチマーク
0 5 10 15 H ou rCPU コア数
高速化率
1
-6✕2ホスト
10.20
Agenda
センサーデータの整理整頓
時系列の分類
解析環境の構築
データへの
アクセスと探索
データの前処理
予測モデルの構築
システムへの統合
時系列の分類
デモ:テキストマイニングの手法を応用した水道使用傾向の分類
水道の使用状況から5つのクラスに家庭を分類
Typical
Constant
High Usage
Low Usage
Untenanted
時系列の分類
Approach
1.
約3ヶ月分の時系列データを部分時系列に分解
2.
分解された部分時系列に対して、いくつかのグループへクラスタリング
3.
グループ番号を文字とみなして
TF-IDFによって時系列の特徴量を算出
4.
様々な機械学習アルゴリズムを試行
5.
検証用データを使った学習器のテスト
5 3 7 1 4 3 6 6 2 4 4 5
…
TS_Name
TFIDF1
TFIDF2
TFIDF3
…
A-01
0.0267
0.0259
0.0487
…
A-02
0.0252
0.0544
0.0171
…
B-07
0.0307
0.0395
0.0652
…
B-09
0.0562
0.0385
0.0837
…
:
:
:
:
:
K-17
0.0399
0.0651
0.0275
…
T
C
HU
T
C
A-03?
B-08?
G-01?
Step1. 時系列を部分時系列へ分割
時系列A
Step2. 部分時系列のクラスタリング
Step2. 部分時系列のクラスタリング
Cluster #
1
2
3
4
5
6
7
:
Step2. 部分時系列のクラスタリング
Dynamic Time Warping
–
時系列ペアに関する相違度を求める計算方法
DTW を用いて時系列を3つにクラスタリングした例
K-Medoids + DTW
Step3. TF–IDF による各時系列の特徴量を算出
Term Frequency – Inverse Document Frequency
Term Frequency
–
定義
–
例
Inverse Document Frequency
–
定義
–
例
文章 d
iにて単語 t が登場する回数
:
)
,
(
t
d
iTF
文章 d
i内における総単語数
log
:
)
(
t
IDF
文章 d
iの総数
単語 t が登場する 文章の数
+ 1
MATLAB
is the language of technical computing and
MATLAB
product family supports the entire data
analysis process.
TF(‘MATLAB’, d
i)
0.1176
17
2
d
1:
MATLAB
is the language of technical computing.
d
2: MathWorks provides
MATLAB
and Simulink.
IDF(‘MATLAB’)
1
2
3
log
Step3. TF–IDF による各時系列の特徴量を算出
Term Frequency – Inverse Document Frequency
TF-IDF
–
定義
–
例
)
(
)
,
(
:
)
,
(
t
d
TF
t
d
IDF
t
IDF
i
i
TF
d
1: MATLAB is the language of technical computing.
d
2: MathWorks provides MATLAB and Simulink.
d
3: MathWorks has released R2016b.
TF-IDF(‘MATLAB’, d
1)
1
0
.
2008
2
3
log
7
1
TF-IDF(‘MathWorks’, d
3)
1
0
.
3514
2
3
log
4
1
単語 t にクラスタの番号、
文章 d
iに各時系列が対応
Step4. 機械学習アルゴリズムの試行
Classification Learner
学習アルゴリズムを対話的に検討
Step5. 学習器のテスト
正答率評価、およびパラメータ調整
混合行列 (Confusion Matrix)
ROC曲線
Bayesian Optimization
–
学習器のパラメータ(ハイパーパラメータ)を調整
bayesopt / BayesianOptimization
Agenda
センサーデータの整理整頓
時系列の分類
解析環境の構築
–
どこでデータを整理して、どこで解析を実施するのか
データへの
解析環境の構築
よくあるシステム構成
エッジ・
解析環境の構築
よくあるシステム構成
サーバー・
エッジ・コンピューティングを実現するには?
MATLAB Coder
™
または MATLAB Compiler
™
によるエッジ処理
デバイスへの実装
MATLAB Coder™ MATLAB Runtime
制御/監視端末への実装
MATLAB Compiler SDK™ MATLAB Compiler™サーバー・コンピューティングを実現するには?
MATLAB Production Server
™
によるデータ解析システム
低遅延で高トランザクションな解析を実現する MATLAB Production Server
MATLAB Production Server
DB / DWH • Web Browser • Microsoft®Excel® End User HTTP / HTTPS Load Balancer C/C++ Java™ .NET Python™