Задать вопрос
Ответы пользователя по тегу NumPy
  • Как решить проблему с could not convert string to float?

    Maksim_64
    @Maksim_64
    Data Analyst
    Что значит не обрабатываешь, вот
    print(df.replace('?',np.nan).astype(float) Здесь во все фрейме делаешь замену а потом весь фрейм пытаешься привести к типу данных float.

    Работай с "числовым подсетом датафрейма".
    или заведи отдельную переменную приведи подсет к флоатам и потом группируй. Типа такого
    df_ = df.loc[:,[nuimeric_column1,numrec_column2]] = df.loc[:,[nuimeric_column1,numrec_column2]].replace('?',np.NaN).astype(float)
    и затем группируй и т.д.

    Или хочешь чейнить, используй assign рассматривай все колонки по отдельности, при сложныех манипуляциях, которые требуют индивидулаьного подхода, к каждой колонке по отдельности так делают.
    (
        df.assign(
            numeric1=lambda x: x['numeric1'].replace('?',np.NaN).astype(float),
            numeric2=lambda x: x['numeric2'].replace('?',np.NaN).astype(float)
        )
        .groupby('Category')
        .agg(['mean','median'])  
    )
    Ответ написан
    Комментировать
  • Как исправить код?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты пытаешься делать выборку среза с заполнением. new_arr = arr[1:-3, 4:-2] = arr1 глупость, это так не работает.

    arr = np.ones((10,10), dtype = np.int8)  
    new_arr = arr.copy()
    new_arr[0, :] = 0                   
    new_arr[:, :4] = 0                  
    new_arr[:, -2:] = 0                 
    new_arr[-3:, :] = 0                 
    print(new_arr)
    Или если хочешь короче я исходил из твоего кода, то можно вот так.
    new_arr = np.zeros((10, 10))
    new_arr[1:7, 4:-2] = 1
    Так короче, и правильнее но мы не много нарушаем условие задачи. Мы заполняем единицами выбранный срез.
    Ответ написан
    Комментировать
  • Как оценить вероятность того, что среднее выборочное одного бета распределения больше среднего выборочного другого бета распределения?

    Maksim_64
    @Maksim_64
    Data Analyst
    Стандартная стратегия это получить распределение разностей, затем получить pdf этого распределения ну и подставлять интересующую разницу.

    https://stats.stackexchange.com/questions/436039/h...

    Здесь в первом ответе выведена точная формула pdf разностей бета распределений.
    Ответ написан
    Комментировать
  • Как получить данные колонки Pandas?

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

    Как пофиксить, ну я не знаю что у тебя там в файле, но предположу что у тебя в файле разделение на колонки происходит сивволом ';'. Как следствие тебе нужно указать параметром при чтении.
    df = df.read_csv(filename, sep=';') Ну и остальные параметры которые ты там указываешь. Решит ли это все проблемы неизвестны. Надо видеть в каком состоянии файл. Чтение файлов иногда может быть серьезной проблемой, которая потребует написания функций для проблемной части парсинга.
    Ответ написан
    1 комментарий
  • Как создать новый массив, объединив каждый элемент 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 объект (до свидания скорость). Посмотри реализации в интернете, но массивы не однородные, так что толку по скорости не будет.
    Ответ написан
    Комментировать
  • Как перевести бинарный STL-файл в массив Numpy?

    Maksim_64
    @Maksim_64
    Data Analyst
    Я облазил интернет и особо ответа на вопрос не нашёл

    https://pypi.org/project/numpy-stl/
    Ответ написан
  • Как правильно сгенерировать дату в Pandas?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри, первое ты говоришь количество строк 90, при этом формируешь временную последовательность, на 90 дней при этом у тебя есть желание иметь данные с повторяющемеся днями по количеству артистов их их песен, в примере ты приводишь 3 артиста по 3 песни на каждые то есть 9 ЗАПИСЕЙ на каждый день или 90 * 9 = 810 СТРОК.

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

    Код, конечно я написал, грязноват он можно подправить конечно, я на это время тратить не буду.

    import pandas as pd
    import numpy as np
    
    songs = {
        'ANNA ASTI': ['Девочка танцуй','Грустный дэнс','Гармония'],
        'Три дня дождя': ['Демоны','Где ты','Перезаряжай'],
        'MACAN': ['Кино','Пополам','Бенз'],
    }
    
    NUMBER_OF_DAYS = 3
    LENGTH_OF_FINAL_FRAME = sum(len(value) for value in (songs.values())) * NUMBER_OF_DAYS
    
    dates = pd.date_range('2023-01-01', periods=NUMBER_OF_DAYS, freq='1D')
    
    artists = []
    for key, value in songs.items():
        artists += [key] * len(value)
    
    dates_and_artists = []
    for date in dates:
        for artist in artists:
            dates_and_artists.append((date,artist))
    
    songs_arr = np.array(list(songs.values()) * NUMBER_OF_DAYS).reshape(-1,1)
    
    
    
    
    data = np.concatenate([np.array(dates_and_artists), 
                           songs_arr, 
                           np.random.randint(3000,1_000_000,LENGTH_OF_FINAL_FRAME).reshape(-1,1)], axis=1)
    
    df = pd.DataFrame(data=data, columns=['Date','Artist','Track','Start'])
    df


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

    Код для любого количества артистов и песен у них ну и количество дней тоже сколько надо задашь. NUMBER_OF_DAYS. Поменяй да и все.

    ДОПОЛНЕНИЕ К ОТВЕТУ
    Как и обещал, подработал я свое решение, так как оно должно быть, меньше кода, быстрее и больше функциональности.

    from itertools import chain
    import pandas as pd
    import numpy as np
    
    
    songs = {
        'ANNA ASTI': ['Девочка танцуй','Грустный дэнс','Гармония'],
        'Три дня дождя': ['Демоны','Где ты','Перезаряжай'],
        'MACAN': ['Кино','Пополам','Бенз'],
    }
    
    NUMBER_OF_DAYS = 3
    NUMBER_OF_SONGS_PER_DAY = sum(len(value) for value in (songs.values()))
    STARTING_DATE = '2023-01-01'
    
    dates = pd.date_range(STARTING_DATE, periods=NUMBER_OF_DAYS, freq='1D')
    artists = list(chain(*[[key] * len(value) for key, value in songs.items()]))
    songs_per_day = list(chain(*songs.values()))
    
    index = pd.MultiIndex.from_product([dates,artists],names=['Date','Artist'])
    
    df = pd.DataFrame({
        'Songs':songs_per_day * NUMBER_OF_DAYS,
        'Start':np.random.randint(3000,1000000,NUMBER_OF_DAYS * NUMBER_OF_SONGS_PER_DAY),
        
    }, index=index).reset_index()
    
    df


    Вот это хороший читабельный pandas код, теперь я спокоен, а то вопрос то решил, но просто в лоб, а не так как следует.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Внимательно посмотрите на ваш кусочек, а это как должно быть.
    W1 = np.random.randn(IND, HD)
    b1 = np.random.randn(HD)
    W2 = np.random.randn(HD, OUTD)
    b2 = np.random.randn(OUTD)

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

    Maksim_64
    @Maksim_64
    Data Analyst
    По скольку нет полного датафрейма я не могу полностью сформировать рабочий ответ. Но основываясь на вашем коде вот какая главная мысль.
    Не каких for в pandas абсолютно любой функционал выполним без циклов. (либо напрямую) любой массив в pandas уже векторизован. либо посредством функций apply или agg (первая поэлементно выполнит вами написанную функцию) , вторая агрегирует, то есть на вход получит массив на выход одно число например (mean, std) и.т.д. Но главный вывод не каких циклов pandas устроен так что ты никогда не используешь циклы для обработки данных. (только для работы с индексами иногда применяют циклы), но никогда с данными. Это очень сильно ускорит код.
    Ответ написан
    Комментировать