Datekin lan egitea R-n (oinarrizko gaitasunak, baita lubridate eta timeperiodsR paketeak ere)

Lortu uneko data edozein programazio-lengoaian, "Kaixo mundua!" R hizkuntza ez da salbuespena.

Artikulu honetan, R lengoaiaren oinarrizko sintaxian datekin lan egiteak nola funtzionatzen duen aztertuko dugu, eta datuekin lan egitean bere gaitasunak zabaltzen dituzten hainbat pakete erabilgarria ere aztertuko dugu:

  • lubridate — daten artean kalkulu aritmetikoak egiteko aukera ematen duen paketea;
  • timeperiodsR — Denbora tarteak eta horien osagaiak lantzeko paketea.

Datekin lan egitea R-n (oinarrizko gaitasunak, baita lubridate eta timeperiodsR paketeak ere)

Edukia

Datuen analisia interesatzen bazaizu, eta bereziki R hizkuntzan, nirea interesatuko zaizu telegrama и youtube kanalak. Eduki gehienak R hizkuntzari eskainitakoak dira.

  1. Datekin oinarrizko R sintaxian lan egitea
    1.1. Bihurtu testua datara
    1.2. Oinarrizko R-n data osagaiak ateratzea
  2. Datilekin lan egitea lubridate paketea erabiliz
    2.1. Bihurtu testua datara lubridate erabiliz
    2.2. Lubridatuaren paketea erabiliz data osagaiak erauztea
    2.3. Datekin eragiketa aritmetikoak
  3. Lan sinplifikatua aldiekin, timeperiodsR paketearekin
    3.1. Denbora-tarteak denbora-epeetanR
    3.2. Daten bektore bat iragaztea denbora-periodoakR erabiliz
  4. Ondorioa

Datekin oinarrizko R sintaxian lan egitea

Bihurtu testua datara

Oinarrizko R-k datak lantzeko funtzio multzo bat du. Oinarrizko sintaxiaren desabantaila funtzio-izen eta argumentuen kasua oso sakabanatuta dagoela eta ia lotura logikorik ez duela da. Hala ere, hizkuntzaren oinarrizko funtzioak ezagutu behar dituzu, beraz, haiekin hasiko gara.

Gehienetan datuak R-n, csv fitxategietatik edo beste iturri batzuetatik kargatzean, data bat jasotzen duzu testu gisa. Testu hau datu-mota egokia bihurtzeko, erabili funtzioa as.Date().

# создаём текстовый вектор с датами
my_dates <- c("2019-09-01", "2019-09-10", "2019-09-23")

# проверяем тип данных
class(my_dates)

#> [1] "character"

# преобразуем текст в дату
my_dates <- as.Date(my_dates)

# проверяем тип данных
class(my_dates)

#> [1] "Date"

Lehenespenez as.Date() data bi formatutan onartzen du: UUAA-MM-DD edo YYYY/MM/DD.
Zure datu multzoak beste formatu batean datak baditu, argumentua erabil dezakezu format.

as.Date("September 26, 2019", format = "%B %d, %Y")

formatuan edozein denbora-tarte eta bere formatua adierazten duten kate moduan operadoreak onartzen ditu; gehien erabiltzen diren balioak beheko taulan agertzen dira:

formatuan
Description

%d
Egunaren zenbakia hilabetean

%a
Asteko egunaren izenaren laburdura

%A
Asteko egunaren izen osoa

%w
Asteko egunaren zenbakia (0-6, non 0 igandea den)

%m
Bi digituko hilabeteko izendapena (01-12)

%b
Hilabetearen izenaren laburdura (apirila, martxoa, ...)

%B
Hilabete osoko izena

%y
Bi zifrako urtearen izendapena

%Y
Lau zifrako urtearen izendapena

%j
Urteko egunaren zenbakia (001 - 366)

%U
Urteko asteko zenbakia (00 - 53), astearen hasiera igandea

%W
Urteko aste zenbakia (00 - 53), astearen hasiera astelehena

Horren arabera, "26ko irailaren 2019a" hilabetearen, dataren eta urtearen izen osoa da. Data-formatu hau operadoreak erabiliz deskriba daiteke:"%B %d, %Y".

Non:

  • %B — Hilaren izen osoa
  • %d — Hilabeteko egunaren zenbakia
  • %Y — Lau zifrako urtearen izendapena

Data-formatua deskribatzean, garrantzitsua da zure kateko karaktere gehigarri guztiak sartzea, hala nola marratxoak, komak, puntuak, zuriuneak eta abar. Nire adibidean, "26ko irailaren 2019an", koma bat dago dataren ondoren, eta koma ere jarri behar duzu formatuaren deskribapenean:"%B %d, %Y".

Formatu estandarrekin bat ez datorren data bat jasotzen duzun egoerak daude (AAAA-MM-DD edo AAAA/MM/DD), baina baita zure sistema eragilean instalatutako lehenetsia ez den hizkuntza batean ere. Adibidez, data honela adierazten den datuak deskargatu dituzu: "15ko abenduaren 2019a". Kate hau data bihurtu aurretik, lokalizazioa aldatu behar duzu.

# Меняем локаль
Sys.setlocale("LC_TIME", "Russian")
# Конвертируем строку в дату
as.Date("Декабрь 15, 2019 г.", format = "%B %d, %Y")

Oinarrizko R-n data osagaiak ateratzea

Oinarrizko R-n ez daude funtzio asko klaseko objektu batetik data baten edozein zati ateratzeko aukera ematen dutenak data.

current_date <- Sys.Date() # текущая дата
weekdays(current_date)     # получить номер дня недели
months(current_date)       # получить номер месяца в году
quarters(current_date)     # получить номер квартала в году

Objektu klase nagusiaz gain data oinarrizko R-n denbora-zigilua gordetzen duten beste 2 datu mota daude: POSIXlt, POSIXct. Klase hauen arteko desberdintasun nagusia eta data da dataz gain ordua gordetzen dutela.

# получить текущую дату и время
current_time <- Sys.time()

# узнать класс объекта current_time 
class(current_time)

# "POSIXct" "POSIXt"

Funtzioa Sys.time() uneko data eta ordua formatuan itzultzen ditu POSIXct. Formatu honek esanahiaren antzekoa da UNIXTIME, eta UNIXen aroa hasi zenetik izandako segundo kopurua gordetzen du (gauerdia (UTC) 31ko abenduaren 1969tik 1eko urtarrilaren 1970era).

Class POSIXlt ordua eta data ere gordetzen ditu, eta haien osagai guztiak. Hori dela eta, egitura konplexuagoa duen objektua da, baina bertatik erraza den edozein data eta ordu osagaia delako izan ere POSIXlt honetan zerrenda.

# Получаем текущую дату и время
current_time_ct <- Sys.time()

# Преобразуем в формат POSIXlt
current_time_lt <- as.POSIXlt(current_time_ct)

# извлекаем компоненты даты и времени
current_time_lt$sec   # секунды
current_time_lt$min   # минуты
current_time_lt$hour  # часы
current_time_lt$mday  # день месяца
current_time_lt$mon   # месяц
current_time_lt$year  # год
current_time_lt$wday  # день недели
current_time_lt$yday  # день года
current_time_lt$zone  # часовой пояс

Zenbakizko eta testuko datuak formatuetara bihurtzea POSIX* funtzioen arabera gauzatzen da as.POSIXct() и as.POSIXlt(). Funtzio hauek argumentu multzo txiki bat dute.

  • x — Zenbakia, katea edo klase-objektua data, bihurtu beharrekoa;
  • tz — Ordu-eremua, lehenetsia "GMT";
  • formatua — x argumentura pasatzen diren datuak irudikatzen diren data-formatuaren deskribapena;
  • jatorria — Zenbaki bat POSIX bihurtzean bakarrik erabiltzen da; data objektu bat eta segundoak zenbatuko diren argumentu honetara pasa behar dituzu. Normalean UNIXTIME-tik itzultzeko erabiltzen da.

Zure data eta orduaren informazioa sartuta badago UNIXTIME, gero data argi eta irakurgarri batean bihurtzeko, erabili adibide hau:

# Конвертируем UNIXTIME в читаемую дату 
as.POSIXlt(1570084639,  origin = "1970-01-01")

Jatorrian edozein denbora-zigilu zehaztu dezakezu. Adibidez, zure datuek 15ko irailaren 2019etik 12:15etik segundo kopuru gisa data eta ordua badituzte, orduan data erabilera bihurtzeko:

# Конвертируем UNIXTIME в дату учитывая что начало отсчёта 15 сентября 2019 12:15
as.POSIXlt(1546123,  origin = "2019-09-15 12:15:00")

Datilekin lan egitea lubridate paketea erabiliz

lubridate Agian R hizkuntzan datak lantzeko pakete ezagunena. Hiru klase gehigarri eskaintzen dizkizu.

  • iraupenak — iraupena, i.e. bi denbora-zigiluren arteko segundo kopurua;
  • aldiak - aldiek daten arteko kalkuluak egiteko aukera ematen dute gizakiak irakur daitezkeen tarteetan: egunak, hilabeteak, asteak eta abar;
  • tarteak - denboran hasierako eta amaierako puntua ematen duten objektuak.

R hizkuntzan pakete gehigarrien instalazioa funtzio estandarra erabiliz egiten da install.packages().

Paketea instalatzen lubridate:

install.packages("lubridate")

Bihurtu testua datara lubridate erabiliz

Paketearen ezaugarriak lubridate Testua data bihurtzeko prozesua nabarmen erraztu eta data eta orduekin eragiketa aritmetikoak egiteko aukera ere ematen du.

Funtzioek uneko data edo data eta ordua lortzen lagunduko dizute today() и now().

today() # текущая дата
now()   # текущая дата и время

Kate bat data bihurtzeko lubridate Funtzio familia oso bat dago, zeinen izenak beti hiru hizkiz osatuta, eta dataren osagaien sekuentzia adierazten du:

  • y - urtea
  • m - hilabetea
  • d - eguna

Lubridate bidez testua data bihurtzeko funtzioen zerrenda

  • ymd()
  • ydm()
  • mdy()
  • myd()
  • dmy()
  • dym()
  • yq()

Kateak data bihurtzeko adibide batzuk:

ymd("2017 jan 21")
mdy("March 20th, 2019")
dmy("1st april of 2018")

Ikus dezakezunez lubridate Askoz eraginkorragoa da data-deskribapenak testu gisa antzemateko, eta testua data bihurtzeko aukera ematen du formatua deskribatzeko operadore gehigarririk erabili gabe.

Lubridatuaren paketea erabiliz data osagaiak erauztea

Erabiliz ere lubridate data batetik edozein osagai lor dezakezu:

dt <- ymd("2017 jan 21")

year(dt)  # год
month(dt) # месяц
mday(dt)  # день в месяце
yday(dt)  # день в году
wday(dt)  # день недели

Datekin eragiketa aritmetikoak

Baina funtzionalitate garrantzitsuena eta oinarrizkoena lubridate datekin hainbat eragiketa aritmetiko egiteko gaitasuna da.

Data biribiltzea hiru funtziok egiten dute:

  • floor_date — iraganaldi hurbilenera biribiltzea
  • ceiling_date — etorkizun hurbilera biribiltzea
  • round_date - hurbilen dagoen ordura biribiltzea

Funtzio horietako bakoitzak argumentu bat du unitatebiribiltzeko unitatea zehazteko aukera ematen duena: segundoa, minutua, ordua, eguna, astea, hilabetea, bihilabetea, hiruhilekoa, denboraldia, urte erdia, urtea.

dt <- ymd("2017 jan 21")

round_date(dt, unit = "month")    # округлить до месяца
round_date(dt, unit = "3 month")  # округлить до 3 месяцев
round_date(dt, unit = "quarter")  # округлить до квартала
round_date(dt, unit = "season")   # округлить до сезона
round_date(dt, unit = "halfyear") # округлить до полугодия

Beraz, asma dezagun nola lortu uneko datatik 8 egunera dagoen data eta egin bi daten artean beste hainbat kalkulu aritmetiko.

today() + days(8)   # какая дата будет через 8 дней
today() - months(2) # какая дата была 2 месяца назад
today() + weeks(12) # какая дата будет через 12 недель
today() - years(2)  # какая дата была 2 года назад

Lan sinplifikatua aldiekin, timeperiodsR paketearekin.

timeperiodsR — 2019ko irailean CRANen argitaratu zen datak lantzeko pakete berri bat.

Paketea instalatzen timeperiodsR:

install.packages("timeperiodsR")

Helburu nagusia data jakin bati dagokion denbora tarte jakin bat azkar zehaztea da. Adibidez, bere funtzioak erabiliz erraz egin dezakezu:

  • Lortu azken astea, hilabetea, hiruhilekoa edo urtea R-n.
  • Lortu data bati dagokion denbora-tarte zehatz bat, adibidez, azken 4 asteak.
  • Erraza da bere osagaiak ateratzen den denbora-tartetik: hasiera eta amaiera data, tartean sartutako egun kopurua, bertan sartzen diren daten sekuentzia osoa.

Pakete-funtzio guztien izena timeperiodsR intuitiboak dira eta bi zati ditu: norabidea_tarte, non:

  • norabidea bertan, data jakin bati erlatiboa mugitu behar duzu: azken_n, aurreko, hau, hurrengo, hurrengo_n.
  • denborazkoa tarte epea kalkulatzeko: eguna, astea, hilabetea, hiruhilekoa, urtea.

Funtzio multzo osoa:

  • last_n_days()
  • last_n_weeks()
  • last_n_months()
  • last_n_quarters()
  • last_n_years()
  • previous_week()
  • previous_month()
  • previous_quarter()
  • previous_year()
  • this_week()
  • this_month()
  • this_quarter()
  • this_year()
  • next_week()
  • next_month()
  • next_quarter()
  • next_year()
  • next_n_days()
  • next_n_weeks()
  • next_n_months()
  • next_n_quarters()
  • next_n_years()
  • custom_period()

Denbora-tarteak denbora-epeetanR

Funtzio hauek erabilgarriak dira azken asteko edo hilabeteko datuetan oinarritutako txostenak egin behar dituzun kasuetan. Azken hilabetea lortzeko, erabili izen bereko funtzioa previous_month():

prmonth <- previous_month()

Horren ondoren objektu bat izango duzu hilabetea class TPR, zeinetatik osagai hauek erraz lor daitezke:

  • epearen hasiera data, gure adibidean hau azken hilabetea da
  • epearen amaiera data
  • epean sartutako egun kopurua
  • aldian sartutako daten sekuentzia

Gainera, osagai bakoitza modu ezberdinetan lor dezakezu:

# первый день периода
prmonth$start
start(prmonth)

# последний день периода
prmonth$end
end(prmonth)

# последовательность дат
prmonth$sequence
seq(prmonth)

# количество дней входящих в период
prmonth$length
length(prmonth)

Osagairen bat ere lor dezakezu argumentua erabiliz parte, pakete-funtzio bakoitzean dagoena. Balio posibleak: hasiera, amaiera, sekuentzia, luzera.

previous_month(part = "start")    # начало периода
previous_month(part = "end")      # конец периода
previous_month(part = "sequence") # последовательность дат
previous_month(part = "length")   # количество дней в периоде

Beraz, ikus ditzagun paketeen funtzioetan eskuragarri dauden argumentu guztiak timeperiodsR:

  • x — Denbora-tartea kalkulatuko den erreferentzia-data, uneko data lehenespenez;
  • n — Epean sartuko den tarte kopurua, aurreko 3 asteak adibidez;
  • part — Objektuaren zein osagai tpr lortu behar duzu, lehenespenez all;
  • week_start — Argumentua asteekin lan egiteko funtzioetan bakarrik dago, eta hasieratzat hartuko den asteko egunaren zenbakia ezartzeko aukera ematen du. Lehenespenez, astearen hasiera astelehena da, baina edozein ezar dezakezu. 1 - astelehenetik 7ra - igandera.

Horrela, edozein denbora-tarte kalkula dezakezu uneko datarekin edo beste edozein datarekin alderatuta; hona hemen adibide batzuk:

# получить 3 прошлые недели
# от 6 октября 2019 года
# начало недели - понедельник
last_n_weeks(x = "2019-10-06", 
             n = 3, 
             week_start = 1)

 Time period: from  9 September of 2019, Monday to 29 September of 2019, Sunday

Urriaren 6a igandea da:
Datekin lan egitea R-n (oinarrizko gaitasunak, baita lubridate eta timeperiodsR paketeak ere)

Urriaren 6arekin alderatuta, aurreko 3 asteak hartuko dituen epe bat behar dugu. Urriaren 6a bera barne hartzen duen astea sartu gabe. Horren arabera, irailaren 9tik irailaren 29ra bitarteko epea da.

Datekin lan egitea R-n (oinarrizko gaitasunak, baita lubridate eta timeperiodsR paketeak ere)

# получить месяц отстающий на 4 месяца
# от 16 сентября 2019 года
previous_month(x = "2019-09-16", n = 4)

 Time period: from  1 May of 2019, Wednesday to 31 May of 2019, Friday

Adibide honetan, duela 4 hilabete izan zen hilabetea interesatzen zaigu, 16ko irailaren 2019tik hasten bagara, 2019ko maiatza zen.

Daten bektore bat iragaztea denbora-periodoakR erabiliz

Datak iragazteko timeperiodsR Hainbat operadore daude:

  • %left_out% - tpr klaseko bi objektu konparatzen ditu eta eskuinekoan falta den ezkerreko balioa itzultzen du.
  • %left_in% - tpr klaseko bi objektu konparatzen ditu eta eskuinekoan sartuta dauden ezkerreko objektuaren datak itzultzen ditu.
  • %right_out% - tpr klaseko bi objektu konparatzen ditu eta ezkerrekotik falta den eskuinekoaren balioa itzultzen du.
  • %right_in% - tpr klaseko bi objektu konparatzen ditu, eta ezkerrean dagoen eskuineko objektutik datak itzultzen ditu.

period1 <- this_month("2019-11-07")
period2 <- previous_week("2019-11-07")

period1 %left_in% period2   # получить даты из period1 которые входят в period2
period1 %left_out% period2  # получить даты из period1 которые не входят в period2
period1 %right_in% period2  # получить даты из period2 которые входят в period1
period1 %right_out% period2 # получить даты из period2 которые не входят в period1

Paketean timeperiodsR bada ofiziala, errusierazkoa YouTube erreprodukzio-zerrenda.

Ondorioa

Datak lantzeko R hizkuntzan diseinatutako objektuen klaseak zehatz-mehatz aztertu ditugu. Gainera, orain daten eragiketa aritmetikoak egin ditzakezu eta paketea erabiliz denbora-tarteak azkar lor ditzakezu timeperiodsR.

R hizkuntza interesatzen bazaizu, nire telegram kanalera harpidetzera gonbidatzen zaitut R4marketinga, zeinetan egunero zure eguneroko arazoak konpontzeko R hizkuntza erabiltzeari buruzko material erabilgarriak partekatzen ditut.

Iturria: www.habr.com

Gehitu iruzkin berria