ProHoster > Blog > administratë > Puna me datat në R (aftësitë bazë, si dhe paketat e lubridimit dhe periudhave kohore R)
Puna me datat në R (aftësitë bazë, si dhe paketat e lubridimit dhe periudhave kohore R)
Merrni datën aktuale në çdo gjuhë programimi, një operacion i barabartë me "Hello world!" Gjuha R nuk bën përjashtim.
Në këtë artikull, ne do të shikojmë se si funksionon puna me datat në sintaksën bazë të gjuhës R, dhe gjithashtu do të shikojmë disa paketa të dobishme që zgjerojnë aftësitë e saj kur punoni me data:
lubridate — një paketë që ju lejon të kryeni llogaritjet aritmetike midis datave;
timeperiodsR — një paketë për të punuar me intervalet kohore dhe komponentët e tyre.
Përmbajtje
Nëse jeni të interesuar për analizën e të dhënave, dhe në veçanti gjuhën R, mund të jeni të interesuar për mua telegram и youtube kanalet. Pjesa më e madhe e përmbajtjes i kushtohet gjuhës R.
Basic R ka një sërë funksionesh për të punuar me datat. Disavantazhi i sintaksës bazë është se rasti i emrave dhe argumenteve të funksioneve është shumë i shpërndarë dhe praktikisht nuk ka lidhje logjike. Megjithatë, ju duhet të dini funksionet themelore të gjuhës, kështu që ne do të fillojmë me to.
Më shpesh kur ngarkoni të dhëna në R, nga skedarët csv ose burime të tjera, ju merrni një datë si tekst. Për ta kthyer këtë tekst në llojin e saktë të të dhënave, përdorni funksionin 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() pranon datën në dy formate: VVVV-MM-DD ose YYYY/MM/DD.
Nëse grupi juaj i të dhënave përmban data në ndonjë format tjetër, mund të përdorni argumentin format.
as.Date("September 26, 2019", format = "%B %d, %Y")
format pranon operatorë në formë vargu që tregojnë çdo interval kohor dhe formatin e tij; vlerat më të përdorura janë paraqitur në tabelën më poshtë:
Format
Përshkrim
%d
Numri i ditës në muaj
%a
Shkurtim për emrin e ditës së javës
%A
Emri i plotë i ditës së javës
%w
Numri i ditës së javës (0-6, ku 0 është e diel)
%m
Përcaktimi muajor me dy shifra (01-12)
%b
Shkurtesa e emrit të muajit (prill, mars, ...)
%B
Emri i muajit të plotë
%y
Përcaktimi i vitit me dy shifra
%Y
Emërtimi vjetor me katër shifra
%j
Numri i ditës në vit (001 - 366)
%U
Numri i javës në vit (00 - 53), fillimi i javës të dielën
%W
Numri i javës në vit (00 - 53), fillimi i javës e hënë
Prandaj, "26 shtator 2019" është emri i plotë i muajit, datës dhe vitit. Ky format i datës mund të përshkruhet duke përdorur operatorët si më poshtë:"%B %d, %Y".
Ku:
%B - Emri i plotë i muajit
%d - Numri i ditës në muaj
%Y — Përcaktimi i vitit me katër shifra
Kur përshkruani formatin e datës, është e rëndësishme të përfshini të gjitha karakteret shtesë nga vargu juaj, të tilla si vizat, presjet, pikat, hapësirat, etj. Në shembullin tim, "26 shtator 2019", ka një presje pas datës, dhe gjithashtu duhet të vendosni një presje në përshkrimin e formatit:"%B %d, %Y".
Ka situata kur merrni një datë që jo vetëm që nuk korrespondon me formatet standarde (VVVV-MM-DD ose VVVV/MM/DD), por edhe në një gjuhë që ndryshon nga ajo e paracaktuar e instaluar në sistemin tuaj operativ. Për shembull, keni shkarkuar të dhëna ku data tregohet si kjo: "15 dhjetor 2019". Përpara se ta konvertoni këtë varg në një datë, duhet të ndryshoni vendndodhjen.
# Меняем локаль
Sys.setlocale("LC_TIME", "Russian")
# Конвертируем строку в дату
as.Date("Декабрь 15, 2019 г.", format = "%B %d, %Y")
Nxjerrja e komponentëve të datës në R bazë
Nuk ka shumë funksione në R bazë që ju lejojnë të nxirrni ndonjë pjesë të një date nga një objekt i klasës data.
current_date <- Sys.Date() # текущая дата
weekdays(current_date) # получить номер дня недели
months(current_date) # получить номер месяца в году
quarters(current_date) # получить номер квартала в году
Përveç klasës së objektit kryesor data në R bazë ka 2 lloje të tjera të dhënash që ruajnë një vulë kohore: POSIXlt, POSIXct. Dallimi kryesor midis këtyre klasave dhe data është se përveç datës që ruajnë kohën.
# получить текущую дату и время
current_time <- Sys.time()
# узнать класс объекта current_time
class(current_time)
# "POSIXct" "POSIXt"
Funksion Sys.time() kthen datën dhe orën aktuale në format POSIXct. Ky format është i ngjashëm në kuptim me NJOFTIM, dhe ruan numrin e sekondave që nga fillimi i epokës UNIX (mesnatë (UTC) nga 31 dhjetor 1969 deri më 1 janar 1970).
Klasë POSIXlt ruan gjithashtu kohën dhe datën, si dhe të gjithë përbërësit e tyre. Prandaj, ai është një objekt me një strukturë më komplekse, por nga i cili është e lehtë të merret ndonjë komponent i datës dhe kohës sepse në fakt POSIXlt это listë.
# Получаем текущую дату и время
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 # часовой пояс
Konvertimi i të dhënave numerike dhe tekstuale në formate POSIX* të kryera nga funksionet as.POSIXct() и as.POSIXlt(). Këto funksione kanë një grup të vogël argumentesh.
x - Numri, vargu ose objekti i klasës data, e cila duhet të konvertohet;
tz - Zona kohore, e paracaktuar "GMT";
format — Përshkrimi i formatit të datës në të cilin paraqiten të dhënat e kaluara në argumentin x;
origjina — Përdoret vetëm kur konvertohet një numër në POSIX; duhet të kaloni një objekt datë dhe kohë nga e cila numërohen sekondat në këtë argument. Zakonisht përdoret për përkthim nga UNIXTIME.
Nëse informacioni juaj për datën dhe orën është i përfshirë NJOFTIM, pastaj për t'i kthyer ato në një datë të qartë dhe të lexueshme, përdorni shembullin e mëposhtëm:
# Конвертируем UNIXTIME в читаемую дату
as.POSIXlt(1570084639, origin = "1970-01-01")
Në origjinë mund të specifikoni çdo vulë kohore. Për shembull, nëse të dhënat tuaja përmbajnë datën dhe kohën si numër sekondash që nga data 15 shtator 2019 ora 12:15, atëherë për t'i kthyer ato në një datë përdorni:
# Конвертируем UNIXTIME в дату учитывая что начало отсчёта 15 сентября 2019 12:15
as.POSIXlt(1546123, origin = "2019-09-15 12:15:00")
Puna me datat duke përdorur paketën e lubridimit
lubridate Ndoshta paketa më e njohur për të punuar me datat në gjuhën R. Ju ofron tre klasa shtesë.
kohëzgjatje - kohëzgjatje, d.m.th. numri i sekondave ndërmjet dy vulave kohore;
periudhat - periudhat ju lejojnë të bëni llogaritjet midis datave në intervale të lexueshme nga njeriu: ditë, muaj, javë, e kështu me radhë;
intervale - objekte që ofrojnë pikën e fillimit dhe të përfundimit në kohë.
Instalimi i paketave shtesë në gjuhën R kryhet duke përdorur funksionin standard install.packages().
Instalimi i paketës lubridate:
install.packages("lubridate")
Konvertoni tekstin në datë duke përdorur lubridate
Karakteristikat e paketës lubridate thjeshton ndjeshëm procesin e konvertimit të tekstit në një datë, dhe gjithashtu ju lejon të kryeni çdo operacion aritmetik me data dhe kohë.
Funksionet do t'ju ndihmojnë të merrni datën ose datën dhe orën aktuale today() и now().
today() # текущая дата
now() # текущая дата и время
Për të kthyer një varg në një datë në lubridate Ekziston një familje e tërë funksionesh, emrat e të cilëve përbëhen gjithmonë nga tre shkronja dhe tregojnë sekuencën e komponentëve të datës:
y - vit
m - muaj
d - ditë
Lista e funksioneve për konvertimin e tekstit në datën nëpërmjet lubridate
ymd()
ydm()
mdy()
myd()
dmy()
dym()
yq()
Disa shembuj për konvertimin e vargjeve në data:
ymd("2017 jan 21")
mdy("March 20th, 2019")
dmy("1st april of 2018")
Siç mund ta shihni lubridate Është shumë më efikas në njohjen e përshkrimeve të datave si tekst dhe ju lejon të konvertoni tekstin në datë pa përdorur operatorë shtesë për të përshkruar formatin.
Nxjerrja e komponentëve të datës duke përdorur paketën e lubridimit
Gjithashtu duke përdorur lubridate ju mund të merrni çdo komponent nga një datë:
dt <- ymd("2017 jan 21")
year(dt) # год
month(dt) # месяц
mday(dt) # день в месяце
yday(dt) # день в году
wday(dt) # день недели
Veprime aritmetike me data
Por funksionaliteti më i rëndësishëm dhe themelor lubridate është aftësia për të kryer veprime të ndryshme aritmetike me data.
Rrumbullakimi i datës kryhet nga tre funksione:
floor_date - rrumbullakimi në kohën më të afërt të së shkuarës
ceiling_date - rrumbullakimi në kohën e së ardhmes së afërt
round_date - rrumbullakimi në kohën më të afërt
Secili prej këtyre funksioneve ka një argument njësie cila ju lejon të specifikoni njësinë e rrumbullakosjes: sekonda, minutë, orë, ditë, javë, muaj, dymuaj, tremujor, sezon, gjysmë viti, viti
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") # округлить до полугодия
Pra, le të kuptojmë se si të marrim një datë që është 8 ditë pas datës aktuale dhe të bëjmë llogaritje të tjera aritmetike midis dy datave.
today() + days(8) # какая дата будет через 8 дней
today() - months(2) # какая дата была 2 месяца назад
today() + weeks(12) # какая дата будет через 12 недель
today() - years(2) # какая дата была 2 года назад
Puna e thjeshtuar me periudha, paketa e periudhave kohore.
timeperiodsR — një paketë e re për të punuar me datat që u publikua në CRAN në shtator 2019.
Instalimi i paketës timeperiodsR:
install.packages("timeperiodsR")
Qëllimi kryesor është përcaktimi i shpejtë i një intervali kohor të caktuar në lidhje me një datë të caktuar. Për shembull, duke përdorur funksionet e tij ju lehtë mund të:
Merrni javën, muajin, tremujorin ose vitin e kaluar në R.
Merrni një numër të caktuar intervalesh kohore në lidhje me një datë, për shembull 4 javët e fundit.
Është e lehtë të nxirren përbërësit e tij nga intervali kohor që rezulton: data e fillimit dhe e mbarimit, numri i ditëve të përfshira në interval, e gjithë sekuenca e datave që përfshihen në të.
Emri i të gjitha funksioneve të paketës timeperiodsR janë intuitive dhe përbëhen nga dy pjesë: drejtimi_interval, ku:
drejtimi në të cilën ju duhet të lëvizni në lidhje me një datë të caktuar: last_n, mëparshme, kjo, tjetër, next_n.
i përkohshëm interval për të llogaritur periudhën: ditë, javë, muaj, tremujor, vit.
Kompleti i plotë i veçorive:
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()
Intervalet kohore në periudha kohoreR
Këto funksione janë të dobishme në rastet kur ju duhet të krijoni raporte bazuar në të dhënat e javës ose muajit të kaluar. Për të marrë muajin e fundit, përdorni funksionin me të njëjtin emër previous_month():
prmonth <- previous_month()
Pas së cilës do të keni një objekt prmuaj klasë prpr, nga të cilat mund të merren lehtësisht përbërësit e mëposhtëm:
data e fillimit të periudhës, në shembullin tonë ky është muaji i fundit
data e përfundimit të periudhës
numri i ditëve të përfshira në periudhë
sekuenca e datave të përfshira në periudhë
Për më tepër, ju mund të merrni secilin nga komponentët në mënyra të ndryshme:
# первый день периода
prmonth$start
start(prmonth)
# последний день периода
prmonth$end
end(prmonth)
# последовательность дат
prmonth$sequence
seq(prmonth)
# количество дней входящих в период
prmonth$length
length(prmonth)
Ju gjithashtu mund të merrni ndonjë nga komponentët duke përdorur argumentin pjesë, e cila është e pranishme në secilin prej funksioneve të paketës. Vlerat e mundshme: fillimi, fundi, sekuenca, gjatësia.
previous_month(part = "start") # начало периода
previous_month(part = "end") # конец периода
previous_month(part = "sequence") # последовательность дат
previous_month(part = "length") # количество дней в периоде
Pra, le të shohim të gjitha argumentet e disponueshme në funksionet e paketës timeperiodsR:
x — Data e referencës nga e cila do të llogaritet periudha kohore, data aktuale si parazgjedhje;
n — Numri i intervaleve që do të përfshihen në periudhë, për shembull 3 javët e mëparshme;
part - Cila përbërëse e objektit tpr ju duhet të merrni, si parazgjedhje all;
week_start — Argumenti është i pranishëm vetëm në funksionet për të punuar me javë dhe ju lejon të caktoni numrin e ditës së javës që do të konsiderohet fillimi i saj. Si parazgjedhje, fillimi i javës është e hëna, por ju mund të vendosni ndonjë nga 1 - e hëna deri në 7 - e diel.
Kështu, ju mund të llogarisni çdo periudhë kohore në lidhje me datën aktuale ose ndonjë datë tjetër të dhënë; këtu janë disa shembuj të tjerë:
# получить 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 tetori është e diel:
Ne kemi nevojë për një periudhë që, në raport me 6 tetorin, do të zgjasë 3 javët e mëparshme. Pa përfshirë javën që përfshin vetë 6 tetorin. Prandaj, kjo është periudha nga 9 shtatori deri më 29 shtator.
# получить месяц отстающий на 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
Në këtë shembull na intereson muaji që ka qenë 4 muaj më parë, nëse fillojmë nga data 16 shtator 2019, atëherë ka qenë maj 2019.
Filtrimi i një vektori datash duke përdorur periudha kohoreR
Për të filtruar datat në timeperiodsR Ka disa operatorë:
%left_out% - krahason dy objekte të klasës tpr dhe kthen vlerën nga e majta që mungon në të djathtën.
%left_in% - krahason dy objekte të klasës tpr dhe kthen datat nga objekti i majtë që përfshihen në atë të djathtë.
%right_out% - krahason dy objekte të klasës tpr dhe kthen vlerën nga e djathta që mungon nga e majta.
%right_in% - krahason dy objekte të klasës tpr dhe kthen datat nga objekti i djathtë që janë të pranishëm në atë të majtë.
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
Ne shqyrtuam në detaje klasat e objekteve që janë krijuar në gjuhën R për të punuar me datat. Gjithashtu tani mund të kryeni veprime aritmetike në data dhe të merrni shpejt çdo periudhë kohore duke përdorur paketën timeperiodsR.
Nëse jeni të interesuar për gjuhën R, ju ftoj të abonoheni në kanalin tim të telegramit R4marketing, në të cilën unë ndaj çdo ditë materiale të dobishme në lidhje me përdorimin e gjuhës R në zgjidhjen e problemeve tuaja të përditshme.