Reshape / पुनर्गठन डेटा का सबसे अच्छा तरीका क्या है?


12

मैं एक प्रयोगशाला (स्वयंसेवक) के लिए एक अनुसंधान सहायक हूं। मुझे और एक छोटे समूह को एक बड़े अध्ययन से खींचे गए डेटा के एक सेट के लिए डेटा विश्लेषण का काम सौंपा गया है। दुर्भाग्य से डेटा को किसी प्रकार के ऑनलाइन ऐप के साथ इकट्ठा किया गया था, और यह डेटा को सबसे उपयोगी रूप में आउटपुट करने के लिए प्रोग्राम नहीं किया गया था।

नीचे दी गई तस्वीरें मूल समस्या का चित्रण करती हैं। मुझे बताया गया था कि इसे "रिशेप" या "रिस्ट्रक्चर" कहा जाता है।

प्रश्न: 10k प्रविष्टियों के साथ एक बड़े डेटा सेट के साथ चित्र 1 से चित्र 2 तक जाने के लिए सबसे अच्छी प्रक्रिया क्या है?

यह एक नमूना है, वास्तविक फ़ाइल में 10k प्रविष्टियाँ हैं।  मैंने स्पष्टता के साथ मदद के लिए रंग कोडित किया है

यह वही है जिसे सभी में परिवर्तित करने की आवश्यकता है।


1
कृपया इसे दो अलग-अलग प्रश्नों में विभाजित करें और नमूना डेटा प्रदान करें (आप प्रासंगिक होने तक अपनी पृष्ठभूमि को भी छोड़ सकते हैं)। मोटे तौर पर, (1) आप एक मैपिंग ढूंढना चाहेंगे और फिर नंबर संलग्न करना चाहेंगे। (2) आप किस प्रकार की जोड़तोड़ करना चाहते हैं, उस पर अत्यधिक निर्भर करता है; बात के इस प्रकार के लिए लोकप्रिय आर संकुल शामिल data.table, dplyr, plyr, और reshape2- मैं एक्सेल और पिवट तालिका से बचने की सलाह देते हैं यदि संभव हो तो।
मैक्स गनीस

मुझे लगता है कि आपके डेटा की सफाई की समस्याएं अधिक व्यापक हैं, जो आपके सामान्य प्रश्नों के प्रकारों में शामिल हो सकती हैं। आप OpenRefine.org को देखना चाह सकते हैं। कुछ वीडियो और एक डाउनलोड आपके विश्लेषण के इस हिस्से में आपकी बहुत मदद कर सकते हैं।
जॉन

3
यह प्रश्न ऑफ़-टॉपिक प्रतीत होता है क्योंकि यह अल्पविकसित डेटा सफाई और संगठन के बारे में है, न कि आँकड़ों के बारे में।
निक स्टनर

2
मैं कहता हूं कि यह ऑफ-टॉपिक नहीं है क्योंकि आपके डेटा की सफाई, "अल्पविकसित" प्रक्रिया के रूप में हो सकती है, इसका उपयोग करना आवश्यक है। यह एक बड़े मुद्दे का हिस्सा है।
छायाकार

2
@NickStauner, IIRC मैंने 'अस्पष्ट / अधिक जानकारी की आवश्यकता' के रूप में बंद करने के लिए मतदान किया, ऑफ-टॉपिक के रूप में नहीं। यह मुझे लगता है कि डेटा की सफाई बड़ी रिट के दायरे में है, और यद्यपि मैं जानता हूं कि अच्छे लोग असहमत हो सकते हैं, मुझे लगता है कि ऐसे प्रश्न ऑन-टॉपिक हो सकते हैं। विचार करें कि हमारे पास एक डेटा-सफाई टैग है, और ये सीवी धागे हैं: 1 , 2 , 3 , और 4
गंग - मोनिका

जवाबों:


12

जैसा कि मैंने अपनी टिप्पणी में उल्लेख किया है , प्रश्न के वास्तविक उत्तर के लिए पर्याप्त विवरण नहीं है। चूँकि आपको सही शब्द खोजने और आपके प्रश्न को तैयार करने में मदद की आवश्यकता है, इसलिए मैं सामान्य रूप से संक्षेप में बोल सकता हूँ।

आप जिस शब्द की तलाश कर रहे हैं वह डेटा सफाई है । यह कच्चे, खराब स्वरूपित (गंदे) डेटा लेने और विश्लेषण के लिए इसे आकार में लाने की प्रक्रिया है। स्वरूपों को बदलना और नियमित करना ("दो" " ) और पुनर्गठन पंक्तियों और स्तंभों में विशिष्ट डेटा सफाई कार्य हैं। 2

कुछ अर्थों में, डेटा सफाई किसी भी सॉफ्टवेयर में की जा सकती है और एक्सेल के साथ या आर के साथ की जा सकती है। दोनों के लिए पेशेवरों और विपक्ष होंगे:

  • एक्सेल: एक्सेल लगभग निश्चित रूप से डेटा की सफाई के लिए सबसे आम विकल्प है (आर फॉर्च्यून # 59 पीडीएफ देखें )। यह सांख्यिकीविदों द्वारा एक खराब विकल्प भी माना जाता है। प्राथमिक कारण यह है कि यह सुनिश्चित करना कठिन है कि आपने सब कुछ पकड़ लिया है, या कि आपने हर चीज को पहचान लिया है, और आपके द्वारा किए गए परिवर्तनों का कोई रिकॉर्ड नहीं है, इसलिए आप उन परिवर्तनों को बाद में फिर से नहीं कर सकते हैं। एक्सेल का उपयोग करने के लिए उल्टा यह है कि यह देखना आसान होगा कि आप क्या कर रहे हैं, और आपको बदलाव करने के लिए बहुत कुछ जानने की जरूरत नहीं है। (सांख्यिकीविद् बाद के एक अतिरिक्त चुनाव पर विचार करेंगे ।)
  • आर: आर को एक मजबूत सीखने की अवस्था की आवश्यकता होगी। यदि आप R या प्रोग्रामिंग से बहुत परिचित नहीं हैं, तो जिन चीजों को एक्सेल में बहुत जल्दी और आसानी से किया जा सकता है, वे आर में प्रयास करने के लिए निराश होंगे। दूसरी तरफ, अगर आपको कभी ऐसा करना है, तो वह सीखना होगा समय अच्छा कटा। इसके अलावा, R में डेटा को साफ करने के लिए अपने कोड को लिखने और सहेजने की क्षमता ऊपर सूचीबद्ध विपक्ष को समाप्त कर देगी। निम्नलिखित कुछ लिंक हैं जो आर में इन कार्यों के साथ आरंभ करने में आपकी सहायता करेंगे:

    ढेर अतिप्रवाह पर आपको बहुत सारी अच्छी जानकारी मिल सकती है :

    क्विक-आर भी एक मूल्यवान संसाधन है:

    संख्यात्मक मोड में संख्याएँ प्राप्त करना:

    R के बारे में जानने के लिए एक और अमूल्य स्रोत UCLA की सांख्यिकी वेबसाइट है :

    अंत में, आप हमेशा अच्छे पुराने Google के साथ बहुत सी जानकारी पा सकते हैं:

    • यह खोज: आर में डेटा की सफाई , कई ट्यूटोरियल लाती है (जिनमें से कोई भी मैंने एफटीआर के माध्यम से काम नहीं किया है)।

अद्यतन: यह आपके डेटासेट की संरचना के बारे में एक सामान्य समस्या है जब आपके पास 'अध्ययन इकाई' (आपके मामले में, एक व्यक्ति) के अनुसार कई माप हैं। यदि आपके पास प्रत्येक व्यक्ति के लिए एक पंक्ति है, तो आपके डेटा को 'विस्तृत' रूप में कहा जाता है, लेकिन तब आपके पास आवश्यक रूप से आपके प्रतिक्रिया चर के लिए कई कॉलम होंगे, उदाहरण के लिए। दूसरी ओर, आपके पास आपके प्रतिक्रिया चर के लिए सिर्फ एक कॉलम हो सकता है (लेकिन प्रति व्यक्ति कई पंक्तियाँ हैं, परिणामस्वरूप), जिस स्थिति में आपके डेटा को 'लंबे' रूप में कहा जाता है। इन दो प्रारूपों के बीच स्थानांतरण को अक्सर आपके डेटा को 'रीशैपिंग' कहा जाता है, खासकर आर दुनिया में।

  • इस के लिए मानक अनुसंधान कार्य है ? आकृति बदलें । UCLA के आँकड़े सहायता वेबसाइट पर उपयोग करने के लिए एक मार्गदर्शिका है reshape()
  • कई लोगों को लगता reshapeहै कि इसके साथ काम करना मुश्किल है। हैडली विकम ने reshape2 नामक एक पैकेज का योगदान दिया है , जिसका उद्देश्य प्रक्रिया को सरल बनाना है। हैशले 2 के लिए हैडली की निजी वेबसाइट यहाँ है , क्विक-आर अवलोकन यहाँ है , और यहाँ एक अच्छा दिखने वाला ट्यूटोरियल है
  • एसओ पर बहुत सारे सवाल हैं कि डेटा को कैसे फिर से जोड़ना है। उनमें से ज्यादातर व्यापक से लंबे समय तक जाने वाले हैं, क्योंकि आमतौर पर डेटा विश्लेषकों का सामना होता है। आपका प्रश्न लंबे समय से व्यापक तक जाने के बारे में है, जो बहुत कम आम है, लेकिन इसके बारे में अभी भी कई धागे हैं, आप इस खोज के माध्यम से देख सकते हैं ।
  • यदि आपका दिल एक्सेल के साथ ऐसा करने की कोशिश कर रहा है, तो यहाँ एक्सेल रीस्पेप कार्यक्षमता को दोहराने के लिए एक्सेल के लिए VBA मैक्रो लिखने के बारे में एक धागा है: VBA का उपयोग करके एक्सेल में पिघल / पुनरावृत्ति करें?

2
यह सवाल, और यह जवाब, इस बात का एक बड़ा उदाहरण है कि प्रोग्रामिंग साक्षरता किसी भी तरह के अनुसंधान के लिए बहुत आवश्यक क्यों है। मैं इस प्रश्न का पूरा उत्तर लिखने जा रहा हूं कि मैं भी अपने ब्लॉग पर पोस्ट करने जा रहा हूं, लेकिन इससे पहले कि मैं भूल जाता मैं इस टिप्पणी को प्राप्त करना चाहता था।
छायाकार

2
मैं कुछ हद तक सहमत हूं लेकिन "आवश्यक" और "किसी भी तरह का शोध" थोड़ा दूर चल रहा है। बहुत सारे विषय अक्सर गंदे डेटा से नहीं निपटते हैं और कई प्रमुख शोधकर्ताओं को प्रोग्रामिंग भाषा को छूने की कभी आवश्यकता नहीं होती है।
बहकाद

वाह, आप सभी का धन्यवाद। मुझे इस सभी जानकारी को संसाधित करने और एकीकृत करने में थोड़ा सा समय लगेगा जो मेरे लिए बहुत नई बात है। थोड़ा सा यह मेटा टैंगेंट लगता है कि मैं अपने प्रश्न के साथ प्रेरित हूं ... कल्पना करें कि विदेशी भाषा में अपनी भाषा / संस्कृति का कोई ज्ञान नहीं है, यह मैं और आँकड़े हैं। आपने अपनी प्रतिक्रिया में जो समय लिया है, मैं उसकी सराहना करता हूं।
विल्को

मैंने अपने प्रारंभिक प्रश्न को स्पष्ट करने की उम्मीद में एक संपादन जोड़ा है, हालांकि प्रश्न बंद होना दिखता है।
विल्के

प्रश्न बंद है, @ user48538, और यह संस्करण दुर्भाग्य से पिछले की तुलना में अधिक स्पष्ट रूप से ऑफ-टॉपिक है। यदि आपके पास 10k पंक्तियाँ हैं, तो आप निश्चित रूप से एक्सेल में ऐसा करने की कोशिश नहीं करना चाहते हैं। आपको वास्तव में आर या इसी तरह के प्रोग्रामिंग सॉफ़्टवेयर का उपयोग करना होगा। विशिष्ट ऑपरेशन का नाम आपके डेटासेट को 'लॉन्ग' से 'वाइड' में बदलना है, मैं आपके लिए कुछ और लिंक जोड़ूंगा। इसके अतिरिक्त, यदि आप एक स्नातक स्वयंसेवक हैं, तो w / थोड़ा आँकड़ों या प्रोग्रामिंग में कोई पृष्ठभूमि नहीं है, यह बहुत ही गैरजिम्मेदार है जो इस कार्य को आपको, IMHO को सौंपता है। ऐसा कोई तरीका नहीं है कि यह आपका काम होना चाहिए।
गंग - मोनिका

0

R का उपयोग करके प्रयास करें:

> ddf
   sess_id user_id     quest  response
1        1       a       age        29
2        1       a satisfied  st_agree
3        1       a    gender      male
4        1       a     phone    iphone
5        2       a       age        29
6        2       a satisfied not_agree
7        2       a    gender    female
8        2       a     phone    iphone
9        3       b       age        29
10       3       b satisfied     agree
11       3       b    gender      male
12       3       b     phone   android
> 
> library(reshape2)
> dcast(ddf, sess_id+user_id ~ quest, value.var='response')
  sess_id user_id age gender   phone satisfied
1       1       a  29   male  iphone  st_agree
2       2       a  29 female  iphone not_agree
3       3       b  29   male android     agree

0

स्केला में इसे "विस्फोट" ऑपरेशन कहा जाता है और इसे डेटाफ़्रेम पर किया जा सकता है। यदि आपका डेटा एक rdd है, तो आप पहले toDFकमांड के माध्यम से डेटाफ़्रेम में कनवर्ट करते हैं और फिर .explodeविधि का उपयोग करते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.