#行ごとに要素の割合を計算する(python,R)
はじめに
初投稿です。
独学でpythonとR両方習得する必要があったため、
実業務で使う処理を、
python,Rそれぞれでまとめてみました。
(おすすめの書き方/別解などあれば、是非教えてください!)
テーマ
今回のテーマは、考え方はシンプルなものの、なぜか個人的に毎回悩んでしまう、
データフレームに対して、行ごとに要素の割合を計算する
コードになります。
excelやtableau等での加工ももちろん可能ですが、
加工の手順をコードとして残せるメリットもあると考え、このテーマにしました。
本題
以下のデータフレームを例に挙げます。
(indexのid列は、イメージのために付けており、コードでは省略しています)
id | a | b | c |
---|---|---|---|
d | 1 | 11 | 21 |
e | 2 | 12 | 22 |
f | 3 | 13 | 23 |
各行の合計を1とした際の、a,b,c各要素の割合を出すためのコードです。
(使用例: id=dにおけるaの割合を、id=e,fにおけるaの割合と比較したい など)
実際に業務で集計するデータには、
idや属性など、要素に含めたくないものが付くことも多いかと思いますが、
今回はシンプルに、全て要素として扱う前提で進めます。
コード
pythonの場合(pandas)
code
import pandas as pd
# データフレーム作成
df = pd.DataFrame({'a':[1,2,3],'b':[11,12,13],'c':[21,22,23]})
# 行ごとに計算
df_kekka = df.apply(lambda x:x/sum(x),axis=1)
結果
a b c
0.030303 0.333333 0.636364
0.055556 0.333333 0.611111
0.076923 0.333333 0.589744
Rの場合
code
# データフレーム作成
df <- data.frame(a=c(1:3),b=c(11:13),c=c(21:23))
# 計算
data.frame(df/rowSums(df))
code_別案
#library(purrr)でも。magrittr(の%>%)をよく使うため、まるっと
library(tidyverse)
# データフレーム作成
df <- data.frame(a=c(1:3),b=c(11:13),c=c(21:23))
# 計算 繰り返し処理のイメージに近くなる
df %>%
map_df(~.x/rowSums(df))
結果
a b c
0.03030303 0.3333333 0.6363636
0.05555556 0.3333333 0.6111111
0.07692308 0.3333333 0.5897436
終わりに
すごくシンプルな内容ですが、少しでも実務にお役立ちできれば嬉しいです。
ありがとうございました!