2014-11-06 129 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