Заинтересованы в анализе данных, но не знаете, с чего начать? Начните здесь!

Как студент, изучающий науку о данных, меня интересует тема анализа данных, поэтому я поискал в Интернете, чтобы попытаться получить некоторый опыт анализа данных из первых рук.

Мои усилия были напрасны. Онлайн-курсы охватывают сложные темы, связанные с данными, такие как машинное обучение, глубокое обучение, нейронные сети или искусственный интеллект. Средняя школа - это тупик: учителя преподают только популярные языки информатики, такие как Java или Python.

Это руководство предназначено для всех, кто оказался в этой неприятной ситуации, а также для тех, кто хочет изучить базовые навыки Python для анализа данных.

В этой статье (часть первая) мы будем изучать pandas - программную библиотеку Python для науки о данных. Мы также будем изучать matplotlib - популярную библиотеку визуализации данных Python - в другой статье (часть вторая). Мы изучим важные методы и функции из pandas и Matplotlib, которые помогут нам очищать, манипулировать и визуализировать наши наборы данных. Надеюсь, этот опыт даст вам представление о том, что такое анализ данных.

Предпосылки

Это руководство предназначено для людей, которые имеют базовые знания и опыт работы с Python, статистикой и математикой.

СОДЕРЖАНИЕ

Установка Anaconda-Navigator и Pandas

Начните с установки Anaconda-Navigator по ссылке здесь. Я буду загружать 64-разрядный графический установщик для macOS - вам следует загрузить правильный установщик в зависимости от ваших предпочтений и компьютера. Anaconda-Navigator позволяет работать со многими первоклассными вычислительными приложениями - JupyterLab, Jupyter Notebook, Spyder, Gluevis и многими другими. В нашем проекте мы будем выполнять все задачи и программирование в JupyterLab.

Когда вы закончите установку, откройте Anaconda-Navigator. Главный экран навигатора должен выглядеть примерно так:

Далее мы установим панд. Есть несколько способов установки панд - через Anaconda, Miniconda и т. Д. Обязательным условием является то, что на вашем компьютере уже установлен Python. Я буду использовать терминал и pip для установки панд. Если вы не установили pip или у вас возникли проблемы с установкой pip, ознакомьтесь с этой статьей для получения помощи.

Начните с открытия терминала и введите следующую команду:

pip install pandas

Это должно инициировать установку пакета pandas Python на ваш компьютер. Установка пакета займет несколько минут. Когда вы закончите, поздравьте себя - вы на шаг ближе к изучению основ панд.

Знакомство с JuyterLab

Следующая часть нашего руководства полностью выполняется в JupyterLab. Мы можем начать с запуска JupyterLab с главного экрана Anaconda-Navigator.

Создайте новую пустую папку, щелкнув второй значок в верхнем левом углу (который сочетает в себе папку и знак плюса). Перейдите к содержимому новой папки - она ​​должна быть пустой и называться «Папка без названия». Нажмите кнопку Python 2 под «Блокнотом», чтобы создать новый Untitled.ipynb. Я планирую использовать Python 2 в этом руководстве, поэтому, если вы используете Python 3, опасайтесь ошибок, которые могут возникнуть при использовании синтаксиса Python 2 и Python 3.

Переименуйте папку без названия и файл Untitled.ipynb, чтобы упорядочить рабочее пространство. Я назову свою папку «LearningData» , а мой .ipynb файл «dataAnalysis».

В вашей новой папке у вас должен быть .ipynb файл без написанного кода. Найдите время, чтобы поэкспериментировать с JupyterLab и привыкнуть к окружающей среде. Когда вы закончите, мы можем перейти к следующему разделу.

Изучение структур данных в Pandas

Прежде чем мы погрузимся в анализ данных, я должен сначала кратко объяснить структуры данных в пандах. Есть два распространенных способа хранения данных:

Серия (1-мерная)

Series - одномерные массивы с возможностью хранения данных любого типа. Примером Series может быть:

Как мы видим, мы можем манипулировать индексами нашей Series структуры данных. Есть несколько методов и способов, которые позволяют вам манипулировать Series структурами данных, такими как сложение, вычитание, умножение, деление. К сожалению, это настолько сложно, насколько это возможно с Series.

DataFrames (двухмерные)

DataFrames - это двухмерные массивы с возможностью хранения данных любого типа. Пример простого DataFrame:

Как мы видим, мы можем управлять индексами и столбцами нашей DataFrame структуры данных, что является единственным различием между Series и DataFrame. Хотя есть и другие способы хранения данных (например, Панели, трехмерный способ хранения данных), в этой статье мы сосредоточимся только на Series и DataFrames, поскольку это две структуры данных, которые в основном используются в пандах.

Я связал статью здесь для тех, кто заинтересован и хочет глубже погрузиться в изучение структур данных панд. Однако, поскольку эта статья предназначена для начинающих, это все, что я собираюсь рассказать о структурах данных в пандах.

Скачивание и чтение нашего набора данных

Для этой демонстрации я буду использовать набор данных CSV SAT (College Board) 2010 School Level Results (значения, разделенные запятыми), взятый из data.gov - коллекции наборов данных правительства США с открытым исходным кодом. Этот набор данных включает в себя результаты SAT всех выпускников Нью-Йорка для класса 2010 года. Данные из набора данных (названия школ, выпускной класс и т. Д.) Были собраны с помощью анкет, запрошенных советом колледжа во время SAT.

Во-первых, я переименую свой файл .csv в «sat.csv», чтобы нам было проще. Вот как ваш импортированный набор данных должен выглядеть в JupyterLab:

Чтобы начать кодирование в JupyterLab, мы должны сначала импортировать панды и Matplotlib, чтобы использовать функции и методы, расположенные внутри наших библиотек Python. Следующие строки кода сделают то, что мы хотим:

import pandas as pd

Мы можем использовать read_csv() function в пандах для чтения нашего CSV-файла. Он читает ваши файлы .csv и помещает все данные в DataFrame. Убедитесь, что ваш набор данных находится в том же каталоге, что и ваш .ipynb файл, чтобы pandas успешно прочитал ваши файлы .csv.

Приведенный ниже код прочитает ваш набор данных CSV:

data = pd.read_csv('sat.csv')

Если данные, которые вы импортировали, еще не организованы, как мои, вы можете использовать следующую строку кода, чтобы прочитать свой набор данных:

data = pd.read_csv('your data', sept = 'whatever your data is separated by', names = ['the name of each of your separated columns])

Просмотр и наблюдение за нашими данными

Чтобы узнать, успешно ли работает наша программа, мы можем просто ввести следующую строку кода, отображающую все содержимое data:

data

Ваш результат должен выглядеть примерно так, как на двух изображениях ниже.

Другой способ просмотреть наши DataFrames - использовать функцию head(), которая дает вам предварительный просмотр вашего DataFrames. Эта функция часто используется для отладки и проверки того, что части вашей программы работают так, как вы хотели. Я предпочитаю этот метод, а не ввод имени переменной вашего DataFrame, но это полностью зависит от вас.

data.head(10)

Строка выше покажет нам первые десять строк data DataFrame. Имейте в виду, data.head(n) покажет нам первые n строк нашего data DataFrame, а data.head() покажет первые пять строк нашего data DataFrame.

Отличная работа! Мы видим, что наш набор данных, который мы получили с data.gov, состоит из шести столбцов: DBN, School Name, Number of Test Takers, _34 _, _ 35_ и Writing Mean.

Если бы мы предположили, что n, x и y - все положительные целые числа, то вы также можете использовать data[:n] для просмотра первых n строк вашего data DataFrame или data[x:y] для просмотра строк от x до y, но не включая y.

data[:-1] предоставит вам все строки вашего data DataFrame, кроме последней строки вашего DataFrame.

Наконец, data[data['Number of Test Takers'] >= 100].head() предоставит вам все строки в вашем data DataFrame, в столбце Number of Test Takers которых есть 100 или более участников теста. В общем, data[your condition].head() вернет строки, которые удовлетворяют только вашему условию.

Чтобы увидеть описательную статистику наших данных, мы можем использовать функцию describe() в пандах. Приведенный ниже код генерирует некоторые базовые статистические вычисления, которые помогают нам визуализировать наши данные:

data.describe()

Есть несколько наблюдений, которые мы можем сделать сразу после просмотра этих данных. Например, наибольшее количество тестируемых в конкретной школе составляло 1047. Наивысшее среднее значение критического чтения, среднего математического и письменного в конкретной школе составило 674, 735 и 678, соответственно (помните, эти баллы по предметам для SAT не должен ограничиваться одной школой). Глядя на стандартные отклонения результатов тестов, кажется, что математическое среднее значение является наиболее разбросанным, в то время как среднее значение для записи было наименее разбросанным.

Кроме того, вы можете найти медианное значение для каждого отдельного столбца данных с помощью median() function. Например:

Поразительно, что компьютеры могут выполнять все утомительные вычисления, поэтому вам не нужно делать их самостоятельно.

Мы также можем использовать info() function для просмотра важной информации о нашем DataFrame.

data.info()

Используя приведенную выше функцию, мы получаем следующий результат:

Если мы посмотрим на описание нашего DataFrame выше, мы увидим, что есть 460 записей (или строк) и шесть столбцов (или столбцов) данных. Мы знаем, что наш DataFrame - это стол размером 460 х 6.

Интересно, что, похоже, всего 386 ненулевых значений для Number of Test Takers, Critical Reading Mean, Mathematics Mean и Writing Mean, но 460 ненулевых значений для DBN и School Name. Вероятная причина, по которой это произошло, заключается в том, что некоторые школы не смогли или решили не сообщать свои данные о результатах SAT. Таким образом, каждое из DataFrame значений этой школы, кроме DBN и School Name, равно нулю (то есть значение отсутствует).

Python автоматически заметит это и не будет учитывать школы с нулевыми значениями в своих вычислениях. Однако при желании мы можем вручную удалить все школы с нулевыми значениями, используя dropna() function ниже.

data = data.dropna()

Мы видим, что сейчас 386 строк, когда мы удалили все школы с нулевыми значениями. Более того, если я просматриваю информацию о нашей новой редакции data DataFrame, она такая же, как и раньше.

Если вы хотите получить доступ к определенным значениям в вашем DataFrame, вы используете либо .loc[] function, либо .iloc[] function в пандах. Разница между ними в том, что .loc[] использует метки в вашем DataFrame, а .iloc[] использует индексы вашего DataFrame. Вот пример:

К сожалению, поскольку имя моего первого индекса 0, я не могу выделить разницу между .iloc[] и .loc[]. Однако, если имя моего значения в первом индексе было Henry, я бы написал data.loc['Henry'] или data.iloc[0], чтобы получить доступ к первому элементу моего DataFrame.

Вы можете сортировать свои данные с помощью sort_values() function. Приведенный ниже код отсортирует DataFrame от наибольшего к наименьшему среднему значению записи:

data.sort_values('Writing Mean', ascending = False)

Как видите, все значения в нашем DataFrame отсортированы от наивысшего к наименьшему среднему значению записи. Если вы хотите отсортировать его от наименьшего к наибольшему, удалите ascending = False. Нам не нужно указывать ascending = True , потому что библиотека pandas использует ascending = True в качестве параметра по умолчанию. Для сортировки с использованием разных столбцов измените 'Writing Mean' на 'whatever your intended column name is'.

Это одни из самых важных инструментов в pandas для просмотра и наблюдения за вашим набором данных. В следующем разделе мы узнаем, как манипулировать нашими данными и формировать выводы на основе наших манипуляций с данными.

Управление нашим DataFrame

Основные цели этой части руководства - создать новый столбец в пандах, который будет содержать общее среднее значение SAT каждой школы, и изучить некоторые полезные методы очистки данных в пандах.

Первая часть включает извлечение важной информации из набора данных, который мы собрали в Интернете. Поскольку в нашем sat.csv нет столбца среднего общего количества баллов за SAT, нам было бы полезно узнать среднее значение общих баллов за SAT в конкретной школе. Это было бы чрезвычайно полезно для новых семей, которые ищут школы с сильными преподавателями.

В приведенном ниже коде будет создан новый столбец под названием «Среднее значение общего SAT-балла», в котором суммируются три отдельных промежуточных балла каждой школы:

data['Total SAT Score Mean'] = data['Critical Reading Mean'] + data['Mathematics Mean'] + data['Writing Mean']

При создании нового столбца в вашем DataFrame просто напишите data['name of your new column']. Убедитесь, что вы установили в новом столбце соответствующие значения.

На этом этапе наш DataFrame должен выглядеть примерно так:

Теперь мы можем отсортировать Total SAT Score Mean от самого высокого до самого низкого, чтобы увидеть некоторые из академически сильных школ Нью-Йорка.

data.sort_values('Total SAT Score Mean', ascending = False).head(10)

Выполнение приведенного выше кода дает мне:

Потрясающие! Благодаря нашим манипуляциям с данными мы смогли выяснить, что средняя школа Стуйвесант была лучшей по результатам теста SAT по сравнению с другими школами Нью-Йорка. Кроме того, если вы хотите избавиться от школ, в которых тестируется менее 100 человек, чтобы проводить более точные наблюдения, вы можете написать:

data[data['Number of Test Takers'] > 100].sort_values('Total SAT Score Mean', ascending = False).head(10)

Вот что должно получиться:

Поэтому мы можем предложить эти десять средних школ семье, которая ищет школу в Нью-Йорке, в которой основное внимание уделяется академическим образованиям. Конечно, сейчас эти данные несколько устарели, но если бы это был 2010 год, этот набор данных был бы очень полезен для некоторых семей, которые хотят поселиться в Нью-Йорке.

Большой. Давайте перейдем к паре простых и легких методов очистки данных, обычно используемых в пандах.

Первый метод очистки данных, который мы изучим, - это удаление столбцов и строк в вашем DataFrame. Для удаления столбцов в пандах используйте метод drop() function или del[]. Оба способа работают нормально, однако метод del[] короче.

Например, если бы я хотел удалить столбец DBN в моем наборе данных, я мог бы сделать это с помощью метода drop():

data.drop(['DBN'], axis = 1)

Я мог бы также использовать метод del[], чтобы получить точно такие же результаты:

del data['DBN']

При использовании функции head() оба выхода должны выглядеть примерно так:

Удаление строк также включает использование метода drop(). Если мы хотим удалить первую строку нашего DataFrame, мы можем выполнить следующую строку кода:

data = data.drop(data.index[0])

Наш результат выглядит так:

Мы ясно видим, что наш первый индекс пропал, что означает, что наш код работал.

Если вы хотите переименовать заголовки столбцов, вы можете использовать rename() function. Чтобы увидеть пример, давайте запустим следующую строку кода:

data.rename(columns={"School Name": "A", "Number of Test Takers": "B"})

Мы переименовали столбцы School Name и Number of Test Takers нашего DataFrame в A и B соответственно. Наши первые десять рядов должны выглядеть так:

Методы, описанные в этом разделе, имеют решающее значение для управления вашими данными в вашем путешествии по науке о данных. Хотя эти функции нетрудно понять, они очень важны и весьма полезны при анализе данных.

Pandas - чрезвычайно полезная библиотека Python для анализа данных. Вместо того, чтобы анализировать данные самостоятельно, вы можете запрограммировать на это свой компьютер. Мы узнали несколько новых методов в пандах, которые помогут вам читать, просматривать, описывать, манипулировать и очищать ваши наборы данных. В следующей статье мы сосредоточимся на визуализации данных в Matplotlib и создадим несколько простых графиков нашего импортированного набора данных.

Вторая часть этой серии уже вышла! Обязательно ознакомьтесь с ним, поскольку он завершает наше руководство по анализу данных для начинающих. Ссылка на эту статью - здесь.

Если у вас есть какие-либо вопросы, задавайте их в разделе комментариев внизу, и мы увидимся в следующей статье. Спасибо за прочтение!

использованная литература