Ħidma bid-dati f'R (kapaċitajiet bażiċi, kif ukoll il-pakketti lubridate u timeperiodsR)

Ikseb id-data attwali fi kwalunkwe lingwa ta 'programmar, operazzjoni ekwivalenti għal "Hello world!" Il-lingwa R mhijiex eċċezzjoni.

F'dan l-artikolu, se nħarsu lejn kif taħdem id-dati fis-sintassi bażika tal-lingwa R, u nħarsu wkoll lejn diversi pakketti utli li jespandu l-kapaċitajiet tagħha meta taħdem bid-dati:

  • lubridate — pakkett li jippermettilek twettaq kalkoli aritmetiċi bejn id-dati;
  • timeperiodsR — pakkett għax-xogħol bl-intervalli tal-ħin u l-komponenti tagħhom.

Ħidma bid-dati f'R (kapaċitajiet bażiċi, kif ukoll il-pakketti lubridate u timeperiodsR)

Kontenut

Jekk inti interessat fl-analiżi tad-dejta, u b'mod partikolari l-lingwa R, tista 'tkun interessat f'my telegramma и YouTube kanali. Ħafna mill-kontenut huwa ddedikat għal-lingwa R.

  1. Ħidma bid-dati fis-sintassi R bażika
    1.1. Ikkonverti t-test sal-lum
    1.2. L-estrazzjoni tal-komponenti tad-data f'R bażiku
  2. Ħidma mad-dati bl-użu tal-pakkett lubridate
    2.1. Ikkonverti t-test sal-lum billi tuża lubridate
    2.2. L-estrazzjoni tal-komponenti tad-data bl-użu tal-pakkett tal-lubridat
    2.3. Operazzjonijiet aritmetiċi bid-dati
  3. Xogħol simplifikat b'perjodi, pakkett timeperiodsR
    3.1. Intervalli ta' ħin f'perjodi ta' żmienR
    3.2. Iffiltrar ta' vettur ta' dati bl-użu ta' timeperiodsR
  4. Konklużjoni

Ħidma bid-dati fis-sintassi R bażika

Ikkonverti t-test sal-lum

Basic R għandu sett ta 'funzjonijiet biex taħdem bid-dati. L-iżvantaġġ tas-sintassi bażika huwa li l-każ tal-ismijiet tal-funzjonijiet u l-argumenti huwa mifrux ħafna u prattikament m'għandu l-ebda konnessjoni loġika. Madankollu, trid tkun taf il-funzjonijiet bażiċi tal-lingwa, għalhekk nibdew magħhom.

Ħafna drabi meta tagħbija data f'R, minn fajls csv, jew sorsi oħra, tirċievi data bħala test. Biex tikkonverti dan it-test għat-tip ta' dejta korrett, uża l-funzjoni 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"

Permezz ta 'default as.Date() jaċċetta data f'żewġ formati: SSSS-XX-JJ jew SSSS/XX/JJ.
Jekk is-sett tad-dejta tiegħek fih dati f'xi format ieħor, tista' tuża l-argument format.

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

format jaċċetta operaturi f'forma ta 'sekwenza li tindika kwalunkwe intervall ta' ħin u l-format tiegħu; il-valuri l-aktar użati huma murija fit-tabella hawn taħt:

Format
Deskrizzjoni

%d
Numru tal-ġurnata fix-xahar

%a
Abbrevjazzjoni għall-isem tal-ġurnata tal-ġimgħa

%A
Isem sħiħ tal-ġurnata tal-ġimgħa

%w
Numru tal-ġurnata tal-ġimgħa (0-6, fejn 0 huwa l-Ħadd)

%m
Deżinjazzjoni ta' xahar b'żewġ ċifri (01-12)

%b
Abbrevjazzjoni tal-isem tax-xahar (apr, mar, …)

%B
Isem ix-xahar sħiħ

%y
Deżinjazzjoni ta' sena b'żewġ figuri

%Y
Deżinjazzjoni ta' sena b'erba' figuri

%j
Numru tal-ġurnata fis-sena (001 - 366)

%U
Numru tal-ġimgħa fis-sena (00 - 53), il-bidu tal-ġimgħa l-Ħadd

%W
Numru tal-ġimgħa fis-sena (00 - 53), il-bidu tal-ġimgħa t-Tnejn

Għaldaqstant, "26 ta' Settembru, 2019" huwa l-isem sħiħ tax-xahar, id-data u s-sena. Dan il-format tad-data jista' jiġi deskritt bl-użu ta' operaturi kif ġej:"%B %d, %Y".

Fejn:

  • %B — Isem sħiħ tax-xahar
  • %d — Numru tal-ġurnata fix-xahar
  • %Y — Deżinjazzjoni tas-sena b'erba' figuri

Meta tiddeskrivi l-format tad-data, huwa importanti li tinkludi l-karattri addizzjonali kollha mis-sekwenza tiegħek, bħal daxxijiet, virgoli, perjodi, spazji, eċċ. Fl-eżempju tiegħi, "26 ta' Settembru 2019", hemm virgola wara d-data, u trid ukoll tpoġġi virgola fid-deskrizzjoni tal-format:"%B %d, %Y".

Hemm sitwazzjonijiet meta tirċievi data li mhux biss ma tikkorrispondix għal formati standard (SSSS-XX-JJ jew SSSS/XX/JJ), iżda wkoll f'lingwa li hija differenti minn dik default installata fis-sistema operattiva tiegħek. Pereżempju, niżżilt dejta fejn id-data hija indikata hekk: "15 ta' Diċembru 2019." Qabel ma tikkonverti din is-sekwenza għal data, għandek bżonn tibdel il-lokal.

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

L-estrazzjoni tal-komponenti tad-data f'R bażiku

M'hemmx ħafna funzjonijiet f'R bażiku li jippermettulek estratt kwalunkwe parti ta 'data minn oġġett ta' klassi data.

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

Minbarra l-klassi tal-oġġett prinċipali data f'R bażiku hemm 2 tipi ta' dejta oħra li jaħżnu timestamp: POSIXlt, POSIXct. Id-differenza ewlenija bejn dawn il-klassijiet u data hija li minbarra d-data jaħżnu l-ħin.

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

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

# "POSIXct" "POSIXt"

Funzjoni Sys.time() jirritorna d-data u l-ħin kurrenti fil-format POSIXct. Dan il-format huwa simili fit-tifsira għal UNIXTIME, u jaħżen in-numru ta' sekondi mill-bidu tal-era UNIX (nofsillejl (UTC) mill-31 ta’ Diċembru, 1969 sal-1 ta’ Jannar, 1970).

Klassi POSIXlt jaħżen ukoll il-ħin u d-data, u l-komponenti kollha tagħhom. Għalhekk, huwa oġġett bi struttura aktar kumplessa, iżda li minnu huwa faċli li tikseb kwalunkwe komponent ta 'data u ħin minħabba fil-fatt POSIXlt dan lista.

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

Konverżjoni ta 'data numerika u tat-test għal formati POSIX* mwettqa minn funzjonijiet as.POSIXct() и as.POSIXlt(). Dawn il-funzjonijiet għandhom sett żgħir ta 'argumenti.

  • x — Numru, string jew oġġett tal-klassi data, li jeħtieġ li jiġi konvertit;
  • tz — Żona tal-ħin, default "GMT";
  • format — Deskrizzjoni tal-format tad-data li fih id-dejta mgħoddija lill-argument x hija rappreżentata;
  • origin — Użat biss meta tikkonverti numru għal POSIX; trid tgħaddi oġġett tad-data u ħin li minnu jingħaddu s-sekonda għal dan l-argument. Tipikament użat għat-traduzzjoni minn UNIXTIME.

Jekk l-informazzjoni tad-data u l-ħin tiegħek tinsab fi UNIXTIME, imbagħad biex jaqilbuhom f'data ċara u li tinqara, uża l-eżempju li ġej:

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

Fl-oriġini tista 'tispeċifika kwalunkwe timestamp. Pereżempju, jekk id-dejta tiegħek fiha d-data u l-ħin bħala n-numru ta' sekondi mill-15 ta' Settembru 2019 12:15 pm, imbagħad biex taqlebha għal data uża:

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

Ħidma mad-dati bl-użu tal-pakkett lubridate

lubridate Forsi l-aktar pakkett popolari biex taħdem bid-dati fil-lingwa R. Jipprovdilek tliet klassijiet addizzjonali.

  • durations — tul ta’ żmien, i.e. numru ta' sekondi bejn żewġ timestamps;
  • perjodi - perjodi jippermettulek tagħmel kalkoli bejn id-dati f'intervalli li jinqraw mill-bniedem: ġranet, xhur, ġimgħat, eċċ;
  • intervalli - oġġetti li jipprovdu l-punt tal-bidu u tat-tmiem fiż-żmien.

L-installazzjoni ta 'pakketti addizzjonali fil-lingwa R titwettaq bl-użu tal-funzjoni standard install.packages().

Installazzjoni tal-pakkett lubridate:

install.packages("lubridate")

Ikkonverti t-test sal-lum billi tuża lubridate

Karatteristiċi tal-pakkett lubridate jissimplifika b'mod sinifikanti l-proċess tal-konverżjoni tat-test f'data, u jippermetti wkoll li twettaq kwalunkwe operazzjoni aritmetika bid-dati u l-ħinijiet.

Il-funzjonijiet jgħinuk tikseb id-data jew id-data u l-ħin attwali today() и now().

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

Biex tikkonverti string għal data fi lubridate Hemm familja sħiħa ta' funzjonijiet li l-ismijiet tagħhom dejjem jikkonsistu fi tliet ittri, u jindikaw is-sekwenza tal-komponenti tad-data:

  • y - sena
  • m - xahar
  • d - jum

Lista ta' funzjonijiet għall-konverżjoni tat-test sal-lum permezz tal-lubridate

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

Xi eżempji għall-konverżjoni ta' kordi għal dati:

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

Kif tista 'tara lubridate Huwa ħafna aktar effiċjenti biex tirrikonoxxi d-deskrizzjonijiet tad-data bħala test, u tippermettilek tikkonverti test għal data mingħajr ma tuża operaturi addizzjonali biex tiddeskrivi l-format.

L-estrazzjoni tal-komponenti tad-data bl-użu tal-pakkett tal-lubridat

Uża wkoll lubridate tista' tikseb kwalunkwe komponent minn data:

dt <- ymd("2017 jan 21")

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

Operazzjonijiet aritmetiċi bid-dati

Iżda l-iktar funzjonalità importanti u bażika lubridate hija l-abbiltà li twettaq diversi operazzjonijiet aritmetiċi bid-dati.

L-arrotondament tad-data jitwettaq minn tliet funzjonijiet:

  • floor_date — arrotondament għall-eqreb passat
  • ceiling_date — arrotondament għall-ħin tal-futur qarib
  • round_date - arrotondament għall-eqreb ħin

Kull waħda minn dawn il-funzjonijiet għandha argument unitàli jippermettilek tispeċifika l-unità tal-arrotondament: it-tieni, minuta, siegħa, jum, ġimgħa, xahar, xahrejn, kwart, staġun, nofs sena, sena

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

Mela ejja nsemmu kif tikseb data li hija 8 ijiem wara d-data kurrenti u nagħmlu diversi kalkoli aritmetiċi oħra bejn iż-żewġ dati.

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

Xogħol simplifikat b'perjodi, pakkett timeperiodsR.

timeperiodsR — pakkett ġdid għax-xogħol bid-dati li ġie ppubblikat fuq CRAN f'Settembru 2019.

Installazzjoni tal-pakkett timeperiodsR:

install.packages("timeperiodsR")

L-għan ewlieni huwa li jiġi determinat malajr ċertu intervall ta 'żmien relattiv għal data partikolari. Pereżempju, billi tuża l-funzjonijiet tagħha tista’ faċilment:

  • Ikseb l-aħħar ġimgħa, xahar, kwart jew sena f'R.
  • Ikseb numru speċifikat ta' intervalli ta' ħin relattiv għal data, pereżempju l-aħħar 4 ġimgħat.
  • Huwa faċli li jiġu estratti l-komponenti tiegħu mill-intervall ta 'żmien li jirriżulta: id-data tal-bidu u t-tmiem, in-numru ta' ġranet inklużi fl-intervall, is-sekwenza sħiħa ta 'dati li huma inklużi fih.

Isem tal-funzjonijiet kollha tal-pakkett timeperiodsR huma intuwittivi u jikkonsistu f'żewġ partijiet: direzzjoni_intervall, fejn:

  • direzzjoni li fiha trid timxi relattiva għal data partikolari: last_n, previous, this, next, next_n.
  • temporali intervall biex tikkalkula l-perjodu: jum, ġimgħa, xahar, kwart, sena.

Sett sħiħ ta' karatteristiċi:

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

Intervalli ta' ħin f'perjodi ta' żmienR

Dawn il-funzjonijiet huma utli f'każijiet fejn għandek bżonn tibni rapporti bbażati fuq data mill-aħħar ġimgħa jew xahar. Biex tikseb l-aħħar xahar, uża l-funzjoni tal-istess isem previous_month():

prmonth <- previous_month()

Wara li jkollok oġġett f'xahar klassi tpr, li minnu jistgħu jinkisbu faċilment il-komponenti li ġejjin:

  • id-data tal-bidu tal-perjodu, fl-eżempju tagħna dan huwa l-aħħar xahar
  • data tat-tmiem tal-perjodu
  • numru ta’ jiem inklużi fil-perjodu
  • sekwenza ta' dati inklużi fil-perjodu

Barra minn hekk, tista 'tikseb kull wieħed mill-komponenti b'modi differenti:

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

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

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

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

Tista 'wkoll tikseb kwalunkwe mill-komponenti billi tuża l-argument parti, li hija preżenti f'kull waħda mill-funzjonijiet tal-pakkett. Valuri possibbli: bidu, tmiem, sekwenza, tul.

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

Mela ejja nħarsu lejn l-argumenti kollha disponibbli fil-funzjonijiet tal-pakkett timeperiodsR:

  • x — Id-data ta' referenza li minnha ser jiġi kkalkolat il-perjodu ta' żmien, id-data kurrenti awtomatikament;
  • n — In-numru ta' intervalli li se jiġu inklużi fil-perjodu, pereżempju t-3 ġimgħat preċedenti;
  • part — Liema komponent tal-oġġett tpr għandek bżonn tikseb, awtomatikament all;
  • week_start — L-argument huwa preżenti biss fil-funzjonijiet għax-xogħol bil-ġimgħat, u jippermettilek li tissettja n-numru tal-jum tal-ġimgħa li se jitqies il-bidu tiegħu. B'mod awtomatiku, il-bidu tal-ġimgħa huwa t-Tnejn, iżda tista' tissettja kwalunkwe minn 1 - It-Tnejn sas-7 - Il-Ħadd.

Għalhekk, tista 'tikkalkula kwalunkwe perjodu ta' żmien relattiv għad-data attwali jew kwalunkwe data oħra mogħtija; hawn ftit eżempji oħra:

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

Is-6 ta’ Ottubru huwa l-Ħadd:
Ħidma bid-dati f'R (kapaċitajiet bażiċi, kif ukoll il-pakketti lubridate u timeperiodsR)

Għandna bżonn perjodu li, meta mqabbel mas-6 ta’ Ottubru, jieħu t-3 ġimgħat ta’ qabel. Mhux inkluża l-ġimgħa li tinkludi s-6 ta’ Ottubru stess. Għaldaqstant, dan huwa l-perjodu mid-9 ta’ Settembru sad-29 ta’ Settembru.

Ħidma bid-dati f'R (kapaċitajiet bażiċi, kif ukoll il-pakketti lubridate u timeperiodsR)

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

F'dan l-eżempju, aħna interessati fix-xahar li kien 4 xhur ilu, jekk nibdew mis-16 ta 'Settembru, 2019, allura kien Mejju 2019.

Iffiltrar ta' vettur ta' dati bl-użu ta' timeperiodsR

Biex tiffiltra d-dati fi timeperiodsR Hemm diversi operaturi:

  • %left_out% - iqabbel żewġ oġġetti tal-klassi tpr, u jirritorna l-valur minn dak tax-xellug li huwa nieqes f'dak tal-lemin.
  • %left_in% - iqabbel żewġ oġġetti tal-klassi tpr, u jirritorna d-dati mill-oġġett tax-xellug li huma inklużi f'dak tal-lemin.
  • %right_out% - iqabbel żewġ oġġetti tal-klassi tpr, u jirritorna l-valur minn dak tal-lemin li huwa nieqes minn dak tax-xellug.
  • %right_in% - iqabbel żewġ oġġetti tal-klassi tpr, u jirritorna dati mill-oġġett tal-lemin li huma preżenti f'dak tax-xellug.

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

Fil-pakkett timeperiodsR hemm waħda uffiċjali, bil-lingwa Russa Playlist ta' YouTube.

Konklużjoni

Aħna eżaminajna fid-dettall il-klassijiet ta 'oġġetti li huma ddisinjati fil-lingwa R biex jaħdmu bid-dati. Ukoll issa tista 'twettaq operazzjonijiet aritmetiċi fuq dati, u malajr tikseb kwalunkwe perjodi ta' żmien billi tuża l-pakkett timeperiodsR.

Jekk inti interessat fil-lingwa R, nistiednek biex tabbona għall-kanal tat-telegram tiegħi R4marketing, li fiha naqsam materjali utli fuq bażi ta' kuljum dwar l-użu tal-lingwa R biex issolvi l-problemi tiegħek ta' kuljum.

Sors: www.habr.com

Żid kumment