★データ解析備忘録★

ゆる〜い技術メモ

Rでgroup_concatする方法をまとめる

この記事は R Advent Calendar 2016 4 日目の記事です。

group_concat について

MySQL などの 多くの SQL には group_concat という関数があります。 どういう関数かというと、複数のレコードを一つにまとめるもので、たとえば以下のようなデータを考えます。

### サンプルデータ
id <- c(1, 1, 2, 3, 3)
name <- c("apple", "orange", "orange", "orange", "apple")
df <- data.frame(id, name)
id name
1 apple
1 orange
2 orange
3 orange
3 apple

ここから、id 毎にまとめて次のような形にするの SQLgroup_concat 関数です。

id name
1 apple, orange
2 orange
3 apple, orange

MySQL での使い方など、group_concat そのものについて知りたい方は例えば以下を参照してください。

d.hatena.ne.jp

文字列の処理をやっているとたまに必要がでてくるこの処理ですが、今回はこの group_by の処理を R で行うことを考えます。 この記事では 4 通りの方法を紹介しますが、最初の3つについては基本的な考え方は同じです。

続きを読む

Emacsのddskkで辞書をGoogle IMEにする

Emacsでは日本語入力にSKKを利用しているのですが、どうもデフォルトの辞書では変換がショボいので、GoogleIMEを使おうと思います。

何がすごいのか

例えば、「さーばー」と入力すると、自分で辞書登録せずとも

サーバー、Server、server、SERVER

が変換候補として現れたり、 「まほうしょうじょまどかまぎか」のような普通の辞書にはない単語を

魔法少女まどか☆マギカ

といい感じに変換してくれたりします。

(古い例ですが漢字ひらがなカタカナ記号のあるいい例が思いつかなかったので...)

あるいは、「わたしのなまえは」を

私の名前は

のように文節で変換してくれたりします。

続きを読む

(Macの)Rでipadic-neologdを使う

前置き

7月のTokyo.Rにて、こんな発表をしました。

RとMeCabと正規表現

MeCabでの顔文字とかの誤解析を前処理ではなく「後処理」で整理する、という内容だったのですが、こんな指摘がありました。

実はipadic-neologdは以前のバイト先で使っていたので知っていたのですが、今回の発表ではすっかり忘れていたのでした(笑)。

ipadic-neologdとは

昨年の3月くらいに登場した、固有名詞や最近の言葉にに強いMeCab用の辞書です。

続きを読む

【SAS】アルファベットや飛び飛びの値でもループしたい

SASの繰り返しのマクロである%doループでは%do i=1 %to 10のように、整数値でしかループさせることができません。 今回は、整数以外でもループさせたいときの対処法をまとめてみます。

飛び飛びの値

飛び飛びの値とは、%do i=1 , 2, 3, 5のように整数が連続していないループのこと。 この対処法については

データステップ100万回      SAS新手一生: マクロの%doループはループ値にリスト形式の離散値は指定できないので、工夫しようの話

にまとまってますが、おそらく最もシンプルで応用が利くのは以下のやり方です。

これを実行すると、A列に1があるというシンプルなデータセットmydata1, mydata2, mydata3, mydata5の4つがWORKライブラリに作成されます。

このコードでは、%letでループに使う数字をマクロ変数で定義して%scanで新しくjに代入しています。 なので、ここの%letさえ変えてやれば文字だろうと数字だろうと自由にループを作成できます。

%sysfuncは()の中身に関数を指定してそれを実行するマクロです。

アルファベット

例えば、上記と似たような感じでmydataA〜mydataEを作りたいことを考えます。(1~5でいいじゃんというツッコミは受け付けません。)

方法1 上記と同じように代入する

方法2 asciiコードを使う

SAS忘備録: DO i = 'A' to 'Z' ; で紹介されている方法です。asciiコードとは、コンピュータにおける最も基本的な文字コードで、全部で128割り当てられているのですが、このうち10進数で言うところの65〜90にアルファベットのA〜Zが割り当てられています。そこで、SAS上でasciiコードを呼び出せるbyte()関数を%sysfunc()の中に入れて以下のように書きます。

Tokyo.R #55 に参加してきた

Tokyo.R #55に参加してきました。 今回の会場はサイバーエージェント社。

今回は自分で補足できる内容がほとんどないので、現時点で集められたスライドをまとめるだけです。 ほぼ自分用メモです。 自分のLTについては別記事で補足を書きます。

初心者セッション

10分で分かるr言語入門ver2 (@doradora09)

今回のためのスライドは公開されていませんが、以下がほぼ同内容。

www.slideshare.net

続きを読む