• Правильно ли я понимаю устройство классов в python?

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

    2. Объект это python абстракция для данных, все данные в python представлены в виде объектов или взаимоотношений между объектами. Отсюда и выражение все в python является объектом.

    3. В python каждый класс не явно наследуется от object класс. Да даже если мы не переопределим явно __init__ то он там есть. Например
    class MyClass:
        pass
    my_instance = MyClass()
    print(dir(my_instance))
    Там будет в том числе __init__ хотя мы его явно не определяли. __init__ это конструктор класса там могут быть заданы атрибуты которые будут в области видимости экземпляра класса, с которыми будут оперировать методы экземпляра класса, он выполнится при создании экземпляра класса.

    4. По скольку, ты еще совсем новичок, понятия "приватных" и "защищенных" атрибутов обсуждать совсем бессмысленно, к тому же их "приватность" она в ковычках, в python нет способа создать настоящий приватный атрибут, но это все совершенно лишнее для тебя сейчас и в обозримом будущем.

    5. В зависимости от того является ли определенный метод методом класса или методом экземпляра класса, то первый позиционный параметр метода это класс или экземпляр класса. Между программистами python их принято называть cls - для класса, self - для экземпляра класса. Так как ты в начале пути будешь работать с методами экземпляра класса, да и необходимость создавать методы класса она значительно реже.

    Не думаю что тебе хоть что то стало понятней. По этому бери и изучай понимание будет приходить медленно и со временем, а не пытайся понять все вопросы на раз два.
    Ответ написан
    3 комментария
  • Почему не получается передать значение в экземпляр класса?

    Maksim_64
    @Maksim_64
    Data Analyst
    А почему он должен? Где ты объявил screen? У тебя есть self.screen, вот его и передавай.
    Ответ написан
    Комментировать
  • Как можно удалить фон или получить координаты кругов?

    Maksim_64
    @Maksim_64
    Data Analyst
    Очевидно нужно играть с параметрами. Например для первой картинки
    detected_circles = cv2.HoughCircles(gray_blurred,
                                        cv2.HOUGH_GRADIENT, 1, 45, param1=75,
                                        param2=25, minRadius=8, maxRadius=36)

    Даст улучшение в обнаружении, для первой картинки.
    param2 - чем меньше тем больше False окружностей он обнаружит. param1 - что то очень специфическое и каких то либо паттернов при увеличении или уменьшении я не заметил, ну остальное вроде понятно. Стало интересно, глянул так же в интернете, собственно везде приблизительно одно и тоже подбор параметров.
    Ответ написан
    Комментировать
  • Как определить большинство и меньшинство по числовой характеристике?

    Maksim_64
    @Maksim_64
    Data Analyst
    Как определить большинство и меньшинство по числовой характеристике?

    Если требуется точный ответ это не вопрос математической статистики. Математическая статистика она оценивает (дает приблизительную оценку с какой то степенью уверенности), но ничего не находит.

    Мы имеем данные случайную выборку (если она случайная, это требование, а не пожелание) и распределение откуда она была сделана, например нормальное распределение (нет никаких гарантий что ваше распределение нормально, возможно любое другое, я беру для примера.) 64db45fed6d86239091289.png

    У каждого распределения есть параметры, например у нормального это среднее арифметическое значение (μ) и Среднеквадратическое отклонение, часто называют стандартным отклонением (σ).
    На основании выборки с определенной степенью уверенности "оценивают" параметры распределения из которого была сделана выборка и затем обладая этими данными можно производить любые расчеты. Например, на графике выше по серединке это среднее отклонение людей от точки, стандартное отклонение это дистанция на сколько отклоняется. Например +- одно стандартное отклонение от среднего это 68% человек.

    Так вот это не в коем случае не решение вашего вопроса, это фреймворк о том как мыслить.

    Ваше распределение не известно, его нужно оценивать. И нормальное здезь не подойдет потому что ни какой симметрии у вас нет. От 1 метра и выше, то есть распределение будет другое его надо оценить, первый кандидаты это экспонентное распределение , и им подобные. Потому что мы имеем некое скопление и затем чем дальше тем меньше вероятность (как я понял).

    Что бы ответить на ваш вопрос надо произвести моделирование распределения и оценку его параметров. Потом мы можем отвечать что например 5% процентов людей будет на расстоянии от например 20-25 метров. Или любые другие вопросы.
    Ответ написан
  • Как лучше повышать словарный запас?

    Maksim_64
    @Maksim_64
    Data Analyst
    лучше учить слова: с английского на русский или с русского на английский?

    На мой взгляд не то и не другое. Изучать английский и переводить это разные вещи это далеко не всегда слово на русском -> слово на английском и наоборот.

    Нужно потреблять информацию на английском, учится на английском, и понимать смысл. В процессе понимания смысла о чем речь какое то слово не понятно, глянул в английском словаре его значение, а не в гугл переводчике, и понял что к чему.

    Если переводить например английскую статью на русскую или наоборот то перевод он не по словам будет а по смыслу.
    Ответ написан
  • Как можно средствами python сделать такое окно, чтобы не в самом коде менять параметры моделирования тела, а из такого окна?

    Maksim_64
    @Maksim_64
    Data Analyst
    matplotlib для визуализаций в том числе интерактивных + tkinter для gui. Вот можешь прям пример из доков matplotlib взять для создания интерактивного графика, где ты можешь изменять частоту синусоиды и начать из него делать то что тебе нужно. https://matplotlib.org/stable/gallery/user_interfa...
    Ответ написан
    Комментировать
  • Почему увеличивается разрядность дробной части после округления в pandas?

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

    bad_rounding_result = pivot_table_type_of_expenses.iloc[6, 1]
    df1 = pd.DataFrame({'A':[bad_rounding_result]})
    print(df1) 
    print(df1.iloc[0,0])
    В df1 оно будет нормально, будешь доставать будет вот такое. Если тебе надо после вычеслений рапортовать это где то ну отформатируй его строкой да и все.
    Ответ написан
  • Как сделать, чтобы при сборе определённого количества монет, игра завершалась?

    Maksim_64
    @Maksim_64
    Data Analyst
    Если есть игра значит есть некий цикл в котором происходят события. До цикла объявляешь переменную счетчик монет, в цикле обновляешь значение переменной. Например count = 0 это инициализация до цикла. count = count + profit это в цикле, где profit это количество монет которое игрок получил за определенное действие, ну и проверочка если count равен твоему определенному количеству, то остановка цикла и выход из игры.
    Ответ написан
    2 комментария
  • Почему не получается вывести значение поля Entry в Tkinter?

    Maksim_64
    @Maksim_64
    Data Analyst
    Код я не запускал, не тестил. Наверное
    Button(w, text="Отправить", command=clicked_send).pack()
    Здесь, ты передаешь парметром функцию у которой есть в свою очередь свой позиционный параметр entry_id. На его отсутствие он и ругается. Поправить можно либо lambda либо partial из functools

    Button(w, text="Отправить", command= lambda: clicked_send(entry_id)).pack()

    или так
    Button(w, text="Отправить", command= partial(clicked_send, entry_id).pack()
    предварительно импортировав partial.
    Ответ написан
  • Как точность нейронной сети зависит от функции активации?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну "формулировка" вашего вопроса, говорит о том, что надо начать с архитектуры нейронных сетей.

    Узел (Node) | Персептрон | Нейрон | Unit - все это одно и тоже, вычислительная единица которая имеет входные данные, функцию активации, выходные данные.

    функция активации - определяет каким образом взвешенная сумма (weighted sum) ввода трансформирована в вывод из нейрона.

    Слои Layers Input Layer, Hidden Layer, Output Layer.

    Нейронные сети используют одну и туже функцию активации внутри слоя. Часто внутри Hidden Layers используется одна функция активации, а в Output Layer другая в зависимости от типа задачи например мы хотим интерпретировать выходной слой как вероятности, что бы они были от 0 до 1 и суммировались в 1. И наша функция активации в Hidden будет RELU, а в Output Layer Sigmoid например. Потому что каким таким чудом RELU нам даст числа которые могут быть интерпретированы как вероятности? Нормализация не решит наших проблем RELU не может быть использована в задачах классификации в OUTPUT LAYER в HIDDEN на здоровье самая популярная.

    Я к чему это все, вы в своем вопросе упускаете этот момент, что это обычное дело иметь разные функции активации для Hidden и Output Layer's.

    Для Hidden Layer вот эти три функции самые популярные.

    1. Rectified Linear Activation (ReLU)
    2. Logistic (Sigmoid)
    3. Hyperbolic Tangent (Tanh)

    Для Output Layer вот эти функции самые популярные.
    1. Linear
    2. Logistic (Sigmoid)
    3. Softmax

    Подробнее про Output Layer линейная функция активации, она не для мебели в списке, а это как нейронные сети решают задачи регрессии, то есть например для регрессии например Hidden Layer - RELU + Output Layer - Линейная функция, это абсолютно нормальная конфигурация.

    Для классификации там или softmax или logistic в Output Layer. В зависимости от количества классов и т.д.

    Про количество нейронов да и количество слоев мы имеем.

    Size - количество нейронов в модели
    Width - количество нейронов внутри слоя
    Depth - Количество слоев в модели.

    Сколько нейронов использовать внутри слоя? Ответ мы не знаем, это дизайн ты экспериментируешь, нету на этот счет теории. Сколько слоев? больше одного не считая входного, если объекты нельзя разделить в пространстве прямой линией (Linearly separable). Дальше этого у нас нет теории сколько слоев иметь, эксперимент и еще раз эксперимент. Так обычно нейронные сети имеют 2+ hidden layers.

    По этому вопрос сколько слоев и нейронов в каждом на сегодняшний момент имеет ответ - экспериментируйте.
    Ответ написан
  • Является ли данный код решением задачи о рюкзаке?

    Maksim_64
    @Maksim_64
    Data Analyst
    Смотря в чем задача конкретно, задача рюкзака это общее название.
    У тебя код осуществляет попытку найти максимальную ценность предметов при условии, что в рюкзак можно положить 4 кг. На твое тестовом сете он работает правильно, если я изменю тестовый сет то нет. Например если я сделаю
    =[(4000,4), (2500,1),(2000,3), (8000, 2), (9000, 4), (7000,2)]
    То я ожидаю ценность 15000, а он дает все равно 10500.
    Я бы рекомендовал тебе статью https://www.geeksforgeeks.org/0-1-knapsack-problem... там несколько имплементаций в том числе и рекурсивный, и оптимизированный динамический, и на нескольких языках.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Когда требуется вернуть несколько значений то их собирают в коллекцию например список, кортеж и возвращают. Например return img, gray перед возвращением будет создан объект кортеж и затем возвращен туда откуда была вызвана функция.
    инструкция return означает выход из функции, при условии что функция не рекурсивная (там return может останавливать рекурсию, но не обязательно выходить из функции). Твоя функция обычная и в ней есть два return

    То есть по идее ты хочешь сделать два альтернативных условия выхода из функции при этом в ней нет не каких условий. Он дойдет доreturn lab_gray при чем первый раз он и цикл то не выполнит весь если там больше одного элемента вернет значение и выйдет из функции. При условии что объект по которому ты итерируешься не пуст, иначе он пропустит цикл и вернет return img, gray

    lab_gray у тебя инициализируется внутри цикла то есть ты можешь потенциально вернуть только последнее состояние. Насчет img, gray ты передал их параметрами и они доступны в локальной области видимости функции.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну если оставить всю твою логику, то можно просто отфильтровать, пустые строки из результатов которые он находит.
    matching_rows.append([x for x in row if x])
    Ответ написан
    Комментировать
  • Задачка про строки, индексы в Python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Как в Python найти индекс введенного числа без учета регистра
    Какие у чисел регистры?
    Если же речь про буквы. То метод lower надо применить и к строке в которой ты ищешь.
    a = 'Hello World'
    b = input().lower()
    print(a.lower().find(b))
    Ответ написан
    2 комментария
  • Какой проект можно сделать, чтобы выучиться на Data Engineer?

    Maksim_64
    @Maksim_64
    Data Analyst
    Окей, я не Data Engineer, если таковые тут есть пусть меня поправят. Смысла делать какой либо проект без теоретических знаний в этой области я не вижу. Работа инженера по данным это построения пайплайнов, где стартовая позиция это сырые данные, а конечная это хранилище из которого BA/DA/DS ,будут брать эти данные.

    В зависимости от того что это за данные классические или бигдата архитектура этого пайплайна и типы хранилищ очень варьируется. И на вашем бы месте я бы смотрел в сторону Big Data Engineer потому что без него не обойтись, где классические данные там data engineering иногда весьма размыт и раскидан по разным специалистам.

    Проекты как таковые легко гуглятся, но повторюсь лично по моему мнению без соответствующего образования в этой профессии делать нечего.

    Ответ не претендует на истину, пусть data engineer's выскажутся.
    Ответ написан
    Комментировать
  • Рекурсивный вызов в цикле?

    Maksim_64
    @Maksim_64
    Data Analyst
    x - равняется 0 в твоем коде. Перенеси print(x) в самый верх и увидишь. Рекурсия это бесконечный цикл вызова функцией самой себя, до тех пор пока базовое состояние не прервет его (одно или несколько). None ты в конце видишь потому что это printтебе его возвращает, у тебя уже есть print внутри функции.
    def f(x):
        print(x)
        if x==0:
            return 
        else:
            f(x-1)         
    f(3)
    . В твоем случае он тоже выйдет и return 0 он выполняет, замени return на pass и получишь бесконечную рекурсию.

    Насчет None у тебя вот такая ситуация print(print(1))

    ОТРЕДАКТИРОВАНО После дискусии с Zzzz9, выяснилось, что я не прав насчет None. Базовый кейс в рекурсии останавливает рекурсию, но не выходит из функции. Что бы мы вернули значение базового кейса нам нужно добавить return к рекурсивному случаю. Например
    def f(x):
        if x==0:
            return 100
        else:
            f(x-1)
    print(f(3))

    Вот так выход из рекурсии настает, но рекурсивный кейс не имеет return и функция вернет None а вот в такой вариации
    def f(x):
        if x==0:
            return 100
        else:
            return f(x-1)
    print(f(3))
    Функция вернет 100. Насчет print я полную глупость написал, он возвращает None и я подумал, что это имеет место. Глупость полная. если мы добавляем return к рекурсивному кейсу то выведет то что возвращает базовый кейс. А базовый кейс только останавливает рекурсию но не выходит из функции.

    Насчет цикла если мы добавим return к рекурсивному кейсу то for цикл выполнится только один раз, потому что базовый кейс остановит рекурсию а рекурсивный кейс имеет return соответсвенно, функция напечатает изменение x + один добавочный 0, который возвращает return в базовом кейсе. Например
    def f(x):
        print(x)
        if x==0:
            return 'Конец'
        for i in range(10):
            return f(x-1)
    print(f(3))
    Цикл выполнится лишь раз и затем выход из функции.
    Ответ написан
  • Что изучать после пайтона?

    Maksim_64
    @Maksim_64
    Data Analyst
    Часть первая: Английский Язык.

    Часть вторая: поставь anaconda и jupyter lab

    Часть третья: python фреймворки
    1. numpy - изучать каждый метод не нужно, нужно освоить broadcasting Это правила по которым происходят операции с массивами разной размерности. Не изучишь, не сможешь работать с нейронными сетями и много еще с чем.

    2. pandas - нужно научится понимать, как работают индексы (вся мощь но и сложность лежит в индексах особое внимание к многоуровневым индексам). Группировки объект groupby. Решайпинг, методы stack, unstack, melt и т.д. Решайпинг сложная тема, но без нее никуда.

    3. matplotlib - нужно научится работать в ооп стиле, а не в матлаб стиле.

    Вот эти 3 можешь начинать изучать без математики. учить по документации . Скачай учебные датасеты простенькие, задавай им вопросы применяй и визуализируй.

    4. scikit-learn - это машинное обучение, тебе понадобится разобраться что такое оценщик (estimator) и transformer (трансформатор). Также научится пользоваться пайплайнами, объект Pipeline это для старта, естественно.

    5. statsmodels - это не много иной взгляд на машинное обучение он включает в себя инферентивную статистику. Например построив логистическую регрессию, я могу посредством этой библиотеки найти каким образом изменение на одну единицу одного из моих предикторов отражается на вероятности, так называемый маржинальный эффект. Это очень важно для бизнеса. Также A/B тесты тоже там, и многое многое другое.

    4 и 5 также учить по документации она совершенно фантастического уровня особенно для scikit-learn + очень важный плюс В этой области есть классика это книга Statistical Learning книга написана профессорами стенфорда, в мире датасаенс она очень известна. Раньше она была написана на R, я ее читал на R в свое время, так вот 2023 году этим летом вышла python edition. Книга и код доступны бесплатно. https://www.statlearning.com/
    Это уникальная книга без равных, но к ней надо быть готовым.

    Часть Четвертая: Математика
    Все что нужно есть на Khan Academy. Начни со своего уровня и вперед, математика тебе нужна вся. Особенно Calculus. Заходишь на Khan Academy и вперед проходи бесплатные курсы со своего уровня,
    Algebra 1,
    Algebra 2,
    Precalculus,
    AP/College Calculus AB
    AP/College Calculus BC
    Statistics and Probability
    AP College Statistics

    Вот эти курсы вот этом порядке, ты должен освоить, то есть в конце курса финальный тест, должен проходить играючи, и все делать на листке бумаги не читерить, сам себя обманешь. Потом книга что я указал выше, код в книге естественно в основном использует scikit-learn и statsmodels, + первые три библиотеки само собой.

    Потом придется прочитать еще пару книг по теории вероятности и статистике отдельно (со временем). Если calculus на Khan Academy на должном уровне, то вот теория вероятности и статистика слабенькая, нужно будет добавлять.

    В добавление еще SQL но поверхостно, уровень не сложных запросов и подзапросов. Все дела будут происходить в pandas.
    Ответ написан
    Комментировать
  • Как решить проблему с кодировкой в pandas?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. пробуй менять параметр encoding у функции read_csv. Если знаешь кодировку файла.
    2. можешь попробовать задать параметр engine='python'

    Для детекции кодировки можно использовать chardet
    import chardet
    with open(filename, 'rb') as rawdata:
        result = chardet.detect(rawdata.read(100000))
    result

    И затем пункт первый.
    Ответ написан
    Комментировать
  • Как сделать чат-бот на основе ИИ, обученный на собственной базе знаний?

    Maksim_64
    @Maksim_64
    Data Analyst
    Есть ощущение, что вы ожидаете очень сложного ответа, а ответ очень прост. Нет никакой математики в этой задаче, так же нету в этой задаче и архитектуры нейронных сетей. Есть лишь только работа с API, что оно предоставляет, таковы и возможности. Если бы мне нужно было решать такую задачу, я бы открывал статьи на medium (открывается с vpn) и естественно смотрел бы в стороны платных статей и от них бы отталкивался, потому что там множество пошаговых гайдов высокого качества для создания чат-ботов на базе GPT ( предполагаю вы свободно владеете английским).
    Ответ написан
    2 комментария
  • Как сделать оформление словаря в txt файле и вычитывание значений из этого файла?

    Maksim_64
    @Maksim_64
    Data Analyst
    Когда мы храним информацию в файлах, то эта информация имеет определенную структуру. Вот это RPG = Dragon_Age, The_Elder_Scrolls_Skyrim Плохая структура, которая потребует парсинга, сами себе создаем проблемы.

    Мы можем использовать например json для создания хранения.
    import json
    data = {
        "RPG": ["Dragon_Age", "The_Elder_Scrolls_Skyrim"],
        "Action": ["Grand_Theft_Auto_V", "Watch_Dogs"],
        "MMORPG": ["Lineage_2", "Aion"],
        "Shooter": ["Bulletstorm", "Splinter_Cell"],
        "Racing":["Need_For_Speed_Payback", "Blur"]
    }
    
    with open("data.json", "w") as f:
        json.dump(data, f)

    Здесь, мы создаем файл определенной структуры. Из которого нам будет легко извлекать информацию.

    with open('data.json', 'r') as f:
        json_object = json.load(f)

    Все вся наша информация в словаре. С которым нам удобно работать.

    Теперь по поводу случайного выбора. Вы мало информации представили, по этому поводу. Выборка может происходить с заменой Выбрав элемент, я его возвращаю обратно и он может быть выбран снова. без замены Выбрав элемент он больше не может быть выбран снова. Информации как вы хотите осуществлять выборку вы дали мало. Например я могу использовать shuffle (перемешать элементы) и выбирать элемент c нулевым индексом всегда.
    from random import shuffle
    genres = list(json_object.keys())
    shuffle(genres)
    genre = genres[0]
    print(f'Вам выпал жанр: {genre}')
    games = json_object[genre]
    shuffle(games)
    game = games[0]
    print(f'Вам выпала игра: {game}')

    Это будет выборка с заменой. Мы можем использовать вместо выборки по индексу метод pop у списка и получим эффект выборки без замены (Но надо понимать объект json_object будет изменяться). Можно пойти и вашим путем. Осуществлять выборку индекса и выбирать по индексу, тоже нормальное решение.

    В общем основная проблема это не верно выбранная структура.
    Ответ написан
    Комментировать