Уведомления

Группа в Telegram: присоединиться
  • Начало
  • » Data Mining
  • » Целесообразность применения DataFrame из библиотеки pandas [RSS Feed]

#1 Июль 17, 2018 08:37:19

driveman
Зарегистрирован: 2018-02-28
Сообщения: 20
Репутация: +  1  -
Профиль   Отправить e-mail  

Целесообразность применения DataFrame из библиотеки pandas

Доброго времени суток всем.

Есть список массивов одинаковой длины
Элемент каждого массива может принимать значения от 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)

Офлайн

#2 Июль 17, 2018 16:52:39

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 3161
Репутация: +  174  -
Профиль   Отправить e-mail  

Целесообразность применения DataFrame из библиотеки pandas

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 - работа с двумерными таблицами. В питоне без проблем можно работать с произвольными многомерными таблицами.





Офлайн

#3 Июль 17, 2018 19:24:05

driveman
Зарегистрирован: 2018-02-28
Сообщения: 20
Репутация: +  1  -
Профиль   Отправить e-mail  

Целесообразность применения DataFrame из библиотеки pandas

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

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





Отредактировано driveman (Июль 17, 2018 19:25:36)

Офлайн

#4 Июль 17, 2018 22:54:51

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 3161
Репутация: +  174  -
Профиль   Отправить e-mail  

Целесообразность применения DataFrame из библиотеки pandas

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



Отредактировано doza_and (Июль 17, 2018 22:57:05)

Офлайн

#5 Июль 18, 2018 12:15:14

driveman
Зарегистрирован: 2018-02-28
Сообщения: 20
Репутация: +  1  -
Профиль   Отправить e-mail  

Целесообразность применения DataFrame из библиотеки pandas

Подумал-подумал, и признаю, что решение на sql будет гораздо более громоздким, чем на чистом python.

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

А в конце еще надо не забыть закрыть соединение с БД и курсор
Полезного кода, который занимается собственно анализом (сами запросы типа “SELECT … FROM… GROUP BY…”) тогда будет процентов 30 от всего кода, необходимого для работы с БД.

Офлайн

  • Начало
  • » Data Mining
  • » Целесообразность применения DataFrame из библиотеки pandas[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version