Аналоги пакетов на R и Python
Если в вашей команде часть сотрудников предпочитает Python, а часть R, то вы можете использовать двуязычные пакеты. Это повысит понимание кода для всех участников разработки. Это позволит вам устранить различия и несовместимости, которые могут возникнуть при использовании очень разнообразного стека пакетов.
На изображении к посту я перечислил двуязычные пакеты по сферам их применения.
Некоторые пакеты имеют различные имена, но схожий синтаксис, давайте разберём пример одного и тоже кода, написанного на двуязычных пакетах dplyr / siuba, и просто с помощью альтернативного варианта на pandas.
1. dplyr
example_df %>%
mutate(
a_dbl = a * 2,
b_tri = b * 3,
c_half = c / 2,
b_min_c = b - c) %>%
filter(b_min_c > 3) %>%
group_by(category) %>%
summarize(
avg_a_dbl = mean(a_dbl),
avg_b_tri = mean(b_tri),
avg_c_half = mean(c_half),
avg_b_min_c = mean(b_min_c)
)
2. siuba
(
example_df
>> mutate(
a_dbl = _.a * 2,
b_tri = _.b * 3,
c_half = _.c / 2,
b_min_c = _.b - _.c )
>> filter(_.b_min_c > 3)
>> group_by(_.category)
>> summarize(
avg_a_dbl = _.a_dbl.mean(),
avg_b_tri = _.b_tri.mean(),
avg_c_half = _.c_half.mean(),
avg_b_min_c = _.b_min_c.mean() )
)
3. pandas (1)
(
example_df
.assign(a_dbl = example_df.a * 2)
.assign(b_tri = example_df.b * 3)
.assign(c_half = example_df.c / 2)
.assign(b_min_c = example_df.b - example_df.c)
.query('b_min_c > 3')
.groupby('category', as_index=False)
.agg(
avg_a_dbl = pd.NamedAgg(column='a_dbl', aggfunc=np.mean),
avg_b_tri = pd.NamedAgg(column='b_tri', aggfunc=np.mean),
avg_c_half = pd.NamedAgg(column='c_half', aggfunc=np.mean),
avg_b_min_c = pd.NamedAgg(column='b_min_c', aggfunc=np.mean)
)
)
3. pandas (2)
example_df['a_dbl'] = example_df['a'].mul(2)
example_df['b_tri'] = example_df['b'] * 3
example_df['c_half'] = example_df['c'].div(2)
example_df['b_min_c'] = example_df['b'].sub(example_df['c'], axis = 0)
example_df = example_df[example_df['b_min_c'] > 3]
example_df['avg_a_dbl'] = example_df['a_dbl'].groupby(example_df['category']).transform('mean')
example_df['avg_b_tri'] = example_df['b_tri'].groupby(example_df['category']).transform('mean')
example_df['avg_c_half'] = example_df['c_half'].groupby(example_df['category']).transform('mean')
example_df['avg_b_min_c'] = example_df['b_min_c'].groupby(example_df['category']).transform('mean')
Синтаксис dplyr / siuba очень похож, а pandas, хоть и выполняет те же манипуляции, но имеет другой синтаксис.
Смотрите так же:
- Какой язык выбрать для работы с данными R или Python? Оба! Мигрируем с pandas на tidyverse и data.table и обратно
#заметки_по_R