<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>データクリーニング on Marketechlabo</title><link>https://www.marketechlabo.com/tags/data-cleaning/</link><description>Recent content in データクリーニング on Marketechlabo</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Mon, 22 Jan 2018 00:00:00 +0900</lastBuildDate><atom:link href="https://www.marketechlabo.com/tags/data-cleaning/index.xml" rel="self" type="application/rss+xml"/><item><title>Rでデータクリーニング、変数の生成</title><link>https://www.marketechlabo.com/r/r-data-cleaning/</link><pubDate>Mon, 22 Jan 2018 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/r-data-cleaning/</guid><description>
&lt;p&gt;このあたりから処理がアドホック寄りになるので、data.tableを使う場合でもパイプ（dplyr）を使って一度に実行するのではなく添字記法を使って1ステップずつ進めていくといい（1行ずつ実行する場合は添字記法を使った方がコード量が少なくて済む）。&lt;/p&gt;
&lt;h2 id="行の削除抽出"&gt;行の削除（抽出）&lt;/h2&gt;
&lt;p&gt;&lt;a href="/r-process-rows/#i"&gt;行の抽出&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="行の並べ替えソート"&gt;行の並べ替え（ソート）&lt;/h2&gt;
&lt;p&gt;&lt;a href="/r-process-rows/#i-3"&gt;行の並べ替え&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="変数の加工データフレームdataframe共通"&gt;変数の加工（データフレーム／data.frame共通）&lt;/h2&gt;
&lt;h3 id="標準化scale"&gt;標準化（scale）&lt;/h3&gt;
&lt;p&gt;指定した変数を標準化（平均＝０、分散＝1のスケールに圧縮／拡大）する。
&lt;code&gt;scale()&lt;/code&gt;関数を使う。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# データフレーム&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x.df&lt;span style="color:#f92672"&gt;$&lt;/span&gt;purchase_amount &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;scale&lt;/span&gt;(x.df&lt;span style="color:#f92672"&gt;$&lt;/span&gt;purchase_amount)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# data.table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x.dt[,purchase_amount &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;scale&lt;/span&gt;(purchase_amount)]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;複数列をまとめてやるには&lt;code&gt;mutate(across(...))&lt;/code&gt;を使って&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x.dt &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;lazy_dt&lt;/span&gt;() &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;mutate&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;across&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;c&lt;/span&gt;(n_purchase, purchase_amount), scale)) &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;as.data.table&lt;/span&gt;() &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; x.dt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;などとする。&lt;code&gt;across()&lt;/code&gt;の詳細はdplyrの公式ドキュメントを参照。&lt;/p&gt;
&lt;h3 id="欠損値処理"&gt;欠損値処理&lt;/h3&gt;
&lt;p&gt;NAをいずれかの列に含む行全体を削除（いわゆるリストワイズ法）→&lt;code&gt;na.omit()&lt;/code&gt;関数を使う&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# データフレーム&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x.df &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;na.omit&lt;/span&gt;(x.df)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# data.table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x.dt &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;na.omit&lt;/span&gt;(x.dt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# パイプを使う場合&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x.dt &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;lazy_dt&lt;/span&gt;() &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;na.omit&lt;/span&gt;() &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;as.data.table&lt;/span&gt;() &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; x.dt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;特定の値を代入する（以下の例では平均値）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# データフレーム&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x.df&lt;span style="color:#f92672"&gt;$&lt;/span&gt;n_purchase&lt;span style="color:#a6e22e"&gt;[is.na&lt;/span&gt;(x.df&lt;span style="color:#f92672"&gt;$&lt;/span&gt;n_purchase)] &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;mean&lt;/span&gt;(x.df&lt;span style="color:#f92672"&gt;$&lt;/span&gt;n_purchase, na.rm &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# data.table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x.dt&lt;span style="color:#a6e22e"&gt;[is.na&lt;/span&gt;(n_purchase), n_purchase &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;mean&lt;/span&gt;(n_purchase, na.rm &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T)]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一般的な欠損値処理についてはこのあたりを参照&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://smrmkt.hatenablog.jp/entry/2013/01/06/164758"&gt;kaggleで予測モデルを構築してみた (5) - Rで行うMultipleImputation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pediatricsurgery.hatenadiary.jp/entry/2016/11/20/233217"&gt;欠損値の種類と補完とRでのワークフロー&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;data.tableのままで（data.tableの性質を保持したままで）これらの処理をすることは不可能だが、データフレームに対しては実行できる。そのためdata.tableオブジェクトをそのままこれらの関数に渡し、処理結果のデータフレームを&lt;code&gt;as.data.table()&lt;/code&gt;でdata.table化する。&lt;/p&gt;
&lt;h3 id="外れ値処理"&gt;外れ値処理&lt;/h3&gt;
&lt;p&gt;以下の流れになる。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;各列に対する外れ値を検出&lt;/li&gt;
&lt;li&gt;外れ値を含む行を除外する→&lt;a href="/r/r-data-cleaning/#i"&gt;行の削除&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;各列に対する外れ値の検出はdata.tableに固有の方法はない。
スミルノフ・グラブス検定&lt;code&gt;grubbs.test() {outliers}&lt;/code&gt;などで外れ値の閾値を検出する。
たとえば&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;grubbs.test&lt;/span&gt;(x.dt&lt;span style="color:#f92672"&gt;$&lt;/span&gt;n_purchase_shoes)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Grubbs test &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; one outlier
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;data&lt;span style="color:#f92672"&gt;:&lt;/span&gt; x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;6.55290&lt;/span&gt;, U &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0.56187&lt;/span&gt;, p&lt;span style="color:#f92672"&gt;-&lt;/span&gt;value &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3.242e-12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alternative hypothesis&lt;span style="color:#f92672"&gt;:&lt;/span&gt; highest value &lt;span style="color:#ae81ff"&gt;50&lt;/span&gt; is an outlier
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;という結果が出たら、&lt;/p&gt;</description></item></channel></rss>