Задать вопрос
@Ooos
Front-End

Как логически разбить цены на 5 диапазонов, если цены больше 5?

Всем доброго дня! Не могу решить задачку.

Есть отсортированный список цен, его необходимо разбить на 5 диапазонов (от 600 до ..., от ... до и тд)

prices = [600, 1000, 4500, 5000, 6500, 7000, 7500, 10000]
amount = 5
legend = *диапазон из 5 цен*

P.S
Использовал два варианта. Один из них это если поделить количество цен на amount тем самым определим шаг для диапазона. Но вариант не подошел, не всегда может правильно группировать.
  • Вопрос задан
  • 441 просмотр
Подписаться 2 Средний 4 комментария
Пригласить эксперта
Ответы на вопрос 5
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
Но вариант не подошел, не всегда может правильно группировать.


Так и хочется ответить "42".

Судя по постановке вопроса вы и сами не знаете "как правильно" группировать. Для начала определитесь для себя, как выглядит "правильно отсортированный результат". для начала в частных случаях, потом в общем виде (алгоритмически).
Ответ написан
Комментировать
EreminD
@EreminD
Кое-что умею
а что значит "правильно" группировать?
пока, из исходных данных, просится просто брать максимальную цену (10000), делить ее на количество диапазонов (amount) - получаем шаг

В данном примере, получим 10000/5 = 2000
[0, 2000], [2001, 4000], [4001, 6000], [6001, 8000], [8001, 10000]
Теперь, как вам надо, по спискам распихивайте ил массивам:
1. 600, 1000,
2.
3. 4500, 5000,
4. 6500, 7000, 7500,
5. 10000
Ответ написан
profesor08
@profesor08
Разбей логарифмически. Тем самым получишь то что ты хочешь. Постепенное возрастание диапазона.
Ответ написан
Комментировать
@rustler2000
погромист сикраш
Но вариант не подошел, не всегда может правильно группировать


Назвал все буквы - не смог прочитать слово :D
Ответ написан
Комментировать
Алгоритмы кластеризации, например, KMeans, решают подобные задачи.

# lang: Python 3.5
import numpy as np
from sklearn.cluster import KMeans

cl = KMeans(n_clusters=5)
labels = cl.fit_predict(np.array([[600], [1000], [4500], [5000], [6500], [7000], [7500], [10000]))
#=> [0 0 3 3 1 1 4 2]

Отсортировать кластеры по возрастанию уже не составляет труда.
Предлагаю вам самому найти реализацию KMeans для вашего языка.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы