LoginSignup
19
16

More than 5 years have passed since last update.

行ごとに要素の割合を計算する(python,R)

Last updated at Posted at 2018-03-27

行ごとに要素の割合を計算する(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

終わりに

すごくシンプルな内容ですが、少しでも実務にお役立ちできれば嬉しいです。
ありがとうございました!

19
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
16