Я бы хотел получить такое письмо три года назад, когда только начинал изучать Data Science (DS). Чтобы там были необходимые ссылки на полезные материалы. Статья не претендует на полноту охвата необъятной области DS. Однако для начинающего специалиста будет полезна.
В DS наиболее часто используются следующие технологии:
- свободное владение английским языком;
- операционная система Ubuntu Linux (так исторически сложилось);
- язык программирования Python (но лучше Anaconda Python);
- интегрированная среда разработки (IDE) PyCharm (Community Edition бесплатная);
- инфраструктура (framework) для машинного обучения (ML machine learning), глубокого обучения (DL deep learning) и создания нейросетей (PyTorch, TensorFlow и десятки других);
- если нет своей мощной видеокарты (GPU graphical processing unit), тогда следует пользоваться бесплатными облачными технологиями на основе Jupyter Notebook;
- умение пользоваться распределенной системой управления версиями Git (GitHub, GitLab, Bitbucket и т.д.);
- иметь учетную запись на StackOverflow и всех его ответвлениях.
Также со временем вам понадобятся множество различных дополнительных к Python библиотек и инструментов обработки изображений и данных. Их десятки. Наиболее полезные для меня (обработка изображений) в порядке убывания важности:
- Virtual Environment – виртуальная среда разработки для различных проектов, которая инкапсулирует в себе разные версии библиотек и инструментов.
- NumPy – работа с матрицами, линейная алгебра.
- OpenCV – множество различных алгоритмов для работы с изображениями.
- Jupyter Notebook – веб-приложение для разработки и выполнения программ Python в браузере и в облаке.
- Tensorflow-gpu – конфигурация нейронных сетей и вычисления на графических картах.
- iPython – более удобная консольная работа с командами Python, советую использовать её вместо консоли по-умолчанию.
- Matplotlib – рисование графиков и диаграмм.
- Pillow – работа со всеми популярными форматами изображений.
- Pandas – работа с данными.
- SciPy – продвинутая работа с алгоритмами, бесплатная альтернатива программе MatLab.
- Scikit-learn – алгоритмы машинного обучения.
- Scikit-image – продвинутая обработка изображений.
- K3D – работа с трехмерными графиками и изображениями в Jupyter Notebook.
Машинное обудение (ML machine learning), а особенно глубокое обучение (Deep Learning) невозможны без данных. Необходимые базы данных (датасеты, datasets) можно поискать через сервис Google Dataset Search или среди 25-ти тысяч датасетов Kaggle.
Что у меня есть:
- Различные программы Python. Начните с простых скриптов и продолжите более сложными.
- Набор инструкций по настройке Ubuntu Linux. Из них самая важная инструкция по установке и настройке виртуальной среды.
- Брошюра «Введение в машинное обучение и искусственные нейронные сети». Самые основы, которые собраны со всего Интернета, но в моем «уникальном» исполнении.
- Курсы и видео для начинающих, с которых стоит начинать изучать нейросети.
- Полезные инструменты, где каждый найдет что-нибудь интересное для себя.
- Общий список курсов, которые прошел и которые хотел бы пройти.
Спасибо за внимание!
Комментарии (21)
chapuza
02.01.2020 11:15FooBar167 Автор
03.01.2020 23:28Да я упомянул Google Colab и еще 6 различных облачных бесплатных Jupyter Notebook приложений.
ideological
02.01.2020 13:08+3У меня есть послание:
Data science, это хобби, профессии такой не существует :).FooBar167 Автор
03.01.2020 23:36Честно говоря, я анализировал данные еще в 2005 году и получал за это зарплату. Только это тогда не называлось Data Science, а Event Log Management. Тогда же выучил регулярные выражения до уровня профи. Сейчас же RegEx мне не нужны особо, т.к. работаю с изображениями.
KonstantinSpb
02.01.2020 14:01FooBar167 Автор
03.01.2020 23:42Все настроенное в контейнере Docker? Может быть… но мы, представители «старой школы» настраиваем все руками :-) У меня есть инструкция по настройке виртуальной среды: Anaconda virtual environment. Проверял, работает на Ubuntu и Windows. С чистым Python сложнее настроить CUDA и cuDNN, поэтому лучше Anaconda Python.
IrinaBubley
03.01.2020 23:50+1Спасибо огромное за такую великолепную подборку. Периодически интересуюсь этой темой, натыкаясь на разрозненные материалы. Здесь же вы все так комплексно систематизировали, что просто песня. Искреннее спасибо, сохраняю себе ваш пост.
KMU
03.01.2020 23:50+1Спасибо!
Для старта можно купить Nvidia Jetson Nano в районе 100$ (очень мощный SBC). Там же на сайте Nvidia пошаговая инструкция/курс, как настроить и использовать данную железку.
KonstantinSpb
04.01.2020 07:42+1nirvacana.com/thoughts/wp-content/uploads/2018/01/RoadToDataScientist1.png
nirvacana.com/thoughts/2013/07/08/becoming-a-data-scientistFooBar167 Автор
04.01.2020 13:29Пугающая диаграмма, но всеобъемлющая. Буквально все эти технологии не нужны одному человеку. При специализации и решении конкретной задачи бОльшая их часть будет не нужна.
Ermit
Обучение — это точно такой же проект, как все прочие, эффективность процесса обучения — важнейший элемент его. И у меня есть серьезные сомнения, что предметный способ погружения в проблематику DS — это самый эффективный путь в нем. Вы перечислили такое количество инструментов и технологий, что захватывает дух. )))
В качестве альтернативного (или дополнительного) варианта освоения DS возможен задачный подход, когда выбирается небольшая простая задача (например, тот же MNIST или что-то еще обучательное) и производится решение end-to-end. С анализа датасета до оформления решения. Проектный подход эффективнее по трем причинам: 1) задача определяет модели, 2) задача определяет инструменты, 3) задача определяет требования к качеству решения и оптимизацию его. Очень многие из пересчисленных Вами технологий так или иначе будут использованы, но будет совершенно иной ракурс. Без этих ограничений и фокусирования DS можно изучать неограниченно долго. )))
FooBar167 Автор
Верно, быстрее и легче задачный подход. У задачного подхода тоже есть минусы. Например, разбирать ошибки ближе к концу проекта. Отсутствие системного мышления (в моей следующей статье).
Я как-то ближе к «старой школе». Мне интересно изучать подробно. Более нацеленно на получение кайфа от процесса изучения, чем от конечного результата. И для этого нужно в разы больше времени и усилий.
Лучше всего комбинированный подход: сделал небольшой проект, почитал теорию, что нового по предмету появилось в последнее время, потом сделал еще один небольшой проект, снова почитал, что нового и т.д.
firstdmitry
О, ну вот для меня (маркетолога) все статьи про анализ данных заканчивались лишь их чтением, в течении многих лет (около 10 и задача передо мной стоит и коллективно даже решать её пытаемся))) пока я не сел за изучение Питона и вот здесь понеслось… Поставил интерпретатор, ещё что-то… А на курсах то они программируют из Линукса, а у меня Винда — не удобно… Либо менять курсы либо ставить Убунту на Виртуалку… Это я к чему: в моей ситуации статья очень интересная и я пошёл дальше ссылки ковырять) Спасибо!
FooBar167 Автор
Как-то получилось, что научился все настраивать и на Windows и на Ubuntu. В общем, можно настроить все на обеих операционных системах. Благо с кроссплатформенным Python все почти одинаково. Однако больше инфы по Ubuntu.
Для Windows необходимо установить Cygwin — команды Linux для Windows. Однако в некоторых сложных случаях есть отличия.
Для начала посмотрите список этих ссылок. Я с них начинал изучать.
Затем попробуйте задачных подход: берите задачу и ищете в Интернете, как ее решить. Это быстрее. Возможно, это введение в машинное обучение поможет понять, как это все работает в общих чертах.
FooBar167 Автор
Не забывайте, что есть облачные технологии, где все уже настроено и работает. Не нужно ничего настраивать. Их не менее шести штук разных, все бесплатные.
retar
Вот да. Курсы, книги, мануалы — как прикладное. Берешь задачу и решаешь ее, по пути подкуривая различные мануалы, документацию и прочее. Не только в дата сайнс, но и вообще для обучения программированию
FooBar167 Автор
Верно, как выше пишут, это задачный подход. Согласен, я старомоден, стараюсь изучать область, а не решать задачи :-)
Думаю, в идеале нужно комбинировать предметный и задачный подходы: изучаю предметную область, по ходу изучения появляются вопросы и задачи, записываю их в специальный дневник, затем пытаюсь решить наиболее интересные задачи, потом дальше изучаю предметную область и т.д. Как-то так.
retar
Ну я предлагаю наоборот: решаешь задачи и по необходимости изучаешь предметную область той или иной подзадачи.
Пишешь парсер -> изучаешь работу регулярок вообще и в конкретном яп в частности.
На определенном уровне, особенно в самом начале, не всегда нужны глубины глубин. В начале, зачастую надо знать формулу, закон или способ применения, а не доказательную базу, которая стоит за этим.