• Как исправить TypeError: Products() takes no arguments?

    Maksim_64
    @Maksim_64
    Data Analyst
    Код то верный а вот из-за того что вы не сделали отступ для функции __init__ вам и выдает вашу ошибку.
    class Products:
        id = 1
    
        def __init__(self, name: str, firma: str, category: str, price: int) -> None:
            self.id = Products.id
            self.name = name
            self.firma = firma
            self.category = category
            self.price = price
            Products.id += 1
    
        def __str__(self) -> str:
            return f'''
    Id: {self.id}
    
    Name: {self.name}
    
    Firma: {self.firma}
    
    Category: {self.category}
    
    Price: {self.price}'''
        
    technic = [
    Products('Холодильник', 'LG', 'кухонная техника', 70600),
    Products('Утюг', 'HIER', 'гладильная техника', 53450)
    ] + [
    Products('Посудомоечная машина', 'LERAN', 'кухонная техника', 22000) for i in range (5)
    ]

    Вот так все работает.
    А у вас функция def __init__ это не метод класса а отдельная функция.
    Ответ написан
    1 комментарий
  • Какой тут критерий подойдет для аб тестирования?

    Maksim_64
    @Maksim_64
    Data Analyst
    A_p - пропорция НЕ отмененных в контрольной 0%
    B_p - пропорция не отменных в тестовой группе
    Нулевой гипотезой будет A_p = B_p
    Альтернативной гипотезой A_p не равно B_p

    Находите p-value (вероятности увидеть B_p при условии A_p истина) если p-value меньше заранее установленного уровня например в 5% то отвергаете нулевую гипотезу и делаете вывод ЕСТЬ статистическая разница, если нет то мы не имеем достаточно доказательств для отвергания нулевой гипотезы.

    в итоге что тут может подойти ztest чтобы я узнал:

    ztest - тут не подойдет. Вам нужен тест Фишера на различие двух пропорций. Гуглите Fisher's exact test for two proportions. И там пошагово найдите p-values. И решите вашу задачу.
    Ответ написан
  • Как обратиться к данным из csv таблицы?

    Maksim_64
    @Maksim_64
    Data Analyst
    Первое я почти все оставлю как у вас что бы вашу логику не нарушать, внесу небольшие изменения.
    def read_csv(filename):   #зачем у вас в оригинале параметр data если вы его не используете логичнее передавать имя файла.
        with open(filename, encoding='utf-8') as file:
            reader = csv.reader(file)
            data = list(reader)
            return data

    далее используем вашу функцию для чтения получаем вложенный список в ответ, а нам он не нужен вложенный нам обычный нужен по этому распрямляем его.
    data = read_csv('urls.csv')
    flat_list = [item for sublist in data for item in sublist]


    далее по все видимости вы собираетесь использовать эти ссылки для парсинга
    пишете функцию которая будет парсить проходитесь циклом по списку flat_list и передаете в функцию по одной ссылке и все. Ваша функция будет принимать параметр url, затем делать request, затем beatifulsoup будет парситьи отдавать результат. Сделайте функцию которая делает это все для одного url, потом циклом по списку внутри цикла вызывайте функцию с параметром url.

    А теперь общие соображения.
    Зачем csv? когда читаешь csv он возвращает список под каждую строку, с обычного txt, мы бы этого избежали, я бы использовал бы вообще для записи json. Где ключом было бы название товара, а значением ссылка. Потому что если что не будет работать, то будет известно какой товар не удается спарсить.

    Нужно создавать log file и писать туда что отдал сервер при запросе и туда же писать различные исключения а то потом ума не дашь где ошибка.

    В коде много лишнего, параметр data в обоих случаях нужно заменить на filename. И много других погрешностей.
    Ответ написан
  • Как добавить элемент в двумерный список?

    Maksim_64
    @Maksim_64
    Data Analyst
    result = [[i+5 for i in row] for row in l]
    print(result)

    где l - это ваш список.
    Ответ написан
    Комментировать
  • Как высунуть из for и элемент и номер?

    Maksim_64
    @Maksim_64
    Data Analyst
    l = ['a', 'b', 'c']
    for num, value in enumerate(l):
        print(num, value)
    Ответ написан
    Комментировать
  • Какой алгоритм лучше подходит для определения прибыльной сделки на бирже?

    Maksim_64
    @Maksim_64
    Data Analyst
    А вы уверенны что тюните правильно, при тюнинге вы не должны сравнивать с тестовым сетом, это приведет к классической ошибке утечке тестовых данных. Нужно создавать либо либо третий сет валидации либо использвать кросс-валидацию но с осторожностью (там можно то же набедакурить и получить утечку и на практике никаких 0.7 вы не увидите).

    Если у вас есть алгоритм который например в течении следующих торговых 252 дней, покажет точность 0.7 то вы богаты. 0.7 вероятность успеха при экспонентом росте хватит с головой. (Помните что речь о последовательности) а не а классической классификации или регрессии. Возможно вы учите модель на данных которых у вас не будет в момент прогноза, (классическая ошибка). То есть все ваши данные должны быть: это различные индикаторы (оконные функции, которые с агрегировали статистику за определенное время), например какой нибудь скользящее среднее с окном 10, скользящее среднее с окном 21 и.т.д. Ваши вход X это набор индикаторов, статистик которые будут вам доступны в момент предсказания.

    Там временная последовательность, кросс-валидация делается специальным классом для этого в документации sklearn есть про это в разделе кросс-валидации.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    У меня сомнения насчет верности данного выражения все так онлайн калькуляторы его дают. Но, Основную теорему исчисления никто не отменял,
    63eb217502bd3893880425.png То что предлагают онлайн калькуляторы это конечное выражение где все замены сделаны, и далее при подстановке как вы верно заметили мы получим 0. Онлайн калькуляторы в это же время дают правильный ответ приблизительно 1.4 Это потому что не один онлайн калькулятор включая вольфрам ничего не куда не подставляет он использует алгоритмы приблизительного измерения интегралов.

    Я в свою очередь использовал python модуль sympy для интегрирования. При интегрировании неопределенного интеграла я получил другое выражение
    63eb29a5dd3f6302119842.png
    где atan - это arctan а квадратные скобки это абсолютная величина (выражение по модулю). Не смотря на всю некрасивость данного выражения, при подстановке
    F(2*pi) - F(0) оно даст 1.40. F(2*pi) будет 0 а F(0) будет -1.40, ну и соответсвенно 0 - (-1.40) = 1.40

    Что совпадает со всеми онлайн калькуляторами.
    Ответ написан
  • Почему не парсятся картинки?

    Maksim_64
    @Maksim_64
    Data Analyst
    img_item = item.find('picture').find('img').get('data-src')

    Если нужно полный путь до картинки то можешь сделать вот так
    img_item = 'https://a-dubrava.ru' + item.find('picture').find('img').get('data-src')
    Ответ написан
    2 комментария
  • Как решить проблему с selenium python?

    Maksim_64
    @Maksim_64
    Data Analyst
    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    
    options = Options()
    options.binary_location = r'абсолютный путь к firefox'
    driver = webdriver.Firefox(executable_path=r' абсолютный путь к geckodriver', options=options)
    Ответ написан
  • Как проверить, находится ли время в нужном диапазоне?

    Maksim_64
    @Maksim_64
    Data Analyst
    обрати внимание у тебя старт 23 часа вечера а end час ночи. а сейчас например около 9 утра по москве, в общем вот
    import datetime
    
    start = datetime.time(6, 30)    # 6:30 утра
    end = datetime.time(13, 30)  # 13:30 дня
    now = datetime.datetime.now().time() 
    
    if (start <= now <= end):
        print("Work!")

    все работает.
    Ответ написан
    Комментировать
  • Как перевести значение 1...8 в 1...100, но в обратном порядке?

    Maksim_64
    @Maksim_64
    Data Analyst
    У вас есть ответы на питоне, так что вы понимаете питон так что написал коротенькую функцию
    def transform_range(old,new,t):
        a,b = old
        c,d = new
        return c + ((d-c) / (b-a)) * (t - a)
    print(transform_range([1,9],[100,1],1))
    Ответ написан
    Комментировать
  • Почему Beutifulsoup находит не то?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну для того кусочка html который вы представили вот так сработает
    whole_part  = html.find('strong',class_='f_Strong').big.text
    float_part = html.find('strong',class_='f_Strong').big.next_sibling.strip()
    print(whole_part + float_part)

    Хотя выглядит все это сомнительно, я бы поискал более стабильное решение возможно парсил бы через regex, в общем для стабильного решения думал бы что то другое. Код работает но мне не нравится.
    Ответ написан
    Комментировать
  • Какая модель машинного обучение тут подойдёт?

    Maksim_64
    @Maksim_64
    Data Analyst
    Идеи только следующие сделать, как положено в таких случаях (и в любых других) EDA (explanatory data analysis) для начала мы же аналитики а не гадалки. Посмотреть графики зависимой переменной от независимых индивидуально, если где то что линейное имеется посмотреть корреляции, и.т.д.

    Задать руководству вопрос (наверное главный) а имеет ли значение интерпретируемость модели или только ее предективная составляющая. Для бизнеса бывает важно интерпретируемость модели.

    Например если мы построим линейную регрессию у нее сильная интерпретируемая сторона. То есть параметры которые выучит модель имеют бизнес контекст (в рамках модели разумеется). Но точность будет например уступать Деревьям решений, но у деревьев нету интерпртируемости параметров она просто будет предсказывать и все.

    Машинное обучение начинается с компромисса между точностью и интерпретируемостью.

    А просто без визуализирования зависимой переменной c независимыми по отдельности, без понимания отношения между независимыми переменными между собой. Давать советы это гадать.
    Ответ написан
    Комментировать
  • Как настроить ML-модель?

    Maksim_64
    @Maksim_64
    Data Analyst
    То что вы пытаетесь сделать это называется тюнинг гиперпараметров. Так не делается конечно. в sklearn есть решения из коробки. При чем это целый этап в машинном обучении по этому целый раздел документации этому посвящен. https://scikit-learn.org/stable/modules/grid_searc...
    Там не только представлены классы но и различные методики которые используются. Изучайте там примеры есть, так что решите свой вопрос.
    Ответ написан
    Комментировать
  • Как рассчитать экспоненциальное скользящее среднее с учётом различных по длине временных интервалов?

    Maksim_64
    @Maksim_64
    Data Analyst
    Без заполнения отсутствующих данных решения нет и быть не может. Экспоненциальное скользящее среднее дает меньше и меньше веса для данных которые отдалены по времени и соответствено большие веса для последних дат (в пределах окна). То есть это всего лишь один из методов нахождение среднего с весами для каждой точки данных.

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

    Все остальное вы верно делаете стандартный слаживающий фактор все так, затем он будет использован для подсчета каждого индивидуального веса w_i = (1 - alpha)^i для каждой ваше точки данных в пределах окна. Просто вы ищете математического решения там где его нет, это вопрос как правильно заполнить недостающие данные.
    Ответ написан
  • Как перебрать все аргументы из функции и их обработать?

    Maksim_64
    @Maksim_64
    Data Analyst
    def is_prime(*args):
        result = []
        for num in args:
            if num == 1:
                result.append(False)
            elif num > 1:
                for i in range(2,num):
                    if (num % i) == 0:
                        result.append(False)
                        break
                else:
                    result.append(True)
            else:
                result.append(False)
        return result
    Ответ написан
    Комментировать
  • Как обеспечить сопоставимость данных с разным объёмом выборки?

    Maksim_64
    @Maksim_64
    Data Analyst
    Очень обычная ситуация называется Sampling Distribution. По порядку. Есть Population параметр (истинный параметр) для нас он неизвестен, мы осуществляем его измерение посредством случайной выборки при этом размер самой выборки не постоянен что вполне нормально. В таких случаях используется Sampling Distribution. Все формулы mean, std, пропорции и.тд. они идут с учетом размера выборки.
    Пример например берем какой нибудь опрос Позитивно ли вы смотрите в будущее? например в один месяц опросили в одном городе 2000 респондентов и получили 30 процентов ответили позитивно. Через 3 месяца мы опросили 1300 респондентов в этом же городе и получили ответ например 50% ответили позитивно. Это абсолютно рабочая ситуация.

    Мы можем произвести гипотезные тесты например это настроение улучшилось, или это объяснимо просто делом случая. Посчитать p-value, интервалы ит.д все как обычно. Ну например в моем примере мы их будем сравнивать используя дистрибуцию разниц пропорций в Sampling Distribution. В общем гуглите Sampling Distribution изучайте там все формулы с учетом размера выборки и потом проводите гипотезные тесты относительно параметра который вы измеряете.
    Ответ написан
    Комментировать
  • Как получить опр класс через методе find_all?

    Maksim_64
    @Maksim_64
    Data Analyst
    soup_all_templates.find_all(lambda tag: tag.name == 'a' and tag.get('class') == ['save-state'])

    По идее так должно сработать, без самого html протестировать то возможности нет, но обычно полное совпадение делают либо как то так либо через regex.
    Ответ написан
  • Как отобразить топ 10 записей в датасете pandas, которые требовали самого длительного времени исправления?

    Maksim_64
    @Maksim_64
    Data Analyst
    df['updated'] = pd.to_datetime(df['updated'],errors='coerce' )
    df['created'] = pd.to_datetime(df['created'],errors='coerce' )
    df['resolved'] = pd.to_datetime(df['resolved'],errors='coerce')

    Это сработает, единственное, в этих колонках кое где есть значения которые он не может распарсить, c этим ничего сделать нельзя посредством pandas. Если они нужны то это отдельно писать парсер для них и изучать каждый кейс. Поэтому для этих кейсов я добавил параметр errors='coerce' там где он не может распарсить он добавил nat. Ну и манипуляции с датами сами я так понял что проблема привести в нужный формат что бы весь мощный функционал pandas был доступен.
    Ответ написан
    Комментировать