Աշխատեք ամսաթվերի հետ R-ում (հիմնական հնարավորություններ, ինչպես նաև քսում և ժամանակաշրջաններR փաթեթներ)

Ստացեք ընթացիկ ամսաթիվը ցանկացած ծրագրավորման լեզվով, գործողություն, որը համարժեք է «Բարև աշխարհ»: R լեզուն բացառություն չէ:

Այս հոդվածում մենք կանդրադառնանք, թե ինչպես է աշխատում ամսաթվերի հետ աշխատելը R լեզվի հիմնական շարահյուսության մեջ, ինչպես նաև կդիտարկենք մի քանի օգտակար փաթեթներ, որոնք ընդլայնում են դրա հնարավորությունները ամսաթվերի հետ աշխատելիս.

  • lubridate - փաթեթ, որը թույլ է տալիս կատարել թվաբանական հաշվարկներ ամսաթվերի միջև.
  • timeperiodsR — ժամանակային ընդմիջումների և դրանց բաղադրիչների հետ աշխատելու փաթեթ:

Աշխատեք ամսաթվերի հետ R-ում (հիմնական հնարավորություններ, ինչպես նաև քսում և ժամանակաշրջաններR փաթեթներ)

Պարունակություն

Եթե ​​դուք հետաքրքրված եք տվյալների վերլուծությամբ, և մասնավորապես R լեզվով, ապա ձեզ կարող է հետաքրքրել իմը հեռագիր и youtube ալիքներ. Բովանդակության մեծ մասը նվիրված է R լեզվին։

  1. Հիմնական R շարահյուսության ամսաթվերի հետ աշխատելը
    1.1: Տեքստը փոխակերպեք ամսաթվի
    1.2: Հիմնական R-ում ամսաթվի բաղադրիչների արդյունահանում
  2. Աշխատեք ամսաթվերի հետ՝ օգտագործելով քսանյութի փաթեթը
    2.1: Տեքստը փոխակերպեք ամսաթվի՝ օգտագործելով lubridate
    2.2: Ամսաթվի բաղադրիչների արդյունահանում` օգտագործելով քսանյութի փաթեթը
    2.3: Թվաբանական գործողություններ ամսաթվերով
  3. Պարզեցված աշխատանք ժամանակաշրջանների հետ, timeperiodsR փաթեթ
    3.1: Ժամանակային ընդմիջումները ժամանակաշրջաններումR
    3.2: Ամսաթվերի վեկտորի զտում` օգտագործելով ժամանակաշրջաններR
  4. Ամփոփում

Հիմնական R շարահյուսության ամսաթվերի հետ աշխատելը

Տեքստը փոխակերպեք ամսաթվի

Basic R-ն ունի ամսաթվերի հետ աշխատելու մի շարք գործառույթներ: Հիմնական շարահյուսության թերությունն այն է, որ ֆունկցիաների անունների և արգումենտների դեպքը շատ ցրված է և գործնականում չունի տրամաբանական կապ: Այնուամենայնիվ, դուք պետք է իմանաք լեզվի հիմնական գործառույթները, ուստի մենք կսկսենք դրանցից:

Ամենից հաճախ տվյալները R-ում, csv ֆայլերից կամ այլ աղբյուրներից բեռնելիս, դուք ամսաթիվ եք ստանում որպես տեքստ: Այս տեքստը տվյալների ճիշտ տեսակի փոխարկելու համար օգտագործեք գործառույթը 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"

By default as.Date() ընդունում է ամսաթիվը երկու ձևաչափով. YYYY-MM-DD կամ YYYY/MM/DD.
Եթե ​​ձեր տվյալների հավաքածուն պարունակում է այլ ձևաչափով ամսաթվեր, կարող եք օգտագործել փաստարկը format.

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

ֆորմատ ընդունում է օպերատորները լարային ձևով, որը նշանակում է ցանկացած ժամանակային ընդմիջում և դրա ձևաչափը; առավել հաճախ օգտագործվող արժեքները ներկայացված են ստորև բերված աղյուսակում.

Format
Նկարագրություն

%d
Օրվա թիվը ամսվա մեջ

%a
Շաբաթվա օրվա անվան հապավումը

%A
Շաբաթվա օրվա լրիվ անվանումը

%w
Շաբաթվա օրվա թիվը (0-6, որտեղ 0-ը կիրակի է)

%m
Ամսվա երկնիշ նշում (01-12)

%b
Ամսվա անվան հապավումը (ապր, մար,…)

%B
Ամբողջ ամսվա անունը

%y
Տարվա երկնիշ նշում

%Y
Քառանիշ տարվա նշանակում

%j
Օրվա թիվը տարվա ընթացքում (001 - 366)

%U
Տարվա շաբաթվա թիվը (00 - 53), շաբաթվա սկիզբը կիրակի

%W
Շաբաթվա թիվը տարում (00 - 53), շաբաթվա սկիզբ երկուշաբթի

Ըստ այդմ՝ «26 թվականի սեպտեմբերի 2019»-ը ամսվա, ամսաթվի և տարվա լրիվ անվանումն է։ Այս ամսաթվի ձևաչափը կարելի է նկարագրել՝ օգտագործելով օպերատորները հետևյալ կերպ."%B %d, %Y".

Որտեղ

  • %B - Ամսվա լրիվ անվանումը
  • %d - Օրվա թիվը ամսվա ընթացքում
  • %Y — Քառանիշ տարվա նշանակում

Ամսաթվի ձևաչափը նկարագրելիս կարևոր է ներառել ձեր տողի բոլոր լրացուցիչ նիշերը, ինչպիսիք են գծիկները, ստորակետները, կետերը, բացատները և այլն: Իմ օրինակում՝ «26 թվականի սեպտեմբերի 2019», ամսաթվից հետո կա ստորակետ, և ձևաչափի նկարագրության մեջ պետք է նաև ստորակետ դնել."%B %d, %Y".

Կան իրավիճակներ, երբ դուք ստանում եք ամսաթիվ, որը ոչ միայն չի համապատասխանում ստանդարտ ձևաչափերին (ՏՏՏՏ-ՄՄ-ՕՕ կամ ՏՏՏՏ/ԱՄ/ՕՕ), այլ նաև լեզվով, որը տարբերվում է ձեր օպերացիոն համակարգում տեղադրված լռելյայն լեզվից: Օրինակ, դուք ներբեռնել եք տվյալներ, որտեղ ամսաթիվը նշված է այսպես՝ «15 դեկտեմբերի, 2019թ.»: Նախքան այս տողը ամսաթվի փոխակերպելը, դուք պետք է փոխեք տեղանքը:

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

Հիմնական R-ում ամսաթվի բաղադրիչների արդյունահանում

Հիմնական R-ում շատ գործառույթներ չկան, որոնք թույլ են տալիս դասի օբյեկտից հանել ամսաթվի ցանկացած մաս Ամսաթիվ.

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

Բացի հիմնական օբյեկտի դասից Ամսաթիվ Հիմնական R-ում կան ևս 2 տվյալների տեսակ, որոնք պահում են ժամանակի դրոշմակնիք. POSIXlt, POSIXct. Այս դասերի և Ամսաթիվ այն է, որ բացի ամսաթվից, նրանք պահում են ժամանակը:

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

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

# "POSIXct" "POSIXt"

Ֆունկցիա Sys.time() վերադարձնում է ընթացիկ ամսաթիվը և ժամը ձևաչափով POSIXct. Այս ձևաչափը իմաստով նման է UNIXTIME, և պահպանում է UNIX դարաշրջանի սկզբից ի վեր վայրկյանների քանակը (կեսգիշեր (UTC) 31 թվականի դեկտեմբերի 1969-ից մինչև 1 թվականի հունվարի 1970-ը).

Դաս POSIXlt այն նաև պահում է ժամը և ամսաթիվը և դրանց բոլոր բաղադրիչները: Հետևաբար, այն ավելի բարդ կառուցվածք ունեցող օբյեկտ է, բայց որից հեշտ է ստանալ ամսաթվի և ժամի ցանկացած բաղադրիչ, քանի որ իրականում POSIXlt это ցուցակ.

# Получаем текущую дату и время
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* իրականացվում են գործառույթներով as.POSIXct() и as.POSIXlt(). Այս գործառույթներն ունեն արգումենտների փոքր հավաքածու:

  • x — Համար, տող կամ դասի օբյեկտ Ամսաթիվ, որը պետք է փոխարկվի;
  • tz — Ժամային գոտի, լռելյայն «GMT»;
  • ձևաչափ — Ամսաթվի ձևաչափի նկարագրություն, որով ներկայացված են x արգումենտին փոխանցված տվյալները.
  • ծագում — Օգտագործվում է միայն թիվը POSIX-ի փոխարկելու ժամանակ: Դուք պետք է փոխանցեք ամսաթվի օբյեկտ և ժամ, որից վայրկյանները հաշվվում են այս արգումենտին: Սովորաբար օգտագործվում է UNIXTIME-ից թարգմանության համար:

Եթե ​​ձեր ամսաթվի և ժամի մասին տեղեկությունները նշված են UNIXTIME, ապա դրանք պարզ, ընթեռնելի ամսաթվի վերածելու համար օգտագործեք հետևյալ օրինակը.

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

Ծագման մեջ դուք կարող եք նշել ցանկացած ժամանակացույց: Օրինակ, եթե ձեր տվյալները պարունակում են ամսաթիվը և ժամը որպես վայրկյանների քանակ 15 թվականի սեպտեմբերի 2019-ից, ժամը 12:15-ից, ապա դրանք ամսաթվի փոխարկելու համար օգտագործեք.

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

Աշխատեք ամսաթվերի հետ՝ օգտագործելով քսանյութի փաթեթը

lubridate Թերևս ամենահայտնի փաթեթը R լեզվով ամսաթվերի հետ աշխատելու համար: Այն ձեզ տրամադրում է երեք լրացուցիչ դասեր:

  • տեւողություն — տեւողություն, այսինքն. վայրկյանների քանակը երկու ժամադրոշմների միջև;
  • ժամանակաշրջաններ - ժամանակահատվածները թույլ են տալիս հաշվարկներ կատարել ամսաթվերի միջև մարդու կողմից ընթեռնելի ընդմիջումներով՝ օրեր, ամիսներ, շաբաթներ և այլն;
  • ինտերվալներ - օբյեկտներ, որոնք ապահովում են ժամանակի սկզբի և ավարտի կետը:

R լեզվով լրացուցիչ փաթեթների տեղադրումն իրականացվում է ստանդարտ ֆունկցիայի միջոցով install.packages().

Փաթեթի տեղադրում lubridate:

install.packages("lubridate")

Տեքստը փոխակերպեք ամսաթվի՝ օգտագործելով lubridate

Փաթեթի առանձնահատկությունները lubridate զգալիորեն պարզեցնել տեքստը ամսաթվի վերածելու գործընթացը, ինչպես նաև թույլ է տալիս իրականացնել ցանկացած թվաբանական գործողություններ ամսաթվերի և ժամերի հետ:

Գործառույթները կօգնեն ձեզ ստանալ ընթացիկ ամսաթիվը կամ ամսաթիվը և ժամը today() и now().

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

Տողը ամսաթվի վերածելու համար lubridate Գոյություն ունի գործառույթների մի ամբողջ ընտանիք, որոնց անունները միշտ բաղկացած են երեք տառից և նշում են ամսաթվի բաղադրիչների հաջորդականությունը.

  • y - տարի
  • մ - ամիս
  • դ - օր

Lubridate-ի միջոցով տեքստը ամսաթվի փոխակերպման գործառույթների ցանկ

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

Տողերը ամսաթվերի փոխարկելու որոշ օրինակներ.

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

Ինչպես տեսնում ես lubridate Այն շատ ավելի արդյունավետ է ամսաթվերի նկարագրությունները որպես տեքստ ճանաչելու հարցում և թույլ է տալիս տեքստը փոխակերպել ամսաթվի՝ առանց ֆորմատը նկարագրելու լրացուցիչ օպերատորների օգտագործման:

Ամսաթվի բաղադրիչների արդյունահանում` օգտագործելով քսանյութի փաթեթը

Նաև օգտագործելով lubridate Դուք կարող եք ստանալ ցանկացած բաղադրիչ ամսաթվից.

dt <- ymd("2017 jan 21")

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

Թվաբանական գործողություններ ամսաթվերով

Բայց ամենակարևոր և հիմնական ֆունկցիոնալությունը lubridate տարատեսակ թվաբանական գործողություններ կատարելու ունակությունն է ամսաթվերով:

Ամսաթվի կլորացումը կատարվում է երեք գործառույթով.

  • floor_date — կլորացվում է դեպի մոտակա անցյալ ժամանակը
  • ceiling_date — կլորացնելով դեպի մոտ ապագան
  • round_date - կլորացում մոտակա ժամանակին

Այս ֆունկցիաներից յուրաքանչյուրն ունի փաստարկ միավորորը թույլ է տալիս նշել կլորացման միավորը՝ երկրորդ, րոպե, ժամ, օր, շաբաթ, ամիս, երկամիս, եռամսյակ, սեզոն, կիսամյակ, տարի

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

Այսպիսով, եկեք պարզենք, թե ինչպես ստանալ ամսաթիվ, որը գտնվում է ընթացիկ ամսաթվից 8 օր հետո և կատարել տարբեր թվաբանական հաշվարկներ երկու ամսաթվերի միջև:

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

Պարզեցված աշխատանք ժամանակաշրջանների հետ, timeperiodsR փաթեթ:

timeperiodsR — ամսաթվերի հետ աշխատելու թարմ փաթեթ, որը հրապարակվել է CRAN-ում 2019 թվականի սեպտեմբերին:

Փաթեթի տեղադրում timeperiodsR:

install.packages("timeperiodsR")

Հիմնական նպատակը տվյալ ամսաթվի հետ կապված որոշակի ժամանակային միջակայքի արագ որոշումն է: Օրինակ, օգտագործելով նրա գործառույթները, կարող եք հեշտությամբ.

  • Ստացեք անցած շաբաթը, ամիսը, եռամսյակը կամ տարին Ռ.
  • Ստացեք որոշակի թվով ժամանակային ընդմիջումներ՝ կապված ամսաթվի հետ, օրինակ՝ վերջին 4 շաբաթը:
  • Հեշտ է դրա բաղադրիչները հանել ստացված ժամանակային միջակայքից՝ սկզբի և ավարտի ամսաթիվը, միջակայքում ներառված օրերի քանակը, դրա մեջ ներառված ամսաթվերի ամբողջ հաջորդականությունը:

Փաթեթի բոլոր գործառույթների անվանումը timeperiodsR ինտուիտիվ են և բաղկացած են երկու մասից. ուղղություն_ընդմիջում, Որտեղ:

  • ուղղություն որտեղ դուք պետք է տեղափոխվեք տվյալ ամսաթվի համեմատ՝ last_n, նախորդ, այս, հաջորդ, հաջորդ_n:
  • ժամանակավոր ընդմիջում ժամանակաշրջանը հաշվարկելու համար՝ օր, շաբաթ, ամիս, եռամսյակ, տարի:

Գործառույթների ամբողջական փաթեթ.

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

Ժամանակային ընդմիջումները ժամանակաշրջաններումR

Այս գործառույթները օգտակար են այն դեպքերում, երբ դուք պետք է հաշվետվություններ կազմեք՝ հիմնվելով անցած շաբաթվա կամ ամսվա տվյալների վրա: Վերջին ամիսը ստանալու համար օգտագործեք համանուն ֆունկցիան previous_month():

prmonth <- previous_month()

Որից հետո դուք կունենաք օբյեկտ պրամիս դաս tpr, որից հեշտությամբ կարելի է ձեռք բերել հետևյալ բաղադրիչները.

  • ժամանակաշրջանի մեկնարկի ամսաթիվը, մեր օրինակում սա վերջին ամիսն է
  • ժամանակաշրջանի ավարտի ամսաթիվը
  • ժամանակահատվածում ներառված օրերի քանակը
  • ժամանակաշրջանում ներառված ամսաթվերի հաջորդականությունը

Ավելին, բաղադրիչներից յուրաքանչյուրը կարող եք ձեռք բերել տարբեր ձևերով.

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

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

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

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

Դուք կարող եք նաև ստանալ որևէ բաղադրիչ՝ օգտագործելով փաստարկը մաս, որն առկա է փաթեթի գործառույթներից յուրաքանչյուրում: Հնարավոր արժեքներ՝ սկիզբ, ավարտ, հաջորդականություն, երկարություն:

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

Այսպիսով, եկեք դիտարկենք փաթեթի գործառույթներում առկա բոլոր փաստարկները timeperiodsR:

  • x — Հղման ամսաթիվը, որից կհաշվարկվի ժամանակաշրջանը, ընթացիկ ամսաթիվը լռելյայնորեն.
  • n — ժամանակաշրջանում ներառված ընդմիջումների քանակը, օրինակ՝ նախորդ 3 շաբաթները.
  • part - Օբյեկտի որ բաղադրիչը tpr դուք պետք է ստանաք, լռելյայն all;
  • week_start — Փաստարկը առկա է միայն շաբաթների հետ աշխատելու գործառույթներում և թույլ է տալիս սահմանել շաբաթվա այն օրվա թիվը, որը կհամարվի դրա սկիզբը: Լռելյայնորեն, շաբաթվա սկիզբը երկուշաբթի է, բայց դուք կարող եք սահմանել ցանկացած 1 - երկուշաբթիից 7 - կիրակի:

Այսպիսով, դուք կարող եք հաշվարկել ցանկացած ժամանակաշրջան՝ ընթացիկ կամ որևէ այլ տվյալ ամսաթվի համեմատ, ահա ևս մի քանի օրինակ.

# получить 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-ը կիրակի է.
Աշխատեք ամսաթվերի հետ R-ում (հիմնական հնարավորություններ, ինչպես նաև քսում և ժամանակաշրջաններR փաթեթներ)

Մեզ անհրաժեշտ է մի շրջան, որը հոկտեմբերի 6-ի համեմատ կտևի նախորդ 3 շաբաթը։ Չհաշված շաբաթը, որը ներառում է հենց հոկտեմբերի 6-ը։ Ըստ այդմ՝ սա սեպտեմբերի 9-ից սեպտեմբերի 29-ն ընկած ժամանակահատվածն է։

Աշխատեք ամսաթվերի հետ R-ում (հիմնական հնարավորություններ, ինչպես նաև քսում և ժամանակաշրջաններR փաթեթներ)

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

Այս օրինակում մեզ հետաքրքրում է 4 ամիս առաջ եղած ամիսը, եթե սկսենք 16 թվականի սեպտեմբերի 2019-ից, ապա դա 2019 թվականի մայիսն էր։

Ամսաթվերի վեկտորի զտում` օգտագործելով ժամանակաշրջաններR

Ամսաթվերը զտելու համար timeperiodsR Կան մի քանի օպերատորներ.

  • %left_out% - համեմատում է tpr դասի երկու օբյեկտ և վերադարձնում է ձախից աջից բացակայող արժեքը:
  • %left_in% - համեմատում է tpr դասի երկու օբյեկտ և վերադարձնում է ձախ օբյեկտի ամսաթվերը, որոնք ներառված են աջում:
  • %right_out% - համեմատում է tpr դասի երկու օբյեկտ և վերադարձնում է աջի արժեքը, որը բացակայում է ձախից:
  • %right_in% - համեմատում է tpr դասի երկու օբյեկտ և վերադարձնում է աջ օբյեկտի ամսաթվերը, որոնք առկա են ձախում:

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

Փաթեթում timeperiodsR կա պաշտոնական, ռուսալեզու YouTube երգացանկ.

Ամփոփում

Մենք մանրամասն ուսումնասիրեցինք այն օբյեկտների դասերը, որոնք նախատեսված են R լեզվով ամսաթվերի հետ աշխատելու համար։ Նաև այժմ դուք կարող եք կատարել թվաբանական գործողություններ ամսաթվերով և արագ ձեռք բերել ցանկացած ժամանակահատված՝ օգտագործելով փաթեթը timeperiodsR.

Եթե ​​ձեզ հետաքրքրում է R լեզուն, հրավիրում եմ բաժանորդագրվել իմ հեռագրային ալիքին R4 մարքեթինգ, որում ես ամեն օր կիսվում եմ օգտակար նյութերով ձեր առօրյա խնդիրների լուծման համար R լեզուն օգտագործելու մասին:

Source: www.habr.com

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