(保存版:随時更新) データ前処理手法まとめ by Team AI 

データ分析の現場では実務上非常に大事な前処理。
でもどの手法を選んでいいのか初心者には見えにくいし、
漏れなくダブりなく(MECE)網羅された手法一覧が欲しいよね！という議論から、
我々Team AIでは隔週でデータ前処理研究会をはじめました。
スケジュール => www.team-ai.com

地味なテーマですが、大切だと思っているので、このページで少しずつノウハウを蓄積し、
みなさんの業務に活かしていただきたいと思っています。
ご意見ご感想 & 新たな情報等、是非活発にコメントください。

初回：

![22489841_10212433277380031_229781676280284427_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/76304/14a8e91b-a292-5ae9-4149-f823f1a590a6.jpeg)

#2018/11/11 追加

Kaggle CTOオススメの活用法 
http://blog.team-ai.com/8steps-for-studying-ai/

データ前処理の一部分が特徴量エンジニアリング

Data Preprocessing For Non-Techies: Basic Terms and Definitions
https://towardsdatascience.com/data-preprocessing-for-non-techies-basic-terms-and-definitions-ea517038a4e5

Data Preprocessing for Non-Techies: Feature Exploration and Engineering
https://towardsdatascience.com/data-preprocessing-for-non-techies-feature-exploration-and-engineering-f1081438a5de

Data Pre-Processing by Coursera
https://www.coursera.org/lecture/advanced-manufacturing-process-analysis/data-preprocessing-3PByv

Pre-Processing Tasks by Coursera
https://www.coursera.org/lecture/data-genes-medicine/data-preprocessing-tasks-Zdg0l

Pre-Processing Images by Coursera
https://www.coursera.org/lecture/neurohacking/preprocessing-an-overview-41B0V

特徴量エンジニアリングに特化したオライリーのオススメ本
https://10001ideas.com/2018/07/19/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AB%E7%84%A6%E7%82%B9%E3%82%92%E5%BD%93%E3%81%A6%E3%81%9F%E7%B0%A1%E6%BD%94%E3%81%AA%E6%9C%AC/

#2018/2/12 追加
AI開発を失敗させたくない人にオススメなDEBRAフレームワーク
https://medium.com/team-ai-fintech/how-to-build-successful-ai-a0c5e522497d

#2017/11/22追加

カエケンさんのオライリー読書ブログ

データ前処理に使えるノウハウ満載の書籍『Pythonではじめるデータラングリング』レビュー
https://qiita.com/kaeken1jp/items/28a9d9e6d99176711e4e

書籍『バッドデータハンドブック』レビュー
https://qiita.com/kaeken1jp/items/7f79fb6a966e115ecd69

[”仕事で始める機械学習”の要点をまとめてみたらとても良い入門書だった]
(https://medium.com/@SEKAINOOKAZAWA/%E4%BB%95%E4%BA%8B%E3%81%A7%E5%A7%8B%E3%82%81%E3%82%8B%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E3%81%AE%E8%A6%81%E7%82%B9%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F%E3%82%89%E3%81%A8%E3%81%A6%E3%82%82%E8%89%AF%E3%81%84%E5%85%A5%E9%96%80%E6%9B%B8%E3%81%A0%E3%81%A3%E3%81%9F-7c74f4f2b5af)

#2017/10/31追加

![22853450_10212538108480743_9054433506080112509_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/76304/30f34615-3e0c-c58b-9fed-6cb2abd8c40c.jpeg)


自然言語処理における前処理の種類とその威力
=> BeautifulSoup(スクレイピング処理後のパーサー)/lxml/NEologd(新語もアップデートされている辞書)/TF-IDF(多過ぎる単語・少な過ぎる単語は重要ではないという傾向に基づく分析)/エントロピー(平均情報量)を見る/One-Hot表現/分散表現(Word2Vecにも登場)
https://qiita.com/Hironsan/items/2466fe0f344115aff177

Kaggle Case Study クレジットカードの不正検出のKernel 前処理の事例
=> SMOTE(Synthetic Minority Over-Sampling Technique)/ Confusion Matrix(混同行列) / ROC Curve / Skewed Data(歪んだデータ)
https://www.kaggle.com/joparga3/in-depth-skewed-data-classif-93-recall-acc-now

Kaggle Case Study 肺がん画像の分類における前処理の事例 3D Modeling含む
=> Resampling/3D Plotting/Lung Segmentation/Dilation Morphological Operation(モルフォロジ処理=ノイズ除去)/Normalization/Zero-Centering
https://www.kaggle.com/gzuidhof/full-preprocessing-tutorial

UpSampling/DownSampling or UnderSampling/OverSampling

モデルの選択と、説明変数・目的変数の選択の関係性

そもそもCSV型の構造化データに持ってくるまでにデータの前処理や特徴エンジニアリングが必要

Pythonではじめるデータラングリング(データを飼いならすという意味) (オライリー)
https://www.oreilly.co.jp/books/9784873117942/

Bad Data HandBook (オライリー)
https://www.oreilly.co.jp/books/9784873116402/

次回への改善アイデア
全体像を把握した上での現在地のマッピングが必要
MatrixではなくYES/NO形式のケースのFlowChartが良さそう
これを漏れなくダブりなくまとめる
Text=>構造化データ=>欠損値がある場合
Grid Search 色んなモデルのハイパーパラメーター調整
モンテカルロ
マルコフ連鎖


#構造化データと非構造化データの違いを知ろう

https://www.graffe.jp/blog/1823/

![kouzou_data.png](https://qiita-image-store.s3.amazonaws.com/0/76304/7921306a-a8dd-747e-d38f-83b976639c3c.png)

###構造化データ
従来より、商業活動や自然現象などを数値化した意味のあるデータ（情報）として活用してきた。そのような数値データを、より効率的に、より生産的に活用するために、計算機（コンピュータ）が生まれ、活用が高度化していく中で、主にリレーショナルモデルをベースとしたデータベースに構造化して格納されて活用したため、そのようなデータをのちに構造化データと呼ぶようになった。
Wikipedia:「非構造化データ」より抜粋

###非構造化データ
規則性がある非構造化データ
先ほどの説明でも説明しましたが、データ分析で構造化データが、データ分析で使われてきましが、近年、ビッグデータ分析が、各企業で行われるようになり、非構造化データのデータ分析も頻繁に行われるようになってきています。しかし、全ての非構造化データがデータ分析に向いているわけではありません。この中でXMLファイルやJsonファイルなどの「規則性があるデータ」が、データ分析の対象になってきます。
「規則性がある非構造化データ」とは何か？ 構造化データの場合、「列」という概念があり、登録できる情報に制限がありました。しかし、「規則性がある非構造化データ」には、列の概念がありません。その代わりに、XMLファイルなどには、ルール(規則性)があり、情報を登録・取得する方法が決まっています。そのため、情報量が決まらない、または拡張する可能性があるデータには、「規則性がある非構造化データ」が使われることが多くなり、インターネットの通信情報などで頻繁に使用されています。

#BigData時代は3V (Velocity Volume Variety)+ Veracityともいう
前処理というよりIBMなどがマーケティングで使っていた用語ですが、参考まで

![img_bigdata.png](https://qiita-image-store.s3.amazonaws.com/0/76304/68c9a43a-417c-beba-a174-f0764eec7c27.png)

![Four-Vs.png](https://qiita-image-store.s3.amazonaws.com/0/76304/7fc67e55-6e41-4b16-e784-76d5b0a47b30.png)


#高次元データ(画像で数万次元とか)だと人手で前処理できなくなる

#構造化データの前処理

#Data Pre-Processingのツール

- R
R dplyrなどのデータ前処理に使用できるさまざまなパッケージで構成されるフレームワーク

- Weka
Wekaは、データマイニングプロセスのための機械学習アルゴリズムのコレクションを含むソフトウェアです。機械学習アルゴリズムを適用する前に使用されるデータ前処理ツールで構成されています。

- RapidMiner
RapidMinerは、オープンソースのデータマイニングプロセスの予測分析プラットフォームです。正確なデータ前処理プロセスを実行するための効率的なツールを提供します。

- Python
Pythonは、データ前処理に使用されるさまざまなライブラリを提供するプログラミング言語です。

 
#Data Wranglingのツール
 
- Tabula
Tabulaは、pdfに存在する表形式のデータを構造化された形式のデータ、つまりスプレッドシートに変換するために使用されるツールです。

- OpenRefine
OpenRefineは、問題のステートメントに従ってデータを操作するのに役立つフレンドリーなグラフィカルユーザーインターフェイス（GUI）を提供するオープンソースソフトウェアです。したがって、非データ科学者にとって非常に有用なソフトウェアです。

- R
Rはデータ科学者にとって重要なプログラミング言語です。データ操作を行うためのdplyr、tidyrなどのさまざまなパッケージを提供します。

- データラングラー
データラングラーは、実世界のデータを構造化された形式に変換するために使用されるツールです。変換後、Excel、Rなどのような必要なアプリケーションにファイルをインポートできます。したがって、データを手動でフォーマットするのに費やされる時間が短くなります。

- CSVKit
CSVKitは、CSVからJSON、JSONからCSVなどのさまざまな形式にCSVファイルを変換する機能を提供するツールキットです。それはデータの争いのプロセスを容易にします。

- Python with Pandas
PythonはPandasライブラリのある言語です。このライブラリは、データ科学者が複雑な問題を効率的に処理するのに役立ちます。

-データコンバータ
ミスターデータコンバータは、入力としてExcelファイルを取り、ファイルを必要な形式に変換するツールです。これは、HTML、XMLおよびJSON形式への変換をサポートしています。


#TPOT
前処理の自動化/特徴量をどう作るか/モデルの選択 を自動化しようとする取り組み 
https://rhiever.github.io/tpot/

AutoMLソフトウェアから期待すること

自動機械学習（AutoML）は、ほとんどの実践者が慣れていたよりも高いレベルの機械学習を採用しているため、TPOTなどのAutoMLソフトウェアを実行する際に何を期待するかについてのガイドラインをいくつか集めました。

AutoMLアルゴリズムはわずか数分間実行することを意図していません

もちろん、あなたができるだけで数分間TPOTを実行し、それはあなたのデータセットの適度に良好なパイプラインを見つけます。ただし、TPOTを非常に長く実行しないと、データセットに最適なパイプラインが見つからないことがあります。多くの場合、TPOTがデータセットのパイプラインスペースを完全に検索できるように、TPOTの複数のインスタンスを長時間（数日から数日間）並列に実行する価値があります。

AutoMLアルゴリズムは検索を終了するのに時間がかかる

AutoMLアルゴリズムは、データセットに1つのモデルをフィッティングするほど簡単ではありません。彼らは、複数の前処理ステップ（欠損値代入、スケーリング、PCA、特徴選択など）を有するパイプライン内の複数の機械学習アルゴリズム（ランダムフォレスト、線形モデル、SVMなど）、すべてのモデルのハイパーパラメータ、およびパイプライン内でアルゴリズムをアンサンブルまたはスタックするための複数の方法があります。

したがって、TPOTは大規模なデータセットで実行するにはしばらく時間がかかりますが、その理由を理解することが重要です。デフォルトのTPOT設定（100個の母集団サイズを持つ100世代）では、TPOTは仕上げ前に10,000のパイプライン構成を評価します。この数値を文脈に当てはめるには、機械学習アルゴリズムのための10,000個のハイパーパラメータの組み合わせのグリッド検索と、そのグリッド検索にかかる時間を考えてください。10倍のクロスバリデーションで評価する10,000のモデル構成です。つまり、1回のグリッド検索で約10万のモデルがトレーニングデータに適合し、評価されます。これは、意思決定ツリーのような単純なモデルの場合でも、時間のかかる手順です。

#DataRobot

http://itpro.nikkeibp.co.jp/atclact/active/14/415101/081800490/

米DataRobotの「DataRobot」は、機械学習を用いた予測モデルの作成を自動化するソフトである。データサイエンティストの知識と能力をソフトウエアに落とし込んだ製品であり「これまで1年かかっていた作業が1日や1週間で完了する」（米DataRobot日本支社）としている。
　機械学習のうち、教師あり学習（Supervised Learning）を自動化する。分類や回帰（数値の予測）に利用できる。例えば、2値分類の場合、それぞれのデータがTrueかFalseかを情報として与えて学習させる。こうして作成した予測モデルを使えば、新たなデータを与えるだけで、それがTrueかFalseかを判定できる。複数種類のアルゴリズムを使ってモデルを生成し、より精度の高いモデルを選ぶ。

　使い方は簡単で、データを登録して「何を予測するか」を指定するだけ。これだけで予測モデルを自動で作成する。データは、外部データベースへの接続のほか、手元にあるデータのアップロードなどが可能。ソフトウエアはWebアプリケーションとして動作し、Webブラウザーによる対話型の操作か、あるいはREST APIを介して、すべての作業を行える。

　特に、予測モデル作成後は、REST APIを使うことで、他の業務システムに予測モデルを利用した自動判定の機能を組み込める。判定対象のデータをDataRobotに投げて判定結果を受け取れる。例えば、オンラインで個人属性を入力させて合否を判定する用途や、物件情報を入力させて見積金額を生成する用途などに利用できる。

![ph1.jpg](https://qiita-image-store.s3.amazonaws.com/0/76304/1c250c8a-eefe-3b5e-b11f-4bc595015a52.jpeg)

私もDataRobot Japanシバタアキラさんには個人的にお世話になっています！
https://codeiq.jp/magazine/2016/09/45051/

#H2O.ai
エンタープライズ向け機械学習のオープンソース


#データ前処理のカテゴリ

下記より引用
https://viblo.asia/p/data-preprocessing-and-data-wrangling-in-machine-learning-and-deep-learning-Qpmlenrk5rd

![4c9e7e24-6ccb-4f92-a111-e68d5ba60ce9.jpg](https://qiita-image-store.s3.amazonaws.com/0/76304/41d822ff-79bf-1e61-9ed6-14b5d9fe80d0.jpeg)
![00b994da-4b75-4c45-b190-bed6c7b0d0c5.jpg](https://qiita-image-store.s3.amazonaws.com/0/76304/9ae57e6a-ceb5-61d1-cb3c-a189d0ede6b1.jpeg)


###データクリーニング
これはデータ前処理で実装される最初のステップです。このステップでは、主な焦点は、欠落データ、ノイズの多いデータ、検出、および外れ値の除去、データ内の重複および計算バイアスの最小化の処理です。

###データ統合
このプロセスは、さまざまなデータソースからデータを収集し、データを結合して一貫性のあるデータを形成する場合に使用されます。データクリーニングを実行した後のこの一貫したデータは、分析に使用されます。

###データ変換
このステップは、モデルの必要に応じて生データを指定されたフォーマットに変換するために使用されます。データの変換に使用されるオプションは次のとおりです。

###正規化
この方法では、データのスケーリングを実行できるように数値データを指定された範囲、つまり0と1の間に変換します。

###集約
コンセプトは単語そのものから派生することができます。この方法は、フィーチャを1つにまとめるために使用されます。例えば、2つのカテゴリーを組み合わせて新しいカテゴリーを形成することができる。

###一般化
この場合、下位レベルの属性は上位レベルに変換されます。

###データ削減
データ複製の変換とスケーリング、すなわちデータ内の冗長性が除去され、データを効率的に整理した後。

##データ前処理はどのように実行されますか？
データ前処理は、上記のフォーマットされていない実世界データの原因を取り除くために実行されます。

まず、欠落しているデータをどのように処理できるかについて説明します。以下に示す3つの異なるステップを実行することができます。

- 不足しているレコードを無視する 
欠けているデータを処理するための最も簡単で効果的な方法です。しかし、この方法は、欠損値の数が多いときや、データのパターンが文の問題の原因の認識されていない基本根に関連するときには実行しないでください。
- 不足している値を手動で入力する
これは最善の方法の1つです。しかし、大きなデータセットがあり、欠損値が大きい場合、この方法は時間がかかる作業となるため効率的ではないという1つの制限があります。
- 計算値を使用した充填
欠損値は、観測値の平均、モードまたは中央値を計算することによっても満たすことができます。もう1つの方法は、機械学習アルゴリズムまたはディープラーニングアルゴリズムを使用して計算される予測値です。しかし、この方法の欠点の1つは、計算値が観測値に対して正確でないため、データ内にバイアスを生成できることです。

さらに進んで、騒々しいデータにどのように対処できるか話し合ってみましょう。従うことができる方法は以下の通りです：

- ビニング法
この方法では、近傍の値に関してデータのソートが行われます。この方法は、ローカルスムージングとも呼ばれます。

- クラスタリング方法
このアプローチでは、同じグループ、すなわち同じクラスタ内の類似のデータをグループ化することによって異常値を検出することができる。

- 機械学習
データの平滑化のために機械学習アルゴリズムを実行することができます。例えば、回帰アルゴリズムを使用して、指定された線形関数を使用してデータを平滑化することができます。

- 手動で削除する
ノイズの多いデータは人間によって手動で削除することはできますが、時間がかかるプロセスであるため、ほとんどの場合、この方法は優先されません。

一貫性のないデータを手動で処理するために、データは外部参照とナレッジエンジニアリングプロセスのようなナレッジエンジニアリングツールを使用して管理されます。

![0a0408f1-af0f-49fc-95d2-90e22808c115.jpg](https://qiita-image-store.s3.amazonaws.com/0/76304/b8a6b18e-2e7a-11bb-d653-10989fd711b2.jpeg)
![2689ba29-859d-4824-98c4-1a2a3d5a68dd.jpg](https://qiita-image-store.s3.amazonaws.com/0/76304/2a98be17-bf5a-a242-83a1-346b55861ac1.jpeg)
![c374b026-bee7-4ec0-a8e4-2c6e7e0fcd90.jpg](https://qiita-image-store.s3.amazonaws.com/0/76304/e9d94751-7e97-4d26-ec62-416843b1ae14.jpeg)
![779fa5c3-9d8b-4e5b-abf4-6bbd65b2f95d.jpg](https://qiita-image-store.s3.amazonaws.com/0/76304/8e7fdf89-94e9-41a4-d022-a53cb8e8e851.jpeg)

#データクリーニング

欠損値への対処(除去・平均値・中間値)
https://qiita.com/search?q=%E6%AC%A0%E6%90%8D%E5%80%A4

外れ値への対処
https://qiita.com/search?q=%E5%A4%96%E3%82%8C%E5%80%A4

ノイズへの対処(画像や音声などに多い)
https://qiita.com/search?q=%E3%83%8E%E3%82%A4%E3%82%BA

データ重複への対処
https://qiita.com/search?q=%E3%83%87%E3%83%BC%E3%82%BF%E9%87%8D%E8%A4%87

#顔認識の際の前処理

ラベル付け
https://qiita.com/search?q=%E3%83%A9%E3%83%99%E3%83%AB%E4%BB%98%E3%81%91

顔抽出
https://qiita.com/search?q=%E9%A1%94%E6%8A%BD%E5%87%BA

特徴抽出
https://qiita.com/search?q=%E7%89%B9%E5%BE%B4%E6%8A%BD%E5%87%BA

超解像
https://qiita.com/search?q=%E8%B6%85%E8%A7%A3%E5%83%8F

グレースケール化
https://qiita.com/search?q=%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E5%8C%96

背景削除

セグメント分類

データ水増し
https://qiita.com/search?q=%E3%83%87%E3%83%BC%E3%82%BF%E6%B0%B4%E5%A2%97%E3%81%97

英語でいうとData Augumentation
https://qiita.com/search?utf8=%E2%9C%93&sort=&q=data+augumentation

HOG特徴量抽出
https://qiita.com/search?q=HOG%E7%89%B9%E5%BE%B4%E9%87%8F

#テキスト分析の前処理
分かち書き 
形態素解析
文法エラー修正(英語)
同音異義語チェック
トピックモデル

#時系列データ前処理
欠損値除去
欠損値補填
窓関数 Sliding Window
ノイズ除去
標準化

#音声データ前処理

PFNさんのサイトより；

<img width="394" alt="スクリーンショット 2017-10-28 14.40.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/76304/58b3cfea-e5f0-d2d8-c367-f516e1e170fc.png">

https://research.preferred.jp/2015/07/deep-learning-speech-recognition/