Czy Python nadaje się do dużych zbiorów danych

14

Czytam w tym poście Czy język R jest odpowiedni dla dużych 5TBzbiorów danych, które stanowią duże zbiory danych , i chociaż dobrze się spisuje, dostarczając informacji o możliwościach pracy z tego typu danymi w Rnim, zapewnia bardzo mało informacji na jego temat Python. Zastanawiałem się, czy Pythonmoże pracować z tak dużą ilością danych.

wściekły szlam
źródło

Odpowiedzi:

18

Aby to wyjaśnić, wydaje mi się, że oryginalne odniesienia do pytań OP prawdopodobnie nie są najlepsze dla formatu typu SO, ale z pewnością będę reprezentować pythonw tym konkretnym przypadku.

Zacznę od stwierdzenia, że ​​niezależnie od wielkości danych, pythonnie powinno to być twoje ograniczenie. W rzeczywistości istnieje tylko kilka głównych problemów, z którymi będziesz mieć do czynienia w przypadku dużych zestawów danych:

  • Odczytywanie danych do pamięci - jest to zdecydowanie najczęstszy problem w świecie dużych zbiorów danych. Zasadniczo nie można wczytać większej ilości danych niż pamięć (RAM). Najlepszym sposobem na rozwiązanie tego problemu jest wykonanie operacji atomowych na danych zamiast próby odczytania wszystkiego naraz.
  • Przechowywanie danych - w rzeczywistości jest to po prostu kolejna forma wcześniejszego wydania. Zanim 1TBzaczniesz o tym mówić, zaczniesz szukać innego miejsca do przechowywania. AWS S3 jest najpopularniejszym zasobem i pythonma fantastyczną botobibliotekę ułatwiającą prowadzenie z dużymi fragmentami danych.
  • Opóźnienie sieci - przenoszenie danych między różnymi usługami będzie wąskim gardłem. Nic nie możesz zrobić, aby to naprawić, poza próbą znalezienia zasobów znajdujących się w pobliżu i podłączeniem do ściany.
indico
źródło
13

W przypadku dużych zbiorów danych musisz zrozumieć kilka rzeczy -

Co to jest Big data?

Być może znasz słynne litery Big data - objętość, szybkość, różnorodność ... Python może nie być odpowiedni dla wszystkich. I pasuje do wszystkich dostępnych narzędzi do analizy danych. Musisz wiedzieć, które narzędzie jest odpowiednie do jakiego celu.

W przypadku dużej ilości danych:

  • Pig / Hive / Shark - Czyszczenie danych i praca ETL
  • Hadoop / Spark - Rozproszone obliczenia równoległe
  • Mahout / ML-Lib - Uczenie maszynowe

Teraz możesz używać R / Python na etapach pośrednich, ale zdasz sobie sprawę, że stają się one wąskim gardłem w całym procesie.

W przypadku prędkości danych:

  • Kafka / Storm - System o dużej przepustowości

Ludzie próbują tutaj R / Python, ale znowu zależy to od rodzaju pożądanej równoległości i złożoności modelu.

Jakiego rodzaju analizę chcesz przeprowadzić?

Jeśli Twój model wymaga, aby najpierw wszystkie dane zostały wprowadzone do pamięci, wówczas model nie powinien być skomplikowany, ponieważ jeśli dane pośrednie są duże, kod się zepsuje. A jeśli pomyślisz o zapisaniu go na dysku, napotkasz dodatkowe opóźnienie, ponieważ odczyt / zapis dysku jest powolny w porównaniu z pamięcią RAM.

Wniosek

Zdecydowanie możesz używać Pythona w obszarze Big Data (Zdecydowanie, ponieważ ludzie próbują z R, dlaczego nie Python), ale najpierw poznaj swoje wymagania dotyczące danych i biznesu. Mogą być dostępne lepsze narzędzia do tego samego i zawsze pamiętaj:

Twoje narzędzia nie powinny decydować o tym, jak odpowiadasz na pytania. Twoje pytania powinny określić, jakich narzędzi używasz.

Ankit
źródło
8

Python ma kilka bardzo dobrych narzędzi do pracy z dużymi danymi:

numpy

Tablice odwzorowane pamięciowo Numpy umożliwiają dostęp do pliku zapisanego na dysku, jakby to była tablica. Do pamięci należy załadować tylko te części tablicy, z którymi aktywnie pracujesz. Można go używać tak samo jak zwykłej tablicy.

h5py i pytania

Te dwie biblioteki zapewniają dostęp do plików HDF5. Pliki te umożliwiają dostęp tylko do części danych. Ponadto, dzięki bazowym bibliotekom używanym do uzyskiwania dostępu do danych, można wykonywać wiele operacji matematycznych i innych manipulacji danymi bez ładowania ich do struktury danych w języku Python. Możliwe są ogromne, wysoce ustrukturyzowane pliki, znacznie większe niż 5 TB. Umożliwia także płynną, bezstratną kompresję.

bazy danych

Istnieją różne typy baz danych, które pozwalają przechowywać duże zbiory danych i ładować tylko potrzebne części. Wiele baz danych pozwala na dokonywanie manipulacji bez ładowania danych do struktury danych w języku Python.

pandy

Umożliwia to dostęp na wyższym poziomie do różnych rodzajów danych, w tym danych HDF5, plików csv, baz danych, a nawet stron internetowych. W przypadku dużych zbiorów danych zapewnia otoki wokół dostępu do plików HDF5, co ułatwia analizę zestawów dużych zbiorów danych.

mpi4py

Jest to narzędzie do uruchamiania kodu Pythona w sposób rozproszony na wielu procesorach lub nawet na wielu komputerach. Umożliwia to jednoczesną pracę nad częściami danych.

dask

Zapewnia wersję normalnej tablicy numpy, która obsługuje wiele normalnych operacji numpy w sposób wielordzeniowy, który może pracować na danych zbyt dużych, aby zmieściły się w pamięci.

płomień

Narzędzie zaprojektowane specjalnie dla dużych zbiorów danych. Jest to po prostu opakowanie wokół powyższych bibliotek, zapewniające spójne interfejsy do różnych metod przechowywania dużych ilości danych (takich jak HDF5 lub bazy danych) oraz narzędzia ułatwiające manipulowanie, wykonywanie operacji matematycznych i analizowanie danych, które jest zbyt duży, aby zmieścił się w pamięci.

Czarny kot
źródło
4

Absolutnie. Podczas pracy z danymi na taką skalę często stosuje się strukturę dużych zbiorów danych, w którym to przypadku python lub inny używany język jest jedynie interfejsem. Zobacz na przykład Przewodnik programowania w języku Python Spark . Jakie masz dane i co chcesz z nimi zrobić?

Emre
źródło
3

Aby poradzić sobie z taką ilością danych, język programowania nie jest głównym problemem, ale ramy programowania. Frameworki, takie jak MapReduce lub Spark, mają powiązania z wieloma językami, w tym z Pythonem. Ramy te z pewnością mają wiele gotowych pakietów do zadań analizy danych. Ale ostatecznie wszystko sprowadza się do twoich wymagań, tj. Jakie jest twoje zadanie? Ludzie mają różne definicje zadań analizy danych, niektóre z nich można łatwo rozwiązać za pomocą relacyjnych baz danych. W takim przypadku SQL jest znacznie lepszy niż wszystkie inne alternatywy.

lgylym
źródło
2

Uważam, że sam język ma niewiele wspólnego z wydajnością, jeśli chodzi o duże dane. Liczy się:

  • Jak duże są w rzeczywistości dane
  • Jakie przetwarzanie zamierzasz na nim wykonać
  • Jakiego sprzętu będziesz używać
  • Z jakich bibliotek chcesz korzystać

W każdym razie Python jest dobrze przyjęty w społecznościach zajmujących się badaniami danych.

Mateva
źródło
2

Używałem Anaconda Python 3.4 i Pandas do przeszukiwania bazy danych o wielkości 10 milionów wierszy w celu dopasowania do 20 tysięcy danych logowania. Trwa około minuty. Wewnętrzne pandy doskonale wykorzystują pamięć. To powiedziawszy, naprawdę duże zbiory danych wymagają architektury przetwarzania dopasowanej do problemu. Pandy to po prostu klej (logika) w tym równaniu, a inne narzędzia mogą to zrobić. R, Scala, Haskell, SAS itp. Mogą powielać część logiki - być może wystarczy, by szybciej odpowiedzieć na pytania. Ale Python jest dobrym (najlepszym?) Narzędziem ogólnego zastosowania. Możesz uruchomić kod R w Pythonie, a także w większości innych języków. Chociaż są interpretacyjne, istnieją techniki i narzędzia o wysokiej wydajności, takie jak pypy, które mogą sprawić, że Python będzie działał prawie tak szybko, jak narzędzia do testów porównawczych przy jedynie nieco większym wysiłku. Python ma wiele bibliotek, które robią wszystko - patrz powyższa lista.

Jeśli pytasz, czy powinieneś się uczyć i używać Pythona, moja odpowiedź brzmi tak. Artykuły wskazują, że python jest używany częściej niż R wśród osób, które używają obu. Ale tylko kilka narzędzi rozwiązuje kilka problemów związanych z nauką danych. To może stać się Twoim podstawowym narzędziem, ale tylko to - narzędziem. I tak jak żadna rozsądna osoba nie buduje domu za pomocą młotka, tak żaden rozsądny specjalista ds. Danych nie używa tylko jednego narzędzia.

Harvey
źródło
0

To zabawne, jak ludzie łączą duże zbiory danych z analizą danych i inteligencją biznesową.

Po pierwsze, duże zbiory danych oznaczają „dużo danych”, tyle informacji, że nie mieszczą się w konwencjonalnej bazie danych. Czasami jednak duże zbiory danych nie są nawet odpowiednimi „wartościowymi” informacjami, ale dokumentami, obrazami i tak dalej.

Aby przetwarzać duże zbiory danych, POTRZEBUJEMY PRĘDKOŚCI. Python jest poza ligą, więc R. Jeśli jednak zadanie jest tak proste, jak pobranie pliku CSV i wstawienie go do bazy danych, to jest to ETL, nie potrzebujemy do tego programowania.

A kiedy informacje zostaną zmniejszone, możemy zastosować Python, r lub cokolwiek chcesz. Nawet Excel. Jednak na tym etapie Big Data nie jest już dużymi danymi, ale danymi konwencjonalnymi.

IMHO, Java jest bardziej odpowiednia dla Big Data (dla całego łańcucha), ale ludzie traktują Python jako domyślny z jakiegoś niepraktycznego powodu.

magallanes
źródło