Wio Chmuro (Cloud) ….

Cloud Computing

wirtualizacja: Z technicznego punktu widzenia wirtualizacja to emulacja. Pamięć wirtualna to użycie dysku do przechowywania aktywnych obszarów pamięci w celu zwiększenia dostępnej pamięci. W środowisku wirtualnym na jednym komputerze działa oprogramowanie, które pozwala mu emulować inny komputer. Ten rodzaj emulacji jest powszechnie znany jako wirtualizacja

W3C: Konsorcjum World Wide Web. Organizacja koordynująca standardy dla sieci WWW.

Web service (usługa sieci Web): komponent oprogramowania utworzony za pomocą interfejsu składającego się z definicji WSDL, definicji schematu XML i definicji WS-Policy. Łącznie komponenty można nazwać umową serwisową – lub alternatywnie API.

workflow (przepływ pracy): Ta sekwencja kroków przeprowadza proces biznesowy. Technologia przepływu pracy automatyzuje przepływ informacji między krokami.

World Wide Web: System zbudowany na bazie Internetu, który wyświetla hiperłączone strony informacji, które mogą zawierać różnorodne formaty danych, w tym multimedia.

WSCI: Web Services Choreography Interface. Język opisu interfejsu oparty na XML, który opisuje przepływ wiadomości wymienianych przez usługę sieci Web, gdy uczestniczy ona w choreograficznych interakcjach z innymi usługami.

WSDL: język definicji usług internetowych. Format XML opisujący usługi sieciowe.

WS-Policy: Struktura zasad usług sieciowych, która zapewnia sposób wyrażania możliwości, wymagań i cech komponentów oprogramowania w systemie usług sieciowych.

WSRP: Usługi WWW dla zdalnych portletów. Protokół umożliwiający portletom komunikowanie się przy użyciu standardowych interfejsów usług WWW

Agregowanie i porządkowanie danych

Mamy teraz uporządkowane dane do tego stopnia, że ​​możemy zacząć je analizować! W poprzedniej sekcji poświęciliśmy dużo czasu na prawidłowe sformatowanie danych i zidentyfikowanie odpowiednich wpisów do naszej analizy. W tej sekcji zajmiemy się danymi, aby jeszcze bardziej zawęzić naszą uwagę. Te dane mają dwa podstawowe wymiary: przestrzeń (gdzie obserwacja miała miejsce) i czas (kiedy miała miejsce obserwacja). Skupiliśmy się na tym poprzednio, ale tutaj skupimy się na drugim. Po pierwsze, używamy funkcji podsumowania w kolumnie DateOccurred, aby poznać ten chronologiczny zakres danych:

summary (ufo.us $ DateOccurred)

Min. 1st Qu. Mediana oznacza 3. kwartę Max.

„1400-06-30” „1999-09-06” „2004-01-10” „2001-02-13” „2007-07-26” „30.08.2010”

Zaskakujące jest to, że dane te pochodzą z dawna; najstarsze obserwacje UFO pochodzą z 1400 roku! Biorąc pod uwagę tę wartość odstającą, następne pytanie brzmi: w jaki sposób te dane są rozłożone w czasie? I czy warto analizować całe szeregi czasowe? Szybkim sposobem na to wizualnie jest zbudowanie histogramu. W dalszej części omówimy histogramy bardziej szczegółowo, ale na razie powinieneś wiedzieć, że histogramy pozwalają na binowanie danych według określonego wymiaru i obserwowanie częstotliwości, z jaką dane wpadają do tych pojemników. Wymiar zainteresowania jest tutaj czasem, dlatego tworzymy histogram, który łączy dane w czasie:

quick.hist <-ggplot (ufo.us, aes (x = DateOccurred)) + geom_histogram () +

scale_x_date (major = „50 lat”)

ggsave (plot = quick.hist, filename = “../ images / quick_hist.png”, wysokość = 6, szerokość = 8)

stat_bin: domyślnie binwidth to zakres / 30.

Użyj „binwidth = x”, aby to dostosować.

Należy tutaj zwrócić uwagę na kilka rzeczy. To jest nasze pierwsze użycie pakietu ggplot2, którego używamy w tej książce do wszystkich naszych wizualizacji danych. W tym przypadku tworzymy bardzo prosty histogram, który wymaga tylko jednego wiersza kodu. Najpierw tworzymy obiekt ggplot i przekazujemy mu ramkę danych UFO jako początkowy argument. Następnie ustawiamy estetykę osi x na kolumnę DateOccurred, ponieważ jest to częstotliwość, którą chcemy zbadać. W przypadku ggplot2 zawsze musimy pracować z ramkami danych, a pierwszym argumentem do utworzenia obiektu ggplot musi być zawsze ramka danych. ggplot2 to implementacja R gramatyki grafiki Lelanda Wilkinsona. Oznacza to, że pakiet jest zgodny z tą szczególną filozofią wizualizacji danych, a wszystkie wizualizacje zostaną zbudowane jako seria warstw. Dla tego histogramu, pokazanego na poniższym rysunku, początkową warstwą są dane osi x, a mianowicie daty obserwacji UFO.

 Następnie dodajemy warstwę histogramu z funkcją geom_histogram. W takim przypadku użyjemy domyślnych ustawień tej funkcji, ale jak zobaczymy później, to domyślne ustawienie często nie jest dobrym wyborem. Wreszcie, ponieważ dane te obejmują tak długi okres czasu, przeskalujemy etykiety osi X, aby pojawiały się co 50 lat za pomocą funkcji scale_x_date. Po zbudowaniu obiektu ggplot używamy funkcji ggsave do wyświetlania wizualizacji w pliku. Możemy również użyć> print (quick.hist), aby wydrukować wizualizację na ekranie. Zwróć uwagę na komunikat ostrzegawczy, który jest drukowany podczas rysowania wizualizacji. Istnieje wiele sposobów binowania danych na histogramie, a omówimy to szczegółowo w następnym rozdziale, ale to ostrzeżenie jest dostarczone, aby poinformować dokładnie, jak ggplot2 domyślnie binninguje. Jesteśmy teraz gotowi eksplorować dane dzięki tej wizualizacji. Wyniki tej analizy są surowe. Zdecydowana większość danych pochodzi z 1960 r i 2010, przy czym większość obserwacji UFO miała miejsce w ciągu ostatnich dwóch dekad. Dlatego dla naszych celów skupimy się tylko na tych obserwacjach, które miały miejsce w latach 1990–2010. Pozwoli nam to wykluczyć wartości odstające i porównać względnie podobne jednostki podczas analizy. Tak jak poprzednio, użyjemy funkcji podzestawu, aby utworzyć nową ramkę danych spełniająca te kryteria:

ufo.us <-subset (ufo.us, DateOccurred> = as.Date (“1990-01-01”))

nrow (ufo.us)

# [1] 46347

Chociaż usuwa to o wiele więcej wpisów, niż wyeliminowaliśmy podczas czyszczenia danych, nadal pozostaje nam ponad 46 000 obserwacji do analizy. Aby zobaczyć różnicę, ponownie generujemy histogram danych podzbioru na rysunku

 Widzimy, że w tej próbce jest znacznie więcej zmian. Następnie musimy zacząć organizować dane w taki sposób, aby można je było wykorzystać do odpowiedzi na nasze zasadnicze pytanie: co, jeśli w ogóle, istnieje sezonowa zmienność dla obserwacji UFO w stanach USA? Aby rozwiązać ten problem, musimy najpierw zapytać: co rozumiemy przez „sezonowość”? Istnieje wiele sposobów agregowania danych szeregów czasowych w odniesieniu do pór roku: według tygodnia, miesiąca, kwartału, roku itp. Ale jaki sposób agregowania naszych danych jest najbardziej odpowiedni tutaj? Kolumna DateOccurred zawiera informacje o obserwacji UFO z dnia na dzień, ale występuje znaczna niespójność pod względem zasięgu w całym zestawie. Musimy agregować dane w sposób, który umieszcza ilość danych dla każdego stanu na płaszczyznach względnie poziomych. W takim przypadku najlepszym rozwiązaniem jest robienie tego z miesiąca na miesiąc. Ta agregacja najlepiej odpowiada również na sedno naszego pytania, ponieważ agregacja miesięczna da dobry wgląd w zmiany sezonowe. Musimy policzyć liczbę obserwacji UFO, które miały miejsce w każdym stanie przez wszystkie kombinacje miesięczne w latach 1990–2010. Najpierw będziemy musieli utworzyć nową kolumnę w danych, która odpowiada obecnym latom i miesiącom. Użyjemy funkcji strftime do konwersji obiektów Date na ciąg formatu „RRRR-MM”. Tak jak poprzednio, odpowiednio ustawimy parametr formatu, aby uzyskać ciągi znaków:

ufo.us $ YearMonth <-strftime (ufo.us $ DateOccurred, format = “% Y-% m”)

Zauważ, że w tym przypadku nie użyliśmy funkcji transformacji, aby dodać nową kolumnę do ramki danych. Po prostu odwołaliśmy się do nazwy kolumny, która nie istniała, i R automatycznie ją dodał. Przydatne są obie metody dodawania nowych kolumn do ramki danych, a my przełączamy się między nimi w zależności od konkretnego zadania. Następnie chcemy policzyć, ile razy każda kombinacja stanu i rok-miesiąc występuje w danych. Po raz pierwszy użyjemy funkcji ddply, która jest częścią niezwykle użytecznej biblioteki plyr do manipulowania danymi. Rodzina funkcji plyr działa trochę jak narzędzia do agregacji danych w stylu zmniejszania mapy, które zyskały na popularności w ciągu ostatnich kilku lat. Próbują pogrupować dane w określony sposób, który był istotny dla wszystkich obserwacji, a następnie wykonać obliczenia dla każdej z tych grup i zwrócić wyniki. W tym zadaniu chcemy pogrupować dane według skrótów stanu i utworzonej właśnie kolumny rok-miesiąc. Po zgrupowaniu danych jako takich liczymy liczbę wpisów w każdej grupie i zwracamy to jako nową kolumnę. Tutaj po prostu użyjemy funkcji nrow, aby zmniejszyć dane o liczbę wierszy w każdej grupie:

sightings.counts<-ddply(ufo.us,.(USState,YearMonth), nrow)

head(sightings.counts)

USState YearMonth V1

1 ak 1990-01 1

2 ak 1990-03 1

3 ak 1990-05 1

4 ak 1993-11 1

5 ak 1994-11 1

6 ak 1995-01 1

Mamy teraz liczbę obserwacji UFO dla każdego stanu według roku i miesiąca. Jednak z połączenia głównego w tym przykładzie możemy zauważyć, że może być problem z użyciem danych, ponieważ zawiera wiele brakujących wartości. Przykładowo, widzimy, że na Alasce miało miejsce jedno obserwowanie UFO w styczniu, marcu i maju 1990 r., Ale nie ma wpisów dotyczących lutego i kwietnia. Przypuszczalnie w tych miesiącach nie było obserwacji UFO, ale dane nie zawierają wpisów dotyczących niewiedzy, więc musimy cofnąć się i dodać je jako zera. Potrzebujemy wektora lat i miesięcy obejmującego cały zestaw danych. Na tej podstawie możemy sprawdzić, czy są już w danych, a jeśli nie, dodaj je jako zera. Aby to zrobić, utworzymy sekwencję dat za pomocą funkcji seq.Date, a następnie sformatujemy je, aby pasowały do ​​danych w naszej ramce danych:

date.range<-seq.Date(from=as.Date(min(ufo.us$DateOccurred)),

to=as.Date(max(ufo.us$DateOccurred)), by=”month”)

date.strings<-strftime(date.range, “%Y-%m”)

Dzięki nowemu wektorowi date.strings musimy utworzyć nową ramkę danych, która ma wszystkie miesiące i stany roku. Wykorzystamy to do wykonania dopasowania z danymi obserwacji UFO. Tak jak poprzednio, użyjemy funkcji lapply do utworzenia kolumn, a funkcji do.call do przekształcenia tego w macierz, a następnie w ramkę danych:

states.dates<-data.frame(do.call(rbind, states.dates), stringsAsFactors=FALSE)

head(states.dates)

s date.strings

1 ak 1990-01

2 ak 1990-02

3 ak 1990-03

4 ak 1990-04

5 ak 1990-05

6 ak 1990-06

Ramka danych States.dates zawiera teraz wpisy dla każdego roku, miesiąca i kombinacji stanów możliwych w danych. Pamiętaj, że dla Alaski są teraz wpisy z lutego i marca 1990 r. Aby dodać brakujące zera do danych obserwacji UFO, musimy połączyć te dane z naszą oryginalną ramką danych. W tym celu wykorzystamy funkcję scalania, która pobiera dwie uporządkowane ramki danych i próbuje scalić je według wspólnych kolumn. W naszym przypadku mamy dwie ramki danych uporządkowane alfabetycznie według skrótów państwowych w USA i chronologicznie według roku i miesiąca. Musimy powiedzieć funkcji, przez które kolumny scalić te ramki danych. Ustawimy parametry by.xi by.y zgodnie z pasującymi nazwami kolumn w każdej ramce danych. Na koniec ustawiamy parametr all na PRAWDA, który instruuje funkcję, aby zawierała wpisy, które nie pasują i wypełniała je NA. Wpisami w kolumnie V1 będą wpisy stanu, roku i miesiąca, dla których nie zaobserwowano UFO:

all.sightings<-merge(states.dates,sightings.counts,by.x=c(“s”,”date.strings”),

by.y=c(“USState”,”YearMonth”),all=TRUE)

head(all.sightings)

s date.strings V1

1 ak 1990-01 1

2 ak 1990-02 NA

3 ak 1990-03 1

4 ak 1990-04 NA

5 ak 1990-05 1

6 ak 1990-06 NA

Ostatnimi krokami agregacji danych są proste porządki. Najpierw ustawimy nazwy kolumn w nowej ramce danych all.sightings na coś znaczącego. Odbywa się to dokładnie tak samo, jak na początku. Następnie przekonwertujemy wpisy NA na zera, ponownie za pomocą funkcji is.na. Na koniec przekonwertujemy kolumny YearMonth i State na odpowiednie typy. Używając wektora date.range, który utworzyliśmy w poprzednim kroku i funkcji rep, aby utworzyć nowy wektor, który powtarza dany wektor, zastępujemy ciągi roku i miesiąca odpowiednim obiektem Date. Ponownie lepiej jest przechowywać daty jako obiekty Date niż ciągi, ponieważ możemy matematycznie porównywać obiekty Date, ale nie możemy tego łatwo zrobić z ciągami. Podobnie skróty stanu są lepiej reprezentowane jako zmienne kategorialne niż łańcuchy, więc konwertujemy je na typy czynników.

names(all.sightings)<-c(“State”,”YearMonth”,”Sightings”)

all.sightings$Sightings[is.na(all.sightings$Sightings)]<-0

all.sightings$YearMonth<-as.Date(rep(date.range,length(us.states)))

all.sightings$State<-as.factor(toupper(all.sightings$State))

Jesteśmy teraz gotowi do wizualnej analizy danych!

TUV…Chmuro (Cloud)

Cloud Computing

TCP/IP: Protokół kontroli transmisji / protokół internetowy. Złożony stos protokołów komunikacyjnych leżących u podstaw Internetu. Wszystkie dane są dzielone na małe pakiety, które są wysyłane niezależnie przez sieć i ponownie składane w miejscu docelowym.

thin client (cienki klient): sprzęt kliencki w środowisku klient / serwer, który jest zależny od serwera do ładowania aplikacji. Większość sprzętu zaprojektowanego do tego celu jest podobna do komputera typu cut-down, bez napędu dyskietek lub dysku twardego.

throughput (przepustowość): Szybkość przeprowadzania transakcji w systemie.

TLS: Transport Layer Security. Nowsza nazwa dla SSL. Zobacz także SSL.

TQM: Total Quality Management. Popularny program poprawy jakości.

transakcja: czynność komputerowa reprezentująca zdarzenie biznesowe, takie jak obciążenie rachunku. Kiedy rozpoczyna się transakcja, musi się ona zakończyć lub wcale.

UDDI: Uniwersalny opis, odkrywanie i integracja. Niezależny od platformy rejestr usług oparty na XML sponsorowany przez OASIS. Zobacz także OASIS i XML.

VMware: VMware zapewnia technologię, która obecnie dominuje w wirtualizacji serwerów. Jednak w chmurze hiperwizor Xen jest również szeroko stosowany, ponieważ jest open source.

VPS: wirtualny prywatny serwer. Jest to serwer wirtualny dedykowany jednemu klientowi, podczas gdy serwer, na którym rezyduje, jest w rzeczywistości współużytkowany przez kilku klientów, którzy są całkowicie nieświadomi siebie. Każdy VPS działa we własnym systemie operacyjnym, przepustowości i przestrzeni dyskowej i może być uruchamiany indywidualnie.

Postępowanie z danymi poza naszym zakresem

Ostatnim problemem związanym z czyszczeniem danych, który musimy wziąć pod uwagę, są wpisy spełniające formularz „Miasto, stan”, ale nie pochodzą ze Stanów Zjednoczonych. W szczególności dane obejmują kilka obserwacji UFO z Kanady, które również przyjmują tę formę. Na szczęście żaden ze skrótów prowincji kanadyjskiej nie pasuje do skrótów państwowych w USA. Możemy wykorzystać te informacje do zidentyfikowania pozycji spoza USA, konstruując wektor skrótów stanów USA i zachowując tylko te wpisy w kolumnie USState, które pasują do wpisu w tym wektorze:

us.states<-c(“ak”,”al”,”ar”,”az”,”ca”,”co”,”ct”,”de”,”fl”,”ga”,”hi”,”ia”,”id”,”il”,

“in”,”ks”,”ky”,”la”,”ma”,”md”,”me”,”mi”,”mn”,”mo”,”ms”,”mt”,”nc”,”nd”,”ne”,”nh”,

“nj”,”nm”,”nv”,”ny”,”oh”,”ok”,”or”,”pa”,”ri”,”sc”,”sd”,”tn”,”tx”,”ut”,”va”,”vt”,

“wa”,”wi”,”wv”,”wy”)

ufo$USState<-us.states[match(ufo$USState,us.states)]

ufo$USCity[is.na(ufo$USState)]<-NA

Aby znaleźć wpisy w kolumnie USState, które nie pasują do skrótu stanu USA, używamy funkcji dopasowania. Ta funkcja przyjmuje dwa argumenty: po pierwsze, wartości, które należy dopasować, a po drugie, wartości, które należy dopasować. Funkcja zwraca wektor o tej samej długości co pierwszy argument, w którym wartości są indeksem wpisów w tym wektorze, które pasują do pewnej wartości w drugim wektorze. Jeśli nie zostanie znalezione dopasowanie, funkcja domyślnie zwraca NA. W naszym przypadku interesuje nas tylko to, które wpisy są NA, ponieważ są to wpisy, które nie pasują do stanu USA. Następnie używamy funkcji is.na, aby znaleźć, które wpisy nie są stanami USA i resetujemy je do NA w kolumnie USState. Na koniec ustawiliśmy również te wskaźniki w kolumnie USCity na NA w celu zachowania spójności. Nasza oryginalna ramka danych została teraz zmanipulowana do tego stopnia, że ​​możemy z niej wydobyć tylko te dane, którymi jesteśmy zainteresowani. W szczególności chcemy podzbioru, który obejmuje tylko amerykańskie incydenty obserwacji UFO. Zastępując wpisy, które nie spełniały tych kryteriów w poprzednich krokach, możemy użyć polecenia podzestawu, aby utworzyć nową ramkę danych obejmującą tylko incydenty w USA:

ufo.us<-subset(ufo, !is.na(USState))

head(ufo.us)

DateOccurred DateReported Location ShortDescription Duration

1 1995-10-09 1995-10-09 Iowa City, IA <NA> <NA>

2 1995-10-10 1995-10-11 Milwaukee, WI <NA> 2 min.

3 1995-01-01 1995-01-03 Shelton, WA <NA> <NA>

4 1995-05-10 1995-05-10 Columbia, MO <NA> 2 min.

5 1995-06-11 1995-06-14 Seattle, WA <NA> <NA>

6 1995-10-25 1995-10-24 Brunswick County, ND <NA> 30 min.

LongDescription USCity USState

1 Man repts. witnessing “flash… Iowa City ia

2 Man on Hwy 43 SW of Milwauk… Milwaukee wi

3 Telephoned Report:CA woman v… Shelton wa

4 Man repts. son’s bizarre sig… Columbia mo

5 Anonymous caller repts. sigh… Seattle wa

6 Sheriff’s office calls to re… Brunswick County nd

Spoko…Chmura (Cloud)

Cloud Computing

SaaS: oprogramowanie jako usługa. Ta aplikacja samoobsługowa oparta jest na infrastrukturze chmurowej.

SAML: Standardowa struktura wymiany informacji o uwierzytelnianiu i autoryzacji (czyli poświadczeniach) w formacie XML o nazwie asercje

Sarbanes-Oxley: Ustawa o reformie rachunkowości spółek publicznych i ochronie inwestorów z 2002 r., Amerykańskie prawo podnoszące standardy dla wszystkich dyrektorów spółek publicznych w Stanach Zjednoczonych, skutkujące istotnymi nowymi wymaganiami dotyczącymi korporacyjnych systemów informatycznych.

skalowalność: w odniesieniu do sprzętu możliwość przejścia od małej do dużej mocy obliczeniowej przy tej samej architekturze. W odniesieniu do produktów programowych, takich jak bazy danych, odnosi się do spójności wydajności na jednostkę mocy wraz ze wzrostem zasobów sprzętowych.

skryptowy język:  komputerowy język programowania, który jest interpretowany i ma dostęp do wszystkich lub większości funkcji systemu operacyjnego. Typowe przykłady to Perl, Python, Ruby i JavaScript. Często łatwiej jest programować w języku skryptowym, ale powstałe programy działają na ogół wolniej niż programy utworzone w językach kompilowanych, takich jak C i C ++.

secure Web hosting (bezpieczny hosting): To środowisko hostingowe jest bezpieczne dzięki zastosowaniu certyfikatów Secure Socket Layer (SSL) i HTTPS. semantyka: w programowaniu komputerowym znaczenie danych w przeciwieństwie do reguł formatowania (składnia).

serwerów tablica: jest to zbiór typów pojedynczych serwerów, który jest zwykle używany do skalowania w poziomie. Zazwyczaj większość chmur prywatnych i publicznych jest budowana jako macierze serwerowe i zarządzana za pomocą oprogramowania do wirtualizacji.

serwerów farma: Obiekt pełen serwerów komputerowych, często potrzebny do prowadzenia dużych witryn internetowych.

service (usługa): celowe działanie realizowane na rzecz znanego celu. Usługi często składają się z grupy usług składowych, z których niektóre mogą również zawierać usługi składowe. Usługi zawsze coś przekształcają i uzupełniają, dostarczając dane wyjściowe.

service catalog (katalog usług): katalog usług IT świadczonych w całym przedsiębiorstwie, w tym informacje takie jak opis usługi, prawa dostępu i własność.

Service Desk: Pojedynczy punkt kontaktowy dla użytkowników i klientów IT, którzy mogą zgłaszać wszelkie problemy związane z usługą IT (lub, w niektórych przypadkach, z obsługą klienta IT).

service level agreement (umowa o gwarantowanym poziomie usług): SLA. Dokument odzwierciedlający zrozumienie między użytkownikiem usługi a usługodawcą co do jakości i terminowości.

service management: (zarządzanie usługami): monitorowanie i optymalizacja usługi w celu zapewnienia, że ​​spełnia ona krytyczne wyniki, które cenią sobie klienci i interesariusze.

serwlet: program działający na serwerze WWW w odpowiedzi na działanie podjęte przez użytkownika za pośrednictwem przeglądarki.

silos: w IT: aplikacja z jednym wąskim celem, takim jak zarządzanie zasobami ludzkimi lub kontrola zapasów, bez zamiaru lub przygotowania do użycia przez innych.

srebrna kula: proponowane rozwiązanie, które wydaje się zbyt piękne, aby mogło być prawdziwe i zwykle nim jest.

Simple Storage Service: S3. Ta rozproszona usługa magazynowania od Amazon stanowi część AWS. Amazon zapewnia możliwość odczytu, zapisu i usuwania obiektów (danych) o wielkości do 5 gigabajtów. To nie jest funkcja bazy danych – tylko miejsce do przechowywania i uzyskiwania dostępu do plików.

Six Sigma: Termin statystyczny oznaczający sześć standardowych odchyleń od normy. Również nazwa programu poprawy jakości, którego celem jest zmniejszenie liczby błędów do jednego na milion.

SMTP: Simple Mail Transfer Protocol. Podstawowa metoda używana do przesyłania wiadomości e-mail przez Internet.

SOA: architektura zorientowana na usługi. Podejście do budowania aplikacji, które wdraża procesy biznesowe lub usługi przy użyciu zestawu luźno połączonych komponentów czarnej skrzynki zorganizowanych w celu zapewnienia ściśle określonego poziomu usług.

SQL: Structured Query Language. Najpopularniejszy język komputerowy do uzyskiwania dostępu do baz danych i manipulowania nimi.

SSL: Secure Sockets Layer. Popularna metoda nawiązywania bezpiecznych połączeń przez Internet, po raz pierwszy wprowadzona przez Netscape.

standardy: Podstawowy zestaw wspólnych, powtarzalnych najlepszych praktyk i protokołów, które zostały uzgodnione przez grupę biznesową lub branżową. Zazwyczaj dostawcy, branżowe grupy użytkowników i użytkownicy końcowi współpracują w celu opracowania standardów opartych na szerokiej wiedzy specjalistycznej dużej liczby interesariuszy. Organizacje mogą wykorzystać te standardy jako wspólną podstawę i wprowadzać innowacje na ich podstawie.

subroutine (podprogram): fragment kodu komputerowego, który może być łatwo używany (wywoływany) przez wiele innych programów, o ile znajdują się na tym samym komputerze i (zwykle) są napisane w tym samym języku programowania.

Porządkowanie danych o lokalizacji

Aby manipulować danymi w ten sposób, najpierw zbudujemy funkcję, która pobiera ciąg znaków jako dane wejściowe i wykonuje czyszczenie danych. Następnie uruchomimy tę funkcję na danych lokalizacji za pomocą jednej z wektoryzowanych funkcji wprowadzania:

get.location<-function(l) {

split.location<-tryCatch(strsplit(l,”,”)[[1]], error= function(e) return(c(NA, NA)))

clean.location<-gsub(“^ “,””,split.location)

if (length(clean.location)>2) {

return(c(NA,NA))

}

else {

return(clean.location)

}

}

W tej funkcji dzieje się kilka subtelnych rzeczy. Najpierw zauważ, że zawijamy polecenie strsplit w funkcji obsługi błędów R, tryCatch. Ponownie, nie wszystkie wpisy mają poprawną formę „Miasto, państwo”, a niektóre nawet nie zawierają przecinka. Funkcja strsplit zgłosi błąd, jeśli rozdzielony znak nie zostanie dopasowany; dlatego musimy złapać ten błąd. W naszym przypadku, gdy nie ma przecinka do rozdzielenia, zwrócimy wektor NA, aby wskazać, że ten wpis jest nieprawidłowy. Następnie oryginalne dane zawierały wiodące białe znaki, więc użyjemy funkcji gsub (część pakietu funkcji R do pracy z wyrażeniami regularnymi), aby usunąć wiodące białe znaki z każdego znaku. Na koniec dodajemy dodatkowe sprawdzenie, aby upewnić się, że zwracane są tylko te wektory lokalizacji o długości dwa. Wiele pozycji poza USA ma wiele przecinków, tworząc większe wektory z funkcji strsplit. W takim przypadku ponownie zwrócimy wektor NA. Po zdefiniowaniu funkcji będziemy używać funkcji lapply, skrót od „list-apply”, aby iterować tę funkcję po wszystkich ciągach w kolumnie Lokalizacja. Jak wspomniano, członkowie rodziny zastosowania funkcji w R są niezwykle przydatni. Są one zbudowane z zastosowania formy (wektor, funkcja) i zwracają wyniki wektorowego zastosowania funkcji do wektora w określonej formie. W naszym przypadku używamy lapply, które zawsze zwraca listę:

city.state<-lapply(ufo$Location, get.location)

head(city.state)

[[1]]

[1] “Iowa City” “IA”

[[2]]

[1] “Milwaukee” “WI”

[[3]]

[1] “Shelton” “WA”

[[4]]

[1] “Columbia” “MO”

[[5]]

[1] “Seattle” “WA”

[[6]]

[1] “Brunswick County” “ND”

Jak widać w tym przykładzie, lista w R jest strukturą danych w stylu klucz-wartość, w której klucze są indeksowane przez podwójny nawias, a wartości są zawarte w pojedynczym nawiasie. W naszym przypadku klucze są po prostu liczbami całkowitymi, ale listy mogą również zawierać łańcuchy jako klucze. Chociaż wygodnie jest przechowywać dane na liście, nie jest pożądane, ponieważ chcielibyśmy dodać informacje o mieście i stanie do ramki danych jako osobne kolumny. Aby to zrobić, musimy przekonwertować tę długą listę na macierz dwukolumnową, z danymi miasta jako kolumną wiodącą:

location.matrix<-do.call(rbind, city.state)

ufo<-transform(ufo, USCity=location.matrix[,1], USState=tolower(location.matrix[,2]),

stringsAsFactors=FALSE)

Aby skonstruować macierz z listy, używamy funkcji do.call. Podobnie do funkcji Apply, do.call wykonuje wywołanie funkcji na liście. Często używamy kombinacji lapply i do.call do manipulowania danymi. W poprzednim przykładzie przekazujemy funkcję rbind, która „wiąże wiersz” wszystkich wektorów z listy city.state w celu utworzenia macierzy. Aby wprowadzić to do ramki danych, używamy funkcji transformacji. Tworzymy dwie nowe kolumny: USCity i USState odpowiednio z pierwszej i drugiej kolumny location.matrix. Wreszcie skróty stanu są niespójne, z niektórymi dużymi i innymi małymi, więc używamy funkcji tolower, aby wszystkie były małe.

Razem Chmuro (Cloud) !!!

Cloud Computing

real time (w czasie rzeczywistym): forma przetwarzania, w której system komputerowy akceptuje i aktualizuje dane w tym samym czasie, przekazując natychmiastowe wyniki, które wpływają na źródło danych.

real-time event processing  (przetwarzanie zdarzeń w czasie rzeczywistym): klasa aplikacji wymagających szybkiej reakcji na działania podejmowane na świecie. Typowe przykłady obejmują automatyczny obrót akcjami i identyfikację częstotliwości radiowej (RFID).

rejestr: pojedyncze źródło wszystkich metadanych potrzebnych do uzyskania dostępu do usługi sieci Web lub komponentu oprogramowania.

repozytorium: baza danych dla oprogramowania i komponentów, z naciskiem na kontrolę wersji i zarządzanie konfiguracją (innymi słowy, przechowują dobre rzeczy).

response time (czas odpowiedzi): czas od momentu złożenia transakcji przez użytkownika lub aplikację do momentu, w którym użytkownik końcowy lub aplikacja otrzyma ostateczny wynik tej transakcji.

RFID: identyfikacja częstotliwości radiowej. Technologia wykorzystująca małe, niedrogie układy scalone przymocowane do produktów (a nawet zwierząt), które następnie przesyłają unikalny numer identyfikacyjny na niewielką odległość do specjalnego nadajnika / odbiornika radiowego.

RPC: zdalne wywołanie procedury. Sposób, w jaki program działający na jednym komputerze może uruchomić podprogram na innym komputerze.

Ruby on Rails: Ruby to język programowania, a Rails to platforma Ruby zbudowana specjalnie dla aplikacji internetowych. Jest uważany za wydajny język do programowania aplikacji internetowych.

Konwertowanie ciągów dat i postępowanie ze zniekształconymi danymi

Aby rozwiązać ten problem, najpierw musimy zlokalizować wiersze z uszkodzonymi ciągami dat, a następnie zdecydować, co z nimi zrobić. Mamy szczęście w tym przypadku, ponieważ wiemy z błędu, że błędne wpisy są „zbyt długie”. Prawidłowo przeanalizowane ciągi zawsze będą miały osiem znaków, tj. „RRRRMMDD”. Aby znaleźć wiersze z problemami, musimy po prostu znaleźć te, które mają ciągi zawierające więcej niż osiem znaków. Jako najlepszą praktykę najpierw sprawdzamy dane, aby zobaczyć, jak wyglądają zniekształcone dane, aby lepiej zrozumieć, co poszło nie tak. W takim przypadku użyjemy head, działa jak poprzednio, aby sprawdzić dane zwrócone przez naszą logiczną instrukcję. Później, aby usunąć te błędne wiersze, użyjemy funkcji ifelse do skonstruowania wektora wartości PRAWDA i FAŁSZ, aby zidentyfikować wpisy o długości ośmiu znaków (PRAWDA) i te, które nie są (FAŁSZ). Ta funkcja jest wektoryzowaną wersją typowego if-else, przełącznika logicznego dla niektórych testów logicznych. Zobaczymy wiele przykładów operacji wektoryzowanych w R. Są one preferowanym mechanizmem iteracji danych, ponieważ często są – ale nie zawsze – bardziej wydajne niż jawne iteracje po wektorze:

head(ufo[which(nchar(ufo$DateOccurred)!=8 | nchar(ufo$DateReported)!=8),1])

[1] “ler@gnv.ifas.ufl.edu”

[2] “0000”

[3] “Callers report sighting a number of soft white balls of lights headingin

an easterly directing then changing direction to the west beforespeeding off to

the north west.”

[4] “0000”

[5] “0000”

[6] “0000”

good.rows<-ifelse(nchar(ufo$DateOccurred)>!=8 | nchar(ufo$DateReported)!=8,FALSE,

TRUE)

length(which(!good.rows))

[1] 371

ufo<-ufo[good.rows,]

Do wykonania tego wyszukiwania używamy kilku przydatnych funkcji R. Musimy znać długość łańcucha w każdym wpisie DateOccurred i DateReported, więc do obliczenia tego używamy funkcji nchar. Jeśli ta długość nie jest równa osiem, zwracamy FAŁSZ. Kiedy już mamy wektory booleanów, chcemy zobaczyć, ile wpisów w ramce danych zostało zniekształconych. Aby to zrobić, używamy polecenia what, aby zwrócić wektor indeksów wektorowych, które są FAŁSZ. Następnie obliczamy długość tego wektora, aby znaleźć liczbę złych wpisów. Ponieważ tylko 371 wierszy jest niezgodnych, najlepszą opcją jest po prostu usunięcie tych wpisów i zignorowanie ich. Na początku możemy się martwić, że utrata 371 wierszy danych jest złym pomysłem, ale jest ich ponad 60 000, więc po prostu zignorujemy te zniekształcone wiersze i będziemy kontynuować konwersję na typy dat:

ufo$DateOccurred<-as.Date(ufo$DateOccurred, format=”%Y%m%d”)

ufo$DateReported<-as.Date(ufo$DateReported, format=”%Y%m%d”)

Następnie będziemy musieli wyczyścić i uporządkować dane lokalizacji. Przypomnijmy z poprzedniego wezwania, że ​​wpisy dotyczące obserwacji UFO w Stanach Zjednoczonych przyjmują postać „City, State”. Możemy użyć integracji wyrażeń regularnych R, aby podzielić te ciągi na osobne kolumny i zidentyfikować te wpisy, które nie są zgodne. Ta ostatnia część, identyfikująca te, które nie są zgodne, jest szczególnie ważna, ponieważ jesteśmy zainteresowani jedynie obserwacją zmian w Stanach Zjednoczonych i wykorzystamy te informacje do wyodrębnienia tych wpisów.

Popatrz, Chmura (Cloud)

Cloud Computing

P2P: peer to peer. System sieciowy, w którym węzły w sieci wymieniają dane bezpośrednio, zamiast przechodzić przez serwer centralny.

PaaS: Platforma jako usługa. Jest to usługa w chmurze, która obejmuje nie tylko infrastrukturę (tj. Sprzęt i oprogramowanie operacyjne), ale także środowisko programistyczne i ewentualnie inne narzędzia cyklu życia oprogramowania.

Perl: Praktyczny ekstrakcja i język raportów. Potężny język skryptowy szeroko stosowany w administracji systemem, programowaniu WWW i innych działaniach.

PHP: procesor hipertekstowy PHP. Język skryptowy typu open source (pierwotnie zaprojektowany w Perlu) używany szczególnie do tworzenia dynamicznych stron internetowych.

portal: W środowisku komputerowym okno, które zawiera środki dostępu, często menu, do wszystkich aplikacji w całej sieci, które użytkownik może uruchomić. Często okno jest podzielone na mniejsze okna lub portlety, które zapewniają bezpośredni dostęp do aplikacji, takich jak kanały cen giełdowych lub wiadomości e-mail.

prywatna chmura: w przeciwieństwie do chmury publicznej, która jest ogólnie dostępna, chmura prywatna to zestaw zasobów obliczeniowych w korporacji, który obsługuje tylko korporację, ale który jest skonfigurowany do działania w sposób podobny do chmury w zakresie zarządzania.

programowanie w dużej mierze: podejście do opracowywania oprogramowania biznesowego, które koncentruje się na różnych zadaniach lub procesach biznesowych potrzebnych do uczynienia funkcji biznesowej – na przykład przetwarzania zamówienia lub sprawdzania dostępności produktu – w przeciwieństwie do zadań technicznych niskiego poziomu, takich jak otwieranie plik.

protokół: zestaw reguł używanych przez komputery do nawiązywania i utrzymywania komunikacji między sobą.

provisioning (inicjowanie obsługi): udostępnianie zasobów użytkownikom i oprogramowaniu. System udostępniania udostępnia aplikacje użytkownikom i udostępnia zasoby serwera dla aplikacji.

Ładowanie bibliotek i danych

Najpierw załadujemy pakiet ggplot2, którego użyjemy w końcowych etapach naszej analizy wizualnej:

biblioteka (ggplot2)

Podczas ładowania ggplot2 zauważysz, że ten pakiet ładuje również dwa inne wymagane pakiety: plyr i reshape. Oba te pakiety są używane do manipulowania i porządkowania danych w R, a my użyjemy plyr w tym przykładzie do agregowania i organizowania danych. Następnym krokiem jest załadowanie danych do R z pliku tekstowego ufo_awesome.tsv. Zauważ, że plik jest rozdzielany tabulatorami (stąd rozszerzenie pliku .tsv), co oznacza, że ​​będziemy musieli użyć funkcji read.delim do załadowania danych. Ponieważ R bardzo intensywnie wykorzystuje ustawienia domyślne, musimy szczególnie uważać na domyślne ustawienia parametrów funkcji, których używamy w naszych skryptach. Aby zobaczyć, jak możemy dowiedzieć się o parametrach w R, załóżmy, że nigdy wcześniej nie korzystaliśmy z funkcji read.delim i potrzebowaliśmy czytać pliki pomocy. Alternatywnie, załóżmy, że nie wiemy, że read.delim istnieje i musimy znaleźć funkcję do odczytu danych ograniczonych w ramce danych. R oferuje kilka przydatnych funkcji wyszukiwania pomocy:

?read.delim # Access a function’s help file

??base::delim # Search for ‘delim’ in all help files for functions

# in ‘base’

help.search(“delimited”) # Search for ‘delimited’ in all help files

RSiteSearch(“parsing text”) # Search for the term ‘parsing text’ on the R site.

W pierwszym przykładzie dołączamy znak zapytania na początku funkcji. Spowoduje to otwarcie pliku pomocy dla danej funkcji i jest to niezwykle przydatny skrót R. Możemy również wyszukiwać określone terminy w paczkach, używając kombinacji ?? i ::. Podwójne znaki zapytania wskazują poszukiwanie określonego terminu. W tym przykładzie szukamy wystąpienia terminu „delim” we wszystkich funkcjach podstawowych, używając podwójnego dwukropka. R pozwala także na przeprowadzanie mniej uporządkowanych wyszukiwań pomocy przy pomocy help.search i RSiteSearch. Funkcja help.search przeszuka wszystkie pliki pomocy w zainstalowanych pakietach pod kątem określonego terminu, który w poprzednim przykładzie jest „rozdzielany”. Alternatywnie możesz przeszukać stronę R, która zawiera pliki pomocy i archiwum list mailingowych, używając funkcji RSiteSearch. Należy pamiętać, że w żadnym wypadku nie jest to wyczerpujący przegląd R lub funkcji użytych w tej sekcji. Dlatego zalecamy korzystanie z tych funkcji wyszukiwania do samodzielnego odkrywania podstawowych funkcji R. Dla danych UFO jest kilka parametrów w read.delim, które będziemy musieli ustawić ręcznie, aby poprawnie odczytać dane. Najpierw musimy powiedzieć funkcji, w jaki sposób dane są rozdzielane. Wiemy, że jest to plik rozdzielany tabulatorami, dlatego ustawiamy sep na znak Tab. Następnie, gdy read.delim odczytuje dane, próbuje przekonwertować każdą kolumnę danych na typ danych R przy użyciu kilku heurystyk. W naszym przypadku wszystkie kolumny są ciągami, ale domyślnym ustawieniem dla wszystkich funkcji read. * Jest konwersja ciągów na typy czynników. Ta klasa jest przeznaczona dla zmiennych jakościowych, ale nie chcemy tego. W związku z tym musimy ustawić stringSsFactors = FALSE, aby temu zapobiec. W rzeczywistości zawsze dobrą praktyką jest wyłączanie tej wartości domyślnej, szczególnie podczas pracy z nieznanymi danymi. Ponadto dane te nie zawierają nagłówka kolumny jako pierwszego wiersza, więc musimy również wyłączyć tę wartość domyślną, aby zmusić R do nieużywania pierwszego wiersza danych jako nagłówka. Wreszcie, w danych jest wiele pustych elementów i chcemy ustawić je na specjalną wartość R NA. Aby to zrobić, jawnie definiujemy pusty ciąg jako na.string:

ufo<-read.delim(“data/ufo/ufo_awesome.tsv”, sep=”\t”, stringsAsFactors=FALSE,

header=FALSE, na.strings=””)

Termin „zmienna kategoryczna” odnosi się do rodzaju danych, które oznaczają przynależność obserwacji do kategorii. W statystykach zmienne kategorialne są bardzo ważne, ponieważ możemy być zainteresowani tym, co sprawia, że ​​pewne obserwacje określonego typu. W R reprezentujemy zmienne kategorialne jako typy czynników, które zasadniczo przypisują odniesienia numeryczne do etykiet ciągów. W tym przypadku konwertujemy niektóre ciągi – takie jak skróty stanu – na zmienne jakościowe za pomocą as.factor, który przypisuje unikalny numeryczny identyfikator każdemu skrótowi stanu w zbiorze danych. Powtórzymy ten proces wiele razy. Mamy teraz ramkę danych zawierającą wszystkie dane UFO! Ilekroć pracujesz z ramkami danych, zwłaszcza gdy pochodzą one z zewnętrznych źródeł danych, zawsze dobrze jest sprawdzić dane ręcznie. Dwie świetne funkcje do tego celu to głowa i ogon. Te funkcje wydrukują pierwsze i ostatnie sześć wpisów w ramce danych:

head(ufo)

V1 V2 V3 V4 V5 V6

1 19951009 19951009 Iowa City, IA <NA> <NA> Man repts. witnessing “flash..

2 19951010 19951011 Milwaukee, WI <NA> 2 min. Man on Hwy 43 SW of Milwauk..

3 19950101 19950103 Shelton, WA <NA> <NA> Telephoned Report:CA woman v..

4 19950510 19950510 Columbia, MO <NA> 2 min. Man repts. son’s bizarre sig..

5 19950611 19950614 Seattle, WA <NA> <NA> Anonymous caller repts. sigh..

6 19951025 19951024 Brunswick County, ND <NA> 30 min. Sheriff’s office calls to r

Pierwszym oczywistym problemem z ramką danych jest to, że nazwy kolumn są ogólne. Wykorzystując dokumentację tego zestawu danych jako odniesienie, możemy przypisać bardziej znaczące etykiety do kolumn. Posiadanie znaczących nazw kolumn dla ramek danych jest ważną najlepszą praktyką. Ułatwia to zrozumienie kodu i wyników, zarówno dla Ciebie, jak i innych odbiorców. Użyjemy funkcji nazw, która może albo uzyskać dostęp do etykiet kolumn dla struktury danych, albo przypisać je. Z dokumentacji danych konstruujemy wektor znaków, który odpowiada odpowiednim nazwom kolumn i przekazujemy go do funkcji nazw z ramką danych jako jedynym argumentem:

names(ufo)<-c(“DateOccurred”,”DateReported”,”Location”,”ShortDescription”,

“Duration”,”LongDescription”)

Z danych wyjściowych nagłówka i dokumentacji używanej do tworzenia nagłówków kolumn wiemy, że dwie pierwsze kolumny danych to daty. Podobnie jak w innych językach, R traktuje daty jako specjalny typ i będziemy chcieli przekonwertować ciągi dat na rzeczywiste typy dat. W tym celu użyjemy funkcji as.Date, która pobierze ciąg daty i spróbuje przekonwertować go na obiekt Date. Przy tych danych ciągi mają nietypowy format daty w postaci RRRMMDD. W związku z tym będziemy musieli określić ciąg formatu w as.Date, aby funkcja wiedziała, jak przekonwertować ciągi. Zaczynamy od konwersji kolumny DateOccurred:

ufo$DateOccurred<-as.Date(ufo$DateOccurred, format=”%Y%m%d”)

Error in strptime(x, format, tz = “GMT”) : input string is too long

Właśnie natrafiliśmy na nasz pierwszy błąd! Choć nieco tajemniczy, komunikat o błędzie zawiera podłańcuch „łańcuch wejściowy za długi”, co oznacza, że ​​niektóre wpisy w kolumnie DateOccurred są zbyt długie, aby pasowały do ​​podanego ciągu formatu. Dlaczego tak może być? Mamy do czynienia z dużym plikiem tekstowym, więc być może niektóre dane zostały zniekształcone w oryginalnym zestawie. Zakładając, że tak jest, te punkty danych nie zostaną poprawnie przeanalizowane podczas ładowania przez read.delim, a to spowodowałoby tego rodzaju błąd. Ponieważ mamy do czynienia z rzeczywistymi danymi, musimy wykonać pewne ręczne czyszczenie