Задать вопрос
  • Как создать список на два элемента с заполнением None?

    Speakermen, Скриншоты, кода не разрешены по этому удалите. А вот относительно фрейма, я выскажусь, вы создали колонку price, так вот это колонка у вас грязные данные. Потому что вы не сможете запускать на них операции статистические, если в файл писать что это за колонка такая будет. Еще раз в мире данные это называется dirty. То есть это не должно быть в таком виде, вам нужно две колонки, или более если размер каждого кортеда не два как у вас а более. Или по своему реорганизуйте. Или я предложу вам создать сначала отдельный фрейм для price
    df = pd.DataFrame(data=listPrices, columns = ['Price1','Price2'])

    потом сджоинить его с основным вашим фреймом
    например либо
    pd.concat([main_df,df],axis=1,ignore_index=True)
    либо
    pd.merge(main_df,df)
    где main_df это ваш основной. Либо иначе поработатйте (напрмер можно str.split()) вот как его применять https://pandas.pydata.org/docs/reference/api/panda..., но иметь такую колонку как у вас = иметь проблемы с ней в будущем.
  • Как создать список на два элемента с заполнением None?

    Speakermen, Обратите внимание, что он берет по самому длинному внутреннему списку, то есть если там не два а больше все будет работать, и второе это объект который вы получаете это список кортежей. Этот объект внутри экосистемы python будет понят, (в том числе) как список строк, то есть вы можете в базу так писать вы можете напрямую без изменений создать pandas фрейм из него. Каждый кортеж будет расценен как строка. Это не является неким правилом или что то в этом роде, это вещь которую лучше знать для удобства работы с этой структурой данных. Один из вариантов рассматривать список кортежей это рассматривать их как рекорды.
  • Как записать данные в csv файл?

    Ну он перезаписывается, да и все. У вас mode='w' стоит поменяйте на 'a', что бы он добавлял в файл.
  • Как повысить точность модели машинного обучения?

    Я достаточно, вам времени уделил, более того сформировал вам шаблон, что бы вы на нем могли учится и эксперементировать. Внутри, каждго из
    numeric_transformer = Pipeline(
        steps=[("scaler", StandardScaler()),]
    )
    
    categorical_transformer = Pipeline(
        steps=[
            ("encoder", OneHotEncoder(handle_unknown="ignore")),
        ]
    )

    Может быть более одного трансформера, просто добавляете кортеж состоящий из имени (придумываете его сами и самого трансформера) гуглите sklearn numeric transformers и соответственно categorical transformenrs. И пробуйте учитесь. Дальше без меня.
  • Как повысить точность модели машинного обучения?

    Kind_Man, Так ну хорошо, для начала давайте все сделаем по человечески, и заодно исключим ошибки в pandas коде.
    import pandas as pd
    import numpy as np
    from sklearn.pipeline import Pipeline
    from sklearn.compose import ColumnTransformer
    from sklearn.preprocessing import StandardScaler, OneHotEncoder
    from sklearn.model_selection import train_test_split
    from sklearn.ensemble import RandomForestClassifier
    
    X = df.drop(columns=['Status'])
    y = df['Status']
    numeric_features = [" ",..]
    categorical_features = ["",..]
    # Вот мы создаем Pipeline's для наших трансформаций, пока по одной на каждую часть но это для начала
    numeric_transformer = Pipeline(
        steps=[("scaler", StandardScaler()),]
    )
    
    categorical_transformer = Pipeline(
        steps=[
            ("encoder", OneHotEncoder(handle_unknown="ignore")),
        ]
    )
    
    preprocessor = ColumnTransformer(
        transformers=[
            ("num", numeric_transformer, numeric_features),
            ("cat", categorical_transformer, categorical_features),
        ]
    )
    наш финальный пайп где мы собрали трансформеры который имеет поведение модели.
    clf = Pipeline(
        steps=[("preprocessor", preprocessor), ("classifier", RandomForestClassifier(random_state=42))]
    )
    
    #теперь когда мы создали план действий делим данные
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    clf.fit(X_train, y_train)
    print("model score for training set: %.3f" % clf.score(X_train, y_train))
    print("model score for testing set: %.3f" % clf.score(X_test, y_test))


    Вот это правильная организация для вашей проблемы (здесь из коробки он где надо применит transform а где надо fit_transform) в общем код верный просто для не опытного человека может выглядеть необычно, что оно выдаст по метрикам вот так? теперь мы так же можем если нужно еще каких нибудь трансфомеров добавить в наш numerical и categorical трансформеры.
    Это вместо всего вашего кода весь pandas выкидываем.
  • Как повысить точность модели машинного обучения?

    Kind_Man, так значит type и network там больше двух значений и одна не больше другой то есть OneHotEncoder, а остальные это ordinal если там 1 или 0 то они уже закодированы. Так?
  • Как повысить точность модели машинного обучения?

    Да в трансформациях ошибка. Те что np.log не имеет смысла. У нас не происходит обучения на тренировочном сете. Уберите это и все что численные StandardScalerom трансформируйте. Сам трансофрмер вы применили "правильно" в кавычках потому что весь pandas код ужасный, так pandas не пишут, но что касается трансформера он у вас РАБОЧИЙ.
    X_train[numerical_cols]=minMax_scaler.fit_transform(X_train[numerical_cols])
    X_test[numerical_cols]=minMax_scaler.transform(X_test[numerical_cols])

    вот это я имею ввиду по исполнению конечно так не пишут но он РАБОЧИЙ. все что np.log вообще уберите.
    и замените трансформер. StandardScaler в который все ваши чиленные переменные впихнете.

    По категориальным у вас там что? много категорий, где одна не больше другой? расcкажите что там?
  • Как повысить точность модели машинного обучения?

    Kind_Man, Во первых вы должны сказать точность как на ТРЕНИРОВОЧНОМ так и на ТЕСТОВОМ сете. Во вторых 0.65- 0.67 трансформации выполнены с ошибкой это не улучшение. Кода то нету откуда я могу знать где у вас в трансформациях ошибка.

    Ответ на ваш главный вопрос трансформации выполнены с ошибками.
    Может вы категориальные данные тоже потом трансформируете StandardScaler'ом или MinMax'ом. Может какая другая ошибка на трансформациях.
  • Как записать Словарь в CSV по СТОЛБЦАМ в Python?

    igor6130, Вопрос о записи в csv файл, а не об уровнях знаний автора, и обсуждать я здесь могу запись csv файлов, а не автора вопроса.
  • Как записать Словарь в CSV по СТОЛБЦАМ в Python?

    Speakermen, Можно все вы можете создавать фреймы из csv. И потом джоинит, конкатенировать, и все что угодно. Ну и фрейм всегда можно конвертировать в словарь to_dict. pandas это серьезный инструмент для работы с табулярными данными начиная от статистических функций и заканчивая записями в различные форматы.
  • Как записать Словарь в CSV по СТОЛБЦАМ в Python?

    igor6130, Я буду использовать те средства которые на уровне задачи предлагают мне наиболее широкий функционал, и требуют от меня наименьших усилий. Функционал при записи в файлы различных форматов (в том числе csv) библиотеки pandas превосходит стандартную библиотеку, тоже самое из количеством кода, с pandas это будет короче. В вопросе нигде не упомянуто, что нужно использовать только средство стандартной библиотеки.
    И еще раз одна из главных причин использовать python это его экосистема.
  • Как записать Словарь в CSV по СТОЛБЦАМ в Python?

    igor6130, Одна из главных причин использовать python - это использовать его экосистему.
  • Как повысить точность модели машинного обучения?

    Kind_Man, А почему сразу не применить Standard Scaler?
    смотрите раз уже не хотите Pipeline учить. любой трансформер имеет методы fit_transform и просто transform

    псевдо код
    scaler = StandardScaler()
    X_train_transformed = scaler.fit_transform(X_train)
    model = RandomForestClassifier(max_depth=2, random_state=0).fit(X_train_transformed, y_train)
    X_test_transformed = scaler.transform(X_test)
    model.predict(X_test_transformed)

    только естественно ваш X_train и X_test должен быть трансформирован как трансформером для численных данных так и трансформером для категориальных.
    ну и что бы такое делать не вручную есть такой ColumnTransformer.
    в общем вот вам пример из документации который поможет вам не запутаться https://scikit-learn.org/stable/auto_examples/comp...

    там рассказано как разные трансформаторы применять для разных fеtatures в рамках одного сета данных.

    А то мы тихо-тихо идем к тому что я за ва начну код писать, этого не будет.
  • Как повысить точность модели машинного обучения?

    Kind_Man, Первое вы упомянули min и max это примеры агрегирующих функций (агрегирующая функция на вход получает вектор (для простоты и понятности несколько чисел да простят меня математики) а на выход одно число) так работает агрегирующую функции min, max, std,var, mean, median и другие. Так вот трансформации применяются по элементно. Это на всякий случай, думаю вы имеете ввиду (я на это надеюсь MinMaxScalar).

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

    Нормально ли применять для разных колонок разные трансформаторы ДА НОРМАЛЬНО (ваш y только не трогайте (что вы классифицировать собрались) Его тоже можно трансформировать но это отдельная тема для разговора пока туда не лезьте). Вы свободный художник здесь. И главное выполнить по технике правильно перечитайте что я говорил про transform и fit_transform. Наверное даже вам необходимо глянуть главу 10 https://scikit-learn.org/stable/common_pitfalls.html. Там рассмотрены ошибки частые, она небольшая и убережет от того что будете применять трансформации а они в силу того что вы не опытен работать не будут. Обязательно ее прочтите запустите и пошагово разберите простейшие примеры от туда они маленькие и понятные. А потом возвращайтесь к большой и трудной 6 главе.

    Численные значения в итоге после препроцессинга обязаны оказаться все примерно в одном диапазоне числовом или нет?

    Ну что бы обязаны такого прям нет. Исключения могут быть. Но лучше да приводить. Обратите внимание

    StandardScaler - scaler шкала (как вы выразились диапозон) что он сделает для каждой колонки он посчитает mean и std. И затем сделает (x - mean(колонки в которой находится x)) / std (стандартное этой колонки). То есть каждое числовое значение становится количеством стандартных отклонений от среднего по этой колонке. То есть у нас становится одна единица измерения для всех числовых данных. И все они придут в среднем к одной шкале.

    MinMaxScaler переведет все данные в формат от 0 до 1. по умолчанию этот диапозон как вы его называете можно поменять.

    Более популярный StandardScaler примените его правильно и посмотрите на результаты. В sklearn тьма примеров с ним для некоторых алгоритмов он и вовсе обязателен.

    По этому я вам и говорю наберитесь терпения и выучите объект Pypeline потому что у нас два трансформера один для категориальных а другой для числовых данных. И это только начало. Будет тяжело не запутаться в них и нигде не ошибиться.
  • Как повысить точность модели машинного обучения?

    Kind_Man, Для проверки изменений включая препроцессинг вы фиксируете ваш random_state (число не важно) важно что бы не None как по умолчанию и сравниваете метрики ДО и ПОСЛЕ какого то изменения. По поводу правильного препроцессинга (возьмем немного шире Data Transformation) если в двух словах то это САМАЯ ВАЖНАЯ часть и это место где один Data Scientist будет лучше другого. Я коснусь лишь самых элементарных моментов потому что это огромный топик.

    У вас есть ЧИСЛЕННЫЕ данные и КАТЕГОРИАЛЬНЫЕ. И те и те нуждаются в трансформациях для абсолютно любого алгоритма.

    ЧИСЛЕННЫЕ наши колонки должны быть в одной шкале. Например в одной колонке у нас числа от 1 до 10 а в другой от 1 до 100. Те что от одного до ста стянут ВСЕ ВНИМАНИЕ на себя (вариативность ну я буду по простому писать пусть и потеряю в точности). А на самом деле та колонка в которой данные от 1 до 10 она более важная но алгоритм без препроцессинга обесценит ее. Пример такого трансформера это StandardSclaer. Но это не значит вот только он или он и все. ИЗУЧАЕМ трансформации числовых переменных.

    КАТЕГОРИАЛЬНЫЕ например у нас есть переменная в которой есть три категории плохо, хорошо, прекрасно,
    мы можем их так закодировать плохо = 0, хорошо = 1, прекрасно 2. То есть имеется некий порядок одна категория больше другой. Такую кодировку осуществит OrdbalEncoder. Если же например у нас категории зеленое, белое, красное то мы НЕ можем сказать что одна категория больше другой и это OneHotEncoder.

    При препроцессинге необходимо соблюдать определенные правила например ВСЕ ТРАНСФОРМАЦИИ на ТРЕНИРОВОЧЕОМ СЕТЕ (я говорю о Х о features) должны быть осуществлены и на ТЕСТОВОМ сете.

    При это на ТРЕНИРОВОЧНОМ мы вызывает метод fit_transform. И МЫ НИКОГДА И НЕ ПРИ КАКИХ обстоятельствах не вызывает FIT на тестовых данных то есть НА ТЕСТОВЫХ данных мы трансфомируем методом transform. То есть для X_train у нас метод fit_transform для X_test метод transform.

    Правильное осуществление ДАЖЕ при условии ПРАВИЛЬНО выбранных траснформаций критично. Для этого я вам и сказал изучайте главу 6 и ссылку дал, это НЕ такой топик что вот здесь вот это поменяй и все получится, не получится.

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

    monkeyb, Вы указали в вашем что все парсится.
    скорее всего, испольуйте атрибут text. soup.find('h1', class_='section_hero__title').text Ну это не точно у меня то html вашего нету, что бы я мог точно указать.
    Судя по таблице Нужно будет провести дополнительную работу над каждым полем. Например, значек евро убрать вам то работать с цифрами в дальнейшем.
    Это не входит в ваш вопрос, вопрос стоит в том что бы организовать работу. Я вам ответил и привел примеры.
    Ключевой момент это структура данных список кортежей, потому то из нее хоть в базу данных писать можно, хоть в файл, хоть фрейм создавать.

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

    Vladimir Mikushkin, Это все надо на конкретном примере проверять, в общем случае там много способов схитрить именно при парсинге, но когда ты парсишь никакого общего случая нет есть только твой конкретный.
    Документация так вот обрати внимание при парсинге pdf есть там замечательный параметр pandas_options И он ожидает словарь, там можно пойграться с параметрами например 'header':'None' и другими. Но это общий случай там вот этот пример прям в документации есть. Надо брать с конкретными данными и пробовать.
  • Как из pdf-файла спарсить таблицу, размещенную на двух страницах и сохранить в Excel?

    Vladimir Mikushkin, Там смотри я тебе общие рекомендации дам по pandas, когда парсишь pdf. Всегда все собирай в один фрейм а только потом пиши в файл или добавляй в файл. Перед тем как писать его надо проверить когда парсишь табулой он может не нужные строки создавать например над таблицей или под таблицей название он их может под них строку создать. потом надо проверять на наличие пропущенных значений при чем вместо nan там могут быть '' надо проверять например вот так (df == '').sum()
    И много других неприятных сюрпризов может быть. Потом приводить все числовые значения к числам из под парсинга они все str в pandas это object называется. Просто помни pandas в плане манипуляции табулярных данных может все. И всю работу надо делать в нем.
  • Как из pdf-файла спарсить таблицу, размещенную на двух страницах и сохранить в Excel?

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

    Vladimir Mikushkin,
    все вроде одолел я его в общем вот так работает. Но код конечно грязный
    columns = df1.columns
    df2 = df2.reset_index(drop=True).T.reset_index().T
    df2.columns = columns
    df2.reset_index(drop=True)

    Работает вот ровно, подработай его когда решение есть там уже подправишь.