Arbeiten mit Datumsangaben in R (Grundfunktionen sowie die Pakete lubridate und timeperiodsR)

Rufen Sie das aktuelle Datum in einer beliebigen Programmiersprache ab, eine Operation, die „Hallo Welt!“ entspricht. Die R-Sprache ist keine Ausnahme.

In diesem Artikel schauen wir uns an, wie die Arbeit mit Datumsangaben in der Grundsyntax der R-Sprache funktioniert, und schauen uns auch einige nützliche Pakete an, die ihre Möglichkeiten bei der Arbeit mit Datumsangaben erweitern:

  • lubridate — ein Paket, mit dem Sie arithmetische Berechnungen zwischen Datumsangaben durchführen können;
  • timeperiodsR — ein Paket zum Arbeiten mit Zeitintervallen und ihren Komponenten.

Arbeiten mit Datumsangaben in R (Grundfunktionen sowie die Pakete lubridate und timeperiodsR)

Inhalt

Wenn Sie sich für Datenanalyse und insbesondere für die R-Sprache interessieren, könnten Sie an meinem interessiert sein Telegram mit и Youtube Kanäle. Der größte Teil des Inhalts ist der R-Sprache gewidmet.

  1. Arbeiten mit Datumsangaben in der grundlegenden R-Syntax
    1.1 Text in Datum umwandeln
    1.2 Extrahieren von Datumskomponenten in Basis-R
  2. Arbeiten mit Daten mithilfe des Lubridate-Pakets
    2.1 Konvertieren Sie Text mit Lubridate in das aktuelle Datum
    2.2 Extrahieren von Datumskomponenten mithilfe des Lubridate-Pakets
    2.3 Arithmetische Operationen mit Datumsangaben
  3. Vereinfachte Arbeit mit Zeiträumen, timeperiodsR-Paket
    3.1 Zeitintervalle in ZeitperiodenR
    3.2 Filtern eines Datumsvektors mithilfe von timeperiodsR
  4. Abschluss

Arbeiten mit Datumsangaben in der grundlegenden R-Syntax

Text in Datum umwandeln

Basic R verfügt über eine Reihe von Funktionen zum Arbeiten mit Datumsangaben. Der Nachteil der Basissyntax besteht darin, dass die Groß- und Kleinschreibung von Funktionsnamen und Argumenten sehr verstreut ist und praktisch keinen logischen Zusammenhang aufweist. Allerdings müssen Sie die Grundfunktionen der Sprache kennen, daher beginnen wir mit ihnen.

Wenn Sie Daten aus CSV-Dateien oder anderen Quellen in R laden, erhalten Sie am häufigsten ein Datum als Text. Um diesen Text in den richtigen Datentyp umzuwandeln, verwenden Sie die Funktion 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"

Standardmäßig as.Date() akzeptiert Datum in zwei Formaten: JJJJ-MM-TT oder JJJJ/MM/TT.
Wenn Ihr Datensatz Daten in einem anderen Format enthält, können Sie das Argument verwenden format.

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

Format akzeptiert Operatoren in String-Form, die ein beliebiges Zeitintervall und sein Format angeben; die am häufigsten verwendeten Werte sind in der folgenden Tabelle aufgeführt:

Formatieren
Beschreibung

%d
Tagesnummer im Monat

%a
Abkürzung für den Namen des Wochentags

%A
Vollständiger Name des Wochentags

%w
Nummer des Wochentags (0-6, wobei 0 Sonntag ist)

%m
Zweistellige Monatsbezeichnung (01-12)

%b
Abkürzung des Monatsnamens (apr, mar, …)

%B
Vollständiger Monatsname

%y
Zweistellige Jahresangabe

%Y
Vierstellige Jahresangabe

%j
Tagesnummer im Jahr (001 - 366)

%U
Nummer der Woche im Jahr (00 - 53), Wochenanfang Sonntag

%W
Wochennummer im Jahr (00 - 53), Wochenbeginn Montag

Dementsprechend ist „26. September 2019“ der vollständige Name des Monats, des Datums und des Jahres. Dieses Datumsformat kann mithilfe von Operatoren wie folgt beschrieben werden:"%B %d, %Y".

Wo:

  • %B — Vollständiger Name des Monats
  • %d — Nummer des Tages im Monat
  • %Y — Vierstellige Jahresangabe

Bei der Beschreibung des Datumsformats ist es wichtig, alle zusätzlichen Zeichen aus Ihrer Zeichenfolge einzubeziehen, z. B. Bindestriche, Kommas, Punkte, Leerzeichen usw. In meinem Beispiel „26. September 2019“ steht nach dem Datum ein Komma, und Sie müssen auch ein Komma in die Formatbeschreibung einfügen:"%B %d, %Y".

Es gibt Situationen, in denen Sie ein Datum erhalten, das nicht nur nicht den Standardformaten entspricht (JJJJ-MM-TT oder JJJJ/MM/TT), aber auch in einer Sprache, die sich von der auf Ihrem Betriebssystem installierten Standardsprache unterscheidet. Sie haben beispielsweise Daten heruntergeladen, bei denen das Datum wie folgt angegeben ist: „15. Dezember 2019“. Bevor Sie diese Zeichenfolge in ein Datum konvertieren, müssen Sie das Gebietsschema ändern.

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

Extrahieren von Datumskomponenten in Basis-R

In Basic R gibt es nicht viele Funktionen, mit denen Sie beliebige Teile eines Datums aus einem Klassenobjekt extrahieren können Datum.

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

Zusätzlich zur Hauptobjektklasse Datum In Basic R gibt es zwei weitere Datentypen, die einen Zeitstempel speichern: POSIXlt, POSIXct. Der Hauptunterschied zwischen diesen Klassen und Datum ist, dass sie zusätzlich zum Datum die Uhrzeit speichern.

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

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

# "POSIXct" "POSIXt"

Funktion Sys.time() gibt das aktuelle Datum und die aktuelle Uhrzeit im Format zurück POSIXct. Dieses Format hat eine ähnliche Bedeutung wie UNIXTIMEund speichert die Anzahl der Sekunden seit Beginn der UNIX-Ära (Mitternacht (UTC) vom 31. Dezember 1969 bis 1. Januar 1970).

Klasse POSIXlt Es speichert auch die Uhrzeit und das Datum sowie alle ihre Komponenten. Daher handelt es sich um ein Objekt mit einer komplexeren Struktur, aus dem sich jedoch leicht beliebige Datums- und Zeitkomponenten abrufen lassen Tatsächlich POSIXlt es Liste.

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

Konvertieren von numerischen und Textdaten in Formate POSIX* durch Funktionen ausgeführt as.POSIXct() и as.POSIXlt(). Diese Funktionen verfügen über einen kleinen Satz von Argumenten.

  • x – Zahl, Zeichenfolge oder Klassenobjekt Datum, das konvertiert werden muss;
  • tz – Zeitzone, Standard „GMT“;
  • format – Beschreibung des Datumsformats, in dem die an das x-Argument übergebenen Daten dargestellt werden;
  • origin – Wird nur bei der Konvertierung einer Zahl in POSIX verwendet; Sie müssen in diesem Argument ein Datumsobjekt und eine Uhrzeit übergeben, ab der die Sekunden gezählt werden. Wird normalerweise für die Übersetzung von UNIXTIME verwendet.

Wenn Ihre Datums- und Uhrzeitinformationen vorhanden sind UNIXTIMEUm sie dann in ein klares, lesbares Datum umzuwandeln, verwenden Sie das folgende Beispiel:

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

Im Ursprung können Sie einen beliebigen Zeitstempel angeben. Wenn Ihre Daten beispielsweise Datum und Uhrzeit als Anzahl der Sekunden seit dem 15. September 2019, 12:15 Uhr, enthalten, verwenden Sie zum Konvertieren in ein Datum Folgendes:

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

Arbeiten mit Daten mithilfe des Lubridate-Pakets

lubridate Das vielleicht beliebteste Paket für die Arbeit mit Datumsangaben in der Sprache R. Es stellt Ihnen drei zusätzliche Klassen zur Verfügung.

  • Dauern – Dauer, d. h. Anzahl der Sekunden zwischen zwei Zeitstempeln;
  • Perioden – Mit Perioden können Sie Berechnungen zwischen Datumsangaben in für Menschen lesbaren Intervallen durchführen: Tage, Monate, Wochen usw.;
  • Intervalle – Objekte, die den Start- und Endzeitpunkt angeben.

Die Installation zusätzlicher Pakete in der R-Sprache erfolgt über die Standardfunktion install.packages().

Installieren des Pakets lubridate:

install.packages("lubridate")

Konvertieren Sie Text mit Lubridate in das aktuelle Datum

Paketfunktionen lubridate Vereinfachen Sie die Umwandlung von Text in ein Datum erheblich und ermöglichen Sie außerdem die Durchführung beliebiger arithmetischer Operationen mit Datum und Uhrzeit.

Die Funktionen helfen Ihnen dabei, das aktuelle Datum bzw. Datum und Uhrzeit abzurufen today() и now().

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

Um eine Zeichenfolge in ein Datum umzuwandeln lubridate Es gibt eine ganze Familie von Funktionen, deren Namen immer aus drei Buchstaben bestehen und die Reihenfolge der Datumsbestandteile angeben:

  • y - Jahr
  • m - Monat
  • d - Tag

Liste der Funktionen zum Konvertieren von Text in Datum mithilfe von lubridate

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

Einige Beispiele für die Konvertierung von Zeichenfolgen in Datumsangaben:

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

Wie Sie sehen können lubridate Es erkennt Datumsbeschreibungen viel effizienter als Text und ermöglicht Ihnen die Konvertierung von Text in Datumsangaben, ohne zusätzliche Operatoren zur Beschreibung des Formats zu verwenden.

Extrahieren von Datumskomponenten mithilfe des Lubridate-Pakets

Wird auch verwendet lubridate Sie können jede Komponente aus einem Datum erhalten:

dt <- ymd("2017 jan 21")

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

Arithmetische Operationen mit Datumsangaben

Aber die wichtigste und grundlegendste Funktionalität lubridate ist die Fähigkeit, verschiedene arithmetische Operationen mit Datumsangaben durchzuführen.

Die Datumsrundung wird durch drei Funktionen durchgeführt:

  • floor_date – Runden auf die nächste Vergangenheitsform
  • ceiling_date – Runden auf die nahe Zukunftsform
  • round_date - Aufrunden auf die nächste Zeit

Jede dieser Funktionen hat ein Argument EinheitDamit können Sie die Rundungseinheit angeben: Sekunde, Minute, Stunde, Tag, Woche, Monat, Zweimonat, Quartal, Saison, Halbjahr, Jahr

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

Lassen Sie uns also herausfinden, wie Sie ein Datum erhalten, das 8 Tage nach dem aktuellen Datum liegt, und verschiedene andere arithmetische Berechnungen zwischen den beiden Daten durchführen.

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

Vereinfachte Arbeit mit Zeiträumen, timeperiodsR-Paket.

timeperiodsR – ein neues Paket für die Arbeit mit Daten, das im September 2019 auf CRAN veröffentlicht wurde.

Installieren des Pakets timeperiodsR:

install.packages("timeperiodsR")

Der Hauptzweck besteht darin, schnell ein bestimmtes Zeitintervall relativ zu einem bestimmten Datum zu bestimmen. Mit seinen Funktionen können Sie beispielsweise ganz einfach:

  • Holen Sie sich die letzte Woche, den letzten Monat, das letzte Quartal oder das letzte Jahr in R.
  • Rufen Sie eine bestimmte Anzahl von Zeitintervallen relativ zu einem Datum ab, beispielsweise die letzten 4 Wochen.
  • Aus dem resultierenden Zeitintervall lassen sich seine Komponenten leicht extrahieren: das Start- und Enddatum, die Anzahl der im Intervall enthaltenen Tage und die gesamte darin enthaltene Datumsfolge.

Name aller Paketfunktionen timeperiodsR sind intuitiv und bestehen aus zwei Teilen: Richtung_Abstand, wo:

  • Richtung in dem Sie sich relativ zu einem bestimmten Datum bewegen müssen: last_n, previous, this, next, next_n.
  • vorübergehend Abstand um den Zeitraum zu berechnen: Tag, Woche, Monat, Quartal, Jahr.

Vollständiger Funktionsumfang:

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

Zeitintervalle in ZeitperiodenR

Diese Funktionen sind in Fällen nützlich, in denen Sie Berichte basierend auf Daten der letzten Woche oder des letzten Monats erstellen müssen. Um den letzten Monat zu erhalten, verwenden Sie die gleichnamige Funktion previous_month():

prmonth <- previous_month()

Danach haben Sie ein Objekt Monat Klasse tpr, aus dem sich leicht folgende Komponenten gewinnen lassen:

  • das Startdatum der Periode, in unserem Beispiel ist dies der letzte Monat
  • Enddatum des Zeitraums
  • Anzahl der im Zeitraum enthaltenen Tage
  • Reihenfolge der im Zeitraum enthaltenen Daten

Darüber hinaus können Sie jede der Komponenten auf unterschiedliche Weise erhalten:

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

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

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

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

Sie können jede der Komponenten auch mithilfe des Arguments abrufen Teil, die in jeder der Paketfunktionen vorhanden ist. Mögliche Werte: Start, Ende, Sequenz, Länge.

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

Schauen wir uns also alle in den Paketfunktionen verfügbaren Argumente an timeperiodsR:

  • x — Das Referenzdatum, ab dem der Zeitraum berechnet wird, standardmäßig das aktuelle Datum;
  • n — Die Anzahl der Intervalle, die in den Zeitraum einbezogen werden, zum Beispiel die letzten drei Wochen;
  • part — Welche Komponente des Objekts tpr Sie müssen standardmäßig erhalten all;
  • week_start — Das Argument ist nur in Funktionen für die Arbeit mit Wochen vorhanden und ermöglicht es Ihnen, die Nummer des Wochentags festzulegen, der als Wochenbeginn betrachtet wird. Standardmäßig ist der Wochenbeginn Montag, Sie können jedoch einen beliebigen Zeitpunkt festlegen 1 – Montag bis 7 – Sonntag.

Somit können Sie jeden beliebigen Zeitraum relativ zum aktuellen oder einem anderen gegebenen Datum berechnen; hier noch ein paar Beispiele:

# получить 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. Oktober ist Sonntag:
Arbeiten mit Datumsangaben in R (Grundfunktionen sowie die Pakete lubridate und timeperiodsR)

Wir brauchen einen Zeitraum, der im Vergleich zum 6. Oktober die letzten drei Wochen umfasst. Ohne die Woche, die den 3. Oktober selbst einschließt. Dementsprechend handelt es sich um den Zeitraum vom 6. September bis 9. September.

Arbeiten mit Datumsangaben in R (Grundfunktionen sowie die Pakete lubridate und 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

In diesem Beispiel interessiert uns der Monat, der 4 Monate zurückliegt. Wenn wir vom 16. September 2019 ausgehen, dann war es Mai 2019.

Filtern eines Datumsvektors mithilfe von timeperiodsR

Zum Filtern von Daten timeperiodsR Es gibt mehrere Betreiber:

  • %left_out% – vergleicht zwei TPR-Klassenobjekte und gibt den Wert des linken zurück, der im rechten fehlt.
  • %left_in% – vergleicht zwei Objekte der tpr-Klasse und gibt die Daten des linken Objekts zurück, die im rechten Objekt enthalten sind.
  • %right_out% – vergleicht zwei TPR-Klassenobjekte und gibt den Wert des rechten zurück, der im linken fehlt.
  • %right_in% – vergleicht zwei Objekte der tpr-Klasse und gibt Daten vom rechten Objekt zurück, die im linken Objekt vorhanden sind.

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

Am Paket timeperiodsR es gibt eine offizielle, russischsprachige YouTube-Playlist.

Abschluss

Wir haben die Objektklassen, die in der R-Sprache für die Arbeit mit Datumsangaben konzipiert sind, im Detail untersucht. Außerdem können Sie jetzt arithmetische Operationen an Datumsangaben durchführen und mithilfe des Pakets schnell beliebige Zeiträume ermitteln timeperiodsR.

Wenn Sie sich für die R-Sprache interessieren, lade ich Sie ein, meinen Telegram-Kanal zu abonnieren R4marketing, in dem ich täglich nützliche Materialien über die Verwendung der R-Sprache bei der Lösung Ihrer täglichen Probleme teile.

Source: habr.com

Kommentar hinzufügen