Глубокое погружение в исследовательский анализ данных: набор данных о покемонах
Вступление
Исследовательский анализ данных - один из наиболее важных и полезных аспектов науки о данных и машинного обучения. Это один из самых эффективных подходов к анализу данных с использованием различных методов визуализации.
В этой статье я попытался охватить некоторые из наиболее важных методов визуализации, которые необходимы для лучшего понимания данных.
Я взял один из самых интересных наборов данных о покемонах для всех людей 90-х годов, но не волнуйтесь, если вы не знаете о покемонах, набор данных довольно прост для понимания.
Итак, поехали!
Готовиться
Сегодня в python присутствует множество библиотек визуализации, которые дают потрясающие графики и графики, некоторые из этих библиотек:
- Matplotlib: библиотека двухмерных графиков Python.
- Seaborn: предоставляет интерфейс высокого уровня.
- Plotly: создание интерактивных графиков.
- Боке: это очень интерактивная библиотека.
- ggplot: на основе ggplot R и грамматики графики
В этой статье мы собираемся изучить некоторые из самых замечательных методов визуализации с использованием Matplotlib и Seaborn. Визуализация данных - это первый шаг, после визуализации мы собираемся изучить некоторые важные методы манипулирования данными. Я буду часто использовать pandas и numpy, если вы хотите узнать об этом больше, нажмите здесь.
Установка
#install Matplotlib pip install matplotlib #install Seaborn pip install seaborn
Набор данных
Как упоминалось выше, набор данных относится к покемонам и содержит 13 атрибутов для 800 различных покемонов.
Ссылка на набор данных- › https://www.kaggle.com/abcsds/pokemon
Мы постараемся увидеть, что он может предсказать тип покемона, используя другие атрибуты.
Начало работы
Прежде чем приступить к работе, необходимо помнить о нескольких вещах:
- Проверить отсутствующие значения
- Проверить классовый дисбаланс
- Проверить наличие избыточных атрибутов
- Проверить распределение различных атрибутов
- Проверить выбросы
Импорт данных
Исправление орфографических ошибок
Как видите, имя мега-покемона неправильное, поэтому исправьте имена для мега-эволюционировавших покемонов. [VenusaurMega Venusaur - ›Mega Venusaur]
Чтобы проверить отсутствующие значения:
Отсутствующие значения - большая проблема, если с ними не бороться, модуль missingno - один из отличных способов визуализировать отсутствующие значения, присутствующие в наборе данных. Вы даже можете использовать тепловую карту морского дна, чтобы построить красивый график, отображающий все недостающие значения.
Прочтите статью Визуализация закономерностей появления пропущенных значений с помощью Python »о визуализации пропущенных значений с использованием двух вышеупомянутых подходов.
Что делать дальше после обнаружения недостающего значения?
Найдя недостающие значения, мы можем сделать следующее:
- Удалите строки с пропущенными значениями.
- Выберите глобальное значение, чтобы заменить все отсутствующие значения атрибута.
- Используйте Среднее значение атрибута и замените все отсутствующие значения этим средним.
- Используйте медиану атрибута и замените все отсутствующие значения этой медианой.
- Существуют различные прогностические модели для оценки заполняемого значения.
Вы можете перейти к этой замечательной статье для заполнения пропущенного значения: Как обрабатывать отсутствующие данные
Здесь, поскольку атрибут Type2 имеет 386 пропущенных значений, я просто поместил значения Type1 в Type2 из-за того, что у некоторых Pokemon присутствует только 1 тип, и даже если есть 2 типа, обычно Pokemons имеет 1 тип сильнее, чем 2 типа. , поэтому для отсутствующих значений это сработает.
Для других наборов данных можно выполнить любое из 5 перечисленных выше действий, чтобы заполнить недостающие значения.
Проверьте дисбаланс классов
Есть много способов, которыми вы можете проверить дисбаланс классов, среди которых я предпочитаю использовать либо гистограмму, либо круговую диаграмму всех классов, присутствующих в целевом атрибуте.
Круговая диаграмма - это один из способов представления различных классов, но также можно использовать гистограмму.
Для круговой диаграммы количество каждого класса должно быть известно и загружено в plt.pie, чтобы получить процентное соотношение каждого класса.
Проверьте наличие избыточных атрибутов:
Выбор лучших функций, представляющих набор данных, всегда был самым важным шагом перед помещением наших данных в какую-либо модель машинного обучения.
Есть разные способы выбора лучших функций, некоторые из них:
- Одномерный выбор
- Важность функции
- Матрица корреляции с тепловой картой
Вы можете посетить эту статью Методы выбора функций в машинном обучении с помощью Python для получения дополнительной информации.
Я использовал тепловую карту, которая показывает корреляцию между различными атрибутами. Мы должны проверить наличие высококоррелированных атрибутов на тепловой карте и удалить их.
На данный момент удаление категориальных функций для анализа влияния некатегориальных данных на Type1 и Type2.
Проверить выбросы
Ящичные диаграммы - отличный способ изобразить атрибуты, они показывают диапазоны квартилей и выбросы.
BoxPlots:
Медиана (Q2 / 50-й процентиль): среднее значение набора данных. Первый квартиль (Q1 / 25-й процентиль): среднее число между наименьшим числом и медианой набора данных.
Третий квартиль (Q3 / 75-й процентиль): среднее значение между медианой и наивысшим значением набора данных. Межквартильный диапазон (IQR): от 25-го до 75-го процентиля. усы (показаны синим цветом ) Выбросы (показаны зелеными кружками) «максимум»: Q3 + 1,5 * IQR «минимум»: Q1 -1,5 * IQR
Обратитесь к этой статье Понимание коробчатых графиков, чтобы узнать больше о коробчатых графиках.
Визуализация различных атрибутов
Полосовая диаграмма, Коробчатая диаграмма и Гистограмма, Ройные диаграммы, Факторные диаграммы , и Радарная диаграмма - отличный способ визуализировать различные атрибуты в наборе данных.
Функция принимает Тип1 или Тип2 (цель) и рисует полосовую диаграмму и прямоугольную диаграмму, соответствующие атрибуту, выбранному в функции, кроме того, прямоугольная диаграмма также строится с использованием среднего взятого атрибута, сгруппированного по Type1 или Type2 (Target).
Проверка категориальных атрибутов: атрибуты «Генерация» и «Легендарный» влияют на набор данных.
Их можно нарисовать самостоятельно, но это также хорошее дополнение к рамке или скрипке сюжета в тех случаях, когда вы хотите показать все наблюдения вместе с некоторым представлением основного распределения.
Кроме того, мы должны увидеть, как количество покемонов каждого типа зависит от поколения, как показано ниже:
Мы видели, как Типы покемонов связаны с поколением и как каждое поколение покемонов влияет на различные атрибуты в сюжете роя.
Теперь мы увидим влияние Легендарного на различные атрибуты. Я использовал Фактор-график, чтобы четко различать легендарного и нелегендарного покемона.
Из приведенного выше графика видно, что легендарный покемон (оранжевый) имеет более высокое общее количество, чем нелегендарный покемон (синий ).
Сравнение разных покемонов
- Гистограмма для каждого атрибута для сравнения двух разных покемонов.
- Радарная диаграмма для сравнения двух разных покемонов.
#Code for Radar Chart pok1=daily_Data.loc[pokemon1] pok2=daily_Data.loc[pokemon2] # Libraries import matplotlib.pyplot as plt import pandas as pd from math import pi fig = plt.figure(figsize=(10, 10)) # Set data df = pd.DataFrame({ 'group': ['A','B'], 'HP': [pok1["HP"], pok2["HP"]], 'Attack': [pok1["Attack"], pok2["Attack"]], 'Defense': [pok1["Defense"], pok2["Defense"]], 'Sp. Atk': [pok1["Sp. Atk"], pok2["Sp. Atk"]], 'Sp. Def': [pok1["Sp. Def"], pok2["Sp. Def"]], 'Speed': [pok1["Speed"], pok2["Speed"]] }) #maximum among all maximum=max([pok1["Attack"], pok2["Attack"],pok1["Defense"], pok2["Defense"],pok1["Sp. Atk"], pok2["Sp. Atk"], pok1["Sp. Def"], pok2["Sp. Def"],pok1["Speed"], pok2["Speed"]]) # ------- PART 1: Create background # number of variable categories=['HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed'] N = len(categories) #to select the range, means till where the graph can go for a variable. aa=[] aaa=[] for i in range(maximum): aa.append(i*10) aaa.append(str(i*10)) # What will be the angle of each axis in the plot? (we divide the plot / number of variable) angles = [n / float(N) * 2 * pi for n in range(N)] angles += angles[:1] # Initialise the spider plot ax = plt.subplot(111, polar=True) # If you want the first axis to be on top: ax.set_theta_offset(pi / 2) ax.set_theta_direction(-1) # Draw one axe per variable + add labels labels yet plt.xticks(angles[:-1], categories,size=15,color="black") # Draw ylabels ax.set_rlabel_position(0) plt.yticks(aa, aaa, color="black", size=15) plt.ylim(0,maximum) # ------- PART 2: Add plots # Plot each individual = each line of the data # Ind1 values=df.loc[0].drop('group').values.flatten().tolist() values += values[:1] ax.plot(angles, values, linewidth=4, linestyle='solid', label=pokemon1,color=color1) ax.fill(angles, values, color1, alpha=0.1) # Ind2 values=df.loc[1].drop('group').values.flatten().tolist() values += values[:1] ax.plot(angles, values, linewidth=4, linestyle='solid', label=pokemon2,color=color2) ax.fill(angles, values, color2, alpha=0.1) # Add legend plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))
Код для всей статьи можно найти на https://www.kaggle.com/ayush01/complete-pokemon-stats-visualization