【问题标题】:How to convert HTML into dataframe by using json with either r or python?如何通过使用带有 r 或 python 的 json 将 HTML 转换为数据框?
【发布时间】:2021-08-16 21:34:03
【问题描述】:

我正在创建一个map,它的数据似乎在此网络链接上的html 中可用:https://jsfiddle.net/BlackLabel/jaL7q5x3/2/

(我不是真正的程序员,所以不确定那是 html 还是 java 或 json,但它说 html 所以把它当作 html但在我看来它是 java/json

因为我无法将它直接用于 r 库中的 highcharts 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)

有没有办法我可以读取并将其转换为 dataframe,我可以进一步使用它来创建map

我对 r 和 python 两种解决方案都持开放态度,将其转换为可以转换为数据帧的对象。

网站上的一小部分代码:

Highcharts.maps["countries/in/custom/in-all-disputed"] = {"title":"印度有争议 领土","版本":"1.1.3","类型":"FeatureCollection","版权":"版权 (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":"madhya pradesh","hc-a2":"MP","name":"Madhya Pradesh","hc-middle-x":0.5,"hc-middle-y":0.5},"geometry":{"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 帖子仍未得到答复:

How to get r highchart map data from website instead of hcmap()?

How to get right Map for India in highcharts?

【问题讨论】:

    标签: python html r json


    【解决方案1】:

    您要提取的数据是 JSON 数据。然而,它不是完全有效的 JSON。你得稍微清理一下。您可以使用jsonlint.com 等网站来验证 JSON 数据。

    JSON 数据的问题是 (1) 在开头,您需要删除“Highcharts.maps["countries/in/custom/in-all-disputed"] =" 直到第一个花括号{; (2) 三行有一个“注释”,两个斜杠后跟四个数字,例如“// 0000”。这些需要在摄取 JSON 数据之前删除(我看到两次“// 8440”和一次“// 1227”)。

    完成此操作后,您可以使用jsonlite 包从R 中的txt 文件中提取数据。

    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]>
    

    【讨论】:

    • 感谢@Till 在尝试了Rjson 之后,我在python 中度过了愉快的时光来转换它。我很高兴这可以在r 本身中使用。非常感谢,非常感谢您的帮助和努力:))
    猜你喜欢
    • 2020-12-17
    • 2021-12-04
    • 2021-12-25
    • 2022-10-04
    • 1970-01-01
    • 2019-07-27
    • 2014-10-22
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多