• Как правильно найти и описать аппроксимацию данных нормальным распределением со смещенным центром?

    Maksim_64
    @Maksim_64
    Data Analyst
    И так о сути вашей задачи. Перед вами "случайная выборка" sample distribution. Вы утверждаете что общее распределение (population distribution) нормально. Откуда вы это взяли я не знаю, но допустим может условие проблемы таково. Функция нормального распределения имеет два параметра среднее (mean) и стандартное отклонение (standard deviation). Общий вид N(mu, std). Ваша статистическая задача это осуществить аппроксимацию этих параметров на основе данных случайной выборки (sample).

    Нужно найти точку максимальной распространенности вида (т.е. на какой высоте его больше всего).
    У непрерывных распределений не бывает точек, бывает интервалы. Вероятность в любой точке равна нулю, это одно из главных различий дискретного pmf (probability mass function) от непрерывного pdf (probability density function).

    Стандартные функции определения нормального распределения по выборке, предполагают, что оно равно мат. ожиданию выборки.
    Что это вообще значит, математическое ожидание это параметр функции распределения, что значит равна вообще ничего не понял.

    Но это не учитывает, что центр может быть за пределами анализируемого диапазона

    Вообще ничего не понял, есть распределение что такое предел анализируемого диапазона где вы это нашли?

    Теперь к ответу на оба ваши вопроса:
    На ваших графиках попытка аппроксимировать pdf, для данных на основе наблюдений. В реальности это делается ну например методами MLE (Maximum Likelihood Estimation) Это числовой метод. В том числе полно примеров и на python. Так и гуглить python maximum likelihood estimation normal distribution. Аналитические методы тоже есть конечно. гуглить population mean from sample distribution. Ну и там в определенном интервале будет лежать mean. Но аналитические методы подразумевают слабовыполнимые допущения нужно знать стандартное отклонение популяции например, по этому на практике использует числовые то есть MLE. По терминалогии это классическая статистическая задача на основе выборки осуществить (statistical inference) то есть аппроксимировать параметры population distribution. Точную терминологию (на русском) смотри, в вики. Я привык все это дело на английском делать.
    Ответ написан
    7 комментариев
  • Какой нейронной сетью (или другим инструментом) можно проанализировать текст чтобы понять настроение клиента?

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

    То есть у тебя данные сообщения от клиента. Ты их разбиваешь на тренировочные и тестовые, проводишь необходимые трансформации. И отдаешь классификатору. У многих классификаторов, даже метод есть predict_proba (предсказать вероятности), именно, для таких кейсов.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Как читать, тут не важно что ты обучаешь, обучения нет обычный шум разного уровня, с увеличением количества шагов у тебя постепенно (обычно не линейно) должна снижаться ошибка (минимизироваться функция потери). Ничего подобного на графиках нет. Просто случайный шум да и все. Обучения НЕ ПРОИСХОДИТ.
    Ответ написан
    Комментировать
  • Fine-tuning опенсорсного LLM новому языку?

    Maksim_64
    @Maksim_64
    Data Analyst
    Приблизительно все ваши вопросы, не связаны с реальностью.

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

    2. Все процессы настройки моделей отличаются для конкретных задач и совпадают только делом случая. Есть данные и есть конкретная задача и конкретное решение, а не некий общий кейс.

    3. https://github.com/Hannibal046/Awesome-LLM чего из open source там нет?
    Ответ написан
    7 комментариев
  • Что делать с экстремально дисбалансным датасетом?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Метрики используй либо ROC, а лучше матрицу ошибок классификации (confusion matrix). Тебе здесь необходимо смотреть в сторону байесовых интерпретации теории вероятности.

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

    3. Посмотри в сторону алгоритмов "детекции аномалий". Из известных алгоритмов SVM может быть использован ну у них есть и свои более специализированные (даже для медицины свои бывают). гугли anomaly detection classification python или на чем ты там реализуешь и изучай. Это большая тема в машинном обучении и вообще отдельный навык и например какой то датасаентист может фокусироваться только на детекции аномалий.

    Ты наверное знаешь в теории вероятностей есть Bayes байесова интерпретация (мы смотрим на вероятность как степень уверенности) и что называется Frequentism мы смотрим на вероятность как частоту на длинной дистанции. Так вот тебе нужно смотреть в сторону байесовой здесь, как по метрикам так и по алгоритмам. Алгоритмы детекции аномалий я в контексте данного вопроса так же отношу к ним.

    Что касается твоих замечаний, то ты прав. Модель имеет сильную предрасположенность, что мешает обучению. Собственно я по этому и дал советы выше.
    Ответ написан
  • Нейросеть для получения информации из документа?

    Maksim_64
    @Maksim_64
    Data Analyst
    Нейронная сети, актуальны для задач где присутствует ВАРИАТИВНОСТЬ. Вы имеете входные данные обозначим их Х вы имеете функцию которая сопоставляет эти данные с выходными данными (извлечь ИНН и другие пункты договора) обозначим их y. Так вот если вариативность отсутствует то данная задача f(X) = y, решается парсингом документа, а не нейронными сетями. Если задача имеет вид f(X) = y + E, где E это случайная ошибка, то нейронная сеть это один из возможных алгоритмов МИНИМИЗАЦИИ этой ошибки, но НЕ полного ее исключения. Так что надо иметь ввиду что 100 процентной точности не добиться. И ответить себе а допустимо ли это.

    Что касается твоих вопросов, ну например пункт номер два это целый раздел в машинном обучении. Который содержит в себе несколько подпунктов. И дело это инженерное - а не вот какой то метод решит все мои проблемы. Пункт номер три обе могут быть использованы. Пункт четвертый, а потянешь с нуля. А готовые модели они решат частный кейс твоей проблемы? Откуда нам знать, с какой точностью готовые модели будут извлекать данные. Ну а первый вопрос, это всего лишь api для моделей и выбирать надо ту с которой имеешь опыт работы, какой то лучшей нет.
    Ответ написан
    1 комментарий
  • В чем проблема random.uniform?

    Maksim_64
    @Maksim_64
    Data Analyst
    При распаковке time_range у тебя 12 элементов а должно быть два. По всей видимости вот это 43200, 50400 это массив строк, а не два числа в массиве. Вот он тебе и распаковывает их в uniform("4","3","2"..,"0"). А должен распаковывать, в виде uniform(43200,50400). time_range приходит не в том виде в котором ты его ожидаешь.

    Пишет он takes 3 потому что он еще и self считает. И пишет он 13 по факту в time_range у тебя 12 их также self учитывает. Так и выходит 43200, 50400 - 10 цифр + 1 запятая + пробел = 12 + self = 13 элементов.
    Ответ написан
    Комментировать
  • Как правильно импортировать таблицу excel в бд postgre?

    Maksim_64
    @Maksim_64
    Data Analyst
    Я бы в принципе рекомендовал использовать pandas для таких целей.
    1. Читаем excel в pandas dataframe псевдокод будет такой.

    import pandas as pd
    df =pd.read_excel(data.xlsx,sheet_name=’Ткани’)

    у функции read_excel много параметров, в том числе header, index_col которые возможно придется настраивать.

    2. Глянул бы на него что таблица в порядке (это как фрейм запишется в базу), глянул бы на типы данных, df.dtypes что бы все типы колонок, были в том виде как их ожидает база. Если надо изменил бы их. Проверил бы есть ли пропущенные значения (nan, NA). Если есть провел бы работу с ними.

    3. Затем бы отправлял в базу методом to_sql(). Псевдо код будет такой.
    df.to_sql('table_name', connection, if_exists='replace')

    Параметр if_exists (если таблица существует) имеет также метод append просто весь фрейм добавит новыми строками, и fail тогда будет ошибка.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    from tqdm.auto import tqdm
    И все для терминала будет обычное, а для notebook'a специальное.
    Ответ написан
    2 комментария
  • Как выбрать правильно выбрать период в pandas?

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

    Вместо этого ты дал фрагмент кода не связанного с проблемой по всей видимости код был написан chatGPT, по скольку он очень низкого качества и попросту странный очень на вряд ли даже начинающий программист напишет такой pandas код.

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

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        'temperature':[
            1.5,1,4,-2,1,-1,-1,4,3,2,1,-2,-3,-4,-5,-6,-1,2,-2,-2,-3,4,-5,-3,3,1,2,5,3,2
        ]
    }, index = pd.date_range('2023-01-01', periods=30))
    
    
    negative_groups = (
        df
        .query('temperature < 0')
        .groupby((df.temperature > 0).cumsum())
    )
    positive_groups = (
            df
            .query('temperature >= 0')
            .groupby((df.temperature < 0).cumsum())
    )
    start_date = [value for value in negative_groups.groups.values() if len(value) >=5][0][4]
    end_date = [value for value in positive_groups.groups.values() if len(value) >=5][0][4]
    
    df.loc[start_date:end_date]


    Я создал фрейм, и вытащил из него индексы даты, 5-го значения для последовательно отрицательных элементов. Как начало зимы и индекс даты 5-го значения для последовательности положительных элементов. И осуществил выборку между этими датами.

    Заметь, если у нас например 6 повторяющихся отрицательных элементов то он он возьмет дату 5 так как по условию если 5 то начало зимы и если 5 то конец.

    Ну распечатай фрейм и распечатай выборку подсета из фрейма и убедишься, что работает правильно. Бери мой пример и прикручивай его к своим данным. Не забудь дату поставить в индекс и не забудь что бы у даты был тип данных date а не object.
    Ответ написан
  • Почему Jupyter noteboor не видит torch?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты когда команду запускаешь, !pip3 show torch там тебе должно выдать в том числе и location (Путь). Ты не упомянул, у тебя стоит анаконда или ты просто jupyter поставил. Судя по всему анаконду ты не установил. Создай окружение посредством conda в терминале, активируй его conda activate environment name. Затем запусти, jupyter и тогда устанавливай torch.

    Еще в jupyter посмотри у тебя есть разные окружающие среды ты можешь сменить kernel? если нет установи ipykernel. И проделай то что я написал выше.

    Вот по ссылке пример, что бы с ipykernel не запутался https://www.geeksforgeeks.org/using-jupyter-notebo... . Это на случай если проблема в том что ipykernel не установлен. А так не забудь активировать свое окружение а не просто его установить.
    Ответ написан
  • Как отсортировать значение по группам?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри скажу прямо задачка для общего кейса безнадежная надо менять вводные, потому что с одной стороны мы можем создать категории например ОГСЭ но затем у них еще и индексы 01, 02 и т.д., для того куска что ты дал я сделал, ну как общее решение это надо на уровне дизайна проблемы решать.
    cat = pd.Categorical(df['Шифр дисциплины'].str.split('.').str[0], 
    categories=['ОГСЭ','ЕН','ОПЦ','МДК','УП','ПМ','ПП'])
    print(df
     .groupby(cat)
     .apply(lambda x: x.sort_values('Шифр дисциплины', key = lambda x: x.str.split('.').str[1]))
     .reset_index(drop=True)
    )

    По решению, трюк следующий, создаем категории, они имеют порядок индекс. Когда, мы группируем groupby он СОРТИРУЕТ по умолчанию, и затем мы сортируем снова. То есть хитрость в том что бы впихнуть двойную сортировку, сначала по категориям а потом по цифрам внутри каждой категории.

    Кстати имей ввиду во второй своей попытке ты был на правильном направлении и задачка вполне себе типичная, только вместо твоего кода надо писать вот так
    cat = pd.Categorical(df['Шифр дисциплины'].str.split('.').str[0], 
    categories=['ОГСЭ','ЕН','ОПЦ','МДК','УП','ПМ','ПП'])
    df.sort_values(by=['Шифр дисциплины'],key= lambda x: cat)
    Результат будет, как у тебя только кода меньше и без всяких созданий временных колонок.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты уверен что ты понимаешь что такое объект Figure в matplotlib? Это канва, на которой ты размещаешь axes (оси координат и уже на этих осях ты непосредственно рисуешь графики). Прямого api что бы засунуть sympy plot на matplolib figure, не существует. Потому что это не оси с графиками а своя ФИГУРА с осями и на них графиками.

    Можно ли это обойти, да конечно можно создать урода и присобачить на figure sympy plot.
    import matplotlib.pyplot as plt
    import numpy as np
    from sympy import Symbol
    from sympy.plotting import plot
    x = Symbol('x')
    X = np.linspace(-3,3,100)
    y = np.cos(X)
    def add_plot(p, ax):
        backend = p.backend(p)
        backend.ax = ax
        
        backend._process_series(backend.parent._series, ax, backend.parent)
        backend.ax.spines['right'].set_color('none')
        backend.ax.spines['bottom'].set_position('zero')
        backend.ax.spines['top'].set_color('none')
        plt.close(backend.fig)
    
    p = plot(x**2, (x, 0, 3), show=False)
    
    fig, ax  = plt.subplots(1,2, figsize=(18,9))
    ax[0].plot(X,y)
    add_plot(p, ax[1]);


    Вот мы имеем фигуру с двумя осями, одна нормальная matplob'вская вторая из sympy.
    Вот здесь кто то постарался и прикрутил. Почитай, что пишут.
    Ответ написан
    Комментировать
  • Почему не работает скрипт на python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну разные они, строка из файла и твоя строка, да и все. Возможно пробелы лишние, когда из файла читаешь, там специальные символы могут быть, например \n, когда ты выводишь строку с помощью print, ты его не видишь и тебе зрительно кажется, что они одинаковые. Посмотри на print(repr(list_of_names[0])) и на свою строку, приведи их к одному виду, что бы list_of_names[0] == 'Абакус Прайм, СЭ' возвращал True. И будет работать.
    Ну и ошибка то наверное общего характера соответственно проведи работу над всеми строками, которые ты получаешь из файла.
    Ответ написан
    2 комментария
  • Как в python при чтении файла excel убрать дубликаты ячеек в одном столбце и сложить соответствующие значения в другом?

    Maksim_64
    @Maksim_64
    Data Analyst
    читай в pandas фрейм, методом read_excel.
    Затем группируй по номеру и аггрегируй функцией sum.
    Псевдо код будет такой.
    df = pd.read_excel('Твой Файл')
    df.groupby('Телефон A')['Сумма'].sum()

    Функция, read_excel имеет огромное количество параметров, возможно что то придется настраивать. Остальное называется группировкой, и аггрегацией, на каждой группе. Результатом будет сумма по каждому номеру.
    Ответ написан
    Комментировать
  • Как подобрать начальные входные весовые коэффициенты (веса) для нейронной сети?

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

    В общем вот маленькая статья что бы не повторятся, там от простой выборки и до выборок по формулам в зависимости от функции активации, заодно там и пару коротеньких примеров на python имеется.
    Ответ написан
    Комментировать
  • Как удалить нумерацию и пустую строку в excel pandas?

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

    Можно ли это обойти, ну в программировании можно много чего обойти, вопрос а НУЖНО ли это, так или иначе, если хочется НЕНУЖНЫХ изобретений, то можно разбить проблему на две части отдельно писать иерархический header, отдельно данные, чего я бы на практике я не делал (чревато тем что, таблица "сдвинется куда нибудь") и вот тогда действительно проблематично.

    Удалить только пропущенную строку можно "относительно" безопасно.
    def write(df, xl_writer, startrow = 0,**kwargs):
       
        df.drop(df.index).to_excel(xl_writer, startrow = startrow,**kwargs)
        df.to_excel(xl_writer, startrow = startrow + 1,header = False,**kwargs)
        
    writer = pd.ExcelWriter("test_only_removed_empty_row.xlsx",engine='xlsxwriter')
    write(df, writer, sheet_name = 'Лист1')
    writer.close()

    Это более менее безопасно, удаление индекса все еще возможно, но приходится начинать ловить сдвиги, для общего случая ТАК ДЕЛАТЬ НЕЛЬЗЯ. Так или иначе, ужасная функция которая сделает это вот
    def write(df, xl_writer, startrow = 0,startcol=0,**kwargs):
       
        df.drop(df.index).to_excel(xl_writer, startrow = startrow,startcol=startcol,**kwargs)
        df.droplevel(0,axis=1).to_excel(xl_writer, startrow = startrow + 2, startcol=startcol+1,header = False,index=False,**kwargs)
        
    writer = pd.ExcelWriter("bad_practice.xlsx",engine='xlsxwriter')
    write(df, writer, sheet_name = 'Лист1')
    writer.close()


    Ну и в завершение, повторюсь, написание иерархических колонок, без индекса (index=False). Попросту выдает ошибку NotImplemented (Это не поддерживается текущим API). А вот такие "решения", как я продемонстрировал сомнительны. И да возможно, если не уставлен, придется установить xlsxwriter, или убрать параметр engine, что бы он использовал свой, там openpyxl по умолчанию стоит.
    Ответ написан
    Комментировать
  • Как работает оценка влияния признаков в методе vip() библиотеки vip в R?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри, vip - Variable Importance Plot. Это думаю ты и сама знаешь.

    1. Как измеряются - здесь все зависит от моделей и от задач которые они выполняют (задача регрессии или классификации). Много различных способов измерения важности предикторов (признаков) . По этому поговорим интуитивно, а не о деталях. Зачем это нужно в рамках анализа? В рамках нашей модели, какие предикторы (признаки) наиболее важные, на этот вопрос мы хотим ответить, например, мы можем выкинуть предикторы (признаки) со слабым влияниям (это может серьезно улучшить стабильность нашей модели, то как модель будет работать в продакшене потому что чем больше предикторов (признаков) тем больше ИСТОЧНИКОВ потенциальной ошибки, и если предиктор (признак не имеет практически никакого влияния для нас) то лучше от него избавится).

    2. В чем измеряется - и тут все зависит от модели и от метрики (на которой точность этой модели измерялась). Тут единица измерения ВАЖНОСТЬ. Для множественной линейной регрессии это это одна единица для деревьев другая. По этому у тебя на оси x VIP scores (Просто оценка важности). Что бы иметь более детальную интерпретацию, это надо брать модель, брать метод оценки MSE, RMSE, r_squared и т.д. и отдельно работать, в рамках данной функции это просто оценка важности.
    Ответ написан
    Комментировать
  • Как работать в ООП стиле в matplotlib - производить операции с графиками как с объектами?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну что ты имеешь ввиду под ООП стилем, не очень ясно из твоего примера. Во первых matplotlib имеет два интерфейса один matlab интерфейс а второй как раз таки ООП интерфейс.

    например
    import matplotlib.pyplot as plt
    import numpy as np
    X = np.linspace(-3,3,100)
    fig, ax = plt.subplots(2,1, figsize=(12,6))
    ax[0].plot(X, np.sin(X))
    ax[0].set_title('sin(x)')
    ax[1].plot(X,np.cos(X))
    ax[1].set_title('cos(x)')
    plt.show();

    Вот это пример двух графиков (поменять количество очень легко), на одной фигуре расположение и все остальное легко конфигурируется, вместо например xlabel и им подобным set_xlabel. Я продемонстрировал с title как устанавливать свой title для каждого графика отдельно. В документации этот подход упомянут, как explicit API еще его называют Объектно-ориентированный интерфейс. ax - это коллекция твоих графиков. a[0] - первый график и.т.д

    Так, как ты пытаешься ничего не получится. У тебя объект у которого ты пытаешься вызвать метод ylabel это список, а не то что ты думаешь.

    В matplotlib есть фигура и на ней ты можешь разместить столько графиков столько захочешь, в такой системе координат в которой захочешь и разместить их на этой фигуре так как захочешь.

    ДОПОЛНЕНИЕ К ОТВЕТУ.

    На случай, если OOP имелся ввиду python'вский а не OOP как интерфейс matplotlib.
    Смотри, если же тебе хочется создать свою структуру данных и на этой структуре запускать метод plot со всеми matplotlib возможностями, например pandas так делает. У pandas series или фрейма есть метод plot, если его запустить он тебе нарисует график напрммер.

    import pandas as pd
    
    df = pd.DataFrame({
        'Stock A':100 * np.cumprod(1 +  np.random.normal(0.01,0.05,30)),
        'Stock B':100 * np.cumprod(1 + np.random.normal(-0.01,0.05,30))
    }, index = pd.date_range('2023-01-01',freq='1D',periods=30))
    df.plot();

    Я сделал фрейм две фейковых акции обе стартуют со 100 рублей стоимости и затем одна имеет ожидание случайное нормальное распределение с одним процентом роста другая с одним процентом снижения в день. И вызвал метод plot. И он построит график, так вот если ты хочешь ПРИКРУТИТЬ метод plot для своего класса то можно сделать вот так.

    import numpy as np
    import matplotlib.pyplot as plt
    
    
    class plotCreator:
    
        def __init__(self, x, y,**kwargs):
            self.x = x
            self.y = y
            self.axes_kwargs = kwargs
        def plot(self, ax=None, **kwargs):
            if ax is None:
                ax = plt.gca()
            ax.plot(self.x, self.y, **kwargs)
            ax.set(**self.axes_kwargs)
            return ax
            
    
    X = np.linspace(-2*np.pi,2*np.pi,100)
    y1 = np.cos(X)
    y2 = np.sin(X)
    
    img1 = plotCreator(X, y1,xlabel='X',title='cos(X)',ylabel='cos(X)')
    img1.plot().figure.savefig('cos.png');
    
    plt.cla()
    
    img2 = plotCreator(X, y2,xlabel='X',title='sin(X)',ylabel='sin(X)')
    img2.plot().figure.savefig('sin.png');


    Вообщем, работает, надо конечно до ума доводить (код мягко говоря так себе) ну это уже сам, конечно. Тут имей ввиду, после каждого создания экземпляра класса и вызова метода plot нужно чистить фигуру plt.cla() вот этим методом а то он естественно рисовать на одном и том axes будет. Остальное kwargs экземпляра класса это методы axes, (xlabel, ylabel) и им подобные, kwargs метода plot, это как рисовать, стили линии, толщина, цвет и т.д. (color, lw, alpha, и.т.д)

    В общем в виде черновика можно вот так. А так придется вчитываться в доки, как все это по уму обставить и привести код к приличному виду в общем время придется потратить.
    Ответ написан
    Комментировать
  • Как исправить ошибку TypeError: 'type' object is not subscriptable?

    Maksim_64
    @Maksim_64
    Data Analyst
    Версии python разные, по всей видимости на сервере более ранняя. Либо попробуй
    from typing import List
    def GetAllWorker(db_name: str) -> List[WorkerInformation]:

    либо обнови python до более поздней, например на 3.10 может и 3.9 (не уверен) твой код должен работать. Если тебе конечно вообще нужны аннотации типов, на выполнения скрипта они влияния не имеют (в том смысле если не соответствие то ошибок не выдаст), а существуют лишь для специальных type checker'ов типа mypy.
    Ответ написан
    1 комментарий