В сегодняшнем блоге мы собираемся узнать об анализе данных и различных связанных с ним процессах, используя примеры, взятые из моего репозитория GitHub, об исследовательском анализе данных набора данных Титаник, выполненном в Jupyter Notebook, который может быть просматривается по этой ссылке.

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

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

В основном процесс анализа данных состоит из 5 этапов: -

ШАГ 1. Задавайте правильные вопросы

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

Цель анализа набора данных "Титаника" - выяснить факторы, которые повлияли на шансы человека на выживание на борту "Титаника".

ШАГ 2. Обработка данных

«Преодоление данных, иногда называемое изменением данных или предварительной обработкой данных, - это процесс сбора, оценки и очистки« сырых »данных в форме, подходящей для анализа».

Обработка данных состоит из трех подэтапов: -

Сбор данных

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

  • API или веб-парсинг - если необходимые данные доступны на конкретном веб-сайте (ах), мы можем использовать API веб-сайтов (если доступно) или методы веб-скрейпинга для сбора, и хранить данные в нашем локальном хранилище / базах данных. Часто данные, собранные из Интернета, хранятся в формате JSON, и для преобразования JSON в широко используемый формат «.csv» требуется дополнительная обработка.
  • Базы данных. Если необходимые данные доступны в базах данных нашей компании, мы можем легко использовать SQL-запросы для извлечения из них необходимых данных.
  • Сайты, такие как kaggle.com, хранят наборы данных в соответствующих форматах, которые участники могут загружать для тренировок / соревнований.

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

Во-первых, давайте импортируем все библиотеки и набор данных «train.csv», которые нам понадобятся в ходе нашего анализа.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
data=pd.read_csv('train.csv') # Gathering data
data.head()

Оценка данных

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

  • Количество строк и столбцов, присутствующих в наборе данных.
print('Number of rows: ',data.shape[0],'\nNumber of columns: ',data.shape[1])

  • столбцы, присутствующие в наборе данных, а также тип данных и количество ненулевых значений
data.info()

Приведенный выше вывод показывает имена столбцов, а также несколько ненулевых значений и тип данных каждого столбца. Из вышеприведенного вывода ясно, что столбцы Age, Cabin и Embarked имеют пропущенные значения, с которыми нам нужно иметь дело на этапе очистки данных.

Давайте посмотрим, какую информацию представляют эти функции (столбцы): -

  • PassengerId - уникальный идентификатор каждого пассажира.
  • Выжил - двоичная характеристика (состоящая только из 0 или 1 значений), которая указывает, выжил ли этот пассажир или нет. (0 = НЕТ, 1 = ДА).
  • Pclass - указывает социально-экономический статус пассажира. (1 = высший класс, 2 = средний класс, 3 = низший класс).
  • Имя - Имя пассажира.
  • Пол - мужской или женский.
  • Возраст - возраст пассажира.
  • СибСп - количество братьев и сестер / супругов пассажира на борту «Титаника».
  • Перч - количество родителей / детей пассажира на борту «Титаника».
  • Билет - номер билета каждого пассажира.
  • Тариф - тариф, оплачиваемый пассажиром.
  • Кабина - показывает номер кабины, присвоенный каждому пассажиру.
  • Посадка - Показывает порт посадки пассажира. (C = Шербур, Q = Квинс-таун, S = Саутгемптон).

Очистка данных

Очистка данных - это процесс обнаружения и исправления отсутствующих или неточных записей из набора данных. В этом процессе данные, представленные в «сырой» форме (с отсутствующими или неточными значениями), очищаются надлежащим образом, чтобы в выходных данных не было отсутствующих и неточных значений. Поскольку не существует двух одинаковых наборов данных, методы устранения отсутствующих и неточных значений сильно различаются между наборами данных, но в большинстве случаев мы либо заполняем недостающие значения, либо удаляем функцию, с которой невозможно работать.

Интересный факт. Аналитики данных обычно тратят около 70% своего времени на очистку данных.

В наборе данных Титаника, как отмечалось ранее, в столбце возраста есть некоторые недостающие значения, с которыми мы сейчас займемся.

Возраст

data['Age'].describe()

Столбец "Возраст" имеет среднее значение 29,69 и стандартное отклонение 14,52. Это означает, что невозможно просто заполнить недостающие значения как среднее значение, так как стандартное отклонение очень велико. Так что нам понадобится обходной путь. То есть мы сгенерируем список случайных чисел, равный длине пропущенных значений, между (средним стандартным отклонением) и (средним + стандартным отклонением). Затем мы можем заполнить недостающие значения в фрейме данных значениями из списка.

import random
print('Number of Missing values in Age:',data['Age'].isnull().sum())
mean = data['Age'].mean()
std = data['Age'].std()
lower_limit = round(mean-std,0)
upper_limit = round(mean+std,0)
random_list=[]
for i in range(0,177):
    random_list.append(random.randint(lower_limit,upper_limit))
random_list=np.array(random_list)
age=data['Age'].values
k=0
for i,j in enumerate(age):
    if np.isnan(age[i]):
        age[i]=random_list[k]
        k+=1
data['Age']=age
print('Number of missing values in age: ',data['Age'].isnull().sum())

Итак, столбец Возраст был обработан, и все отсутствующие значения были заменены случайными возрастами между (среднее - стандартное отклонение, среднее + стандартное отклонение)

Просмотрите записную книжку Jupyter по предоставленной ссылке, чтобы просмотреть полный процесс очистки данных.

ШАГ 3. АНАЛИЗ ИССЛЕДОВАТЕЛЬСКИХ ДАННЫХ (EDA)

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

Поскольку набор данных Титаника теперь очищен, мы теперь создадим для него несколько примеров EDA.

  1. Проанализируйте с помощью методов визуализации, какому полу было уделено больше внимания во время спасательной операции?
# Adding a new column 's' to store survived status as a string for 
# better visualisations.
data['s']=''
data.loc[(data['Survived']==1),'s'] = 'Survived'
data.loc[(data['Survived']==0),'s'] = 'Not Survived'
sns.countplot(x='Sex',hue='s',data=data)

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

2. Узнайте, повлиял ли класс человека на его вероятность выживания.

sns.barplot(x='Pclass',y='Survived',data=data)
plt.title('Class vs Survived')
plt.show()

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

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

data['Relatives']=data['SibSp']+data['Parch']

Этот шаг известен как Разработка функций. Где мы модифицируем или создаем новые функции из существующих, чтобы лучше объяснить наш анализ.

ПРИМЕЧАНИЕ. Для полного анализа данных просмотрите файл записной книжки Jupyter по этой ссылке.

ШАГ 4: ЗАКЛЮЧЕНИЕ

После завершения этапа анализа следующим шагом является интерпретация нашего анализа и выводы из него.

При интерпретации данных мы должны задать 3 ключевых вопроса:

  • Ответил ли анализ на мой первоначальный вопрос?
  • Были ли в моем анализе какие-либо ограничения, которые повлияли бы на мои выводы?
  • Достаточно ли анализа для принятия решения?

Из анализа огромного набора данных (ссылка) мы смогли выяснить основные факторы, которые повлияли на шансы человека на выживание.

  • Шансы на выживание у мужчин были выше, если они принадлежали к высшему классу. Был в возрасте от 0 до 4 лет или от 18 до 50 лет, на борту «Титаника» путешествовали от 1 до 3 родственников.
  • У женщин был более высокий шанс на выживание независимо от их класса, но если они были в возрасте от 0 до 4 лет или от 15 до 50 лет и имели от 0 до 4 родственников, путешествующих на борту «Титаника».

ШАГ 5. ПРЕДСТАВЛЕНИЕ РЕЗУЛЬТАТОВ

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

Забавный факт

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

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

Таким образом, не всегда возможно выполнить эти шаги линейно.

C ВКЛЮЧЕНИЕ

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