Töötamine kuupäevadega R-keeles (põhivõimalused, samuti paketid lubridate ja timeperiodsR).

Saate saada praeguse kuupäeva mistahes programmeerimiskeeles, operatsioon, mis on ekvivalentne "Tere maailm!". R-keel ei ole erand.

Selles artiklis uurime, kuidas kuupäevadega töötamine põhikeeles R toimub, ning vaatame ka mitmeid kasulikke pakette, mis laiendavad selle võimalusi kuupäevadega töötamisel:

  • lubridate — pakett, mis võimaldab teostada aritmeetilisi arvutusi kuupäevade vahel;
  • timeperiodsR — pakett ajavahemike ja nende komponentidega töötamiseks.

Töötamine kuupäevadega R-keeles (põhivõimalused, samuti paketid lubridate ja timeperiodsR).

Sisukord

Kui teid huvitab andmeanalüüs ning eriti R-keel, võivad teid huvitada minu telegram ja youtube kanalid. Suur osa sisu on pühendatud R-keelele.

  1. Kuupäevadega töötamine R põhiköites
    1.1. Teksti konverteerimine kuupäevaks
    1.2. Kuupäeva komponentide eraldamine R põhikeeles
  2. Kuupäevadega töötamine lubridate paketiga
    2.1. Teksti konverteerimine kuupäevaks lubridate abil
    2.2. Kuupäevade komponentide eraldamine lubridate paketiga
    2.3. Aritmeetilised toimingud kuupäevadega
  3. Lihtsustatud töö ajavahemikega, pakett timeperiodsR
    3.1. Ajavahemikud timeperiodsR-s
    3.2. Kuupäevade vektori filtreerimine timeperiodsR abil
  4. Kokkuvõte

Kuupäevadega töötamine R põhiköites

Teksti konverteerimine kuupäevaks

R põhikeeles on olemas funktsioonide kogum, mis võimaldab kuupäevadega töötada. Põhikeele miinus on see, et funktsioonide nimede ja argumentide registrid on väga killustunud ning neil ei ole praktiliselt mingit loogilist seost. Siiski tuleb põhifunktsioone teada, seega alustame just neist.

Kõige sagedamini, kui laadite R-i andmeid, näiteks CSV-failidest või muudest allikatest, saate kuupäeva tekstivormingus. Selle teksti õigest andmetüübistamiseks kasutage funktsiooni 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"

Vaikimisi as.Date() võtab kuupäeva vastu kahes formaadis: AAAA-KK-MM või AAAA/MM/DD.
Kui teie andmekogus on kuupäevad esitatud mõnes muus formaadis, saab konverteerimise jaoks kasutada argumento format.

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

format võtab sõnalises vormis operaatorid, mis tähistavad teatud ajavahemikku ja selle formaati, kõige sagedamini kasutatavad väärtused on esitatud allolevas tabelis:

Formaadi
Kirjeldus

%d
Kuu päeva number

%a
Nädalapäeva nimetuse lühend

%A
Nädalapäeva täisnimi

%w
Nädalapäeva number (0-6, kus 0 on pühapäev)

%m
Kuu kahe цифрiga tähis (01-12)

%b
Kuu nime lühend (apr, mar, …)

%B
Kuu täisnimi

%y
Kaks цифрiga aastanumber

%Y
Nelja цифriga aastanumber

%j
Aasta päevade number (001 — 366)

%U
Aasta nädalate number (00 — 53), nädala algus Pühapäev

%W
Aasta nädalate number (00 — 53), nädala algus Esmaspäev

Seega, "26. september 2019" on – kuu täielik nimetus, kuupäev ja aasta. Seda kuupäeva formaati saab operaatoritega kirjeldada nii:"%B %d, %Y".

Kus:

  • %B – Kuu täielik nimetus
  • %d – Päeva number kuus
  • %Y – Neljakohaline aastanumber

Kuupäeva formaadi kirjeldamisel on oluline kaasata kõik sümbolid teie stringis, näiteks sidekriipsud, komad, punktid, tühikud jne. Minu näites, "26. september 2019", kuupäeva järel on koma, ja ka formaadi kirjelduse juurde tuleb koma lisada:"%B %d, %Y".

Esineb olukordi, kus saate kuupäeva, mis ei vasta ainult tavapärastele formaatidele (AAAA-KK-PÄEV või AAAA/MM/DD), vaid ka keeles, mis erineb teie operatsioonisüsteemi vaikeseadmest. Näiteks olete laadinud andmed, kus kuupäev on märgitud järgmiselt: "15. detsember 2019". Enne selle stringi konverteerimist kuupäevaks peate muutma lokaali.

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

Kuupäeva komponentide eraldamine R põhikeeles

Baas R-is on üsna vähe funktsioone, mis lubavad tuvastada kuupäeva mis tahes osa klassi objektist , samuti veel mustandina olev API.

current_date <- Sys.Date() # praegune kuupäev
weekdays(current_date)     # saada nädala päev
months(current_date)       # saada kuu number aastas
quarters(current_date)     # saada kvartali number aastas

Peamise objektiklassi kõrval , samuti veel mustandina olev API on baas R-is veel 2 tüüpi andmeid, mis salvestavad ajatempli: POSIXlt, POSIXct. Nende klasside põhiülesanne on see, et lisaks kuupäevale talletavad nad ka aega. , samuti veel mustandina olev API Sys.time()

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

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

# "POSIXct" "POSIXt"

Funktsioon tagastab praeguse kuupäeva ja aja formaadis . See formaat on tähenduse poolest sarnane POSIXctUNIXTIME , ja talletab sekundite arvu alates UNIX-i ajastu algusest(kesööd (UTC) 31. detsember 1969 kell 00:00 1. jaanuar 1970) , talletab samuti aega ja kuupäeva ning kõiki nende komponente. Seetõttu on see keerukama struktuuriga objekt, kuid sellest on lihtne eraldada mistahes kuupäeva ja aja komponent, kuna selle olemus on.

Klass POSIXlt Numbriliste ja tekstiliste andmete konverteerimine formaatidest POSIXlt see loend.

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

POSIX* teostatakse funktsioonide abil as.POSIXct() as.POSIXlt() ja . Nendel funktsioonidel on väike argumentide arsenal.x — Arv, string või klassi объект,

  • mida tuleb konverteerida; , samuti veel mustandina olev APItz — Aeg, vaike"GMT";
  • format — Kuupäeva formaadi kirjeldus, milles andmed, mis antakse argumenti x, on esitatud;
  • format — Kuupäeva formaadi kirjeldus, milles esitatakse argumendina x edastatavad andmed.
  • origin — Kasutatakse ainult arvu konverteerimiseks POSIX-iks, sellele argumendile tuleb edastada kuupäeva ja kellaaja objekt, millest sekundite lugemine algab. Üksikult kasutatakse seda tavaliselt UNIXTIME-st tõlkimiseks.

Kui teie kuupäeva ja kellaaja andmed on esitatud , ja talletab sekundite arvu alates UNIX-i ajastu algusest, siis nende konverteerimiseks arusaadavaks, loetavaks kuupäevaks kasutage järgmist näidet:

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

Originis saate märkida mistahes ajatempli. Näiteks, kui teie andmetes on kuupäev ja kellaaeg esitatud sekundite arvuna alates 15. septembrist 2019 kell 12:15, siis nende kuupäevaks muutmiseks kasutage:

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

Kuupäevadega töötamine lubridate paketiga

lubridate võib-olla on kõige populaarsem pakett kuupäevadega töötamiseks R keeles. See pakub teile lisaks veel kolme klassi.

  • durations — kestus, st sekundite arv kahe ajatempli vahel;
  • periods — perioodid võimaldavad arvestusi tehtavate kuupäevade vahel inimsõbralikult arusaadavates ajavahemikes: päevade, kuude, nädalate ja nii edasi;
  • intervals — objektid, mis esitlevad algus- ja lõpuaega.

R keeles täiendavate pakettide installimine toimub standardse funktsiooni abil install.packages().

Paketi installimine lubridate:

install.packages("lubridate")

Teksti konverteerimine kuupäevaks lubridate abil

Paketi funktsioonid lubridate kergendavad oluliselt teksti kuupäevaks konverteerimise protsessi ja võimaldavad teil teha tõrgeteta mis tahes aritmeetilisi toiminguid kuupäevade ja ajaga.

Praeguse kuupäeva või kuupäeva ja kellaaja saamiseks aitavad teid funktsioonid today() ja now().

today() # praegune kuupäev
now()   # praegune kuupäev ja kellaaeg

Stringi kuupäevaks konverteerimiseks on R-s lubridate terve hulk funktsioone, mille nimed koosnevad alati kolmest tähest ja tähistavad kuupäeva komponente:

  • y — aasta
  • m — kuu
  • d — päev

Funktsioonide loetelu teksti kuupäevaks konverteerimiseks lubridate'i kaudu

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

Mõned näited stringide kuupäevadeks muutmiseks:

ymd("2017 jan 21")
mdy("20. märts 2019")
dmy("1. aprill 2018")

Nagu näete lubridate tuvastab see oluliselt efektiivsemalt kuupäevade tekstina kirjelduse ja võimaldab teil muuta teksti kuupäevaks, kasutamata täiendavaid operaatorite formaadi kirjeldamise jaoks.

Kuupäevade komponentide eraldamine lubridate paketiga

Lisaks saab ka lubridate iga komponent kuupäevast kätte saada:

dt <- ymd("2017 jan 21")

year(dt)  # aasta
month(dt) # kuu
mday(dt)  # päev kuus
yday(dt)  # päev aastas
wday(dt)  # nädala päev

Aritmeetilised toimingud kuupäevadega

Kuid kõige olulisem ja põhiomadus lubridate kätkeb endas erinevate aritmeetiliste toimingute tegemise võimalust kuupäevadega.

Kuupäeva ümardamine toimub kolme funktsiooni abil:

  • floor_date — ümardamine lähimale möödunud ajahetkele
  • ceiling_date — ümardamine lähimale tulevasele aega
  • round_date — ümardamine lähimale ajale

Igal neist funktsioonidest on argument üksuse, mis võimaldab teil määrata ümardamise ühiku: second, minute, hour, day, week, month, bimonth, quarter, season, halfyear, year

dt <- ymd("2017 jan 21")

round_date(dt, unit = "month")    # ümarda kuuks
round_date(dt, unit = "3 month")  # ümarda 3 kuu kaupa
round_date(dt, unit = "quarter")  # ümarda kvartali kaupa
round_date(dt, unit = "season")   # ümarda hooaja kaupa
round_date(dt, unit = "halfyear") # ümarda pool-aasta kaupa

Nii et vaadakem, kuidas saada kuupäev, mis on 8 päeva pärast praegust kuupäeva, ning teostada erinevaid muid aritmeetilisi arvutusi kahe kuupäeva vahel.

today() + days(8)   # mis kuupäev on 8 päeva pärast
today() - months(2) # mis kuupäev oli 2 kuud tagasi
today() + weeks(12) # mis kuupäev on 12 nädala pärast
today() - years(2)  # mis kuupäev oli 2 aastat tagasi

Lihtsustatud tööperioodidega, paketiga timeperiodsR.

timeperiodsR — värske pakett kuupäevadega töötamiseks, mis avaldati CRAN-is september 2019.

Paketi installimine timeperiodsR:

install.packages("timeperiodsR")

Peamine eesmärk on kiiresti määrata teatud ajavahemik antud kuupäeva suhtes. Näiteks saate selle funktsioonide abil hõlpsasti:

  • Saada eelmine nädal, kuu, kvartal või aasta R-is.
  • Saada määratud arv ajavahemikke kuupäeva suhtes, näiteks eelnevad 4 nädalat.
  • Lihtsalt välja tõmmata saadud ajavahemikest selle komponentide: algus- ja lõpukuupäev, päevade arv, mis kuupäeva vahemikku mahub, kogu kuupäevade järjestus, mis sinna kuulub.

Kõigi paketi funktsioonide nimed timeperiodsR on intuitiivselt arusaadavad ja koosnevad kahest osast: suund_vahemik, kus:

  • suund mille vahel tuleb liikuda antud kuupäeva suhtes: last_n, previous, this, next, next_n.
  • aeg vahemik perioodi arvutamiseks: day, week, month, quarter, year.

Täielik funktsioonide komplekt:

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

Ajavahemikud timeperiodsR-s

Need funktsioonid on kasulikud olukordades, kus teil on vaja koostada aruandeid eelneva nädala või kuu andmete põhjal. Eelneva kuu saamiseks kasutage sama nimelist funktsiooni previous_month():

prmonth <- previous_month()

Pärast seda on teil objekt prmonth klassist tpr, millest on lihtne saada järgmised komponendid:

  • perioodi alguskuupäev, meie näites on see eelmine kuu
  • perioodi lõppkuupäev
  • perioodi kuuluvate päevade arv
  • perioodi kuuluvate kuupäevade järjestus

Samas on võimalik iga komponent saada erinevate viisidega:

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

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

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

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

Samuti saate saada mistahes komponendi, kasutades argumenti part, mis on olemas igas paketi funktsioonis. Võimalikud väärtused: start, end, sequence, length.

previous_month(part = "start")    # perioodi algus
previous_month(part = "end")      # perioodi lõpp
previous_month(part = "sequence") # kuupäevade järjestus
previous_month(part = "length")   # päevade arv perioodis

Nii et vaatame kõiki argumente, mis on saadaval paketi funktsioonides timeperiodsR:

  • x — Viidatud kuupäev, millest ajavahemiku arvutamine algab, vaikimisi on see jooksva kuupäev;
  • n — Intervallide arv, mis kuuluvad perioodi, näiteks 3 eelnevat nädalat;
  • part — Milline objekti komponent tpr te peate saama, vaikimisi all;
  • week_start — Argument on olemas ainult nädalatega töötavate funktsioonide puhul ja võimaldab määrata nädalapäeva numbri, mida arvestatakse koosseisuna, vaikimisi on nädala algus esmaspäev, kuid võite määrata mistahes numbrit 1 - esmaspäev kuni 7 - pühapäev.

Nii saate arvutada mistahes ajavahemiku, mis põhineb jooksval või mistahes muul määratud kuupäeval, toome mõned näited:

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

 Ajavahemik: 9. september 2019, esmaspäev kuni 29. september 2019, pühapäev

6. oktoober on pühapäev:
Töötamine kuupäevadega R-keeles (põhivõimalused, samuti paketid lubridate ja timeperiodsR).

Me vajame perioodi, mis 6. oktoobrist võtab 3 eelnevat nädalat. Ilma nädalata, kuhu kuulub 6. oktoober. Vastavalt on see periood 9. kuni 29. september.

Töötamine kuupäevadega R-keeles (põhivõimalused, samuti paketid lubridate ja timeperiodsR).

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

 Ajavahemik: 1. mai 2019, kolmapäev kuni 31. mai 2019, reede

Sel näitel meid huvitab kuu, mis oli 4 kuud tagasi, kui alustada 16. september 2019, seega oli see mai 2019.

Kuupäevade vektori filtreerimine timeperiodsR abil

Kuupäevade filtreerimiseks timeperiodsR on mitu operaatorit:

  • %left_out% — võrdleb kahte tpr klassi objekti ja tagastab väärtuse vasakult, mis puudub paremal.
  • %left_in% — võrdleb kahte tpr klassi objekti ja tagastab kuupäevad vasakpoolsetest objektidest, mis kuuluvad paremale.
  • %right_out% — võrdleb kahte tpr klassi objekti ja tagastab väärtuse parematest, mis puuduvad vasakult.
  • %right_in% — võrdleb kahte tpr objekti ja tagastab kuupäevad paremas objektis, mis on vasakus olemas.

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

period1 %left_in% period2   # saada kuupäevad period1-st, mis kuuluvad period2-sse
period1 %left_out% period2  # saada kuupäevad period1-st, mis ei kuulu period2-sse
period1 %right_in% period2  # saada kuupäevad period2-st, mis kuuluvad period1-sse
period1 %right_out% period2 # saada kuupäevad period2-st, mis ei kuulu period1-sse

Pakett timeperiodsR on ametlik, eesti keeles YouTube'i mängulisti.

Kokkuvõte

Oleme põhjalikult uurinud objektide klasse, mis on R keeles kuupäevadega töötamiseks. Samuti oskate nüüd kuupäevadega teostada aritmeetilisi operatsioone ning kiiresti saada igasuguseid ajavahemikke paketi abil. timeperiodsR.

Kui teid huvitab R keel, kutsun teid üles liituma minu Telegrami kanali R4marketing, kus jagan igapäevaselt kasulikke materjale R keele rakendamise kohta igapäevastes ülesannetes.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster