<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>R on Marketechlabo</title><link>https://www.marketechlabo.com/categories/r/</link><description>Recent content in R on Marketechlabo</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Mon, 03 Jan 2022 00:00:00 +0900</lastBuildDate><atom:link href="https://www.marketechlabo.com/categories/r/index.xml" rel="self" type="application/rss+xml"/><item><title>Rの細かいTipsまとめ（小さいTipsの寄せ集め）</title><link>https://www.marketechlabo.com/r/r-tips/</link><pubDate>Wed, 10 Jan 2018 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/r-tips/</guid><description>
&lt;p&gt;独立した記事にはならないが、それぞれ便利かつ重要な小さなRのTipsを紹介。&lt;/p&gt;
&lt;h2 id="チートシート"&gt;チートシート&lt;/h2&gt;
&lt;h3 id="ggplot2"&gt;ggplot2&lt;/h3&gt;
&lt;h4 id="qplot"&gt;&lt;code&gt;qplot()&lt;/code&gt;&lt;/h4&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:#a6e22e"&gt;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Width, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;iris, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;point&amp;#34;&lt;/span&gt;, color&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Species) &lt;span style="color:#75715e"&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;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;date, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;unemploy, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;economics, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;line&amp;#34;&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;&lt;span style="color:#a6e22e"&gt;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;feed, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;chickwts, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;bar&amp;#34;&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;&lt;span style="color:#a6e22e"&gt;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Width, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;iris, binwidth&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0.3&lt;/span&gt;, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;histogram&amp;#34;&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;&lt;span style="color:#a6e22e"&gt;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Width, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;iris, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;density&amp;#34;&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;&lt;span style="color:#a6e22e"&gt;qplot&lt;/span&gt;(y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;iris, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;boxplot&amp;#34;&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;&lt;span style="color:#a6e22e"&gt;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Species, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;iris, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;boxplot&amp;#34;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;# 箱ひげ図xy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Species, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;iris, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;violin&amp;#34;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;# バイオリンプロット&lt;/span&gt;
&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:#a6e22e"&gt;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Width, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;iris, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;c&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;point&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;smooth&amp;#34;&lt;/span&gt;), facets &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;round&lt;/span&gt;(Petal.Width) &lt;span style="color:#f92672"&gt;~&lt;/span&gt; Species) &lt;span style="color:#75715e"&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;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Species, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;iris, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;boxplot&amp;#39;&lt;/span&gt;, facets &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;round&lt;/span&gt;(Sepal.Width) &lt;span style="color:#f92672"&gt;~&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;round&lt;/span&gt;(Petal.Width))
&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:#a6e22e"&gt;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Width, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;iris, color&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Species, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;point&amp;#34;&lt;/span&gt;, xlim&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;c&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;NA&lt;/span&gt;), ylim&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;c&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;NA&lt;/span&gt;), main&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;散布図の例&amp;#34;&lt;/span&gt;, xlab&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;がくの幅&amp;#34;&lt;/span&gt;, ylab&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;がくの長さ&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="ggplot"&gt;&lt;code&gt;ggplot()&lt;/code&gt;&lt;/h4&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;p1 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ggplot&lt;/span&gt;(iris, &lt;span style="color:#a6e22e"&gt;aes&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Width, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length, color&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Species)) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;geom_point&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;p2 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ggplot&lt;/span&gt;(economics, &lt;span style="color:#a6e22e"&gt;aes&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;date, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;unemploy)) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;geom_line&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;p3 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ggplot&lt;/span&gt;(chickwts, &lt;span style="color:#a6e22e"&gt;aes&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;feed)) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;geom_bar&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;p4 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ggplot&lt;/span&gt;(iris, &lt;span style="color:#a6e22e"&gt;aes&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Width)) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;geom_histogram&lt;/span&gt;(binwidth&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0.3&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;p5 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ggplot&lt;/span&gt;(iris, &lt;span style="color:#a6e22e"&gt;aes&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Width)) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;geom_density&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;p6 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ggplot&lt;/span&gt;(iris, &lt;span style="color:#a6e22e"&gt;aes&lt;/span&gt;(y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length)) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;geom_boxplot&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;p7 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ggplot&lt;/span&gt;(iris, &lt;span style="color:#a6e22e"&gt;aes&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Species, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length)) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;geom_boxplot&lt;/span&gt;() &lt;span style="color:#75715e"&gt;# 箱ひげ図xy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p8 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ggplot&lt;/span&gt;(iris, &lt;span style="color:#a6e22e"&gt;aes&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Species, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Sepal.Length)) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;geom_violin&lt;/span&gt;() &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;geom_boxplot&lt;/span&gt;(width&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;.1&lt;/span&gt;, fill&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;black&amp;#34;&lt;/span&gt;, outlier.colour&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;NA&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;stat_summary&lt;/span&gt;(fun&lt;span style="color:#f92672"&gt;=&lt;/span&gt;median, geom&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;point&amp;#34;&lt;/span&gt;, fill&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;white&amp;#34;&lt;/span&gt;, shape&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;21&lt;/span&gt;, size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2.5&lt;/span&gt;) &lt;span style="color:#75715e"&gt;# バイオリンプロット&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;高度なチャート&lt;/p&gt;</description></item><item><title>Rでローデータの読み込み（データフレーム、data.table、webデータの取得）</title><link>https://www.marketechlabo.com/r/r-read-rawdata/</link><pubDate>Thu, 18 Jan 2018 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/r-read-rawdata/</guid><description>
&lt;p&gt;Rを使ったデータ前処理の方法を解説する。
データフレーム形式だけでなく、大きなデータを扱うのに高速なdata.tableを使ったデータの前処理の方法も解説する。
まず一般的にデータの前処理の手順は以下のようなものである。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ローデータの読み込み&lt;/li&gt;
&lt;li&gt;データの整形（分析用データセットの生成。データの持つ情報は保持）
&lt;ul&gt;
&lt;li&gt;データの型確認&lt;/li&gt;
&lt;li&gt;必要な（分析対象とする）列の抽出&lt;/li&gt;
&lt;li&gt;列名の変更&lt;/li&gt;
&lt;li&gt;データ変換
&lt;ul&gt;
&lt;li&gt;データの型変換&lt;/li&gt;
&lt;li&gt;日時データの生成&lt;/li&gt;
&lt;li&gt;因子データの生成（ordered）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;データクリーニング（正しく分析できるように必要に応じて情報を一部削る）
&lt;ul&gt;
&lt;li&gt;行の削除（抽出）&lt;/li&gt;
&lt;li&gt;行の並べ替え（ソート）&lt;/li&gt;
&lt;li&gt;標準化（scale）&lt;/li&gt;
&lt;li&gt;欠損値処理&lt;/li&gt;
&lt;li&gt;外れ値処理&lt;/li&gt;
&lt;li&gt;結合&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;変数の追加と削除
&lt;ul&gt;
&lt;li&gt;変数の追加
&lt;ul&gt;
&lt;li&gt;コーディング／グルーピング&lt;/li&gt;
&lt;li&gt;合成変数の生成&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;変数の削除&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この順を追って、データの前処理の方法を解説する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/gigamori/items/0152639dc0a68a400525"&gt;データフレームを使ったデータの前処理の方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.okadajp.org/RWiki/?R%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0"&gt;Rでデータクリーニング - RjpWiki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;※data.tableオブジェクトはデータフレームクラスにも属しているため、多くの場合でデータフレームのように扱うことができるが、data.tableで扱う方が高速である。
data.tableをデータフレームと比べた時に気をつけるべき大きな違いは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;日付でPOSIXltは使えない&lt;/li&gt;
&lt;li&gt;rownamesを使わない&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ワーキングディレクトリのセット"&gt;ワーキングディレクトリのセット&lt;/h2&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-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;setwd(&amp;#39;/home/ruser/data/&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="テキストファイルcsvの読み込み"&gt;テキストファイル（CSV）の読み込み&lt;/h2&gt;
&lt;h3 id="データフレーム"&gt;データフレーム&lt;/h3&gt;
&lt;p&gt;万能の（オプションを詳細に指定する必要があるが）&lt;code&gt;read.table()&lt;/code&gt;、CSVファイルの読み込みに特化した&lt;code&gt;read.csv()&lt;/code&gt;、タブ区切りテキストの読み込みに特化した&lt;code&gt;read.delim()&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.df &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;read.csv&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;filename.csv&amp;#39;&lt;/span&gt;, stringsAsFactors &lt;span style="color:#f92672"&gt;=&lt;/span&gt; F, fileEncoding &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;UTF-8-BOM&amp;#39;&lt;/span&gt;, na.strings &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;ヘッダ &lt;code&gt;header = T/F&lt;/code&gt;&lt;br&gt;
デフォルトで&lt;code&gt;read.csv()&lt;/code&gt;はヘッダあり、&lt;code&gt;read.table()&lt;/code&gt;はヘッダなし&lt;/li&gt;
&lt;li&gt;文字コード &lt;code&gt;fileEncoding = &amp;quot;文字コード名&amp;quot;&lt;/code&gt;&lt;br&gt;
Windowsで作ったCSVを読み込む際BOMが付いていることがあるので、その場合は&lt;code&gt;fileEncoding = &amp;quot;UTF-8-BOM&amp;quot;&lt;/code&gt;とする&lt;/li&gt;
&lt;li&gt;区切り文字 &lt;code&gt;sep = '区切り文字'&lt;/code&gt;&lt;br&gt;
&lt;code&gt;read.table()&lt;/code&gt;では指定必須（デフォルトで空白が区切り文字になる）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文字列の扱い&lt;/strong&gt; &lt;code&gt;stringsAsFactors = T/F&lt;/code&gt;&lt;br&gt;
文字列が自動的に&lt;code&gt;factor&lt;/code&gt;型になるので、不都合な場合は&lt;code&gt;stringsAsFactors = F&lt;/code&gt;を指定する&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;欠損値（&lt;code&gt;NA&lt;/code&gt;）の扱い&lt;/strong&gt; &lt;code&gt;na.strings = c('文字列', '文字列')&lt;/code&gt;&lt;br&gt;
デフォルトでは&lt;code&gt;NA&lt;/code&gt;という文字列のみがNAと認識される。1種類であれば文字列で与える。複数種類であればベクトルで与える。データベースからエクスポートしたCSVなどで&lt;code&gt;NULL&lt;/code&gt;という文字列を欠損値扱いする場合は&lt;code&gt;na.strings = 'NULL'&lt;/code&gt;、空文字を欠損値扱いする場合は&lt;code&gt;na.strings = ''&lt;/code&gt;を指定する（そうしないと空文字は長さ0の文字列として認識される）。&lt;/li&gt;
&lt;li&gt;変数名と変数の型&lt;br&gt;
バッチ処理では変数が決まっているので変数名と型をあらかじめ指定して読み込むことができる。&lt;br&gt;
&lt;code&gt;col.names=c(&amp;quot;pid&amp;quot;, &amp;quot;pageName&amp;quot;, &amp;quot;sales&amp;quot;, ...)&lt;/code&gt;&lt;br&gt;
&lt;code&gt;colClasses=c(&amp;quot;integer&amp;quot;, &amp;quot;character&amp;quot;, &amp;quot;numeric&amp;quot;, ...)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="datatable"&gt;data.table&lt;/h3&gt;
&lt;p&gt;サイズの大きいファイルの読み込みが速い。巨大なファイルの読み込みはこれを使う一手。
カンマ区切りテキスト、その他区切りテキストいずれも同じ関数&lt;code&gt;fread()&lt;/code&gt;で読み込む。&lt;/p&gt;</description></item><item><title>Rでデータの整形（列のデータ型確認、列の抽出、列名の変更、列の型変換）</title><link>https://www.marketechlabo.com/r/r-var-type/</link><pubDate>Fri, 19 Jan 2018 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/r-var-type/</guid><description>
&lt;p&gt;ローデータから分析対象とする変数のみ抽出し（個人情報など、保持すべきでない変数を削除するなど）、&lt;strong&gt;情報を失わない範囲で&lt;/strong&gt;分析するためのデータセットを作る。分析プロジェクトにおけるローデータと同じ量の情報を持つ、整形された（扱いやすい）データセットを作るのである。
この後のデータクレンジング以降で、データの加工方法を変更するなどで手戻りが発生することもある。その際ローデータの読み込みまで戻るのは大変なので、ローデータを同じ情報を持つ、整形された状態のデータを作っておくのが重要である。データクレンジングで手戻りが発生しても、ここで整形したデータセットまで戻ればいい。&lt;/p&gt;
&lt;h2 id="dtplyrについて"&gt;dtplyrについて&lt;/h2&gt;
&lt;p&gt;本記事ではdata.table（例：&lt;code&gt;fread()&lt;/code&gt;で読み込んだ&lt;code&gt;customer.dt&lt;/code&gt;）の操作にライブラリ{dtplyr}を使う。&lt;code&gt;lazy_dt()&lt;/code&gt;でdata.tableをラップし、&lt;code&gt;select&lt;/code&gt;, &lt;code&gt;mutate&lt;/code&gt;, &lt;code&gt;rename&lt;/code&gt;などの関数で列の抽出・型変換を行う。&lt;code&gt;library(dtplyr)&lt;/code&gt;を読み込んでおくこと。&lt;/p&gt;
&lt;h2 id="変数の型"&gt;変数の型&lt;/h2&gt;
&lt;h3 id="データの型確認"&gt;データの型確認&lt;/h3&gt;
&lt;p&gt;関数&lt;code&gt;str()&lt;/code&gt;を使う。これはデータフレーム、data.table同様に使える関数である。&lt;/p&gt;
&lt;h4 id="データフレーム"&gt;データフレーム&lt;/h4&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:#a6e22e"&gt;str&lt;/span&gt;(customer.df)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="datatable"&gt;data.table&lt;/h4&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:#a6e22e"&gt;str&lt;/span&gt;(customer.dt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;customer.dt &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;str&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="基本的なデータの型の種類"&gt;基本的なデータの型の種類&lt;/h3&gt;
&lt;h4 id="boolean"&gt;boolean&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;logical&lt;/code&gt;: &lt;code&gt;TRUE&lt;/code&gt; or &lt;code&gt;FALSE&lt;/code&gt;、短縮して&lt;code&gt;T&lt;/code&gt; or &lt;code&gt;F&lt;/code&gt;としても可能&lt;/p&gt;
&lt;h4 id="数値"&gt;数値&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;整数は&lt;code&gt;integer&lt;/code&gt;&lt;br&gt;
明示的に&lt;code&gt;integer&lt;/code&gt;として扱うには&lt;code&gt;x &amp;lt;- 5L&lt;/code&gt;のように&lt;code&gt;L&lt;/code&gt;を付ける&lt;/li&gt;
&lt;li&gt;小数を含めると&lt;code&gt;numeric&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;bigint相当は&lt;code&gt;library(bit64)&lt;/code&gt;を使うと&lt;code&gt;integer64&lt;/code&gt;として指定できる。&lt;code&gt;fread()&lt;/code&gt;で読み込んだ場合、32bit範囲内の整数は通常の&lt;code&gt;integer&lt;/code&gt;型、それを超える大きな整数のみ&lt;code&gt;integer64&lt;/code&gt;型として読み込まれる。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="文字列の扱い"&gt;文字列の扱い&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;単純な文字列&lt;code&gt;character&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;カテゴリカル変数として扱うには&lt;code&gt;factor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;順序つきカテゴリカル変数として扱う場合&lt;code&gt;ordered&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="分析対象とする列の抽出列名の変更"&gt;分析対象とする列の抽出、列名の変更&lt;/h2&gt;
&lt;h3 id="列の抽出削除"&gt;列の抽出、削除&lt;/h3&gt;
&lt;h4 id="データフレーム-1"&gt;データフレーム&lt;/h4&gt;
&lt;p&gt;指定した列を削除する。&lt;code&gt;列名 &amp;lt;- NULL&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;customer.df&lt;span style="color:#f92672"&gt;$&lt;/span&gt;firstname &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="datatable-1"&gt;data.table&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;lazy_dt()&lt;/code&gt;でdata.tableをラップし、&lt;code&gt;select()&lt;/code&gt;で残す列を指定、最後に&lt;code&gt;as.data.table()&lt;/code&gt;で元の形式に戻す。&lt;code&gt;select()&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;customer.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; dtplyr&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;select&lt;/span&gt;(列名, &lt;span style="color:#66d9ef"&gt;...&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;as.data.table&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;select()&lt;/code&gt;関数名が他のパッケージと重複するので、&lt;code&gt;dtplyr::select()&lt;/code&gt;と指定するのが安全である。&lt;/p&gt;
&lt;h3 id="列名の変更"&gt;列名の変更&lt;/h3&gt;
&lt;h4 id="データフレーム-2"&gt;データフレーム&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;names()&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:#a6e22e"&gt;names&lt;/span&gt;(customer.df)&lt;span style="color:#a6e22e"&gt;[names&lt;/span&gt;(customer.df) &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;旧列名&amp;#34;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;新列名&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="datatable-2"&gt;data.table&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;rename(新列名 = 旧列名)&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;customer.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;rename&lt;/span&gt;(新列名 &lt;span style="color:#f92672"&gt;=&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;as.data.table&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="列の型変換"&gt;列の型変換&lt;/h2&gt;
&lt;h3 id="データフレーム-3"&gt;データフレーム&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;as.factor()&lt;/code&gt;で文字列列をカテゴリ変数に、&lt;code&gt;as.logical()&lt;/code&gt;で条件式の結果をTRUE/FALSEに変換する。&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;customer.df&lt;span style="color:#f92672"&gt;$&lt;/span&gt;reg_store&lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;as.factor&lt;/span&gt;(customer.df&lt;span style="color:#f92672"&gt;$&lt;/span&gt;reg_store)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;customer.df&lt;span style="color:#f92672"&gt;$&lt;/span&gt;older &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;as.logical&lt;/span&gt;(customer.df&lt;span style="color:#f92672"&gt;$&lt;/span&gt;age&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;40&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="datatable-3"&gt;data.table&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;mutate(列名 = 変換処理の関数(列名))&lt;/code&gt;で列を上書きする。&lt;code&gt;$&lt;/code&gt;による直接代入と同等の結果になる。&lt;/p&gt;</description></item><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><item><title>Rでデータセットの抽出（行の抽出、並べ替え、サンプリング、分割）</title><link>https://www.marketechlabo.com/r/r-process-rows/</link><pubDate>Tue, 23 Jan 2018 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/r-process-rows/</guid><description>
&lt;p&gt;前のページではデータフレーム、data.tableの列（変数）の処理について解説したが、今度は行の抽出、並べ替え、サンプリング、分割といった行の処理についてまとめる。&lt;/p&gt;
&lt;h2 id="行の削除抽出"&gt;行の削除（抽出）&lt;/h2&gt;
&lt;h3 id="データフレーム"&gt;データフレーム&lt;/h3&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;ad_log &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; ad_log[ad_log&lt;span style="color:#f92672"&gt;$&lt;/span&gt;imp&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1000&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; ad_log&lt;span style="color:#f92672"&gt;$&lt;/span&gt;click&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;, , drop&lt;span style="color:#f92672"&gt;=&lt;/span&gt;F]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ad_log &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;with&lt;/span&gt;(ad_log, ad_log[imp&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1000&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; click&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;, , drop&lt;span style="color:#f92672"&gt;=&lt;/span&gt;F])
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上下は同じ。&lt;code&gt;with()&lt;/code&gt;関数はバッチの中でも使えるので便利。
&lt;strong&gt;データフレームの抽出・絞り込みでは第3添字に&lt;code&gt;drop=FALSE&lt;/code&gt;を付けること！&lt;/strong&gt;
行列の添え字に&lt;code&gt;drop=FALSE&lt;/code&gt;を付けないと1行（列）のみマッチの場合にベクトルとして返す。そうなるとデータフレームを想定してその後の処理に&lt;code&gt;rbind()&lt;/code&gt;をしていたのができなくなるなど、行列処理に思わぬ不具合をきたすことになる。
&lt;code&gt;drop=FALSE&lt;/code&gt;を付けて1行n列の行列を返すように。
ただし&lt;code&gt;tapply()&lt;/code&gt;などで使う1列取得の際は付けてはならない。ベクトルとして処理する必要がある。&lt;/p&gt;
&lt;h3 id="datatable"&gt;data.table&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;n_purchase &amp;lt; 10&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;# dtplyrのパイプを使う場合&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;filter&lt;/span&gt;(n_purchase &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&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;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;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[n_purchase &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&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;n_purchase &amp;lt; 10&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;# dtplyrのパイプを使う場合&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;filter&lt;/span&gt;(&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:#ae81ff"&gt;10&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;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;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;!&lt;/span&gt;(n_purchase &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&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;複数条件（AND）&lt;/p&gt;
&lt;p&gt;dtplyrのパイプを使う場合&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;# dtplyrのパイプを使う場合&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;filter&lt;/span&gt;(n_purchase &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;, interval_latest_purchase &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;30&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;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;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[n_purchase &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; interval_latest_purchase &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;30&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;filter()&lt;/code&gt;を使う場合でも&lt;code&gt;&amp;amp;&lt;/code&gt;で条件を結合していい。&lt;/p&gt;
&lt;p&gt;複数条件（OR）&lt;/p&gt;
&lt;p&gt;dtplyrのパイプを使う場合&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;# dtplyrのパイプを使う場合&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;filter&lt;/span&gt;(n_purchase &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; interval_latest_purchase &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;30&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;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;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[n_purchase &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; interval_latest_purchase &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;30&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;|&lt;/code&gt;で条件を結合する。&lt;/p&gt;</description></item><item><title>RとExcel（ファイルの読み書き、データフレームをExcelで編集）</title><link>https://www.marketechlabo.com/r/r-openxlsx/</link><pubDate>Thu, 17 May 2018 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/r-openxlsx/</guid><description>
&lt;p&gt;RでExcelファイル（.xlsx）を読み書きするライブラリはいくつかあるが、openxlsxが多機能でかつ使いやすい。Javaも不要なのでインストールや動作も軽い。古いファイル（.xls）には非対応だが、現行のファイル（.xlsx）のみ対応でよければこれがおすすめ。&lt;/p&gt;
&lt;h2 id="excelファイルの読み込み"&gt;Excelファイルの読み込み&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;read.xlsx()&lt;/code&gt;関数を使う。
たとえばファイル&lt;code&gt;C:/Users/fukuyama/Documents/master.xlsx&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;m_user.df &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;read.xlsx&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;C:/Users/fukuyama/Documents/master.xlsx&amp;#39;&lt;/span&gt;, na.strings &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;, sheet &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;ユーザ&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;na.strings&lt;/code&gt;を指定しないと「&lt;code&gt;NA&lt;/code&gt;」という文字列を欠損値扱いする。基本的にはいつも空文字を欠損値扱いするようにしておいたほうが安全である。&lt;/p&gt;
&lt;h2 id="excelファイル書き出し"&gt;Excelファイル書き出し&lt;/h2&gt;
&lt;h3 id="単純にテーブルをそのまま出力するだけ"&gt;単純にテーブルをそのまま出力するだけ&lt;/h3&gt;
&lt;p&gt;書式など細かいカスタマイズをせず、単にテーブルを出力するだけであれば&lt;code&gt;write.xlsx()&lt;/code&gt;関数を使えばいい。
出力したxlsxファイルを開くのが&lt;code&gt;openXL()&lt;/code&gt;関数である。
複数のテーブルをシート別にまとめて1個のファイルで出力し、それを開く場合&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:#a6e22e"&gt;list&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;IRIS&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; iris,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;CO2&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; CO2,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;USArrests&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; USArrests
&lt;/span&gt;&lt;/span&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;write.xlsx&lt;/span&gt;(file &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;data.xlsx&amp;#39;&lt;/span&gt;, rowNames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; F)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;openXL&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;data.xlsx&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;ヘッダ &lt;code&gt;colNames = T/F&lt;/code&gt;&lt;br&gt;
デフォルトでヘッダあり、&lt;code&gt;colNames=F&lt;/code&gt;でヘッダなし。&lt;/li&gt;
&lt;li&gt;行番号 &lt;code&gt;rowNames = T/F&lt;/code&gt;
デフォルトで行番号の列なし、&lt;code&gt;rowNames=T&lt;/code&gt;で行番号を付ける。&lt;/li&gt;
&lt;li&gt;フィルタ &lt;code&gt;withFilter= T/F&lt;/code&gt;
デフォルトでフィルタは付けない。&lt;code&gt;withFilter=T&lt;/code&gt;でフィルタを付ける。&lt;/li&gt;
&lt;li&gt;Excelのテーブルフォーマットにする &lt;code&gt;asTable = T/F&lt;/code&gt;&lt;br&gt;
デフォルトではテーブルフォーマットにしないが、&lt;code&gt;asTable=T&lt;/code&gt;でテーブルにする。&lt;/li&gt;
&lt;/ul&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;mail_delivery.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;group_by&lt;/span&gt;(segment_id) &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;summarise&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;n&lt;/span&gt;(),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n_open &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;is.na&lt;/span&gt;(datetime_open)),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n_click &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;is.na&lt;/span&gt;(datetime_click))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&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;write.xlsx&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;mail_response.xlsx&amp;#39;&lt;/span&gt;) &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;openXL&lt;/span&gt;()
&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:#a6e22e"&gt;write.xlsx&lt;/span&gt;(mail.glm, file &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;mail_regression.xlsx&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;いくつかの分析結果オブジェクトを直接Excelファイルにすることができる。&lt;/p&gt;
&lt;h3 id="書式などを指定して出力する"&gt;書式などを指定して出力する&lt;/h3&gt;
&lt;p&gt;書式などを細かく指定するなら&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;createWorkbook()&lt;/code&gt;でワークブックインスタンスを作り&lt;/li&gt;
&lt;li&gt;&lt;code&gt;addWorksheet()&lt;/code&gt;でシートを作り&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writeData()&lt;/code&gt;でデータを出力し&lt;/li&gt;
&lt;li&gt;&lt;code&gt;addStyle()&lt;/code&gt;などで書式を設定し&lt;/li&gt;
&lt;li&gt;&lt;code&gt;saveWorkbook()&lt;/code&gt;で書き込みコミットする&lt;/li&gt;
&lt;/ol&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;wb &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;createWorkbook&lt;/span&gt;()
&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;&lt;span style="color:#75715e"&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;addWorksheet&lt;/span&gt;(wb, &lt;span style="color:#e6db74"&gt;&amp;#39;カテゴリマスタ&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;addWorksheet&lt;/span&gt;(wb, &lt;span style="color:#e6db74"&gt;&amp;#39;商品マスタ&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;addWorksheet&lt;/span&gt;(wb, &lt;span style="color:#e6db74"&gt;&amp;#39;カテゴリ別新規購入率&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;addWorksheet&lt;/span&gt;(wb, &lt;span style="color:#e6db74"&gt;&amp;#39;カテゴリ別リピート率&amp;#39;&lt;/span&gt;)
&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;&lt;span style="color:#75715e"&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;writeData&lt;/span&gt;(wb, sheet &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, rowNames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, category.dt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;writeData&lt;/span&gt;(wb, sheet &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, rowNames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, product.dt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;writeData&lt;/span&gt;(wb, sheet &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;, rowNames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, new_purchase.dt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;writeData&lt;/span&gt;(wb, sheet &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;, rowNames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, repeat.dt)
&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;&lt;span style="color:#75715e"&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;modifyBaseFont&lt;/span&gt;(wb, fontSize &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;11&lt;/span&gt;, fontColour &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;#000000&amp;#34;&lt;/span&gt;, fontName &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;MS PGothic&amp;#34;&lt;/span&gt;)
&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;&lt;span style="color:#75715e"&gt;# 条件付き書式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (.i &lt;span style="color:#66d9ef"&gt;in&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;c&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;)) {
&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; &lt;span style="color:#a6e22e"&gt;addStyle&lt;/span&gt;(wb, .i, cols&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;, rows&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;, gridExpand &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, style &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;createStyle&lt;/span&gt;(numFmt &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;0.0%&amp;#39;&lt;/span&gt;))
&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; &lt;span style="color:#a6e22e"&gt;conditionalFormatting&lt;/span&gt;(wb, .i, cols&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;, rows&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;, rule&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&amp;lt;0.01&amp;#34;&lt;/span&gt;, gridExpand &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, style &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;createStyle&lt;/span&gt;(fontColour &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;#9C0006&amp;#34;&lt;/span&gt;, bgFill &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;#FFC7CE&amp;#34;&lt;/span&gt;))
&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;
&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;&lt;span style="color:#a6e22e"&gt;saveWorkbook&lt;/span&gt;(wb, &lt;span style="color:#e6db74"&gt;&amp;#34;products.xlsx&amp;#34;&lt;/span&gt;, overwrite &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TRUE&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="データをexcel上で編集する"&gt;データをExcel上で編集する&lt;/h2&gt;
&lt;p&gt;Excelファイルの入出力ではないが、Rのデータ（データフレームや行列）をExcel上で編集することができる。
表計算のグリッドが使えるので操作性は抜群。RのCUIの欠点であるデータが見づらい、編集しにくいという点を完全に補ってくれるので知っておくと大変便利。
パッケージ{XLConnect}をインストールして以下のコマンドを実行するだけ。XLConnectはJavaに依存しており、近年のRユーザ環境ではJavaのセットアップがハードルになることがある。&lt;/p&gt;</description></item><item><title>Rで時系列分析の簡単なまとめ</title><link>https://www.marketechlabo.com/r/r-time-series-analysis/</link><pubDate>Thu, 16 Aug 2018 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/r-time-series-analysis/</guid><description>
&lt;h2 id="時系列のアプローチ"&gt;時系列のアプローチ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;単系列
&lt;ul&gt;
&lt;li&gt;ざっと見る&lt;/li&gt;
&lt;li&gt;定常性の確認&lt;/li&gt;
&lt;li&gt;ARIMA/SARIMAモデルをあてはめる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;複数系列の関係→VAR（ベクトル自己回帰）モデル&lt;/li&gt;
&lt;li&gt;その他の変数がある（時系列＋回帰）→状態空間モデル&lt;/li&gt;
&lt;li&gt;（単なるラグ変数回帰→目的変数自体の時系列性が反映されない）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ライブラリ&lt;code&gt;{forecast}&lt;/code&gt;を使う
以下、データは&lt;code&gt;y.ts&lt;/code&gt;とする&lt;/p&gt;
&lt;h2 id="時系列のデータ形式"&gt;時系列のデータ形式&lt;/h2&gt;
&lt;p&gt;時系列データにはいくつかの形式がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ts: Rの基本の時系列オブジェクト。ほとんどの時系列ライブラリはこの形式の時系列データを扱う&lt;/li&gt;
&lt;li&gt;xts: データフレームとtsの間に位置づけられる、時系列データを便利に扱えるようにした形式&lt;/li&gt;
&lt;li&gt;zoo: データフレームとxtsの間の形式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;われわれが一般的に扱うデータ形式はデータフレームで、時系列データも元はCSVやデータベースなどからデータフレームの形式で与えられることが多い。たとえば日付を表す列と値の列がそれぞれ存在したり、1枚のデータフレームに複数列（つまり複数の時系列変数）が収まっていたりする。一方でtsは単系列で日付データではなくサイクルの周期を属性として持つなど、データフレームとは形式が大きく異なり、そのままでは扱いにくい。zooは直接知らなくてもいい。&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;xts &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ts＋カレンダー機能＋複数系列
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="データフレームをxtsに変換する"&gt;データフレームをxtsに変換する&lt;/h3&gt;
&lt;h4 id="readzooを使う"&gt;&lt;code&gt;read.zoo()&lt;/code&gt;を使う&lt;/h4&gt;
&lt;p&gt;データフレーム&lt;code&gt;x.df&lt;/code&gt;をxts形式の&lt;code&gt;x.xts&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:#a6e22e"&gt;as.xts&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;read.zoo&lt;/span&gt;(x.df))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;x.df&lt;/code&gt;に日時形式の列（Date, POSIXct）が含まれていればその列が時を表すindexになる。時を表すカラムは&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:#a6e22e"&gt;as.xts&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;read.zoo&lt;/span&gt;(x.df, index.column &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;などのように番号や列名でも指定できる。&lt;/p&gt;
&lt;h4 id="datatableを使う"&gt;data.tableを使う&lt;/h4&gt;
&lt;p&gt;日時を表す列（Date, POSIXct）を含むdata.table形式であれば&lt;code&gt;as.xts.data.table()&lt;/code&gt;で直接xtsに変換できる。&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:#a6e22e"&gt;as.xts.data.table&lt;/span&gt;(x.dt)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;xtsオブジェクトからtsオブジェクトを生成する&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;var1.ts &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ts&lt;/span&gt;(x.xts[,&lt;span style="color:#e6db74"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;], freq&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;7&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ざっと見る"&gt;ざっと見る&lt;/h2&gt;
&lt;h3 id="コレログラム"&gt;コレログラム&lt;/h3&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:#a6e22e"&gt;acf&lt;/span&gt;(y.ts)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="トレンド成分季節成分を抽出してプロット"&gt;トレンド成分、季節成分を抽出してプロット&lt;/h3&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.stl &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;stl&lt;/span&gt;(y.ts,s.window&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;periodic&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;plot&lt;/span&gt;(x.stl)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="定常性の確認"&gt;定常性の確認&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ADF検定&lt;/li&gt;
&lt;li&gt;KPSS検定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;定常になるまで階差を取る&lt;/p&gt;
&lt;h2 id="armaarimasarimaモデル"&gt;ARMA/ARIMA/SARIMAモデル&lt;/h2&gt;
&lt;p&gt;パラメータを以下の通りとする
SARIMA(p,d,q)(P,D,Q)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;p: p for AR(p)（自己回帰部分の次数）&lt;/li&gt;
&lt;li&gt;q: q for MA(q)（移動平均部分の次数）&lt;/li&gt;
&lt;li&gt;d: diff（d階の階差モデル）&lt;/li&gt;
&lt;li&gt;P: P for AR(P) of seasonal part（季節成分の自己回帰部分の次数）&lt;/li&gt;
&lt;li&gt;Q: Q for MA(q) of seasonal part（季節成分の移動平均部分の次数）&lt;/li&gt;
&lt;li&gt;D: diff of seasonal part（季節成分の階差の階数）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="次数を指定して推定"&gt;次数を指定して推定&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;arima()&lt;/code&gt;を使う&lt;/p&gt;</description></item><item><title>Rのdata.tableパッケージの使える関数一覧</title><link>https://www.marketechlabo.com/r/r-data-table-functions/</link><pubDate>Mon, 28 Jan 2019 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/r-data-table-functions/</guid><description>
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="data.table"
class="image_figure image_internal image_unprocessed"
src="/images/analytics/data-table-grouping.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
Rのdata.tableはデータフレームを高速に扱えるように改良した形式だが、この機能を提供するdata.tableパッケージには添え字を使ったdata.tableの処理機能だけでなく、さまざまな関数が実装されている。
中にはdata.table以外の形式にも使える関数もあり、&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;dt[,col1&lt;span style="color:#f92672"&gt;:=&lt;/span&gt;関数()]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;の形式で使えるdata.table用の関数にも一般的に知られていない便利なものが数多くある。
特に高速化を意識しているものが多く、知っていると処理時間を短縮できる。
data.tableはdplyrとセットで使われることも多いが、dplyr自体はdata.tableの高速仕様にのっとったものではない（tibble形式）ため、正直遅い。
集計など同じアウトプットは出せるが、処理速度に断然違いがあるので、実はdata.tableパッケージを使いこなすのがオススメ（コード自体はdplyrに準拠したほうが読みやすいが）
data.tableのマニュアルの全関数を精査し、一般的に使えそうなもののみをピックアップしてまとめた。&lt;/p&gt;
&lt;h2 id="ファイル入出力"&gt;ファイル入出力&lt;/h2&gt;
&lt;p&gt;ファイルを読み込んでdata.tableを生成する&lt;code&gt;fread()&lt;/code&gt;関数
&lt;strong&gt;data.tableだけでなくデータフレームもCSVファイルに出力できる&lt;/strong&gt;&lt;code&gt;fwrite()&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;dt1 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fread&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;data.csv&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;fwrite&lt;/span&gt;(dt1, file&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;data.csv&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="参照で値が書き換わる対策"&gt;参照で値が書き換わる対策&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;setDT()&lt;/code&gt;などの時に参照で書き換わってしまうため、退避させたいときに&lt;code&gt;copy()&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;dt1 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;data.table&lt;/span&gt;(x1&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;, y1&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;6&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dt2 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; dt1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dt3 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;copy&lt;/span&gt;(dt1)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;setDF&lt;/span&gt;(dt1)
&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;&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;(dt2)
&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;&lt;span style="color:#e6db74"&gt;&amp;#39;data.frame&amp;#39;&lt;/span&gt;
&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;&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;(dt3)
&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;&lt;span style="color:#e6db74"&gt;&amp;#39;data.table&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;data.frame&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;dt2の参照がdt1なのであり、dt1を書き換えるとdt2も書き換わってしまう。
そこで&lt;code&gt;copy()&lt;/code&gt;関数を使ってdt3を生成しておくと、元のdata.tableとして保持されている。&lt;/p&gt;
&lt;h2 id="特殊な構文"&gt;特殊な構文&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;%&lt;/code&gt;を使った構文や&lt;code&gt;.SD&lt;/code&gt;などのシンボル&lt;/p&gt;
&lt;h3 id="絞り込み条件"&gt;絞り込み条件&lt;/h3&gt;
&lt;p&gt;文字列比較（data.table以外のデータ形式でも使える）
値が指定した集合（ベクトル）に含まれるかどうかの判定。文字列では&lt;code&gt;%in%&lt;/code&gt;でなく&lt;code&gt;%chin%&lt;/code&gt;を使うと高速。
&lt;code&gt;%like%&lt;/code&gt;を使うと正規表現マッチが使える。&lt;code&gt;stringr::str_match()&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;dt1[col1 &lt;span style="color:#f92672"&gt;%chin%&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;c&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Jan&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;Feb&amp;#39;&lt;/span&gt;),]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dt1[col1 &lt;span style="color:#f92672"&gt;%like%&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;^(Jan|Feb)&amp;#39;&lt;/span&gt;,]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;数値比較（data.table以外のデータ形式でも使える）
&lt;code&gt;%between%&lt;/code&gt;が特徴的。以下の例では&lt;code&gt;col1 &amp;gt;=2 &amp;amp; col1 &amp;lt;= 5&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;dt1[col1 &lt;span style="color:#f92672"&gt;%between%&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;c&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;),]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dt1[col1 &lt;span style="color:#f92672"&gt;%in%&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;,]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="特殊なシンボル"&gt;特殊なシンボル&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.SD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.BY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.N&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.I&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.GRP&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="日時"&gt;日時&lt;/h2&gt;
&lt;p&gt;Rの日時処理では時間がかかることが多いが、それを高速化した拡張形式を提供している。
&lt;strong&gt;data.tableの中以外でも使えるのでおすすめ&lt;/strong&gt;。
高速なDate形式: IDate形式
DateはIDate形式にしておくと高速に扱える。以下のようにDateとして認識できる文字列をそのまま引数にしてもいい。&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:#a6e22e"&gt;as.IDate&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;2001-01-01&amp;#34;&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.IDate&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;20010101&amp;#34;&lt;/span&gt;, format&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;%Y%m%d&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;高速なTime形式: ITime形式
時刻はITime形式にしておくと高速に扱える。ただし日付情報は保持していない（日内の時刻）のでタイムスタンプとしてはIDateとセットで使う必要がある。&lt;/p&gt;</description></item><item><title>Google ColaboratoryでRを使う</title><link>https://www.marketechlabo.com/r/google-colaboratory-with-r/</link><pubDate>Mon, 10 Jun 2019 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/google-colaboratory-with-r/</guid><description>
&lt;p&gt;無料でPythonの実行環境を使わせてもらえるGoogle Colaboratory（以下、Colab）。現在の無料枠でも、T4やL4などの高性能なGPU、約12GB〜16GBのメモリ、そして100GB前後のディスクスペースが利用できる強力な環境であり、手元のPCよりハイスペックな人も多いだろう。&lt;/p&gt;
&lt;p&gt;データサイエンスの分野ではPythonが主流である一方で、Rユーザにとっては「PythonだけでなくRでも使えたらいいのに」と思うところである。実は、Colabのインスタンスには標準でRの環境が用意されており、用途に応じて複数のアプローチでRを利用することができる。この記事では、最新環境に合わせてColabでRを使い倒す方法と、その高速化テクニックを網羅的に解説する。&lt;/p&gt;
&lt;h2 id="rを使う3つの方法"&gt;Rを使う3つの方法&lt;/h2&gt;
&lt;p&gt;Colab上でRを実行するには、主に以下の3つのアプローチが存在する。用途やPythonとの連携の必要性に応じて使い分けるのがよい。&lt;/p&gt;
&lt;h3 id="スクリプトの実行"&gt;スクリプトの実行&lt;/h3&gt;
&lt;p&gt;Jupyterのノートブック上で、マジックコマンドの&lt;code&gt;%%script&lt;/code&gt;を使う方法である。Rに限らず、その言語がインスタンスにインストールされていれば使えるため、知っておくと非常に便利である。&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;%%&lt;/span&gt;script R &lt;span style="color:#f92672"&gt;--&lt;/span&gt;vanilla &lt;span style="color:#f92672"&gt;--&lt;/span&gt;quiet
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(x)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコマンドを実行すると、セルの中身がRのスクリプトとして解釈され、標準出力に結果が返される。&lt;code&gt;--vanilla&lt;/code&gt;ではなく&lt;code&gt;--save&lt;/code&gt;オプションを指定すると、実行終了時点でのワークスペース（&lt;code&gt;.RData&lt;/code&gt;）を保存する。次回開くときに&lt;code&gt;--restore&lt;/code&gt;とすれば、その&lt;code&gt;.RData&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;%%&lt;/span&gt;script R &lt;span style="color:#f92672"&gt;--&lt;/span&gt;save &lt;span style="color:#f92672"&gt;--&lt;/span&gt;quiet
&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;&lt;span style="color:#f92672"&gt;%%&lt;/span&gt;script R &lt;span style="color:#f92672"&gt;--&lt;/span&gt;save &lt;span style="color:#f92672"&gt;--&lt;/span&gt;restore &lt;span style="color:#f92672"&gt;--&lt;/span&gt;quiet
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ただし、スクリプトの実行モードでは、処理の途中で変数の中身をインタラクティブに確認したり、プロットを画面にレンダリングしたりすることはできない。一つのセルで最後のアウトプットまで完結させる必要があり、探索的なデータ分析（EDA）のようなアドホックな用途には向かない。あくまで一時的なシェルの実行環境として割り切る必要がある。&lt;/p&gt;
&lt;h3 id="uiからrランタイムを選択する"&gt;UIからRランタイムを選択する&lt;/h3&gt;
&lt;p&gt;ノートブック全体をR専用の環境として使う（その場でプロットしたりオブジェクトを保存・再利用したりする）ためには、Rのランタイムを直接起動するのが最も王道である。&lt;/p&gt;
&lt;p&gt;かつては&lt;code&gt;.ipynb&lt;/code&gt;ファイルをローカルにダウンロードし、テキストエディタでJSONの&lt;code&gt;kernelspec&lt;/code&gt;を書き換えてから再アップロードするという非常に煩雑な手順が必要だった。しかし現在では、Colabの標準UIから簡単に切り替えることができる。&lt;/p&gt;
&lt;p&gt;Colabの画面上部メニューから「ファイル」を選択し、「ノートブックを新規作成」をクリックする。新しいノートブックが開いたら、メニューの「ランタイム」から「ランタイムのタイプを変更」を選択する。表示されるダイアログの中に「ランタイムのタイプ」というドロップダウンメニューがあり、デフォルトの「Python 3」から「R」に変更して保存するだけでよい。これで、マジックコマンドなしに全てのセルでRのコマンドをネイティブに実行できるようになる。&lt;/p&gt;
&lt;p&gt;ノートブックを新規作成する際のURLに&lt;code&gt;language&lt;/code&gt;パラメータを指定することで、最初から任意のカーネルを採用した状態、つまりRランタイムを選択した状態で開くことができる。頻繁にRノートブックを作成するユーザにとっては、このURLをブックマークしておくのが最も効率的である。Rの場合は以下のURLとなる。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://colab.research.google.com/notebook#create=true&amp;amp;language=r"&gt;https://colab.research.google.com/notebook#create=true&amp;language=r&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="python環境と共存したまま使う"&gt;Python環境と共存したまま使う&lt;/h3&gt;
&lt;p&gt;データの前処理は豊富なライブラリを持つPythonで行い、統計モデリングや可視化はRで行いたいというハイブリッドな用途には、&lt;code&gt;rpy2&lt;/code&gt;モジュールを利用した連携が最適である。この方法を使えば、Pythonのノートブック上でマジックコマンドを使える状況下を維持したまま、Python環境と共存してRを使うことができる。&lt;/p&gt;
&lt;p&gt;以下のコマンドをPythonセルで実行し、&lt;code&gt;rpy2&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-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;%&lt;/span&gt;load_ext rpy2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ipython
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これで、Pythonのコードブロックもそのまま使いつつ、マジックコマンド&lt;code&gt;%%R&lt;/code&gt;で始まるR専用のコードブロックを作ることができる。例えば、Colabの強みであるGoogle DriveのマウントをPythonで行い、そのデータをRで読み込むといった一連の流れが可能になる。&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-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Google Driveのマウント (Pythonで実行)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; google.colab &lt;span style="color:#f92672"&gt;import&lt;/span&gt; drive
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drive&lt;span style="color:#f92672"&gt;.&lt;/span&gt;mount(&lt;span style="color:#e6db74"&gt;&amp;#39;/content/gdrive&amp;#39;&lt;/span&gt;)
&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;&lt;span style="color:#75715e"&gt;# データファイルの取得と解凍 (シェルコマンド)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;!&lt;/span&gt;cp &lt;span style="color:#e6db74"&gt;&amp;#34;gdrive/My Drive/Colab Notebooks/train.csv.gz&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;!&lt;/span&gt;gzip &lt;span style="color:#f92672"&gt;-&lt;/span&gt;d train&lt;span style="color:#f92672"&gt;.&lt;/span&gt;csv&lt;span style="color:#f92672"&gt;.&lt;/span&gt;gz
&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;&lt;span style="color:#75715e"&gt;# Rの有効化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;%&lt;/span&gt;load_ext rpy2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ipython
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;続いて、同じノートブック内の別のセルでRを実行する。&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;%%&lt;/span&gt;R
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# R側でデータを読み込み、プロットを作成&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;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;read.csv&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;train.csv&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;library&lt;/span&gt;(ggplot2)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 仮に x_col, y_col という列があるとする&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;x_col, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;y_col, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;data)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;さらに、PythonからRに変数を渡したり、その逆を行ったりすることも可能である。PythonからRに変数を渡す場合は&lt;code&gt;-i&lt;/code&gt;オプションを使用する。&lt;/p&gt;</description></item><item><title>Rにおける代表的な一般化線形モデル（GLM）の実装ライブラリまとめ</title><link>https://www.marketechlabo.com/r/r-glm-libraries/</link><pubDate>Mon, 03 Jan 2022 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/r-glm-libraries/</guid><description>
&lt;p&gt;一般化線形モデル（GLM）は統計解析のフレームワークとしてとにかく便利。Rでもビルトインの関数から拡張までさまざまなライブラリから提供されている機能だが、さまざまなライブラリがありすぎてどれを使えばいいのかわかりにくいのと、さらに一般化線形モデル（GLM）自体にもいろいろな亜種があるため、どの手法をどのライブラリの関数で実装すればいいかわからなくなる。
そこでRに実装されている代表的なGLM系の関数と特徴についてまとめてみた。&lt;/p&gt;
&lt;h2 id="一般化線形モデルのおさらい"&gt;一般化線形モデルのおさらい&lt;/h2&gt;
&lt;p&gt;一般化線形モデルとは
$$
y = g^{-1}(\alpha + \beta_1 x_1 + \beta_2 x_2 + &amp;hellip; + \beta_i x_i) + \epsilon
$$
で指定されるモデル。
一般化線形モデルを決定するのは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;誤差構造：目的変数の分布&lt;/li&gt;
&lt;li&gt;線形予測子 $\alpha + \beta_1 x_1 + \beta_2 x_2 + &amp;hellip; + \beta_i x_i$ →説明変数の組み合わせ&lt;/li&gt;
&lt;li&gt;リンク関数 $g()$（線形予測子と推定値の関係式）→目的変数の分布から大体決まる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;の3つ。
手順は&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;説明変数（の候補）を洗い出す&lt;/li&gt;
&lt;li&gt;モデルを構築する（パラメータを推定する）&lt;/li&gt;
&lt;li&gt;モデルを評価する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;モデルの評価は、&lt;code&gt;model&lt;/code&gt;を構築したモデルのオブジェクトとすると&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;anova(model)&lt;/code&gt;でモデル自体が有意かどうかを見る&lt;/li&gt;
&lt;li&gt;AICなどで当てはまりを見る&lt;/li&gt;
&lt;li&gt;検証用データで予測精度を見る&lt;/li&gt;
&lt;li&gt;線型モデル（&lt;code&gt;lm()&lt;/code&gt;）のみ&lt;code&gt;par(mfrow=c(2,2));plot(model)&lt;/code&gt;で残差の分布を見る
&lt;ul&gt;
&lt;li&gt;Residuals vs Fitted: 残差全体の挙動&lt;/li&gt;
&lt;li&gt;Normal Q-Q: 残差が正規分布に従うかどうか&lt;/li&gt;
&lt;li&gt;Scale-Location: 残差の大きさ&lt;/li&gt;
&lt;li&gt;Residuals vs Leverage: 外れ値の確認&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="rのglm用関数"&gt;RのGLM用関数&lt;/h2&gt;
&lt;h3 id="glm-stats"&gt;&lt;code&gt;glm&lt;/code&gt; {stats}&lt;/h3&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:#a6e22e"&gt;glm&lt;/span&gt;(モデル式, family &lt;span style="color:#f92672"&gt;=&lt;/span&gt; 目的変数の分布, data &lt;span style="color:#f92672"&gt;=&lt;/span&gt; データフレーム)
&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;&lt;span style="color:#a6e22e"&gt;glm&lt;/span&gt;(モデル式, family &lt;span style="color:#f92672"&gt;=&lt;/span&gt; 目的変数の分布(link &lt;span style="color:#f92672"&gt;=&lt;/span&gt; リンク関数), data &lt;span style="color:#f92672"&gt;=&lt;/span&gt; データフレーム)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;family&lt;/code&gt;は目的変数の確率分布を指す。対応している&lt;code&gt;family&lt;/code&gt;とリンク関数は&lt;/p&gt;</description></item></channel></rss>