Форум сайта python.su
Доброго времени суток всем.
Есть список массивов одинаковой длины
Элемент каждого массива может принимать значения от 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?
Отредактировано driveman (Июль 17, 2018 08:37:43)
Офлайн
drivemanА элементы от 50 до 51 выкидывать? :)
- от 0 до 50;
- от 51 до 100;
drivemanВы не привели данных которые позволят это оценить. Сколько этих массивов? Насколько критично по времени быстрое выполнение операции. Насколько вы хорошо знаете sql, pandas? Надо было привести ваши решения для этих двух вариантов.
Насколько DataFrame из pandas может облегчить/ускорить выполнение этих задач или проще поместить эти данные в реляционную БД и обойтись SQL запросами.
from collections import Counter a=[3, 430.2, 55, ...] print(Counter([int(i/50) for i in a]))
drivemanhttps://habr.com/post/279213/
2) Каковы вообще преимущества DataFrame перед реляционными БД
Офлайн
doza_andНу хорошо, не подумал, действительно, от 50 до 100, от 100 до 150 и так далее
А элементы от 50 до 51 выкидывать?
doza_andМассивов в списке может быть от нескольких десятков до нескольких сотен. Элементов в каждом массиве - 10.
Вы не привели данных которые позволят это оценить. Сколько этих массивов? Насколько критично по времени быстрое выполнение операции. Насколько вы хорошо знаете sql, pandas?
Отредактировано driveman (Июль 17, 2018 19:25:36)
Офлайн
drivemanВы похоже правы можно обойтись без pandas.
В общем, по-видимому, без pandas пока можно обойтись.
Отредактировано doza_and (Июль 17, 2018 22:57:05)
Офлайн
Подумал-подумал, и признаю, что решение на sql будет гораздо более громоздким, чем на чистом python.
Для SQL ведь надо:
1) Создать БД, и таблицу, прописав все ее поля (наименование, тип)
2) Запросами на вставку записать в таблицу данные.
И только тогда можно будет делать запросы на извлечение данных
А в конце еще надо не забыть закрыть соединение с БД и курсор
Полезного кода, который занимается собственно анализом (сами запросы типа “SELECT … FROM… GROUP BY…”) тогда будет процентов 30 от всего кода, необходимого для работы с БД.
Офлайн