Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Ku milarian R atanapi Python dina Internét, anjeun bakal mendakan jutaan tulisan sareng kilométer diskusi ngeunaan topik anu mana anu langkung saé, langkung gancang sareng langkung merenah pikeun damel sareng data. Tapi hanjakalna, sadaya tulisan sareng sengketa ieu henteu kapaké pisan.

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Tujuan tina artikel ieu nyaéta pikeun ngabandingkeun téknik ngolah data dasar dina pakét anu paling populér tina dua basa. Sareng ngabantosan pamiarsa gancang ngawasaan hal anu aranjeunna henteu acan terang. Pikeun maranéhanana anu nulis dina Python, manggihan cara ngalakukeun hal nu sarua dina basa Sunda, sarta sabalikna.

Salila artikel urang bakal nganalisis sintaksis tina bungkusan nu pang populerna di R. Ieu bungkusan kaasup dina perpustakaan. tidyversesarta ogé pakét data.table. Jeung ngabandingkeun sintaksis maranéhanana jeung pandas, paket analisis data nu pang populerna di Python.

Urang bakal ngalangkungan léngkah-léngkah dina sadaya jalur analisa data tina ngamuat kana ngalaksanakeun fungsi jandela analitik nganggo Python sareng R.

eusi

Tulisan ieu tiasa dianggo salaku lambaran curang upami anjeun hilap kumaha ngalakukeun sababaraha operasi ngolah data dina salah sahiji bungkusan anu dipertimbangkeun.

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

  1. Bedana sintaksis utama antara Sunda jeung Python
    1.1. Ngaksés Fungsi Paket
    1.2. pancén
    1.3. Indexing
    1.4. Métode jeung OOP
    1.5. Pipa-pipa
    1.6. Struktur Data
  2. Sababaraha kecap ngeunaan bungkusan anu bakal kami anggo
    2.1. tidyverse
    2.2. data.tabel
    2.3. panda
  3. Masang bungkusan
  4. Ngamuat Data
  5. Nyieun dataframes
  6. Milih Kolom Anjeun Peryogikeun
  7. Nyaring baris
  8. Pengelompokan jeung Aggregation
  9. Uni nangtung tina tabél (UNION)
  10. Gabungan tabel horizontal (JOIN)
  11. fungsi jandela dasar sarta kolom diitung
  12. Méja korespondensi antara métode ngolah data dina basa Sunda jeung Python
  13. kacindekan
  14. Hiji survey pondok ngeunaan paket nu Anjeun pake

Upami anjeun kabetot dina analisis data, anjeun tiasa mendakan abdi telegram и youtube saluran. Seuseueurna eusina dikhususkeun kanggo basa Sunda.

Bedana sintaksis utama antara Sunda jeung Python

Sangkan leuwih gampang pikeun anjeun pindah ti Python ka Sunda, atawa sabalikna, Kuring bakal masihan sababaraha titik utama nu peryogi nengetan.

Ngaksés Fungsi Paket

Sakali pakét dimuat kana R, anjeun teu kedah nangtukeun nami pakét pikeun ngakses fungsina. Dina kalolobaan kasus ieu teu umum di Sunda, tapi bisa ditarima. Anjeun teu kedah ngimpor pakét pisan upami anjeun peryogi salah sahiji fungsina dina kode anjeun, tapi ngan saukur nelepon ku nangtukeun nami pakét sareng nami fungsina. Pamisah antara ngaran pakét sareng fungsi dina basa Sunda nyaéta titik dua. package_name::function_name().

Dina Python, sabalikna, dianggap klasik pikeun nelepon fungsi pakét ku sacara eksplisit netepkeun namina. Lamun pakét diundeur, biasana dibéré ngaran pondok, f.eks. pandas biasana dipaké ngaran samaran pd. Hiji fungsi pakét diaksés ngaliwatan hiji titik package_name.function_name().

pancén

Dina basa Sunda, geus ilahar ngagunakeun panah pikeun napelkeun nilai ka hiji obyék. obj_name <- value, najan hiji tanda sarua diidinan, tanda tunggal sarua dina basa Sunda dipaké utamana pikeun lulus nilai pikeun fungsi argumen.

Dina Python, ngerjakeun dipigawé sacara éksklusif ku tanda sarua obj_name = value.

Indexing

Aya ogé béda anu cukup signifikan di dieu. Dina R, indexing dimimitian dina hiji jeung ngawengku sakabéh elemen husus dina rentang hasilna,

Dina Python, indexing dimimitian ti enol jeung rentang dipilih teu kaasup unsur panungtungan dieusian dina indéks dina. Jadi rarancang x[i:j] dina Python moal kaasup unsur j.

Aya ogé béda dina indéks négatip, dina notasi Sunda x[-1] bakal mulangkeun sadaya unsur vektor iwal anu terakhir. Dina Python, hiji notasi sarupa bakal balik ngan unsur panungtungan.

Métode jeung OOP

Sunda implements OOP dina cara sorangan, Kuring wrote ngeunaan ieu dina artikel "OOP dina basa Sunda (bagian 1): kelas S3". Sacara umum, basa Sunda mangrupa basa fungsional, sarta sagalana di jerona diwangun dina fungsi. Ku alatan éta, contona, pikeun pamaké Excel, buka tydiverse eta bakal leuwih gampang ti pandas. Sanajan ieu bisa jadi pendapat subjektif kuring.

Pondokna, objék dina basa Sunda teu boga métode (lamun urang ngobrol ngeunaan kelas S3, tapi aya palaksanaan OOP séjén anu loba kurang umum). Aya ngan ukur fungsi umum anu ngolahna béda-béda gumantung kana kelas obyék.

Pipa-pipa

Sugan ieu ngaran keur pandas Éta moal sapinuhna leres, tapi kuring bakal nyobian ngajelaskeun hartosna.

Dina raraga teu ngahemat itungan panengah jeung teu ngahasilkeun objék perlu di lingkungan gawé, anjeun tiasa nganggo jenis pipa. Jelema. lulus hasil itungan ti hiji fungsi ka hareup, sarta ulah nyimpen hasil panengah.

Hayu urang nyandak conto kode di handap ieu, dimana urang nyimpen itungan panengah dina objék misah:

temp_object <- func1()
temp_object2 <- func2(temp_object )
obj <- func3(temp_object2 )

Urang dipigawé 3 operasi sequentially, sarta hasil unggal ieu disimpen dina objék misah. Tapi dina kanyataanana, urang teu butuh ieu objék panengah.

Atawa malah parah, tapi leuwih wawuh ka pamaké Excel.

obj  <- func3(func2(func1()))

Dina hal ieu, urang teu nyimpen hasil itungan panengah, tapi maca kode jeung fungsi nested pisan pikaresepeun.

Urang bakal ningali sababaraha pendekatan pikeun ngolah data dina basa Sunda, sareng aranjeunna ngalaksanakeun operasi anu sami dina cara anu béda.

Pipelines di perpustakaan tidyverse dilaksanakeun ku operator %>%.

obj <- func1() %>% 
            func2() %>%
            func3()

Ku kituna urang nyandak hasil karya func1() sarta lulus eta salaku argumen munggaran pikeun func2(), lajeng urang lulus hasil itungan ieu salaku argumen munggaran func3(). Sarta dina tungtungna urang nulis sagala itungan dipigawé kana obyék obj <-.

Sadayana di luhur digambarkeun langkung saé tibatan kecap ku meme ieu:
Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

В data.table ranté dipaké dina cara nu sarupa.

newDT <- DT[where, select|update|do, by][where, select|update|do, by][where, select|update|do, by]

Dina unggal kurung kuadrat anjeun tiasa nganggo hasil tina operasi saméméhna.

В pandas operasi sapertos dipisahkeun ku titik.

obj = df.fun1().fun2().fun3()

Jelema. urang nyandak méja urang df sarta ngagunakeun métode nya fun1(), teras urang nerapkeun metodeu pikeun hasil anu diala fun2()saatos fun3(). Hasilna disimpen dina obyék objék .

Struktur Data

Struktur data dina basa Sunda jeung Python sarupa, tapi boga ngaran béda.

gambaran
Ngaran dina R
Ngaran dina Python/pandas

Struktur méja
data.frame, data.tabel, tibel
DataFrame

Daptar nilai hiji diménsi
Véktor
Runtuyan dina pandas atanapi daptar dina Python murni

Struktur non-tabular multi-tingkat
Daptar
Kamus (dict)

Urang bakal ningali sababaraha fitur sareng bédana dina sintaksis di handap.

Sababaraha kecap ngeunaan bungkusan anu bakal kami anggo

Mimiti, kuring bakal nyarios sakedik ngeunaan bungkusan anu anjeun bakal kenal dina tulisan ieu.

tidyverse

Situs web resmi: tidyverse.org
Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui
taman pustaka tidyverse ditulis ku Hedley Wickham, Élmuwan Panalungtikan Senior di RStudio. tidyverse diwangun ku hiji set impressive tina bungkusan nu simplify ngolah data, 5 diantarana kaasup kana 10 luhur undeuran ti gudang CRAN.

Inti perpustakaan diwangun ku bungkusan di handap ieu: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Unggal pakét ieu ditujukeun pikeun ngarengsekeun masalah khusus. Salaku conto dplyr dijieun pikeun manipulasi data, tidyr pikeun mawa data kana wangun anu rapih, stringr simplifies gawé bareng senar, jeung ggplot2 mangrupa salah sahiji parabot visualisasi data nu pang populerna.

Kauntungannana tidyverse nyaéta kesederhanaan sareng gampang dibaca sintaksis, anu ku sababaraha cara sami sareng basa query SQL.

data.tabel

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deuiSitus web resmi: r-datatable.com

Ku data.table nyaeta Matt Dole of H2O.ai.

Pelepasan munggaran perpustakaan lumangsung dina 2006.

Sintaksis pakét henteu saé sapertos dina tidyverse sarta leuwih reminiscent tina dataframes Palasik di Sunda, tapi dina waktos anu sareng nyata dimekarkeun dina fungsionalitas.

Kabéh Manipulasi jeung tabel di pakét ieu digambarkeun dina kurung kuadrat, sarta lamun narjamahkeun sintaksis data.table dina SQL, anjeun nampi sapertos kieu: data.table[ WHERE, SELECT, GROUP BY ]

Kakuatan pakét ieu nyaéta laju ngolah data anu ageung.

panda

Situs web resmi: pandas.pydata.org Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Ngaran perpustakaan asalna tina istilah ékonomi "data panel", dipaké pikeun ngajelaskeun susunan multidimensional terstruktur inpormasi.

Ku pandas nyaéta Amérika Wes McKinney.

Lamun datang ka analisis data dina Python, sarua pandas No. Pakét tingkat luhur anu multifungsi pisan anu ngamungkinkeun anjeun pikeun ngalakukeun manipulasi sareng data, tina ngamuat data tina sumber naon waé pikeun ngabayangkeunana.

Masang bungkusan tambahan

Bungkusan anu dibahas dina tulisan ieu henteu kalebet dina distribusi dasar R sareng Python. Sanajan aya caveat leutik, lamun geus dipasang distribusi Anaconda, lajeng install tambahan pandas teu diperyogikeun.

Masang pakét dina R

Upami anjeun parantos muka lingkungan pangembangan RStudio sahenteuna sakali, anjeun panginten parantos terang kumaha masang pakét anu diperyogikeun dina basa Sunda. Pikeun masang pakét, nganggo paréntah standar. install.packages() ku jalan langsung dina basa Sunda sorangan.

# установка пакетов
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")

Saatos instalasi, bungkusan kedah dihubungkeun, anu dina kalolobaan kasus paréntah dianggo library().

# подключение или импорт пакетов в рабочее окружение
library(vroom)
library(readr)
library(dplyr)
library(data.table)

Masang bungkusan dina Python

Janten, upami anjeun parantos dipasang Python murni, teras pandas Anjeun kudu masang eta sacara manual. Buka garis paréntah, atanapi terminal, gumantung kana sistem operasi anjeun sareng lebetkeun paréntah di handap ieu.

pip install pandas

Teras we uih deui ka Python sareng ngimpor paket anu dipasang kalayan paréntah import.

import pandas as pd

Ngamuat Data

Data mining mangrupikeun salah sahiji léngkah anu paling penting dina nganalisis data. Duanana Python jeung R, upami hoyong, nyadiakeun Anjeun sareng kasempetan éksténsif pikeun ménta data tina sagala sumber: file lokal, file ti Internet, jaba, sagala jinis database.

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Sapanjang tulisan urang bakal ngagunakeun sababaraha set data:

  1. Dua undeuran tina Google Analytics.
  2. Titanic Panumpang Dataset.

Sadaya data aya dina abdi GitHub dina bentuk file csv sareng tsv. Dimana urang bakal menta aranjeunna ti?

Ngamuat data kana basa Sunda: tidyverse, vroom, readr

Pikeun ngamuat data kana perpustakaan tidyverse Aya dua pakét: vroom, readr. vroom leuwih modern, tapi dina mangsa nu bakal datang bungkusan bisa digabungkeun.

cutatan ti dokuméntasi resmi vroom.

vroom vs maca
Naon pelepasan ti vroom hartina keur readr? Pikeun ayeuna urang ngarencanakeun pikeun ngantepkeun dua bungkusan éta mekar sacara misah, tapi sigana urang bakal ngahijikeun bungkusan di hareup. Salah sahiji karugian pikeun maca anu teu puguh vroom nyaéta masalah data anu tangtu henteu tiasa dilaporkeun sateuacanna, janten kumaha cara anu pangsaéna pikeun ngahijikeunana peryogi sababaraha pamikiran.

vroom vs readerr
Naon hartosna pelepasan? vroom keur readr? Di momen urang rencanana pikeun ngembangkeun duanana bungkusan misah, tapi urang meureun bakal ngagabungkeun aranjeunna dina mangsa nu bakal datang. Salah sahiji kalemahan tina males maca vroom éta sababaraha masalah sareng data teu bisa dilaporkeun sateuacanna, jadi Anjeun kudu mikir ngeunaan kumaha pangalusna pikeun ngagabungkeun aranjeunna.

Dina artikel ieu urang bakal ningali duanana bungkusan data loading:

Ngamuat data kana R: pakét vroom

# install.packages("vroom")
library(vroom)

# Чтение данных
## vroom
ga_nov  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Ngamuat data kana R: readr

# install.packages("readr")
library(readr)

# Чтение данных
## readr
ga_nov  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Dina iket vroom, paduli format data csv / tsv, loading dilumangsungkeun ku fungsi nu ngaranna sarua vroom(), dina bungkusan readr kami ngagunakeun fungsi béda pikeun tiap format read_tsv() и read_csv().

Ngamuat data kana basa Sunda: data.tabél

В data.table Aya fungsi pikeun ngamuat data fread().

Loading data kana Sunda: pakét data.table

# install.packages("data.table")
library(data.table)

## data.table
ga_nov  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Ngamuat data dina Python: pandas

Upami urang ngabandingkeun sareng bungkusan R, maka dina hal ieu sintaksis anu paling caket pandas bakal readr, sabab pandas bisa ménta data ti mana, tur aya sakabeh kulawarga fungsi dina pakét ieu read_*().

  • read_csv()
  • read_excel()
  • read_sql()
  • read_json()
  • read_html()

Sareng seueur fungsi sanésna anu dirancang pikeun maca data tina sababaraha format. Tapi pikeun tujuan urang éta cukup read_table() atawa read_csv() ngagunakeun argumen Sep pikeun nangtukeun separator kolom.

Ngamuat data dina Python: pandas

import pandas as pd

ga_nov  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_nowember.csv", sep = "t")
ga_dec  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_december.csv", sep = "t")
titanic = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/titanic.csv")

Nyieun dataframes

Méja Titanic, nu urang dimuat, aya sawah awewe atawa lalaki, nu nyimpen identifier gender panumpang urang.

Tapi pikeun presentasi data anu langkung merenah dina hal gender panumpang, anjeun kedah nganggo nami tinimbang kode gender.

Jang ngalampahkeun ieu, urang bakal nyieun hiji diréktori leutik, tabel nu bakal aya ngan 2 kolom (kode jeung ngaran génder) jeung 2 baris, masing-masing.

Nyieun dataframe dina basa Sunda: tidyverse, dplyr

Dina conto kode di handap, urang nyieun dataframe dipikahoyong ngagunakeun fungsi tibble() .

Nyieun dataframe dina basa Sunda: dplyr

## dplyr
### создаём справочник
gender <- tibble(id = c(1, 2),
                 gender = c("female", "male"))

Nyieun dataframe dina basa Sunda: data.table

Nyieun dataframe dina basa Sunda: data.table

## data.table
### создаём справочник
gender <- data.table(id = c(1, 2),
                    gender = c("female", "male"))

Nyieun dataframe di Python: pandas

В pandas Nyiptakeun pigura dilumangsungkeun dina sababaraha tahapan, mimiti urang nyieun kamus, lajeng urang ngarobah kamus kana dataframe a.

Nyieun dataframe di Python: pandas

# создаём дата фрейм
gender_dict = {'id': [1, 2],
               'gender': ["female", "male"]}
# преобразуем словарь в датафрейм
gender = pd.DataFrame.from_dict(gender_dict)

Milih Kolom

Tabél anu anjeun damel tiasa ngandung puluhan atanapi bahkan ratusan kolom data. Tapi pikeun ngalaksanakeun analisa, sakumaha aturan, anjeun henteu peryogi sadaya kolom anu aya dina tabel sumber.

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Ku alatan éta, salah sahiji operasi munggaran anu anjeun bakal laksanakeun sareng tabel sumber nyaéta mupus inpormasi anu teu dipikabutuh sareng ngosongkeun mémori anu aya dina inpormasi ieu.

Milih kolom dina basa Sunda: tidyverse, dplyr

sintaksis dplyr sami pisan sareng basa query SQL, upami anjeun wawuh sareng anjeun bakal gancang ngawasaan pakét ieu.

Pikeun milih kolom, paké fungsina select().

Di handap ieu conto kode anu anjeun tiasa milih kolom ku cara ieu:

  • Listing ngaran kolom diperlukeun
  • Tingal ngaran kolom maké éksprési biasa
  • Ku tipe data atawa sipat séjén tina data anu dikandung dina kolom

Milih kolom dina R: dplyr

# Выбор нужных столбцов
## dplyr
### выбрать по названию столбцов
select(ga_nov, date, source, sessions)
### исключь по названию столбцов
select(ga_nov, -medium, -bounces)
### выбрать по регулярному выражению, стобцы имена которых заканчиваются на s
select(ga_nov, matches("s$"))
### выбрать по условию, выбираем только целочисленные столбцы
select_if(ga_nov, is.integer)

Milih kolom dina basa Sunda: data.table

Operasi sarua dina data.table dilakukeun rada béda, dina awal tulisan kuring nyayogikeun pedaran ngeunaan naon dalil anu aya dina kurung kuadrat data.table.

DT[i,j,by]

dimana:
abdi - dimana, i.e. nyaring ku baris
j - pilih|update|do, i.e. milih kolom sareng ngarobahna
ku - data grouping

Milih kolom dina basa Sunda: data.table

## data.table
### выбрать по названию столбцов
ga_nov[ , .(date, source, sessions) ]
### исключь по названию столбцов
ga_nov[ , .SD, .SDcols = ! names(ga_nov) %like% "medium|bounces" ]
### выбрать по регулярному выражению
ga_nov[, .SD, .SDcols = patterns("s$")]

Variabel .SD ngidinan Anjeun pikeun ngakses sadaya kolom, jeung .SDcols nyaring kolom anu diperyogikeun nganggo ekspresi biasa, atanapi fungsi anu sanés pikeun nyaring nami kolom anu anjeun peryogikeun.

Milih kolom dina Python, pandas

Pikeun milih kolom dumasar ngaran dina pandas cukup nyadiakeun daptar ngaran maranéhanana. Sareng pikeun milih atanapi ngaluarkeun kolom ku nami nganggo ekspresi biasa, anjeun kedah nganggo fungsi drop() и filter(), jeung argumen sumbu = 1, anu anjeun nunjukkeun yén anjeun kedah ngolah kolom tinimbang barisan.

Pikeun milih widang dumasar tipe data, paké pungsi select_dtypes(), jeung kana argumen ngasupkeun atawa ngaluarkeun lulus daptar tipe data pakait jeung widang nu Anjeun kudu milih.

Milih kolom dina Python: pandas

# Выбор полей по названию
ga_nov[['date', 'source', 'sessions']]
# Исключить по названию
ga_nov.drop(['medium', 'bounces'], axis=1)
# Выбрать по регулярному выражению
ga_nov.filter(regex="s$", axis=1)
# Выбрать числовые поля
ga_nov.select_dtypes(include=['number'])
# Выбрать текстовые поля
ga_nov.select_dtypes(include=['object'])

Nyaring baris

Contona, tabel sumber bisa ngandung sababaraha taun data, tapi anjeun ngan perlu nganalisis bulan kaliwat. Sakali deui, garis tambahan bakal ngalambatkeun prosés ngolah data sareng ngahambat mémori PC.

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Nyaring baris dina basa Sunda: tydyverse, dplyr

В dplyr fungsi nu dipaké pikeun nyaring baris filter(). Butuh dataframe salaku argumen kahiji, teras anjeun daptar kaayaan nyaring.

Nalika nulis ekspresi logis pikeun nyaring tabel, dina hal ieu, tangtukeun ngaran kolom tanpa tanda petik sarta tanpa deklarasi ngaran tabel.

Nalika nganggo sababaraha ekspresi logis pikeun nyaring, paké operator di handap ieu:

  • & atawa koma - logis AND
  • | - logis ATAWA

Nyaring baris dina basa Sunda: dplyr

# фильтрация строк
## dplyr
### фильтрация строк по одному условию
filter(ga_nov, source == "google")
### фильтр по двум условиям соединённым логическим и
filter(ga_nov, source == "google" & sessions >= 10)
### фильтр по двум условиям соединённым логическим или
filter(ga_nov, source == "google" | sessions >= 10)

Nyaring baris dina basa Sunda: data.table

Salaku geus I wrote luhur, di data.table sintaksis konversi data diapit ku kurung kuadrat.

DT[i,j,by]

dimana:
abdi - dimana, i.e. nyaring ku baris
j - pilih|update|do, i.e. milih kolom sareng ngarobahna
ku - data grouping

Argumen dipaké pikeun nyaring baris i, nu boga posisi kahiji dina kurung kuadrat.

Kolom diaksés dina ekspresi logis tanpa tanda petik sarta tanpa nangtukeun nami tabel.

Babasan logis aya hubunganana dina cara anu sami sareng dina dplyr ngaliwatan & jeung | operator.

Nyaring baris dina basa Sunda: data.table

## data.table
### фильтрация строк по одному условию
ga_nov[source == "google"]
### фильтр по двум условиям соединённым логическим и
ga_nov[source == "google" & sessions >= 10]
### фильтр по двум условиям соединённым логическим или
ga_nov[source == "google" | sessions >= 10]

Nyaring string dina Python: pandas

Nyaring dumasar baris dina pandas sarupa nyaring di data.table, sarta dipigawé dina kurung kuadrat.

Dina hal ieu, aksés ka kolom dilumangsungkeun ku nunjukkeun nami pigura data; teras nami kolom ogé tiasa dituduhkeun dina tanda petik dina kurung kuadrat (conto df['col_name']), atawa tanpa tanda petik sanggeus periode (conto df.col_name).

Lamun perlu nyaring dataframe ku sababaraha kaayaan, unggal kaayaan kudu disimpen dina kurung. Kaayaan logis disambungkeun saling ku operator & и |.

Nyaring string dina Python: pandas

# Фильтрация строк таблицы
### фильтрация строк по одному условию
ga_nov[ ga_nov['source'] == "google" ]
### фильтр по двум условиям соединённым логическим и
ga_nov[(ga_nov['source'] == "google") & (ga_nov['sessions'] >= 10)]
### фильтр по двум условиям соединённым логическим или
ga_nov[(ga_nov['source'] == "google") | (ga_nov['sessions'] >= 10)]

Grup jeung aggregation data

Salah sahiji operasi anu paling sering dianggo dina analisis data nyaéta ngagolongkeun sareng agrégasi.

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Sintaksis pikeun ngalakukeun operasi ieu sumebar ka sadaya bungkusan anu urang tingali.

Dina hal ieu, urang bakal nyandak dataframe salaku conto Titanic, jeung ngitung jumlah jeung ongkos rata-rata tikét gumantung kana kelas kabin.

Grup jeung aggregation data dina basa Sunda: tidyverse, dplyr

В dplyr fungsi nu dipaké pikeun grup group_by(), sarta pikeun aggregation summarise(). Kanyataanna, dplyr aya sakabeh kulawarga fungsi summarise_*(), Tapi tujuan artikel ieu téh pikeun ngabandingkeun sintaksis dasar, jadi urang moal balik kana leuweung misalna.

Fungsi agrégasi dasar:

  • sum() - kasimpulan
  • min() / max() - nilai minimum jeung maksimum
  • mean() - rata
  • median() - median
  • length() - kuantitas

Grouping jeung aggregation dina basa Sunda: dplyr

## dplyr
### группировка и агрегация строк
group_by(titanic, Pclass) %>%
  summarise(passangers = length(PassengerId),
            avg_price  = mean(Fare))

Pikeun fungsi group_by() urang lulus tabel salaku argumen munggaran Titanic, lajeng nunjukkeun widang Pclass, ku nu urang bakal grup tabel urang. Hasil tina operasi ieu ngagunakeun operator %>% diliwatan salaku argumen munggaran pikeun fungsi summarise(), sareng nambihan 2 widang deui: panumpang и avg_price. Dina kahiji, ngagunakeun fungsi length() diitung jumlah tiket, sarta dina kadua ngagunakeun fungsi mean() nampi harga tikét rata-rata.

Pengelompokan jeung ngumpulkeun data dina basa Sunda: data.tabél

В data.table argumen dipaké pikeun aggregation j nu boga posisi kadua dina kurung kuadrat, sarta pikeun grup by atawa keyby, nu boga posisi katilu.

Daptar fungsi agrégasi dina hal ieu idéntik jeung nu dijelaskeun dina dplyr, sabab Ieu fungsi tina sintaksis basa Sunda.

Pengelompokan jeung agrégat dina basa Sunda: data.tabél

## data.table
### фильтрация строк по одному условию
titanic[, .(passangers = length(PassengerId),
            avg_price  = mean(Fare)),
        by = Pclass]

Pangkelompok sareng agrégasi data dina Python: pandas

Ngagolongkeun di pandas sarupa jeung dplyr, tapi aggregation teu sarupa jeung dplyr teu asup data.table.

Pikeun grup, ngagunakeun métode groupby(), dimana anjeun kedah ngalebetkeun daptar kolom dimana dataframe bakal dikelompokkeun.

Pikeun aggregation anjeun tiasa nganggo metodeu agg()nu narima kamus. Konci kamus nyaéta kolom dimana anjeun bakal nerapkeun fungsi agrégasi, sareng nilaina mangrupikeun nami fungsi agrégasi.

Fungsi agrégat:

  • sum() - kasimpulan
  • min() / max() - nilai minimum jeung maksimum
  • mean() - rata
  • median() - median
  • count() - kuantitas

fungsi reset_index() dina conto di handap ieu dipaké pikeun ngareset indexes nested éta pandas standar pikeun sanggeus aggregation data.

simbul ngidinan Anjeun pikeun pindah ka garis salajengna.

Grup sareng agrégasi dina Python: pandas

# группировка и агрегация данных
titanic.groupby(["Pclass"]).
    agg({'PassengerId': 'count', 'Fare': 'mean'}).
        reset_index()

Ngagabung nangtung tina tabel

Operasi dimana anjeun ngagabung dua atanapi langkung tabel tina struktur anu sami. Data anu kami muatkeun ngandung tabel ga_nov и ga_dec. tabél ieu idéntik dina struktur, i.e. gaduh kolom anu sami, sareng jinis data dina kolom ieu.

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Ieu mangrupikeun unggah tina Google Analytics pikeun bulan Nopémber sareng Désémber, dina bagian ieu kami bakal ngagabungkeun data ieu kana hiji méja.

Vertikal ngagabung tabel dina basa Sunda: tidyverse, dplyr

В dplyr Anjeun tiasa ngagabungkeun 2 tabel kana hiji ngagunakeun fungsi bind_rows(), ngalirkeun tabel salaku argumen na.

Nyaring baris dina basa Sunda: dplyr

# Вертикальное объединение таблиц
## dplyr
bind_rows(ga_nov, ga_dec)

Vertikal ngagabung tabel di Sunda: data.table

Éta ogé euweuh pajeulit, hayu urang ngagunakeun rbind().

Nyaring baris dina basa Sunda: data.table

## data.table
rbind(ga_nov, ga_dec)

Vertikal ngagabung tabel di Python: pandas

В pandas fungsi nu dipaké pikeun gabung tabel concat(), dimana anjeun kedah ngalebetkeun daptar pigura pikeun ngahijikeunana.

Nyaring string dina Python: pandas

# вертикальное объединение таблиц
pd.concat([ga_nov, ga_dec])

Gabungan horizontal tabel

Operasi dimana kolom ti kadua ditambahkeun kana tabel kahiji ku konci. Hal ieu mindeng dipaké nalika enriching tabel fakta (contona, tabel kalawan data jualan) kalawan sababaraha data rujukan (contona, biaya produk).

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Aya sababaraha jinis gabungan:

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Dina tabel saméméhna dimuat Titanic urang boga kolom awewe atawa lalaki, nu pakait jeung kode gender panumpang urang:

1 - awewe
2 - lalaki

Ogé, kami geus dijieun tabel - buku rujukan génder. Pikeun presentasi leuwih merenah data ngeunaan gender panumpang, urang kudu nambahan ngaran gender tina diréktori nu génder kana méja Titanic.

Tabel horisontal gabung dina basa Sunda: tidyverse, dplyr

В dplyr Aya sakabeh kulawarga fungsi pikeun ngagabung horizontal:

  • inner_join()
  • left_join()
  • right_join()
  • full_join()
  • semi_join()
  • nest_join()
  • anti_join()

Anu biasa dianggo dina prakték kuring nyaéta left_join().

Salaku dua argumen munggaran, fungsi nu didaptarkeun di luhur nyandak dua tabel pikeun gabung, sarta salaku argumen katilu by anjeun kudu nangtukeun kolom pikeun gabung.

Tabel horisontal gabung dina basa Sunda: dplyr

# объединяем таблицы
left_join(titanic, gender,
          by = c("Sex" = "id"))

Gabungan horizontal tabel dina basa Sunda: data.table

В data.table Anjeun kedah gabung tabel ku konci ngagunakeun fungsi merge().

Argumen pikeun ngahiji () fungsi dina data.table

  • x, y - Tables pikeun gabung
  • ku - Kolom anu mangrupakeun konci pikeun gabung lamun boga ngaran anu sarua dina duanana tabel
  • by.x, by.y - Ngaran kolom pikeun dihijikeun, upami aranjeunna gaduh nami anu béda dina tabél
  • all, all.x, all.y — Tipe Gabung, kabéh baris mulangkeun sakabéh baris ti duanana tabel, all.x pakait jeung operasi Kénca JOIN (bakal ninggalkeun sakabéh baris tabel kahiji), all.y — pakait jeung RIGHT JOIN operasi (bakal ninggalkeun sakabéh baris tabel kadua).

Gabungan horizontal tabel dina basa Sunda: data.table

# объединяем таблицы
merge(titanic, gender, by.x = "Sex", by.y = "id", all.x = T)

méja horisontal gabung dina Python: pandas

Kitu ogé dina data.tabledi pandas fungsi nu dipaké pikeun gabung tabel merge().

Argumen fungsi ngahiji () dina pandas

  • kumaha - Jenis sambungan: kénca, katuhu, luar, jero
  • on - Kolom nu mangrupakeun konci lamun boga ngaran anu sarua dina duanana tabel
  • left_on, right_on - Ngaran kolom konci, lamun maranéhna boga ngaran béda dina tabel

méja horisontal gabung dina Python: pandas

# объединяем по ключу
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")

fungsi jandela dasar sarta kolom diitung

Fungsi jandela sarua hartina jeung fungsi aggregation, sarta ogé mindeng dipaké dina analisis data. Tapi teu kawas fungsi aggregation, fungsi jandela teu ngarobah jumlah baris dataframe kaluar.

Basa mana anu kedah dipilih pikeun damel sareng data - R atanapi Python? Duanana! Migrasi ti panda ka tidyverse jeung data.tabel jeung deui

Intina, ngagunakeun fungsi jandela, urang dibeulah dataframe asup kana bagian nurutkeun sababaraha kriteria, i.e. ku nilai hiji widang, atawa sababaraha widang. Sareng urang ngalaksanakeun operasi aritmetika dina unggal jandela. Hasil tina operasi ieu bakal balik dina unggal garis, i.e. tanpa ngarobah jumlah total baris dina tabél.

Contona, hayu urang nyandak tabel Titanic. Urang tiasa ngitung sabaraha persentase biaya unggal tikét dina kelas kabin na.

Jang ngalampahkeun ieu, urang kedah nampi dina unggal jalur total biaya tikét pikeun kelas kabin ayeuna dimana tikét dina jalur ieu milik, teras bagikeun biaya unggal tikét ku total biaya sadaya tiket kelas kabin anu sami. .

Jandéla fungsi dina basa Sunda: tidyverse, dplyr

Pikeun nambahkeun kolom anyar, tanpa ngagunakeun grup baris, dina dplyr ngalayanan fungsi mutate().

Anjeun tiasa ngabéréskeun masalah anu dijelaskeun di luhur ku cara ngagolongkeun data dumasar lapangan Pclass jeung summing widang dina kolom anyar Tayar. Salajengna, ungroup tabel sarta ngabagi nilai widang Tayar kana naon anu lumangsung dina hambalan saméméhna.

Jandéla fungsi dina basa Sunda: dplyr

group_by(titanic, Pclass) %>%
  mutate(Pclass_cost = sum(Fare)) %>%
  ungroup() %>%
  mutate(ticket_fare_rate = Fare / Pclass_cost)

Jandéla fungsi dina basa Sunda: data.table

Algoritma solusi tetep sami sareng dina dplyr, urang kudu ngabagi tabel kana jandéla ku sawah Pclass. Kaluaran dina kolom anyar jumlah pikeun grup pakait jeung unggal baris, sarta nambahan kolom nu urang ngitung pangsa biaya unggal tikét dina grup na.

Pikeun nambahkeun kolom anyar kana data.table operator hadir :=. Di handap ieu conto ngarengsekeun masalah ngagunakeun pakét data.table

Jandéla fungsi dina basa Sunda: data.table

titanic[,c("Pclass_cost","ticket_fare_rate") := .(sum(Fare), Fare / Pclass_cost), 
        by = Pclass]

Jandéla fungsi dina Python: pandas

Hiji cara pikeun nambahkeun kolom anyar kana pandas - ngagunakeun fungsi assign(). Pikeun nyimpulkeun biaya tikét ku kelas kabin, tanpa ngagolongkeun barisan, kami bakal nganggo fungsina transform().

Di handap ieu conto solusi nu urang tambahkeun kana tabél Titanic sarua 2 kolom.

Jandéla fungsi dina Python: pandas

titanic.assign(Pclass_cost      =  titanic.groupby('Pclass').Fare.transform(sum),
               ticket_fare_rate = lambda x: x['Fare'] / x['Pclass_cost'])

Fungsi jeung métode korespondensi tabel

Di handap ieu tabel korespondensi antara métode pikeun ngalakukeun rupa operasi kalayan data dina bungkusan kami geus dianggap.

gambaran
tidyverse
data.tabel
panda

Ngamuat Data
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Nyieun dataframes
tibble()
data.table()
dict() + from_dict()

Milih Kolom
select()
argumen j, posisi kadua dina kurung kuadrat
urang lulus daptar kolom diperlukeun dina kurung kuadrat / drop() / filter() / select_dtypes()

Nyaring baris
filter()
argumen i, posisi kahiji dina kurung kuadrat
Kami daptar kaayaan nyaring dina kurung kuadrat / filter()

Pengelompokan jeung Aggregation
group_by() + summarise()
alesan j + by
groupby() + agg()

Uni nangtung tina tabél (UNION)
bind_rows()
rbind()
concat()

Gabungan tabel horizontal (JOIN)
left_join() / *_join()
merge()
merge()

fungsi jandela dasar sarta nambahkeun kolom diitung
group_by() + mutate()
argumen j ngagunakeun operator := + dalil by
transform() + assign()

kacindekan

Panginten dina tulisan anu kuring terangkeun sanés palaksanaan anu paling optimal pikeun ngolah data, janten kuring bakal bungah upami anjeun ngabenerkeun kasalahan kuring dina koméntar, atanapi ngan saukur nambihan inpormasi anu dipasihkeun dina tulisan sareng téknik sanés pikeun damel sareng data dina basa Sunda / Python.

Sakumaha anu kuring nyerat di luhur, tujuan tulisan éta sanés pikeun maksakeun pendapat ngeunaan basa mana anu langkung saé, tapi pikeun nyederhanakeun kasempetan pikeun diajar dua basa, atanapi, upami diperyogikeun, migrasi antara aranjeunna.

Upami anjeun resep kana tulisan éta, kuring bakal bungah gaduh palanggan énggal pikeun kuring youtube и telegram saluran.

tatanyaan

Mana tina bungkusan di handap ieu anu anjeun anggo dina padamelan anjeun?

Dina komentar anjeun tiasa nyerat alesan pikeun pilihan anjeun.

Ngan pamaké nu kadaptar bisa ilubiung dina survey. Daptar, Punten.

Paket ngolah data mana anu anjeun anggo (anjeun tiasa milih sababaraha pilihan)

  • 45,2%rapih19

  • 33,3%data.tabél14

  • 54,8%pandas23

42 pamaké milih. 9 pamaké abstained.

sumber: www.habr.com

Tambahkeun komentar