2014-11-06 114 views
0

我的用户配置文件中有JSON数据,我最终需要使用SPSS进行分析。 目前我在Google Refine中导入数据以运行一些数据清理。然而,我的问题是,原始的JSON由嵌套对象组成,即例如具有“公司”的“professional_experience”部分,其包括若干子对象/数组(参见示例)。 Google提炼通过创建具有该信息的附加行来处理此问题。然而,这与我需要用SPSS或Excel分析数据的“关系”(SQL方面)视图/表格结构没有任何一致性,因为还有其他的子对象(学校,奖项,等等),它们也被“愚蠢地”填充在高级别“主”记录下面的行中,但彼此之间没有直接(行/列方式)关系(考虑分析)。将关系格式的嵌套对象

正如我所看到的,我需要将这些(子对象)列和行提取到自己的表中,并创建一些n:m关系,或者至少将它归一化为一个表(然后接受冗余当然还有其他未知的属性)。

我想要结束的是一个统一分析/聚类在某些属性上的一致表。我认为地图缩小并不是真正的选择。

有没有人对如何处理这个问题有想法,或者有可能是一种更简单的方式直接处理JSON数据?

{ "users": [ 
{ 
    "id": "123456_abcdef", 
    "first_name": "Max", 
    "last_name": "Mustermann", 
    "display_name": "Max Mustermann", 
    "page_name": "Max_Mustermann", 
    "permalink": "https://www.xing.com/profile/Max_Mustermann", 
    "employment_status": "EMPLOYEE", 
    "gender": "m", 
    "birth_date": { 
    "day": 12, 
    "month": 8, 
    "year": 1963 
    }, 
    "active_email": "ma[email protected]", 
    "time_zone": { 
    "name": "Europe/Copenhagen", 
    "utc_offset": 2.0 
    }, 
    "premium_services": [ 
    "SEARCH", 
    "PRIVATEMESSAGES" 
    ], 
    "badges": [ 
    "PREMIUM", 
    "MODERATOR" 
    ], 
    "wants": "einen neuen Job", 
    "haves": "viele tolle Skills", 
    "interests": "Flitzebogen schießen and so on", 
    "organisation_member": "ACM, GI", 
    "languages": { 
    "de": "NATIVE", 
    "en": "FLUENT", 
    "fr": null, 
    "zh": "BASIC" 
    }, 
    "private_address": { 
    "city": "Hamburg", 
    "country": "DE", 
    "zip_code": "20357", 
    "street": "Privatstraße 1", 
    "phone": "49|40|1234560", 
    "fax": "||", 
    "province": "Hamburg", 
    "email": "[email protected]", 
    "mobile_phone": "49|0155|1234567" 
    }, 
    "business_address": { 
    "city": "Hamburg", 
    "country": "DE", 
    "zip_code": "20357", 
    "street": "Geschäftsstraße 1a", 
    "phone": "49|40|1234569", 
    "fax": "49|40|1234561", 
    "province": "Hamburg", 
    "email": "[email protected]", 
    "mobile_phone": "49|160|66666661" 
    }, 
    "web_profiles": { 
    "qype": [ 
     "http://qype.de/users/foo" 
    ], 
    "google+": [ 
     "http://plus.google.com/foo" 
    ], 
    "other": [ 
     "http://blog.example.org" 
    ], 
    "homepage": [ 
     "http://example.org", 
     "http://other-example.org" 
    ] 
    }, 
    "instant_messaging_accounts": { 
    "skype": "1122334455", 
    "googletalk": "max.mustermann" 
    }, 
    "professional_experience": { 
    "primary_company": { 
     "id": "1_abcdef", 
     "name": "XING AG", 
     "title": "Softwareentwickler", 
     "company_size": "201-500", 
     "tag": null, 
     "url": "http://www.xing.com", 
     "career_level": "PROFESSIONAL_EXPERIENCED", 
     "begin_date": "2010-01", 
     "description": null, 
     "end_date": null, 
     "industry": "AEROSPACE", 
     "form_of_employment": "FULL_TIME_EMPLOYEE", 
     "until_now": true 
    }, 
    "companies": [ 
     { 
     "id": "1_abcdef", 
     "name": "XING AG", 
     "title": "Softwareentwickler", 
     "company_size": "201-500", 
     "tag": null, 
     "url": "http://www.xing.com", 
     "career_level": "PROFESSIONAL_EXPERIENCED", 
     "begin_date": "2010-01", 
     "description": null, 
     "end_date": null, 
     "industry": "AEROSPACE", 
     "form_of_employment": "FULL_TIME_EMPLOYEE", 
     "until_now": true 
     }, 
     { 
     "id": "24_abcdef", 
     "name": "Ninja Ltd.", 
     "title": "DevOps", 
     "company_size": null, 
     "tag": "NINJA", 
     "url": "http://www.ninja-ltd.co.uk", 
     "career_level": null, 
     "begin_date": "2009-04", 
     "description": null, 
     "end_date": "2010-07", 
     "industry": "ALTERNATIVE_MEDICINE", 
     "form_of_employment": "OWNER", 
     "until_now": false 
     }, 
     { 
     "id": "45_abcdef", 
     "name": null, 
     "title": "Wiss. Mitarbeiter", 
     "company_size": null, 
     "tag": "OFFIS", 
     "url": "http://www.uni.de", 
     "career_level": null, 
     "begin_date": "2007", 
     "description": null, 
     "end_date": "2008", 
     "industry": "APPAREL_AND_FASHION", 
     "form_of_employment": "PART_TIME_EMPLOYEE", 
     "until_now": false 
     }, 
     { 
     "id": "176_abcdef", 
     "name": null, 
     "title": "TEST NINJA", 
     "company_size": "201-500", 
     "tag": "TESTCOMPANY", 
     "url": null, 
     "career_level": "ENTRY_LEVEL", 
     "begin_date": "1998-12", 
     "description": null, 
     "end_date": "1999-05", 
     "industry": "ARTS_AND_CRAFTS", 
     "form_of_employment": "INTERN", 
     "until_now": false 
     } 
    ], 
    "awards": [ 
     { 
     "name": "Awesome Dude Of The Year", 
     "date_awarded": 2007, 
     "url": null 
     } 
    ] 
    }, 
    "educational_background": { 
    "degree": "MSc CE/CS", 
    "primary_school": { 
     "id": "42_abcdef", 
     "name": "Carl-von-Ossietzky Universtät Schellenburg", 
     "degree": "MSc CE/CS", 
     "notes": null, 
     "subject": null, 
     "begin_date": "1998-08", 
     "end_date": "2005-02" 
    }, 
    "schools": [ 
     { 
     "id": "42_abcdef", 
     "name": "Carl-von-Ossietzky Universtät Schellenburg", 
     "degree": "MSc CE/CS", 
     "notes": null, 
     "subject": null, 
     "begin_date": "1998-08", 
     "end_date": "2005-02" 
     } 
    ], 
    "qualifications": [ 
     "TOEFLS", 
     "PADI AOWD" 
    ] 
    } 
} 

] }

回答

0

您应该能够使用gui导入JSON,选择用户对象(而不是用户对象本身),以便您拥有一些相当干净的“记录”行,这些记录行也包含标题每个记录行的信息,如“__职业经验”等。

下载并导入此项目与您的示例数据...确保将网格视图更改为记录模式。(左上格的拐角处)

例OpenRefine项目显示JSON进口的记录行: https://drive.google.com/file/d/0B533WzlrxWraQnF0NHN4anpFNHM/view?usp=sharing

在那里,您可以导出和更改模板你怎么想,即使只选择专业经验行,如果你想要,以及用户ID。

如果您需要处理大量导入JSON记录行或从数据端点或Web服务导入JSON记录行,那么我会建议下载并使用社区版本的Pentaho或Talend ETL来为您处理这个问题....但你当然可以使用OpenRefine进行初始检查和对齐。 (我最喜欢的是Pentaho,它在转换过程中有出色的直播点击预览记录行,Martin喜欢Talend)。

+0

非常感谢您的回复! Pentaho和Talend是非常有用的,但是我无法弄清楚如何在我的问题中使用它们。 我现在正在做的是写一个VBA脚本来“规范化”数据! 但是,如果有一种工具可以提供从JSON到关系模型的即时可用的转换,我真的很感兴趣。 准确地说:我有那些数组字段,这些数组字段在提炼中作为新行添加,但从语义角度来看,这没有意义,例如,学校和雇主被放在一个“额外的行”,尽管事实上,他们只与用户有关,而不是彼此...... – kreck 2014-11-08 15:17:16

+0

是的,这就是你可以使用Pentaho和Talend。获得一些培训或在他们的论坛上询问。没有免费的披萨。好运。 – 2014-11-09 16:31:06

0

我不知道正确理解您要创建的格式,但我可以提供两条引线就可以开始探索在:

使用向下填充

OpenRefine可让您轻松地将fill down within records存储在顶级主控行中,这样您的信息就可以通过每条记录进行多行记录。一旦你填写你需要的字段,例如用户(id),回到行模式,并通过使用方面,在数据库的每个表中只导出你所需的行的子集。

模板出口

template option让你在一个XML/JSON格式导出数据,以便您可以嵌套元素。但是,此功能不支持一对多关系。

让我们知道这是否有帮助。

+0

非常感谢您的回复!我在Thads后发表评论。 我的问题真的归结为数组数据被推入新行(在记录集中),然后“模仿”在语义上不存在的关系(例如学校和雇主之间)。我需要的是一个类似关系的模型的转换,它将这些数组项与用户(id)连接起来,但不会将它们放入行中。 如果您有任何建议,那就太好了。与此同时,我会尝试用VBA/Excel来处理它。但是,因为这不会是我最后一次需要做这个想法是相当 – kreck 2014-11-08 15:23:36

+0

好吧我编辑我的答案更多的细节。让我知道如果这有帮助 – magdmartin 2014-11-09 14:45:42