Сказ о том, как я от теории к практике переходил – #14-04/24

Всем привет! Время очередной статьи о моем самостоятельном обучении аналитике данных. Последние две недели, как и планировал, я провел за повторением и практической отработкой уже изученной информации по SQL и Python, поэтому эта статья будет скорее отчетом о проделанной работе. Ну и между делом порекомендую один хороший канал с видеоуроками😉

Бутылка кефира, полбатона и реляционная база данных :)
Бутылка кефира, полбатона и реляционная база данных :)

Основное открытие, которое я сделал с момента нашей последней встречи – различные способы оптимизации и сокращения кода программ. Один из таких способов – использование генераторов списков и словарей (list и dictionary comprehension). Эти механизмы позволяют сделать код не только намного короче и элегантнее, но и более эффективным по времени выполнения (А еще менее похожим на тот синтаксис языка Pascal, который мне преподавали в школе. Помните эти бело-желтые var, begin и writeln на синем фоне?😄)

Вот небольшой пример. Нужно записать в виде словаря элементы списка и сколько раз они встречаются в lst = [1, 2, 3, 1, 2, 1]

Решение 1:

dictionary = {} for i in lst: dictionary[i] = lst.count(i)

Решение 2:

dictionary = {i: lst.count(i) for i in lst}

Даже на таком простом примере видно, что синтаксис сократился и стал легче читаться.

Еще одним способом оптимизации программ, с которым я познакомился, является использование так называемой lambda-функции. Она, опять же, позволяет записать несколько строк кода намного компактнее.

Например, здесь показана сортировка списка lst1 по длине вторых элементов вложенных кортежей с использованием lambda-функции:

lst1 = [(1, 'asd'), (2, 'zx'), (3, 'qwert'), (4, 'p')] lst2 = sorted(lst1, key=lambda x: len(x[1]))

В общем, за последние несколько недель мое представление о внешнем виде программного кода сильно изменилось. Примерно вот так:

Работает и ладно!
Работает и ладно!

Как вы помните, за основу учебной программы я обычно беру книги с последующим чтением официальной документации (учебник по 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 и концепции ООП это конечно хорошо, но надо уже понемногу приземлять их в реальный сформированный проект😎

2121
43 комментария

Даже на таком простом примере видно, что синтаксис сократился и стал легче читаться.

синтаксис сократилсяДа

стал легче читаться.Нет

Есть 2 лагеря: адепты текстового столба и школа однострочного дракона

Рекомендую не присоединяться не в один из них и балансировать между компактностью и читаемостью кода. Я могу при желании всю программу на плюсах/шарпах/жабаскрипте в одну строку зафигачить, читабельнее она от этого не станет. С другой стороны когда люди пишут флюент в стиле

Выборка
.Сделай()
.Чота()
.Потом()
.Ещё()
.Чота()
.Сделай()
.Всё()

Это тоже ересь, хотя не знаю, может у этих ребят мониторы вертикально повёрнуты или что-то ещё

6
Ответить

Кстати рил на вертикальном мониторе читаю и код набираю, поэтому столбец как-то приятен мне😅

1
Ответить

Спасибо за пояснения. Ну в общем, как и везде - главное, без фанатизма

2
Ответить

Комментарий недоступен

5
Ответить

А я сегодня дома один о-хо-хо-хо-хо

4
Ответить

шурик пошел в аналитику)

1
Ответить

так а почему в оффтопе, аналитика нам интересна

2
Ответить