Разбор JSON и создание фрейма данных в анализируемом формате в R - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь проанализировать данные дедупликации, которые хранятся в формате Json в базе данных.Я использую приведенный ниже запрос для получения необходимых данных из базы данных и создал фрейм данных, который выглядит следующим образом.

Запрос:

SELECT ID,Result,Remark,Json,Date 
FROM Table1 
WHERE DATE(Date)>='2019-01-01'
AND DATE(Date)<='2019-05-31';

Фрейм данных:

ID       Result       Remark       Json        Date
XTR-1     Pass         Matched      {Json}      2019-01-01 18:25:12
XTR-4     Failed       No Match     {Json}      2019-01-01 13:20:23
XTR-7     InProgress   Matched      {Json}      2019-02-01 15:23:10

Пример файла JSON

{
  "title": [
    {
      "category": "Category A",
      "uniqueId": "XRT-1",
      "status": [
        {
          "field": "E1",
          "value": "xdrts",
          "matchingApp": [
            {
              "appId": "XRT-2",
              "field": "E1",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category A",
              "Name": "AFFH",
              "targetField": "l.ce",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E1",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category B",
              "Name": "AFFH",
              "targetField": "u.vE1",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E1",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category C",
              "Name": "AFFH",
              "targetField": "Category Cs.E1",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            }
          ]
        },
        {
          "field": "E2",
          "matchingApp": []
        },
        {
          "field": "E3",
          "value": "9191919191",
          "matchingApp": [
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category A",
              "Name": "AFFH",
              "targetField": "l.cE2yM",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category C",
              "Name": "AFFH",
              "targetField": "C C.m",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Marc D",
              "Name": "AFFH",
              "targetField": "cb.E3s",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            }
          ]
        }
      ]
    },
    {
      "category": "Category B",
      "uniqueId": "b6ae",
      "status": [
        {
          "field": "E1",
          "value": "xdrts",
          "matchingApp": [
            {
              "appId": "XRT-2",
              "field": "E1",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category B",
              "Name": "AFFH",
              "targetField": "u.vE1",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E1",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category A",
              "Name": "AFFH",
              "targetField": "l.ce",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E1",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category C",
              "Name": "AFFH",
              "targetField": "Category Cs.E1",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            }
          ]
        },
        {
          "field": "E3",
          "value": "9191919191",
          "matchingApp": [
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category B",
              "Name": "AFFH",
              "targetField": "u.uE3",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            }
          ]
        }
      ]
    },
    {
      "category": "Ref",
      "uniqueId": "b18b",
      "status": [
        {
          "field": "E3",
          "value": "7800252426",
          "matchingApp": []
        },
        {
          "field": "E1",
          "matchingApp": []
        }
      ]
    },
    {
      "category": "Ref",
      "uniqueId": "8698",
      "status": [
        {
          "field": "E3",
          "value": "1282",
          "matchingApp": []
        },
        {
          "field": "E1",
          "matchingApp": []
        }
      ]
    },
    {
      "category": "BeDet",
      "uniqueId": "707126",
      "status": [
        {
          "field": "E4",
          "value": "4519",
          "matchingApp": [
            {
              "appId": "XRT-2",
              "field": "E4",
              "flag": false,
              "Id": "765djhf45",
              "category": "E4s",
              "Name": "AFFH",
              "targetField": "xcdetails.accNumber",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            }
          ]
        }
      ]
    },
    {
      "category": "Marc D",
      "uniqueId": "88d6",
      "status": [
        {
          "field": "E3",
          "value": "0552,9415,9125",
          "matchingApp": [
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category A",
              "Name": "AFFH",
              "targetField": "l.cE2yM",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category C",
              "Name": "AFFH",
              "targetField": "C C.m",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Marc D",
              "Name": "AFFH",
              "targetField": "cb.E3s",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Marc D",
              "Name": "AFFH",
              "targetField": "cb.E3s",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            }
          ]
        },
        {
          "field": "E2",
          "value": "AY2218Z",
          "matchingApp": []
        },
        {
          "field": "E1",
          "matchingApp": []
        }
      ]
    },
    {
      "category": "Category C",
      "uniqueId": "88d6",
      "status": [
        {
          "field": "E1",
          "value": "xdrts",
          "matchingApp": [
            {
              "appId": "XRT-2",
              "field": "E1",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category A",
              "Name": "AFFH",
              "targetField": "l.ce",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E1",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category B",
              "Name": "AFFH",
              "targetField": "u.vE1",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E1",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category C",
              "Name": "AFFH",
              "targetField": "Category Cs.E1",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            }
          ]
        },
        {
          "field": "E2",
          "value": "AY2218Z",
          "matchingApp": [
            {
              "appId": "XRT-2",
              "field": "E2",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category C",
              "Name": "AFFH",
              "targetField": "Category Cs.E2Hash",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E2",
              "flag": false,
              "Id": "765djhf45",
              "category": "Marc D",
              "Name": "AFFH",
              "targetField": "cd.jsE2H",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            }
          ]
        },
        {
          "field": "E3",
          "value": "9191919191",
          "matchingApp": [
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category A",
              "Name": "AFFH",
              "targetField": "l.cE2yM",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Category C",
              "Name": "AFFH",
              "targetField": "C C.m",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            },
            {
              "appId": "XRT-2",
              "field": "E3",
              "flag": false,
              "Id": "765djhf45",
              "category": "Marc D",
              "Name": "AFFH",
              "targetField": "cb.E3s",
              "lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
              "as": "A R",
              "AART": "B C"
            }
          ]
        }
      ]
    }
  ],
  "restrictedIdentities": []
}

Структура файла Json содержит нижеуказанные параметры.

Поле Category в json содержит следующую категорию:

Category          field

Category A        E1,E2,E3
Category B        E1,E2,E3
Category C        E1,E2,E3
Marc D            E1,E2,E3
ref               E1,E2,E3
BeDet             E4

Каждый Category содержит три field, за исключением категории BeDet, которая содержит только один field E4.Теперь я хочу извлечь информацию из JSON по месяцам, а также по датам, исходя из того, сколько для каждого поля найдено совпадений для каждого поля в другой категории.

Мой ожидаемый результат выглядит примерно так:

Jan-19                   E1                          E2                          E3                E4            Result
         T1     T2   C1   C2  C3  C4  C5     C1   C2  C3  C4  C5     C1   C2  C3  C4  C5           C6    Pass    Failed  InProgress   Total
Matched  1      1    1    1   0   0    0     0    1   1   1   0      0    0   0   0   0             1      1       0        0         1
No Match 0      0   0    0   0   0    0     0    0   0   0    0     0    0    0   0   0             0      0       0        0         1
Pending

Где,

  1. T1: общее количество отдельных ID в конкретном месяце (то есть 2 в месяце с 19 января)
  2. T2: Общее количество различных ID совпадений с различными ID в JSON (т. Е. В образце json XTR-1 совпадение только с XTR-2, существуют сценарии, в которых один отличный ID может быть сопоставлен с n числом ID s)
  3. E1 до E4: Это просто сокращение поля, предположим, что значение E1 совпадает со значением Category A, после чего счетчик появится в столбце C1.Аналогичный процесс продолжается для разных field и Category.
  4. Matched / No Match: совокупное количество совпадений и совпадений ID по столбцу данных группы Remark по месяцам
  5. Pass / Failed / InProgress: совокупный счет той же группы по месяцам в выходном фрейме данных
  6. Total: всего группы ID по Remark.

Для сценариев, в которых нет совпадения для какого-либо конкретного поля, тогда переменная matchingApp в JSON будет []

Примечание: E1 - E4 являются правильным текстом в оригинальном JSON, я обозначил здесь знаком для простоты.И счет должен быть синхронизирован с группой по месяцу, результату и примечанию

Для другого Month (т.е. Feb-19) та же таблица добавляется под таблицей Jan-19 в том же порядке и

. Result и Remarks являются статическими значениями и больше, чем я упомянул в вопросе. Это должно быть жестко закодировано в коде

...