Pagtrabaho uban sa mga petsa sa R ​​nga pinulongan (basic features, ingon man ang lubridate ug timeperiodsR packages)

Kuhaa ang kasamtangan nga petsa sa bisan unsang programming language, usa ka operasyon nga katumbas sa "Hello world!" Ang R nga pinulongan dili eksepsiyon.

Niini nga artikulo, atong tan-awon kung giunsa ang pagtrabaho sa mga petsa nga nagtrabaho sa sukaranan nga syntax sa R ​​nga sinultian, ug tan-awon usab ang daghang mapuslanon nga mga pakete nga nagpalapad sa mga kapabilidad niini kung nagtrabaho kauban ang mga petsa:

  • lubridate - usa ka pakete nga nagtugot kanimo sa paghimo sa mga kalkulasyon sa aritmetika tali sa mga petsa;
  • timeperiodsR - usa ka pakete alang sa pagtrabaho sa mga agwat sa oras ug sa ilang mga sangkap.

Pagtrabaho uban sa mga petsa sa R ​​nga pinulongan (basic features, ingon man ang lubridate ug timeperiodsR packages)

Mga sulod

Kung interesado ka sa pag-analisar sa datos, ug labi na ang R nga sinultian, mahimo ka interesado sa akong telegram и youtube mga kanal. Kadaghanan sa sulod gipahinungod sa R ​​nga pinulongan.

  1. Pagtrabaho sa mga petsa sa batakang R syntax
    1.1. I-convert ang teksto ngadto sa petsa
    1.2. Pagkuha sa mga sangkap sa petsa sa batakang R
  2. Pagtrabaho sa mga petsa gamit ang lubridate nga pakete
    2.1. I-convert ang teksto sa petsa gamit ang lubridate
    2.2. Pagkuha sa mga sangkap sa petsa gamit ang lubridate nga pakete
    2.3. Mga operasyon sa aritmetika nga adunay mga petsa
  3. Gipasimple nga trabaho nga adunay mga yugto, timeperiodsR nga pakete
    3.1. Mga agwat sa oras sa mga yugto sa panahonR
    3.2. Pagsala sa usa ka vector sa mga petsa gamit ang timeperiodsR
  4. konklusyon

Pagtrabaho sa mga petsa sa batakang R syntax

I-convert ang teksto ngadto sa petsa

Ang Basic R adunay usa ka hugpong sa mga gimbuhaton alang sa pagtrabaho sa mga petsa. Ang disbentaha sa batakang syntax mao nga ang kaso sa mga ngalan sa function ug mga argumento nagkatag kaayo ug halos walay lohikal nga koneksyon. Bisan pa, kinahanglan nimo mahibal-an ang sukaranan nga mga gimbuhaton sa pinulongan, busa magsugod kami kanila.

Kasagaran kung nagkarga sa datos sa R, gikan sa mga csv file, o uban pang mga gigikanan, makadawat ka usa ka petsa ingon teksto. Aron mabag-o kini nga teksto sa husto nga tipo sa datos, gamita ang function 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"

pinaagi sa default as.Date() midawat sa petsa sa duha ka porma: YYYY-MM-DD o YYYY/MM/DD.
Kung ang imong data set adunay mga petsa sa ubang format, mahimo nimong gamiton ang argumento format.

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

format gidawat ang mga operator sa porma sa string nga nagpasabut sa bisan unsang agwat sa oras ug ang pormat niini; ang labing sagad nga gigamit nga mga kantidad gipakita sa lamesa sa ubos:

Format
paghulagway

%d
Numero sa adlaw sa bulan

%a
Minubo sa ngalan sa adlaw sa semana

%A
Bug-os nga ngalan sa adlaw sa semana

%w
Numero sa adlaw sa semana (0-6, diin 0 ang Domingo)

%m
Duha ka digit nga bulan nga pagtudlo (01-12)

%b
Minubo sa ngalan sa bulan (apr, mar,…)

%B
Hingpit nga ngalan sa bulan

%y
Duha ka digit nga tuig nga pagtudlo

%Y
Upat ka digit nga tuig nga pagtudlo

%j
Numero sa adlaw sa tuig (001 - 366)

%U
Gidaghanon sa semana sa tuig (00 - 53), sugod sa semana nga Domingo

%W
Numero sa semana sa tuig (00 - 53), sugod sa semana Lunes

Tungod niini, ang "Septiyembre 26, 2019" mao ang tibuuk nga ngalan sa bulan, petsa ug tuig. Kini nga pormat sa petsa mahimong ihulagway gamit ang mga operator sama sa mosunod:"%B %d, %Y".

Asa:

  • %B — Bug-os nga ngalan sa bulan
  • %d — Gidaghanon sa adlaw sa bulan
  • %Y — Upat ka digit nga tuig nga pagtudlo

Kung naghulagway sa format sa petsa, importante nga iapil ang tanang dugang nga mga karakter gikan sa imong string, sama sa dashes, comma, period, spaces, ug uban pa. Sa akong pananglitan, "Septiyembre 26, 2019", adunay usa ka comma pagkahuman sa petsa, ug kinahanglan nimo usab nga magbutang usa ka comma sa paghulagway sa format:"%B %d, %Y".

Adunay mga sitwasyon kung makadawat ka usa ka petsa nga dili lamang dili katumbas sa mga sumbanan nga format (YYYY-MM-DD o YYYY/MM/DD), apan usab sa usa ka pinulongan nga lahi sa default nga gi-install sa imong operating system. Pananglitan, nag-download ka sa datos diin ang petsa gipakita sama niini: "Disyembre 15, 2019." Sa dili pa i-convert kini nga string ngadto sa petsa, kinahanglan nimo nga usbon ang lokal.

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

Pagkuha sa mga sangkap sa petsa sa batakang R

Wala'y daghang mga gimbuhaton sa batakang R nga nagtugot kanimo sa pagkuha sa bisan unsang bahin sa usa ka petsa gikan sa usa ka butang sa klase Petsa.

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

Dugang pa sa nag-unang klase sa butang Petsa sa batakang R adunay 2 pa nga mga tipo sa datos nga nagtipig usa ka timestamp: POSIXlt, POSIXct. Ang nag-unang kalainan tali niini nga mga klase ug Petsa kana dugang pa sa petsa nga ilang gitipigan ang oras.

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

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

# "POSIXct" "POSIXt"

function Sys.time() ibalik ang karon nga petsa ug oras sa format POSIXct. Kini nga porma susama sa kahulogan sa UNIXTIME, ug gitipigan ang gidaghanon sa mga segundo sukad sa pagsugod sa panahon sa UNIX (tungang gabii (UTC) gikan sa Disyembre 31, 1969 hangtod sa Enero 1, 1970).

Класс POSIXlt gitipigan usab niini ang oras ug petsa, ug ang tanan nga mga sangkap niini. Busa, kini usa ka butang nga adunay mas komplikado nga istruktura, apan gikan diin kini dali nga makuha ang bisan unsang bahin sa petsa ug oras tungod kay sa pagkatinuod POSIXlt kini listahan.

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

Pag-convert sa numeric ug text data ngadto sa mga format POSIX* gihimo pinaagi sa mga gimbuhaton as.POSIXct() и as.POSIXlt(). Kini nga mga gimbuhaton adunay gamay nga hugpong sa mga argumento.

  • x — Numero, hilo o butang sa klase Petsa, nga kinahanglang makabig;
  • tz — Time zone, default nga "GMT";
  • format — Deskripsyon sa format sa petsa diin ang datos nga gipasa sa x argumento girepresentar;
  • gigikanan — Gigamit ra kung mag-convert sa usa ka numero sa POSIX; kinahanglan nimo nga ipasa ang usa ka butang sa petsa ug oras diin ang mga segundo giihap sa kini nga argumento. Kasagaran gigamit alang sa paghubad gikan sa UNIXTIME.

Kung ang imong impormasyon sa petsa ug oras anaa UNIXTIME, unya aron ma-convert kini ngadto sa klaro, mabasa nga petsa, gamita ang mosunod nga pananglitan:

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

Sa gigikanan mahimo nimong ipiho ang bisan unsang timestamp. Pananglitan, kung ang imong data naglangkob sa petsa ug oras ingon ang gidaghanon sa mga segundo sukad sa Septyembre 15, 2019 12:15 pm, unya aron i-convert kini sa paggamit sa petsa:

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

Pagtrabaho sa mga petsa gamit ang lubridate nga pakete

lubridate Tingali ang pinakapopular nga pakete alang sa pagtrabaho sa mga petsa sa pinulongang R. Naghatag kini kanimo og tulo ka dugang nga mga klase.

  • mga gidugayon - gidugayon, i.e. gidaghanon sa mga segundo tali sa duha ka mga timestamp;
  • mga panahon - ang mga yugto nagtugot kanimo sa paghimo sa mga kalkulasyon tali sa mga petsa sa mabasa sa tawo nga mga agwat: mga adlaw, mga bulan, mga semana, ug uban pa;
  • mga agwat - mga butang nga naghatag sa pagsugod ug katapusan nga punto sa oras.

Ang pag-instalar sa dugang nga mga pakete sa R ​​nga pinulongan gihimo gamit ang standard function install.packages().

Pag-instalar sa package lubridate:

install.packages("lubridate")

I-convert ang teksto sa petsa gamit ang lubridate

Mga bahin sa package lubridate hinungdanon nga gipasimple ang proseso sa pag-convert sa teksto sa usa ka petsa, ug gitugotan ka usab nga himuon ang bisan unsang mga operasyon sa aritmetika nga adunay mga petsa ug oras.

Ang mga gimbuhaton makatabang kanimo nga makuha ang karon nga petsa o petsa ug oras today() и now().

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

Aron ma-convert ang usa ka string ngadto sa petsa sa lubridate Adunay usa ka tibuok pamilya sa mga gimbuhaton kansang mga ngalan kanunay naglangkob sa tulo ka mga letra, ug nagpakita sa han-ay sa mga sangkap sa petsa:

  • y - tuig
  • m - bulan
  • d - adlaw

Listahan sa mga gimbuhaton alang sa pag-convert sa teksto ngadto sa petsa pinaagi sa lubridate

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

Pipila ka mga pananglitan sa pag-convert sa mga string ngadto sa mga petsa:

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

Sa imong makita lubridate Kini mas episyente sa pag-ila sa mga deskripsyon sa petsa isip teksto, ug nagtugot kanimo sa pag-convert sa teksto ngadto sa petsa nga dili mogamit og dugang nga mga operator aron ihulagway ang format.

Pagkuha sa mga sangkap sa petsa gamit ang lubridate nga pakete

Gigamit usab lubridate makuha nimo ang bisan unsang sangkap gikan sa usa ka petsa:

dt <- ymd("2017 jan 21")

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

Mga operasyon sa aritmetika nga adunay mga petsa

Apan ang labing hinungdanon ug sukaranan nga pagpaandar lubridate mao ang abilidad sa paghimo sa lain-laing mga aritmetika operasyon uban sa mga petsa.

Ang paglibot sa petsa gihimo sa tulo ka mga gimbuhaton:

  • floor_date — pag-rounding sa labing duol nga past tense
  • ceiling_date - rounding ngadto sa duol nga umaabot nga tense
  • round_date - rounding sa labing duol nga oras

Ang matag usa niini nga mga gimbuhaton adunay argumento yunitnga nagtugot kanimo sa pagtino sa rounding unit: ikaduha, minuto, oras, adlaw, semana, bulan, bimonth, quarter, season, tunga sa tuig, tuig

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

Mao nga atong mahibal-an kung giunsa pagkuha ang usa ka petsa nga 8 ka adlaw pagkahuman sa karon nga petsa ug buhaton ang lainlaing uban pang mga kalkulasyon sa aritmetika tali sa duha nga mga petsa.

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

Gipasimple nga trabaho nga adunay mga yugto, timeperiodsR nga pakete.

timeperiodsR - usa ka bag-ong pakete alang sa pagtrabaho sa mga petsa nga gipatik sa CRAN kaniadtong Setyembre 2019.

Pag-instalar sa package timeperiodsR:

install.packages("timeperiodsR")

Ang panguna nga katuyoan mao ang dali nga pagtino sa usa ka piho nga agwat sa oras nga may kalabotan sa usa ka gihatag nga petsa. Pananglitan, gamit ang mga gimbuhaton niini dali ka:

  • Kuhaa ang miaging semana, bulan, quarter o tuig sa R.
  • Pagkuha usa ka piho nga gidaghanon sa mga agwat sa oras nga may kalabotan sa usa ka petsa, pananglitan sa miaging 4 ka semana.
  • Sayon nga makuha ang mga sangkap niini gikan sa sangputanan nga agwat sa oras: ang petsa sa pagsugod ug pagtapos, ang gidaghanon sa mga adlaw nga gilakip sa agwat, ang tibuuk nga han-ay sa mga petsa nga gilakip niini.

Ngalan sa tanan nga mga function sa package timeperiodsR intuitive ug naglangkob sa duha ka bahin: direksyon_sal-ang, diin:

  • direksyon diin kinahanglan kang mobalhin kalabot sa gihatag nga petsa: last_n, previous, this, next, next_n.
  • temporal sal-ang sa pagkalkulo sa panahon: adlaw, semana, bulan, quarter, tuig.

Bug-os nga hugpong sa mga gimbuhaton:

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

Mga agwat sa oras sa mga yugto sa panahonR

Kini nga mga gimbuhaton mapuslanon sa mga kaso diin kinahanglan nimo nga maghimo mga taho base sa datos gikan sa miaging semana o bulan. Aron makuha ang miaging bulan, gamita ang function sa parehas nga ngalan previous_month():

prmonth <- previous_month()

Pagkahuman adunay usa ka butang prmonth grade Gipadayag ni tpr, diin dali makuha ang mga musunud nga sangkap:

  • ang petsa sa pagsugod sa panahon, sa among pananglitan kini ang katapusang bulan
  • petsa sa pagtapos sa panahon
  • gidaghanon sa mga adlaw nga gilakip sa panahon
  • han-ay sa mga petsa nga gilakip sa panahon

Dugang pa, mahimo nimong makuha ang matag usa sa mga sangkap sa lainlaing mga paagi:

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

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

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

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

Mahimo usab nimo makuha ang bisan unsang mga sangkap gamit ang argumento bahin, nga anaa sa matag usa sa mga function sa package. Posible nga mga kantidad: pagsugod, katapusan, pagkasunod-sunod, gitas-on.

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

Busa atong tan-awon ang tanan nga mga argumento nga anaa sa package functions timeperiodsR:

  • x — Ang reperensiya nga petsa gikan diin ang yugto sa panahon makalkulo, ang kasamtangang petsa pinaagi sa default;
  • n - Ang gidaghanon sa mga agwat nga iapil sa panahon, pananglitan sa miaging 3 ka semana;
  • part - Unsa nga sangkap sa butang tpr kinahanglan nimo nga makuha, pinaagi sa default all;
  • week_start — Ang argumento anaa lamang sa mga function alang sa pagtrabaho uban sa mga semana, ug nagtugot kanimo sa pagtakda sa gidaghanon sa adlaw sa semana nga pagaisipon nga sinugdanan niini. 1 - Lunes hangtod 7 - Domingo.

Sa ingon, mahimo nimong kuwentahon ang bisan unsang yugto sa panahon nga may kalabotan sa karon o bisan unsang gihatag nga petsa; ania ang pipila pa nga mga pananglitan:

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

Ang Oktubre 6 mao ang Domingo:
Pagtrabaho uban sa mga petsa sa R ​​nga pinulongan (basic features, ingon man ang lubridate ug timeperiodsR packages)

Nagkinahanglan kami og usa ka yugto nga, kalabot sa Oktubre 6, molungtad sa miaging 3 ka semana. Dili apil ang semana nga naglakip sa Oktubre 6 mismo. Subay niini, kini ang panahon gikan sa Setyembre 9 hangtod Setyembre 29.

Pagtrabaho uban sa mga petsa sa R ​​nga pinulongan (basic features, ingon man ang lubridate ug timeperiodsR packages)

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

Sa kini nga pananglitan, interesado kami sa bulan nga 4 ka bulan ang milabay, kung magsugod kami gikan sa Septyembre 16, 2019, unya Mayo 2019.

Pagsala sa usa ka vector sa mga petsa gamit ang timeperiodsR

Aron ma-filter ang mga petsa sa timeperiodsR Adunay daghang mga operator:

  • %left_out% - nagtandi sa duha ka tpr class nga mga butang, ug nagbalik sa bili gikan sa wala nga wala sa tuo.
  • %left_in% - nagtandi sa duha ka butang sa tpr nga klase, ug gibalik ang mga petsa gikan sa wala nga butang nga gilakip sa tuo.
  • %right_out% - nagtandi sa duha ka tpr nga mga butang nga klase, ug gibalik ang bili gikan sa tuo nga nawala gikan sa wala.
  • %right_in% - nagtandi sa duha ka butang sa tpr nga klase, ug nagbalik sa mga petsa gikan sa tuo nga butang nga anaa sa wala.

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

Sa pakete timeperiodsR adunay usa ka opisyal, Russian nga pinulongan playlist sa YouTube.

konklusyon

Gisusi namo sa detalye ang mga klase sa mga butang nga gidisenyo sa pinulongang R alang sa pagtrabaho sa mga petsa. Karon mahimo nimong buhaton ang mga operasyon sa aritmetika sa mga petsa, ug dali nga makuha ang bisan unsang yugto sa panahon gamit ang pakete timeperiodsR.

Kung interesado ka sa pinulongang R, gidapit ko ikaw nga mag-subscribe sa akong telegrama nga channel R4 marketing, diin akong gipaambit ang mapuslanong mga materyales kada adlaw bahin sa paggamit sa R ​​nga pinulongan sa pagsulbad sa imong inadlaw-adlaw nga mga problema.

Source: www.habr.com

Idugang sa usa ka comment