Введение в анализ данных на Python для начинающих

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

Если вы новичок в Python, советуем прочитать книги по языку программирования Python

Что такое анализ данных?

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

Существуют различные инструменты, используемые для анализа данных, Python, Microsoft Excel, Tableau, SaS и т.Д., Но в этой статье мы сосредоточимся на том, как анализ данных выполняется в python. Более конкретно, как это делается с библиотекой Python под названием Pandas.

Что такое Pandas?

Pandas - это библиотека Python с открытым исходным кодом, используемая для манипулирования данными. Это быстрая и высокоэффективная библиотека с инструментами для загрузки нескольких видов данных в память. Его можно использовать для изменения формы, маркировки среза, индексации или даже группировки нескольких форм данных.

Структуры данных в Pandas

В Pandas есть 3 структуры данных, а именно:

  • Series
  • DataFrame
  • Panel

Лучший способ различить три из них - это видеть, что один содержит несколько стеков другого. Итак, DataFrame - это стек Series, а Panel - это стек DataFrame.

Series - это одномерный массив.

Стек из нескольких Series составляет двухмерный DataFrame

Стек из нескольких DataFrames образует трехмерный Panel

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

Анализ данных в Pandas

Для этой статьи какие-либо установки не требуются. Мы будем использовать инструмент под названием colaboratory, созданный Google. Это онлайн среда Python для анализа данных, машинного обучения и искусственного интеллекта. Это просто облачный Jupyter Notebook, который поставляется с предустановленным почти каждым пакетом Python, который вам понадобится как специалист по данным.

Теперь перейдите на сайт https://colab.research.google.com/notebooks/intro.ipynb. Вы должны увидеть картинку ниже.

colaboratory

В левом верхнем углу, выберите опцию «File» и нажмите «New notebook». Вы увидите новую страницу записной книжки Jupyter, загруженную в ваш браузер. Первое, что нам нужно сделать, это импортировать Pandas в нашу рабочую среду. Мы можем сделать это, с помощью строки:

import pandas as pd

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

Мы можем сделать это с помощью следующего кода в новой ячейке;

df =  pd.read_csv('https://firebasestorage.googleapis.com/v0/b/ai6-portfolio-abeokuta.appspot.com/o/kc_house_data.csv?alt=media &token=6a5ab32c-3cac-42b3-b534-4dbd0e4bdbc0 ', sep=',')

read_csv Используется, чтобы прочитать файл CSV и мы прошли SEP свойство, чтобы показать, что файл CSV разделяются запятыми.

Также следует отметить, что наш загруженный CSV-файл хранится в переменной df.

Нам не нужно использовать функцию print() в Jupyter Notebook. Мы можем просто ввести имя переменной в нашей ячейке, и Jupyter Notebook распечатает его для нас.

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

Но мы не всегда хотим видеть все данные, иногда просто хотим видеть первые несколько данных и имена их столбцов. Мы можем использовать df.head() функцию, чтобы напечатать первые пять столбцов и df.tail() распечатать последние пять. Вывод любого из двух будет выглядеть как таковой;

colaboratory

Если мы хотим проверить наличие связей между этими несколькими строками и столбцами данных, функция describe() поможет нам в этом.

Запуск df.describe() дает следующий вывод;

colaboratory

Сразу видим, что функция describe() дает среднее, стандартное отклонение, минимальное и максимальное значения.

Также можем проверить форму нашего 2D DataFrame, чтобы узнать, сколько у него строк и столбцов. Можем сделать это, используя df.shape() который возвращает кортеж в формате (строки, столбцы).

Мы также можем проверить имена всех столбцов в нашем DataFrame, используя df.columns().

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

df['price ']

Приведенный выше код возвращает столбец цены, мы можем пойти дальше, сохранив его в новой переменной

price = df['price']

Теперь мы можем выполнить любое другое действие, которое может быть выполнено в DataFrame с нашей ценовой переменной, поскольку оно является лишь подмножеством фактического DataFrame. Мы можем использовать такие функции, как df.head()df.shape() т.д.

Также можем выбрать несколько столбцов, передав список имен столбцов в df как таковой

data = df[['price ', 'bedrooms']]

Приведенный выше выбор столбцов с именами «цена» и «спальни», если мы введем в data.head() новую ячейку, у нас будет следующее

colaboratory

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

df.iloc[50: , 3]

Который возвращает 3-й столбец от 50-го ряда до конца. Это довольно аккуратно и точно так же, как нарезка списков в Python.

Теперь давайте сделаем несколько действительно интересных вещей: в нашем наборе данных о ценах на жилье есть столбец, в котором указывается цена дома, а в другом столбце - количество спален в конкретном доме. Цена на жилье является постоянной величиной, поэтому возможно, что у нас нет двух домов с одинаковой ценой. Но количество спален несколько дискретно, поэтому у нас может быть несколько домов с двумя, тремя, четырьмя спальнями и т.д.

Что если мы хотим получить все дома с одинаковым количеством спален и определить среднюю цену каждой отдельной спальни? Это относительно легко сделать в Pandas:

df.groupby('bedrooms ')['price '].mean()

Вышеупомянутые сначала группируют DataFrame по наборам данных с идентичным номером спальни, используя df.groupby() функцию, затем мы говорим, что мы даем нам только столбец спальни и используемmean() функцию, чтобы найти среднее значение каждого дома в наборе данных.

Что если мы хотим визуализировать вышесказанное? Мы хотели бы иметь возможность проверить, как меняется средняя цена каждого отдельного номера спальни? Нам просто нужно связать предыдущий код с plot() функцией:

df.groupby('bedrooms ')['price '].mean().plot()

У нас будет вывод, который выглядит таковым;

colaboratory

График показывает нам некоторые тенденции в данных. На горизонтальной оси у нас есть различное количество спален (обратите внимание, что более чем один дом может иметь Х количество спален). На вертикальной оси мы имеем среднее значение цен в отношении соответствующего количества спален на горизонтальной ось. Теперь мы можем сразу заметить, что дома с 5-10 спальнями стоят намного дороже, чем дома с 3 спальнями. Также станет очевидным, что дома с 7 или 8 спальнями стоят намного больше, чем дома с 15, 20 или даже 30 комнатами.

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

Отсутствующие данные

Давайте предположим, что я провожу опрос, который состоит из серии вопросов. Я делюсь ссылкой на опрос с тысячами людей, чтобы они могли высказать свое мнение. Моя конечная цель - провести анализ данных на этих данных, чтобы я мог получить некоторые ключевые выводы из этих данных.

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

Pandas предоставляют нам функцию для поиска пропущенных значений в вызываемом DataFrame isnull().

df.isnull()

Оно возвращает DataFrame с логическими значениями, который сообщает нам, действительно ли изначально присутствующие данные отсутствовали. Вывод будет выглядеть таким:

colaboratory

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

Чтобы заполнить все пропущенные значения в DataFrame, мы используем функцию fillna():

df.fillna(0)

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

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

Все примеры в этой статье можно найти здесь.