Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

Як ефективно працювати з даними та до чого тут Python

Привіт! Мене звуть Олег Андрус, я Python developer у Levi9 і люблю цю мову за зручність, читабельність і велике ком’юніті однодумців.

Python входить у четвірку найпопулярніших мов програмування у світі та поступається лише JavaScript, HTML/CSS і SQL. Ці мови з’явилися раніше та знайшли своє місце на багатьох бізнес-проєктах. І, попри це, Python активно завойовує ІТ-ринок. Він універсальний, зручний у написанні та спрощує роботу з даними.

В цьому матеріалі я з колегами по Levi9 Python Meetup, що проходив всередині липня, Анастасією Ляцькою та В’ячеславом Леськів, розбираємося з можливостями Python і з власного професійного досвіду підтверджуємо ефективність цієї мови в більшості бізнес-задач.

Досвідчені інженери можуть переконатися в правильності вибору мови програмування для проєкту та дізнатися кілька цікавих інсайтів, а початківці — побачити перспективи. Буде корисно!

Поширений і дієвий майже всюди

У 2022 році рейтинг найпопулярніших мов програмування у світі очолюють JavaScript, HTML/CSS та SQL. Наступним йде Python — на ньому пишуть проєкти понад 48% розробників. Зокрема, він поширений у веброзробці, data science та машинному навчанні. Останні роки його часто обирають для NLP-проєктів, як-от створення голосових асистентів, смартконтрактів у блокчейні та спецефектів для кіноіндустрії.

Python не належить жодній компанії та має відкритий код, який кожен може змінити. Як і в більшості open-source напрямах, навколо Python сформувалося велике ком’юніті розробників. Вони обмінюються досвідом і створеними для власних проєктів інтерфейсами, оновлюють та перевіряють бібліотеки на віруси й коректність роботи. Безпечні пакети можна встановити через PIP (package installer for Python).

В Python ти не думаєш, як зробити, а просто робиш

Python добре кластеризує дані та дозволяє спростити їх обробку, що полегшує роботу. Саме тому бізнеси часто обирають його для своїх потреб. Наприклад, його використовує Uber, щоб покращувати взаємодію між водіями та пасажирами. В цьому допомагають численні Python-бібліотеки та фреймворки. Вони дозволяють не писати код з нуля, а швидко та зручно виконувати необхідні операції.

Однією з переваг Python є його тісна взаємодія з Raspberry Pi, що поширений в ІоТ, а також з популярними бібліотеками для ML — TensorFlow і Keras. Крім того, в нього багато інструментів «під капотом» та простий синтаксис коду. Завдяки цьому можна зосередитися на функціоналі, рефакторингу та краще пропрацювати логіку проєкту.

Моя колега Анастасія працює з бібліотекою pandas. Ця бібліотека містить багато методів написання коду, тож розробник витрачає на це менше часу, отримує читабельний код і може зосередитися на логіці та алгоритмах обробки даних.

Анастасія займається створенням чатботів, де основною мовою розробки залишається Python. Проте вибір залежить від сфери та потреб, які має вирішити бот. Так, для месенджерів частіше використовується Python або Java, для браузерної гри — Javascript, а з комп’ютерною впорається С# або C++.

Python універсальний і в сучасній розробці немає області, де він не впорається, натомість є відповідні умови, за яких доречніше використати іншу мову.

Python vs Java

Python, на відміну від Java, — це динамічно типізована мова. Тобто, не потрібно хвилюватися про типи даних і писати довгий код, а концентруватися на інших важливих речах. При цьому є думка, що продуктивність обробки даних в Java набагато краща. Проте практика показує, що якість і швидкість опрацювання гігантських об’ємів даних в обох мовах майже однакова.

Щобільше, такі речі, як Текст-блоки та методи роботи зі String з’явилися в Java лише в одній з її останніх версій, тоді як у Pyton воно працює вже декілька років.

Python vs C

Глибоко в надрах Python побудований на С, але дозволяє написати код набагато швидше. В нього вищий рівень абстракції, тож можна обробляти масиви даних, не вдаючись у деталі. Крім того, є багато вже готових С-based інтерфейсів — наприклад, бібліотеки NumPi чи PsyFi, — що дозволяють працювати з даними як на С. Таке розширення функцій дозволяє зробити продукт ціліснішим.

При цьому С, хоча й вимагає багато часу на написання коду, швидший у процесі виконання логіки. На практиці різниця у швидкодії невідчутна для користувачів, але важлива, наприклад, embedded-розробникам, що мають вмістити багато речей в обмежені за обсягом пам’яті мікроконтролери.

Кожна мова має різний стиль написання функцій і будову, а вибір відповідної залежить від задач і досвіду людей, які з нею працюватимуть. За словами мого колеги В’ячеслава, маленька помилка може вартувати місяця роботи. Цей ризик варто усвідомлювати та не лише враховувати особливості кожної мови, але й адаптувати підхід до виконання задачі та підлаштуватися під мову.

Сильний, але має певні слабкі місця

Недолік Python у порівнянні з мовами як С++ в тому, що при написанні коду треба завжди враховувати можливі варіанти виникнення Runtime помилок і підкріплювати код тестами. Інтерпретатор Python знаходить баги вже при виконанні коду та повністю зупиняє програму.

Крім того, код виконується line by line і помилка — ділення на нуль, невідповідність типів і неправильно вказані змінні тощо — може з’явитись в найнеочікуваніший момент. Такої проблеми, наприклад, немає в С++, адже помилки помітні вже на етапі компіляції, а не під час виконання програми.

Незручності від використання Python можуть виникнути, якщо треба під’єднатися до різних баз даних, адже там діють певні обмеження. У порівнянні з такими популярними технологіями, як JDBC і ODBC, рівень доступу Python до баз даних виявляється дещо обмежений.

Проте перевага Python у роботі з даними в тому, що ми будуємо уявлення про щось на основі його можливостей, а не сутності чи типу. Проводячи аналогію з конструктором Lego, С — це малі кубики, ставши на які можна поламати ноги, а Python — дитячі пластикові, наступити на які не так боляче.

Python — це як великі кубики Lego. Простий і має хороший потенціал

Мови як Java, C# та JavaScript з’явилися раніше за Python, тож legacy багатьох проєктів написані на них і компанії не бачать сенсу щось змінювати. Але Python не лише залишиться, але й проявить себе ще не раз. Наприклад, він вже зайняв нішу ML і цей напрям розвиватиметься в контексті Python. База проєктів писатиметься цією мовою, і, відповідно, бізнес шукатиме фахівців під них. На Python також часто пишуться блокчейн-проєкти.

З Python добре починати, адже в порівнянні з іншими мовами його легше вивчити та застосувати на практиці. Ця мова може здатися простою — ніби розібратися з нею так само легко, як з книгою рецептів.

Проте навчитися та зрозуміти синтаксис мови — це одне, а розв’язувати на ній задачі — інше. Смішно мірятися кубиками Lego, якщо задача — побудувати Ейфелеву вежу. Це буде складно зробити на всіх мовах, незалежно від вмінь чи досвіду.

👍ПодобаєтьсяСподобалось6
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Почему питон не используют в реально критически важных областях?
Например фармацевтика или атомная енергетика?

Ответ. Потому что никто юридически и финансово не несёт ответственность, за те алгоритмы, которые находятся в нем. Допустил какой то Вася Пупкин ошибку, ответственности нет.

С названием прям угадали, ни слова по делу, статься 6-А класс — конкурс эссе

С названием прям угадали , ни слова по делу, статься 6-А класс — конкурс эссе

У порівнянні з такими популярними технологіями, як JDBC і ODBC, рівень доступу Python до баз даних виявляється дещо обмежений.

з Пайтоном практичного досвіду не маю, чи це означає що він має додаткові обмеження при роботі з ODBC?

та, я погуглив, що вміє, і мене це додатково заплутало

ефективно

та

Python

дуууже незвично бачити у одному реченні))

Python входить у четвірку найпопулярніших мов програмування у світі та поступається лише JavaScript, HTML/CSS і SQL.

Давно не видел, чтобы HTML, CSS и SQL включали в «языки программирования». Спасибо за это. :)

А так да, пайтон неплох для обработки данных, если это маленькие данные. Если же данные большие — быстродействие пайтона (порядка в 100 и более раз медленнее того же «си») может стать проблемой.

может стать проблемой

Не може, бо всі бібліотеки написані на C/C++/Fortran і різниця буде тільки між тим що ти конкретно на С будеш ловити сегфолти, а твій друг на пітоні ні.

Видишь, как оно получается? Все библиотеки написаны на C/C++/Fortran — а быстродействие пайтоновских программ делает так:

„I think you’re reading those stats incorrectly. They show that Python is up to about 400 times slower than C++ and with the exception of a single case, Python is more of a memory hog. When it comes to source size though, Python wins flat out.

My experiences with Python show the same definite trend that Python is on the order of between 10 and 100 times slower than C++ when doing any serious number crunching. ”

P.S. И это ещё не касаясь малти-тредовых кейсов, для которых в пайтоне существует GIL.

делает так

Цікаво подивитись на приклад де бібліотека на сі програє сама собі у 10 разів.

малти-тредовых

А ще існує Dask і більшість бібліотек паралеляться на рівні С.

То есть, эффективно работать с данными в Пайтон — это использовать для работы с данными библиотеки, написанные на «си». :)

А eсли в этих библиотеках нет какой-то нужной тебе для обработки функции — что делать?
«Сишник» её для себя напишет. А что сделает пайтонист?

Вітаю, ти тільки що зрозумів чому пітон не поступається у швидкодії С у питаннях обробки даних але при цьому набагато більш зручний.
P.S. А якщо бібліотека на С буде занадто повільна, що буде робити сішник перед тим як благати асемблерщика написати йому нормальну процедуру?

А якщо бібліотека на С буде занадто повільна, що буде робити сішник перед тим як благати асемблерщика написати йому нормальну процедуру?

Переписывание на ассемблере не вариант, т.к. «сишный» код как правило будет транслирован в ассемблер оптимальнее, чем ассемблер написанный средним кодером.
Но есть вариант использования более быстрого процессора, параллельной обработки, итп.

К тому же, разница в быстродействии между «сишным» кодом и _идеальным_ ассемблерным будет, пускай 20%. Разница же в быстродействии сишного и пайтоновкого кода — сотни раз. Есть разница?

Ну тоді і писати функцію якої чомусь немає у бібліотеці — не варіант, бо як правило все що потрібно уже є в бібліотеці. А для виключення з правил є cython, c-ext, pyo3.
Ти так і не показав де буде різниця хоча б у 10 разів не те що в 100. Якщо ти і далі хочеш боротись з реальністю і вкидувати якісь великі, нічим не підтверджені, цифри то ось тобі ще одна — середньостатистичний сішник на с зробить у 100 разів більше помилок при вирішенні однієї і тіє ж задачі з обробки данних ніж пітоніст на пітоні.

бо як правило все що потрібно уже є в бібліотеці

Нет, разумеется. Скажем, у тебя есть 2 вектора данных (А и Б) большой длины. Ты хочешь произвести с этими векторами что-нибудь элементарное, типа поэлементную операцию «A[m] = (A[m] + B[m]) * 100 + 10»

В нумпи ты это будешь делать примерно так:
np.add(A, B, A)
np.multiply(A, 100, A)
np.add(A, 10, A)

в «си» примерно так:
for (int m = 0; m < большая длина; m++) A[m] = (A[m] + B[m]) * 100 + 10;
(на самом деле ещё оптимизированнее, без индексов/адресации и прoчего)

Угадай, что будет быстрее и во сколько раз?

А ведь реальные действия над данными, обычно, куда сложнее....

да одинаково, там тот же for loop под капотом. А операции посложней, с sparse матрицами ты так же велосипедить будешь на крестах?

да одинаково, там тот же for loop под капотом

1 луп и 3 лупа — это уже очень разные вещи, в смысле быстродействия.
+ операций внутри лупов — тоже больше

велосипедить на «сях» не нужно — т.к. уже очень многое написaно до нас (включая всё, что есть в том же нумпи, на который молятся пайтонисты).

ну а как ты хотел ndarray на 1 лупе, нашел с чем сравнивать. А если гетерогенные данные? берешь pandas, а на крестах дрочишь вприсядку

берешь pandas, а на крестах дрочишь вприсядку

Думаю, всё что есть на пайтоне — существует в "сях"/"плюсах" в нескольких вариантах.

данные большие

Цікаво, хто великі дані в ентерпрайзі обробляє на чистому пайтоні?
Переважно використовуються дата-пайплайни, де під капотом спарк чи хадуп, але нажаль проблема там в іншому — вони всі біжать на jvm, тому пайтон добряче відстає від джави/скали. Особисто я вже давно працюю над тим, щоб світчнутись на скалу в data engineering.

Цікаво, хто великі дані в ентерпрайзі обробляє на чистому пайтоні?

Академикеры. Т.к. у них мозга недостаточно, чтобы освоить «си».

Соответствующими получаются и модели с выводами (и стремительной деградацией мира вокруг).

у них мозга недостаточно, чтобы освоить «си»

якщо вже писати то краще на ассемблері, на с тільки інтерфейси написати, щоб тупаки могли взаємодіяти з даним творінням.

якщо вже писати то краще на ассемблері

🤦🏼

Цікаве питання, за ML думаю, що там лише інтерфейси написані на пітоні/cython, а математичні операції енівей на С . Щодо бігдати, то перші солюшини були написані на джаві, умовний hadoop майже весь джава+ C, коли писали спарк беручи за основу хадуп, то вже з’явилась скала на jvm, де менше ООП-шного булшиту порівняно з джавою і багато класних штук з функціонального програмування. Величезний плюс пайтону це ком’юніті, яке швидш за все й ініціювало підтримку спарку на пайтоні, останній в переважній більшості динамічно юзає jvm об’єкти, через py4j, тому перформанс pyspark порівняно зі чистим спарком повільніший в рази. Пайтон ж задумувався, як легка і лаконічна мова, ніхто ніколи не очікував від нього мега ефективності, а з тим як працює закон Мура, то навряд людство буде рахувати ресурси для звичайного ентерпрайзу.

Підписатись на коментарі