はじめに

deepblueインターン生の中山です。
PythonとRを交互に書く時に毎回迷うので、備忘録のblogとして残しそうと思います。
今回は基本的なdataframeの簡単な操作についてまとめようと思います。

連載

【読み込み、要約統計量、行・列選択、代入】PythonとRのデータフレーム操作比較 vol.1
【列追加、重複削除、列名変更、結合、集約】PythonとRのデータフレーム操作比較 vol.2
【集計、ソート、縦持ち・横持ち変換】PythonとRのデータフレーム操作比較 vol.3
【列分割・NA操作・サンプリング】PythonとRのデータフレーム操作比較 vol.4

使ったデータ

使ったデータは、MineThatData E-Mail Analytics And Data Mining Challenge datasetです。
効果検証入門の中で使われるデータセットを使ってみました。
データの詳細は今回は重要ではないので割愛しますが、気になる方はホームページを確認してみてください。

簡単な操作

コードの具体的な説明をする前に、PythonとRで異なる表記やショートカットの箇所について記述しておきます。

PythonR
代入=<-
コメントアウトctrl + /shift + ctrl + c
やり直すctrl + yshift + ctrl + z

データ読み込み

csvデータを読み込んで、dataframeの確認のコード。

Python

import pandas as pd
PATH = 'http://www.minethatdata.com/Kevin_Hillstrom_MineThatData_E-MailAnalytics_DataMiningChallenge_2008.03.20.csv'
df = pd.read_csv(PATH)
df.head()

R

PATH <- 'http://www.minethatdata.com/Kevin_Hillstrom_MineThatData_E-MailAnalytics_DataMiningChallenge_2008.03.20.csv'
df <- read.csv(PATH)
head(df)

データ確認

データの行数、列数、各列の型を確認するコード。
Rだとstrなのがややこしい...

Python

df.shape
df.dtypes

R

str(df)

要約統計量

dataframe各列の要約統計量などを取得するコード。
Rはsummaryで質的変数にも使う事ができます。

Python

df.describe()

R

summary(df)

番号指定

PythonとRは、数字で指定を行う時に違いがあるので、その差を示してみます。
また、同じ行列を示すような、コードをPythonとRで書きます。

PythonR
番号0始まり1始まり
[a:b]のaaを含む aを含む
[a:b]のbbを含まないbを含む

Python

df.iloc[0:5,1:4]

R

df[1:5,2:4]

列の選択

読み込んだdataframeにおいて、columnの選択をするコード。
Rは変数名にピリオドを使う事が可能なので、あえてピリオドを利用してます。
また、tidyverseを用いた場合のコードも載せています。
tidyverseのパイプ演算子(%>%)は、shift + ctrl + Mで入力可能です。

Python

df_selected = df[['recency', 'history', 'zip_code']]
df_selected.head()

R

df.selected <- df[c('recency', 'history', 'zip_code')]
head(df.selected)
# tidyverseの場合
library(tidyverse)
df.selected.tidy <- df %>%
  select(recency, history, zip_code)

行の抽出

dataframeから、条件に合致するデータを抽出するコード。
抽出する条件はわかりやすくしているだけで、特に意味はないです。
また上記同様、tidyverseを用いた場合のコードも載せています。

Python

df[(df.history > 3000) & (df.channel == 'Phone')]

R

df[df$history > 3000 & df$channel == 'Phone',]
# tidyverseの場合
df %>% 
  filter(history > 3000,
         channel == 'Phone')

データ代入

条件に合致するとき、特定のcolumnに値を代入するコード。
また上記同様、tidyverseを用いた場合のコードも載せています。

Python

df[df.history > 3000].assign(spend=1000)

R

df[df$history > 3000,'spend'] <- 1000
# tidyverseの場合
df %>% 
  filter(history > 3000) %>% 
  mutate(spend = 1000)

連載

【読み込み、要約統計量、行・列選択、代入】PythonとRのデータフレーム操作比較 vol.1
【列追加、重複削除、列名変更、結合、集約】PythonとRのデータフレーム操作比較 vol.2
【集計、ソート、縦持ち・横持ち変換】PythonとRのデータフレーム操作比較 vol.3
【列分割・NA操作・サンプリング】PythonとRのデータフレーム操作比較 vol.4

(著:中山 翔太

関連記事