noteppei

スモールデータを分析するお仕事をしています。テキトーな事例を元に実践しながらRを覚えて…

noteppei

スモールデータを分析するお仕事をしています。テキトーな事例を元に実践しながらRを覚えていく、自分用のメモです。

最近の記事

pandasでのデータピボット.Py

背 背景:R→Pythonへのコード変換 Rで作ったコードをPythonで動かす必要があって、DataFrameの操作周りを確認中。  DataFrameと言えば、Rならtidyverse、Pythonならpandasという認識。しっかし似ているようで似ていないのがこの2つ。Pythonはオブジェクト指向だからねHAHAHA、と言われればまあおっしゃる通りですね。直感的じゃないからやりにくいんだよな、オブジェクト指向。Javaの時も思ってたけど。  long - wide

    • appendからconcatへの移行.Py

      appendよ死んでしまうとはなさけない データフレームに行を追加するときに便利なappendちゃんがお亡くなりになりました。後釜はconcatちゃんでよろしくねって言われてます。  でもconcatちゃんに追加行となる値セットを渡すと、appendちゃんと違う挙動をするんですよね。例えば3値からなるシリーズをappendちゃんなら1行3列にして追加してくれるんですけど、concatちゃんは3行1列にして追加しようとしちゃう。困った。  おおappendよ死んでしまうとはなさ

      • 複数の値をひとつのセルにまとめる(マルチアンサー形式).R

         蛇蝎のごとく嫌って分解し続けてきたマルチアンサーを、今度は作ってみよう。  基本はlong→wideへの変換だが、wideにされてできた列をuniteして一つのカラムに納める。つまりseparate_rowsの逆変換だ。  結論としては下のようになる。 >test COL1 CAT1 A a2 B b13 B b24 C c15 C c26 C c3> test %>% group_by(COL1) %>% mutat

        • かっこが1or2か所に含まれる文字列からの抽出.R

          やりたいこと hoge (fuga);hoge (piyo) (fuga)  特定の列に上記2パターンで記述された値が混在しているので、それを次のような形に分割して別の列に格納したい hoge, fugahoge (piyo), fuga 背景  例としては、歴代内閣総理大臣の一覧に「菅義偉 (第99代) (令和2年9月16日~令和3年10月4日)」と「安倍晋三 (平成29年11月1日~令和2年9月16日, 平成26年12月24日~平成29年11月1日, 平成24年

        pandasでのデータピボット.Py

          アクセス数の変化は? というわけで、ダッシュボードからアクセス数を拾ってみると、翌週(12/末)あたりから、各記事のアクセス数が約4割減となった。それなりに効果があったようなないような。 無料に戻しました おそらくは、リンクしているサイトのうちアクティブなものでは、何かしらの対応が行われた……んだったらいいなあ。  とりあえず有料をやめてみて、数字が元に戻るかどうかを観察してみようかな。 以上。

          妙なサイトからのリンク、と著作権

          note記事の無断販売? noteには有料で記事を販売する機能があるのだけれど、世の中には無料記事に対して勝手に(そのサイト独自の)有料リンクを張って、無断販売をしているていのサイトがあるようだ。もちろん、販売サイトを装ったフィッシングサイトの可能性もある。  気づいたのは、久々にダッシュボードを見たら特定2記事だけ継続的にViewがあったからなのだけれど……まあそれはそれでちょっと悲しい。 とりあえず記事を有料化 というわけで、いきなり有料記事ができてしまったのはそういう

          妙なサイトからのリンク、と著作権

          (追記あり:そんなことなかった)group_by() %>% count()の結果は地味にgroup_by()されたまま

          2021-12-20追記 よく考えたら、group_by(hoge) %>% count() なんてしなくても、count(hoge) でいいじゃーん。(俺の頭が)悪かった。 タイトルそのままの話 データフレームをgroup_by(hoge) %>% count() するとhoge列の値ごとにそれぞれ何行あるかカウントしてくれるというのはよく使う。  たまたまカウント列(デフォでn)をcumsumしようと思ったら、全然cumsumしてくれず、n列と同じ値が並ぶという結果にな

          (追記あり:そんなことなかった)group_by() %>% count()の結果は地味にgroup_by()されたまま

          特許のネットワーク分析(3).R

          要約・str_splitでマルチアンサーの分解結果をリストに詰める ・mapでリストを処理 ・最後はrlist::list.stackで1つのデータフレームに 前回のお話改めて方針を立て直す 半年も放置していると、さすがに忘れるのである。  無向グラフ用に、隣接行列またはエッジリスト(n行2列)を作るのが当面の目標になる。  エッジリストに入れるノードは、マルチアンサーを分解した各要素であるし、1つのマルチアンサーに入っていた各要素の間にエッジが作られるようにしたい。  す

          特許のネットワーク分析(3).R

          separate() / separate_rows()

          要約・文字列をセパレータで分けるtidyr::separateには2種類 ・separate()はstringr::str_split()と同様に列方向(横)に展開 ・separate_rows()は行方向(縦)に展開、他の列は値が複製される 以前の記事separateは2種類あった ご存じtidyr::separate()は、例えばCSVのようにセパレータで複数の要素がつながった1つの文字列を、セパレータ区切りで分割・展開する関数だ。  今さら何を言っているんだという話は

          separate() / separate_rows()

          近況というかモンハンの話

          要約・モンハンはいいぞ 最近書いてない理由  モンハンライズが始まったから。以上。  いや、他にもnoteのペースが落ちてる人たちがいるはずだ。noteが本業の一部ではない人たちの中には。まちがいなくハンターだ。みんなで狩れば怖くない。すみません。  それにしても、子供を寝かしつけてからになると21:30~とかしかできないから進度が遅いのなんの(HR100は超えましたが)。 モンハンライズについて さて、著名タイトル過ぎて今さら書くほどでもないのだけれど、カプコンのモンス

          近況というかモンハンの話

          特許のネットワーク分析(2).R

          要約・方針は大きく2つある ・隣接行列よりは個別の要素間対応で書いた方が筋は良さそう 前回対応関係を作る、その方針 点と点との間のつながりを表すネットワークグラフを描くためには、点と点がどのように繋がっているか、その対応関係を示すデータが必要だ。まずは作り方の方針を検討しよう。  1つ目は隣接行列と呼ばれるもの。  点はノード、つながりがエッジで、全ノードを縦横に並べた正方行列を作り、i行j列に1があればノードiとノードjが繋がっていると示すのが隣接行列だ。  隣接行列を

          特許のネットワーク分析(2).R

          特許のネットワーク分析(1).R

          要約・特許分析でのネットワーク分析は、主に共願人や発明者の解析 ・テキストの共起の解析もあるけど後回し 特許のネットワーク分析 要素間がどのように繋がっているのかを分析するのが、ネットワーク分析だ。と言い切ってしまったが、学問的にはよく知らない()  それはさておき、特許を分析するときに、要素間のつながりを分析したいということはたまにある。  例えば、特許文献のテキストデータから、単語(=要素)同士のつながりを分析する、いわゆる共起関係の分析のもネットワーク分析の1つだ。こ

          特許のネットワーク分析(1).R

          抽出による文字列分離(3.5)_map補遺.R

          要約・map()はあくまでもリストまたはベクタの各要素ごとに適用 ・map()内のベクタまたはマトリクスの各行に適用するには一工夫要る ・原理の理解って大事よね map()の挙動って本当にこれで良かったっけ? そういえば、map()ではリスト内の各要素に関数を適用できるのだけど、さらに各要素内のマトリクスの各行に対して適用するようなものだったんだっけ?  前回のは各行ごとに処理できているように見えるけど、よくよく考えてみれば、applyを勝手に入れ子にしてくれているような気

          抽出による文字列分離(3.5)_map補遺.R

          抽出による文字列分離(3)_書式をそろえる.R

          要約・str_match_all()では、ベクタとマトリックスが混在するリストを出力 ・文字列の桁揃えはstr_pad() ・各文字列操作はまとめて関数として定義 ・map()でリスト内の各要素に適用 前回記事まずはFIをグループ化抽出(str_match_all()) というわけで、まずはグループ化しながらFIを抽出してみる。 > df$FI %>% head(2) %>%+ str_match_all("([A-H]\\d{2}[A-Z])(\\d{2,4})

          抽出による文字列分離(3)_書式をそろえる.R

          抽出による文字列分離(2)_書式の理解.R

          要約・抽出するには書式を理解 ・stringr::str_match_all()で揃えたい部分を抽出 ・str_pad()で桁をそろえる ・リストへの関数適用なのでapply系かfor文か FIの数字部分の桁数は結構異なる 前の記事の繰り返しになるのだけれども、FIという分類コードは、実はデータベースごとで異なる書式にされていることが多い。例えば検索に使う際にも入力書式が違っているので、極端な話、"G06Q001"を"G06Q1"と解釈するデータベースもあれば、"G06Q1

          抽出による文字列分離(2)_書式の理解.R

          抽出による文字列分離(1.5).R

          要約・str_extract_all()とstr_subset()の挙動の違い ・「特定の文字列を抽出」or「特定の文字列を含む要素を抽出」 別の抽出方法:str_subset() ちょっと本題からは逸れるが、stringr::にはstr_subset()という関数があって、これも特定の文字列を抽出してくれる関数だ。  一方、str_extract_all()も特定の文字列を抽出してくれる関数だ。  こうやって表現してみると同じじゃんと思えるのだけれど、同じパッケージに含ま

          抽出による文字列分離(1.5).R