• Какой MacBook выбрать для Data Science/Machine Learning/AI?

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

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

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

    Maksim_64
    @Maksim_64
    Data Analyst
    у тебя у r status_code 403. Добавь хоть какой нибудь header.
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0'
    }
    r = requests.get(url,headers=headers)

    Вот так сервер пришлет html.
    Имей также ввиду что парсить интерактивно (в рамках одного соединения) с bs не получится, придется переподключаться часто ну и схватишь блок или ерунду начнет присылать в ответ. Если ты перейдешь на страницу, зайдешь в инспектор, нажмешь на значек настройка в панели инспектора, затем поставишь галочку Disable JavaScript и обновишь страницу, вся инфа на странице перестанет обновляться. По скольку обновление происходит средствами JavaScript a bs не работает с JavaScript.
    Ответ написан
    3 комментария
  • Как нужно собирать датасет для модели бинарной классификации?

    Maksim_64
    @Maksim_64
    Data Analyst
    Бинарная классификация, подразумевает два варианта пост на IT тематику (True) или (False). Соответственно, только первый вариант, если учебный дата сет не будет содержать разных постов, то обучаться будет не на чем.

    Насчет пропорций, здесь интереснее. И так в реальности мы имеем куда более вероятное событие пост не IT чем IT. Но при создании модели нам нужно что бы наши пропорции были примерно равны или около того. Иначе мы будем иметь то что называется bias. У нас например в тренировочном сете значительно больше постов которые не IT и соответственно, мы уже имеем ПРЕДРАСПОЛОЖЕННОСТЬ. Что плохо. По этому изначально, для классификатора, не должно быть такого понятия, как НЕ IT пост более вероятен.

    Это общее правило с которого могут быть ответвления, например, когда есть датасет в котором одного класса сильно больше делают еще одну выборку с весами (resampling), то есть выбирают не с равными вероятностями. И потом получают близкое к равное распределение.

    В каких то случаях (редко) допускается и отклонения от этого правила, на уровне инженерных причин. Но стартовые позиции, как я описал выше.
    Ответ написан
    Комментировать
  • Как отсортировать os.listdir по возрастанию?

    Maksim_64
    @Maksim_64
    Data Analyst
    sorted(mylist, key=lambda x: int(x.split('.')[0]))
    Ответ написан
    Комментировать
  • Изменили выходные параметры в fitted.forecast в Python - как его теперь использовать в моем случае?

    Maksim_64
    @Maksim_64
    Data Analyst
    В общем ради интереса, получил модель как на графике в статье. Из тех данных что у вас есть.
    1. Модель имеет тренировочный сет 130 плюс предполагает предсказание на 39 дней то есть конечное количество это 169. В коде же об этом не слова и он берет его до конца временной последовательности
    2. Задана неправильная вариация параметра order. Что бы его задавать правильно требуется понимание.
    3. По мелочи поправили остальное.
    4. Самое главное, практическая ценность данной модели близка к нулю. Он предсказывает средние значения и как мы видим он "зацепил" ТРЕНД, кстати его параметром конечно же автор статьи тоже не указал, но я поправил.

    В общем хотели рабочий код, который из данного датасета строит и визуализирует авторегрессивную модель то вот.

    df = pd.read_csv("https://hands-on.cloud/wp-content/uploads/2022/02/catfish_sales_1986_2001.csv")
    train = df.Total[:130]
    test = df.Total[130:170]
    
    model = ARIMA(train, order=(1, 0, 0),trend='ct').fit()
       
    
    fc = model.get_forecast(39, alpha=0.05) 
    
    fc_series = pd.Series(fc.predicted_mean, index=test.index)
    lower_series = pd.Series(fc.conf_int().iloc[:, 0], index=test.index)
    upper_series = pd.Series(fc.conf_int().iloc[:, 1], index=test.index)
    
    plt.figure(figsize=(12,5), dpi=100)
    plt.plot(train, label='training')
    plt.plot(test, label='actual')
    plt.plot(fc_series, label='forecast')
    plt.fill_between(lower_series.index, lower_series, upper_series, color='k', alpha=.15)
    plt.title('Forecast vs Actuals')
    plt.legend(loc='upper left', fontsize=8)
    plt.show()
    Ответ написан
    Комментировать
  • Почему много кликов по рекламе, но мало установок?

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

    2. Надо глянуть корреляцию по дням между кликами и установками. То есть ли некая зависимость между количеством кликов в день и количеством установок.

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

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Почитав, ваш ответ на мой комментарий, вот какие советы вам дать. То что вы ищете по уровню называется EDA (Explanatory Data Analysis). Это начальный поверхностный анализ, так сказать, глянуть что из себя представляет датасет, и в какую сторону двигаться дальше. Вы используете в нем pandas и matplotlib/seaborn. Если вы не проходили seaborn то ничего страшного, он сделан на matplolib и в целом используется совместно (упрощено говоря matplotlib c улучшенными графиками)

    Kaggle это хорошо, там все и возьмете. Например вот https://www.kaggle.com/code/imoore/intro-to-explor... на kaggle то не только датасеты есть но и notebook'и c кодом, что сообственно я и привел вам ссылке.

    Как искать на главной странице сайта есть поиск пишете в нем EDA затем в окошке слева отмечаете галачкой ipynb. И получаете список нотебуков, которые содержат EDA. Большинство нотебуков будут содержать манипуляции с pandas и визуализации matplolib/seaborn и объяснения что все значит. Читайте разбирайтесь, что не понятно и совсем не можете справится спрашивайте.

    Это так сказать гайд для вашего случая (когда плохо понимаете с чего вообще начать). Приготовьтесь серьезно потрудится, просто если на курсах не поняли толком ничего не будет.
    Ответ написан
    2 комментария
  • С помощью какой библиотеки(python) можно конвертировать xml в pdf?

    Maksim_64
    @Maksim_64
    Data Analyst
    Я бы не использовал одну библиотеку здесь. Процесс, вряд ли будет протекать без проблемно.
    Я бы конвертировал xml в pandas фрейм, методом pd.read_xml() глянул бы на него, может чего подкорректировал, из фрейма уже конвертировал (по этапно) в pdf. Вот в этой статье https://www.alixaprodev.com/how-to-convert-pandas-... есть рабочий код три способа (один с использованием matplotlib), второй способ он использует конвертацию фрейма в html таблицу и оттуда уже в pdf, и третий там библиотеку он использует.

    Так вот я бы использовал способом pandas + matplotlib он даст мне больше всего контроля и свободы, как и в каком виде все это запишется в pdf, то есть я смогу кастомизировать + справится с потенциальными ошибками при записи. Рабочий пример (там фрейм создаетс, а не читается из xml это сделаешь сам pd.read_xml()) есть в статье по ссылке от которого уже можно оттолкнуться.
    Ответ написан
    1 комментарий
  • Почему меняется словарь?

    Maksim_64
    @Maksim_64
    Data Analyst
    потому что словарь это мутабельный тип данных. А ваш словарь имеет вложенную структуру, состоящую из мутабельных типов данных. Метод copy который вы используете он касается только копии внешнего словаря, но НЕ затрагивает вложенные мутабельные типы. Как результат data и temp это два разных объекта, а вот их вложенные структуры НЕТ. Что бы создавать копии c учетом вложенных структур нужно использовать deepcopy из модуля copy.
    import copy
    temp = copy.deepcopy(data)


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

    Maksim_64
    @Maksim_64
    Data Analyst
    Такого графика нет. Были дискуссии на эту тему, администрация опасается, отмены соревнования, с их слов бывает что у них все готово к старту и что то срывается, ну и соответственно они опасаются за свою репутацию.

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

    А так ты можешь себе уведомление поставить о новом соревновании. Но графика планируемых соревнований нет.
    Ответ написан
    Комментировать
  • Почему не работает условие?

    Maksim_64
    @Maksim_64
    Data Analyst
    Программа, как я понял должна проверять закрыты ли все скобки в строке. Почему методы класса ты пытаешься вызываешь без скобок например tack.get_elem, где скобки потерял? оператор () где потерял? и так у тебя в трех местах включая if stack.get_stack == []:
    Ответ написан
    Комментировать
  • Почему условие выполняется не корректно?

    Maksim_64
    @Maksim_64
    Data Analyst
    while True:
        password = input('Придумайте пароль: ')
        crit1 = len(password) >= 8
        crit2 = sum(s.isnumeric() for s in password) >=3
        crit3 = sum(s.isupper() for s in password) >=1
    
        if not (crit1 & crit2 & crit3):
            print('Вы ввели не надежный пароль')
        else:
            print('Пароль надежный')
            break
    Ответ написан
  • Как интерпретировать результат теста Шапиро-Уилка и Колмагорова - Смирнова?

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

    1. График о чем говорит? Нормальное распределение подразумевает, крайне маленькие вероятности у "хвостов" распределения, то есть если вы отклонились более 2 стандартных отклонений то там 5 процентов всего по 2.5 с каждого края, на вашем же графике далекие от среднего значения НЕ являются маловероятными событиями. В статистике это называется fat tails. То есть это не НОРМАЛЬНОЕ распределение не будет такого что 95 процентов лежат в пределах двух стандартных отклонений, это значение будет меньше (Экстремальные величины не являются маловероятными).

    2. По поводу теста тут все просто. Что такое p-value? Это вероятность тестовой статистики при условии НУЛЕВАЯ Гипотеза ИСТИННА. Поговорим о логике эксперемента. Допустим мы говорим средний рост прохожего (мужского) пола 175см. Это ПАРАМЕТР популяции который мы хотим затестить посредством СЛУЧАЙНОЙ выборки. Мы выходим на улицу берем 500 (например дизайн эксперемента я опускаю) мужчин измеряем их рост и берем среднее значение это ТЕСТОВАЯ статистика, далее мы нормализуем (трансформируем наши ТЕСТОВУЮ статистику после чего она измерятся не в см а в стандартных отклонениях) ну и находим вероятность ТЕСТОВОЙ статистике из такого распределения где ПАРАМЕТР истинен. Если это вероятность ниже установленного заранее порога, мы отвергаем нулевую гипотезу. Потому что мы говорим это очень маловероятно видеть такую ТЕСТОВУЮ статистику при условии нулевой гипотезы истинной. Это общая направление ИДЕЯ. Частные имплементации могут отличаться в зависимости сколько данных у нас есть что мы знаем о распределении популяции и .т.д. Это была общая логика.

    У теста Колмагорова-Смирнова есть своя формула для ТЕСТОВОЙ Статистики которая показывает своего рода "дистанцию" между распределением выборки и в данном случае нормальным распределением (Упрощенно читайте подробнее) и вычисляет ее вероятность. В вашем случае он вам показал что вероятность равна нулю. (То есть уверенно отвергаем нулевую гипотезу).

    Это что можно понять из предоставленной вами информации, повторюсь ответить правильно ли вы все сделали возможности нет.
    Ответ написан
    Комментировать
  • Как удалить похожие строки из таблицы в Pandas, Python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотрите первое мы имеем str акссесор который позволяет нам осуществить для каждой ячейки как будто она строка в python. Там огромное количество методов и можно даже сложный regex написать если нужно, и на основании его оставить только нужные строки. Второе у pandas есть метод drop_duplicates(), он удаляет все не уникальные строки для одной колонки или даже для комбинации. По желанию можно задать ему параметры и оставить только первое пявление из неуникальных значений или последнее.

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

    df = pd.DataFrame({
        'urls':['123.ru','lalala.ru','lalala.ru/qwe','lalala.ru/12rwse','bebe.ru'],
        'other data':[1,1,1,1,1]
    })
    # Первый способ 
    new_df = df.loc[df['urls'].str.split('/').str[0].drop_duplicates().index]
    print(new_df)
    # Второй способ
    new_df = df[~df['urls'].str.contains('/')].drop_duplicates()
    print(new_df)


    Первый способ более общий мы разделяем по слешу берем первый элемент (домен), и избавляемся от всех повторяющихся строк. (Более надежно)

    Второй способ совсем слабая проверка мы выбираем те строки которые не содержат слеша, предполагая что первый раз (домен) встречается без слеша. (НЕ надежно)

    Если же оба примера не покрывают всех случаев (ЧТО скорее всего) то по этому же принципу нужно писать более сложное условие, и все.

    Ну вот автор уже и вопрос подредактировал что делает второй способ решения не рабочим да и первый надо менять тоже.
    df = pd.DataFrame({
        'urls':['http://123.ru/','http://lalala.ru','http://lalala.ru/qwe',
                'http://lalala.ru/12rwse','http://bebe.ru'],
        'other data':[1,1,1,1,1]
    })
    new_df = df.loc[df['urls'].str.split('//').str[1].str.split('/').str[0].drop_duplicates().index]
    print(new_df)
    Ответ написан
    Комментировать
  • Какие библиотеки для добавления данных в гугл таблицы вы знаете?

    Maksim_64
    @Maksim_64
    Data Analyst
    pandas, гуглите pandas dataframe to google sheets. Открывайте туториалы и вперед. Для уточнения pandas + gspread + gspread-dataframe, полный setup ну например вот этой статье есть. https://codesolid.com/google-sheets-in-python-and-...
    Ответ написан
    2 комментария
  • Как доработать код в matplotlib для рисования фигур над свечным графиком?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну задача ваша довольно простая нужно добавить scatter plot и нарисовать его маркерами для low и high и проверять event я так понял 0 продавать 1 покупать . В общем кода то тут всего ничего вот.
    plt.scatter(up[up.event == 0].index , up[up.event == 0].low, marker='^',color='green')
    plt.scatter(up[up.event == 1].index, up[up.event == 1].high, marker='v',color='red')
    
    plt.scatter(down[down.event == 0].index, down[down.event == 0].low, marker='^',color='green')
    plt.scatter(down[down.event == 1].index, down[down.event == 1].high, marker='v',color='red')


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

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну во первых append метод запрещен и будет удален, так что его не используем. Если в двух словах то преобразовать во фрейм и конкатенировать, ну а если не в двух то вот.
    Сначала разберем как добавить новую строку. Используем метод concat для этого. Откроете документацию посмотрите все довольно просто. В вашим случае немножечко сложнее потому что ваш словарь простой
    {key1: value, key2:value}, что бы создать фрейм из словаря он должен быть такого вида some_dict = {'key1':[value],'key2':[value]}. Тогда мы можем просто создать фрейм командой pd.DataFrame(some_dict). Ничего особо переделывать не придется, просто использовать дополнительный метод from_records.
    shapka = {'Кадастровый № ОКС':[],'Вид ОКС':[],'Назначение':[],'Адрес ОКС':[],'Площадь':[],'Вид права':[],'ФИО':[],'Номер рег. записи':[]}
    df = pd.DataFrame(shapka)
    
    slovar = {'Кадастровый № ОКС': 'тут текст', 'Вид ОКС': 'тут текст', 'Назначение': 'тут текст', 'Адрес ОКС': 'тут текст', 'Площадь': 'тут текст', 'Вид права': 'тут текст', 'ФИО': 'тут текст', 'Номер рег. записи': 'тут текст'}
    new_df = pd.concat([df, pd.DataFrame.from_records([slovar])] ,ignore_index=True)


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

    И еще на что хотел бы обратить внимание это метод from_records.
    d1 = {'A':1,'B':2}
    d2 = {'A':3,'B':4}
    df = pd.DataFrame.from_records([d1,d2])
    print(df)

    То есть нам доступен список словарей, для создания фрейма.
    Ответ написан
    Комментировать
  • Почему график отображается без вызова метода plt.show()?

    Maksim_64
    @Maksim_64
    Data Analyst
    График как раз таки должен отображаться потому что вы используете Jupyter (IPython). В Jupyter нет необходимости вообще в команде plt.show(), ее просто нет. plt.plot уже рисует график внутри нотебука, любые дальнейшие команды просто обновляют ваш plot. И все.

    Можно поменять ему mode. plt.ioff() и тогда через plt.show() (Может и проблемы какие будут настраивать придется) вот нужная вам ссылка на раздел документации. https://matplotlib.org/stable/users/explain/intera...

    Главный аргумент, здесь что по умолчанию plt.show() (ничего не делает) в notebooke.
    Ответ написан
    Комментировать
  • Как увеличить точность предсказаний?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну информации вы даете мало, а сделать для увеличения точности можно много всего.
    1. Трансформации, кейс ваш простой, все входные данные числовые. (Нормализация, Стандартизация), как делать смотрите https://scikit-learn.org/stable/modules/preprocess... там хорошие примеры как правильно применять StandardScaller min_max_scalar в общем приведение ваших входных данных к единой шкале.

    2. Увеличение сложности модели здесь мы говорим о bias vs variance компромисс Мы имеем простую модель или сложную модель. Например поведение простой модели слабая точность на тренировочном сете и еще более слабая точность на тестовом сете, такое поведение называется underfitting или говорят еще high bias. В свою очередь high variance или overfitting это высокие показатели на тренировочном сете и значительно более низкие на тестовом сете. Что делать читаем и изучаем https://scikit-learn.org/stable/modules/generated/... это трансформатор и затем https://scikit-learn.org/stable/auto_examples/mode... это кривая валидации в интернете полно примеров как применять. Через них находится оптимальная сложность модели.

    3. Тюнинг гиперпарматров https://scikit-learn.org/stable/modules/grid_searc... это как осуществить правильный подбор параметров эстиматора (когда уже сделаны нужные трансформации и выбрана модель).

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

    Начните делать появятся более конкретные вопросы и будут более конкретные ответы.
    Ответ написан
    2 комментария
  • Как использовать оператор else в циклах Python?

    Maksim_64
    @Maksim_64
    Data Analyst
    В первом случае else принадлежит к if flag is True: к вот этому условию тут все просто думаю комментарии излишне.

    Во втором случае else проверяется условие n != 0: Если оно истинно то выполняется то что в теле цикла, ну а если ложно то выполнится else.
    Важным нюансом является наличие break в теле цикла. если цикл завершится инструкцией break то else НЕ выполнится. Если же break не случилось а n != 0: перестало быть истинно (или не было изначально истинно) выполнится else.
    Ответ написан
    Комментировать