В этой книге рассказывается о том, как использовать Python для управления, обработки, организации и анализа данных. Моя цель — представить Python-программирование и библиотеки, а также инструменты для работы с данными, которые помогут вам стать специалистом по анализу данных. Хотя книга называется «Анализ данных», основное внимание уделяется программированию на Python, библиотекам и инструментам для анализа данных. Это именно то, что нужно для анализа данных с помощью Python.
Когда в книге упоминается «данные», что это значит? В основном это структурированные данные (structured data), этот намеренно расплывчатый термин обозначает все данные общего формата, такие как:
Это далеко не полный список. Большинство наборов данных можно преобразовать в более подходящую для анализа и моделирования структуру, хотя иногда это не так очевидно. Если это невозможно, можно также преобразовать набор данных в структурированную форму. Например, группу новостных статей можно обработать в виде частотной таблицы, которую затем можно использовать для эмоционального анализа.
Большинство пользователей электронных таблиц (например, Microsoft Excel, который, возможно, является самым популярным инструментом для анализа данных) знакомы с этим типом данных.
Многие люди (включая меня) легко влюбляются в Python. С момента своего появления в 1991 году Python стал одним из самых популярных динамических языков программирования, наряду с Perl и Ruby. Благодаря большому количеству веб-фреймворков (таких как Rails для Ruby и Django для Python), использование Python и Ruby для создания веб-сайтов стало очень популярным с 2005 года. Эти языки часто называют скриптовыми языками, потому что их можно использовать для написания коротких и грубых небольших программ (скриптов). Мне лично не нравится термин «скриптовый язык», потому что он звучит так, будто эти языки не подходят для создания надёжного программного обеспечения. Из-за различных исторических и культурных факторов Python развил большое и активное сообщество научных вычислений. За последние 10 лет Python превратился из периферийного или рискованного языка научных вычислений в один из важнейших языков для задач анализа данных, машинного обучения, академических и промышленных разработок программного обеспечения.
При анализе данных, интерактивных вычислениях и визуализации данных Python неизбежно будет сравниваться с другими открытыми и коммерческими специализированными языками программирования/инструментами, такими как R, MATLAB, SAS, Stata и другие. В последние годы благодаря постоянному совершенствованию библиотек Python (таких как pandas и scikit-learn) он стал предпочтительным вариантом для задач анализа данных. В сочетании с его мощью в универсальном программировании мы можем полностью использовать Python как единый язык для разработки приложений, ориентированных на данные.
Python стал успешным инструментом научных вычислений отчасти потому, что он может легко интегрировать код C, C++ и Fortran. Большинство современных вычислительных сред используют некоторые библиотеки Fortran и C для реализации линейной алгебры, оптимизации, интеграции, быстрого преобразования Фурье и других подобных алгоритмов. Многие предприятия и государственные лаборатории также используют Python для «склеивания» устаревших программных систем, которыми они пользовались годами.
Большая часть программного обеспечения состоит из двух частей кода: небольшого количества кода, требующего большую часть времени выполнения, и большого количества «связующего кода», который редко выполняется. В большинстве случаев время выполнения связующего кода незначительно. Разработчики тратят почти всё своё время на оптимизацию узких мест в вычислениях, иногда даже напрямую используя более низкоуровневые языки (такие как C).
Во многих организациях обычно используется язык, подобный предметно-ориентированному языку вычислений (такому как SAS и R), для исследования новых идей, прототипирования и тестирования, а затем переноса этих идей в более крупную производственную систему (возможно, написанную на Java, C# или C++). Люди постепенно начинают понимать, что Python подходит не только для исследований и прототипов, но и для построения производственных систем. Зачем нужны два языка и среда разработки? Я уверен, что всё больше предприятий будут думать так же, поскольку использование одного и того же инструмента программирования исследователями и инженерами-технологами принесёт значительные организационные выгоды.
Хотя Python отлично подходит для создания аналитических приложений и общих систем, его применимость к некоторым сценариям использования ограничена.
Поскольку Python является интерпретируемым языком программирования, большая часть кода Python работает намного медленнее, чем код, написанный на компилируемых языках (таких как Java и C++). Поскольку время программистов обычно дороже, чем время процессора, многие люди готовы пойти на компромисс. Однако в приложениях с очень низкой задержкой или высокой эффективностью использования ресурсов (например, высокочастотные торговые системы) написание кода на более низком и менее производительном языке, таком как C++, также стоит усилий.
Для многопоточных и параллельных приложений с высоким уровнем параллелизма (особенно тех, которые имеют много вычислительно интенсивных потоков) Python не является идеальным языком программирования. Это связано с тем, что у Python есть компонент, называемый глобальной блокировкой интерпретатора (Global Interpreter Lock, GIL), механизм, предотвращающий одновременное выполнение нескольких инструкций байт-кода Python интерпретатором. Технические причины существования GIL выходят за рамки этой книги. Хотя многим приложениям для обработки больших данных требуется запускать обработку данных на кластере компьютеров в течение короткого периода времени, некоторые ситуации требуют использования однопроцессного многопоточного решения.
Однако это не означает, что Python не может выполнять настоящий многопоточный параллельный код. Например, плагины Python, использующие собственный C или C++, могут работать параллельно без влияния GIL, если они не взаимодействуют с объектами Python слишком часто.
Учитывая, что читатели, незнакомые с экосистемой научных вычислений Python и библиотеками, могут найти эту информацию полезной, я сначала представлю каждую библиотеку вкратце.
NumPy NumPy (сокращение от Numerical Python) является основой для научных вычислений на Python. Большая часть содержания этой книги основана на NumPy и библиотеках, построенных на его основе. Он предоставляет следующие функции (среди прочего):
Быстрый и эффективный многомерный массив объектов ndarray.
Функции для выполнения операций над элементами массива и прямого выполнения математических операций над массивами.
Инструменты для чтения и записи данных на основе массивов на жёстком диске.
Линейная алгебра, преобразование Фурье и генерация случайных чисел.
-Зрелый C API для доступа к данным и вычислительным инструментам NumPy из Python плагинов и собственного кода C, C++ и Fortran.
Помимо предоставления быстрых возможностей обработки массивов, NumPy также играет важную роль в анализе данных как контейнер для передачи данных между алгоритмами и библиотеками. Для числовых данных массивы NumPy гораздо эффективнее, чем встроенные структуры данных Python. Кроме того, библиотеки, написанные на низкоуровневых языках (таких как C и Fortran), могут напрямую манипулировать данными в массивах NumPy без необходимости копировать данные. Поэтому многие инструменты численных вычислений Python либо используют массивы NumPy в качестве основной структуры данных, либо могут беспрепятственно взаимодействовать с ними.
pandas предоставляет быстрые и удобные инструменты для обработки больших объёмов структурированных данных. С момента его появления в 2010 году он сделал Python мощной и эффективной средой для анализа данных. Наиболее часто используемые объекты pandas — это DataFrame, двумерная табличная структура, ориентированная на столбцы, и Series, одномерный объект массива с метками.
pandas сочетает в себе высокую производительность массивов NumPy с гибкостью и мощью обработки данных электронных таблиц и реляционных баз данных (таких как SQL). Он обеспечивает сложные и тонкие возможности индексирования, облегчая перестройку, нарезку и нарезку кубиками, агрегацию и выбор подмножеств данных. Поскольку обработка данных, подготовка и очистка являются наиболее важными навыками в анализе данных, pandas является основным направлением этой книги.
В качестве фона я начал разработку pandas в начале 2008 года, когда работал в AQR Capital Management, фирме по количественному управлению инвестициями, у меня было много рабочих требований, которые нельзя было удовлетворить с помощью какого-либо одного инструмента:
Я хотел создать инструмент, который мог бы реализовать все функции, используя общий язык разработки программного обеспечения. Python был хорошим кандидатом, но в то время не существовало интегрированной структуры данных и инструментов. Я изначально стремился сделать pandas инструментом, подходящим для финансовых и бизнес-аналитиков, с акцентом на глубокие временные ряды и инструменты, подходящие для данных с временными индексами.
Пользователи R, вероятно, не будут незнакомы с именем DataFrame, которое происходит от объекта data.frame в R и его стандартных библиотеках. Но в отличие от Python, data frames построены в R и его стандартной библиотеке. Таким образом, многие функции pandas не принадлежат R или его расширениям.
Название pandas происходит от панельных данных (термин для многомерных структурированных наборов данных в эконометрике) и анализа данных Python (Python data analysis).
matplotlib — самая популярная библиотека для создания графиков и другой двумерной визуализации данных в Python. Она была первоначально создана Джоном Д. Хантером (JDH) и в настоящее время поддерживается большим сообществом разработчиков. Он особенно хорошо подходит для создания диаграмм для публикации. Хотя существуют и другие библиотеки визуализации Python, matplotlib является наиболее широко используемой, и она прекрасно сочетается с другими инструментами экосистемы. Я считаю, что его можно использовать в качестве инструмента визуализации по умолчанию.
Проект IPython изначально был создан Фернандо... Переведённый текст:
Перес в 2001 году создал подпроект, направленный на усиление взаимодействия с Python. В течение следующих 16 лет он стал одним из наиболее важных инструментов стека данных Python. Хотя IPython сам по себе не предоставляет инструменты для вычислений и анализа данных, он может значительно повысить производительность интерактивных вычислений и разработки программного обеспечения. IPython поощряет рабочий процесс «выполнение-исследование», в отличие от рабочего процесса «редактирование-компиляция-выполнение» других программных средств. Он также позволяет легко получать доступ к системным оболочкам и файловым системам. Поскольку большая часть кода анализа данных включает исследование, пробные попытки и повторение, IPython может ускорить работу.
В 2014 году Фернандо и команда IPython объявили о проекте Jupyter, который представляет собой более широкий многоязычный инструмент для интерактивных вычислений. IPython web notebook превратился в Jupyter notebook, теперь поддерживающий 40 языков программирования. IPython теперь может использоваться как ядро Python в Jupyter (режим программирования).
IPython стал компонентом обширного открытого проекта Jupyter — эффективной среды для интерактивного и исследовательского вычисления. Это самый старый и простой режим, который сейчас является усиленной оболочкой для написания, тестирования и отладки кода Python. Вы также можете использовать Jupyter Notebook, интерактивный сетевой блокнот, поддерживающий множество языков, для использования IPython. Блокноты Jupyter и IPython особенно подходят для исследования данных и визуализации.
Блокноты Jupyter также позволяют создавать контент в формате Markdown и HTML, предоставляя способ создания обогащённого текста с кодом и текстом. Другие языки программирования также были интегрированы в ядра Jupyter, позволяя использовать языки, отличные от Python, в среде Jupyter.
Для меня лично большая часть моей работы с Python требует использования IPython, включая запуск, отладку и тестирование кода.
На странице GitHub этой книги вы можете найти Jupyter notebooks со всеми примерами кода из каждой главы.
SciPy — это набор пакетов, предназначенных для решения различных стандартных задач в области научных вычислений, включающий следующие пакеты:
Объединение NumPy и SciPy создаёт довольно полную и зрелую вычислительную платформу, способную обрабатывать разнообразные традиционные задачи научных вычислений.
С момента своего появления в 2010 году scikit-learn стал универсальным инструментом машинного обучения Python. Всего за семь лет он собрал более 1500 участников-вкладчиков. Его подмодули включают:
Вместе с pandas, statsmodels и IPython scikit-learn играет ключевую роль в превращении Python в мощный язык программирования для науки о данных. Хотя эта книга не будет подробно объяснять scikit-learn, я кратко представлю некоторые из его моделей и способы их использования с другими инструментами.
statsmodels — это пакет статистического анализа, созданный профессором статистики Стэнфордского университета Джонатаном Тейлором. Он разработал множество моделей регрессионного анализа, популярных в языке R. Скиппер Сиболд и Йозеф Перктольд официально создали проект statsmodels в 2010 году, после чего собрали большое количество пользователей и участников. Вдохновлённый системой формул R, Натаниэль Смит разработал проект Patsy, обеспечивающий стандартную структуру для формул или моделей statsmodels.
По сравнению со scikit-learn, statsmodels содержит алгоритмы классической статистики и эконометрики. Включает следующие подмодули:
statsmodels больше фокусируется на статистическом выводе, предоставляя неопределённые оценки и p-значения параметров. Напротив, scikit-learn уделяет внимание прогнозированию.
Как и в случае со scikit-learn, я лишь кратко представлю statsmodels, а также способы его использования с NumPy и pandas.
Поскольку люди используют Python для разных целей, не существует универсального подхода к установке Python и его плагинов. Из-за того, что многие читатели не могут полностью удовлетворить потребности научного вычислительного окружения Python, я подробно опишу методы установки для каждой операционной системы. Я рекомендую бесплатный установочный пакет Anaconda. На момент написания этой книги Anaconda предоставляла версии Python 2.7 и 3.6, но это может измениться. Эта книга использует Python 3.6 и поэтому рекомендует выбирать Python 3.6 или более позднюю версию.
Чтобы запустить на Windows, сначала загрузите установочный пакет Anaconda. Рекомендуется следовать инструкциям по установке на странице загрузки Anaconda для Windows, которые могут меняться со временем.
Теперь убедитесь, что настройки верны. Откройте командное окно (cmd.exe
), введите python
, чтобы открыть интерпретатор Python. Вы должны увидеть вывод, похожий на версию Anaconda, например:
C:\Users\wesm>python
Python 3.5.2 |Anaconda 4.1.1 (64-bit)| (default, Jul 5 2016, 11:41:13)
[MSC v.1900 64 bit (AMD64)] on win32
>>>
Чтобы выйти из оболочки, нажмите Ctrl-D (Linux или macOS), Ctrl-Z (Windows) или введите команду exit()
, затем нажмите Enter.
Загрузите установочный пакет OS X Anaconda, который называется примерно так: Anaconda3-4.1.0-MacOSX-x86_64.pkg. Дважды щёлкните файл .pkg, чтобы запустить установочный пакет. Во время работы установочного пакета он автоматически добавит путь выполнения Anaconda в файл .bash_profile
, расположенный в /Users/$USER/.bash_profile
.
Чтобы убедиться в успешности установки, откройте IPython в системной оболочке:
$ ipython
Чтобы выйти из оболочки, нажмите Ctrl-D или введите команду exit()
, а затем нажмите Enter.
Существует множество версий Linux, здесь приведены инструкции по установке для Debian, Ubantu, CentOS и Fedora. Установочный пакет представляет собой сценарий, который необходимо запустить в оболочке. В зависимости от того, является ли ваша система 32-битной или 64-битной, выберите установочный пакет x86 (32-битный) или x86_64 (64-битный). Затем вы получите файл, который будет называться примерно так: Anaconda3-4.1.0-Linux-x86_64.sh
. Установите его с помощью bash:
$ bash Anaconda3-4.1.0-Linux-x86_64.sh
Примечание: Некоторые версии Linux имеют пакеты Python, удовлетворяющие требованиям, доступные через менеджер пакетов, такой как apt. Здесь описывается установка с использованием Anaconda, которая подходит для различных пакетов Linux и упрощает обновление до последней версии.
После принятия лицензии вам будет предложено указать, куда поместить файлы Anaconda. Я рекомендую установить файлы по умолчанию в домашний каталог, например /home/$USER/anaconda
.
Установочный пакет Anaconda может спросить вас, хотите ли вы добавить каталог bin/
в переменную $PATH
. Если у вас возникнут какие-либо проблемы после установки, вы можете изменить файл .bashrc
(или .zshrc
, если вы используете оболочку zsh) следующим образом:
export PATH=/home/$USER/anaconda/bin:$PATH
Сделав это, вы можете открыть новое окно или снова выполнить .bashrc
, используя ~/.bashrc
.
Когда вы читаете эту книгу, вы, возможно, захотите установить дополнительные пакеты Python, которых нет в Anaconda. Обычно вы можете установить их с помощью следующей команды:
conda install package_name
Если эта команда не работает, вы также можете использовать pip, менеджер пакетов:
pip install package_name
Вы можете обновить пакет с помощью команды conda update
:
conda update package_name
Pip можно использовать для обновления с помощью --upgrade
:
pip install --upgrade package_name
В этой книге у вас будет много возможностей попробовать эти команды.
Обратите внимание: При использовании conda и pip для установки пакетов одновременно не используйте pip для обновления пакетов conda, так как это может привести к проблемам с окружением. При использовании Anaconda или Miniconda лучше всего сначала использовать conda для обновления пакетов.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )