Найти - Пользователи
Полная версия: Целесообразность применения DataFrame из библиотеки pandas
Начало » Data Mining » Целесообразность применения DataFrame из библиотеки pandas
1
driveman
Доброго времени суток всем.

Есть список массивов одинаковой длины
Элемент каждого массива может принимать значения от 0 до 500

Необходимо обработать эти данные следующим образом:

1) Определить количество элементов этих массивов в разрезе интервалов длиной например, 50 единиц. То есть, вычислить, сколько элементов из всего списка массивов попадает в интервалы:
- от 0 до 50;
- от 51 до 100;
- от 101 до 150

и так далее, по последнего интервала от 451 до 500 включительно.

2) Немного усложненный вариант - то же, что и в п.1, но вычислить по группам интервалов. Например, общее количество элементов, попадающих в интервалы, отстоящие друг от друга на 100:
- 0-50, 101-150, 201-250 и т.д. до 401-450
- 51-100, 151-200, 251-300 и т.д. до 451-500
В принципе, задачу можно решить выборочным суммированием данных из результатов вычислений п.1

3) Определить, есть ли закономерности распределения элементов массивов по интервалам. То есть, встречаются ли элементы с определенным индексом чаще в определенных интервалах или же элементы по интервалам распределяются случайным образом.

На первый взгляд все это можно выяснить с помощью SQL запросов. Например, с помощью sqlite, возможность работы с которым есть в стандартной поставке python. Хотелось бы обойтись пакетами из стандартной поставки, не добавляя какие-то еще библиотеки.

Всвязи с этим вопросы:

1) Насколько DataFrame из pandas может облегчить/ускорить выполнение этих задач или проще поместить эти данные в реляционную БД и обойтись SQL запросами.

2) Каковы вообще преимущества DataFrame перед реляционными БД кроме того, что из DataFrame можно легко строить диаграммы в matplotlib?
doza_and
driveman
- от 0 до 50;
- от 51 до 100;
А элементы от 50 до 51 выкидывать? :)
driveman
Насколько DataFrame из pandas может облегчить/ускорить выполнение этих задач или проще поместить эти данные в реляционную БД и обойтись SQL запросами.
Вы не привели данных которые позволят это оценить. Сколько этих массивов? Насколько критично по времени быстрое выполнение операции. Насколько вы хорошо знаете sql, pandas? Надо было привести ваши решения для этих двух вариантов.

На мой взгляд для решения этой задачи ни pandas ни mysql не нужны вообще.
 from collections import Counter
a=[3, 430.2, 55, ...]
print(Counter([int(i/50) for i in a]))
Если нужна производительность то тоже самое можно сделать с numpy

driveman
2) Каковы вообще преимущества DataFrame перед реляционными БД
https://habr.com/post/279213/
pandas включает в себя sql и следовательно возможностей с pandas у вас гарантировано больше чем с sql :)
Многие будут утверждать что синтаксис pandas более лаконичен. Но предпочтительный синтаксис это дело вкуса.

На мой взгляд принципиальное ограничение sql - работа с двумерными таблицами. В питоне без проблем можно работать с произвольными многомерными таблицами.



driveman
doza_and
А элементы от 50 до 51 выкидывать?
Ну хорошо, не подумал, действительно, от 50 до 100, от 100 до 150 и так далее
doza_and
Вы не привели данных которые позволят это оценить. Сколько этих массивов? Насколько критично по времени быстрое выполнение операции. Насколько вы хорошо знаете sql, pandas?
Массивов в списке может быть от нескольких десятков до нескольких сотен. Элементов в каждом массиве - 10.
Время не сильно критично, но хотелось бы, чтобы все три задачи вычислялись бы за нескольких секунд.
SQL знаю настолько, что за полчаса нужные запросы напишу. Pandas практически не знаю.

В общем, по-видимому, без pandas пока можно обойтись.





doza_and
driveman
В общем, по-видимому, без pandas пока можно обойтись.
Вы похоже правы можно обойтись без pandas.
И без SQL тоже.
На мой взгляд решение на чистом питоне проще чем на SQL. Тут не пол часа писать а полагаю пару минут. Покажите ваш SQL + python который будет решать эти задачи. Тогда можно будет сравнить.
driveman
Подумал-подумал, и признаю, что решение на sql будет гораздо более громоздким, чем на чистом python.

Для SQL ведь надо:
1) Создать БД, и таблицу, прописав все ее поля (наименование, тип)
2) Запросами на вставку записать в таблицу данные.
И только тогда можно будет делать запросы на извлечение данных

А в конце еще надо не забыть закрыть соединение с БД и курсор
Полезного кода, который занимается собственно анализом (сами запросы типа “SELECT … FROM… GROUP BY…”) тогда будет процентов 30 от всего кода, необходимого для работы с БД.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB