Задать вопрос
  • Как получить данные колонки Pandas?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну у тебя не много колонок, а всего одна. Элементы массива (имена колонок) идут через запятую. А все что ты заскринил, это одна строка, как следствие один элемент массива.

    Как пофиксить, ну я не знаю что у тебя там в файле, но предположу что у тебя в файле разделение на колонки происходит сивволом ';'. Как следствие тебе нужно указать параметром при чтении.
    df = df.read_csv(filename, sep=';') Ну и остальные параметры которые ты там указываешь. Решит ли это все проблемы неизвестны. Надо видеть в каком состоянии файл. Чтение файлов иногда может быть серьезной проблемой, которая потребует написания функций для проблемной части парсинга.
    Ответ написан
    1 комментарий
  • Как исправить ошибку invalid literal for int() with base 10: '0 из 90'?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты пытаешься преобразовать строку в число. А именно где то ты вот эту строку пытаешься преобразовать в число '0 из 90', ожидая что там '90' ну или '0'. То есть в буквальном смысле у тебя где то в коде происходит. int('0 из 90') Что выдаст точно такую же ошибку. Отлаживай что бы там было строковое представление целого числа.
    Ответ написан
    Комментировать
  • Какой Roadmap для старта работы с AI?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Уверенный английский (качественные материалы и инструменты и т.д все на английском)

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

    3. Уверенный навык программирования. Реализации для взаимодействия с API нейронных сетей или классических алгоритмов машинного обучения существуют практически на любых языках, так что python не обязательно.

    4. Книга именно по ML, ты должен разобраться именно в ML техниках, терминах. Получить ответ на вопрос что значит тренировать модель, как ее оценивать, как находить оптимальные параметры, каких ошибок не допускать, стратегии деления датасета и многое многое другое.

    5. Много практики, и доводить все это дело до проекта. Освоить git например, освоить IDE, как следует, и т.д. Специалист растет от проекта к проекту. А не от книги или курса. Книга потенциально дает возможность вырасти, а там уже кто то ей воспользуется, а кто то нет.

    Пункт два Khan Academy Там со своего уроня начинаешь, конечные цели Calculus AB, Calculus BC, Multivariable Calculus.

    Относительно книг лучшее для вхождения из того что я когда то читал это deep learning with python от François Chollet. Она конечно на python, но это только код. А так она покрывает весь пайплайн создания модели и все написано очень простым языком.
    Ответ написан
    Комментировать
  • Как лучше построить архитектуру ML-сервиса?

    Maksim_64
    @Maksim_64
    Data Analyst
    Мало информации, конечно. Я обычно использую dash. Он позволяет создать полноценное веб приложение. Для взаимодействия с пользователем. Есть большое коммунити например я использую компоненты для создания красивого интерфейса и взаимодействия. Насчет одновременного доступа не проблема, каждая сессия пользователя изолирована. В доках есть раздел галерея там большие и крутые проекты выложены на github, то есть можно много чего подсмотреть. Есть и платные компоненты. Все что по ссылкам это бесплатно и для продакшен уровня достаточно.

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

    А так в небольшие сроки можно крутое приложение, как по дизайну (фронт) так и по функционалу сделать. И все в рамках одного языка даже фронт.
    Ответ написан
    Комментировать
  • Как в сделать Pandas объединение строк группирую по определнному столбцу?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну на сам деле задачка на 5 минут, есть определенные методы заполнения пропущенных значений, 'ffill' forward fill и 'bfill' backward fill. Они и есть ключ к решению, далее группировка происходит без проблем, и дальнешее дело техники, при чем многими способами, например так.
    f = pd.DataFrame({
        'A':['a',np.NaN,np.NaN,'b',np.NaN,np.NaN,np.NaN,'v',np.NaN,np.NaN,'d',np.NaN,np.NaN],
        'B':['foo','foo','bar','bar','bar','foo','bar','foo','bar','foo','bar','foo','bar']
    })
    result = (
        df
        .groupby(df['A']
        .fillna(method='ffill'))['B']
        .apply(lambda x: ','.join(x))
        .reset_index()
    )
    result
    Ответ написан
  • AI программисты ученые или обычные разработчики?

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

    2. Про разработку:
    современный AI требует взаимодействия множества разных специалистов.

    3. Итог:
    да есть ученые работающие над созданием AI примеров много, из известных ну например, Yoshua Bengio. Это один из явных примеров именно ученого. Но есть и не ученые работающие именно над созданием новых систем AI, и работают эти люди, как в маленьких компаниях, так и в корпорациях.
    Ответ написан
    Комментировать
  • Как добавить данные в Series через ссылку на объект?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вообще так с pandas не работают.
    1. pandas имеет мощный I/O как следствие эксель в том числе читают прямо в фрейм. Есть функции read_excel и другие, дополнительно перед этим установив различные reader's writer's например openpyxl и др.

    2. Если ты собираешься создать series из python объекта, с числовыми индексами то это list. Если с именованными индексами но это словарь. То есть собирай в словарь или лист. Seires это однородный массив и с именованными индексами, и for циклами их не процессируют.
    Ответ написан
    2 комментария
  • Как сделать таблицу с возможностью скачать выбранные строки html/js?

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну много способов есть, но самый верный смотреть в сторону groupby.
    (
        df.
        assign(latest=lambda x:x
        .groupby("some_name")["date_time"]
        .transform(pd.Series.nlargest, 1)
              )
        .loc[lambda x: x['date_time'] == x['latest'],:]
    )
    Ответ написан
  • Как скорректировать запрос для поиска подстроки?

    Maksim_64
    @Maksim_64
    Data Analyst
    Во первых ==True здесь совершенно лишнее, contains вернет массив длинной ff['B'], где True, будет означать берем данную строку, ок он не выдаст ошибку, но он тут абсолютно лишний и ничего не делает.

    Во вторых, обычно str.contains обычно используют вместе с регуляркой. Предоставляют выражения также используют flags для установки различных параметров, например осуществить поиск не чувствительным к регистру, для примера.
    import re
    searchstr=(
        ff.loc[ff['B']
        .str.contains(r'строка',regex=True,flags=re.IGNORECASE),['А','B']
        ]
    )
    Выберет подсет датафрейма ff (колонки 'A' и 'B'), где в 'В' содержится 'строка'.
    Ответ написан
    Комментировать
  • Что учить дальше?

    Maksim_64
    @Maksim_64
    Data Analyst
    Твоя задача получать опыт. Опыт приходит на проектах, соответственно, учи все что необходимо для проекта. И не расплескивайся особенно как начинающий специалист. Сильный чистый python + доменные знания в области применения, и то и то оттачивается на реализованных проектах.
    Ответ написан
    Комментировать
  • Автоматизация гостиницы — реальность или фантазия?

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Хороший вопрос. Есть правило никогда не использовать метод fit на тестовом сете. Иными словами будьто нормализация, скалинг, стандартизация или другие трансформации, ты никогда не находишь никакие параметры в тестовом наборе - это грубая ошибка. А всегда используешь только тренировочный набор. По этому все свои mean, std и прочее ты берешь только из тренировочного набора.

    В scikit-learn есть трансформаторы, к примеру StandardScaler так вот у него есть методы fit, transform и fit_transform. Так вот для тестового дата сета ты используешь только transform и никогда fit или fit_transform. Что означает применить трансформацию к тестовому сету с параметрами посчитанными на тренировочном сете.

    С нейронными сетями абсолютно тоже самое без каких либо исключений.
    Ответ написан
  • Что не так с рекурсией?

    Maksim_64
    @Maksim_64
    Data Analyst
    если у рекурсивного кейса отсутствует return то , базовый кейс останавливает рекурсию, но не завершает функцию. То есть после return int(answer) выхода из функции не происходит (только рекурсивный вызов остановлен). python идет дальше, пропускает else, затем у функции отсутствует return и он возвращает None.

    Что бы пофиксить надо добавить return к рекурсивному кейсу то есть return gen_nums(stop_n, number)
    Ответ написан
    Комментировать
  • Почему 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()
    Ответ написан
    Комментировать