Zastosowania bazy danych NoSQL w nauce o danych
Jak można wykorzystać bazy danych NoSQL, takie jak MongoDB, do analizy danych? Jakie funkcje w nich mogą sprawić, że analiza danych będzie szybsza i skuteczniejsza?
Szczerze mówiąc, większość baz danych NoSQL nie nadaje się zbyt dobrze do zastosowań w dużych zbiorach danych. W przypadku większości aplikacji do obsługi dużych zbiorów danych wydajność MongoDB w porównaniu z relacyjną bazą danych, taką jak MySQL, jest na tyle niska, że gwarantuje całkowite trzymanie się z dala od czegoś takiego jak MongoDB. Mając to na uwadze, istnieje kilka naprawdę przydatnych właściwości baz danych NoSQL, które z pewnością działają na twoją korzyść podczas pracy z dużymi zbiorami danych, chociaż prawdopodobieństwo tych korzyści przeważa ogólnie słabą wydajność NoSQL w porównaniu z SQL do odczytu intensywne operacje (najbardziej podobne do typowych przypadków użycia dużych zbiorów danych) są niskie.
* Brak schematu – jeśli pracujesz z dużą ilością nieustrukturyzowanych danych, podjęcie decyzji w sprawie schematu i sztywne zastosowanie go może być trudne. Bazy danych NoSQL w ogólności bardzo to wspierają i pozwalają na wstawianie dokumentów bez schematu w locie, co z pewnością nie jest czymś, co obsługuje baza danych SQL.
* JSON – jeśli pracujesz z dokumentami w stylu JSON zamiast z plikami CSV, zobaczysz dużą korzyść z używania czegoś takiego jak MongoDB jako warstwy bazy danych. Ogólnie rzecz biorąc, oszczędności związane z przepływem pracy nie przeważają jednak nad wydłużonymi czasami zapytań.
Łatwość obsługi – nie twierdzę, że bazy danych SQL są zawsze trudne w użyciu lub że Cassandra jest najłatwiejszą rzeczą na świecie, ale generalnie bazy danych NoSQL są łatwiejsze w konfiguracji i obsłudze niż bazy danych SQL. MongoDB jest tego szczególnie mocnym przykładem, znanym z tego, że jest jedną z najłatwiejszych w użyciu warstw bazy danych (poza SQLite). SQL radzi sobie także z normalizacją i istnieje spora część najlepszych praktyk SQL, które po prostu spowalniają proces programowania. Osobiście mogę zasugerować również sprawdzenie graficznych baz danych, takich jak Neo4j, które wykazują naprawdę dobrą wydajność dla niektórych typów zapytań, jeśli chcesz wybrać zaplecze dla aplikacji do nauki danych
Jedną z zalet podejścia NoSQL bez schematu jest to, że nie zatwierdzasz przedwcześnie i możesz zastosować odpowiedni schemat w czasie zapytania za pomocą odpowiedniego narzędzia, takiego jak Apache Drill. Zobacz tę prezentację po szczegóły. MySQL nie byłby moim pierwszym wyborem w kontekście dużych zbiorów danych.
Skalowalne wykrywanie wartości odstających / anomalii
Próbuję skonfigurować infrastrukturę Big Data przy użyciu Hadoop, Hive, Elastic Search (między innymi) i chciałbym uruchomić niektóre algorytmy na tych zbiorach danych. Chciałbym, żeby same algorytmy były skalowalne, co wyklucza używanie narzędzi takich jak Weka, R czy nawet RHadoop. Biblioteka Apache Mahout wydaje się być dobrą opcją i zawiera algorytmy dla zadań regresji i grupowania. To, co staram się znaleźć, to rozwiązanie do wykrywania anomalii lub wartości odstających. Ponieważ Mahout zawiera ukryte modele Markowa i różne techniki grupowania (w tym K-średnie), zastanawiałem się, czy byłoby możliwe zbudowanie modelu do wykrywania wartości odstających w szeregach czasowych, używając któregokolwiek z nich. Byłbym wdzięczny, gdyby ktoś z doświadczeniem w tej dziedzinie mógł mi doradzić a) jeśli to możliwe i jeśli jest b) jak to zrobić, plus c) oszacowanie nakładu pracy id) dokładność / problemy tego podejścia .
Przyjrzałbym się algorytmowi T-Digest. Został scalony z mahoutem, a także częścią niektórych innych bibliotek do przesyłania strumieniowego dużych ilości danych .
Jak radzić sobie z kontrolą wersji dużych ilości (binarnych) danych
Jestem doktorantem geofizyki i pracuję z dużymi ilościami danych obrazowych (setki GB, dziesiątki tysięcy plików). Dość dobrze znam svn i git i doceniam historię projektu w połączeniu z możliwością łatwej współpracy i ochrony przed uszkodzeniem dysku. Uważam, że git jest również niezwykle pomocny w tworzeniu spójnych kopii zapasowych, ale wiem, że git nie może wydajnie obsługiwać dużych ilości danych binarnych. Podczas studiów magisterskich pracowałem na zestawach danych o podobnej wielkości (także obrazach) i miałem wiele problemów ze śledzeniem różnych wersji na różnych serwerach / urządzeniach. Rozróżnianie 100 GB w sieci naprawdę nie jest zabawne i kosztuje mnie dużo czasu i wysiłku. Wiem, że inni naukowcy mają podobne problemy, ale nie mogłem znaleźć dobrego rozwiązania. Chcę skorzystać z pamięci mojego instytutu, więc potrzebuję czegoś, co może korzystać z „głupiego” serwera. Chciałbym też mieć dodatkową kopię zapasową na przenośnym dysku twardym, ponieważ w miarę możliwości chciałbym uniknąć przesyłania setek GB przez sieć. Dlatego potrzebuję narzędzia, które może obsłużyć więcej niż jedną zdalną lokalizację. Wreszcie, naprawdę potrzebuję czegoś, z czego mogą korzystać inni badacze, więc nie musi to być super proste, ale powinno być możliwe do nauczenia się w ciągu kilku godzin. Oceniłem wiele różnych rozwiązań, ale żadne nie wydaje się pasować do rachunku: svn jest nieco nieefektywny i potrzebuje inteligentnego serwera hg bigfile / largefile może używać tylko jednego pilota git bigfile / media może również używać tylko jednego pilota, ale również nie jest zbyt wydajny. strych nie wydaje się mieć dziennika lub różnych możliwości bup wygląda naprawdę dobrze, ale potrzebuje do działania „inteligentnego” serwera. Próbowałem git-Annex, który robi wszystko, czego potrzebuję (i wiele więcej), ale jest bardzo trudny w użyciu i nie jest dobrze udokumentowany. Używałem go przez kilka dni i nie mogłem się tego obejść, więc wątpię, czy jakikolwiek inny współpracownik byłby zainteresowany. Jak badacze radzą sobie z dużymi zbiorami danych i czego używają inne grupy badawcze? Żeby było jasne, interesuje mnie przede wszystkim, jak inni badacze radzą sobie z tą sytuacją, a nie tylko ten konkretny zbiór danych. Wydaje mi się, że prawie każdy powinien mieć ten problem, ale nie znam nikogo, kto go rozwiązał. Czy powinienem po prostu zachować kopię zapasową oryginalnych danych i zapomnieć o całej tej kontroli wersji? Czy to właśnie robią wszyscy inni?
Miałem do czynienia z podobnymi problemami z bardzo dużymi zbiorami danych z biologii syntetycznej, gdzie mamy wiele, wiele GB danych cytometrii przepływowej rozrzuconych na wiele, wiele tysięcy plików i musimy je konsekwentnie utrzymywać między współpracującymi grupami w (wielu) różnych instytucjach. Typowa kontrola wersji, taka jak svn i git, nie jest praktyczna w takich okolicznościach, ponieważ po prostu nie jest zaprojektowana dla tego typu zbioru danych. Zamiast tego zaczęliśmy używać rozwiązań „przechowywania w chmurze”, w szczególności DropBox i Bittorrent Sync. DropBox ma tę zaletę, że wykonuje przynajmniej prymitywne logowanie i kontrolę wersji oraz zarządza serwerami za Ciebie, ale wadą jest to, że jest to usługa komercyjna, musisz zapłacić za dużą pamięć masową i umieszczasz swoje niepublikowane dane na komercyjne przechowywanie; nie musisz jednak dużo płacić, więc jest to opłacalna opcja. Bittorrent Sync ma bardzo podobny interfejs, ale uruchamiasz go samodzielnie na własnych serwerach pamięci masowej i nie ma on żadnej kontroli wersji. Oba zraniły moją duszę programisty, ale są to najlepsze rozwiązania, jakie moi współpracownicy i ja znaleźliśmy do tej pory.
Użyłem funkcji wersjonowania w zasobnikach Amazon S3 do zarządzania 10-100 GB w 10-100 plikach. Przesyłanie może być powolne, więc pomogło kompresować i przesyłać równolegle lub po prostu uruchamiać obliczenia na EC2. Biblioteka boto zapewnia przyjemny interfejs Pythona.
Spróbuj spojrzeć na Git Large File Storage (LFS). Jest nowy, ale warto się temu przyjrzeć. Jak widzę, dyskusja w Hacker News wspomina o kilku innych sposobach radzenia sobie z dużymi plikami:
* git-Annex (i np. używanie go z Amazon S3)
* Rozszerzenie Mercurual Largefiles
Co to jest „stara nazwa” naukowca danych?
Terminy takie jak „nauka o danych” i „naukowiec danych” są obecnie coraz częściej używane. Wiele firm zatrudnia „naukowców zajmujących się danymi”. Ale nie sądzę, żeby to była zupełnie nowa praca. Istnieją dane z przeszłości i ktoś miał do czynienia z danymi. Wydaje mi się, że termin „naukowiec danych” staje się bardziej popularny, ponieważ brzmi bardziej fantazyjnie i „seksownie”. Jak nazywano naukowców zajmujących się danymi w przeszłości?
W odwrotnym porządku chronologicznym: eksplorator danych, statystyka, matematyk (stosowany).
Terminy, które obejmowały mniej więcej te same tematy, które obejmuje dziś Data Science:
*Rozpoznawanie wzorców
*Nauczanie maszynowe
* Eksploracja danych
* Metody ilościowe
Myślę, że jest to nowa praca, w zasadzie analityk danych musi stosować algorytmy matematyczne do danych z dużymi ograniczeniami pod względem 1) Czas działania aplikacji 2) Wykorzystanie zasobów aplikacji. Gdyby tych ograniczeń nie było, nie nazwałbym pracy nauką o danych. Co więcej, algorytmy te często trzeba uruchamiać w systemach rozproszonych, co stanowi kolejny wymiar problemu. Oczywiście czyniono to już wcześniej, w pewnym połączeniu statystyki, matematyki i programowania, ale nie było to szeroko rozpowszechnione, aby zapoczątkować nowy termin. Prawdziwy wzrost nauki o danych wynika z możliwości gromadzenia dużych ilości danych, a zatem konieczności ich przetwarzania.
Odniesienie o eksploracji danych w sieciach społecznościowych
Nie zajmuję się nauką o danych, ale chciałbym dogłębnie zbadać tę dziedzinę, aw szczególności chciałbym rozpocząć od analizy danych z sieci społecznościowych. Próbuję znaleźć dobre referencje, zarówno papierowe, jak i strony internetowe, i książki, aby zacząć poznawać temat. W internecie można znaleźć wiele stron, forów, artykułów na ten temat, ale nie jestem w stanie rozróżnić dobrych i złych lektur. Jestem użytkownikiem R, Matlab, SAS i znam trochę język Python. Czy mógłbyś zasugerować jakieś referencje, od których mógłbym zacząć studiować i pogłębiać branżę?
Moje ulubione miejsce, w którym można znaleźć informacje na temat analizy sieci społecznościowych, pochodzi z SNAP, Stanford Network Analysis Project. Zespół studentów i profesorów, kierowany przez Jure Leskovec, stworzył narzędzia programowe, zebrał zbiory danych i opublikował artykuły dotyczące analizy sieci społecznościowych. http://snap.stanford.edu/. Zbiór prac badawczych jest tam znakomity. Mają też narzędzie Python, które możesz wypróbować. http://snap.stanford.edu/snappy/index.html Skupiono się na analizie wykresów, ponieważ sieci społecznościowe dobrze pasują do tego modelu. Jeśli jesteś nowy , aby przeprowadzić analizę wykresów, proponuję wziąć udział w kursie matematyki dyskretnej na poziomie licencjackim lub zapoznać się z moją ulubioną książką na temat „Teoria wykresów z algorytmami i jej zastosowaniami” autorstwa Santanu Ray.
Aby zapoznać się z praktycznym podejściem do analizy sieci społecznościowych, zapoznaj się z „Mining the Social Web” autorstwa Matthew A Russella. Zawiera przykłady, które pokazują, jak zbierać i analizować dane z głównych sieci społecznościowych, takich jak Twitter, Facebook i LinkedIn. To Jure Leskovec początkowo podekscytował mnie tą dziedziną. Ma wiele świetnych prelekcji na YouTube.
Zamierzam kontynuować następującą serię kursów online na Coursera: Zostań naukowcem społecznym: metody i statystyki na Uniwersytecie w Amsterdamie. Dobra wiadomość – to nic nie kosztuje, albo możesz dostać ładnie wyglądający certyfikat za około 49 $. Zła wiadomość – najbliższa rejestracja to 31.08.2015. Będziesz miał okazję zdobyć dużo informacji w skondensowany sposób w krótkim czasie i będziesz zmuszony do faktycznego zastosowania wiedzy w ćwiczeniach, quizach i zadaniach projektowych. Będziesz miał również okazję omówić lekcje / projekty na forum z wieloma innymi studentami i wykładowcami.
Myślę, że Social Media Mining: An Introduction autor: Zafarani to doskonały punkt wyjścia. Dostępna jest również bezpłatna wersja PDF. Najpierw omawia podstawy teorii grafów i eksploracji danych. Obejmuje bardziej zaawansowane tematy w zakresie eksploracji wykresów, analizy sieci społecznościowych, systemów rekomendacji itp. Poza tym widziałem kilka kursów online w Coursera (przykład). Nie jestem jednak pewien ich jakości. Na koniec należy zauważyć, że analiza sieci społecznościowych to eksploracja danych dla danych z mediów społecznościowych, takich jak Facebook. To wcale nie jest nauka społeczna; to jest informatyka. Chociaż możesz w końcu pożyczyć od nich kilka pomysłów, to, co ostatecznie zrobisz, jest dalekie od tego, co robią ludzie z nauk społecznych. Tak więc przechodzenie przez kursy i książki z nauk społecznych prawdopodobnie nie jest w tym momencie dobrym pomysłem.
Jaki jest skuteczny sposób porównywania i grupowania milionów nazw sklepów?
Jestem całkowitym amatorem, jeśli chodzi o naukę o danych i próbuję znaleźć sposób na porównanie ciągów w dużym zbiorze danych. Mam tabelę Google BigQuery, w której są przechowywane transakcje handlowe, ale nazwy sklepów są na całej planszy. Na przykład może istnieć „Wal-Mart Super Center” i „Wal-Mart SC # 1234” lub „McDonalds F2222” i „McDonalds # 321”. To, co muszę zrobić, to zgrupować WSZYSTKIE „Wal-mart” i „McDonalds” i cokolwiek innego. Moje pierwsze podejście polegało na rekurencyjnym sprawdzeniu reg-ex, ale trwało to wieczność i ostatecznie minęło.
Jakie jest najlepsze podejście do zrobienia tego w przypadku tabeli zawierającej ponad 20 milionów wierszy? Jestem otwarty na wypróbowanie każdej technologii, która pasowałaby do tej pracy.
Jest to rozwiązanie encji, czyli powiązanie rekordów, czyli problem z dopasowaniem danych. Rozwiązałbym to, usuwając wszystkie niealfabetyczne znaki, w tym liczby, rzutując na wszystkie wielkie litery, a następnie stosując dopasowanie hierarchiczne. Najpierw dopasuj dokładne przypadki, a następnie przejdź do strzelania Levenshteina między polami. Podejmij jakąś decyzję o tym, jak duży wynik pozwoli uzyskać Levenshtein lub znormalizowany wynik Levenshtein, zanim stwierdzisz, że coś jest niezgodne. Przypisz każdemu wierszowi identyfikator, a gdy znajdziesz dopasowanie, ponownie przypisz niższy z identyfikatorów obu członkom dopasowania. Algorytm odległości Levenshteina jest prosty, ale genialny (wzięty stąd):
def levenshtein(a,b):
“Calculates the Levenshtein distance between a and b.”
n, m = len(a), len(b)
if n > m:
# Make sure n <= m, to use O(min(n,m)) space
a,b = b,a
n,m = m,n
current = range(n+1)
for i in range(1,m+1):
previous, current = current, [i]+[0]*n
for j in range(1,n+1):
add, delete = previous[j]+1, current[j-1]+1
change = previous[j-1]
if a[j-1] != b[i-1]:
change = change + 1
current[j] = min(add, delete, change)
return current[n]
Ta książka o dopasowywaniu danych jest dobrym źródłem i jest bezpłatna przez siedem dni w Amazon.
Nominalnie jest to algorytm bez wykorzystania niektórych wydajności sortowania, więc spodziewałbym się, że będę musiał używać wielu rdzeni w rzędach. Ale powinno to działać dobrze na 8-rdzeniowej instancji AWS. Ostatecznie zakończy się na jednym rdzeniu, ale może to zająć kilka godzin.
Naprawdę miałbym ochotę być leniwym i zastosować starą technologię do szybkiego i brudnego rozwiązania bez programowania, używając polecenia linux sort. To da ci listę posortowaną leksykograficznie. Jeśli nazwy sklepów nie są pierwszym polem, zmień ich kolejność lub powiedz sortowi, aby używał innego pola za pomocą przełącznika -k. Zapisz dane w zwykłym pliku tekstowym CSV, a następnie posortuj je:
$ sort myStores.csv> sortByStore.csv
Możesz pomóc sortować, przydzielając mu dużo pamięci, w tym przypadku 16 GB:
$ sort -S16G myStores.csv> sortByStore.csv
Możesz pójść dalej i utworzyć listę unikalnych nazw sklepów i liczby ich wystąpień, aby pomóc Ci zrozumieć, jak wyglądają dane:
$ sort -S16G myStores.csv | wytnij -f1 -d, | uniq -c> storeIdsAndCounts.csv
Lub unikaj uciekania się i posiadaj tylko unikalne identyfikatory:
$ cat sortByStore.csv | wytnij -f1 -d, | uniq> storeIds.csv
Oryginalne znaczenie „Inteligencji” w „Business Intelligence”
Co pierwotnie oznacza termin „Intelligence” w „Business Intelligence”? Czy oznacza to użyte w „Sztucznej inteligencji” czy w „Agencji Wywiadu”? Innymi słowy, czy „Business Intelligence” oznacza: „Działaj mądrze i inteligentnie w biznesie” czy „Gromadzenie danych i informacji o firmie”? To pytanie było tematem debaty między niektórymi członkami naszego zespołu nauk o danych, więc pomyślałem, że zapytam o nie innych ekspertów. Można by powiedzieć, że oba znaczenia mają zastosowanie, ale proszę o pierwotne zamierzone znaczenie tego słowa, jak zaproponowano w latach osiemdziesiątych. Akceptowalna odpowiedź powinna zdecydowanie cytować oryginalne odniesienia, a osobiste opinie nie są tym, czego szukam.
Uważa się, że Howard Dresner w 1989 r. Ukuł termin „Business Intelligence”, aby opisać „koncepcje i metody usprawnienia podejmowania decyzji biznesowych przy użyciu systemów wsparcia opartych na faktach”. Kiedy był w Gartner Group. To powszechna mantra rozpowszechniana w sieci. Nie udało mi się jeszcze znaleźć dokładnego źródła tego pochodzenia. Wielu twierdzi, że nie był w grupie Gartnera w 1989 roku, co potwierdza poniższy wywiad. W swojej książce z 2008 r. „Rewolucja w zarządzaniu wydajnością: poprawa wyników dzięki widoczności i wgląd w działania, termin jest definiowany jako:
BI to wiedza zdobyta dzięki dostępowi i analizie informacji biznesowych.
Streszczenie: Opracowywany jest automatyczny system rozpowszechniania informacji do różnych sekcji dowolnej organizacji przemysłowej, naukowej lub rządowej. Ten inteligentny system będzie wykorzystywał maszyny przetwarzające dane do auto-abstrakcji i automatycznego kodowania dokumentów oraz do tworzenia profili zainteresowań dla każdego z „punktów akcji” w organizacji. Zarówno dokumenty przychodzące, jak i generowane wewnętrznie są automatycznie abstrakcyjne, charakteryzowane za pomocą wzorca słów i wysyłane automatycznie do odpowiednich punktów akcji. W artykule przedstawiono elastyczność takiego systemu w identyfikowaniu znanych informacji, znajdowaniu, kto powinien je znać, oraz w rozpowszechnianiu skutecznie, albo w formie abstrakcyjnej, albo jako kompletny dokument. Autor twierdzi, że: Techniki proponowane tutaj, aby to umożliwić to:
- Autoabstrakcja dokumentów;
- Automatyczne kodowanie dokumentów;
- Automatyczne tworzenie i aktualizowanie profili punktów akcji.
Wszystkie te techniki opierają się na procedurach statystycznych, które można wykonać na współczesnych maszynach do przetwarzania danych. Wraz z odpowiednim wyposażeniem komunikacyjnym i sprzętem wejścia-wyjścia można zbudować kompleksowy system, aby uwzględnić wszystkie problemy informacyjne organizacji. Nazywamy to Biznesowym Systemem Inteligencji. Podaje również wyjaśnienie terminów „biznes” i „wywiad”: w tym artykule biznes jest zbiorem działań prowadzonych w jakimkolwiek celu, czy to w nauce, technologii, handlu, przemyśle, prawie, rządzie, obronie itd. . Urządzenie komunikacyjne służące do prowadzenia biznesu (w szerokim znaczeniu) można nazwać systemem wywiadowczym. Pojęcie inteligencji jest tu również definiowane, w bardziej ogólnym sensie, jako „umiejętność uchwycenia wzajemnych powiązań przedstawionych faktów w taki sposób, aby kierować działaniami do pożądanego celu”. Zatem idea „powiązania faktów” jest już obecna w artykule H. P. Luhna. Według wielu źródeł, Howard Dresner ponownie wynalazł „Business Intelligence”, aby zmienić system wspomagania decyzji marki (DSS) i system informacji kierowniczej (EIS), gdy był zatrudniony w DEC, a termin ten stał się sławny dzięki wpływowi grupy Gartner. Najwyraźniej termin ten był już używany znacznie wcześniej, jak w książce Wholesale Business Intelligence and Southern and Western Merchants ‘Pocket Directory to the Principal Mercantile Houses in the City of Philadelphia, na rok 1839. Ponieważ nie mogłem pobrać tego źródła, będę trzymać się akceptacji Luhna / Dresnera. Odnosi się do etymologii inteligencji: późny XIV w. „Zdolność rozumienia”, od starofrancuskiej inteligencji (12c.), Od łacińskiej inteligencja, inteligencja „rozumienie, moc rozeznawania; sztuka, umiejętność, gust ”, od Intelligem (mianownik inteligencji),„ rozeznający ”, obecny imiesłów inteligencji,„ rozumieć, rozumieć ”, od między-„ między ”(patrz inter-) + legere„ wybierać, wybierać
Wywiad wojskowy:
Definicja Business Intelligence: doświadczenie CIA nie jest wymagane Więc czym do cholery jest wywiad biznesowy? W istocie BI to dowolne działanie, narzędzie lub proces służący do uzyskiwania najlepszych informacji wspierających proces podejmowania decyzji. Dla naszych celów BI obraca się wokół wykorzystania mocy obliczeniowej (wysoce wyspecjalizowanego oprogramowania w połączeniu z innymi, bardziej powszechnymi zasobami technologicznymi), aby pomóc w dokonywaniu najlepszych wyborów dla Twojej organizacji. Analiza biznesowa jest zasadniczo aktualna, dokładna, wartościowa i możliwa do wykonania spostrzeżenia biznesowe oraz procesy pracy i technologie wykorzystywane do ich uzyskania. Dlatego skłaniałbym się ku „zbieraniu danych i informacji o biznesie”, a może bardziej „w celu lepszego prowadzenia biznesu”. Dodatkowe uwagi historyczne można znaleźć w dziale Ojciec BI? Czy on się śmieje ?!