• Как вывести строку из csv файла без лишних символов на python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну если оставить всю твою логику, то можно просто отфильтровать, пустые строки из результатов которые он находит.
    matching_rows.append([x for x in row if x])
    Ответ написан
    Комментировать
  • Задачка про строки, индексы в Python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Как в Python найти индекс введенного числа без учета регистра
    Какие у чисел регистры?
    Если же речь про буквы. То метод lower надо применить и к строке в которой ты ищешь.
    a = 'Hello World'
    b = input().lower()
    print(a.lower().find(b))
    Ответ написан
    2 комментария
  • Какой проект можно сделать, чтобы выучиться на Data Engineer?

    Maksim_64
    @Maksim_64
    Data Analyst
    Окей, я не Data Engineer, если таковые тут есть пусть меня поправят. Смысла делать какой либо проект без теоретических знаний в этой области я не вижу. Работа инженера по данным это построения пайплайнов, где стартовая позиция это сырые данные, а конечная это хранилище из которого BA/DA/DS ,будут брать эти данные.

    В зависимости от того что это за данные классические или бигдата архитектура этого пайплайна и типы хранилищ очень варьируется. И на вашем бы месте я бы смотрел в сторону Big Data Engineer потому что без него не обойтись, где классические данные там data engineering иногда весьма размыт и раскидан по разным специалистам.

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

    Ответ не претендует на истину, пусть data engineer's выскажутся.
    Ответ написан
    Комментировать
  • Рекурсивный вызов в цикле?

    Maksim_64
    @Maksim_64
    Data Analyst
    x - равняется 0 в твоем коде. Перенеси print(x) в самый верх и увидишь. Рекурсия это бесконечный цикл вызова функцией самой себя, до тех пор пока базовое состояние не прервет его (одно или несколько). None ты в конце видишь потому что это printтебе его возвращает, у тебя уже есть print внутри функции.
    def f(x):
        print(x)
        if x==0:
            return 
        else:
            f(x-1)         
    f(3)
    . В твоем случае он тоже выйдет и return 0 он выполняет, замени return на pass и получишь бесконечную рекурсию.

    Насчет None у тебя вот такая ситуация print(print(1))

    ОТРЕДАКТИРОВАНО После дискусии с Zzzz9, выяснилось, что я не прав насчет None. Базовый кейс в рекурсии останавливает рекурсию, но не выходит из функции. Что бы мы вернули значение базового кейса нам нужно добавить return к рекурсивному случаю. Например
    def f(x):
        if x==0:
            return 100
        else:
            f(x-1)
    print(f(3))

    Вот так выход из рекурсии настает, но рекурсивный кейс не имеет return и функция вернет None а вот в такой вариации
    def f(x):
        if x==0:
            return 100
        else:
            return f(x-1)
    print(f(3))
    Функция вернет 100. Насчет print я полную глупость написал, он возвращает None и я подумал, что это имеет место. Глупость полная. если мы добавляем return к рекурсивному кейсу то выведет то что возвращает базовый кейс. А базовый кейс только останавливает рекурсию но не выходит из функции.

    Насчет цикла если мы добавим return к рекурсивному кейсу то for цикл выполнится только один раз, потому что базовый кейс остановит рекурсию а рекурсивный кейс имеет return соответсвенно, функция напечатает изменение x + один добавочный 0, который возвращает return в базовом кейсе. Например
    def f(x):
        print(x)
        if x==0:
            return 'Конец'
        for i in range(10):
            return f(x-1)
    print(f(3))
    Цикл выполнится лишь раз и затем выход из функции.
    Ответ написан
  • Что изучать после пайтона?

    Maksim_64
    @Maksim_64
    Data Analyst
    Часть первая: Английский Язык.

    Часть вторая: поставь anaconda и jupyter lab

    Часть третья: python фреймворки
    1. numpy - изучать каждый метод не нужно, нужно освоить broadcasting Это правила по которым происходят операции с массивами разной размерности. Не изучишь, не сможешь работать с нейронными сетями и много еще с чем.

    2. pandas - нужно научится понимать, как работают индексы (вся мощь но и сложность лежит в индексах особое внимание к многоуровневым индексам). Группировки объект groupby. Решайпинг, методы stack, unstack, melt и т.д. Решайпинг сложная тема, но без нее никуда.

    3. matplotlib - нужно научится работать в ооп стиле, а не в матлаб стиле.

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

    4. scikit-learn - это машинное обучение, тебе понадобится разобраться что такое оценщик (estimator) и transformer (трансформатор). Также научится пользоваться пайплайнами, объект Pipeline это для старта, естественно.

    5. statsmodels - это не много иной взгляд на машинное обучение он включает в себя инферентивную статистику. Например построив логистическую регрессию, я могу посредством этой библиотеки найти каким образом изменение на одну единицу одного из моих предикторов отражается на вероятности, так называемый маржинальный эффект. Это очень важно для бизнеса. Также A/B тесты тоже там, и многое многое другое.

    4 и 5 также учить по документации она совершенно фантастического уровня особенно для scikit-learn + очень важный плюс В этой области есть классика это книга Statistical Learning книга написана профессорами стенфорда, в мире датасаенс она очень известна. Раньше она была написана на R, я ее читал на R в свое время, так вот 2023 году этим летом вышла python edition. Книга и код доступны бесплатно. https://www.statlearning.com/
    Это уникальная книга без равных, но к ней надо быть готовым.

    Часть Четвертая: Математика
    Все что нужно есть на Khan Academy. Начни со своего уровня и вперед, математика тебе нужна вся. Особенно Calculus. Заходишь на Khan Academy и вперед проходи бесплатные курсы со своего уровня,
    Algebra 1,
    Algebra 2,
    Precalculus,
    AP/College Calculus AB
    AP/College Calculus BC
    Statistics and Probability
    AP College Statistics

    Вот эти курсы вот этом порядке, ты должен освоить, то есть в конце курса финальный тест, должен проходить играючи, и все делать на листке бумаги не читерить, сам себя обманешь. Потом книга что я указал выше, код в книге естественно в основном использует scikit-learn и statsmodels, + первые три библиотеки само собой.

    Потом придется прочитать еще пару книг по теории вероятности и статистике отдельно (со временем). Если calculus на Khan Academy на должном уровне, то вот теория вероятности и статистика слабенькая, нужно будет добавлять.

    В добавление еще SQL но поверхостно, уровень не сложных запросов и подзапросов. Все дела будут происходить в pandas.
    Ответ написан
    Комментировать
  • Как решить проблему с кодировкой в pandas?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. пробуй менять параметр encoding у функции read_csv. Если знаешь кодировку файла.
    2. можешь попробовать задать параметр engine='python'

    Для детекции кодировки можно использовать chardet
    import chardet
    with open(filename, 'rb') as rawdata:
        result = chardet.detect(rawdata.read(100000))
    result

    И затем пункт первый.
    Ответ написан
    Комментировать
  • Как сделать чат-бот на основе ИИ, обученный на собственной базе знаний?

    Maksim_64
    @Maksim_64
    Data Analyst
    Есть ощущение, что вы ожидаете очень сложного ответа, а ответ очень прост. Нет никакой математики в этой задаче, так же нету в этой задаче и архитектуры нейронных сетей. Есть лишь только работа с API, что оно предоставляет, таковы и возможности. Если бы мне нужно было решать такую задачу, я бы открывал статьи на medium (открывается с vpn) и естественно смотрел бы в стороны платных статей и от них бы отталкивался, потому что там множество пошаговых гайдов высокого качества для создания чат-ботов на базе GPT ( предполагаю вы свободно владеете английским).
    Ответ написан
    2 комментария
  • Как сделать оформление словаря в txt файле и вычитывание значений из этого файла?

    Maksim_64
    @Maksim_64
    Data Analyst
    Когда мы храним информацию в файлах, то эта информация имеет определенную структуру. Вот это RPG = Dragon_Age, The_Elder_Scrolls_Skyrim Плохая структура, которая потребует парсинга, сами себе создаем проблемы.

    Мы можем использовать например json для создания хранения.
    import json
    data = {
        "RPG": ["Dragon_Age", "The_Elder_Scrolls_Skyrim"],
        "Action": ["Grand_Theft_Auto_V", "Watch_Dogs"],
        "MMORPG": ["Lineage_2", "Aion"],
        "Shooter": ["Bulletstorm", "Splinter_Cell"],
        "Racing":["Need_For_Speed_Payback", "Blur"]
    }
    
    with open("data.json", "w") as f:
        json.dump(data, f)

    Здесь, мы создаем файл определенной структуры. Из которого нам будет легко извлекать информацию.

    with open('data.json', 'r') as f:
        json_object = json.load(f)

    Все вся наша информация в словаре. С которым нам удобно работать.

    Теперь по поводу случайного выбора. Вы мало информации представили, по этому поводу. Выборка может происходить с заменой Выбрав элемент, я его возвращаю обратно и он может быть выбран снова. без замены Выбрав элемент он больше не может быть выбран снова. Информации как вы хотите осуществлять выборку вы дали мало. Например я могу использовать shuffle (перемешать элементы) и выбирать элемент c нулевым индексом всегда.
    from random import shuffle
    genres = list(json_object.keys())
    shuffle(genres)
    genre = genres[0]
    print(f'Вам выпал жанр: {genre}')
    games = json_object[genre]
    shuffle(games)
    game = games[0]
    print(f'Вам выпала игра: {game}')

    Это будет выборка с заменой. Мы можем использовать вместо выборки по индексу метод pop у списка и получим эффект выборки без замены (Но надо понимать объект json_object будет изменяться). Можно пойти и вашим путем. Осуществлять выборку индекса и выбирать по индексу, тоже нормальное решение.

    В общем основная проблема это не верно выбранная структура.
    Ответ написан
    Комментировать
  • Насколько важно знать хорошо математику аналитикам?

    Maksim_64
    @Maksim_64
    Data Analyst
    Однозначно нужно знать продвинутую математику.
    Тебе требуется знать теорию вероятности и математическую статистику. Как ты их будешь изучать не умея интегрировать, дифференцировать и работать с матрицами.
    Теория Вероятности - Непрерывные случайные величины (continuous random variable) не умеешь интегрировать до свидания. Далее какие отношения между PDF (Probability Density Function) и CDF (Cumulative Density Function), PDF это производная CDF и т.д. Матрицы везде где у нас происходят операции в многомерном пространстве (более одной переменной на вход), вместо операций с числами происходят операции с матрицами.

    По этому Linear Algebra, Single Variable Calculus, Multivariable Calculus. Это те дисциплины без которых, ты не сможешь изучать теорию вероятности и математическую статистику на должном уровне.

    Аналитика, Data Science - подразумевает в себе моделирование, то есть сведение проблемы к математическому виду. Как сводить к математическому виду не понимая, что ты делаешь, не понимания какими математическими свойствами обладают те или иные объекты. Плюс все будет усложнятся тем, что этот математический вид будет, всегда иметь еще случайную ошибку (шум) в себе.

    Есть ли разница между аналитиками? В теории есть, если в двух словах, то Data Analyst его ответственность это будущее. Business Analyst его ответственность понимание прошлого. System Analyst - это вообще не много другое, его ответственность это анализ IT системы внутри компании. Конкретные требования написаны в вакансии и плюс конкретные требования будут разнится от проекта к к проекту.
    Ответ написан
    4 комментария
  • Как выполнить команду в Anaconda Prompt из кода Python (Windows 10)?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну у linux и mac нету Anaconda Prompt. Все команды запускаются через терминал. Например.
    import os
    os.system("conda env list")

    В общем изучайте все возможности, модуля os - это модуль для взаимодействия с операционной системой. Ну и для windows (я им не пользуюсь) почитайте вот этот stackoverflow. Там пример есть, и указания на доки с объяснениями.
    Ответ написан
    Комментировать
  • Какие проекты можно сделать для повышения уровня в Пайтоне?

    Maksim_64
    @Maksim_64
    Data Analyst
    Знание данных функций (при чем ставить их в один ряд не стоит lambda это инструкция для объявления безымянной функции, в то время как другие имеют вполне конкретные предназначения) вряд ли приблизит вас к освоению python, map, zip возвращают итераторы. Уметь применить zip или map это одно, а вот понимать это уже совершенно другое.

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

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Есть библиотека tensorflow. Она имеет api для разных языков, в том числе и для js. Ее вы и нашли tensorflow.js.

    Да это возможно. Построить классификатор (распознаватель) OCR (Optical character recognition) в данном случае, который будет распознавать данные из каждой ячейки. Построение таких распознователей, это задача для специалиста. Такого что засунул файл с изображением в нейронную сеть и готово нет. Это целый процесс.

    В первую очередь я бы попробовал готовый parser таблиц, для картинок и pdf файлов. На python. Библиотека img2table она базируется на OpenCV, но специализируется на табличных данных. Возможно она решит все ваши вопросы, это будет значительно проще и быстрее.
    Ответ написан
    Комментировать
  • Есть ли бесплатные данные по цене биткоина за последние полгода?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри можешь зайти на yahoo загрузить csv файл в ручную (open close adj.close low high volume), например bitcoin там выберешь период и загрузишь.

    можешь использовать api. Для python нужно будет установить pandas и yfinance (и его зависимости). Код для получения будет такой.
    import yfinance as yf
    btc_usd = yf.download('BTC-USD')
    у функции есть параметры start и end, для задания периода. bts_usd это фрейм (электронная таблица) с которой делают анализ, визуализации, любые манипуляции, записи в любые форматы, базы данных и т.д.

    Плюс есть binance и у него тоже есть api для разных языков.

    Но вообще (без относительно крипты) я люблю yfinance, потому что там можно получить все подробные финансовые показатели компании, плюс много чего еще.
    Ответ написан
  • Есть ли сервисы для парсинга разных документов с api?

    Maksim_64
    @Maksim_64
    Data Analyst
    Нет, ничего подобного нет, и в обозримом будущем не предвидится.

    Здесь требуется подготовка данных + анализ. Очень часто если эти задачи сложные то их два разных специалиста будут выполнять, если подготовка данных относительна не сложная то один.

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

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

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

    3. Отсюда вывод вы слабо себе представляете то о чем спрашиваете, так или иначе, то о чем вы спрашиваете это работа с временной последовательностью, вот прочтите https://qna.habr.com/q/1295634
    Ответ написан
    4 комментария
  • Какая конфигурация нейронной сети лучше для временной последовательности?

    Maksim_64
    @Maksim_64
    Data Analyst
    А здесь основная работа - это препроцессинг данных. По нейронкам это RNN. И это наверное процентов 5 времени, все остальное это подготовка данных. Конвертации времени в сигналы, нормализации, оконные функции, правильные сплиты и т.д. Time Series предполагает очень сложный препроцессинг.

    Если задача с временной последовательностью, то нужно тратить время, на изучение необходимых трансформаций. А сама нейронка это ерунда.

    Ну и не много не в тему вопроса, при работе с ts я бы вообще не использовал нейронные сети. Нейронные сети не являются интерпретируемыми моделями. Что это значит? Например у меня есть параметры на вход и один из них ну скажем пускай будет средняя скользящая за неделю, так вот я никогда не смогу сформулировать взаимоотношения между отдельно взятым предиктором в данном случае (средней скользящей) и целью пусть будет цена акции. По этому я бы смотрел в сторону GAM (General Additive Models). Все regressive модели их много это подсеты GAM, когда речь идет о ts то появляется приставка auto. Так вот там можно сформулировать взаимоотношения между отдельным предиктором и целью, а на длинной дистанции это очень важно. GAM это класс моделей а не отдельно взятый алгоритм.
    Ответ написан
    8 комментариев
  • ValueError: operands could not be broadcast together with shapes (720,406) (400,) (720,406) в stable diffusion?

    Maksim_64
    @Maksim_64
    Data Analyst
    Сама по себе ошибка, довольно известная, и происходит она на уровне numpy. При работе с массивами данных, есть такой важный термин, как broadcasting - это то как numpy осуществляет арифметические операции с массивами разной размерности.
    Например
    import numpy as np
    arr1 = np.ones(9).reshape(3,3)
    arr2 = np.ones(8).reshape(2,4)
    arr1 + arr2
    Выдаст по смыслу такую же ошибку, как у вас, размерности разные и он не в состоянии произвести оперцию.
    А вот в этом примере
    import numpy as np
    arr1 = np.ones(27).reshape(3,3,3)
    arr2 = np.ones(9).reshape(3,3)
    arr1 + arr2
    Не смотря на то что размерности разные у нас двумерный массив складывается с трехмерным, ошибки не будет все сработает.
    Потому что согласно правилам broadcatsting'a, данная арифметическая операция возможна.

    Так и у вас, numpy не в состоянии выполнить broadcasting. Как поправить, по скольку вы напрямую не работаете с массивами, а используете интерфейс stable diffusion, то все ответы надо искать там. Либо вы передаете массив с данными, не в той размерности, либо что то в параметрах stable diffusion не то. Ищите рабочий пример и повторяйте. Так поправьте здесь что то или там что то, здесь сказать не возможно. Что из себя представляет проблема я обрисовал.
    Ответ написан
    9 комментариев
  • Какая разница между валидационным и тестовым наборами данных?

    Maksim_64
    @Maksim_64
    Data Analyst
    Смотри в теории машинного обучения есть такая важная тема как Resampling Methods. Это методы случайной выборки из данных которые у тебя есть. Есть два основных это Cross Validation и Bootstrap. Обычно во всяких обучающих материалах используется Cross Validation да и на практике он тоже очень популярен. Что он из себя представляет мы берем например делим случайным образом датасет на 5 частей. Сначала треним на 4 потом тестим на одном что остался, потом на других 4 и тестим на одном что остался и т.д. Так вот каждый такой набор (на котором мы тестим) называется валидационным набором. Например наша метрика MSE мы получим 5 MSE по каждому валидационному набору потом обычно берут среднее по ним.

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

    Используют и то и то. Это инженерное решение и ты будешь видеть оба подхода. Ну и на каких то обучающих историях, ты можешь увидеть отсутствие кросс-валидации и только разбиение train_test_split.

    В идеале все выглядит вот так. Единственное существует огромное количество разных кросс-валидаций.

    64bcbf8e217a9092904980.png

    Это пример где кросс-валидация используется для тюнинга гиперпараметров, но точно также она будет использоваться и для других целей, каждый синий Fold это и есть валидационный набор.
    Ответ написан
    4 комментария
  • Как правильно преобразовать при помощи python данные с json в таблицу mysql (формат db)?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну и нагородил ты тут. При чем здесь mysql если ты в конце используешь sqlite. В общем проблема в том что по всей видимости у тебя твой твой датафрейм содержит питоновский объект dict, а не должен. во первых pandas имеет метод pd.read_json() во вторых есть метод json_normalize() если json содержит "вложенные словари". Приведи в порядок свой датафрейм, и данные запишутся в базу. Не знаешь, как привести датафрейм в порядок, показывай его и отдельным вопросом.
    Ответ написан
  • Как в Python получить список открытых позиций в Binance?

    Maksim_64
    @Maksim_64
    Data Analyst
    Обычно для работы с различными финансовыми данными используют такую структуру данных, как pandas датафрейм (некоторые api даже имеют параметр что то типа returned_type = 'dataframe' ). Там легко выбрать все что нужно, привести типы данных, ответить на любые вопросы например по какой монете самая большая открытая позиция и т.д, в общем все возможные манипуляции там есть + визуализации.

    Например представим нам прислали структуру как у тебя, я сократил (количество ключей для читабельности, а так не важно сколько их там)
    import pandas as pd
    import numpy as np
    data = [
        {'symbol': 'FTTBUSD', 'positionAmt': '0.001', 'entryPrice': '0.0', 'markPrice': '0.00000000'},
        {'symbol': 'ETHUSDT', 'positionAmt': '0.003', 'entryPrice': '1912.07', 'markPrice': '1911.37031373'},
        {'symbol': 'ALPHAUSDT', 'positionAmt': '0.002', 'entryPrice': '0.0', 'markPrice': '0.00000000'}
        ]
    df = pd.DataFrame(data=data, columns=['symbol','positionAmt'])
    df['positionAmt'] = df['positionAmt'].astype(float)
    print(df)

    Все мы выбрали только те ключи которые нам интересны параметр columns, если нужны все просто не указываем его. Теперь мы имеем таблицу с которой, мы можем делать все что угодно, начиная от любых расчетов, записей в различные форматы файлов или бд и даже визуализаций, например код df.plot(kind='bar', x='symbol', y='positionAmt'); Выведет вот такой график64b90126736ad454204003.png
    Это для демонстрации что всего в пару строк мы проходим путь от того что нам прислал binance до анализа.
    C датафреймом, будет легко и быстро задавать все интересующие вопросы.
    Ответ написан
    2 комментария