#ml Метрики моделей. Recall
отношение позитивных пресказаний TP к общему количеству таргет класса в датасете. Recall отвечает на вопрос: может ли модель найти все экземпляры искомого класса.
плюсы:
- хорошо работает в дизбалансном датасете, т.к. фокусируется на способности модели находить все вхождения целевого класса
- полезен когда цена ложного негативного FN высока, когда вы хотите найти все объекты таргет класса
минусы обратны precision:
- не берет во внимание ложные позитивные FP
recall фокусируется на том чтобы модель нашла все вхождения целевого класса, не обращая внимания на то сколько классов будет помечено как целевой неправильно.
отношение позитивных пресказаний TP к общему количеству таргет класса в датасете. Recall отвечает на вопрос: может ли модель найти все экземпляры искомого класса.
плюсы:
- хорошо работает в дизбалансном датасете, т.к. фокусируется на способности модели находить все вхождения целевого класса
- полезен когда цена ложного негативного FN высока, когда вы хотите найти все объекты таргет класса
минусы обратны precision:
- не берет во внимание ложные позитивные FP
recall фокусируется на том чтобы модель нашла все вхождения целевого класса, не обращая внимания на то сколько классов будет помечено как целевой неправильно.
#ml Метрики моделей. F1 score.
F1-мера - это метрика, которая комбинирует точность (precision) и полноту (recall) в единственное число для оценки качества классификационных моделей. Она широко используется в задачах, где необходимо найти баланс между точностью и полнотой предсказаний модели.
Чем выше значение F1-меры, тем лучше модель справляется с балансированием точности и полноты в своих предсказаниях.
F1-мера - это метрика, которая комбинирует точность (precision) и полноту (recall) в единственное число для оценки качества классификационных моделей. Она широко используется в задачах, где необходимо найти баланс между точностью и полнотой предсказаний модели.
Чем выше значение F1-меры, тем лучше модель справляется с балансированием точности и полноты в своих предсказаниях.
#ml Краткая история нейросетей. Part I.
В 1943 году в своей статье «Логическое исчисление идей, относящихся к нервной активности» Уоррен Мак-Каллок и Уолтер Питтс предложили понятие искусственной нейронной сети.
В 1957 году в Корнеллской лаборатории аэронавтики было успешно завершено моделирование работы перцептрона на компьютере IBM 704, а два года спустя, 23 июня 1960 года, в Корнеллском университете был продемонстрирован первый нейрокомпьютер — «Марк-1», который был способен распознавать некоторые буквы английского алфавита.
Перцептрон обучали с помощью метода коррекции ошибок.
В свое время из-за нехватки вычислительных мощностей сдал позиции.
В 1943 году в своей статье «Логическое исчисление идей, относящихся к нервной активности» Уоррен Мак-Каллок и Уолтер Питтс предложили понятие искусственной нейронной сети.
В 1957 году в Корнеллской лаборатории аэронавтики было успешно завершено моделирование работы перцептрона на компьютере IBM 704, а два года спустя, 23 июня 1960 года, в Корнеллском университете был продемонстрирован первый нейрокомпьютер — «Марк-1», который был способен распознавать некоторые буквы английского алфавита.
Перцептрон обучали с помощью метода коррекции ошибок.
В свое время из-за нехватки вычислительных мощностей сдал позиции.
#ml Краткая история нейросетей. Part II.
Уже ближе к концу 20-го века исследователи добились большого прогресса. Был разработан "Метод обратного распространения ошибки".
Нейросеть выдает предположение о конкретной цифре на изображении, а затем сравнивает это предположение с реальным значением и вычисляет разницу между ними (ошибку). Затем ошибка используется для корректировки весов нейронов, которые влияют на выходные данные нейросети. Процесс повторяется много раз, пока сеть не начинает распознавать цифры с максимально высокой точностью.
В дополнение к Методу исследователи придумали нелинейные функции активации. Они позволяют сети моделировать сложные взаимосвязи между входами и выходами.
Уже ближе к концу 20-го века исследователи добились большого прогресса. Был разработан "Метод обратного распространения ошибки".
Нейросеть выдает предположение о конкретной цифре на изображении, а затем сравнивает это предположение с реальным значением и вычисляет разницу между ними (ошибку). Затем ошибка используется для корректировки весов нейронов, которые влияют на выходные данные нейросети. Процесс повторяется много раз, пока сеть не начинает распознавать цифры с максимально высокой точностью.
В дополнение к Методу исследователи придумали нелинейные функции активации. Они позволяют сети моделировать сложные взаимосвязи между входами и выходами.
This media is not supported in your browser
VIEW IN TELEGRAM
#ml Краткая история нейросетей. Part III.
В "нулевых" появились мощные графические процессоры и стали доступны большие объёмы данных, что привело к разработке алгоритмов Deep Learning. Результаты исследований начали демонстрировать высокие результаты в обучении и составлении прогнозов на основе больших объёмов данных.
Одной из самых прорывных историй является создание модели GPT-3 (Generative Pretrained Transformer 3) — языковой модели, разработанной OpenAI (они и создали ChatGPT). Модель была представлена в 2020 году и хорошо нашумела. Её натренировали на огромном количестве текстовых данных и научили выполнять разные языковые задачи.
В конце ноября 2022-го года в свет выходит ChatGPT и спустя 2 месяца пробивает отметку в 100 миллионов пользователей, получив статус самого быстрорастущего онлайн-сервиса за всю историю.
В "нулевых" появились мощные графические процессоры и стали доступны большие объёмы данных, что привело к разработке алгоритмов Deep Learning. Результаты исследований начали демонстрировать высокие результаты в обучении и составлении прогнозов на основе больших объёмов данных.
Одной из самых прорывных историй является создание модели GPT-3 (Generative Pretrained Transformer 3) — языковой модели, разработанной OpenAI (они и создали ChatGPT). Модель была представлена в 2020 году и хорошо нашумела. Её натренировали на огромном количестве текстовых данных и научили выполнять разные языковые задачи.
В конце ноября 2022-го года в свет выходит ChatGPT и спустя 2 месяца пробивает отметку в 100 миллионов пользователей, получив статус самого быстрорастущего онлайн-сервиса за всю историю.
#ml Активационные функции
Сверточные нейронные сети СНС имеют архитектуру слоев, каждый слой с помощью суммы весов проецируемых фильтром сворачивает картинку.
То есть, вся нейросеть может быть представлена
линейной функцией
y = w * x
активационные функции это прослойки между линейными слоями, помогающие выстроить более сложное поведение для для обучения нейросети
1. Relu - срезает все отрицательные значения в ноль. Этот свойство позволяет нейронной сети отсеивать слои, которые дают отрицательные значения и не имеют смысла в контексте нашей модели.
2. Сигмоида
Хороша для бинарной (да/нет) классификации, потому что она принимает любое действительное число в качестве входного и преобразует его в число между 0 и 1. По этой причине она часто используется в выходных слоях (подробнее об этом смотрите в конце).
3. Softmax
принимает список произвольных чисел и преобразует их в список вероятностей пропорциональных этим числам. То есть:
Функция принимает вектор (список) входных данных — а не одно число. Это отличается от всех предыдущих, она работает сразу с несколькими нейронами (обычно со всем слоем).
4. Tanh
Выходные значения tanh находятся в диапазоне от -1 до 1, что делает её центрированной относительно нуля. Это выгодно, поскольку это может помочь процессу обучения, так как данные, проходящие через сеть, в среднем будут поддерживать среднее значение близкое к 0, что в свою очередь помогает оптимизации методом градиентного спуска.
5. Binary Step Function (ступенчатая)
Бинарная ступенчатая функция — один из самых простых типов функций активации, используемых в нейронных сетях. Это пороговая функция активации, которая активируется или нет в зависимости от того, находится ли входное значение x выше или ниже определенного порога, что аналогично переключателю вкл/выкл. Обычно она используется в перцептронах и задачах бинарной классификации, где ожидается, что выход будет либо 0, либо 1, например, при решении, является ли электронное письмо спамом или не спамом.
Сверточные нейронные сети СНС имеют архитектуру слоев, каждый слой с помощью суммы весов проецируемых фильтром сворачивает картинку.
То есть, вся нейросеть может быть представлена
линейной функцией
y = w * x
активационные функции это прослойки между линейными слоями, помогающие выстроить более сложное поведение для для обучения нейросети
1. Relu - срезает все отрицательные значения в ноль. Этот свойство позволяет нейронной сети отсеивать слои, которые дают отрицательные значения и не имеют смысла в контексте нашей модели.
if input > 0:
return input
else:
return 0
2. Сигмоида
f(x) = 1/(1+e^-x)
Хороша для бинарной (да/нет) классификации, потому что она принимает любое действительное число в качестве входного и преобразует его в число между 0 и 1. По этой причине она часто используется в выходных слоях (подробнее об этом смотрите в конце).
3. Softmax
softmax([1, 2, 3]) = [0.09003, 0.24473, 0.66524]
принимает список произвольных чисел и преобразует их в список вероятностей пропорциональных этим числам. То есть:
Функция принимает вектор (список) входных данных — а не одно число. Это отличается от всех предыдущих, она работает сразу с несколькими нейронами (обычно со всем слоем).
4. Tanh
tanh(x) = 2 * sigmoid(2x)-1
Выходные значения tanh находятся в диапазоне от -1 до 1, что делает её центрированной относительно нуля. Это выгодно, поскольку это может помочь процессу обучения, так как данные, проходящие через сеть, в среднем будут поддерживать среднее значение близкое к 0, что в свою очередь помогает оптимизации методом градиентного спуска.
5. Binary Step Function (ступенчатая)
Бинарная ступенчатая функция — один из самых простых типов функций активации, используемых в нейронных сетях. Это пороговая функция активации, которая активируется или нет в зависимости от того, находится ли входное значение x выше или ниже определенного порога, что аналогично переключателю вкл/выкл. Обычно она используется в перцептронах и задачах бинарной классификации, где ожидается, что выход будет либо 0, либо 1, например, при решении, является ли электронное письмо спамом или не спамом.
#ml Переобучение и недообучение (дисперсия и смещение)
Дисперсия(переобучение) – это способность модели реагировать на незначительные колебания в тренировочных данных. Если модель слишком чувствительна и пытается подстроиться под каждый шум или аномалию в данных, это приводит к высокой дисперсии. Такие модели хорошо работают на тренировочных данных, но плохо – на новых, неизвестных данных.
Смещение(недообучение) – это своего рода предубеждение модели, когда она не учитывает все особенности данных.
"С такой проблемой смещения сталкиваются достаточно часто. Один из проектов, над которым мы работали, касался анализа пользовательского поведения на сайте. Мы использовали данные, собранные в определенном регионе, но когда компания масштабировалась на всю страну, модель была неэффективна. Причина? Смещение – модель была обучена на слишком узком наборе данных."
Методы уменьшения смещения и дисперсии
Регуляризация - это техника, используемая для предотвращения переобучения модели на обучающих данных, которое обычно происходит за счет увеличения дисперсии. Смысл регуляризации заключается в введении дополнительных ограничений или штрафов на величину и/или сложность модели.
Основная цель регуляризации - обеспечить более гладкую и устойчивую модель, которая лучше обобщает закономерности и уменьшает риск переобучения, сохраняя при этом адекватный уровень смещения. Существует два типа регуляризации:
- L1 (Lasso) регуляризация
L1 регуляризация добавляет к функции потерь модели штраф, равный сумме абсолютных значений коэффициентов (весов) модели. Этот подход направлен на минимизацию не только ошибки прогнозирования, но и сложности самой модели.
- L2 (Ridge) регуляризация
В L2 регуляризации к функции потерь добавляется штраф, пропорциональный квадрату величины весов модели. Это заставляет модель не только минимизировать ошибку на обучающих данных, но и сохранять веса как можно меньшими.
В отличие от L1 регуляризации, L2 не склонна обнулять веса. Вместо этого она уменьшает веса постепенно, делая модель более "гладкой" и менее подверженной влиянию шума в данных.
L2 регуляризация полезна в ситуациях, когда количество признаков в данных велико или когда они сильно коррелированы. Она помогает справляться с мультиколлинеарностью, сохраняя все признаки, но уменьшая их влияние.
- Бэггинг
Бэггинг, или Bootstrap Aggregating, является ансамблевым методом, предназначенным для улучшения стабильности и точности моделей, снижения вариативности и избежания переобучения. Он основан на принципе объединения нескольких простых моделей для создания одной устойчивой и надежной модели.
- Бустинг
это ансамблевая стратегия, предназначенная для создания сильного классификатора из последовательности слабых классификаторов.Метод фокусируется на постепенном улучшении прогнозов путем исправления ошибок предыдущих моделей в ансамбле.
Существует несколько реализаций бустинга, в ихчисле: XGBoost, LightGBM, CatBoost.
В отличие от бэггинга, где модели обучаются независимо, бустинг обучает каждую новую модель, чтобы исправить ошибки, сделанные предыдущими. Это достигается путем увеличения весов для неправильно классифицированных примеров.
- Кросс-валидация
Кросс-валидация включает в себя разделение датасета на несколько подмножеств и последовательное обучение модели на этих подмножествах, что позволяет более точно оценить её способность к обобщению на новых данных.
Дисперсия(переобучение) – это способность модели реагировать на незначительные колебания в тренировочных данных. Если модель слишком чувствительна и пытается подстроиться под каждый шум или аномалию в данных, это приводит к высокой дисперсии. Такие модели хорошо работают на тренировочных данных, но плохо – на новых, неизвестных данных.
Смещение(недообучение) – это своего рода предубеждение модели, когда она не учитывает все особенности данных.
"С такой проблемой смещения сталкиваются достаточно часто. Один из проектов, над которым мы работали, касался анализа пользовательского поведения на сайте. Мы использовали данные, собранные в определенном регионе, но когда компания масштабировалась на всю страну, модель была неэффективна. Причина? Смещение – модель была обучена на слишком узком наборе данных."
Методы уменьшения смещения и дисперсии
Регуляризация - это техника, используемая для предотвращения переобучения модели на обучающих данных, которое обычно происходит за счет увеличения дисперсии. Смысл регуляризации заключается в введении дополнительных ограничений или штрафов на величину и/или сложность модели.
Основная цель регуляризации - обеспечить более гладкую и устойчивую модель, которая лучше обобщает закономерности и уменьшает риск переобучения, сохраняя при этом адекватный уровень смещения. Существует два типа регуляризации:
- L1 (Lasso) регуляризация
L1 регуляризация добавляет к функции потерь модели штраф, равный сумме абсолютных значений коэффициентов (весов) модели. Этот подход направлен на минимизацию не только ошибки прогнозирования, но и сложности самой модели.
- L2 (Ridge) регуляризация
В L2 регуляризации к функции потерь добавляется штраф, пропорциональный квадрату величины весов модели. Это заставляет модель не только минимизировать ошибку на обучающих данных, но и сохранять веса как можно меньшими.
В отличие от L1 регуляризации, L2 не склонна обнулять веса. Вместо этого она уменьшает веса постепенно, делая модель более "гладкой" и менее подверженной влиянию шума в данных.
L2 регуляризация полезна в ситуациях, когда количество признаков в данных велико или когда они сильно коррелированы. Она помогает справляться с мультиколлинеарностью, сохраняя все признаки, но уменьшая их влияние.
- Бэггинг
Бэггинг, или Bootstrap Aggregating, является ансамблевым методом, предназначенным для улучшения стабильности и точности моделей, снижения вариативности и избежания переобучения. Он основан на принципе объединения нескольких простых моделей для создания одной устойчивой и надежной модели.
- Бустинг
это ансамблевая стратегия, предназначенная для создания сильного классификатора из последовательности слабых классификаторов.Метод фокусируется на постепенном улучшении прогнозов путем исправления ошибок предыдущих моделей в ансамбле.
Существует несколько реализаций бустинга, в ихчисле: XGBoost, LightGBM, CatBoost.
В отличие от бэггинга, где модели обучаются независимо, бустинг обучает каждую новую модель, чтобы исправить ошибки, сделанные предыдущими. Это достигается путем увеличения весов для неправильно классифицированных примеров.
- Кросс-валидация
Кросс-валидация включает в себя разделение датасета на несколько подмножеств и последовательное обучение модели на этих подмножествах, что позволяет более точно оценить её способность к обобщению на новых данных.
#ml #cv Hello paddleOCR
[[[91.0, 104.0], [163.0, 106.0], [162.0, 125.0], [90.0, 123.0]], ('отец', 0.9746374487876892)],
[[[391.0, 238.0], [502.0, 238.0], [502.0, 255.0], [391.0, 255.0]], ('король', 0.9802486300468445)],
[[[732.0, 373.0], [792.0, 375.0], [791.0, 398.0], [731.0, 396.0]], ('шут', 0.965769350528717)]]]#cv #ml
Как извлечь информацию на основе данных изображения
Эта задача обширно востребована. Распознавание форм, извлечение информации о билетах, извлечение информации об удостоверениях личности и т. д.
На ранних этапах было много методов основанных на сопоставлении шаблонов, однако чтобы менять шаблон нужно много усилий.
Извлечение ключевой информации (KIE) содержит 2 подзадачи:
- SER: распознавание семантического объекта, которое классифицирует каждый обнаруженный текст, например имя и удостоверение личности.
- RE: Извлечение отношений, классифицируйте каждый обнаруженный текст, например разделяя его на вопросы (ключ) и ответы (значение).
Как извлечь информацию на основе данных изображения
Эта задача обширно востребована. Распознавание форм, извлечение информации о билетах, извлечение информации об удостоверениях личности и т. д.
На ранних этапах было много методов основанных на сопоставлении шаблонов, однако чтобы менять шаблон нужно много усилий.
Извлечение ключевой информации (KIE) содержит 2 подзадачи:
- SER: распознавание семантического объекта, которое классифицирует каждый обнаруженный текст, например имя и удостоверение личности.
- RE: Извлечение отношений, классифицируйте каждый обнаруженный текст, например разделяя его на вопросы (ключ) и ответы (значение).
#cv #ml
Основные методы, основанные на глубоком обучении:
- Методы на основе сетки. Chargrid.
- Методы на основе токенов. BERT в нлп. LayoutLM, LayoutLMv2, LayoutXLM, StrucText. Сначала тренируется на больших наборах данных, чтобы дальше для улучшения требовался небольшой объем аннотированных данных.
- Методы на основе GCN: этот тип метода пытается изучить структурную информацию между изображениями и текстом, чтобы решить проблему извлечения информации из открытого набора (шаблоны, которые не были замечены в обучающем наборе), например GCN, SDMGR и другие алгоритмы.
- Сквозной метод: этот тип метода объединяет две существующие задачи: распознавание текста OCR и извлечение информации KIE в единую сеть для совместного обучения и усиливает друг друга в процессе обучения. Такие как Trie и другие алгоритмы.
Основные методы, основанные на глубоком обучении:
- Методы на основе сетки. Chargrid.
- Методы на основе токенов. BERT в нлп. LayoutLM, LayoutLMv2, LayoutXLM, StrucText. Сначала тренируется на больших наборах данных, чтобы дальше для улучшения требовался небольшой объем аннотированных данных.
- Методы на основе GCN: этот тип метода пытается изучить структурную информацию между изображениями и текстом, чтобы решить проблему извлечения информации из открытого набора (шаблоны, которые не были замечены в обучающем наборе), например GCN, SDMGR и другие алгоритмы.
- Сквозной метод: этот тип метода объединяет две существующие задачи: распознавание текста OCR и извлечение информации KIE в единую сеть для совместного обучения и усиливает друг друга в процессе обучения. Такие как Trie и другие алгоритмы.
#django быстрый старт проекта
директория проекта
виртуальное окружение
Создаем приложение
директория проекта
виртуальное окружение
создаем новый репозиторий
Создаем приложение
Далее можно запустить проверить
В консоли будет адрес на локалхост если все сделано правильно увидим стартовую страницу
директория проекта
виртуальное окружение
pip install django
Создаем приложение
django-admin startproject mysite - создаем новое приложение директория проекта
виртуальное окружение
pip install django
создаем новый репозиторий
git init
Создаем приложение
django-admin startproject mysite - создаем новое приложениеДалее можно запустить проверить
python manage.py runserver
В консоли будет адрес на локалхост если все сделано правильно увидим стартовую страницу
cv_konovalov_en.pdf
163.7 KB
#resume Обновил резюме на hh ru и составил новое по образцу старшего специалиста
#教え
Видео 9/22
Существует 4 вида функций
Статическая функция
Статический метод - @staticmethod, обращаемся без
Метод класса (cls) - @classmethod, через cls позволяет обратиться к классу
Метод экземпляра (self)
Множественное наследование
посмотреть линеаризацию объекта можно через Object.mro
поиск атрибута в предках происходит по MRO(method resolution order) алгоритму C3
- линеаризацией класса называется список из самого класса и всех его предков (родителей и прородителей) в котором по порядку слева направо будет производиться поиск метода.
- порядок разрешения методов (MRO) — это способ, с помощью которого составляется линеаризация класса.
- монотонность — это свойство, которое требует соблюдения в линеаризации класса-потомка того же порядка следования классов-прородителей, что и в линеаризации класса-родителя.
- порядок локального старшинства (local precedence ordering)— это свойство, которое требует соблюдения в линеаризации класса-потомка того же порядка следования классов-родителей, что и в его объявлении.
L[C] = [C] + merge(L[C1], L[C2], …, L[CN], [C1, C2, …, CN])
https://habr.com/ru/articles/62203/
Unifying types and classes in Python 2.2 — о разделении объектной модели и модели мета-данных. Здесь же обсуждаются MRO, проблемы множественного наследования и super().
The Python 2.3 Method Resolution Order — алгоритм C3 с примерами. В конце есть реализация функций mro и merge на чистом Питоне для тех, кто лучше воспринимает код чем текст.
A Monotonic Superclass Linearization for Dylan — сравнение некоторых видов линеаризации.
Exceptions
нужны для того чтобы программа не падала
Абстрактный класс - класс шаблон, его экземпляр создать нельзя. Элемент архитектуры, а не физичского приложения. Имеет смысл "это должно быть в потомке и характеристики могут использоваться в разных объектах", но существовать самостоятельно не может
Миксины - классы с доп функционалом, который можно быстно накинуть в создаваемый класс.
Они подобны аддонам в играх или плагинам расширяющим повторяющийся функционал.
Модули
В python все что имеет расширение .py является модулем, видимо этот канал тоже модуль
Существует 2 вида импортов
imort ___
from ___ import ___ as _ (в разы меньше нагружает интерп)
Работа с файлами
JSON
json.dumps - в json
json.loads - из json
load и dump - без сериализации
Видео 9/22
Существует 4 вида функций
Статическая функция
Статический метод - @staticmethod, обращаемся без
Метод класса (cls) - @classmethod, через cls позволяет обратиться к классу
Метод экземпляра (self)
Множественное наследование
посмотреть линеаризацию объекта можно через Object.mro
поиск атрибута в предках происходит по MRO(method resolution order) алгоритму C3
- линеаризацией класса называется список из самого класса и всех его предков (родителей и прородителей) в котором по порядку слева направо будет производиться поиск метода.
- порядок разрешения методов (MRO) — это способ, с помощью которого составляется линеаризация класса.
- монотонность — это свойство, которое требует соблюдения в линеаризации класса-потомка того же порядка следования классов-прородителей, что и в линеаризации класса-родителя.
- порядок локального старшинства (local precedence ordering)— это свойство, которое требует соблюдения в линеаризации класса-потомка того же порядка следования классов-родителей, что и в его объявлении.
L[C] = [C] + merge(L[C1], L[C2], …, L[CN], [C1, C2, …, CN])
https://habr.com/ru/articles/62203/
Unifying types and classes in Python 2.2 — о разделении объектной модели и модели мета-данных. Здесь же обсуждаются MRO, проблемы множественного наследования и super().
The Python 2.3 Method Resolution Order — алгоритм C3 с примерами. В конце есть реализация функций mro и merge на чистом Питоне для тех, кто лучше воспринимает код чем текст.
A Monotonic Superclass Linearization for Dylan — сравнение некоторых видов линеаризации.
Exceptions
нужны для того чтобы программа не падала
Абстрактный класс - класс шаблон, его экземпляр создать нельзя. Элемент архитектуры, а не физичского приложения. Имеет смысл "это должно быть в потомке и характеристики могут использоваться в разных объектах", но существовать самостоятельно не может
Миксины - классы с доп функционалом, который можно быстно накинуть в создаваемый класс.
Они подобны аддонам в играх или плагинам расширяющим повторяющийся функционал.
Модули
В python все что имеет расширение .py является модулем, видимо этот канал тоже модуль
Существует 2 вида импортов
imort ___
from ___ import ___ as _ (в разы меньше нагружает интерп)
Работа с файлами
file = open('text.txt')
file.readline() # читает строку
file.readlines() # создает список из всех строк что есть в файле
file.close() # при работе с open, close обязателен!
# with работает с объектами которые нужно закрыть после работы, удобен с базами данных
with open('text.txt', 'w') as file: # мы можем создавать свои контекстные менеджеры
# "r(чтение),w(запись), x(создать на запись иначе исключение), a(запись в конец), b(двоичный),
# t(текстовый режим + по умолчанию),+(чтение и запись)" - режимы работы
for line in my_file.readlines()
# после with close не нужен JSON
json.dumps - в json
json.loads - из json
load и dump - без сериализации
#hw lesson 9
from functools import reduce
# 1. Дан список строк. Отформатировать все строки в формате ‘{i} - {string}’,
# где i это порядковый номер строки в списке. Использовать генератор списков.
str_list = ['asfgasdags', 'bbbbbbb', 'cccccc', 'ddddddd']
mod_str_list = [f'{i} - {string}' for i, string in enumerate(str_list)]
# 2. Создать lambda функцию, которая принимает на вход неопределенное количество именных аргументов
# и выводит словарь с ключами удвоенной длины. {‘abc’: 5} -> {‘abcabc’: 5}
double_key = lambda *args, **kwargs: {key * 2: value for key, value in kwargs.items()}
# 3. Создать декоратор для функции, которая принимает список чисел.
# Декоратор должен производить предварительную проверку данных - удалять все четные элементы из списка.
def even_face_control(func):
def wrapper(*args, **kwargs):
numbers = args[0]
faced_numbers = [num for num in numbers if not num & 1 == 0] # (҂◡̀_◡́)ᕤ
new_args = [faced_numbers, *args[1::]]
return func(*new_args, **kwargs)
return wrapper
@even_face_control
def num_multiplier(numbers: list[int]) -> int:
result = reduce(lambda acc, el: acc * el, numbers, 1)
return result
# 4. Создать универсальный декоратор,
# который меняет порядок аргументов в функции на противоположный.
def arg_reverse(func):
def wrapper(*args, **kwargs):
if args:
args = args[::-1]
if kwargs:
kwargs = kwargs[::-1]
return func(*args, **kwargs)
return wrapper
@arg_reverse
def foo(numbers: list[int], string: str) -> bool:
print(numbers, string)
return True
#教え
Видео 10/22 Базы данных
- популярные субд
SQLite - мощная встаиваемая рсубд
MySQL - самая популярная и часто используемая рсубд
PostgreSQL - самая провинутая и гибкая рсубд
- у баз данных есть свои типы данных
char(при задавании количества символов, если передано больше остальное добивается пробелами), varchar(недостающие символы не добиваются), int. decimal, datetime etc...
- первичные ключи (primary key или pkey) - когда мы называем столбец первичным ключом это говорит о том что сущности стоящие за ним повторяться не будут
- виды sql команд
1) определение данных DDL Data definition language (создать CREATE. изменить ALTER. удалить DROP)
2) управление данных ВСД Data Control language (GRANT - предоставить доступ, REVOKE - отозвать доступ, SET ROLE - разрешает или запрещает роли для текущего сеанса)
3) управление транзакциями TCL Transaction Control language (BEGIN/COMMIT и ROLLBACK - откат ) Транзация неделимая сущность(с точки зрения изменения на базу данных) состоящая из нескольких минитранзакций, в банке перевод лаве с одного счета на другой это не перекладывание золота с одного места на другое, по сути сначала берется ваш счет и вычитается определенная сумма, и далее прибавляется к счету другого человека. Транзакция засчитывается только если все минитранзакции прошли успешно.
4) Манипулирование данными DML Data manipulation language ( INSERT, DELETE, UPDATE, SELECT)
типы связей в бд
- один ко многим
- один к одному
- многие ко многим
JOIN
left/right inner join - совпадение левой таблицы с правой
left/right outer join - все из левой и совпадения из правой, где не нашел null
full outer join - все из первой,все из второй, где не нашел стыка данных null
cross join - создает все возможные соединения 2х таблиц, декартово произведение, напимер берем сочетание 2х таблиц размеров футболок и цветов и получаем возможный набор ассортимента
Видео 10/22 Базы данных
- популярные субд
SQLite - мощная встаиваемая рсубд
MySQL - самая популярная и часто используемая рсубд
PostgreSQL - самая провинутая и гибкая рсубд
- у баз данных есть свои типы данных
char(при задавании количества символов, если передано больше остальное добивается пробелами), varchar(недостающие символы не добиваются), int. decimal, datetime etc...
- первичные ключи (primary key или pkey) - когда мы называем столбец первичным ключом это говорит о том что сущности стоящие за ним повторяться не будут
- виды sql команд
1) определение данных DDL Data definition language (создать CREATE. изменить ALTER. удалить DROP)
2) управление данных ВСД Data Control language (GRANT - предоставить доступ, REVOKE - отозвать доступ, SET ROLE - разрешает или запрещает роли для текущего сеанса)
3) управление транзакциями TCL Transaction Control language (BEGIN/COMMIT и ROLLBACK - откат ) Транзация неделимая сущность(с точки зрения изменения на базу данных) состоящая из нескольких минитранзакций, в банке перевод лаве с одного счета на другой это не перекладывание золота с одного места на другое, по сути сначала берется ваш счет и вычитается определенная сумма, и далее прибавляется к счету другого человека. Транзакция засчитывается только если все минитранзакции прошли успешно.
4) Манипулирование данными DML Data manipulation language ( INSERT, DELETE, UPDATE, SELECT)
-- CREATE TABLE person (
-- id SERIAL primary key ,
-- firstname varchar,
-- lastname varchar
-- );
-- DROP TABLE person;
-- ALTER TABLE person
-- ADD COLUMN email varchar(255)
-- INSERT INTO person (id,firstname, lastname)
-- VALUES (1, 'Alex', 'Varkalov');
SELECT firstname FROM person WHERE lastname like '%ov';
типы связей в бд
- один ко многим
- один к одному
- многие ко многим
JOIN
left/right inner join - совпадение левой таблицы с правой
left/right outer join - все из левой и совпадения из правой, где не нашел null
full outer join - все из первой,все из второй, где не нашел стыка данных null
cross join - создает все возможные соединения 2х таблиц, декартово произведение, напимер берем сочетание 2х таблиц размеров футболок и цветов и получаем возможный набор ассортимента