Как нарисовать линейный график временного ряда, используя pyspark - PullRequest
0 голосов
/ 18 апреля 2020

У меня большой набор данных с двумя столбцами, и я использую модуль spark с модулем pyspark для анализа набора данных. Я пытаюсь нарисовать линейный график, используя столбец «date» и «count». Но столбец даты включал данные за 4 года, но они не в порядке (в зависимости от дня), даты смешаны. Итак, во-первых, я хочу перестроить даты, от прошлого к настоящему. и этот столбец даты, тип данных является строкой. Могу ли я знать, чтобы нарисовать эту линейную диаграмму временного ряда, этот столбец даты должен быть преобразован в «тип даты», если это - то, как я изменяю значения даты этого типа строки в значения типов даты?

enter image description here

enter image description here

enter image description here

1 Ответ

1 голос
/ 18 апреля 2020

Используя Spark 2.4.3, вы можете конвертировать ваши строковые даты следующим образом:

import pyspark.sql.functions as sf

df = sparksession.createDataFrame(
    [("8 October 2018", 4407), ("17 September 2017", 13326)],
    ["date", "count"],
)
df.show()

df.select(
    sf.to_date("date", "d MMMMM yyyy").alias("new_date"), "date", "count"
).orderBy("new_date").show()

И вот результаты:

+-----------------+-----+
|             date|count|
+-----------------+-----+
|   8 October 2018| 4407|
|17 September 2017|13326|
+-----------------+-----+

+----------+-----------------+-----+
|  new_date|             date|count|
+----------+-----------------+-----+
|2017-09-17|17 September 2017|13326|
|2018-10-08|   8 October 2018| 4407|
+----------+-----------------+-----+

PS .: Для Spark 3.0.0 , формат строки изменился. Для преобразования даты следует использовать строку "d MMMM yyyy" (на один меньше M), как это задокументировано здесь .

Диаграмма

Чтобы нарисовать линейную диаграмму, вы может использовать Pandas и matplotlib:

pdf = (
    df.select(
        sf.to_date("date", "d MMMMM yyyy").alias("new_date"),
        "date",
        "count",
    )
    .orderBy("new_date")
    .toPandas()
)

pdf.plot.line(x="new_date", y="count")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...