• Не работает модель для игры камень, ножницы, бумага?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вся твоя затея не имеет никакого смысла. KNeighborsClassifier - использует по умолчанию Minkowski metric, что эквивалетно для p=2, обычной Евклидовой дистанции.

    Евклидова дистанция не имеет никакого смысла - для категориальных переменных на вход, она мощный инструмент для непрерывных и бесполезный для категориальных. А у тебя именно категории stone, shears и paper которые закодировал ты правда, совершенно не правильно. Тебе тут нужен OneHotEncoder, а так ты как бы говоришь алгоритму что paper (3) чем то отличается по весу в модели чем stone (1) . В целом можно работать с так называемой Hamming distance, которая позволяет KNeighborsClassifier получать категории на вход, но scikit-learn не поддерживает ее из коробки, то есть ее можно добавить как custom metric.

    Если ты собираешься чему то научится то:
    1. Изучи примеры с объектом pipeline он позволяется осуществлять трансформации на тестовом и тренировачном датасете, внутри пайплайна.

    2. Для любого алгоритма для этой задачи необходим OneHotEncoder его прям в пайплайн встроешь. Примеры в доках scikit-learn имеются.

    3. По скольку у тебя категориальные переменные на вход, то используй алгоритмы которые базируются на деревьях решений. Все они есть в scikit-learn.
    Ответ написан
    2 комментария
  • Что вы делаете, если застряли на задаче?

    Maksim_64
    @Maksim_64
    Data Analyst
    Все просто, ты взял задачу себе не по уровню, по этому и нет прогресса. Браться надо за то что для тебя выполнимо в данный момент и так шаг за шагом расти по не многу.
    Ответ написан
    Комментировать
  • Палиндром задачка с leetcode?

    Maksim_64
    @Maksim_64
    Data Analyst
    Наверняка возвращать нужно не строковые значения, а булевые. True, False.
    Ответ написан
  • Как посчитать и вывести уникальные значения колонок dataframe, которые имеют тип коллекции/списка?

    Maksim_64
    @Maksim_64
    Data Analyst
    С помощью цикла однозначно не придется. Встроенный инструмент есть, даже много.
    чтобы мне достать из этих столбцов уникальные значения
    Вот это не совсем понятно, может имелось ввиду из списков, уникальные, и что значит достать.

    Если у тебя твои данные в списках то можно использовать explode.
    (
        pd.DataFrame({
            'ID':[1,2],
            'genres':[['Strategy'],['Fightening','Adventure','Arcade']]
        })
        .explode('genres')
    )
    Затем unique (уникальные) value_counts (посчитать каких и сколько у тебя там) или все что угодно, опций огромное количество. Обрати внимание структура фрейма не рушится (поведение колонки ID).

    В качестве ответа. Цикл не использовать, можно все. Для более конкретного ответа. Предоставляешь игрушечный фрейм, и то что ты хочешь увидеть, на выходе. По скольку словами не очевидно, что именно ты хочешь.
    Ответ написан
    Комментировать
  • Почему график функции и график производной не сходятся?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты перепутал, производную и касательную линию (tangent line). Графический калькулятор похож на desmos загугли tangent line desmos. Полно видео как построить. Ну и почитай про взаимоотнношения касательной и первой производной.
    Ответ написан
    1 комментарий
  • Как улучшить выводимый граф?

    Maksim_64
    @Maksim_64
    Data Analyst
    Networkx - крутая библиотека, но графики это не ее основное направление, вся суть Networkx это интерфейс для алгоритмов, связанных с графами, визуализация лишь приятный бонус.

    Подобная история весьма распростронена для python экосистемы, например stasmodels (статистические модели) тоже имеет визуализацию и тоже matplotlib в качестве бэкенда, sympy крутейшая библиотека для работы с математическими выражениями тоже имеет в дополнение визуализацию и тоже matpltolib в качестве бэка.

    У подобных кейсов возможности визуализаций крайне ограничены.

    Тебе нужно организовывать визуализацию самостоятельно, то есть получить данные как структуры данных и визуализировать их. Посмотри в сторону networkx + plotly.

    plotly из коробки имеет огромное количество эффектов которые улучшат читабельность графа, зум можно будет легко добавить и иные эффекты. Matplotlib все это тоже позволяет, просто с позиции реализации это на много сложнее.

    гугли примеры networkx + plotly и стратегия твоя это визуализация не средствами networkx а средствами сторонней библиотеки, я предложил plotly с позиции временных затрат на реализацию.
    Ответ написан
    1 комментарий
  • Какую ошибку выдаёт код для тг бота?

    Maksim_64
    @Maksim_64
    Data Analyst
    По совету из форума вот отсюда https://community.openai.com/t/typeerror-openai-in...
    OpenAI(api_key="Your API Key")

    Ну а по смыслу ошибки, идет инициализация класса первым аргументом там self, второй твой позиционный который не предусмотрен, согласно совету из форума должен быть именованный. Для примера попытка инициализировать вот такой кастомный класс выдаст точно такую же ошибку.
    class A:
    
        def __init__(self,*, key=None):
            self.key = key
    
    a = A('12345')
    Ответ написан
    Комментировать
  • Какую нейросеть можно использовать для позиционирования стикера на макете упаковки товара?

    Maksim_64
    @Maksim_64
    Data Analyst
    Безнадежные вводные.
    1. Никто не будет делать и предоставлять в открытом доступе нейронные сети столь узкой направленности. Это не имеет ни какого коммерческого смысла.

    2. Здесь речь идет о профессиональном софте работы с изображениями который поддерживает скриптинг (для автоматизации процесса).

    Какой именно понятия не имею, я в этом не разбираюсь.
    Ответ написан
    6 комментариев
  • Что означает запись в скобках сразу после инициализации?

    Maksim_64
    @Maksim_64
    Data Analyst
    Действительно, все очень просто.
    namedtuple - это функция которая возвращает объект класса namedtuple, который является подсклассом встроенного tuple. Где первый параметр, это имя типа данных. Второй это параметры.
    from collections import namedtuple
    Point = namedtuple("Point", ['x','y'])
    point = Point(2,4)
    print(point)

    Теперь представим есть некий словарь и просто перепишем в одну строчку, с распаковкой параметров '*'.
    d = {
        'x':2,
        'y':4
    }
    
    print(namedtuple('Point',d.keys())(*d.values()))

    d.keys() это коллекция ключей строк, как в пошаговом примере, *d.values() это распакованная последовательность значений.
    Ответ написан
    Комментировать
  • Как инициализировать переменную раньше функции в Python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Что то ты с кодом ты напутал. Список может быть изменен из функции. Внутри функции python работает следующим образом.
    1. Первым делом python смотрит есть ли ключевое слово global

    2. Вторым есть ли ключевое слово nonlocal

    3. Третьим в параметрах, если там имя есть то переменная становится локальной.

    4. Если переменная упоминалась (но не было определена) то python смотрит на нелокальную область видимости.

    5. Если переменная упоминалась (но не было определена) и не найдено в нелокальной области видимости то смотрит в модуле

    6. Если и там не нашел то в встроенных пример max,min и т.д.

    a = 1
    b = 2
    c = 3
    
    def func():
        print(a,b,c)
    
    if __name__ == "__main__":
        func()
    Работает, как ожидается, а теперь маленькое изменение
    a = 1
    b = 2
    c = 3
    
    def func():
        print(a,b,c)
        c = 100
        print(c)
    
    if __name__ == "__main__":
        func()
    И все ошибка даже print(a,b,c) не выполнится. Потому что с находится в локальной области видимости функции python ее находит и также он находит ее упоминание (print(a,b,c)) до ее определения.

    def func():
        global c
        print(a,b,c)
        c = 100
        print(c)
    
    if __name__ == "__main__":
        func()


    Вся это проблема актуальна только для НЕ мутабельных типов например
    a = [0]
    b = [0]
    c = [0]
    
    def func():
        print(a,b,c)
        c.append(100) 
        print(c)
    
    if __name__ == "__main__":
        func()

    Все работает как и ожидается. Ну и пару слов об использовании global. Я персонально не сторонник утверждения никогда не используй global Но безусловно данная конструкция актуальна для не локальной области видимости то есть вот так.
    def func():
        total = 0
        def inner():
            nonlocal total
            total +=1
            return total
        return inner
    
    
    if __name__ == "__main__":
        add = func()
        print(add())
        print(add())
        print(add())
    Если убрать ключевое слово nonlocal то мы получим ошибку.
    Ответ написан
    Комментировать
  • Почему не инициализируется экземпляр класса?

    Maksim_64
    @Maksim_64
    Data Analyst
    def __int__(self): Внимательно надо быть. __init__
    Ответ написан
    1 комментарий
  • Как в pandas объединить непрерывную последовательность событий одного типа в интервал?

    Maksim_64
    @Maksim_64
    Data Analyst
    Давай по порядку пандас запрос который решает вопрос.
    (
        df
        .assign(
            groups=(df['EventType'] != df['EventType'].shift())
            .cumsum()
        )
        .groupby('groups'
        )
        .agg(
            first= pd.NamedAgg(column='EventTime',aggfunc=lambda x: np.min(x)),
            last= pd.NamedAgg(column='EventTime',aggfunc=lambda x: np.max(x)),
            EventType= pd.NamedAgg(column='EventType',aggfunc=lambda x: set(x).pop()),
            user_id=pd.NamedAgg(column='user_id',aggfunc=lambda x: set(x).pop()),
            )
        .reset_index(drop=True)
        .loc[:,['user_id','EventType','first','last']]
    )


    Ключевая история это группировка с последовательно повторяющимися значениями. Вот этот запрос по сути решает весь вопрос
    (
        df
        .groupby(
            (df["EventType"] != df["EventType"].shift())
            .cumsum()
        )
        .agg({"EventTime" : ["min", "max"]})
    )
    Остальное это манипуляции для идентичного твоему вывода (писал на скорую руку совместил агрегации с трансформациями) что не есть хорошо, я бы поработал и сделал лучше. В целом сработает и для строк, но лучше привести EventTime к типу данных datetime64[ns]. Сделать это можно
    (
        df.assign(
            EventTime=lambda x: pd.to_datetime(x['EventTime'],format='%Y-%m-%d %H:%M:%S')
        )
       ... 
    )
    Ответ написан
    4 комментария
  • Почему вместо значения в print выводит function at 0x?

    Maksim_64
    @Maksim_64
    Data Analyst
    Потому что ты выводишь объекты своих методов, а надо их вызвать () - скобки потерял.
    def chet(kva):
        print("Площадь квадрата:", kva.Plohad())
        print("Периметр квадрата", kva.Perimetr())
    chet(kva)
    Ответ написан
    Комментировать
  • Pandas, может ли он задавать ширину столбца при записи в excel таблицу?

    Maksim_64
    @Maksim_64
    Data Analyst
    Пандас использует различные "writer's" для записи файлов. Говоря об xlsx файлах, по умолчанию это XlsxWriter (это не единственный ты можешь использовать другие, у методов по типу to_excel, есть параметр engine).

    Как осуществляется взаимодействие и настройка вывода там в принципе все что угодно можно читать здесь https://xlsxwriter.readthedocs.io/working_with_pan...

    также в меньшей степени но можешь перичитать доки к to_excel методу. Там есть пару примерчиков как использовать XlsxWriter. Но основное по ссылке.
    Ответ написан
    Комментировать
  • Как мне вывести список с экземплярами класса?

    Maksim_64
    @Maksim_64
    Data Analyst
    Добавь классу Card идентичный методу __str__, метод __repr__.
    Ответ написан
  • Можете порекомендовать книги для практических заданий Python Data Science?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. От создателя pandas 3-е издание его легендарной книги Python for Data Analysis, 3E Веб версию, книги он сделал бесплатной. Для новичков шикарно, основные библиотеки плюс jupyter.

    2. От профессоров стенфорда, класика по DS с 2023 python edition (с лабараториями и сложными упражнениями). Так же доступна бесплатно. An Introduction to Statistical Learning
    Ответ написан
    3 комментария
  • Что делать, если при учете константы в регрессионном анализе r-квадрат ужасен, но нет оснований не учитывать её?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Теоретически это возможно иметь такую разницу в r-squared. Но довольно редкий кейс, я бы перепроверил данные.

    2. Нужно/ Не нужно это вопрос моделирования. Как ты собираешься интерпретировать модель, если ты используешь линейную регрессию (модели с высокой степенью интерпретации), то ты всегда отталкиваешься от бизнес значений параметров и ошибок. Константу оставляют например когда при нулях (или значениях очень близких к нулю), модель не должна показывать ноль.

    3. Посмотри на другие метрики например среднюю абсолютную ошибку, медианную абсолютную ошибку. Все они имеют хорошую бизнес интерпретацию с которой легко работать. Сам по себе r_squared это количество вариативности (дисперсии) объяснено моделью. 0.19 (19 процентов) вариативности объяснено моделью. Что очень мало и я назвал бы такую модель негодной. В то время как 0.99 (99 Процентов) очень много это учебные показатели, но это еще не все это не означает все супер. Посмотри на вышеупомянутые метрики они измеряются в единицах твоего таргета. Как они себя ведут.

    4. RSS, ESS, TSS - далековато от бизнеса. Это значения которые нужны для F статистики. А она у тебя говорит сама за себя 4314 и 5. Первая модель (где 5) совершенно не пригодна. Вторую перепроверяй, и мысли категориями интерпретации. Это сама суть регрессивного анализа.
    Ответ написан
    2 комментария
  • Почему функция возвращает None?

    Maksim_64
    @Maksim_64
    Data Analyst
    Потому что у тебя в рекурсивном кейсе отсутствует return Когда функция не имеет return python возвращает None
    ...
    else:
        return player_input()
    Ответ написан
    1 комментарий
  • Сохраняется ли куда-то скриншот в Pyautogui?

    Maksim_64
    @Maksim_64
    Data Analyst
    Какую память? В текущем виде pyautogui.screenshot() Это объект который хранится в памяти (оперативной). image Это именованный указатель на этот объект. Если ты хочешь сохранить на диск, то нужно указывать путь.
    Ответ написан
  • Какая есть литература полезная и понятная по Data Science на русском?

    Maksim_64
    @Maksim_64
    Data Analyst
    Data Science довольно широкий термин. Насчет Deep Learning посмотри недавно советовал хорошую книгу Ну а насчет Data Science слишком широко берешь, вышеупомянутый Deep Learning относится к DS, статистические тесты, вероятностное моделирование и т.д. также относится к DS, при этом они требуют углубления в совершенно разные разделы математики.
    Ответ написан
    1 комментарий