Задать вопрос
  • Почему python возвращает существующий объект, вместо создания нового?

    Maksim_64
    @Maksim_64
    Data Analyst
    Надо же, выглядит все это крайне сомнительно. Сеты мутабельные объекты и оптимизация, как c int или str тут не при чем. При том такое поведение только если я создаю объект налету. К примеру если я соберу их в список
    empty_sets = []
    for _ in range(3):
        empty_sets.append(set())
    
    for obj in empty_sets:
        print(id(obj))

    То работает как и ожидается.
    Или
    a = set()
    b = set()
    a is b
    Тоже как и ожидается.

    Пока экспериментировал вот что обнаружил
    for _ in range(3):
        print(id([]))

    Тоже самое при этом
    for _ in range(3):
        print(id(list()))

    Как и ожидается объекты разные.

    Мое мнение крайне сомнительное поведение.
    Ответ написан
    Комментировать
  • Как создать новый массив, объединив каждый элемент 1го с каждым 2 ого?

    Maksim_64
    @Maksim_64
    Data Analyst
    Выглядит как декартово произведение только где элементы это массивы с последующим распремлением.

    На питоне что то вроде этого
    import itertools
    [list(itertools.chain.from_iterable(x)) for x in (list(itertools.product(A,B)))]

    Прямой функции в numpy нету плюс у тебя данные не однородные то есть тебе при создании numpy массива придется указать параметр dtype='object', что означает python объект (до свидания скорость). Посмотри реализации в интернете, но массивы не однородные, так что толку по скорости не будет.
    Ответ написан
    Комментировать
  • Как вытащить из текста эмоджи?

    Maksim_64
    @Maksim_64
    Data Analyst
    В целом тебе нет необходимости для "удаления" вытаскивать в отдельную колонку. Обычно из фрейма ничего не удаляют, его не изменяют, а извлекают из него подсеты которые отвечают твоим требованиям. Код придется картинкой опубликовать а то форматирование не поддерживает эмоджи.
    6580990e822cb151482037.png

    Если ты не знаешь всех своих эмоджи то есть библиотеки получи все юникоды своих эмоджи и проверяй строку не содержит ли она юникод эмоджи, это будет очень медленно. лучше выбрать их несколько я думаю там их не много и как у меня в примере просто пусть их там десятка два будет а не два. Можно также попробовать простенькой регуляркой отловить что то типа такого
    df[df['comment_text'].str.contains(r'[^\w\s,]', regex=True)]
    Для моего примера работает, сработает ли в целом неизвестно.
    Ответ написан
    4 комментария
  • Почему результат выполнения функции сохраняется между вызовами?

    Maksim_64
    @Maksim_64
    Data Analyst
    Потому что объект список мутабельный объект rez = []. Ты ожидаешь, что при каждом новом вызове функции у тебя создается пустой список res, а это не так почитай к чему ведет мутабельные типы в качестве значений по умолчанию у параметров функции.

    1. В первом случае ты вызываешь первый раз работает как ожидаешь, но но список res уже создан и существует.
    2. В втором ты оставляешь без изменения свой дефолтный параметр (список), а он то уже заполнен, и он просто добавляет в него.
    3. В третьем случе ты передаешь новый список (новый объект). По этому работает нормально.

    Общий кейс для решения таких проблем как то так.
    def test(n, rez = None):
        if rez is None:
            rez = []
        for i in range(n):
            rez.append(i)
        return rez
    Ответ написан
    Комментировать
  • Как оценить напрямую результаты классификации и регрессии?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну у твоей модели есть метод predict. Что то вроде этого.
    df['predictions'] = (
        model
       .predict(X)
       .replace({0:'Метка ассоциируема с 0', 1:'Метка ассоциируемая с 1'})
    )

    Где, X это входные данные массив фич.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну если у тебя одинаковых значений много, на приграничных значениях (low, upper) возможно ты все удаляешь такие значения.

    Если тебе надо отфильтровать фрейм по возрасту (5 персентиль 95 персентиль). Используй что нибудь вроде такого.
    low = df['Age'].quantile(0.05)
    upper = df['Age'].quantile(0.95)
    
    df[df['Age'].between(low, upper)]


    Ну и не забудь про параметры метода quantile, например задать interpolation (интерполяцию). По у молчанию там линейная среднее между двумя значения, можешь например поставить 'nearest' и будет идентичное поведение np.percentile()
    Ответ написан
    Комментировать
  • Как показать подписи промежуточных делений в matplotlib?

    Maksim_64
    @Maksim_64
    Data Analyst
    https://matplotlib.org/stable/api/_as_gen/matplotl...
    xticks. Устанавливаешь два массива, один это ticks локации, второй это (опционально) это ассоцируемые метки с этими локациями. Например для этого графика. plt.xticks(range(2006,2023)) Второй параметр в данном случае тебе не нужен. Глянь пример из доков, также. Да и имей ввиду если ты используешь ооп апи, работаешь с объектами axes, то там set_xticks и set_xticklabels. То есть на два метода этот функционал разбит, например https://www.geeksforgeeks.org/matplotlib-axes-axes...
    Ответ написан
    Комментировать
  • Как вызвать функцию, название которой записано в переменной?

    Maksim_64
    @Maksim_64
    Data Analyst
    eval(func_name)()
    Ответ написан
    Комментировать
  • Как youtube детектирует использование нейросети при создании видеоконтента?

    Maksim_64
    @Maksim_64
    Data Analyst
    Путем другой нейросети, которую обучали различать контент созданный нейросетью или человеком. Как создавали такую сеть? Да также как и другие, создали множество контента средствами AI и дали обычный контент созданный людьми и поставили метки AI not AI, бинарная классификация. И обучили, все.
    Ответ написан
    Комментировать
  • Как правильно обработать данные и записать их снова?

    Maksim_64
    @Maksim_64
    Data Analyst
    for i in time:
        data = change_data(i)
    Ну ты перезаписываешь свои данные да и все. То есть в data у тебя остается последний результат вызова функции для последнего i.
    Затем ты присваеваешь benz_df['time'] = data колонке time, значение data. Он его броадкастит на всю колонку да и все. Ты ожидаешь что data это массив c данными, а это одно значение.

    По коду сделай data вне цикла пустым списком и добавляй туда результат вызова своей функции. То есть вот так
    data= []
    for i in time:
        data.append(change_data(i))


    Ну а вообще так делать не правильно, все эти операции надо производить средствами pandas
    хотя бы как то так.
    benz = pd.read_xml(benz_xml_file, xpath='.//filling')
    benz_df = pd.DataFrame(benz)
    benz_df['time'] = benz_df['time'].apply(change_data)
    benz_df['time'][:50]
    Ответ написан
  • (Pandas) Почему не работает df.dropna()?

    Maksim_64
    @Maksim_64
    Data Analyst
    df = df.dropna() Ну на всякий случай проверь после этой строчки df.isnull().sum() Должны быть нули, далее там же проверь не попало ли строковое значение (df == 'NaN').sum()
    Если же нет значит в результате в от этой операции
    df = df.where(df['area_name'].apply(lambda x: x in used_cities))
    появляется NaN, что собственно логично, ты предоставляешь , булевый массив True, False. где pandas оставит оригинальное значение где состояние True и заменит на твое (которое ты не предоставил) где значение False. То есть вторым параметром ты должен был предоставить значение, (по умолчанию оно NaN).
    df = df.where(df['area_name'].apply(lambda x: x in used_cities), 'Твое значение')
    Ответ написан
    Комментировать
  • Как убрать наложения на графике?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Используй pandas для чтения из csv не забудь про параметр decimal. Потому что у тебя вместо плавающей точки запятая.
    2. Если надо почисти данные (удали пустую колонку) метод drop, возможно перведи единицы измерения времени в те в которых значения будут поменьше например если оно в нано секуднах в секунды.
    3. Рисуй свой график.
    Псевдо код будет такой.
    df = pd.read_csv('myfile.csv', sep=';', decimal=',')
    df = df.set_index('time')
    df.plot()

    Глянь на свой фрейм, и работай с ним это лучше чем собирать данные в списки, по скольку он создан для подготовки данных, и все библиотеки визуализации ожидают pandas фрейм, в качестве данных для визуализации.
    Ответ написан
    Комментировать
  • Почему в моем коде cpu быстрее gpu?

    Maksim_64
    @Maksim_64
    Data Analyst
    GPU не всегда быстрее CPU.

    1. Если будет много вызовов к памяти с небольшими объемами данных, CPU будет быстрее.
    2. Если операция не может исполнятся параллельно то эффективность GPU падает.

    В первом примере, у тебя даже тренировки модели нет, ты ее загружаешь., то есть основное место где gpu сильно быстрее cpu это операции с тензорами во время тренировки модели, его нет. Во втором примере есть тренировка модели, (операции с тензорами), то там GPU должен быть быстрее.
    Ответ написан
    Комментировать
  • Как корректно составить запрос на выборку?

    Maksim_64
    @Maksim_64
    Data Analyst
    левый join по двум колонкам. Что то типа такого.
    select * 
    from short t1 
    left join collect_s t2
    	on t1.base = t2.base and t1.small = t2.collect
    where t2.base is null
    Ответ написан
    4 комментария
  • Как включить разделитель в данное выражение на Python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну вообще print(f"{1127:016_b}") Но есть проблема 016 означает длинна 16 символов, что не хватает, заполнять нулями. А у тебя получается добавка три символа '_' . По этому надо добавлять 3 к 16.
    print(f'{1127:019_b}')
    Ответ написан
    1 комментарий
  • Каким образом можно обучить ИИ распознавать лицо python?

    Maksim_64
    @Maksim_64
    Data Analyst
    То как ты задаешь вопрос, говорит о том что написать с нуля это тебе не под силу.

    tensorflow - это прежде всего векторизованные операции с тензорами + возможность выполнить эти операции на GPU + очень важный плюс (есть подсчет градиента для любого математического выражения). Если его сравнивать с numpy то основное отличие будет отсутствие подсчета градиента и не возможность из коробки выполнять numpy на GPU, это возможно через numba например.

    Распознавание лиц с нуля такого проекта ты не найдешь, все что можно найти и в изобилии это создание нейронной сети с нуля (реализованные как на чистом numpy, так и на tensorflow без использования моделй).

    гугли neural networks from scratch python. Например вот https://www.geeksforgeeks.org/implementation-of-ne... Но ничего близкого к распознаванию лиц и эмоций с нуля ты не найдешь.
    Ответ написан
    1 комментарий
  • Когда надо использовать инстанс методы и когда класс методы?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты не совсем понял их назначение.

    В python у тебя есть атрибуты класса и атрибуты экземпляра класса. Атрибутами называют как методы так и атрибуты в обычном смысле.

    1. Методы экземпляра класса, имеют доступ, и могут изменять, как атрибуты класса, так и атрибуты экземпляра класса.

    2. Методы класса не имеют доступа к атрибутам экземпляра класса, как следствие не могут изменять его состояние.

    3. Статические методы не имеют доступа к атрибутам, экземпляра класса или объекта класса. Обычная функция которая "привязана к классу" для внутренних нужд.

    Если говорить о применении методов класса, то самое основное это создание альтернативного конструктора.

    class MyClass:
    
        def __init__(self, items):
            self.items = items
            initial_total_value = self.total()
    
        def total(self):
            return sum(self.items)
    
        @classmethod
        def from_str(cls, string):
            return cls([int(i) for i in string])
    a = MyClass([1,2,3])
    print(a.total())
    
    b = MyClass.from_str('123')
    print(b.total())
    То есть смотри мой класс метод возвращает изменный объект класса, на котором без проблем сработает конструктор экземпляра класса.
    Ответ написан
  • Куда стоит поступать на ИИ?

    Maksim_64
    @Maksim_64
    Data Analyst
    656095ba3133d432320320.png

    ИИ - это общий термин, и не более. Так что иди туда, где сильная база программирования и математики, если где то включено ML то оно в свою очередь будет включать в себя как классические ML алгоритмы, так и нейронные сети.
    Ответ написан
    Комментировать
  • Как ускорить работу с большими таблицами данных?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Сделай дашборд plotly + dash, он может работать, как с базой данных, так и pandas фреймом. Там же есть объект таблица для красивого вывода, + огромное количество графиков, пользователь будет вводить, что он хочет вывести, ты будешь делать запрос к фрейму и выводить. Все доки в принципе ориентированы на работу с фреймами, бд как пример берется, возможности огромные. plotly+dash

    2. Есть в принципе отдельная библиотека pandasgui Функционал слабенький, но фильтрацию поддерживает.

    Не знаю поможет ли это тебе в твоей проблеме, но раз речь в том числе и о скорости pandas то упомянуть об этом следует, пару недель как nvidia выпустила расширение, которое очень серьезно ускоряет pandas (GPU acceleration). читать здесь
    Ответ написан
    5 комментариев
  • Почему не работает код?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну разбей свою задачу на две части
    1. Парсинг ввода пользователя и запись в подходящую структуру данных (словари)
    2. Расчеты

    Потом все будет просто, например.
    words = {
        'm': 2,
        'a': 3,
        'l': 1,
        'i': 1,
        'n': 2,
        's': 1,
        'o': 5,
        'r': 1,
        'd': 1
    }
    
    jams = {
        'smorodina': 1,
        'malina': 2
    }
    
    total = 0
    
    for jam, amount in jams.items():
        jam_time = 0
        for letter in jam:
            jam_time += words[letter]
        total += jam_time * amount
    
    print(total)

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