R-də tarixlərlə işləmək (əsas imkanlar, həmçinin yağlama və vaxt dövrləriR paketləri)

İstənilən proqramlaşdırma dilində cari tarixi əldə edin, "Salam dünya!" R dili də istisna deyil.

Bu yazıda biz R dilinin əsas sintaksisində tarixlərlə işləməyin necə işlədiyinə baxacağıq, həmçinin tarixlərlə işləyərkən onun imkanlarını genişləndirən bir neçə faydalı paketə baxacağıq:

  • lubridate — tarixlər arasında arifmetik hesablamalar aparmağa imkan verən paket;
  • timeperiodsR — vaxt intervalları və onların komponentləri ilə işləmək üçün paket.

R-də tarixlərlə işləmək (əsas imkanlar, həmçinin yağlama və vaxt dövrləriR paketləri)

Məzmun

Əgər məlumatların təhlili, xüsusən də R dili ilə maraqlanırsınızsa, mənimlə maraqlana bilərsiniz teleqram и youtube kanallar. Məzmununun çoxu R dilinə həsr olunub.

  1. Əsas R sintaksisində tarixlərlə işləmək
    1.1. Mətni tarixə çevirin
    1.2. Əsas R-də tarix komponentlərinin çıxarılması
  2. Yağlama paketindən istifadə edərək tarixlərlə işləmək
    2.1. lubridate istifadə edərək mətni tarixə çevirin
    2.2. Yağlama paketindən istifadə edərək tarix komponentlərinin çıxarılması
    2.3. Tarixlərlə arifmetik əməliyyatlar
  3. Dövrlərlə sadələşdirilmiş iş, timeperiodsR paketi
    3.1. Zaman dövrlərində vaxt intervallarıR
    3.2. timeperiodsR istifadə edərək tarix vektorunun süzülməsi
  4. Nəticə

Əsas R sintaksisində tarixlərlə işləmək

Mətni tarixə çevirin

Basic R tarixlərlə işləmək üçün bir sıra funksiyalara malikdir. Əsas sintaksisin mənfi cəhəti ondan ibarətdir ki, funksiya adları və arqumentlər halı çox dağınıqdır və praktiki olaraq heç bir məntiqi əlaqəyə malik deyildir. Bununla belə, dilin əsas funksiyalarını bilməlisiniz, ona görə də onlardan başlayacağıq.

Çox vaxt csv fayllarından və ya digər mənbələrdən məlumatları R-yə yükləyərkən mətn kimi tarix alırsınız. Bu mətni düzgün məlumat növünə çevirmək üçün funksiyadan istifadə edin 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"

Qiyabi as.Date() tarixi iki formatda qəbul edir: YYYY-AA-GG və ya YYYY/AA/GG.
Əgər məlumat dəstinizdə başqa formatda tarixlər varsa, siz arqumentdən istifadə edə bilərsiniz format.

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

format operatorları istənilən vaxt intervalını və onun formatını ifadə edən sətir şəklində qəbul edir; ən çox istifadə olunan dəyərlər aşağıdakı cədvəldə göstərilmişdir:

Format
Təsvir

%d
Ayda gün sayı

%a
Həftənin gününün adının abbreviaturası

%A
Həftənin gününün tam adı

%w
Həftənin gününün sayı (0-6, burada 0 bazar günüdür)

%m
İki rəqəmli ay təyinatı (01-12)

%b
Ay adının qısaldılması (apr, mart, …)

%B
Tam ay adı

%y
İki rəqəmli il təyini

%Y
Dörd rəqəmli il təyinatı

%j
İldəki gün sayı (001 - 366)

%U
İldəki həftənin sayı (00 - 53), həftənin başlanğıcı bazar günü

%W
İldəki həftə nömrəsi (00 - 53), həftənin başlanğıcı bazar ertəsi

Müvafiq olaraq, “26 sentyabr 2019” ayın, tarixin və ilin tam adıdır. Bu tarix formatı operatorlardan istifadə etməklə aşağıdakı kimi təsvir edilə bilər:"%B %d, %Y".

Harada:

  • %B — Ayın tam adı
  • %d — Aydakı günün sayı
  • %Y — Dörd rəqəmli il təyini

Tarix formatını təsvir edərkən sətirinizdən bütün əlavə simvolları, məsələn, tire, vergül, nöqtə, boşluq və s. daxil etmək vacibdir. Mənim nümunəmdə, "26 sentyabr 2019-cu il", tarixdən sonra vergül var və formatın təsvirinə də vergül qoymalısınız:"%B %d, %Y".

Yalnız standart formatlara uyğun gəlməyən bir tarix aldığınız zaman vəziyyətlər var (İYYY-AA-GG və ya YYYY/AA/GG), həm də əməliyyat sisteminizdə quraşdırılmış standart dildən fərqli olan dildə. Məsələn, tarixin belə göstərildiyi məlumatları endirdiniz: "15 dekabr 2019-cu il." Bu sətri tarixə çevirməzdən əvvəl yerli dili dəyişdirməlisiniz.

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

Əsas R-də tarix komponentlərinin çıxarılması

Əsas R-də sinif obyektindən tarixin istənilən hissəsini çıxarmağa imkan verən çoxlu funksiyalar yoxdur tarix.

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

Əsas obyekt sinfinə əlavə olaraq tarix əsas R-də vaxt damgasını saxlayan daha 2 məlumat növü var: POSIXlt, POSIXct. Bu siniflər arasındakı əsas fərq və tarix vaxt saxladıqları tarixdən başqa.

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

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

# "POSIXct" "POSIXt"

Function Sys.time() formatda cari tarix və vaxtı qaytarır POSIXct. Bu format mənaca oxşardır UNIXTIME, və UNIX dövrünün əvvəlindən keçən saniyələrin sayını saxlayır (31 dekabr 1969-cu ildən 1 yanvar 1970-ci il gecə yarısı (UTC)).

Sinif POSIXlt o, həmçinin vaxtı və tarixi və onların bütün komponentlərini saxlayır. Buna görə də daha mürəkkəb quruluşa malik olan, lakin ondan istənilən tarix və vaxt komponentini əldə etmək asan olduğu üçün obyektdir faktiki olaraq POSIXlt bu siyahı.

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

Rəqəm və mətn məlumatlarının formatlara çevrilməsi POSIX* funksiyaları ilə həyata keçirilir as.POSIXct() и as.POSIXlt(). Bu funksiyaların kiçik arqumentlər dəsti var.

  • x — Nömrə, sətir və ya sinif obyekti tarix, çevrilməsi lazım olan;
  • tz — Saat qurşağı, standart "GMT";
  • format — x arqumentinə ötürülən verilənlərin təqdim olunduğu tarix formatının təsviri;
  • Origin — Yalnız nömrəni POSIX-ə çevirərkən istifadə olunur; siz bu arqumentə saniyələrin hesablandığı tarix obyektini və vaxtı keçirməlisiniz. Adətən UNIXTIME-dan tərcümə üçün istifadə olunur.

Tarix və saat məlumatınız varsa UNIXTIME, sonra onları aydın, oxunaqlı tarixə çevirmək üçün aşağıdakı nümunədən istifadə edin:

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

Mənbədə siz istənilən vaxt damğasını təyin edə bilərsiniz. Məsələn, məlumatlarınız 15 sentyabr 2019-cu il saat 12:15-dən sonra saniyələrin sayı kimi tarix və vaxtı ehtiva edirsə, onu tarixə çevirmək üçün istifadə edin:

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

Yağlama paketindən istifadə edərək tarixlərlə işləmək

lubridate R dilində tarixlərlə işləmək üçün bəlkə də ən populyar paketdir.O, sizə üç əlavə dərs təqdim edir.

  • müddətlər — müddət, yəni. iki vaxt nişanı arasındakı saniyələrin sayı;
  • dövrlər - dövrlər insan tərəfindən oxuna bilən intervallarda tarixlər arasında hesablamalar aparmağa imkan verir: günlər, aylar, həftələr və s.;
  • intervallar - zamanla başlanğıc və son nöqtəni təmin edən obyektlər.

R dilində əlavə paketlərin quraşdırılması standart funksiyadan istifadə etməklə həyata keçirilir install.packages().

Paketin quraşdırılması lubridate:

install.packages("lubridate")

lubridate istifadə edərək mətni tarixə çevirin

Paket xüsusiyyətləri lubridate mətnin tarixə çevrilməsi prosesini əhəmiyyətli dərəcədə sadələşdirin, həmçinin tarix və saatlarla istənilən hesab əməliyyatlarını həyata keçirməyə imkan verir.

Funksiyalar cari tarixi və ya tarix və vaxtı əldə etməyə kömək edəcək today() и now().

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

Bir sətri tarixə çevirmək üçün lubridate Adları həmişə üç hərfdən ibarət olan və tarix komponentlərinin ardıcıllığını göstərən bütün funksiyalar ailəsi var:

  • y - il
  • m - ay
  • d - gün

lubridate vasitəsilə mətni tarixə çevirmək üçün funksiyaların siyahısı

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

Sətirləri tarixlərə çevirmək üçün bəzi nümunələr:

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

Gördüyünüz kimi lubridate O, tarix təsvirlərini mətn kimi tanımaqda daha səmərəlidir və formatı təsvir etmək üçün əlavə operatorlardan istifadə etmədən mətni tarixə çevirməyə imkan verir.

Yağlama paketindən istifadə edərək tarix komponentlərinin çıxarılması

Həmçinin istifadə lubridate bir tarixdən istənilən komponenti əldə edə bilərsiniz:

dt <- ymd("2017 jan 21")

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

Tarixlərlə arifmetik əməliyyatlar

Ancaq ən vacib və əsas funksionallıq lubridate tarixlərlə müxtəlif hesab əməliyyatlarını yerinə yetirmək bacarığıdır.

Tarixin yuvarlaqlaşdırılması üç funksiya ilə həyata keçirilir:

  • floor_date — ən yaxın keçmiş zamana yuvarlaqlaşdırma
  • ceiling_date — yaxın gələcək zamana yuvarlaqlaşdırma
  • round_date - ən yaxın vaxta yuvarlaqlaşdırma

Bu funksiyaların hər birinin arqumenti var vahidyuvarlaqlaşdırma vahidini təyin etməyə imkan verir: ikinci, dəqiqə, saat, gün, həftə, ay, iki ay, rüb, mövsüm, yarımil, il

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

Beləliklə, gəlin cari tarixdən 8 gün sonra olan tarixi necə əldə edəcəyimizi anlayaq və iki tarix arasında müxtəlif digər arifmetik hesablamalar aparaq.

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

Dövrlərlə sadələşdirilmiş iş, timeperiodsR paketi.

timeperiodsR — 2019-cu ilin sentyabrında CRAN-da dərc edilmiş tarixlərlə işləmək üçün təzə paket.

Paketin quraşdırılması timeperiodsR:

install.packages("timeperiodsR")

Əsas məqsəd verilən tarixə nisbətən müəyyən vaxt intervalını tez müəyyən etməkdir. Məsələn, onun funksiyalarından istifadə edərək asanlıqla:

  • Keçən həftəni, ayı, rübü və ya ilini R-də əldə edin.
  • Tarixə, məsələn, son 4 həftəyə nisbətən müəyyən sayda vaxt intervalı əldə edin.
  • Yaranan vaxt intervalından onun komponentlərini çıxarmaq asandır: başlanğıc və bitmə tarixi, intervala daxil olan günlərin sayı, ona daxil olan tarixlərin bütün ardıcıllığı.

Bütün paket funksiyalarının adı timeperiodsR intuitivdir və iki hissədən ibarətdir: istiqamət_intervalharada:

  • istiqamət verilmiş tarixə nisbətən hərəkət etməlisiniz: sonuncu_n, əvvəlki, bu, sonrakı, sonrakı_n.
  • müvəqqəti interval dövrü hesablamaq üçün: gün, həftə, ay, rüb, il.

Tam funksiyalar dəsti:

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

Zaman dövrlərində vaxt intervallarıR

Bu funksiyalar keçən həftə və ya ayın məlumatlarına əsaslanaraq hesabatlar hazırlamalı olduğunuz hallarda faydalıdır. Son ayı almaq üçün eyni adlı funksiyadan istifadə edin previous_month():

prmonth <- previous_month()

Bundan sonra bir obyektiniz olacaq pmonth sinif tpr, ondan aşağıdakı komponentləri asanlıqla əldə etmək olar:

  • dövrün başlanğıc tarixi, bizim nümunəmizdə bu, son aydır
  • dövrün bitmə tarixi
  • dövrə daxil edilən günlərin sayı
  • dövrə daxil edilən tarixlərin ardıcıllığı

Bundan əlavə, komponentlərin hər birini müxtəlif yollarla əldə edə bilərsiniz:

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

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

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

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

Siz həmçinin arqumentdən istifadə edərək komponentlərdən hər hansı birini əldə edə bilərsiniz hissəpaket funksiyalarının hər birində mövcud olan . Mümkün dəyərlər: başlanğıc, son, ardıcıllıq, uzunluq.

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

Beləliklə, paket funksiyalarında mövcud olan bütün arqumentlərə baxaq timeperiodsR:

  • x — Vaxt dövrünün hesablanacağı istinad tarixi, standart olaraq cari tarix;
  • n — Dövrə daxil ediləcək intervalların sayı, məsələn, əvvəlki 3 həftə;
  • part — Obyektin hansı komponenti tpr standart olaraq almaq lazımdır all;
  • week_start — Arqument yalnız həftələrlə işləmək funksiyalarında mövcuddur və həftənin başlanğıcı sayılacaq gününün sayını təyin etməyə imkan verir.Defolt olaraq həftənin başlanğıcı bazar ertəsidir, lakin siz hər hansı birini təyin edə bilərsiniz. 1 - Bazar ertəsindən 7 - Bazar.

Beləliklə, siz cari və ya hər hansı digər verilmiş tarixə nisbətən istənilən vaxt dövrünü hesablaya bilərsiniz; burada daha bir neçə nümunə var:

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

6 oktyabr bazar günüdür:
R-də tarixlərlə işləmək (əsas imkanlar, həmçinin yağlama və vaxt dövrləriR paketləri)

Oktyabrın 6-na nisbətən əvvəlki 3 həftəni alacaq bir müddətə ehtiyacımız var. Oktyabrın 6-nı özündə birləşdirən həftə daxil deyil. Müvafiq olaraq, bu, sentyabrın 9-dan sentyabrın 29-dək olan dövrdür.

R-də tarixlərlə işləmək (əsas imkanlar, həmçinin yağlama və vaxt dövrləriR paketləri)

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

Bu nümunədə bizi 4 ay əvvəl olan ay maraqlandırır, əgər 16 sentyabr 2019-cu ildən başlasaq, o zaman 2019-cu ilin may ayı idi.

timeperiodsR istifadə edərək tarix vektorunun süzülməsi

Tarixləri filtrləmək üçün timeperiodsR Bir neçə operator var:

  • %left_out% - iki tpr sinif obyektini müqayisə edir və soldan sağda çatışmayan dəyəri qaytarır.
  • %left_in% - tpr sinifinin iki obyektini müqayisə edir və sol obyektdən sağa daxil olan tarixləri qaytarır.
  • %right_out% - iki tpr sinif obyektini müqayisə edir və soldan çatışmayan sağdan dəyəri qaytarır.
  • %right_in% - tpr sinifinin iki obyektini müqayisə edir və solda mövcud olan sağ obyektdən tarixləri qaytarır.

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

Paketdə timeperiodsR rəsmi rusdillisi var YouTube pleylist.

Nəticə

Tarixlərlə işləmək üçün R dilində hazırlanmış obyektlərin siniflərini ətraflı araşdırdıq. Həmçinin indi siz tarixlər üzrə hesab əməliyyatlarını yerinə yetirə və paketdən istifadə edərək istənilən vaxt dövrlərini tez əldə edə bilərsiniz timeperiodsR.

Əgər R dili ilə maraqlanırsınızsa, sizi telegram kanalıma abunə olmağa dəvət edirəm R4 marketinq, burada gündəlik problemlərinizin həllində R dilindən istifadə haqqında gündəlik olaraq faydalı materiallar paylaşıram.

Mənbə: www.habr.com

Добавить комментарий