Python - Обработка данных и анализ с помощью функционального программирования - PullRequest
0 голосов
/ 29 мая 2020

Это прямой вопрос, как использовать python для обработки файла журнала (пока рассматривайте его как строку json). Ниже приведены данные json:

{
   "voltas": {
      "ac": [
         {
            "timestamp":1590761564,
            "is_connected":true,
            "reconnection_status":"N/A"
         },
         {
            "timestamp":1590761566,
            "is_connected":true,
            "reconnection_status":"N/A"
         },
         {
            "timestamp":1590761568,
            "is_connected":false,
            "reconnection_status":"true"
         },
         {
            "timestamp":1590761570,
            "is_connected":true,
            "reconnection_status":"N/A"
         },
         {
            "timestamp":1590761572,
            "is_connected":true,
            "reconnection_status":"N/A"
         },
         {
            "timestamp":1590761574,
            "is_connected":false,
            "reconnection_status":"false"
         },
         {
            "timestamp":1590761576,
            "is_connected":false,
            "reconnection_status":"true"
         }
      ]
   }
}

Поскольку вопрос касается только обработки данных json, я пропускаю обсуждение данных в json. Теперь мне нужны проанализированные данные, как показано ниже.

{ 
    "voltas" : [
        "ac": {
            "number_of_actual_connection_drops": 3,
            "time_interval_between_droppings": [4, 8],
            "number_of_successful_reconnections": 2,
            "number_of_failure_reconnections": 1
        }
    ]
}

Вот как анализируются данные:

"number_of_actual_connection_drops": Количество "is_connected" == false.

"time_interval_between_droppings": Это список, который будет заполняться с конца (добавляться с начала). Нам нужно выбрать метку времени элемента, который будет иметь «is_connected»: false и «reconnection_status»: «true». В этом случае последний (7-й элемент) блок с отметкой времени = 1590761576 . Теперь нам нужно найти метку времени предыдущего блока с «is_connected»: false и «reconnection_status»: «true». В данном случае это 3-й элемент с отметкой времени 1590761568 . Теперь последний элемент в списке - это разность этих временных меток 8. Теперь список [8].

Теперь временная метка 1590761568 , и у нас нет предыдущего блока с is_connected: false и reconnection_status: true, поэтому мы возьмем временную метку первого элемента, которая равна 1590761564 , а теперь разница равна 4. Итак, список равен [4, 8]

"number_of_successful_reconnections ": Количество« reconnected_status »= true

« number_of_failure_connections »: Количество« reconnected_status »= false

Мы можем достичь этого с помощью циклов for и некоторых если условия. Мне интересно сделать это, используя способы функционального программирования (сокращение, отображение, фильтр) в python.

Для упрощения я упомянул только «a c». Подобных предметов будет много. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...