医療職からデータサイエンティストへスマートフォン用の表示で見る医療職からデータサイエンティストへ統計学、機械学習に関する記事をまとめています。tidyverseデータの繰り返し処理やapply族を使ったデータフレームの処理などはデータ解析をする上では欠かせませんよね。そんな時に役に立つのが{purrr}パッケージです。このパッケージは、今までfor-loopさせていた処理や、apply族を使っていた処理をスマートに処理することができます。慣れるまでに少し時間がかかりますが、使いこなせるようになれば処理の幅が広がることは間違い無いです!今回はその使い方をまとめていきます。リストやベクトルを受け取って反復処理をするパッケージです。for文やapply族を使う場合が多いかと思いますが、{purrr}は色々な機能をそなえたモダンなパッケージとなっております。全部は紹介しきれないので、よく使いそうな関数だけをまとめておきます!mapまずは基本的な関数mapです。mapはリストの要素ごとに関数を適応する関数です。こんな感じで、二つのベクトルをもつリストにmapを適応すると、それぞれのベクトルに対して関数を適応し、結果をリストで返します。25イメージとしてはこんな感じfor文で実装するとこうなります。25厳密には少し違う中身になっているのですが、原理としては上記のようになってます。何で結果がリストなんだよ!と思った方ご安心を。map_xxxと語尾(?)にreturn結果の型を指定をすることができます。データフレーム(行結合)がよく使う型かと思います。他にもあるので、興味のある方は調べてみてください。25だだし、値を二つ以上返すような関数を適応した場合に、返り値をベクトル型で指定するとエラーになるので、注意してください。vectorまた、リストではなくデータフレームにmapを適応すると列ごとに処理されます。25データフレームの列ごとの処理は、apply関数に似ていますね。map_dblとすると同じ結果になります。map_atを使うことで処理する列を指定できます。25すごい!引数が二つ以上ある関数を適応したい場合は、関数の後に続けて書きます。rnormの平均値をリストで渡して、sdとnを指定すれば、平均値の異なる乱数を生成することができます。-3.7953110map2,pmap受け取るリストが二つある時に使えるのがmap2、それ以上の場合にpmapを使います。標準偏差のリスト、生成数nのリストも作って、map2,pmapに渡してみます。6.5106281pmapはリストにして渡す必要があることに注意して下さい。わかりやすいように引数名をつけておくと良いです。6.459873pmapはデータフレームとも相性がよいです。データフレームを作って、pmapに渡します。-12.6419800よく使うpurrrの活用法{purrr}では、データフレームの要因ごとに関数を適応するという使い方をよくします。車のスピードと停車距離のR標準データセットcarsに天気の変数を適当に加えてcars2というデータセットを作成します。scale_color_manual(values=c("blue","red"))こんな感じのデータセットができました。ここでやりたいのは、晴れの日と雨の日ごとに線形回帰モデルを適応することです。通常であれば、2回lm関数を適応する必要がありますが、mapを使えば一度で終わらせることができます。やるかというと、まずは{base}のsplit関数を使って、データセットを天気の要因で二つに分けます。splitを使うと二つのデータセットがリストで返ってくるので、あとはmap関数の中にlm関数を定義すれば完了です。splitの中にあるドットはパイプを使った記述法なので、慣れていない方はこちらをご覧ください。medi-data.hatenablog.comさらに{purrr}ではショートカットとして、関数の定義をチルダを使って書くことで記述の手間を省くことができます。map(~lm(speed~dist,data=.))いちいちfunction()と書かなくてもいいので楽ですね。高度なテクニックですが、{tidyr}のnestと{dplyr}のgroup_byを使うのがモダンなやり方らしいです。関数なのですが、正直私も使いこなせていません...^^;一応やってみます。2]>このdataという列の中に天気ごとのデータフレームが格納されています。ここにlm関数を適応させるには、{dplyr}のmutate関数を使って、その中でmap関数を使います。lm>今度はmodelという列の中にlm関数の結果が格納されました。これをlm_modelsとして保存しておけば、結果にアクセスしやすくなります。nest()を使うメリットとしては、モデルやデータフレームを一括で管理できるので、解析の見通しが立てやすいことです。summaryの結果を格納しておけば、95%信頼区間やその他の統計量も一つのオブジェクトで管理できますね。summary.lm>まとめ今回はモダンな繰り返し処理を行うことができる{purrr}を紹介しました。使い方は少し複雑ですが、{purrr}を使いこなせば、かなーーーりスマートに作業を進めることができるのかなと思っています。紹介しきれていない機能もたくさんあるのでぜひ使ってみてください。Science上記サイトの和書版です。dplyrやpurrr、tidyrなどモダンなパッケージをまとめたtidyverseを中心に、データの解析手法そのものよりも、いかに効率よくデータを解析するかが書かれています。22:03モダンな繰り返し処理purrrの使い方Tweet関連記事2020-01-08時系列予測パッケージ{prophet}を使って、ブログアクセス数を予測する。はてなブログPro大学院で疫学統計を学んでいます。データサイエンティストを目指して、初心者目線から統計学、機械学習など学んだことをまとめていきます。パッケージ{prophet}を使って、ブログアクセス数を予測する。medi_data0826スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。