Сказ о том, как я от теории к практике переходил – #14-04/24
Всем привет! Время очередной статьи о моем самостоятельном обучении аналитике данных. Последние две недели, как и планировал, я провел за повторением и практической отработкой уже изученной информации по SQL и Python, поэтому эта статья будет скорее отчетом о проделанной работе. Ну и между делом порекомендую один хороший канал с видеоуроками😉
Основное открытие, которое я сделал с момента нашей последней встречи – различные способы оптимизации и сокращения кода программ. Один из таких способов – использование генераторов списков и словарей (list и dictionary comprehension). Эти механизмы позволяют сделать код не только намного короче и элегантнее, но и более эффективным по времени выполнения (А еще менее похожим на тот синтаксис языка Pascal, который мне преподавали в школе. Помните эти бело-желтые var, begin и writeln на синем фоне?😄)
Вот небольшой пример. Нужно записать в виде словаря элементы списка и сколько раз они встречаются в lst = [1, 2, 3, 1, 2, 1]
Решение 1:
Решение 2:
Даже на таком простом примере видно, что синтаксис сократился и стал легче читаться.
Еще одним способом оптимизации программ, с которым я познакомился, является использование так называемой lambda-функции. Она, опять же, позволяет записать несколько строк кода намного компактнее.
Например, здесь показана сортировка списка lst1 по длине вторых элементов вложенных кортежей с использованием lambda-функции:
В общем, за последние несколько недель мое представление о внешнем виде программного кода сильно изменилось. Примерно вот так:
Как вы помните, за основу учебной программы я обычно беру книги с последующим чтением официальной документации (учебник по SQL и книга по основам Python). А недавно я наткнулся на канал с видеоуроками, который является отличным дополнением к этим источникам – selfedu_rus на Ютубе. Очень понравилась подача материала. У автора есть несколько курсов на stepik.org, а на канале только видео из них. Но и в видео отлично рассказано об основных возможностях нескольких языков программирования. Даже если вы уже начали изучать Python, рекомендую вам ознакомиться с двумя плейлистами: «Добрый, добрый Python» и «Объектно-ориентированное программирование на Python3».
Изучая Python, стараюсь не забрасывать и SQL. Кстати, хотел бы поделиться с вами одной радостью - успехом с оконной функцией😁 Некоторое время назад мой знакомый айтишник, с которым я периодически советуюсь, сказал, что этот инструмент пока мне изучать рановато. Это был чуть более продвинутый материал, чем тот, который я изучал в то время. А недавно на sql-ex.ru представилась возможность на практике использовать оконку в решении задачи. Я был больше рад не тому, что правильно синтаксически написал решение, а тому, что увидел в условии задачи саму возможность и эффективность решения через оконную функцию😄
Следующий пункт в отчетном списке – я начал работать над своим первым самостоятельным SQL/Python проектом. Громкое слово «проект» тут, наверное, неприменимо, потому что это будет небольшая прикладная кулинарная программка. Однако для меня это начало нового этапа обучения с применением на практике изученной за четыре месяца информации. Пока программка находится на стадии концепции, но идея уже успешно прошла тест на отдельном дата-сете с рецептами. Из тринадцати тысяч рецептов нашел те, где используется содержимое моего холодильника😅
Основное внимание сейчас я уделяю решению задач на sql-ex.ru (SQL) и checkio.org (Python), но постараюсь также держать вас в курсе работы над этим пет-проектом😊
P.S. Но не все так гладко, как может показаться на первый взгляд😉 Расскажу о нескольких пробелах в моих знаниях на данный момент (как всегда, буду рад советам в комментариях)
В SQL проблемы вызывает работа с NULL-значениями. Пока не получается по условию задачи понять, нужно ли при формировании выборки из таблиц учитывать пустые атрибуты, и если нужно, то какие функции использовать (coalesce(), nullif() и вот это вот все).
В Python более-менее разобрался с классами и объектами из объектно-ориентированного программирования, но пока только в теории. Надеюсь, при создании пет-проекта удастся применить на практике концепции наследования и полиморфизма из ООП.
В плане общих вопросов я пока еще не изучал саму последовательность создания программ, в том числе совместную разработку. О значении слов git, jupyter, репозиторий я пока имею очень смутное представление. Из этой же серии – упаковка готового проекта и управление зависимостями (docker, poetry, виртуальное окружение). Практически в самом начале обучения я читал статьи о принципах разработки и сопровождения, но без практических знаний эта информация в голове не задержалась😅 Это было одной из причин, по которой я решил понемногу уже начинать создавать программу для портфолио. Синтаксис SQL, Python и концепции ООП это конечно хорошо, но надо уже понемногу приземлять их в реальный сформированный проект😎