JSON-файл с разными длинами массивов в Python - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу изучить данные о населении, свободно доступные онлайн в https://www.nomisweb.co.uk/api/v01/dataset/NM_31_1.jsonstat.json.Он содержит подробную информацию о населении Великобритании с 1981 по 2017 год. Код, который я использовал до сих пор, ниже

import requests
import json
import pandas
json_url = 'https://www.nomisweb.co.uk/api/v01/dataset/NM_31_1.jsonstat.json'

# download the data
j = requests.get(url=json_url) 

# load the json
content = json.loads(j.content)

list(content.keys())

Последняя строка кода выше дает мне следующий вывод:

 ['version',
'class',
'label',
'source',
'updated',
'value',
'id',
'size',
'role',
'dimension',
'extension']

Iзатем попытался взглянуть на длины 'Value', 'size' и 'role'

 print (len(content['value']))
 print (len(content['size']))
 print (len(content['role']))

И я получил следующие результаты:

22200
5
3

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

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

Исследовательский анализ данных, чтобы показать, как население прогрессировало по регионам и возрастным группам

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Сначала вы должны прочитать содержимое файла Json, кроме value, потому что другие поля объясняют, что такое поле value.И это (уплощенная ...) многомерная матрица с размерами content['size'], то есть 37x4x3x25x2, а описание каждого измерения дано в content['dimension'].Первое измерение - время с 37 годами с 1981 по 2017 год, затем география с Уэльсом, Шотландией, Северной Ирландией и Англией_ и_Уэльсом.Затем идут секс с мужчинами, женщинами и Total, затем возраст с 25 классами.В самом конце вы найдете меры, где первое - это общее количество людей, а второе - его процентное число.

Короче говоря, только content['value'] будет использоваться для подачи данных, носначала вам нужно понять, как.

Но из-за 5 измерений, вероятно, лучше сначала использовать пустую матрицу ...

0 голосов
/ 21 апреля 2019

Это формат JSON-stat.См. https://json -stat.org .Вы можете использовать библиотеки Python pyjstat или json.stat.py для передачи данных в фрейм данных Pandas.

Вы можете исследовать этот набор данных с помощью JSON-stat explorer

0 голосов
/ 27 февраля 2019

Данные представляют собой сложный файл JSON, и, как вы правильно сказали, столбцы фрейма данных должны быть одинаковой длины.Под этим вы подразумеваете, что вам необходимо понять, как записи хранятся в вашем наборе данных.

Я бы посоветовал вам использовать JSON Viewer / Prettifier, чтобы сначала изучить файл и понять,его структура.

Только тогда вы сможете понять, какие данные вам нужно загрузить в DataFrame.Например, очевидно, что нет необходимости загружать значения 'version' и 'class' в DataFrame, поскольку они не являются частью какой-либо записи, но представляют собой метаданные о самом наборе данных.

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