python - 如何通过使用带有 r 或 python 的 json 将 HTML 转换为数据框?
问题描述
我正在创建一个map
,它的数据似乎html
在这个网络链接上可用:https ://jsfiddle.net/BlackLabel/jaL7q5x3/2/
(我不是真正的程序员,所以不确定那是html 还是 java 或 json但它说html所以把它当作html但它看起来java/json对我来说)
因为我无法将其直接用于r libraryhighcharts
hcmap()
中的函数。因此,我尝试将其复制并粘贴到文件中,并尝试将其作为对象读取,以便将其转换为对象,但失败了。html
.txt
python
json
dataframe
with open('E:/3. R/Covid19/path.txt') as f:
json_data = json.load(f)
JSONDecodeError:预期值:第 48 行第 23 列(字符 56995)
有没有办法可以读取并将其转换为可以进一步用于创建的数据框map
?
我对r & python解决方案都持开放态度,可以将其转换为可以转换为 dataframe的对象。
网站上的一小部分代码:
Highcharts.maps["countries/in/custom/in-all-disputed"] = {"title":"有争议领土的印度","version":"1.1.3","type":"FeatureCollection"," copyright":"Copyright (c) 2020 Highsoft AS, 基于 http://projects.datameet.org/maps/states/","copyrightShort":"projects.datameet.org","copyrightUrl":"https:// /creativecommons.org/licenses/by/2.5/in/","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG:32644" }},"hc-transform":{"default":{"crs":"+proj=utm +zone=44 +datum=WGS84 +units=m +no_defs","scale":0.00020862025385,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-814534.248882,"yoffset ":4122045.33412}},"features":[{"type":"Feature","id":"Madhya Pradesh","properties":{"hc-group":"admin1","hc-key": “中央邦”,“hc-a2”:“MP”,“名称”:“中央邦”,“hc-middle-x”:0.5,“hc-middle-y”:0.5},“几何”:{ "type":"MultiPolygon","coordinates":[[[[977,4582],[974,4582],[971,4589],[976,4590],[977,4582]]],[[[ 3557,4938],[3575,4908],[3575,4899],[3575,4899],[3575,4898],[3576,4897],[3578,4895],[3579,4896],[3580, 4897],[3580,4898],[3583,4896],[3584,4895],[3646,4865],[3624,4785],[3565,4775],[3566,4732],[3509,4702],[3515,4664],[3509,4657] ,[3467,4607],[3411,4565],[3386,4547],[3361,4576],[3317,4562]
我与此相关的原始 SO 帖子仍未得到答复:
解决方案
您要提取的数据是 JSON 数据。然而,它不是完全有效的 JSON。你得稍微清理一下。您可以使用jsonlint.com等网站来验证 JSON 数据。
JSON数据的问题是(1)一开始,您需要删除“Highcharts.maps[“countries/in/custom/in-all-disputed”] = 直到第一个花括号的部分{
;(2) 三行有一个“注释”,两个斜杠后跟四个数字,例如“// 0000”。这些需要在摄取 JSON 数据之前删除(我看到两次“// 8440”和一次“// 1227”)。
完成此操作后,您可以从包中的 txt 文件中提取R
数据jsonlite
。
library(jsonlite)
library(tibble)
a <- fromJSON("path.txt")
as_tibble(a$features)
#> # A tibble: 37 x 4
#> type id properties$`hc-g… $`hc-key` $`hc-a2` $name $`hc-middle-x`
#> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
#> 1 Featu… Madhya … admin1 madhya pra… MP Madhya… 0.5
#> 2 Featu… Uttar P… admin1 uttar prad… UP Uttar … 0.5
#> 3 Featu… Karnata… admin1 karnataka KA Karnat… 0.35
#> 4 Featu… Nagaland admin1 nagaland NA Nagala… 0.5
#> 5 Featu… Bihar admin1 bihar BI Bihar 0.5
#> 6 Featu… Lakshad… admin1 lakshadweep LA Laksha… 0.5
#> 7 Featu… Andaman… admin1 andaman an… AA Andama… 0.5
#> 8 Featu… Assam admin1 assam AS Assam 0.5
#> 9 Featu… West Be… admin1 west bengal WB West B… 0.6
#> 10 Featu… Puduche… admin1 puducherry PY Puduch… 0.62
#> # … with 27 more rows, and 1 more variable: geometry <df[,2]>
推荐阅读
- ruby-on-rails - Base64 编码参数的 Rails 路由约束
- python-3.x - 如何摆脱输出中的引号和括号?
- google-chrome-extension - Chrome 扩展未安装:CRX_HEADER_INVALID
- sql - 插入或更新期间列上的 Postgres 和数学
- html - 我必须使用 ActiveXObject 在 html 中打开 powerpoint 演示文稿吗
- python - 训练模型后从 Keras/Tensorflow 获取预测
- xaml - 列表视图中项目的最大高度?
- php - 客户端错误:`GET https://api.powerbi.com/v1.0/myorg/datasets` 导致 `401 Unauthorized` 响应 Power BI REST api
- python - 我有一些文件格式的数据。我想知道每行的第一个字符串是什么,并计算它们重复了多少次
- python - Python 2.7 fnmatch 不编辑文本