LoginSignup
15
14

More than 3 years have passed since last update.

PythonユーザのためのRコード対応シート

Last updated at Posted at 2020-03-26

Pythonの分析系コードを理解している人向けに、Rコードの対応まとめました。 ※随時更新中
(本記事では、Rのbaseパッケージのみ使用)

「pythonで書くあれって、Rでどう書くんだっけ?」っていう流れって多いんですよね。

ドキュメント内の命名規則

特に断りがなければ、モジュール名のエイリアスは下記の通り。

python
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

下記に登場する変数名称のイメージ。

python
df = pd.DataFrame()
R
df = data.frame()

PythonコードのRでの書き方

データフレームの生成

pd.DataFrame()

データフレームの作成

R
data.frame() #空のデータフレームを生成
data.frame(col1=c(x1, x2, x3), col2=c(y1, y2, y3)) #カラム

pd.read_csv()

CSVファイル(カンマ区切りデータ)読み込み

R
read.csv(ファイル名)

pd.read_table()

TSV、CSVファイル(タブ区切りデータ)読み込み

R
read.table(ファイル名)

df.index = [行名1, 行名2, ...]

行名の設定

R
rownames(df) <- c(行名1, 行名2, ...)
print(rownames(df)) #代入せず、呼び出せばベクトルとして取得できる

df.columns = [列名1, 列名2, ...]

列名の設定

R
colnames(df) <- c(列名1, 列名2, ...)
print(colnames(df)) #代入せず、呼び出せばベクトルとして取得できる

データフレームの内容確認

df.shape

行数、列数の取得

R
dim(df)

len(df)

行数の取得

R
ncol(df)

len(df.columns)

列数の取得

R
nrow(df)

df.head()

先頭行の出力

R
head(df) #引数で表示行数の指定も可

df.tail()

末尾行の出力

R
tail(df) #引数で表示行数の指定も可

df.info()

各カラムの数や型情報を表示する

R
str(df)

df.describe()

基本統計量の出力する

R
summary(df) #ただし、stdは出力されない

#stdは、例えば下のように取得する
sds = NULL
for(col in colnames(df)){
  sds <- c(sds, sd(df[, col]))
}
names(sds) <- colnames(df)

df.isna()

欠損値(NA)を確認する

R
is.na(df)

df.isna().sum()

カラムごとの欠損値(NA)の個数を確認する

R
colSums(is.na(df))
# summary(df)でもNAの個数も出力されるので確認可能

df[df.isna().any(axis=1)]

欠損値(NA)が1つでもある行を抽出する

R
df[!complete.cases(df), ]

df.col.unique()

ある列に登場するユニークな(重複のない)値を返す

R
unique(df$col)

df.col.value_counts()

ある列に登場する値の登場回数を返す

R
table(df$col)

データ抽出

df.iloc[x1:x2, y1:y2]

行番号および列番号を用いて、範囲指定する

R
df[x1:x2, y1:y2] #Rはインデックスの開始が1である点に留意

df.iloc[[x1, x2, ...], [y1, y2, ...]]

行番号および列番号を用いて、リスト指定する

R
df[c(x1, x2, ...), c(y1, y2, ...)]

df.loc[行名1:行名2, 列名1:列名2]

行名および列名を用いて、範囲指定する

R
#明確には存在しないようなので、やるならば下記
#指定の行名および列名の位置(番号)を取得し、それを範囲指定に用いる
x1 <- which(rownames(df) == 行名1)
x2 <- which(rownames(df) == 行名2)
y1 <- which(colnames(df) == 列名1)
y2 <- which(colnames(df) == 列名2)
df[x1:x2, y1:y2]

df.loc[[行名1, 行名2, ...], [列名1, 列名2, ...]]

行名および列名を用いて、リスト指定する

R
df[c(行名1, 行名2, ...), c(列名1, 列名2, ...)]

df[df.col == x]

条件に合致する行を抽出する

R
df[df$col == x, ]
#または
subset(df, col == x)

データ加工

df[new_col] = x

データフレームに新しいカラムを追加する

R
df[, new_col] <- x

df.drop()

行や列を削除する

R
#削除したい行や列を選択し、NULLを代入することで削除ができる
df[c(x1, x2), ] <- NULL #行を削除
df[, c(y1, y2)] <- NULL #列を削除

#インデックスを負の値にすると、その番号を除外した行列を返す性質を利用して、次のようにも書ける
df <- df[c(-1, -2), ] #行を削除
df <- df[, c(-1, -2)] #列を削除

df.fillna(x)

欠損値(NA)を埋める

R
df[is.na(df)] <- x

df.dropna()

欠損値(NA)が含まれる行を削除する

R
na.omit(df)

df.apply(func)

各要素1つずつに関数funcを適用する

R
sapply(df, FUN =func)

df.col.apply(func)

指定したカラムの各要素1つずつに関数funcを適用する

R
sapply(df$x, FUN =func)

df.T

行列を転置する

R
t(df)

pd.to_datetime()

日付型に変換する

R
as.Date(df$col) #日付のみ(例:'2020-01-01')

データ集計

df.max()、 df.min()

カラム毎の最大値、最小値を求める

R
sapply(df, FUN =max)
sapply(df, FUN =min)

#applyでも同等の処理が可能
apply(df, MARGIN=2, FUN =max) #MARGIN=1とすると行毎に関数(FUN)を適用する
apply(df, MARGIN=2, FUN =min) #max(df)とした場合、全要素の中で最大値を求める(minも同様)

df.groupby([x1, x2, ...]).agg(func)

グループ化して集計処理する

R
aggregate(. ~ x1+x2, df, FUN=sum) #「.」は全カラムに対し集計処理を行う
aggregate(x ~ x1+x2, df, FUN=sum) #「x」で指定したカラムに対し集計処理を行う

pd.pivot_table(df, index, columns, values)

baseパッケージにはない。たぶん。

15
14
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
15
14