Задать вопрос
  • Как в 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 комментарий
  • Как применить функцию для всего датафрейма pandas?

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

    2. Как следствие ты должен привести свой фрейм к такому типу данных с которым может работать твоя функция метод astype

    3. Есть три направления для применения твоей функции. Основной это метод apply он применяется к каждой строке или каждой колонке параметр axis, то есть когда ты пишешь свою кастомную функцию на вход она будет получать либо numpy массив либо pandas Series. Вообще apply для фрейма имеет довольно много интересных параметров почитай доки этого метода он реально мощный.

    4. Ты также можешь использовать pipe он работает как с Series так и с фреймаим я их часто по цепочке использую очень удобно. То есть пишешь функцию где на вход тебе фрейм приходит, оперируешь так как хочешь им. И потом ориганальный фрейм pipe(func, *args, **kwargs) и тебе приходит копия оригинального фрейма с твоими изменениями описанными в func, это очень хорошая практика.

    5. Ну и последнее самое простенькое это map применяет функцию по элементно к твоему фрейму. То есть свою кастомную функцию ты пишешь, не для numpy массива, не для pandas Series, а для каждого элемента фрейма.
    Ответ написан
    Комментировать
  • Можно ли с ChatGPT создать отчеты и графики на основе GoogleSheets?

    Maksim_64
    @Maksim_64
    Data Analyst
    На сколькой я знаю с gpt, ты не можешь взаимодействовать с google sheets, только вопросы задавать как сделать то или иное. А вот с Gemini ты можешь взаимодействовать, с google workspace и как следствие с google sheets. На сколько это все качественно там не знаю, но начиная от официальной поддержки, ютуб мануалов, да и сам Gemini может подсказать, как с этим делом взаимодействовать.

    Не думаю что google даст api для выполнения скриптов от LLM для своих сервисов. Так что предполагаю что только gemini.
    Ответ написан
    3 комментария
  • Memory Error при определении кодировки как чинить?

    Maksim_64
    @Maksim_64
    Data Analyst
    используй для чтения csv pandas, на случай если они там огромные, то с параметром chunksize=количество строк (по простому чтение по частям) и encoding=то что chardet вернул. Далее поставь колонку с номерами телефона в индекс (для пандас не уникальные индексы это совершенно нормально) и верни csv файл с совпадениями. Код будет что то вроде этого. Предположим это твой csv файл
    Номер Телефона,Имя,Фамилия
    333,Иван,Петров
    333,Василий,Сидоров
    444,Петр,Прямой
    333,Федор,Кривой

    import pandas as pd
    phone_numbers = pd.read_csv('test.csv',index_col='Номер Телефона')
    numbers_of_interset = [777,333]
    index = phone_numbers.index.intersection(numbers_of_interset)
    not_found = pd.Index(numbers_of_interset).difference(phone_numbers.index)
    (
        phone_numbers.loc[index,:]
       .to_csv('result.csv')
    )

    Читаем в фрейм и устанавливаем номер телефона в индекс, numbers_of_interest это те номера которые ты хочешь вернуть в качестве выборки если они есть в файле, делаем intersection с индексом фрейма, также находим те что не нашлись. Записываем файл только с теми что есть. При необходимости выводим те что не нашлись хранятся в not_found.

    Если они очень большие и требуют чтения по частям обратись к докам pandas ну или вот пример использования https://www.geeksforgeeks.org/how-to-load-a-massiv...

    Ну и если тебе не нужна вся выборка а только количество совпадений мне это не очевидно из твоего вопроса, то в контексте моего примера
    print(phone_numbers.loc[index,:].shape[0]) Даст тебе количество.
    Ответ написан
    5 комментариев
  • Какие книги посоветуете по нейросетям?

    Maksim_64
    @Maksim_64
    Data Analyst
    Для новичков ответ очевиден, нет ничего и близко равного Deep Learning with Python, Second Edition . От инженера гугла и создателя Кeras François Chollet. Она и на русском есть, если не владеешь английским. Не много не мало гениальная книга, и доступна для людей без математического бэкграунда.
    Ответ написан
    1 комментарий
  • Что значит сообщение oneDNN custom operations are on?

    Maksim_64
    @Maksim_64
    Data Analyst
    Попробуй любой из ответов вот отсюда.
    Ответ написан
    Комментировать
  • Где найти статистические данные в сфере медиа?

    Maksim_64
    @Maksim_64
    Data Analyst
    Актуальные статистические данные - это ценность. В открытом доступе их не будет.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Потому что выражение return прерывает функцию. То есть у тебя происходит только одна итерация цикла, и затем выход из функции. Собери itemPrice[0] в список объявленный вне цикла (result.append(itemPrice[0])) и верни result вне цикла. Имей ввиду то что ты в своей имплементации объявил itemPrice вне цикла и это имеет 0 эффекта, так как при каждой итерации у тебя создается новый объект, например вот здесь itemPrice = i.find(...
    Ответ написан
    1 комментарий
  • Стоит ли уходить в Data Science?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Без сильного программирования делать будет нечего. Есть вакансии математиков там (иногда) программирование требуется но постольку поскольку. Именно в DS требования к программированию большие. Более того в последние годы наметилась тенденция под многими DS вакансиями, бизнес ожидает разработчика в области DS. No Code практики существуют (слабо распространены в России) упомянутый (Jupyter) не имеет к этому никакого отношения в нем надо точно также уметь кодить. Да и в целом No Code довольно редко встречается.

    2.
    Готов потратить год на изучение DS,
    Не реально. Я бы не советовал менять тебе профессию, а если хочешь в DS начни учится, и не на курсах а самостоятельно и начинать надо с программирования.

    3. По зарплатам расти можно довольно быстро да и на первой работе могут платить далеко не 60. Вопрос не в этом, до того как ты сможешь претендовать у тебя путь в несколько лет.
    Ответ написан
    3 комментария
  • Сквозная сортировка индексов DataFrame?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну с формулировкой вопроса ты подкачал, это переформатирование фрейма с элементами сортировки подсета данного фрейма. Вообще когда решаешь такую задачу, то индексы фрейма (колонки и индекс) будут тебе мешать, надо переводить подсет данных в numpy массив и там сортировать.

    Так или иначе, задачка простая, и решается в одну строчку кода, многими способами , например вот так
    df.loc[:,['A','B','C']] = np.sort(df[['A','B','C']].values,axis=1)

    Это изменит твой фрейм как ты хочешь, или определенными вариациями данного кода.
    Ответ написан
    Комментировать