SDMX- Json Синтаксический анализ - нет проблем с периодом времени_периода - набор данных ОЭСР python извлечение - PullRequest
1 голос
/ 21 марта 2020

Я использую библиотеку python pandaSDMX для извлечения целых наборов данных из базы данных OECD и преобразования их в формат CSV (любой читаемый формат будет в порядке, потому что я хочу поместить окончательный вывод в SQL database).

Чтобы получить доступ к набору данных OECD в формате SDMX- Json (также есть формат SDM XML), вы можете вставить в браузер ссылку, подобную этой:

http://stats.oecd.org/sdmx-json/data/PART2/all/all

Примечание: «PART2» - это имя набора данных

Проблема есть некоторые наборы данных OECD, для которых SDMX- Json не имеет измерение с именем Time_Period и ВСЕ sdmx- json синтаксический анализ python библиотек, которые я ' мы нашли только синтаксический анализ SDMX- Json, который имеет это измерение .

Я также пытался найти библиотеку python, которая могла бы анализировать SDM XML (SDMX-ML ) файла (это также было бы хорошо), но создание этого процесса в python не работает для меня ...

Вот фрагмент кода, который я использую проанализировать наборы данных SDMX- Json и записать выходной файл CSV в Azure хранилище BLOB-объектов:

# itera sob cada ficheiro json e converte o conteudo para csv
    for dataset in datasetList:
        cursor = cnxn.cursor()

        Values = [dataset, datasetFiltersList[counter]]
        cursor.execute(SQLLogCommand, Values)
        cnxn.commit()

        #logging.info('Analysing dataset: ' + dataset)
        try:
            data_response = oecd.data(resource_id=dataset, key=datasetFiltersList[counter])
        except UnicodeDecodeError:
            Values = [datetime.today().strftime('%Y-%m-%d-%H:%M:%S'), 'Unicode Decode Error - Error', 0]
            cursor.execute(SQLUpdateCommand, Values)
            cnxn.commit()
        except KeyError:
            Values = [datetime.today().strftime('%Y-%m-%d-%H:%M:%S'), 'Key Error - Error', 0]
            cursor.execute(SQLUpdateCommand, Values)
            cnxn.commit()
        else:
            data = data_response.data
            if data.dim_at_obs == 'TIME_PERIOD':
                df = createDF(data, useIDs=False)
                blobService.create_blob_from_text(CONTAINERNAME, csvBlobPath + dataset + '.csv' , df.to_csv(index=False, sep='|', encoding='utf-8'))

                Values = [datetime.today().strftime('%Y-%m-%d-%H:%M:%S'), 'Success', 1]
                cursor.execute(SQLUpdateCommand, Values)
            cnxn.commit()  
            #logging.info('Dataset ' + dataset + ' analysed!')
        else:
            print('no time period error on dataset: ' + dataset)
            Values = [datetime.today().strftime('%Y-%m-%d-%H:%M:%S'), 'No Time Period - Error', 0]
            cursor.execute(SQLUpdateCommand, Values)
            cnxn.commit()  

cnxn.close()

Итак, мой последний вопрос :

Кто-нибудь знает способ анализа файлов SDMX- Json, которые не имеют размерности Time_Period ? Или другой способ автоматического извлечения всего набора данных из ОЭСР и его синтаксического анализа ...

Как пример:

  1. Набор данных с периодом времени (этот вариант отлично работает для меня) : http://stats.oecd.org/sdmx-json/data/TALIS_EDUGPS/all/all
  2. Набор данных без периода времени: http://stats.oecd.org/sdmx-json/data/PART2/all/all
...