Привіт усім! У нас уже були Functional February і Mechanical March. Тепер настала черга Analytical April, у якому ми зосередимося на мовах, що чудово підходять для науки про дані.
Як уже звично за останні кілька місяців, у цьому відео ми з Еріком дамо короткий огляд того, чому присвячено цей місяць, і мов, які ми досліджуватимемо.
Отже, як завжди, трохи згодом Ерік розповість нам про мови, а я почну з практичних деталей цього місяця.
Отже, спершу про рекомендовані мови цього місяця. Цього місяця їх лише три: Julia, Python і R. Кожна з цих мов доволі різна, і, звісно, Python - дуже багатоцільова мова, але цього місяця ми заохочуватимемо пробувати й використовувати ці мови крізь призму науки про дані.
Щоб отримати бейдж Analytical April, потрібно виконати пʼять вправ однією з цих мов. Невдовзі ми розглянемо різницю між ними, але якщо говорити про Exercism, наш трек Python має чудовий силабус, тож я дуже раджу спробувати його. Ми також сподіваємося запустити силабус для Julia протягом цього місяця: більшу частину роботи вже зроблено, залишилося лише відшліфувати його. У R немає силабусу, але є багато цікавих вправ, з якими можна погратися.
Ми маємо пʼять рекомендованих вправ, які варто спробувати:
- etl: тут можна дослідити перетворення даних в інший формат
- largest-series-product: де можна потренувати ефективні способи пошуку закономірностей у рядку тексту (англ. string) з цифр
- saddle-points: щоб дослідити роботу з багатовимірними масивами/матрицями
- sum-of-multiples: щоб потренувати фільтрування та додавання послідовності чисел
- word-count: перетворити рядок тексту на слова й порахувати їх
Нагадуємо, що, крім бейджа Analytical April, є річний бейдж #12in23, який можна отримати за розвʼязання різних рекомендованих вправ у будь-який час протягом року. Тож, щоб отримати цей бейдж, потрібно розвʼязати ті 5 вправ мовою Python, R або Julia десь протягом цього року! Повний список вправ наведено в дописі на форумі, посилання на який є на сторінці Analytical April.
І наостанок, перш ніж ми заглибимося в мови, нагадуємо, що протягом березня ми запускаємо наш новий сервер Discord. Там відбувається багато цікавого, тож радимо туди зазирнути. Посилання є в описі нижче!
Гаразд, розгляньмо мови. Спершу коротко оглянемо кожну з них, а потім заглибимося в їхні можливості та сфери застосування. Почнімо з Python.
Python
- Задумана й розроблена Гвідо ван Россумом наприкінці 1980-х як наступниця мови програмування ABC. Уперше випущена 1991 року.
- Розроблена в Нідерландах у Centrum Wiskunde & Informatica (CWI) (відомому тим, що саме там Едсгер Дейкстра виконав більшість своєї роботи), дослідницькій лабораторії, що фінансується державою.
- Гвідо програмував мовою C та за допомогою shell-скриптів, але в обох були недоліки. Python прагне поєднати найкраще з обох світів, без цих недоліків.
- Нею керує Python Software Foundation, а зміни до мови відбуваються через Python Enhancement Proposals (PEP) (подібно до RFC)
R
- Створена Россом Ігакою та Робертом Джентлменом в Оклендському університеті. R можна вважати іншою реалізацією мови S (з відносно незначними відмінностями), яку згодом замінила S-plus, комерційна (закрита) реалізація S. Хоча R поділяє більшість синтаксису з S, її семантика натхненна Scheme
- Мета: створити мову, краще пристосовану до статистичних обчислень і графіки та простішу у використанні, ніж порівнянне програмне забезпечення, розроблене фахівцями з компʼютерних наук
Julia
- Розроблена Джеффом Безансоном, Стефаном Карпінскі, Віралом Б. Шахом та Аланом Едельманом у відкритому режимі; нині має понад тисячу контрибʼюторів
- Мета: створити вільну мову високого рівня, яка має швидкість C, динамічність Ruby, метапрограмування LISP, універсальність Python, підтримку статистики з R, підтримку лінійної алгебри з MatLab і потужність обробки рядків тексту з Perl, і водночас здатна підтримувати масивно паралельне виконання
- Чудово підходить для наукових обчислень, але також є мовою загального призначення (фреймворк Genie для вебзастосунків)
Як і з багатьма мовами, усі три створені з невдоволення :)
Гаразд. Отже, щодо сфер застосування: коли варто брати кожну з цих мов, а коли інші?
Python
- Справді мова загального призначення (вебсайти, скрипти, наукові обчислення)
- Можна використовувати для багатьох різних цілей: штучний інтелект (TensorFlow), наукові обчислення (NumPy), скрипти, вебсайти (Django), вбудовані системи (micro python), взаємодія з апаратним забезпеченням (наприклад, raspberry pi), ігри (EVE online), і Python навіть побував на Марсі
- Чудово підходить для вивчення програмування: безліч ресурсів і величезна спільнота. Багато порад щодо написання коду в стилі Python (тобто як писати ідіоматичний код Python, приклади), як-от «Явне краще за неявне» та «Читабельність має значення». У багатьох операційних системах він встановлений типово
- Одна з найуживаніших мов на цей момент, тож багато документації, бібліотек і велика спільнота
R
- R використовують у найрізноманітніших сферах: дослідники для аналізу даних з експериментів, університети для викладання статистики й аналізу даних, фінансовий сектор, де статистика відіграє ключову роль (наприклад, у страхуванні), так само роздрібна торгівля (Amazon використовує R для аналітики даних) і виробництво (John Deere оцінює, скільки запчастин виробити), National Weather Service допомагає прогнозувати погоду й катастрофи, журналістика даних (аналіз даних з реального світу та їх осмислення, часто з візуалізацією), широко використовується в охороні здоровʼя, наприклад, для визначення безпечності ліків на основі доклінічних досліджень
Julia:
- Чудово підходить для наукових обчислень, інтелектуального аналізу даних, машинного навчання, лінійної алгебри та розподілених обчислень. Запис відчуватиметься схожим на математичний, тож перетворити рівняння на код відносно легко
- Розподілені обчислення: задачі (=корутини) та канали дають змогу запускати код паралельно з обміном даними між ними; підтримка багатьох процесів через передавання повідомлень (чудово для високопродуктивних обчислень)
- Використовується в проєкті Celeste (суперкомпʼютер виконує код Julia для аналізу 178 терабайт астрономічних даних) (завдяки цьому Julia стала частиною клубу петафлопс, до якого на той час належали лише C, C++ і Fortran; Julia - перша динамічна мова, квадрильйон операцій з плаваючою комою за секунду. 1 із 15 нулями), Clima (Climate modeling alliance) залучає фахівців з Caltech, MIT та Лабораторії реактивного руху NASA до розробки моделі кліматичного прогнозу, CERN, ASML
А з погляду програмування, чим вони різняться? Вони функціональні, обʼєктно-орієнтовані тощо?
Python:
- Динамічна та строго типізована
- Мультипарадигмальна: імперативна, функціональна, але насправді обʼєктно-орієнтована мова (усе є обʼєктом)
- Типовий інтерпретатор CPython компілює код у байткод, а потім той інтерпретується у віртуальній машині. PyPy - заміна CPython, яка виконує JIT-компіляцію в машинний код
R:
- Динамічна та строго типізована
- Мультипарадигмальна, функціональне ядро, але також підтримує процедурний та обʼєктно-орієнтований стилі
Julia:
- Динамічна та строго типізована, компілюється точно вчасно (JIT)
- Мультипарадигмальна: імперативна, обʼєктно-орієнтована (перевантаження через множинну диспетчеризацію), функціональна (функції вищого порядку, часткове застосування, оператор конвеєра)
- Код компілюється точно вчасно, наперед, під час виконання
Продовжуючи розглядати їх з погляду програмування: чи має якась із цих мов якісь особливо визначні можливості?
Python:
- Приємний синтаксис: чутливість до пробілів робить область видимості легко помітною. Код зазвичай легко читати, наприклад, булеві умови (англ. Boolean), як-от and/or, які легко читає людина
- Виразна: багато досягається досить малим обсягом коду (спискові включення, генератори, декоратори)
- Величезна кількість бібліотек для найрізноманітніших цілей
- Як уже згадувалося, це справді мова загального призначення, адже її можна використовувати в багатьох різних сценаріях
Julia
- Множинна диспетчеризація. Вибір функції для виклику залежить від типів усіх аргументів (як перевантаження функцій)
- Динамічна, але з чудовою продуктивністю. Продуктивність Julia може зрівнятися з Fortran і наблизитися до C. «Звичайний» код часто продуктивний (жодних шаленних хаків не потрібно, менші функції навіть заохочуються). Бібліотеки для запуску коду на GPU
- Розподілені обчислення: задачі (=корутини) та канали дають змогу запускати код паралельно з обміном даними між ними; підтримка багатьох процесів через передавання повідомлень (чудово для високопродуктивних обчислень)
- Чудово підходить для наукових обчислень, інтелектуального аналізу даних, машинного навчання, лінійної алгебри та розподілених обчислень. Запис відчуватиметься схожим на математичний, тож перетворити рівняння на код відносно легко
R:
- Гнучкі типи даних: вектор - основний тип, навіть скаляри є векторами. Вектори можуть мати повʼязані з ними метадані (наприклад, назви їхніх елементів). Масиви неоднорідні (можуть містити елементи різних типів). Особливий тип dataframe для набору векторів (усі однакової довжини).
- Векторизовані операції дають змогу лаконічно, ефективно й читабельно оновлювати вектори
- R - це інтегрований набір програмних засобів для роботи з даними, обчислень і графічного відображення. Легко досліджувати, візуалізувати й обробляти дані через R Studio. Чудово підходить для інтелектуального аналізу даних
- Чудова спільнота, дружня та різноманітна. R for Data Science Online Learning Community обʼєднує тих, хто вивчає R, з усіма рівнями підготовки, які разом удосконалюють свої навички. Є відкрита група в Slack, де учасники спілкуються та допомагають одне одному з проблемами.
Якщо хтось не впевнений, яку мову спробувати в квітні, як краще зробити вибір?
Як і все в IT: залежить! У цьому випадку я б сказав, що все переважно залежить від мети та особистого досвіду.
Якщо людина відносно нова в програмуванні, цікавиться штучним інтелектом чи машинним навчанням або хоче вивчити мову, яку можна застосовувати для багатьох різних речей, я б, мабуть, порадив почати з Python: Кількість ресурсів для Python величезна, серед них багато безкоштовних онлайн-курсів Python широко використовується в штучному інтелекті та машинному навчанні Python можна застосовувати для безлічі різних цілей На треку Python увімкнено режим навчання, який допомагає цікаво опанувати основні концепції мови
Якщо цікавить статистична робота, хочеться досліджувати й візуалізувати дані або якщо цікаво спробувати інший підхід до роботи з даними, мова R - чудовий вибір: Типи даних R ґрунтуються на наборах даних (вектори/масиви), а операції легко застосовувати до наборів (цикли не потрібні) Середовище розробки RStudio чудово підходить для дослідження й візуалізації даних R має чудову підтримку статистичного аналізу R дає змогу легко будувати графіки даних
Якщо цікавлять наукові обчислення, хочеться запускати код паралельно, справді важлива продуктивність або хочеться вивчити сучасну елегантну мову, яка пропонує щось відмінне від більшості інших мов, я б порадив Julia:
- Множинна диспетчеризація буде новою для багатьох і є неймовірно потужною
- Julia чудово підходить для наукових обчислень
- Система типів Julia гнучка й виразна
- Julia має чудову продуктивність
- Julia чудово підходить для паралельного виконання
Звісно, якщо є час, я б порадив спробувати всі три! Ніколи не відомо наперед, яка мова припаде до душі, доки не спробувати її.