اغلب گفته می شود که 80 ٪ از تجزیه و تحلیل داده ها برای تمیز کردن و تهیه داده ها صرف می شود. و این فقط یک قدم اول نیست ، بلکه باید در طول دوره تجزیه و تحلیل بارها تکرار شود زیرا مشکلات جدید روشن می شود یا داده های جدید جمع آوری می شود. برای به دست آوردن این مسئله ، این مقاله به یک جنبه کوچک اما مهم ، تمیز کردن داده ها می پردازد که من آن را مرتب سازی داده می نامم: مجموعه داده های ساختاری برای تسهیل تجزیه و تحلیل.
اصول داده های مرتب یک روش استاندارد برای سازماندهی مقادیر داده در یک مجموعه داده ارائه می دهد. یک استاندارد تمیز کردن داده های اولیه را آسان تر می کند زیرا نیازی به شروع از ابتدا نیست و هر بار چرخ را دوباره اختراع می کنید. استاندارد داده های مرتب برای تسهیل اکتشاف و تجزیه و تحلیل اولیه داده ها و ساده سازی توسعه ابزارهای تجزیه و تحلیل داده ها که به خوبی در کنار هم کار می کنند ، طراحی شده است. ابزارهای فعلی اغلب به ترجمه نیاز دارند. شما باید وقت خود را صرف خروجی از یک ابزار کنید تا بتوانید آن را به دیگری وارد کنید. مجموعه داده های مرتب و ابزارهای مرتب برای آسانتر کردن تجزیه و تحلیل داده ها کار می کنند و به شما امکان می دهند تا روی مشکل دامنه جالب توجه تمرکز کنید ، نه بر روی تدارکات غیرقابل علاقه داده ها.
تعریف داده های مرتب
خانواده های شاد همه یکسان هستند. هر خانواده ناراضی از راه خود ناراضی هستند - لئو تولستوی
مانند خانواده ها ، مجموعه داده های مرتب همه یکسان هستند اما هر مجموعه داده کثیف به روش خاص خود کثیف است. مجموعه داده های مرتب یک روش استاندارد برای پیوند ساختار یک مجموعه داده (طرح فیزیکی آن) با معناشناسی (معنی آن) فراهم می کند. در این بخش ، من واژگان استاندارد را برای توصیف ساختار و معناشناسی یک مجموعه داده ارائه می دهم ، و سپس از آن تعاریف برای تعریف داده های مرتب استفاده می کنم.
ساختار داده ها
بیشتر مجموعه داده های آماری فریم های داده تشکیل شده از ردیف ها و ستون ها هستند. ستون ها تقریباً همیشه برچسب خورده و ردیف ها گاهی اوقات برچسب گذاری می شوند. کد زیر برخی از داده ها را در مورد یک کلاس خیالی در فرمی که معمولاً در طبیعت دیده می شود ، ارائه می دهد. جدول دارای سه ستون و چهار ردیف است و هر دو ردیف و ستون دارای برچسب هستند.
کتابخانه(Tibble) درس قبیله( ~نام،~quiz1 ،~quiz2 ،~test1 ، "بیلی", NA, "D", "ج", "سوزی", "F", NA, NA, "لیونل", "ب", "ج", "ب", "جنی", "آ", "آ", "ب" ) درس #># یک تیبل: 4 4 4 #>نام quiz1 quiz2 test1 #> #>1 بیلی د سی #>2 سوزی F#>3 Lionel B C B #>4 جنی A B
روش های بسیاری برای ساختار همان داده های اساسی وجود دارد. جدول زیر همان داده های فوق را نشان می دهد ، اما ردیف ها و ستون ها منتقل شده اند.
قبیله( ~ارزیابی ،~بیلی ،~سوزی ،~لیونل ،~جنی ، "quiz1", NA, "F", "ب", "آ", "quiz2", "D", NA, "ج", "آ", "test1", "ج", NA, "ب", "ب" ) #># یک تیبل: 5 × 5 #>ارزیابی بیلی سوزی لیونل جنی #> #>1 quiz1 f b a #>2 quiz2 d c a #>3 Test1 C B B
داده ها یکسان هستند ، اما طرح متفاوت است. واژگان ما از ردیف ها و ستون ها به سادگی غنی نیستند تا توصیف کنند که چرا این دو جدول همان داده ها را نشان می دهند. علاوه بر ظاهر ، ما به روشی برای توصیف معانی اساسی یا معنی مقادیر نمایش داده شده در جدول نیاز داریم.
معناشناسی داده ها
مجموعه داده مجموعه ای از مقادیر است ، معمولاً هر دو عدد (در صورت کمی) یا رشته ها (در صورت کیفی). مقادیر به دو روش سازماندهی می شوند. هر مقدار متعلق به یک متغیر و یک مشاهده است. یک متغیر شامل تمام مقادیر است که همان ویژگی اساسی (مانند ارتفاع ، دما ، مدت زمان) را در واحدها اندازه گیری می کنند. یک مشاهده شامل تمام مقادیر اندازه گیری شده در یک واحد (مانند یک شخص ، یا یک روز یا یک مسابقه) در ویژگی ها است.
یک نسخه مرتب از داده های کلاس به این شکل است: (شما می آموزید که چگونه عملکردها کمی بعد کار می کنند)
کتابخانه(Tidyr) کتابخانه(dplyr)
کلاس 2درس%>% Pivot_longer(quiz1:test1 ،names_to = "ارزیابی", مقادیر_تو = "مقطع تحصیلی") %>% ترتیب دادن(نام ، ارزیابی) کلاس 2 #># یک تیبل: 3 12 #>نمره ارزیابی نام #> #>1 بیلی مسابقه 1 #>2 Billy Quiz2 D #>3 بیلی تست 1 c #>4 Jey quiz1 a #>5 Jey quiz2 a #>6 جنی تست 1 ب #># ... با 6 ردیف دیگر
این باعث می شود مقادیر ، متغیرها و مشاهدات واضح تر شوند. مجموعه داده شامل 36 مقدار است که سه متغیر و 12 مشاهده را نشان می دهد. متغیرها عبارتند از:
- نام ، با چهار ارزش ممکن (بیلی ، سوزی ، لیونل و جنی).
- ارزیابی ، با سه مقدار ممکن (Quiz1 ، Quiz2 و Test1).
- درجه ، با پنج یا شش مقدار بسته به نحوه فکر کردن در مورد مقدار گمشده (A ، B ، C ، D ، F ، NA).
قاب داده مرتب صریحاً تعریف یک مشاهده را به ما می گوید. در این کلاس ، هر ترکیبی از نام و ارزیابی یک مشاهده واحد اندازه گیری شده است. این مجموعه داده همچنین ما را از مقادیر گمشده ، که می تواند و می تواند و معنا داشته باشد ، آگاه می کند. بیلی برای اولین مسابقه غایب بود ، اما سعی کرد درجه خود را نجات دهد. سوزی اولین مسابقه را شکست داد ، بنابراین تصمیم گرفت کلاس را رها کند. برای محاسبه درجه نهایی بیلی ، ممکن است این مقدار گمشده را با F جایگزین کنیم (یا او ممکن است فرصت دوم برای مسابقه را بدست آورد). با این حال ، اگر می خواهیم میانگین کلاس را برای آزمون 1 بدانیم ، کاهش مقدار از دست رفته ساختاری سوزی مناسب تر از تعیین یک مقدار جدید است.
برای یک مجموعه داده معین ، معمولاً می توان فهمید که مشاهدات چیست و متغیرها چیست ، اما تعریف دقیق متغیرها و مشاهدات به طور کلی دشوار است. به عنوان مثال ، اگر ستون های موجود در داده های کلاس قد و وزن بودند ، ما خوشحال می شدیم که آنها را متغیرها بنامیم. اگر ستون ها ارتفاع و عرض داشتند ، برش کمتری خواهد داشت ، زیرا ممکن است به عنوان مقادیر متغیر ابعاد از ارتفاع و عرض فکر کنیم. اگر ستون ها تلفن خانگی و تلفن کار بودند ، ما می توانیم اینها را به عنوان دو متغیر رفتار کنیم ، اما در یک محیط تشخیص کلاهبرداری ممکن است متغیرها شماره تلفن و شماره را بخواهیم زیرا استفاده از یک شماره تلفن برای چند نفر ممکن است تقلب را پیشنهاد کند. یک قاعده کلی شست این است که توصیف روابط عملکردی بین متغیرها آسان تر است (به عنوان مثال ، Z ترکیبی خطی از x و y است ، چگالی نسبت وزن به حجم است) نسبت به بین ردیف ها ، و انجام مقایسه بین آسانتر استگروه های مشاهدات (به عنوان مثال ، میانگین گروه A در مقابل میانگین گروه B) نسبت به گروه های ستون.
در یک تجزیه و تحلیل معین ، ممکن است چندین سطح مشاهده وجود داشته باشد. به عنوان مثال ، در یک کارآزمایی از داروهای آلرژی جدید ممکن است سه نوع مشاهده داشته باشیم: داده های جمعیتی جمع آوری شده از هر فرد (سن ، جنس ، نژاد) ، داده های پزشکی جمع آوری شده از هر شخص در هر روز (تعداد عطسه ها ، کاهش چشم ها) ،و داده های هواشناسی جمع آوری شده در هر روز (دما ، تعداد گرده).
متغیرها ممکن است در طول دوره تجزیه و تحلیل تغییر کنند. غالباً متغیرهای موجود در داده های خام بسیار ریز دانه هستند و ممکن است پیچیدگی مدل سازی اضافی را برای افزایش کمی توضیحی اضافه کنند. به عنوان مثال ، بسیاری از نظرسنجی ها در همان سؤال از تغییرات استفاده می کنند تا بهتر در یک ویژگی اساسی قرار بگیرند. در مراحل اولیه تجزیه و تحلیل ، متغیرها با سؤالات مطابقت دارند. در مراحل بعدی ، تمرکز خود را به صفات تغییر می دهید ، که با میانگین چندین سؤال با هم محاسبه می شود. این به طور قابل توجهی تجزیه و تحلیل را ساده می کند زیرا شما به یک مدل سلسله مراتبی احتیاج ندارید ، و اغلب می توانید وانمود کنید که داده ها مداوم است ، نه گسسته.
داده های مرتب
داده های مرتب یک روش استاندارد برای نقشه برداری از معنی یک مجموعه داده به ساختار آن است. بسته به نحوه مطابقت ردیف ها ، ستون ها و جداول با مشاهدات ، متغیرها و انواع ، یک مجموعه داده کثیف یا مرتب است. در داده های مرتب:
- هر ستون یک متغیر است.
- هر ردیف مشاهده است.
- هر سلول یک مقدار واحد است.
این شکل 3 عادی CODD است ، اما با محدودیت هایی که به زبان آماری قاب بندی شده است ، و تمرکز آن بر روی یک مجموعه داده واحد به جای بسیاری از مجموعه داده های متصل در پایگاه داده های رابطه ای قرار می گیرد. داده های کثیف هر ترتیب دیگری از داده ها است.
داده های مرتب باعث می شود که یک تحلیلگر یا رایانه بتواند متغیرهای مورد نیاز را استخراج کند زیرا یک روش استاندارد برای ساخت یک مجموعه داده فراهم می کند. نسخه های مختلف داده های کلاس را با یکدیگر مقایسه کنید: در نسخه کثیف برای استخراج متغیرهای مختلف باید از استراتژی های مختلف استفاده کنید. این تحلیل را کند می کند و خطاها را دعوت می کند. اگر در نظر بگیرید که چه تعداد عملیات تجزیه و تحلیل داده ها شامل تمام مقادیر در یک متغیر (هر عملکرد جمع آوری) است ، می بینید که استخراج این مقادیر به روشی ساده و استاندارد چقدر مهم است. داده های مرتب به ویژه برای زبانهای برنامه نویسی بردار مانند R مناسب هستند ، زیرا طرح تضمین می کند که مقادیر متغیرهای مختلف از همان مشاهده همیشه جفت می شوند.
در حالی که ترتیب متغیرها و مشاهدات بر تجزیه و تحلیل تأثیر نمی گذارد ، سفارش خوب اسکن مقادیر خام را آسان تر می کند. یکی از راه های سازماندهی متغیرها با نقش آنها در تجزیه و تحلیل است: آیا مقادیر با طراحی جمع آوری داده ها ثابت هستند یا در طول آزمایش اندازه گیری می شوند؟متغیرهای ثابت طرح آزمایشی را توصیف می کنند و از قبل شناخته شده اند. دانشمندان رایانه غالباً ابعاد متغیرهای ثابت را می نامند و آمارشناسان معمولاً آنها را با اشتراک در متغیرهای تصادفی نشان می دهند. متغیرهای اندازه گیری شده همان چیزی است که ما در واقع در مطالعه اندازه گیری می کنیم. متغیرهای ثابت باید ابتدا بیایند و به دنبال آن متغیرهای اندازه گیری شده ، هر یک سفارش داده می شوند به طوری که متغیرهای مرتبط متناقض هستند. سپس ردیف ها را می توان با متغیر اول سفارش داد و روابط با متغیرهای دوم و متعاقب (ثابت) را شکست داد. این کنوانسیون است که توسط تمام نمایشگرهای جدولی در این مقاله اتخاذ شده است.
تنظیم مجموعه داده های کثیف
مجموعه داده های واقعی می توانند ، و اغلب ، سه دستورالعمل داده های مرتب را تقریباً از هر طریق قابل تصور نقض کنند. در حالی که گاهی اوقات یک مجموعه داده دریافت می کنید که می توانید بلافاصله تجزیه و تحلیل را شروع کنید ، این استثناء است نه یک قاعده. در این بخش پنج مشکل متداول در مورد مجموعه داده های کثیف ، همراه با داروهای آنها شرح داده شده است:
- هدرهای ستون مقادیر هستند ، نه نامهای متغیر.
- متغیرهای چندگانه در یک ستون ذخیره می شوند.
- متغیرها در هر دو ردیف و ستون ذخیره می شوند.
- انواع مختلفی از واحدهای مشاهده ای در همان جدول ذخیره می شوند.
- یک واحد مشاهده ای واحد در چندین جدول ذخیره می شود.
با کمال تعجب ، ترین مجموعه داده های کثیف ، از جمله انواع آشفتگی که به صراحت در بالا توضیح داده نشده است ، با مجموعه کوچکی از ابزارها قابل تنظیم است: محوری (طولانی تر و گسترده تر) و جدا شدن. بخش های زیر هر مشکل را با یک مجموعه داده واقعی که من با آنها روبرو شده ام نشان می دهد و نشان می دهد که چگونه آنها را مرتب کنم.
هدرهای ستون مقادیر هستند ، نه نامهای متغیر
نوع متداول از مجموعه داده های کثیف ، داده های جدولی است که برای ارائه طراحی شده است ، جایی که متغیرها هم ردیف ها و ستون ها را تشکیل می دهند و هدر ستون ها مقادیر هستند ، نه نام متغیر. در حالی که من این ترتیب را کثیف می نامم ، در بعضی موارد می تواند بسیار مفید باشد. این ذخیره سازی کارآمد برای طرح های کاملاً متقاطع فراهم می کند و در صورتی که عملیات مورد نظر به عنوان عملیات ماتریس بیان شود ، می تواند منجر به محاسبات بسیار کارآمد شود.
کد زیر زیر مجموعه ای از یک مجموعه داده معمولی از این فرم را نشان می دهد. این مجموعه داده به بررسی رابطه بین درآمد و دین در ایالات متحده می پردازد. این گزارش از گزارشی تهیه شده توسط مرکز تحقیقات پیو ، یک اندیشکده آمریکایی است که داده های مربوط به نگرش به موضوعات اعم از دین تا اینترنت را جمع می کند و گزارش های بسیاری را تولید می کند که حاوی مجموعه داده ها در این قالب است.
دین #># یک تیبل: 11 18 18 #>دین ` #> #>1 آگنوستیک 27 34 60 81 76 137 122 109 #>2 آتئیست 12 27 37 52 35 70 73 59 #>3 بودایی 27 21 30 34 33 58 62 39 #>4 کاتولیک 418 617 732 670 638 1116 949 792 #>5 نمی دانم/دوباره ... 15 14 15 11 10 35 21 17 #>6 PEVANGELICAL P… 575 869 1064 982 881 1486 949 723 #> # … with 12 more rows, 2 more variables: `>150k` ، #># `نمی دانم/رد شده ، و نام های متغیر مختصر ¹` 10-20K `، #># ² `20-30K` ، ³` 30-40K` ، ⁴ `40-50K` ، ⁵` 50-75k` ، ⁶ `75-100k` ، ⁷ `$ 100-150k`
این مجموعه داده دارای سه متغیر ، دین ، درآمد و فرکانس است. برای مرتب کردن آن ، ما باید ستون های غیر متغیر را به یک جفت ارزش کلید دو ستونی تبدیل کنیم. این عمل اغلب به عنوان طولانی تر (یا بلندتر) یک مجموعه داده گسترده توصیف می شود.
هنگامی که متغیرهای محوری ، باید برای ایجاد نام ستون های جدید ارزش کلید را ارائه دهیم. پس از تعریف ستون ها به محوری (هر ستون به جز دین) ، به نام ستون کلید نیاز خواهید داشت که نام متغیر تعریف شده توسط مقادیر عناوین ستون است. در این حالت ، این درآمد است. آرگومان دوم نام ستون مقدار ، فرکانس است.
دین%>% Pivot_longer(-دین ،names_to = "درآمد", مقادیر_تو = "فرکانس") #># یک تیبل: 3 180 180 #>فرکانس درآمد دین #> #>1 آگنوستیک #>2 آگنوستیک 10-20K 34 #>3 آگنوستیک 20-30K 60 #>4 آگنوستیک 30-40K 81 #>5 آگنوستیک 40-50K 76 #>6 آگنوستیک 50-75K 137 #># ... با 174 ردیف دیگر
این فرم مرتب است زیرا هر ستون یک متغیر را نشان می دهد و هر سطر یک مشاهده را نشان می دهد ، در این حالت یک واحد جمعیتی متناسب با ترکیبی از دین و درآمد.
این قالب همچنین برای ضبط مشاهدات به طور مرتب در فاصله با گذشت زمان استفاده می شود. به عنوان مثال ، مجموعه داده های بیلبورد نشان داده شده در زیر ، تاریخ اولین آهنگ را به 100 بیلبورد وارد می کند. این متغیرهایی برای هنرمند ، آهنگ ، تاریخ. در رتبه بندی ، رتبه و هفته دارد. رتبه در هر هفته پس از ورود به 100 نفر برتر در 75 ستون ، WK1 به WK75 ثبت می شود. این شکل از ذخیره سازی مرتب نیست ، اما برای ورود داده ها مفید است. این تکثیر را کاهش می دهد زیرا در غیر این صورت هر آهنگ در هر هفته به ردیف خاص خود نیاز دارد ، و ابرداده آهنگ مانند عنوان و هنرمند باید تکرار شود. این در انواع مختلفی در عمق بیشتر مورد بحث قرار خواهد گرفت.
تابلو تبلیغاتی #># یک تیبل: 79 317 #>تاریخ آهنگ هنرمند #> #>1 2 Pac Baby… 2000-02-26 87 82 72 77 87 94 99 NA NA #>2 2ge+او ... 2000-09-02 91 87 92 na na na na na #>3 3 درب… Kryp… 2000-04-08 81 70 68 67 66 57 54 53 51 #>4 3 درب… بازنده 2000-10-21 76 76 72 69 67 65 55 59 62 #>5 504 Bo… WOBB… 2000-04-15 57 34 25 17 17 36 36 49 53 #>6 98^0 دادن… 2000-08-19 51 39 34 26 26 19 2 2 3 #># ... با 311 ردیف دیگر ، 67 متغیر دیگر: WK10 ، WK11 ، WK12 ، #># wk13 ، wk14 ، wk15 ، wk16 ، wk17 ، wk18 ، #># WK19 ، WK20 ، WK21 ، WK22 ، WK23 ، WK24 ، #># WK25 ، WK26 ، WK27 ، WK28 ، WK29 ، WK30 ، #># WK31 ، WK32 ، WK33 ، WK34 ، WK35 ، WK36 ، #># WK37 ، WK38 ، WK39 ، WK40 ، WK41 ، WK42 ، #># WK43 ، WK44 ، WK45 ، WK46 ، WK47 ، WK48 ، ...
برای مرتب کردن این مجموعه داده ، ابتدا از Pivot_Longer () استفاده می کنیم تا مجموعه داده طولانی تر شود. ما ستون ها را از WK1 به WK76 تبدیل می کنیم ، و یک ستون جدید برای نام آنها ، هفته و ارزش جدیدی برای ارزش های آنها ، رتبه بندی می کنیم:
بیلبورد 2تابلو تبلیغاتی%>% Pivot_longer( wk1:wk76 ، names_to = "هفته", مقادیر_تو = "رتبه", مقادیر_ drop_na = درست است، واقعی ) بیلبورد 2 #># یک تیبل: 5،307 × 5 #>تاریخ آهنگ هنرمند #> #>1 2 PAC Baby Cry (Keep. 2000-02-26 WK1 87 #>2 2 Pac Baby Cry (Keep. 2000-02-26 WK2 82 #>3 2 PAC Baby Cry (Keep. 2000-02-26 Wk3 72 #>4 2 Pac Baby Cry (Keep. 2000-02-26 WK4 77 #>5 2 Pac Baby Cry (Keep. 2000-02-26 WK5 87 #>6 2 Pac Baby Cry (Keep. 2000-02-26 WK6 94 #># ... با 5،301 ردیف دیگر
در اینجا ما از مقادیر_ drop_na = درست می کنیم تا مقادیر گمشده را از ستون رتبه رها کنیم. در این داده ها ، مقادیر گمشده هفته ها را نشان می دهد که این آهنگ در نمودارها نبوده است ، بنابراین می توان با خیال راحت کاهش یافت.
در این حالت ، انجام کمی تمیز کردن ، تبدیل متغیر هفته به یک عدد ، خوب است و تاریخ مربوط به هر هفته را در نمودارها می فهمید:
بیلبورد 3بیلبورد 2%>% جهش دادن( هفته = AS. integer(gsub("wk", ""، هفته)) ، تاریخ = as. date(date. entered)+ 7 *(هفته- 1), date. entered = خالی ) بیلبورد 3 #># یک تیبل: 5،307 × 5 #>تاریخ رتبه بندی هفته آهنگ هنرمند #> #>1 2 PAC BABY CROY (Keep. 1 87 2000-02-26 #>2 2 PAC Baby Cry (Keep. 2 82 2000-03-04 #>3 2 Pac Baby Cry (Keep. 3 72 2000-03-11 #>4 2 Pac Baby Cry (Keep. 4 77 2000-03-18 #>5 2 Pac Baby Cry (نگه دارید 5 87 2000-03-25 #>6 2 Pac Baby Cry (Keep. 6 94 2000-04-01 #># ... با 5،301 ردیف دیگر
سرانجام ، همیشه ایده خوبی برای مرتب کردن داده ها است. ما می توانیم این کار را با هنرمند ، آهنگ و هفته انجام دهیم:
بیلبورد 3%>% ترتیب دادن(هنرمند ، آهنگ ، هفته) #># یک تیبل: 5،307 × 5 #>تاریخ رتبه بندی هفته آهنگ هنرمند #> #>1 2 PAC BABY CROY (Keep. 1 87 2000-02-26 #>2 2 PAC Baby Cry (Keep. 2 82 2000-03-04 #>3 2 Pac Baby Cry (Keep. 3 72 2000-03-11 #>4 2 Pac Baby Cry (Keep. 4 77 2000-03-18 #>5 2 Pac Baby Cry (نگه دارید 5 87 2000-03-25 #>6 2 Pac Baby Cry (Keep. 6 94 2000-04-01 #># ... با 5،301 ردیف دیگر
یا براساس تاریخ و رتبه:
بیلبورد 3%>% ترتیب دادن(تاریخ ، رتبه) #># یک تیبل: 5،307 × 5 #>تاریخ رتبه بندی هفته آهنگ هنرمند #> #>1 Lonestar 1 81 1999-06-05 متحیر شد #>2 Lonestar 2 54 1999-06-12 متحیر شد #>3 Lonestar 3 44 1999-06-19 متحیر شد #>4 Lonestar 4 39 1999-06-26 متحیر شد #>5 Lonestar 5 38 1999-07-03 متحیر شد #>6 Lonestar 6 33 1999-07-10 متحیر شد #># ... با 5،301 ردیف دیگر
چندین متغیر ذخیره شده در یک ستون
پس از محوری ستون ها ، ستون کلید گاهی اوقات ترکیبی از نام های متغیر زیرین است. این اتفاق در مجموعه داده سل (سل) رخ می دهد ، در زیر نشان داده شده است. این مجموعه داده از سازمان بهداشت جهانی تهیه شده است و تعداد موارد تأیید شده سل را بر اساس کشور ، سال و گروه جمعیتی ثبت می کند. گروه های جمعیتی با جنس جنسی (M ، F) و سن (0-14 ، 15-25 ، 25-34 ، 35-44 ، 45-54 ، 55-64 ، ناشناخته تقسیم می شوند.
سل as_tibble(بخوانید. csv("tb. csv", stringsasfactors = دروغ)) tb #># یک تیبل: 22 × 5،769 #>ISO2 سال M04 M514 M014 M1524 M2534 M3544 M4554 M5564 M65 MU F04 #> #>1 AD 1989 na na na na na na na na na #>2 میلادی 1990 na na na na na na na na na #>3 میلادی 1991 na na na na na na na na na na #>4 میلادی 1992 na na na na na na na na na #>5 میلادی 1993 na na na na na na na na na #>6 میلادی 1994 na na na na na na na na na #># ... با 5،763 ردیف دیگر ، و 9 متغیر دیگر: F514 ، F014 ، #># F1524 ، F2534 ، F3544 ، F4554 ، F5564 ، F65 ، #># فو
ابتدا از Pivot_Longer () برای جمع آوری ستون های غیر متغیر استفاده می کنیم:
سلسل%>% Pivot_longer( !c(ISO2 ، سال) ، names_to = "نسخه ی نمایشی", مقادیر_تو = "ن", مقادیر_ drop_na = درست است، واقعی ) سل #># یک تیبل: 35،750 × 4 #>ISO2 سال نسخه ی نمایشی n #> #>1 AD 1996 M014 0 #>2 AD 1996 M1524 0 #>3 میلادی 1996 M2534 0 #>4 میلادی 1996 M3544 4 #>5 میلادی 1996 M4554 1 #>6 میلادی 1996 M5564 0 #># ... با 35،744 ردیف دیگر
هدرهای ستون در این قالب اغلب توسط یک شخصیت غیر آلفانوم جدا می شوند (به عنوان مثال ، - ، _ ، :) ، یا دارای فرمت عرض ثابت مانند این مجموعه داده هستند. جداگانه () تقسیم متغیرهای مرکب را به متغیرهای فردی آسان می کند. شما می توانید آن را یک عبارت منظم برای تقسیم بر روی آن قرار دهید (پیش فرض تقسیم بر ستونهای غیر آلفانومیک است) یا یک بردار از موقعیت های کاراکتر. در این حالت ما می خواهیم بعد از اولین شخصیت تقسیم کنیم:
TB3سل%>% جداگانه، مجزا(نسخه ی نمایشی،c("ارتباط جنسی", "سن"), 1) TB3 #># یک تیبل: 5 35750 × 5 #>ISO2 سال سن جنسی n #> #>1 میلادی 1996 م 014 0 #>2 میلادی 1996 م 1524 0 #>3 میلادی 1996 م 2534 0 #>4 میلادی 1996 م 3544 4 #>5 میلادی 1996 م 4554 1 #>6 میلادی 1996 م 5564 0 #># ... با 35،744 ردیف دیگر
ذخیره مقادیر در این فرم ، یک مشکل را در داده های اصلی برطرف می کند. ما می خواهیم نرخ ها را مقایسه کنیم ، نه شمارش ، به این معنی که باید جمعیت را بشناسیم. در قالب اصلی ، هیچ راه آسانی برای افزودن متغیر جمعیت وجود ندارد. باید در یک جدول جداگانه ذخیره شود ، که باعث می شود مطابقت صحیح جمعیت با شمارش سخت باشد. به شکل مرتب ، اضافه کردن متغیرها برای جمعیت و نرخ آسان است زیرا آنها فقط ستون های اضافی هستند.
در این حالت ، ما همچنین می توانیم با تهیه چندین نام ستون به names_to و همچنین تهیه یک بیان منظم گروهی به names_patte ، تحول را در یک مرحله واحد انجام دهیم:
سل%>% Pivot_longer( !c(ISO2 ، سال) ، names_to = c("ارتباط جنسی", "سن"), name_patte = "(.)(.+)", مقادیر_تو = "ن", مقادیر_ drop_na = درست است، واقعی ) #># یک تیبل: 5 35750 × 5 #>ISO2 سال سن جنسی n #> #>1 میلادی 1996 م 014 0 #>2 میلادی 1996 م 1524 0 #>3 میلادی 1996 م 2534 0 #>4 میلادی 1996 م 3544 4 #>5 میلادی 1996 م 4554 1 #>6 میلادی 1996 م 5564 0 #># ... با 35،744 ردیف دیگر
متغیرها در هر دو ردیف و ستون ذخیره می شوند
پیچیده ترین شکل داده های کثیف زمانی اتفاق می افتد که متغیرها در هر دو ردیف و ستون ذخیره شوند. کد زیر داده های آب و هوایی روزانه از شبکه جهانی اقلیم شناسی تاریخی برای یک ایستگاه هواشناسی (MX17004) در مکزیک به مدت پنج ماه در سال 2010 است.
هوا as_tibble(بخوانید. csv("Weather. csv", stringsasfactors = دروغ)) هوا #># یک تیبل: 35 22 #>ماه سال شناسه عنصر D1 D2 D3 D4 D5 D6 D7 D8 #> #>1 mx17004 2010 1 tmax na na na na na na na #>2 mx17004 2010 1 tmin na na na na na na na #>3 MX17004 2010 2 TMAX NA 27. 3 24. 1 NA NA NA NA NA #>4 mx17004 2010 2 tmin na 14. 4 14. 4 na na na na #>5 mx17004 2010 3 tmax na na na 32. 1 na na #>6 mx17004 2010 3 tmin na na na 14. 2 na na na #># ... با 16 ردیف دیگر و 23 متغیر دیگر: D9 ، D10 ، D11 ، #># D12 ، D13 ، D14 ، D15 ، D16 ، D17 ، #># D18 ، D19 ، D20 ، D21 ، D22 ، D23 ، #># D24 ، D25 ، D26 ، D27 ، D28 ، D29 ، #># D30 ، D31
این متغیرها در ستون های جداگانه (شناسه ، سال ، ماه) ، در ستون ها (روز ، D1-D31) و در سراسر ردیف ها (TMIN ، TMAX) (حداقل و حداکثر دما) پخش شده است. ماه هایی با کمتر از 31 روز دارای ارزش های مفقود شده ساختاری برای آخرین روز (های) ماه است.
برای مرتب کردن این مجموعه داده ابتدا برای جمع آوری ستون های روز از Pivot_Longer استفاده می کنیم:
weathe2هوا%>% Pivot_longer( d1:D31 ، names_to = "روز", مقادیر_تو = "ارزش", مقادیر_ drop_na = درست است، واقعی ) weathe2 #># یک تیبل: 6 66 66 #>ارزش روز عناصر ماه شناسه #> #>1 MX17004 2010 1 TMAX D30 27. 8 #>2 MX17004 2010 1 TMIN D30 14. 5 #>3 MX17004 2010 2 TMAX D2 27. 3 #>4 MX17004 2010 2 TMAX D3 24. 1 #>5 MX17004 2010 2 TMAX D11 29. 7 #>6 MX17004 2010 2 TMAX D23 29. 9 #># ... با 60 ردیف دیگر
برای ارائه ، من ارزش های گمشده را کاهش داده ام ، و آنها را به جای صریح ، ضمنی می کنم. این خوب است زیرا ما می دانیم که در هر ماه چند روز است و می تواند به راحتی مقادیر صریح گمشده را بازسازی کند.
ما همچنین کمی تمیز کردن انجام خواهیم داد:
Weatho3weathe2%>% جهش دادن(روز = AS. integer(gsub("D", ""، روز)))%>% انتخاب کنید(شناسه ، سال ، ماه ، روز ، عنصر ، ارزش) Weatho3 #># یک تیبل: 6 66 66 #>ارزش عناصر ماه ماه شناسه #> #>1 MX17004 2010 1 30 TMAX 27. 8 #>2 MX17004 2010 1 30 tmin 14. 5 #>3 MX17004 2010 2 2 TMAX 27. 3 #>4 MX17004 2010 2 3 TMAX 24. 1 #>5 MX17004 2010 2 11 TMAX 29. 7 #>6 MX17004 2010 2 23 Tmax 29. 9 #># ... با 60 ردیف دیگر
این مجموعه داده بیشتر مرتب است ، اما ستون عنصر متغیر نیست. نام متغیرها را ذخیره می کند.(در این مثال نشان داده نشده است ، سایر متغیرهای هواشناسی PRCP (بارش) و برف (بارش برف)). رفع این مسئله نیاز به گسترش داده ها دارد: Pivot_wider () معکوس از Pivot_Longer () ، عنصر محوری و مقدار در چندین ستون است:
Weatho3%>% Pivot_wider(names_from =عنصر ،مقادیر_ ازارزش) #># یک تیبل: 6 33 33 #>روز شناسه روز TMAX TMIN #> #>1 MX17004 2010 1 30 27. 8 14. 5 #>2 MX17004 2010 2 2 27. 3 14. 4 #>3 MX17004 2010 2 3 24. 1 14. 4 #>4 MX17004 2010 2 11 29. 7 13. 4 #>5 MX17004 2010 2 23 29. 9 10. 7 #>6 MX17004 2010 3 5 32. 1 14. 2 #># ... با 27 ردیف دیگر
این فرم مرتب است: در هر ستون یک متغیر وجود دارد و هر سطر یک روز را نشان می دهد.
انواع مختلفی در یک جدول
مجموعه داده ها اغلب شامل مقادیر جمع آوری شده در چندین سطح ، در انواع مختلف واحدهای مشاهده ای هستند. در حین مرتب سازی ، هر نوع واحد مشاهده باید در جدول خاص خود ذخیره شود. این ارتباط نزدیکی با ایده عادی سازی بانک اطلاعاتی دارد ، جایی که هر واقعیت فقط در یک مکان بیان می شود. این مهم است زیرا در غیر این صورت ناسازگاری ها می توانند بوجود بیایند.
مجموعه داده بیلبورد در واقع حاوی مشاهدات در مورد دو نوع واحد مشاهده است: آهنگ و رتبه آن در هر هفته. این خود را از طریق تکثیر حقایق در مورد این ترانه نشان می دهد: هنرمند بارها تکرار می شود.
این مجموعه داده باید به دو قطعه تقسیم شود: یک مجموعه داده آهنگ که نام هنرمند و آهنگ را ذخیره می کند ، و یک مجموعه داده رتبه بندی که در هر هفته رتبه آهنگ را می دهد. ما ابتدا یک مجموعه داده آهنگ را استخراج می کنیم:
ترانهبیلبورد 3%>% متمایز(هنرمند ، آهنگ)%>% جهش دادن(Song_id = شماره ردیف()) ترانه #># یک تیبل: 3 317 #>آهنگ هنرمند Song_ID #> #>1 2 Pac Baby Cry (نگه دارید. 1 #>2 2ge+سخت ترین قسمت. 2 #>3 3 درب پایین کریپتونیت 3 #>4 3 درب پایین بازنده 4 #>5 504 Boyz Wobble Wobble 5 #>6 98^0 فقط یک نیگ به من بدهید. 6 #># ... با 311 ردیف دیگر
سپس با جایگزینی واقعیت های آهنگ مکرر با یک اشاره گر به جزئیات آهنگ (شناسه آهنگ منحصر به فرد) از آن استفاده کنید تا یک مجموعه داده رتبه بندی کنید:
درجهبیلبورد 3%>% چپ_(ترانه،c("هنرمند", "مسیر")) %>% انتخاب کنید(Song_id ، تاریخ ، هفته ، رتبه) درجه #># یک تیبل: 5،307 × 4 #>رتبه بندی هفته تاریخ Song_id #> #>1 1 2000-02-26 1 87 #>2 1 2000-03-04 2 82 #>3 1 2000-03-11 3 72 #>4 1 2000-03-18 4 77 #>5 1 2000-03-25 5 87 #>6 1 2000-04-01 6 94 #># ... با 5،301 ردیف دیگر
همچنین می توانید یک مجموعه داده هفته را تصور کنید که اطلاعات پس زمینه را در مورد هفته ضبط می کند ، شاید تعداد کل آهنگ های فروخته شده یا اطلاعات مشابه "جمعیت شناختی" باشد.
عادی سازی برای مرتب سازی و از بین بردن ناسازگاری ها مفید است. با این حال ، ابزارهای تجزیه و تحلیل داده های کمی وجود دارد که مستقیماً با داده های رابطه ای کار می کنند ، بنابراین تجزیه و تحلیل معمولاً نیاز به denormalisation یا ادغام مجموعه داده ها به یک جدول نیز دارد.
یک نوع در جدول های مختلف
همچنین پیدا کردن مقادیر داده در مورد یک نوع واحد مشاهده ای که در چندین جدول یا پرونده پخش شده است ، معمول است. این جداول و پرونده ها اغلب با متغیر دیگری تقسیم می شوند ، به طوری که هر یک از آنها یک سال ، شخص یا مکان واحد را نشان می دهد. تا زمانی که فرمت سوابق فردی سازگار باشد ، این یک مشکل آسان برای رفع است:
- پرونده ها را در لیست جداول بخوانید.
- برای هر جدول ، یک ستون جدید اضافه کنید که نام اصلی پرونده را ثبت کند (نام پرونده اغلب مقدار یک متغیر مهم است).
- تمام جداول را در یک جدول واحد ترکیب کنید.
PURRR این کار را به طور ساده در R. انجام می دهد. کد زیر یک بردار از نام پرونده ها در یک فهرست (داده/) ایجاد می کند که با یک عبارت منظم مطابقت دارد (به پایان می رسد . CSV). در مرحله بعد ، ما هر عنصر بردار را با نام پرونده نامگذاری می کنیم. ما این کار را انجام می دهیم زیرا در مرحله زیر اسامی را حفظ خواهیم کرد و اطمینان حاصل می کنیم که هر سطر در قاب داده نهایی با منبع آن برچسب گذاری شده است. سرانجام ، MAP_DFR () را از هر مسیر حلقه می کند ، در پرونده CSV می خواند و نتایج را در یک قاب داده واحد ترکیب می کند.
کتابخانه(purrr) راه ها خط("داده ها", الگوی = "\. csv $ ", full. names = درست است، واقعی) نام(راه ها) نام(راه ها) map_dfr(مسیرها ، read. csv ،stringsasfactors = دروغ, . id = "نام پرونده" برای هر جدول ، یک ستون جدید اضافه کنید که نام اصلی پرونده را ثبت کند (نام پرونده اغلب مقدار یک متغیر مهم است).)
پرسش و پاسخ بورس...
ما را در سایت پرسش و پاسخ بورس دنبال می کنید
برچسب :
نویسنده : ماندانا اصلانی
بازدید : <-PostHit->
تاريخ : پنجشنبه
19 مرداد
1402 ساعت: 22:15