Помощь в изучении Python. Что дальше?
Учиться по книгам можно бесконечно. Судя по Вашим словам, Вы вполне подготовлены, чтобы начать работу над несложным проектом / задачей.
Изучите какой-нибудь web framework на Python (Django, Flask, . — лично я предпочитаю Django, но он довольно тяжелый как framework, хотя освоить его на начальном уровне нетрудно), и поднимите на нем простое web-приложение для личного использование (ну скажем, календарь, или планировщик задач, или учет личных финансов). Развивать можно бесконечно, и в процессе сможете самые разные задачи порешать. Чтобы не возиться с сервером дома, очень рекомендую сервис
У них есть базовые бесплатные аккаунты, Вам дадут тестовый адрес, там можно поднять веб-приложение. У них на сайте все расписано в деталях, как все настроить — плюс на сети про то как поднять у них приложение много ресурсов есть.
Ну и еще несколько советов:
1. Ползуйтесь хорошим IDE (я использую PyCharm Pro, но в принципе и бесплатный PyCharm community edition прекрасно подойдет). Там можно настроить Python консоль, так что интерактивность не пострадает.
2. Если возьметесь за что-либо, что можно назвать проектом, пользуйтесь системой контроля версий. Это не так страшно как кажется. Я бы советовал Git. Можно из командной строки (для изучения предпочтительна, лично я предпочитаю и для работы), либо UI клиент (я пользуюсь SourceTree). Изучить Git на начальном этапе можно за полдня. Вот хорошая книжка:
достаточно первые пару глав прочесть для начала
3. Храните код в каком-нибудь распределенном репозитории (Github, Bitbucket). Если готовы его открыть для всех, то я бы советовал Github, если нет — BitBucket позволяет создавать бесплатно закрытые репозитории.
4. При разработке в Python, пользуйтесь virtualenv. Это нужно для того, чтобы не замусоривать ваш основной дистрибутив Python установленными сторонними модулями и библиотеками.
5. Это вопрос личного вкуса и удобства, но лично мне в работе сильно помогают системы project management. Я пользуюсь Blossom.io, но он платный. Из бесплатных, могу порекомендовать Trello.
Все эти вещи могут показаться тягомотными, но это нужно пройти лишь один раз. После этого у Вас будет настроенное рабочее пространство для профессиональной работы. Это сделает Вам рабочий процесс намного удобнее, и знакомство с этим будет плюсом, если потом захотите работу искать в Python.
Собственно по Python, очень рекомендую вот это:
куча реально полезной информации. По всем конкретным вопросам нет ничего лучше StackOverflow.
Ну и уже когда практического опыта на реальном проекте поднаберетесь, вот тогда делайте upgrade, читайте еще книжки, код других проектов, участвуйте в других open source проектах, и т.д. В итоге гораздо быстрее все освоите, чем если прямолинейным чтением книг / прохождением курсов будете заниматься.
Python-разработчик: что делать, когда вы изучили основы
Знакомство с Python и машинным обучением у большинства начинающих разработчиков проходит по схожему сценарию. Освоив базовые концепции, обычно приступают к новым библиотекам:
- Numpy — для математических вычислений и работы с матрицами;
- Pandas — для работы с табличными данными (их предварительная обработка, действия с пропусками и выбросами, фильтрация, объединение и сортировка);
- Matplotlib — для визуализации;
- Scikit-learn — для построения первых линейных и логистических регрессий, деревьев решений, разделения данных на обучающую и тестовую выборку.
Затем у разработчика возникает вопрос: что ещё нужно изучить, чтобы развить навыки, повысить качество своих проектов и стать более ценным специалистом? Неплохие варианты — набирающие популярность библиотеки Keras и PyTorch. Разберёмся, насколько они востребованы и для чего нужны.
Коротко о главном
Keras — библиотека с открытым исходным кодом, написанная на языке Python. Её поддерживает корпорация Google. Главное предназначение Keras — работа с нейронными сетями. Она относится к верхнеуровневым библиотекам, так что позволяет создавать нейронные сети с помощью простых команд. При этом пользователь сам выбирает, на каком бэкенде производить расчёты: Deeplearning4j, MXNet, Microsoft Cognitive Toolkit (CNTK), Theano или TensorFlow.
У библиотеки есть готовая реализация известных архитектур нейросетей: VGG16, VGG19, Xception, NASNet, MobileNet, MobileNetV2, InceptionV3, InceptionResNetV2. Также в Keras реализовано большинство модулей нейронной сети:
- оптимизаторы;
- слои;
- функции активации слоёв;
- функции затрат;
- схемы инициализации и модели регуляризации.
PyTorch — фреймворк, распространяемый по лицензии BSD. Создан на базе решения Torch специально для языка Python. Его поддерживает корпорация Facebook. При помощи PyTorch можно решать широкий спектр задач машинного обучения (в том числе глубокого), нейросетей, обработки естественного языка. Кроме того, фреймворк даёт возможность создавать собственные слои, использовать функции активации слоёв и все остальные модули нейронной сети с помощью классов и функций Python.
Keras: преимущества
Keras относительно легко освоить новичкам. Так, достаточно всего нескольких строк кода, чтобы создать нейросеть.
Возможна интеграция с мобильными платформами, такими как TensorFlow for Mobile и TensorFlow Lite.
Решения, созданные в Keras, можно экспортировать для других платформ, используя JSON и H5-файлы.
Keras позволяет работать с различными бэкендами — выбирать можно в зависимости от потребностей проекта. Кроме того, разработчик может проводить обучение и тестирование на разных бэкендах для дополнительной валидации качества модели.
Keras: недостатки
- Сложности с отладкой ошибок, возникших на стороне бэкенда. Keras создаёт много абстракций поверх тех объектов, которые есть в бэкенде. Поэтому поиск конкретной строчки, которая привела к ошибке, может занять время.
- Сложность кастомизации решений из-за модульности и высокоуровневости.
PyTorch: преимущества
- Гибкость при разработке решений благодаря возможности писать собственные функции и доступу к математическому аппарату.
- PyTorch поддерживает интерактивную отладку. Причину ошибки найти несложно — нужно напрямую обратиться к исходному коду библиотеки.
- У PyTorch прекрасная документация с подробным описанием каждой функции и примерами.
- Обширное комьюнити разработчиков, публикующих разборы популярных проблем на форумах (типа StackOverflow) и результаты работы на GitHub.
- Простота адаптации проектов, в которых используется NumPy. Нужно добавить буквально несколько строчек кода.
- Поддержка параллелизма данных.
PyTorch: недостатки
- Отсутствие «родных» инструментов для мониторинга и визуализации полученных результатов. Необходимо воспользоваться сторонними библиотеками.
- Сложнее разрабатывать кросс-платформенные решения, необходима интеграция дополнительных библиотек.
Примеры работы с Keras и PyTorch
Пример 1. Создаём простую нейронную сеть в Keras. Для этого хватит нескольких строк кода, после чего нужно инициализировать модель, добавить слои и указать функции активации. Вот и всё.
Пример 2. Создаём аналогичную сеть при помощи PyTorch. Это потребует немного больше времени и навыков, чем в предыдущем случае. Нужно понимать, как работают классы в Python, знать основы ООП и т. д. Но зато PyTorch предоставляет больше возможностей для гибкой настройки сети.
Пример 3. Сравниваем работу с оптимизаторами в Keras и PyTorch
Сначала подключим оптимизатор Adam с функцией потерь «бинарная кросс-энтропия» и метрикой качества «точность» с помощью Keras:
Теперь подключим оптимизатор SGD в PyTorch:
В данном случае нет особых различий по сложности работы с оптимизатором между Keras и PyTorch.
Так что выбрать — PyTorch или Keras?
Необходимо понимать, что и PyTorch, и Keras — прекрасные инструменты, хорошо справляющиеся со своими задачами. Но разработчик, приступая к своему проекту, должен помнить о балансе между затраченными усилиями и эффектом от них.
Если речь идёт о прототипе или несложном решении — лучше остановиться на Keras. Если же необходимо кастомизированное решение, требующее отступлений от стандартных алгоритмов решения задачи, — выбираем PyTorch.
Хотите субъективный совет от автора статьи? Если вы прямо сейчас выбираете, какую библиотеку изучить, — присмотритесь к PyTorch. Как правило, бизнес-задачи с реальными данными сложно выполнить с помощью стандартных методов. Благодаря своей гибкости PyTorch справится с большинством задач, которые вам придётся решать сейчас и в будущем.
Изучить в подробностях другие инструменты data science и овладеть всеми необходимым навыками для дата-сайентиста вы можете на факультете искусственного интеллекта в GeekUniversity.
Python конспективно за 15 минут
Итак, вы хотите выучить язык программирования Python, но не может найти краткий и в то же полнофункциональный учебник. С помощью этой статьи мы попытаемся научить вас программировать на Python в течении 10 минут. Это, вероятно, не столько учебник, сколько нечто среднее между обзором основных возможностей и шпаргалкой, так что мы будем просто показывать вам некоторые основные понятия, чтобы вы могли начать программировать на Python сразу после прочтения статьи. Представленные здесь коды рекомендуется скопировать в редактор IDLE Python и немедленно проверять по ходу пьесы.
Очевидно, что если вы действительно хотите выучить язык, вам нужно иметь некоторый опыт разработки на этом языке. Мы предполагаем, что вы уже знакомы с основами программированием и, следовательно, будем пропускать большую часть не относящегося напрямую к Python материала. Важные ключевые слова будут выделены, так что вы можете легко найти их. Кроме того, обратите внимание, что из-за краткости статьи, некоторые вещи, которые будут вводиться непосредственно в коде, будут только кратко прокомментированы.
Свойства языка
Python является строго типизированным языком (т.е. обладает типобезопасностью), но, в тоже время, и динамически, неявно типизированным (т.е. вы не должны объявлять переменные). Кроме того, Python чувствителен к регистру (то есть var и VAR — две разные переменные) и объектно-ориентирован (т.е. всё в Python — объект: числа, словари, пользовательские и встроенные классы).
Помощь в Python всегда доступен прямо в интерпретаторе. Если вы хотите знать, как работает какой-либо объект, все, что вам нужно сделать, это выполнить help( ) ! Также полезна команда dir() , которая показывает все методы объекта, а <object_name>.__ doc__ , показывает строку документации для объекта:
Ключевые слова Python
Ключевое слово Python — это уникальный программный термин, предназначенный для выполнения какого-либо действия. В Python насчитывается до 33 таких ключевых слов, каждое из которых служит своей цели. Вместе они создают словарный запас языка Python. Словарный запас Эллочки-людоедочки из «12 стульев» Ильфа и Петрова больше!
Они представляют синтаксис и структуру программы Python. Так как все они зарезервированы, вы не можете использовать их имена для определения переменных, классов или функций.
Все ключевые слова в Python чувствительны к регистру. Таким образом, вы должны быть осторожны при использовании их в своем коде. Мы только что сделали снимок возможных ключевых слов Python. Попробуйте в консоли Python набрать следующий код:
Всего 33 слова надо запомнить. Вот здесь о них поробнее:
- False — Ложь
- None — Пусто
- True — Истина
- and — И
- as — менеджер контекста
- assert — возбуждает исключение при ложном значении условия
- break — прервать
- class — пользовательский тип данных, включающий атрибуты и методы манипулирования ими
- continue — продолжить
- def — определение функции
- del — удаление объекта
- elif — элемент конструкции выбора
- else — элемент конструкции выбора
- except — элемент конструкции исключений
- finally — элемент конструкции исключений
- for — цикл с известным количеством повторений
- from — импорт функций из пакета
- global — описание глобальной переменной внутри функии
- if — элемент конструкции выбора
- import — импорт пакета
- in — включение
- is — принадлежность
- lambda — описание лямбда-фунции
- nonlocal —
- not — логическое отрицание НЕТ
- or — логическое ИЛИ
- pass — пусто, заглушка
- raise — элемент конструкции исключений
- return — возврат в вызывающую функцию
- try — элемент конструкции исключений
- with — менеджер контекста
- while — цикл с неизвестным количеством повторений
- yield — элемент конструкции исключений
Синтаксис
Python не имеет обязательных символов завершения оператора, а границы блоков определяются отступами. Отступ начинает новый блок, отсутсвие отступа его заканчивает. Выражения, которые ожидают после себя новый отступ заканчиваются символом двоеточия (:). Однострочные комментарии начинаются с символа фунта (#), для многострочных комментариев используются строковые литералы, заключенные в тройные апострофы или тройные кавычки. Значения присваиваются (на самом деле, объекты связанные с именами значений) с помощью знака равенства («=»), а проверка равенства осуществляется с помощью двух знаков равенства («==»). Вы можете увеличивать/уменьшать значения при помощи операторов += и -= соответственно на величину, указанную справа от оператора. Это работает для многих типов данных, в т.ч. и строк. Вы можете также использовать несколько переменных в одной строке. Например:
Типы данных
В Python доступны следующие структуры данных: списки ( lists ), кортежи ( tuples ) и словари ( dictionaries ). Наборы доступны в библиотеке sets (но, она встроенна только в Python 2.5 и более поздние версии). Списки похожи на одномерные массивы (но вы также можете создавать списки, состоящие из других списков и получить многомерный массив), словари — ассоциативные массивы (так называемые хэш-таблицы, индексом в которых может быть любой тип данных), а кортежи представляют собой неизменяемые одномерные массивы (в Python «массивы» могут быть любого типа, так что вы можете смешивать например, целые числа, строки и т.д. в списках/словарях/кортежах). Индексом первого элемента в массивах всех типов является 0, а последний элемент можно получить по индексу -1. Переменные могут указывать на функции. Использование описанных типов данных выглядит следующим образом:
Вы можете работать только с частью элементов массива используя двоеточие (:). В таком случае, индекс до двоеточия указывает на первый элемент используемой части массива, а индекс после двоеточия — на элемент идущий ПОСЛЕ последнего элемента используемой части массива (он в подмассив не включается). Если первый индекс не указан — используется первый элемент массива, если не указан второй — последним элементом будет последний элемент массива. рассчитывать Отрицательные значения определяют положение элемента с конца. Пример:
Строки
Cтроки в Python ограничиваются как одиночными так и двойными кавычки, и вы можете использовать одинарные кавычки внутри строки, которая ограничена двойными кавычками и наоборот (т.е. "Он сказал ‘привет’." и на экран будет выедено "Он сказал ‘привет’!" ). Многострочные строки ограничиваются в тремя двойными ( """ ) или тремя одиночными ( »’ ) кавычками. Python поддерживает Unicode из коробки, используя вот такой синтаксис: u"Это строка Unicode" . Знак процента «%» между строкой и кортежем, заменяет в строке символы « %s » на элемент кортежа. Словари позволяют вставлять в строку элемент под заданным индексом. Для этого надо использовать в строке конструкцию «%(индекс)s». В этом случае вместо «%(индекс)s» будет подставлено значение словаря под заданным индексом, например, так:
Операторы управления потоком исполнения
В Python операторы управления потоком данных представленны операторам if, for и while. В Python нет оператора switch; вместо этого следует использовать оператор if. Использование для перечисления через членов списка. Чтобы получить список цифр до числа — используйте функцию range( ). Вот пример использования операторов:
Функции
Для объявления функции используется ключевое слово def. Аргументы функции задаются в скобках после названия функции. Необязательные аргументы задаются в объявлении функции после обязательных аргументов путем присваивается необязательным аргументам значения по умолчанию. Функции могут возвращать кортежи (и с помощью кортежа вы можете эффективно возвращать из функции несколько значений). Лямбда-функции — это специальные функции, которые состоят из одного оператора. Параметры передаются по ссылке, но значения неизменяемых типов (кортежей, строк и т.д.) всё равно не может быть изменены внутри функции. Например:
Классы
Python поддерживает ограниченную форму множественного наследования с использованием классов. Внутренние переменные и методы могут быть объявлены (по соглашению, это не является требованием самого языка) путем добавления по меньшей мере, двух начальных символов подчеркивания и не более чем одного завершающего (например, «__spam»). Мы можем также присвоить значение переменной класса извне. Это видно в следующем примере:
Исключения
Исключения в Python обрабатываются с помощью блоков try-except [exceptionname]:
Импорт
Внешние библиотеки загружаются с помощью ключевого слова import [libname]. Вы можете также использовать from [libname] import [funcname] для отдельных функций. Вот пример:
Чтение/запись файлов
Python имеет широкий спектр встроенных библиотек. Например, вот как выполняется сериализация (преобразование структуры данных в строки с помощью библиотеки pickle) с использованием записи/чтения файлов:
Особенности
- Условия могут комбинироваться. Например, 1 < а < 3 проверяет, что a одновременно меньше 3 и больше 1.
- Вы можете использовать del для удаления переменных или элементов в массивах.
- Python предлагает большие возможности для работы со списками. Вы можете использовать операторы объявления структуры списка. Оператор for позволяет задавать элементы списка в определенной последовательности, а if — позволяет выбирать элементы по условию, например, так:
- Глобальные переменные объявляются вне функций и могут быть прочитаны без каких-либо специальных объявлений, но если вы хотите, изменить значение глобальной переменной из функции, нужно объявить их в начале функции используя ключевое слово global, в противном случае Python будет считать эту переменную новой локальной переменной. Например:
Заключение
Эта статья не претендует на исчерпывающий перечень всех (или даже основных) возможностей языка Python. Python имеет широкий спектр библиотек и огромный набор функциональных возможностей, которые вы изучите сами если вы захотите и в дальнейшем изучать этот язык программирования. Я надеюсь, что я сделал ваш переход к Python проще и вы уже сможете решить большинство задач Практикума 1
Опубликовано Вадим В. Костерин
ст. преп. кафедры ЦЭиИТ. Автор более 130 научных и учебно-методических работ. Лауреат ВДНХ (серебряная медаль). Посмотреть больше записей