Ukusebenza nezinsuku ku-R (amakhono ayisisekelo, kanye namaphakheji we-lubridate nama-timeperiodsR)

Thola idethi yamanje kunoma yiluphi ulimi lokuhlela, umsebenzi olingana nokuthi "Sawubona mhlaba!" Ulimi lwesi-R aluhlukile.

Kulesi sihloko, sizobheka ukuthi ukusebenza nezinsuku kusebenza kanjani ku-syntax eyisisekelo yolimi lwe-R, futhi sibheke amaphakheji amaningana awusizo akhulisa amandla awo lapho esebenza nezinsuku:

  • lubridate - iphasela elikuvumela ukuthi wenze izibalo ze-arithmetic phakathi nezinsuku;
  • timeperiodsR - iphakheji yokusebenza ngezikhawu zesikhathi kanye nezingxenye zazo.

Ukusebenza nezinsuku ku-R (amakhono ayisisekelo, kanye namaphakheji we-lubridate nama-timeperiodsR)

Okuqukethwe

Uma ungathanda ukuhlaziya idatha, futhi ikakhulukazi ulimi R, ungase ube nentshisekelo yami telegram и youtube iziteshi. Iningi lokuqukethwe linikezelwe olimini lwe-R.

  1. Ukusebenza namadethi ku-syntax eyisisekelo ye-R
    1.1. Guqula umbhalo ube yimanje
    1.2. Imonyula izingxenye zedethi ku-R eyisisekelo
  2. Ukusebenza ngezinsuku usebenzisa iphakheji ye-lubridate
    2.1. Guqula umbhalo ube yimanje usebenzisa i-lubridate
    2.2. Ikhipha izingxenye zedethi kusetshenziswa iphakheji ye-lubridate
    2.3. Imisebenzi ye-Arithmetic enezinsuku
  3. Umsebenzi owenziwe lula onezikhathi, iphakethe le-timeperiodsR
    3.1. Izikhawu zesikhathi ezinkathini zesikhathiR
    3.2. Ukuhlunga i-vector yamadethi kusetshenziswa i-timeperiodsR
  4. isiphetho

Ukusebenza namadethi ku-syntax eyisisekelo ye-R

Guqula umbhalo ube yimanje

I-Basic R inesethi yemisebenzi yokusebenza namadethi. Ububi be-syntax eyisisekelo ukuthi indaba yamagama emisebenzi nama-agumenti ihlakazeke kakhulu futhi ayinakho nhlobo ukuxhumana okunengqondo. Nokho, udinga ukwazi imisebenzi eyisisekelo yolimi, ngakho sizoqala ngayo.

Imvamisa uma ulayisha idatha ku-R, isuka kumafayela e-csv, noma eminye imithombo, uthola idethi njengombhalo. Ukuze uguqule lo mbhalo ube ohlotsheni olulungile lwedatha, sebenzisa umsebenzi 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"

Ngokuzenzakalelayo as.Date() yamukela usuku ngamafomethi amabili: YYYY-MM-DD noma YYYY/MM/DD.
Uma isethi yedatha yakho iqukethe izinsuku ezikwenye ifomethi, ungasebenzisa ukuphikisana format.

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

Ifomethi yamukela opharetha ngeyunithi yezinhlamvu esho noma yisiphi isikhawu kanye nefomethi yaso; amanani asetshenziswa kakhulu aboniswa kuthebula elingezansi:

Isimo
Incazelo

%d
Inombolo yosuku enyangeni

%a
Isifinyezo segama losuku lweviki

%A
Igama eligcwele losuku lweviki

%w
Inombolo yosuku lweviki (0-6, lapho u-0 eyiSonto)

%m
Ukuqokwa kwezinyanga ezinamadijithi amabili (01-12)

%b
Isifinyezo segama lenyanga (pr, mar, …)

%B
Igama lenyanga ephelele

%y
Ukuqokwa kweminyaka enamadijithi amabili

%Y
Ukuqokwa konyaka wamadijithi amane

%j
Inombolo yosuku ngonyaka (001 - 366)

%U
Inombolo yesonto onyakeni (00 - 53), ekuqaleni kwesonto ngeSonto

%W
Inombolo yesonto onyakeni (00 - 53), ekuqaleni kwesonto uMsombuluko

Ngakho-ke, "uSepthemba 26, 2019" igama eliphelele lenyanga, usuku kanye nonyaka. Le fomethi yedethi ingachazwa kusetshenziswa opharetha ngale ndlela elandelayo:"%B %d, %Y".

Kuphi:

  • %B — Igama eliphelele lenyanga
  • %d - Inombolo yosuku enyangeni
  • %Y - Ukuqokwa kweminyaka engamadijithi amane

Lapho uchaza ifomethi yedethi, kubalulekile ukufaka zonke izinhlamvu ezengeziwe ezivela kuyunithi yezinhlamvu yakho, njengemideshi, okhefana, ongqi, izikhala, njalo njalo. Esibonelweni sami, "ngoSepthemba 26, 2019", kukhona ukhefana ngemuva kosuku, futhi udinga ukufaka ukhefana encazelweni yefomethi:"%B %d, %Y".

Kunezimo lapho uthola idethi engahambisani namafomethi ajwayelekile (YYYY-MM-DD noma YYYY/MM/DD), kodwa nangolimi oluhlukile kolumisiwe olufakwe ohlelweni lwakho lokusebenza. Isibonelo, ulande idatha lapho idethi iboniswe kanje: "Disemba 15, 2019." Ngaphambi kokuguqula lolu chungechunge lube idethi, udinga ukushintsha indawo.

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

Imonyula izingxenye zedethi ku-R eyisisekelo

Ayikho imisebenzi eminingi ku-R eyisisekelo ekuvumela ukuthi ukhiphe noma iyiphi ingxenye yedethi entweni yekilasi Usuku.

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

Ngaphezu kwesigaba sento esemqoka Usuku ku-R oyisisekelo kunezinhlobo ezingu-2 zedatha ezengeziwe ezigcina isitembu sesikhathi: POSIXlt, POSIXct. Umehluko omkhulu phakathi kwala makilasi kanye Usuku ukuthi ngaphezu kosuku abagcina ngalo isikhathi.

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

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

# "POSIXct" "POSIXt"

Umsebenzi Sys.time() ibuyisela idethi yamanje nesikhathi ngefomethi POSIXct. Le fomethi iyafana ngencazelo ne ISIKHATHI SOKUPHAKATHI, futhi igcina inombolo yamasekhondi kusukela ekuqaleni kwenkathi ye-UNIX (phakathi kwamabili (UTC) kusukela ngoDisemba 31, 1969 kuya kuJanuwari 1, 1970).

Класс POSIXlt iphinde igcine isikhathi nosuku, nazo zonke izingxenye zazo. Ngakho-ke, iyinto enesakhiwo esiyinkimbinkimbi, kodwa okuvela kuyo kulula ukuthola noma iyiphi ingxenye yosuku nesikhathi ngoba Empeleni POSIXlt lokhu kungukuthi uhlu.

# Получаем текущую дату и время
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  # часовой пояс

Iguqula idatha yezinombolo neyombhalo ibe amafomethi POSIX* okwenziwa ngemisebenzi as.POSIXct() и as.POSIXlt(). Le misebenzi inesethi encane yezimpikiswano.

  • x — Inombolo, intambo noma into yekilasi Usuku, edinga ukuguqulwa;
  • tz — Indawo yesikhathi, okuzenzakalelayo "GMT";
  • format — Incazelo yefomethi yedethi lapho idatha edluliselwe ku-agumenti ka-x imelelwe;
  • umsuka - Kusetshenziswa kuphela lapho kuguqulelwa inombolo ku-POSIX; kufanele udlulise into yedethi nesikhathi lapho imizuzwana ibalwa khona kule mpikiswano. Ivamise ukusetshenziselwa ukuhumusha kusuka ku-UNIXTIME.

Uma ulwazi lwakho lwedethi nesikhathi lukhona ISIKHATHI SOKUPHAKATHI, bese ukuze uziguqule zibe idethi ecacile, efundekayo, sebenzisa isibonelo esilandelayo:

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

Ekuqaleni ungacacisa noma yisiphi isitembu sesikhathi. Isibonelo, uma idatha yakho iqukethe idethi nesikhathi njengenombolo yamasekhondi kusukela ngomhla ka-Septhemba 15, 2019 12:15 pm, bese uyiguqulela ekusetshenzisweni kwedethi:

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

Ukusebenza ngezinsuku usebenzisa iphakheji ye-lubridate

lubridate Mhlawumbe iphakheji edume kakhulu yokusebenza nezinsuku ngolimi R. Ikunikeza amakilasi amathathu engeziwe.

  • durations - ubude besikhathi, i.e. inani lamasekhondi phakathi kwezitembu zesikhathi ezimbili;
  • izikhathi - izikhathi zikuvumela ukuba wenze izibalo phakathi kwezinsuku ezinkathini ezifundeka umuntu: izinsuku, izinyanga, amasonto, njalonjalo;
  • Izikhawu - izinto ezinikeza indawo yokuqala nesiphetho ngesikhathi.

Ukufakwa kwamaphakheji engeziwe ngolimi lwe-R kwenziwa kusetshenziswa umsebenzi ojwayelekile install.packages().

Ifaka iphakheji lubridate:

install.packages("lubridate")

Guqula umbhalo ube yimanje usebenzisa i-lubridate

Izici zephakheji lubridate yenza lula kakhulu inqubo yokuguqula umbhalo ube idethi, futhi ikuvumela ukuthi wenze noma yimiphi imisebenzi ye-arithmetic enezinsuku nezikhathi.

Imisebenzi izokusiza ukuthi uthole idethi yamanje noma idethi nesikhathi today() и now().

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

Ukuze uguqule iyunithi yezinhlamvu ibe idethi lubridate Kunomndeni wonke wemisebenzi amagama awo ahlala equkethe izinhlamvu ezintathu, futhi akhombisa ukulandelana kwezingxenye zedethi:

  • y - unyaka
  • m - inyanga
  • d - usuku

Uhlu lwemisebenzi yokuguqula umbhalo ube yimanje nge-lubridate

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

Ezinye izibonelo zokuguqula amayunithi ezinhlamvu abe amadethi:

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

Njengoba ubona lubridate Kusebenza kahle kakhulu ekuboneni izincazelo zedethi njengombhalo, futhi ikuvumela ukuthi uguqule umbhalo ube yimanje ngaphandle kokusebenzisa ama-opharetha abengeziwe ukuchaza ifomethi.

Ikhipha izingxenye zedethi kusetshenziswa iphakheji ye-lubridate

Sebenzisa futhi lubridate ungathola noma iyiphi ingxenye kusukela ngedethi:

dt <- ymd("2017 jan 21")

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

Imisebenzi ye-Arithmetic enezinsuku

Kodwa okubaluleke kakhulu futhi okuyisisekelo ukusebenza lubridate yikhono lokwenza imisebenzi ye-arithmetic ehlukahlukene namadethi.

Ukufinyezwa kosuku kwenziwa yimisebenzi emithathu:

  • floor_date — ukusondeza enkathini edlule eseduze
  • ceiling_date — ukusondeza enkathini eseduze ezayo
  • round_date - ukusondeza esikhathini esiseduze

Umsebenzi ngamunye wale misebenzi unempikiswano Iyunithiokuvumela ukuthi ucacise iyunithi yokuqoqa: okwesibili, umzuzu, ihora, usuku, isonto, inyanga, inyanga, ikota, isizini, uhhafu wonyaka, unyaka

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") # округлить до полугодия

Ngakho-ke ake sithole ukuthi singayithola kanjani idethi eyizinsuku eziyi-8 ngemuva kwedethi yamanje futhi senze ezinye izibalo ze-arithmetic phakathi kwalezi zinsuku ezimbili.

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

Umsebenzi owenziwe lula onezikhathi, iphakethe le-timeperiodsR.

timeperiodsR - iphakheji elisha lokusebenza nezinsuku elashicilelwa ku-CRAN ngoSepthemba 2019.

Ifaka iphakheji timeperiodsR:

install.packages("timeperiodsR")

Inhloso eyinhloko ukunquma ngokushesha isikhawu sesikhathi esithile esihlobene nedethi enikeziwe. Ngokwesibonelo, usebenzisa imisebenzi yayo ungakwazi kalula:

  • Thola isonto elidlule, inyanga, ikota noma unyaka nge-R.
  • Thola inombolo ecacisiwe yezikhawu zesikhathi ngokuhlobene nedethi, isibonelo amaviki ama-4 adlule.
  • Kulula ukukhipha izingxenye zayo esikhawulweni sesikhathi esiwumphumela: idethi yokuqala neyokuphela, inani lezinsuku ezifakwe esikhawulweni, lonke ukulandelana kwamadethi afakwe kuyo.

Igama layo yonke imisebenzi yephakheji timeperiodsR anembile futhi aqukethe izingxenye ezimbili: isiqondiso_isikhawu, lapho:

  • isiqondiso lapho udinga ukuhambisa ngokuhlobene nedethi enikeziwe: okokugcina_n, okwedlule, lokhu, okulandelayo, okulandelayo_n.
  • okwesikhashana isikhawu ukubala isikhathi: usuku, isonto, inyanga, ikota, unyaka.

Isethi yesici esigcwele:

  • 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()

Izikhawu zesikhathi ezinkathini zesikhathiR

Le misebenzi iwusizo ezimeni lapho udinga ukwakha imibiko ngokusekelwe kudatha yeviki noma inyanga edlule. Ukuze uthole inyanga yokugcina, sebenzisa umsebenzi wegama elifanayo previous_month():

prmonth <- previous_month()

Ngemva kwalokho uzoba nento ngenyanga class tpr, lapho izingxenye ezilandelayo zingatholakala kalula:

  • idethi yokuqala yenkathi, esibonelweni sethu lena yinyanga yokugcina
  • idethi yokuphela kwesikhathi
  • inani lezinsuku ezifakiwe esikhathini
  • ukulandelana kwamadethi afakwe esikhathini

Ngaphezu kwalokho, ungathola ngayinye yezingxenye ngezindlela ezahlukene:

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

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

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

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

Ungathola futhi noma yiziphi izingxenye usebenzisa i-agumenti okuyingxenye, ekhona kumsebenzi ngamunye wephakheji. Amanani angenzeka: isiqalo, isiphetho, ukulandelana, ubude.

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

Ngakho-ke ake sibheke zonke izimpikiswano ezitholakala emisebenzini yephakheji timeperiodsR:

  • x - Idethi yereferensi okuzobalwa ngayo isikhathi, usuku lwamanje ngokuzenzakalelayo;
  • n - Inani lezikhawu ezizofakwa esikhathini, isibonelo amaviki ama-3 adlule;
  • part - Iyiphi ingxenye yento tpr udinga ukuthola, ngokuzenzakalelayo all;
  • week_start - Impikiswano ikhona emisebenzini yokusebenza ngamaviki kuphela, futhi ikuvumela ukuthi usethe inani losuku lweviki oluzobhekwa njengesiqalo salo. Ngokuzenzakalelayo, ukuqala kwesonto kunguMsombuluko, kodwa ungasetha noma yikuphi kusukela ekuqaleni kwesonto. 1 - ngoMsombuluko kuya ku-7 - ngeSonto.

Ngakho, ungakwazi ukubala noma isiphi isikhathi esihlobene nedethi yamanje nanoma iyiphi enye idethi enikeziwe; nazi ezinye izibonelo ezimbalwa:

# получить 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

Okthoba 6 kuyiSonto:
Ukusebenza nezinsuku ku-R (amakhono ayisisekelo, kanye namaphakheji we-lubridate nama-timeperiodsR)

Sidinga isikhathi lapho, uma kuqhathaniswa no-Okthoba 6, esizothatha amaviki ama-3 adlule. Akubandakanyi isonto elihlanganisa u-Okthoba 6 uqobo. Ngakho-ke, lesi yisikhathi esisuka kuSepthemba 9 kuya kuSepthemba 29.

Ukusebenza nezinsuku ku-R (amakhono ayisisekelo, kanye namaphakheji we-lubridate nama-timeperiodsR)

# получить месяц отстающий на 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

Kulesi sibonelo, sinentshisekelo enyangeni ebiyizinyanga ezi-4 ezedlule, uma siqala ngoSepthemba 16, 2019, kwabe kunguMeyi 2019.

Ukuhlunga i-vector yamadethi kusetshenziswa i-timeperiodsR

Ukuze uhlunge amadethi phakathi timeperiodsR Kukhona ama-opharetha amaningana:

  • %left_out% - iqhathanisa izinto ezimbili zesigaba se-tpr, futhi ibuyisela inani elivela kwesobunxele elishodayo kwekwesokudla.
  • %left_in% - iqhathanisa izinto ezimbili zesigaba se-tpr, futhi ibuyisela amadethi asuka entweni engakwesokunxele afakwe kwekwesokudla.
  • %right_out% - iqhathanisa izinto ezimbili ze-tpr class, futhi ibuyisela inani elisuka kwekwesokudla elingekho kwesobunxele.
  • %right_in% - iqhathanisa izinto ezimbili zesigaba se-tpr, futhi ibuyisela amadethi entweni elungile ekhona kwesobunxele.

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

Ephaketheni timeperiodsR kukhona esemthethweni, yolimi lwesiRashiya Uhlu lwadlalwayo lwe-YouTube.

isiphetho

Sihlole ngokuningiliziwe izigaba zezinto eziklanywe ngolimi R ukuze zisebenze namadethi. Futhi manje ungenza imisebenzi ye-arithmetic ngezinsuku, futhi uthole ngokushesha noma yiziphi izikhathi usebenzisa iphakheji timeperiodsR.

Uma unentshisekelo olimini lwe-R, ngikumema ukuthi ubhalisele isiteshi sami se-telegraph R4marketing, lapho ngabelana khona ngezinto eziwusizo nsuku zonke mayelana nokusebenzisa ulimi lwe-R ekuxazululeni izinkinga zakho zansuku zonke.

Source: www.habr.com

Engeza amazwana