0

我想探索在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']

然后我试着看看“价值”、“大小”和“角色”的长度

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

我得到的结果如下:

22200
5
3

正如我们可以看到的长度非常不同。我无法将其转换为数据框,因为它们的长度都不同。如何将其更改为有意义的格式以便我可以开始探索它?我需要做如下分析:

1.表格显示男性、女性和总人口的列,每个英国地区的行,以及英国总人口,最近一年

  1. 探索性数据分析显示人口如何按地区和年龄组发展
4

3 回答 3

2

您应该首先阅读 Json 文件的内容 except value,因为其他字段解释了该value字段是什么。它是一个(扁平化...)多维矩阵,维度content['size']为 ,即 37x4x3x25x2,每个维度的描述在 中给出content['dimension']。第一个维度是从 1981 年到 2017 年的 37 年时间,然后是威尔士、苏格兰、北爱尔兰和英格兰和威尔士的地理。接下来是男性、女性和总性别,其次是 25 班的年龄。最后,您会发现第一个是总人数,第二个是百分比的度量。

长话短说,仅content['value']用于提供数据框,但您首先需要了解如何。

但由于有 5 个维度,最好先使用一个 numpy 矩阵...

于 2019-02-27T14:46:31.440 回答
0

数据是一个复杂的 JSON 文件,正如您所说的正确,您需要数据框列的长度相等。您的意思是,您需要了解记录是如何存储在数据集中的。

我建议您使用一些 JSON Viewer/Prettifier 来首先研究文件并了解其结构。

只有这样,您才能了解需要将哪些数据加载到 DataFrame。例如,显然,没有必要将“版本”和“类别”值加载到 DataFrame 中,因为它们不是任何记录的一部分,而是有关数据集本身的元数据。

于 2019-02-27T11:45:29.240 回答
0

这是 JSON 统计格式。请参阅https://json-stat.org。您可以使用 python 库pyjstatjson.stat.py将数据获取到 pandas 数据框。

您可以使用JSON-stat explorer探索这个数据集

于 2019-04-21T20:04:22.140 回答