ProHoster > Օրագիր > Վարչակազմը > Աշխատեք ամսաթվերի հետ R-ում (հիմնական հնարավորություններ, ինչպես նաև քսում և ժամանակաշրջաններR փաթեթներ)
Աշխատեք ամսաթվերի հետ R-ում (հիմնական հնարավորություններ, ինչպես նաև քսում և ժամանակաշրջաններR փաթեթներ)
Ստացեք ընթացիկ ամսաթիվը ցանկացած ծրագրավորման լեզվով, գործողություն, որը համարժեք է «Բարև աշխարհ»: R լեզուն բացառություն չէ:
Այս հոդվածում մենք կանդրադառնանք, թե ինչպես է աշխատում ամսաթվերի հետ աշխատելը R լեզվի հիմնական շարահյուսության մեջ, ինչպես նաև կդիտարկենք մի քանի օգտակար փաթեթներ, որոնք ընդլայնում են դրա հնարավորությունները ամսաթվերի հետ աշխատելիս.
lubridate - փաթեթ, որը թույլ է տալիս կատարել թվաբանական հաշվարկներ ամսաթվերի միջև.
timeperiodsR — ժամանակային ընդմիջումների և դրանց բաղադրիչների հետ աշխատելու փաթեթ:
Պարունակություն
Եթե դուք հետաքրքրված եք տվյալների վերլուծությամբ, և մասնավորապես R լեզվով, ապա ձեզ կարող է հետաքրքրել իմը հեռագիր и youtube ալիքներ. Բովանդակության մեծ մասը նվիրված է 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-ը կիրակի է.
Մեզ անհրաժեշտ է մի շրջան, որը հոկտեմբերի 6-ի համեմատ կտևի նախորդ 3 շաբաթը։ Չհաշված շաբաթը, որը ներառում է հենց հոկտեմբերի 6-ը։ Ըստ այդմ՝ սա սեպտեմբերի 9-ից սեպտեմբերի 29-ն ընկած ժամանակահատվածն է։
# получить месяц отстающий на 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 լեզուն օգտագործելու մասին: