Ответы пользователя по тегу Python
  • Как узнать процент вхождения словосочетания в строку на python?

    @dmshar
    Если строго следовать тому, что вы написали, то процент вхождения словосочетания
    'создание чат-ботов' в вашу строку равен 0. Поскольку словосочетание - это вхождение всех представленных в качестве образца слов, а слово "чат" или "чат-бот" в заданном предложении отсутствует.
    Если же вас интересует процент вхождения слов из примера в набор слов целевого предложения - то это проще. Правда, если слова будут находиться в одинаковой словоформе.
    ex='создать чат бота'
    ex_set=set(ex.split(' '))
    sent="Добрый день, Требуется создать телеграм бота для размещения объявлений"
    sent_set=set(sent.split(' '))
    print(1-len(sent_set.difference(ex_set))/len(sent_set))

    Результат:
    0.2222222222222222
    А вот если словоформы будут разные, то тут придется попотеть. Приведение слов к одинаковой словоформе - отдельная и весьма нетривиальная задача.
    Ответ написан
    Комментировать
  • Какая разница между двумя списками?

    @dmshar
    Разницы никакой, кроме того, что круто, на порядок изменяется время выполнения. Сравните:

    import timeit
    measurements = timeit.repeat('for i in [1,2,3,4,5]: pass', number=1000000)
    print(measurements)

    Результаты:
    [0.09542479999998932, 0.07413599999995313, 0.08125240000003942, 0.07413070000001198, 0.08504640000001018]

    и
    import timeit
    measurements = timeit.repeat('for i in [item for item in [1,2,3,4,5]]: pass', number=1000000)
    print(measurements)

    Результаты:
    [0.3339560999999662, 0.4172341999999958, 0.42956249999997453, 0.37294059999999263, 0.3278073999999833]
    Ответ написан
    Комментировать
  • Как в Python Datetime сделать так, чтобы менялся год и месяц?

    @dmshar
    Если вы работаете с Pandas то есть более простое решение.
    Добавляем заданное количество месяцев (в данном случае -6)
    import datetime as dt
    import pandas as pd
    date = dt.date.today() + pd.offsets.DateOffset(months=6)
    print(date)

    Результат:
    2022-07-20 00:00:00

    Добавляем год:
    date = dt.date.today() + pd.offsets.DateOffset(years=1)
    print(date)

    Результат:
    2023-01-20 00:00:00

    Добавляем и то и другое:
    date = dt.date.today() + pd.offsets.DateOffset(years=1,months=3)
    print(date)

    Результат:
    2023-04-20 00:00:00
    Ответ написан
    Комментировать
  • Как вывести время выполнения по оси Y в графике matplotlib?

    @dmshar
    Способов есть много. Ну например:
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.dates import DateFormatter
    dt=['2022-01-07 Пт', '2022-01-08 Сб', '2022-01-09 Вс', '2022-01-10 Пн', '2022-01-11 Вт', '2022-01-12 Ср', '2022-01-13 Чт', '2022-01-14 Пт', '2022-01-15 Сб', '2022-01-16 Вс', '2022-01-17 Пн']
    ['04:08:42', '02:14:29', '02:11:29', '02:35:51', '02:50:42', '02:34:17', '02:29:04', '03:05:52', '02:43:35', '02:10:27', '04:17:31']
    dur=['04:08:42', '02:14:29', '02:11:29', '02:35:51', '02:50:42', '02:34:17', '02:29:04', '03:05:52', '02:43:35', '02:10:27', '04:17:31']
    df = pd.DataFrame({'Date':dt, 
                       'Dur': dur})
    df['Dur'] = pd.to_timedelta(df['Dur'])
    df['Dur'] = pd.to_datetime(df['Dur'].values.astype('datetime64[D]'))
    
    fig, ax = plt.subplots()
    myFmt = DateFormatter("%H:%M:%S")
    ax.yaxis.set_major_formatter(myFmt)
    
    ax.plot(df['Date'], df['Dur'])


    Результат:
    61e56a22d742e091710866.png

    Или даже без использования Pandas:
    import datetime 
    import matplotlib.pyplot as plt
    from matplotlib.dates import DateFormatter
    dt=['2022-01-07 Пт', '2022-01-08 Сб', '2022-01-09 Вс', '2022-01-10 Пн', '2022-01-11 Вт', '2022-01-12 Ср', '2022-01-13 Чт', '2022-01-14 Пт', '2022-01-15 Сб', '2022-01-16 Вс', '2022-01-17 Пн']
    ['04:08:42', '02:14:29', '02:11:29', '02:35:51', '02:50:42', '02:34:17', '02:29:04', '03:05:52', '02:43:35', '02:10:27', '04:17:31']
    dur=['04:08:42', '02:14:29', '02:11:29', '02:35:51', '02:50:42', '02:34:17', '02:29:04', '03:05:52', '02:43:35', '02:10:27', '04:17:31']
    dlt=[]
    for dr in dur:
        dlt.append(datetime.datetime.strptime(dr,"%H:%M:%S"))
    fig, ax = plt.subplots()
    myFmt = DateFormatter("%H:%M:%S")
    ax.yaxis.set_major_formatter(myFmt)
    ax.plot(dt, dlt)
    Ответ написан
  • Здравствуйте, проект вылетает при запуске на Python, что делать?

    @dmshar
    Что-делать, что-делать... Ловите его, что-бы не вылетал.
    Вы свой вопрос прочтите-ка.
    Что вылетает, в какой момент вылетает, что при этом сообщает вам? Какая операционка? Какая версия Python? Какие версии используемых модулей? Какие логи? Вся эта информация у вас есть, но вы наверное считаете что это форум экстрасенсов, которые способны угадать ответы на эти вопросы сами? А вам даже структурировать свой код как следует лень?
    Ну если эта программа "This program was created by @ded_sec_" - то обратитесь к этому загадочному ded_sec_ , пусть он вам ответит. Форум-то тут причем?
    Ответ написан
    Комментировать
  • В чем ошибка в работе цикла for?

    @dmshar
    Простите, а вы свой скрипт хоть запускали? Ваш скрипт делает первый запрос (не знаю, очевидно, количество циклов зачем-то), потом запрашивает ввод одного единственного слова - и все. Выводит один раз "НЕТ" , естественно, а затем N раз слово "ДА", где N- вами введенное число минус один. И ничего больше, никаких ожиданий следующего ввода.
    Что вы вообще сделать-то хотели? Если хотели запрашивать ответ в цикле, то вот например так:

    a = int(input())
    s = set()
    for i in range(a):
        b = input()
        if b not in s:
            s.add(b)
            print('НЕТ')
        else:
            print('ДА')
    Ответ написан
    Комментировать
  • Как делать перекрестное сравнение?

    @dmshar
    Напоминаю, в словаре ключи не упорядочены.
    Ваш elem - это список, первый и единственный элемент которого при первом проходе цикла равен [{'key1': 'KARA', 'key2': '10'}]. Идем дальше. elem[0] - это уже словарь {'key1': 'KARA', 'key2': '10'}. У которого не может быть элемента elem[0][0]. Вот и получаете заслуженную ошибку.
    Аналогичный анализ для json2 надеюсь вам самостоятельно провести труда не составит.
    Все это прекрасно видно в менеджере переменных, умение пользоваться которым - один из основных навыков при проведении отладки любой программы.
    Совет выучить структуры Python перед тем как писать программы с ними - вам коллеги уже дали раньше. На постоянных подсказках - программирование не выучить.
    Ответ написан
    Комментировать
  • Вопрос про ансамбли нейросетей?

    @dmshar
    Начну со второго вопроса. Что вы имеете ввиду под соединением моделей с разными типами данных?
    Если вы имеете ввиду, что на вход вы подаете разные типы данных - то ответ таков: если вы сумеете оцифровать свои тесты и далее работать с ними и с числами как с цифрами - то можно. Кстати, вполне себе традиционные алгоритмы машинного обучения типа деревьев и производные от них изначально построены так, что они могут обрабатывать разные типы данных.
    Если же вы имеете ввиду, что результат моделей вы получаете в виде тестов и чисел и хотите из них строить ансамбль - то это вообще говоря странная затея - но думаю, можно попробовать использовать классический стеккинг. (опять же из машинного обучения)
    Теперь первый вопрос - книги и ресурсы. Самый лучший ресурс Гуугл где можно найти все. Но немного помогу:
    Книги:
    1. LUDMILA I. KUNCHEVA COMBINING PATTERN CLASSIFIERS
    2. Oleg Okun and Giorgio Valentini. Supervised and Unsupervised Ensemble Methods and their Applications
    3. Z.-H. Zhou Ensemble Methods Foundations and Algorithms

    Интернет-источники. Их сотни, например:
    1. https://towardsdatascience.com/a-guide-to-ensemble...
    2. https://www.analyticsvidhya.com/blog/2021/08/ensem...
    3. https://towardsdatascience.com/practical-guide-to-...
    4. https://machinelearningmastery.com/ensemble-learni...
    5. https://towardsdatascience.com/ensemble-learning-s...
    и т.д.
    Удачи.
    Ответ написан
  • Как еще чуть ускорить алгоритм?

    @dmshar
    А вот так не быстрее будет?
    (Пример специально усложнил)

    lst=[5, 3, 0, 2, 0, 3, 8, 2, 9, 7, 0, 0,7,1, 5, 3]
    
    l=[i for i,v in enumerate(lst) if v == 0]
    m_l=[]
    for i,ls in enumerate(lst):
        m=len(lst)
        for j in l:
            if m>abs(i-j):
                m=abs(i-j)
        m_l.append(m)
    print (m_l)


    Результат:
    [2, 1, 0, 1, 0, 1, 2, 3, 2, 1, 0, 0, 1, 2, 3, 4]

    Если надо еще ускорить - можно порождать список m_l сразу, т.е.
    m_l=[len(lst)]*len(lst)
    и
    m_l.append(m)
    заменить на
    m_l[i]=m
    За счет статики работы с списком должно бы получиться еще быстрее.
    Ответ написан
    2 комментария
  • Как исправить эту ошибку?

    @dmshar
    Что это за дивный оператор:
    data = dict
    Может все-таки
    data = dict()

    А вообще-то совет - сначала Python выучить, потом ботов писать. Тогда не придется за детскими вопросами на форум бегать.
    Ответ написан
    1 комментарий
  • Почему при скачивании CSV файла переписываешься?

    @dmshar
    Метод обработки "w" - это ПЕРЕЗАПИСЬ всего файла. Вызывая with open("1data_sit.csv", "wb") as file внутри цикла вы каждый раз удаляете то, что ранее (на предыдущей итерации) в файле было записано. Хотите ДОзаписывать - используйте "a".
    Ответ написан
    Комментировать
  • Стоит ли изучать Нейросети?

    @dmshar
    Вопрос: "есть ли смысл начать их изучать если знания по математике такие маленькие? "
    Варианты ответов:
    1. Раз знания математики "такие маленькие" изучать нейронные сети не получиться, займтесь чем нибудь другим.
    2. Раз знания математики "такие маленькие" - подтяните знания математики и постепенно начинать изучать нейросети.

    Раз вы не можете этого решить сами, и обращаетесь к совершенно посторонним, абсолютно незнакомым людям за советом, то это означает что на самом деле вы просто хотите, что-бы они одобрили ваш внутренний выбор - "смысла учить нет". Те, кто понимают чего они хотят на самом деле - не спрашивают, а берут и начинают учить.

    Те, кто действительно хотят учить что-то самостоятельно - берут и ищут в Гуугле. И на первой же странице находят:
    https://habr.com/ru/company/plarium/blog/505458/
    https://ai-news.ru/2018/10/podborka_resursov_po_ma...
    https://ru.stackoverflow.com/questions/678970/Книг...
    https://www.analyticsvidhya.com/blog/2019/10/mathe...
    https://www.kdnuggets.com/2020/06/math-data-scienc...
    https://towardsdatascience.com/the-roadmap-of-math...
    Ответ написан
    2 комментария
  • Почему быстрая сортировка Хоара медленнее пузырьковой?

    @dmshar
    Дело не в реализации.
    Быстрая сортировка она действительно "быстрая" в случае частично-упорядоченных массивов (которые в реальных задачах могут встречаться не реже, чем полностью неупорядоченные). Причем для корректного исследования не достаточно взять фиксированное количество элементов, а необходимо выполнить сравнения при разном N. И вообще, в O()-нотации, это не столько о времени конкретного выполнения, сколько о том, как изменяется (растет) время выполнения алгоноитма в зависимости от N.

    Вопрос обсуждается в интернет в огромном количестве статей. Ну например:
    https://habr.com/ru/post/274017/
    https://works.doklad.ru/view/w4c2OLj2iMk.html
    Ответ написан
    Комментировать
  • Как увеличить на 1 топ-5 самых больших значений в колонке DataFrame?

    @dmshar
    А не хотите попробовать сначала прочитать что-нибудь по Pandas, а потом задавать вопрос? Иначе так и будете за каждой запятой на форум с вопросами бегать.
    Я же вам уже все написал:
    df_new = df.sort_values(by=['qty'], ascending=False)
    df_new.qty.loc[:4]=df_new.qty.loc[:4]+1
    Ответ написан
    Комментировать
  • Как перебрать первые 10 строк в DataFrame и увеличить значение в них на 1?

    @dmshar
    "Можно ли в Pandas менять значение полей в цикле?" - можно. Но в вопросе, который стоит а заголовке - это не надо.
    Мне лень набивать большой ДатаФрейм, поэтому вот вам сокращенный пример. В датафрейме 10 строк, меняем первый столбец в первых пяти строках.

    print (df)
    df.A.loc[:4]=df.A.loc[:4]+1
    print (df)


    Датафрейм до манипуляции:
    .   A  B
    0  1  2
    1  2  4
    2  3  6
    3  4  8
    4  5  0
    5  1  2
    6  2  4
    7  3  6
    8  4  8
    9  5  0


    Датафрейм после манипуляции:
    .   A  B
    0  2  2
    1  3  4
    2  4  6
    3  5  8
    4  6  0
    5  1  2
    6  2  4
    7  3  6
    8  4  8
    9  5  0


    Подстроить под свои данные надеюсь сможете сами.
    Ответ написан
    2 комментария
  • Прогнозирование вне выборки. Как реализовать?

    @dmshar
    Странно, вы прочитали много книжек и статей, а вопрос задаете какой-то .... странный. А что можно прогнозировать внутри выборки? Прогнозирование - это ВСЕГДА получение значений вне вашей изначальной выборки.
    Ну, а фраза о том, что мало информации в интернете - вообще непонятная. Информации по этой теме не просто много, а чрезвычайно много.
    Ну вот, просто набрал в Google - и сразу:
    https://habr.com/ru/post/495884
    https://habr.com/ru/post/505338/

    Может проблема в том, что вы начали изучение сразу с нейросетей, не разобравшись с основами машинного обучения?
    По сути вопроса отвечаю, что-бы построить прогноз "вне выборки", надо сначала построить модель (обучить нейросеть на тренировочном датасете), потом валидировать модель (т.е. проверить работоспособность модели на тестовом датасете), а уж потом задать на вход независимые переменные (точно - момент времени, и возможно - значения других независимых переменных на этот момент времени) и модель вам должна выдать прогнозируемый результат.
    Но что-бы это лучше понять рекомендую все-таки ознакомиться с базовыми понятиями ML, включая теорию временнЫх рядов. Тогда и вопросов таких школьных в дальнейшем не будет.
    Ответ написан
    Комментировать
  • Почему проходит всего 1 итерация?

    @dmshar
    Вы заходите в цикл for item in numbers: с первым значением своего массива (10). Что-то там проверяете/меняете и выходите из функции по return. Все.
    Могу только предположить, что return nps имеет неверный отступ. Проверяйте.
    Ответ написан
  • Как это мне переделать для бота чтобы он выводил данные?

    @dmshar
    А идея начать с изучения Python вам самому в голову не приходила?
    Ну хоть отсюда: https://pythonworld.ru/bookshop/4.html
    Так и будем продолжать за каждой ошибкой или каждой запятой в программе бежать на форум?
    Ответ написан
    1 комментарий