Задать вопрос
Контакты

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (30)

Лучшие ответы пользователя

Все ответы (37)
  • Есть ли аналог модуля shelve, который работает как список, а не как словарь?

    @Roman_Kh
    Тут все сильно зависит от того, что именно вы храните в этом списке, поэтому приведу несколько вариантов.

    1. numpy позволяет создавать типизированные массивы и хранит их в памяти, но в весьма компактном виде (объем порой в разы меньше, чем у обычного python'овского списка) и представляет очень богатые возможности по обработке данных.

    2. pandas, используя numpy, умеет создавать структурированные массивы (датафреймы), похожие на таблицы баз данных, и предоставляет развитый функционал по выборке и обработке этих данных.

    3. pytables позволяет сохранить numpy-массивы или pandas-датафреймы на диск в виде файлов в формате HDF5, обеспечивая быстрый доступ к данным и опять же удобный функционал по поиску/выборке данных.
    Скорее всего на ваших объемах данных pandas+HDF5 будет в разы/десятки раз быстрее любой СУБД.

    4. bcolz позволяет сжать данные, а также хранить их не только в памяти, но и на диске.
    При этом операции с данными производится очень быстро, иногда даже быстрее чем с несжатым списками.

    Вообще, спископодобные данные гораздо быстрее обрабатывать с помощью векторных операций в numpy и pandas. Но если вам все-таки нужны именно циклы, то также рекомендую обратить внимание на numba, с помощью которой можно в десятки-сотни раз ускорить python'овские циклы.
    Ответ написан
    Комментировать
  • Наполнение объекта javascript в цикле, как сделать элегантно?

    @Roman_Kh
    Чтобы избавиться от "жутких if'ов" и сделать элегатное обновление вам нужно
    1. изменить структуры данных: users и jobs должны стать map'ами по именам пользователей.
    users = {
         'Вася' : {
               'job': 'Слесарь', 
               'phone' : 123345
         },
         'Петя' : {
               'job': 'Слесарь', 
               'phone' : 789901
         }
    }
    
    jobs = {
         'Вася' : { 'job': 'Плотник' },
         'Петя' : { 'job': 'Столяр' }
    }

    2. применить Object.assign (или object-assign)
    И тогда весь ваш цикл превратится в одну строчку
    Object.assign(obj.users, users)
    И обновление работ также уместится на одной строке:
    Object.assign(obj.users, jobs)
    Или можно объединить обе операции:
    Object.assign(obj.users, users, jobs)

    Обратите внимание, что в случае с object-assign будет чуть-чуть иначе:
    obj.users = object_assign(obj.users, users, jobs)
    Ответ написан
    4 комментария
  • Как сделать random с неравномерным распределением в Python?

    @Roman_Kh
    Сначала определите предельно конкретно, что означает "в начале вероятность выше, чем в конце".
    После чего сможете написать свою функцию распределения. Например, в вашем списке 4 элемента и вероятности распределены так: 60, 25, 12, 3, то есть 60% - для 1-го элемента, 25% - для 2-го и так далее.
    Тогда
    your_data_list = [...]
    probabilities_list=[60, 85, 97, 100]
    rnd = random.uniform(1, 100)
    idx = -1
    idx_found = False
    while idx < len(probabilities_list) and not idx_found:
      idx += 1
      idx_found = rnd <= probabilities_list[idx]
    your_random = your_data_list[idx]

    Однако, это очень медленный способ (и к тому же не лишенный некоторых проблем).

    Можно сделать быстрее и короче с помощью модуля bisect:
    idx = bisect.bisect_right(probabilities_list, rnd)
    Этот вариант будет заметно быстрее (иногда, правда, на 20%, но иногда и в 3.5 раза).

    Но правильнее всего использовать numpy:
    numpy.random.choice(your_data_list, size=N, p=prb_list)

    Это будет раз в 10 быстрее.
    При этом prb_list должен содержать именно вероятности появления каждого элемента, т.е. для вышеприведенного примера [0.6, 0.25, 0.12, 0.03]
    Ответ написан
    1 комментарий
  • Нужен ли продакт-менеджеру Data Science?

    @Roman_Kh
    Правильному product-менеджеру, конечно же, нужен data science.
    Только покупать русские курсы не стоит. Совсем. Никакие.
    На coursera, udacity и даже youtube есть огромное количество курсов от уважаемых компаний и университетов для любого уровня подготовленности.

    Во-первых, data science нужно знать для того, чтобы понимать, что вообще возможно узнать о продукте, клиенте, процессе, а что нет, что можно рассчитать, а что нет, что можно предсказать, а что нет, а также как, в чем и на сколько можно и нельзя ошибаться.

    Во-вторых, data science научит структурно и аналитично думать о клиенте, не как о черном непредсказуемом ящике, а как о субъекте с динамически изменяющимся поведением, которое можно оцифровать, а значит анализировать.

    В-третьих, станет наглядно понятно, что анализировать можно много, долго и даже интересно, но если это никак не выражается в новых действиях в отношении клиента, то весь анализ и все собранные данные бессмысленны и бесполезны.
    Ответ написан
    Комментировать
  • Как с помощью Webpack с CommonsChunkPlugin разделить код по страничным бандлам?

    @Roman_Kh
    Потому что vendor не должен быть в entry, если вы хотите, чтобы он стал единой сборкой общего кода.

    А вообще, лучший туториал по Webpack - https://www.youtube.com/playlist?list=PLDyvV36pndZ... - с разнообразными примерами и подробными пояснениями.
    Смотрите видео с 3.1 по 3.6 - это займет 20 минут, зато все станет понятно.
    Ответ написан
    7 комментариев