Dodawaj, usuwaj i zmieniaj nazwy kolumn w R za pomocą Dplyr
W tym samouczku omówimy pakiet dplyr, który umożliwia sortowanie, filtrowanie, dodawanie i zmianę nazw kolumn w języku R.
Dzisiaj chcę porozmawiać o koncepcji modelowania danych zwanej wymiarem śmieci . Z jego nazwy można by pomyśleć, że jest to technika, która jest uwłaczająca i coś, czego chciałbyś uniknąć, ale w rzeczywistości jest to przydatne podejście.
W rzeczywistości pracowałem nad pytaniem z i wymiar śmieci był idealnym rozwiązaniem. Kiedy już to zobaczysz i zrozumiesz, znajdziesz dla niego wiele zastosowań we własnej pracy. Możesz obejrzeć pełny film z tego samouczka na dole tego bloga.
Spis treści
Jakie są wymiary śmieci?
The Data Warehouse Toolkit autorstwa Kimballa i Rossa , jedna z biblii modelowania wymiarowego, definiuje je jako grupowanie flag i wskaźników o typowo niskiej liczności . Niska liczność oznacza niewielką liczbę unikalnych obserwacji w obrębie danego pola.
W naszym przykładzie mamy model danych dla naszej firmy polegającej na budowaniu niestandardowych komputerów. Model danych dotyczy zamówień i faktur. Mamy również wiele flag, w których możemy uchwycić typ procesora , typ konfiguracji wieży (kompaktowy lub pełny) i cel (gra lub stacja robocza).
Definiowanie wymiarów śmieci za pomocą analogii kuchennej szuflady na śmieci
Jeśli spojrzysz na każde z tych pól, zobaczysz tylko dwie unikalne obserwacje w każdym polu. To właśnie Kimball nazwałby flagą o niskiej liczności . Mówi, że tworząc abstrakcyjny wymiar, usuwamy flagi z tabeli faktów, jednocześnie umieszczając je w użytecznych ramach wymiarowych.
Analogia kuchennej szuflady na śmieci do wymiaru śmieci jest dobra. Każdy ma szufladę pełną gumek recepturek, zszywek, baterii, świeczek urodzinowych itp. Nie jest ważne, aby każda z tych rzeczy gwarantowała posiadanie własnej szuflady, ale musisz mieć miejsce, aby je umieścić.
Zachowanie ich może spowodować zwiększenie rozmiaru tabeli faktów. Załóżmy, że mamy tabelę faktów z milionem rekordów. Zbudowaliśmy wiele komputerów i dla każdego zbudowanego komputera musimy oznaczyć procesor, wieżę i przeznaczenie. Oznacza to, że na milion zamówionych rzędów pecetów mamy również 3 miliony flag w tabeli faktów.
Zmniejszanie rozmiaru tabeli faktów
Moglibyśmy przenieść je do tabeli wymiarów i połączyć tylko z identyfikatorem modelu, aby usunąć 3 miliony flag z tabeli faktów. Aby to zrobić, możemy zrobić oddzielną tabelę dla każdej z tych flag i będzie działać. Ale ten proces skomplikuje model danych, w którym zwykle chcesz uniknąć tabel jednokolumnowych.
Idealnym rozwiązaniem jest użycie wymiaru śmieciowego , w którym masz kilka flag o niskiej liczności, które są ze sobą powiązane w ogólny sposób. Wszystkie one są powiązane z atrybutami komputerów, które budujemy, ale nie w bezpośredni sposób, jak normalnie w przypadku określonej tabeli wymiarów.
Przegląd problemu użytkownika forum
Przyjrzyjmy się konkretnej aplikacji, która została opublikowana na forum. Członek chciał utworzyć dwa różne pola, jedno dla Zatrzymany i jeden dla Aktywny . Jeśli klient dokonał transakcji w ciągu ostatnich 45 dni, zostanie ona oznaczona jako aktywna; w przeciwnym razie zostanie oznaczony jako zablokowany.
Członek chciał również innej tabeli wymiarów dla Typu klienta, która jest albo wielozamówieniowym, albo pojedynczym zamówieniem. Jeśli konto miało dwie lub więcej transakcji w dowolnym momencie historii przy użyciu jednego numeru konta, byłoby to uważane za klienta z wieloma zamówieniami. A gdyby mieli tylko jedno zamówienie na dany numer konta, to byłby to klient z jednym zamówieniem.
Więc to są dwie flagi, które chcemy rozwijać. Przejdźmy do usługi LuckyTemplates i dowiedzmy się, jak to zrobić.
Modelowanie danych dla wymiaru śmieci
Przyjrzyjmy się modelowi danych. To naprawdę prosty model danych. Mamy rozszerzoną tabelę dat i tabelę transakcji .
Nasza tabela transakcji zawiera tylko trzy pola: numer konta , datę faktury i wielkość sprzedaży .
Ogólnie rzecz biorąc, jeśli uda nam się przesunąć transformację bliżej źródła, zrobimy to. Nie jest to dynamiczne w trakcie sesji raportowania, więc nie musimy tego robić w języku DAX .
Powinniśmy to robić albo w Power Query, albo w hurtowni danych/SQL, jeśli mamy taką opcję. Ale na razie załóżmy, że nie i że robimy to tylko w power query .
Identyfikacja typu klienta dla wymiaru śmieci
Pierwszą rzeczą, którą zrobimy, jest ustalenie typu klienta, czy jest to transakcja z jednym zleceniem, czy z wieloma zamówieniami. Użyjemy Group By , Count i Count Rows .
Następnie dodaj wszystkie dane i wykonaj operację Wszystkie wiersze , abyśmy zwrócili nie zagregowaną tabelę, ale tabelę początkową z liczbą wierszy w każdym wierszu.
Przyjrzyjmy się wynikowi i rozwińmy go.
Możemy dodać niestandardową kolumnę i nazwać ją Typ klienta , a następnie utworzyć instrukcję IF. Oświadczenie jest takie, że jeśli Count jest równe 1, to jest to pojedyncze zamówienie; w przeciwnym razie jest to multi-order.
Po prostu zmienimy kolumnę na typ tekstowy. Teraz mamy jeden z naszych dwóch wymiarów ustawiony w tabeli faktów.
Skończmy drugą tabelę wymiarów. W tym przypadku, jeśli ostatnie zamówienie ma mniej niż 45 dni od dzisiejszej daty, klient jest postrzegany jako aktywny. Jeśli nie ma zamówienia w ciągu 45 dni od dzisiaj, klient jest nieaktywny.
Dodamy kolumnę niestandardową i nazwiemy ją Today . Następnie dodaj DateTime.LocalNow , aby podać nam aktualną datę i godzinę, a następnie Date.From , aby podać nam tylko część daty.
Zmieńmy to na typ danych daty, a następnie przenieśmy kolumnę na początek.
Istnieje prosty sposób na utworzenie odejmowania między dwiema kolumnami dat. Po prostu zaznacz te dwie daty, kliknij Daty na wstążce, a następnie kliknij Odejmij dni .
To da ci różnicę między tymi dwiema datami pod względem liczby dni. Nazwijmy tę nową kolumnę Dni przed dniem dzisiejszym.
Następnym krokiem jest znalezienie minimalnej liczby dni poprzedzających dzisiejszy dzień, co oznacza ostatnie zamówienie dla każdego numeru konta. Jeśli ta liczba jest mniejsza lub równa 45, jest aktywna.
Zróbmy kolejne Group By , następnie Advanced , a następnie Account Number .
Ponownie użyjemy All Data dla nowej nazwy kolumny i All Rows dla operacji.
Tym razem dodamy minimalną liczbę dni pomiędzy z minimalną operacją i liczbę dni poprzedzających dzisiaj jako kolumnę. To da nam najnowsze zamówienie.
Następnie rozwijamy Wszystkie dane i usuwamy Numer konta .
Gdy to rozwiniemy, będziemy mieć minimalne dni między numerami kont.
Na koniec dodamy kolejną kolumnę niestandardową i nazwiemy ją Czas klienta . Umieścimy parametr „co, jeśli”, gdzie jeśli nasza minimalna liczba dni pomiędzy jest mniejsza lub równa 45, to jest aktywna lub zablokowana .
Usuwanie niepotrzebnych kolumn
Ponieważ mamy teraz wiele kolumn pomocniczych, kliknijmy Wybierz kolumny i usuńmy te, których nie potrzebujemy.
Usuniemy kolumny Count , Today , Days Before to Today i Min Days Between . Mamy teraz tylko oryginalną tabelę faktów oraz kolumny Typ klienta i Czas klienta .
Zamiast trzymać je w tabeli faktów, skopiujmy tę tabelę.
Zduplikowaną tabelę nazwiemy Account Flags .
Wróćmy do tabeli Transakcje i usuńmy pola Client Type i Client Timing .
Mamy teraz oryginalną tabelę faktów i tabelę Flagi kont.
W przypadku tabeli Flagi kont nie potrzebujemy pól Typ klienta i Czas klienta , więc je usuwamy. Po prostu podświetlamy wszystkie te pola, usuwamy wiersze i usuwamy duplikaty.
Mamy teraz naszą tabelę wymiarów śmieci. Pozostało tylko nacisnąć Zamknij i zastosuj . Następnym krokiem jest połączenie Numeru Konta z naszej tabeli Flagi Konta z Numerem Konta w naszej tabeli Transakcje .
Mamy relację jeden-do-wielu między tabelą Transactions (która jest naszą tabelą faktów) a tabelą Account Flags (która jest naszą tabelą wymiarów śmieci).
Budowanie relacji modelu danych w usłudze LuckyTemplates
Modelowanie danych w usłudze LuckyTemplates: wskazówki i najlepsze praktyki
Wniosek
Upuśćmy wymiary Czas klienta i Typ klienta na nasze płótno i przekształćmy je w fragmentatory. Możemy teraz zrobić dokładnie to, co członek chciał zrobić na początku, czyli wyciąć na podstawie tych atrybutów.
Jeśli klikniemy na Multi-Order, pozostawi nas tylko z tymi, które mają wiele zamówień, a jeśli wybierzemy Single-Order, pozostawi nas z tymi, które mają jeden zakup.
Podsumowując, to jest w zasadzie wymiar śmieciowy i sposób jego tworzenia. Jest to bardzo przydatna technika, jeśli masz kilka różnych flag o niskiej liczności, które chcesz skutecznie włączyć do swojego modelu danych.
Technika grupowania według wszystkich rzędów jest niezwykle przydatna do tworzenia tych śmieciowych wymiarów. Mam nadzieję, że uznałeś to za pomocne i jak zawsze.
W tym samouczku omówimy pakiet dplyr, który umożliwia sortowanie, filtrowanie, dodawanie i zmianę nazw kolumn w języku R.
Odkryj różnorodne funkcje zbierania, które można wykorzystać w Power Automate. Zdobądź praktyczne informacje o funkcjach tablicowych i ich zastosowaniu.
Z tego samouczka dowiesz się, jak ocenić wydajność kodów DAX przy użyciu opcji Uruchom test porównawczy w DAX Studio.
Czym jest self w Pythonie: przykłady z życia wzięte
Dowiesz się, jak zapisywać i ładować obiekty z pliku .rds w R. Ten blog będzie również omawiał sposób importowania obiektów z R do LuckyTemplates.
Z tego samouczka języka kodowania DAX dowiesz się, jak używać funkcji GENERUJ i jak dynamicznie zmieniać tytuł miary.
W tym samouczku omówiono sposób korzystania z techniki wielowątkowych wizualizacji dynamicznych w celu tworzenia szczegółowych informacji na podstawie dynamicznych wizualizacji danych w raportach.
W tym artykule omówię kontekst filtra. Kontekst filtrowania to jeden z głównych tematów, z którym każdy użytkownik usługi LuckyTemplates powinien zapoznać się na początku.
Chcę pokazać, jak usługa online LuckyTemplates Apps może pomóc w zarządzaniu różnymi raportami i spostrzeżeniami generowanymi z różnych źródeł.
Dowiedz się, jak obliczyć zmiany marży zysku przy użyciu technik, takich jak rozgałęzianie miar i łączenie formuł języka DAX w usłudze LuckyTemplates.