はじめに
deepblueインターン生の中山です。
【読み込み、要約統計量、行・列選択、代入】PythonとRのデータフレーム操作比較 vol.1 の続きの記事です。
今回はRのtidyverseを用いた時のPythonと比較をしたいと思います。
連載
・【読み込み、要約統計量、行・列選択、代入】PythonとRのデータフレーム操作比較 vol.1
・【列追加、重複削除、列名変更、結合、集約】PythonとRのデータフレーム操作比較 vol.2
・【集計、ソート、縦持ち・横持ち変換】PythonとRのデータフレーム操作比較 vol.3
・【列分割・NA操作・サンプリング】PythonとRのデータフレーム操作比較 vol.4
・【train/test分割】PythonとRのデータフレーム操作比較 vol.5
使ったデータ
使ったデータは、MineThatData E-Mail Analytics And Data Mining Challenge datasetです。
前回のblogとデータは同じです。
historyを3000以上に条件付けている事が多いですが、データ数を減らして確認しやすくしているだけで、深い意味はないです。
データ読み込み
csvデータを読み込むコード。
headで10個確認しています。
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(10)
R
library(tidyverse)
PATH <- 'http://www.minethatdata.com/Kevin_Hillstrom_MineThatData_E-MailAnalytics_DataMiningChallenge_2008.03.20.csv'
df <- read.csv(PATH)
head(df, 10)
vol.1でやった事
前回のblogの後半部分で扱った内容を1つにまとめます。
列の選択、行の抽出、値の置換の3つです。
Python
df_new = df[['recency', 'history', 'zip_code', 'channel', 'spend']]
df_new = df_new[df_new.history > 3000].assign(spend=1000)
R
df.new <- df %>%
select(recency, history, zip_code, channel, spend) %>%
filter(history > 3000) %>%
mutate(spend = 1000)
列追加
新たな列を追加するコード。
上記では、データの置換を行ったが、新たな列を追加する。
Python
df_selected = df[['recency', 'history', 'zip_code', 'channel', 'spend']]
df_selected = df_selected[df_selected.history > 3000]
df_new = df_selected.copy()
df_new['col'] = df_new.apply(lambda x: x.recency * x.history, axis=1)
# df_new['col'] = df_new.recency * df_new.history # これでも可
R
df.selected <- df %>%
select(recency, history, zip_code, channel, spend) %>%
filter(history > 3000)
df.new <- df.selected %>%
mutate(col = recency*history)
重複削除
dataframeの重複を削除するコード。
Python
df_new = df.channel.drop_duplicates()
R
df.new <- df %>%
distinct(channel)
列名変更
列名を変更するコード。
PythonとRで書く順番が違うので注意が必要です。
Python
df_new = df.rename(columns={'recency':'RECENCY'})
R
df.new <- df %>%
rename(RECENCY = recency)
データの列結合
dataframeを列どうしで結合するコード。
Python
df1 = df[['recency', 'history', 'zip_code']]
df2 = df[['channel', 'spend']]
df_new =pd.concat([df1, df2], axis=1)
R
df1 <- df %>%
select(recency, history, zip_code)
df2 <- df %>%
select(channel, spend)
df.new <- df1 %>%
bind_cols(df2)
データの行結合
dataframeを行どうしで結合するコード。
Python
df1 = df[df.history > 3000]
df2 = df[df.history == 30]
df_new =pd.concat([df1, df2], axis=0)
R
df1 <- df %>%
filter(history > 3000)
df2 <- df %>%
filter(history == 30)
df.new <- df1 %>%
bind_rows(df2)
データの集約
groupbyでデータを分けて全列の平均値を算出するコード。
Python
df.groupby('channel').mean()
R
df.new <- df %>%
group_by(channel) %>%
summarise_all(funs(mean))
連載
・【読み込み、要約統計量、行・列選択、代入】PythonとRのデータフレーム操作比較 vol.1
・【列追加、重複削除、列名変更、結合、集約】PythonとRのデータフレーム操作比較 vol.2
・【集計、ソート、縦持ち・横持ち変換】PythonとRのデータフレーム操作比較 vol.3
・【列分割・NA操作・サンプリング】PythonとRのデータフレーム操作比較 vol.4
・【train/test分割】PythonとRのデータフレーム操作比較 vol.5
(著:中山 翔太)
関連記事
Deepblueでは統計やAIの平和的活用を一緒に取り組んでいただける方を募集してます。詳しくはRecruitをご覧ください。