Узнайте больше о Pandas!

Добро пожаловать во вторую часть серии руководств по Pandas. Часть 1 находится здесь.
Я рад, что вы все еще со мной на пути к испытанию # 100DaysOfMLCode. Для тех, кто попадает прямо на эту страницу, вот мое краткое введение в Pandas,

Краткое введение в Pandas

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

В этом уроке мы рассмотрим,

  • Обработка недостающих данных с помощью Pandas
  • Группа по
  • Агрегаты
  • И последнее, но не менее важное: визуализация.

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

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

Это неверно! Мы должны обрабатывать эти данные, даже не тратя ни копейки!
Pandas - наш помощник в этом. Давай позвоним ему на помощь!

# Импорт Pandas и NumPy
импортировать pandas как pd
импортировать numpy как np

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

name = pd.Series (['Peter', 'John', 'Mathew', 'Brick', 'Alex'])
age = pd.Series ([24, np.nan , 18, np.nan, 34])
# Используя np.nan, мы вручную присвоили значения NaN

df = pd.DataFrame ({‘Name’: name, ‘Age’: age})
print (df)

Как видите, np.nan используется для указания отсутствующих нулевых значений, которые можно найти в DataFrame как NaN - не число.

    Age    Name
0  24.0   Peter
1   NaN    John
2  18.0  Mathew
3   NaN   Brick
4  34.0    Alex

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

# Поиск пропущенных значений

print («Поиск пропущенных значений \ n \ n», df.isnull ())

# Чтобы найти конкретный столбец,
print («Чтобы найти конкретный столбец \ nВозвращает true, если конкретное значение равно null \ n», df ['Age']. Isnull ())
# Возвращает true если конкретное значение равно нулю

print («Возвращает истину, если конкретное значение не равно нулю \ n», df [‘Age’]. notnull ())
# Возвращает истину, если конкретное значение не равно нулю

Finding the missing values

      Age   Name
0  False  False
1   True  False
2  False  False
3   True  False
4  False  False
To find in particular column specifically
Returns true if particular value is null
0    False
1     True
2    False
3     True
4    False
Name: Age, dtype: bool
Returns true if particular value is not null
0     True
1    False
2     True
3    False
4     True
Name: Age, dtype: bool

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

print ('Количество ненулевых значений \ n', df ['Age']. notnull (). sum ())
print ('Количество нулевых значений \ n', df ['Age']. isnull (). сумма ())

Count of non-null values
 3
Count of null values
 2

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

Заменить NaN на скалярное значение
print («Перед заменой значения на 0 \ n», df)

print («NaN заменяется средним значением:»)
print (df.fillna (0))
Bang! NaN исчезли.

Before replacing value with 0 
     Age    Name
0  24.0   Peter
1   NaN    John
2  18.0  Mathew
3   NaN   Brick
4  34.0    Alex
NaN replaced with Avg value:
    Age    Name
0  24.0   Peter
1   0.0    John
2  18.0  Mathew
3   0.0   Brick
4  34.0    Alex

Замена на среднее значение
avg = df ['Age']. mean ()
avg = round (avg, 0) # Для округления среднего значения
print ('Перед заменой значения на среднее значение других значений \ n', df)
print («NaN заменено на среднее значение:»)
print (df.fillna (avg))

Before replacing value with mean of other values
     Age    Name
0  24.0   Peter
1   NaN    John
2  18.0  Mathew
3   NaN   Brick
4  34.0    Alex
NaN replaced with Avg value:
    Age    Name
0  24.0   Peter
1  25.0    John
2  18.0  Mathew
3  25.0   Brick
4  34.0    Alex

# Заполнение NaN значениями вперед и назад
# Заполните NaN значением рядом с ним
print (df.fillna (method = 'backfill'))
# Заполните NaN предыдущим значением к нему
print (df.fillna (method = 'pad'))

Age    Name
0  24.0   Peter
1  18.0    John
2  18.0  Mathew
3  34.0   Brick
4  34.0    Alex
    Age    Name
0  24.0   Peter
1  24.0    John
2  18.0  Mathew
3  18.0   Brick
4  34.0    Alex

# Удаление отсутствующего значения
print (‘Перед отбрасыванием строк с NaN-значением \ n’, df)
print (‘\ nПосле отбрасывания NaN-значений \ n’, df.dropna ())

Before dropping NaN valued rows
     Age    Name
0  24.0   Peter
1   NaN    John
2  18.0  Mathew
3   NaN   Brick
4  34.0    Alex

After dropping NaN values
     Age    Name
0  24.0   Peter
2  18.0  Mathew
4  34.0    Alex

# Чтобы заменить значение в DataFrame
print (df.replace ({24:10}))

Age    Name
0  10.0   Peter
1   NaN    John
2  18.0  Mathew
3   NaN   Brick
4  34.0    Alex

Группа по

Во многих случаях вам может потребоваться объединить данные в группы по какой-либо метке или индексу: это реализовано в так называемой операции groupby. GroupBy - это собирательный термин, выполняющий операции разделения, применения, объединения над данными. 1) Он разделяет объект, применяет функцию и объединяет результат.

Сила GroupBy в том, что он абстрагирует эти шаги.

Базовую операцию разделения-применения-объединения можно вычислить с помощью метода groupby (), передавая имя желаемого ключевого столбца фреймов данных. Это приведет к DataFrameGroupByobject. Теперь, например, давайте создадим DataFrame, содержащий оценки разных людей из другой категории.

data = {'Имя': ['Питер', 'Джон', 'Кером', 'Мэтью', 'Пол',
'Нил', 'Ортон', 'Венчик', 'Алекс', 'Хасан '],
«Возраст»: [12, 22, 62, 23, 33, 46, 19, 51, 29, 45],
«Категория»: [«Молодой», «Молодой», «Взрослый», «Средний», «Средний», «Взрослый», «Молодой», «Взрослый», «Молодой», «Взрослый»],
«Total_Score»: [86,79,63,83, 41,82,56,78,64,71]}
df = pd.DataFrame (данные)

Age Category    Name  Total_Score
0   12    Young   Peter           86
1   22    Young    John           79
2   62    Adult  Kerome           63
3   23      Mid  Mathew           83
4   33      Mid    Paul           41
5   46    Adult    Niel           82
6   19    Young   Orton           56
7   51    Adult   Whisk           78
8   29    Young    Alex           64
9   45    Adult   Hasan           71

# Группировка записей на основе «Категории» - молодые, средние, взрослые
print (df.groupby («Категория»))

<pandas.core.groupby.DataFrameGroupBy object at 0x000001C7FB07B8D0>

Для просмотра групп объекта DataFrameGroupBy нам нужно добавить функцию groups.

# Группировка на основе одного столбца
print (df.groupby (‘Category’). Groups)

{'Adult': Int64Index([2, 5, 7, 9], dtype='int64'), 
 'Mid': Int64Index([3, 4], dtype='int64'), 
 'Young': Int64Index([0, 1, 6, 8], dtype='int64')}

Это ясно показывает, что в DataFrame есть три группы.

# Группировка на основе нескольких столбцов
print (df.groupby ([‘Category’, ’Total_Score’]). Groups)

{('Adult', 63): Int64Index([2], dtype='int64'), 
 ('Adult', 71): Int64Index([9], dtype='int64'), 
 ('Adult', 78): Int64Index([7], dtype='int64'), 
 ('Adult', 82): Int64Index([5], dtype='int64'), 
 ('Mid', 41): Int64Index([4], dtype='int64'), 
 ('Mid', 83): Int64Index([3], dtype='int64'), 
 ('Young', 56): Int64Index([6], dtype='int64'), 
 ('Young', 64): Int64Index([8], dtype='int64'), 
 ('Young', 79): Int64Index([1], dtype='int64'), 
 ('Young', 86): Int64Index([0], dtype='int64')}

Получение данных каждой группы

# Переход по каждой группе
group = df.groupby (‘Category’)
для имени, grp в группе:
print (name)
print (grp)

Adult
   Age Category    Name  Total_Score
2   62    Adult  Kerome           63
5   46    Adult    Niel           82
7   51    Adult   Whisk           78
9   45    Adult   Hasan           71
Mid
   Age Category    Name  Total_Score
3   23      Mid  Mathew           83
4   33      Mid    Paul           41
Young
   Age Category   Name  Total_Score
0   12    Young  Peter           86
1   22    Young   John           79
6   19    Young  Orton           56
8   29    Young   Alex           64

Используя метод get_group (), мы можем выбрать одну группу.

print (group.get_group (‘Young’))

   Age Category   Name  Total_Score
0   12    Young  Peter           86
1   22    Young   John           79
6   19    Young  Orton           56
8   29    Young   Alex           64

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

Агрегаты

Некоторые из наиболее часто используемых функций агрегирования:

count()Общее количество товаров

печать (group.count ())

Age  Name  Total_Score
Category                        
Adult       4     4            4
Mid         2     2            2
Young       4     4            4

first(), last()Первый и последний элемент

печать (group.first ())
печать (group.last ())

Age    Name  Total_Score
Category                          
Adult      62  Kerome           63
Mid        23  Mathew           83
Young      12   Peter           86
          Age   Name  Total_Score
Category                         
Adult      45  Hasan           71
Mid        33   Paul           41
Young      29   Alex           64

mean(), _9 _, _ 10_ Расчет среднего, среднего, минимального и максимального значения

print (group ['Total_Score']. mean ())
print (group ['Total_Score']. median ())
print (group ['Total_Score']. max ())
print (группа ['Total_Score']. min ())

Category
Adult    73.50
Mid      62.00
Young    71.25
Name: Total_Score, dtype: float64
Category
Adult    74.5
Mid      62.0
Young    71.5
Name: Total_Score, dtype: float64
Category
Adult    82
Mid      83
Young    86
Name: Total_Score, dtype: int64
Category
Adult    63
Mid      41
Young    56
Name: Total_Score, dtype: int64

std(), var()Стандартное отклонение и отклонение
prod()P Произведение всех элементов
sum()Сумма всех элементов

Несколько агрегатов в одном заявлении

print (группа [‘Total_Score’]. agg ([np.sum, np.prod, np.std, np.var]))

sum      prod        std         var
Category                                      
Adult     294  28609308   8.346656   69.666667
Mid       124      3403  29.698485  882.000000
Young     285  24349696  13.696107  187.583333

Визуализация

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

«Одна картинка стоит десяти тысяч слов»

В Python есть несколько библиотек для создания привлекательных и наглядных графиков, таких как matplotlib, seaborn и т. Д. В этом руководстве мы просто создадим шумиху о том, как будут выглядеть сгенерированные базовые графики и основные типы графиков. Подробную версию мы изучим в следующем уроке, посвященном визуализации.

Теперь давайте создадим DataFrame и сгенерируем различные типы графиков.

df1 = pd.DataFrame (np.random.randn (5,4), columns = list ([‘Sample1’, ’Sample2», ’Sample3 ',’ Sample4']))
print (df1)

Sample1   Sample2   Sample3   Sample4
0 -0.396650 -0.620093  0.676936  0.515243
1 -0.546963  0.760902  0.869737  0.887879
2 -0.954690  0.906193 -1.395176 -0.337531
3  0.699569  0.420435  0.545051  0.526257
4  0.757374  0.182374  0.343897  0.103361

Функция plot () просто отображает данные на линейном графике.

df1.plot ()
plt.show ()

df1.plot.bar () # Создает гистограмму
plt.show ()

df1.plot.bar (stacked = True) # Создает столбчатую диаграмму со стеками
plt.show ()

Чтобы создать горизонтальную гистограмму

df1.plot.barh (stacked = True)
plt.show ()

Гистограммы можно построить с помощью метода plot.hist (). Мы должны указать количество бункеров, в которых будут сгруппированы данные.

df1.plot.hist (bins = 10)
plt.show ()

Для создания коробчатых диаграмм

df1.plot.box ()
plt.show ()

Чтобы создать точечные диаграммы

df1.plot.scatter (x = ’Sample1 ', y =’ Sample2')
plt.show ()

Итак, теперь мы знаем некоторые основные графы и их создание для Pandas DataFrame.
Ура! 😉✌ Вы познакомитесь с созданием Pandas DataFrame и поэкспериментируете с ним. Подводя итог Частям 1 и 2 Pandas, вы узнали: Введение в Pandas, Серии, DataFrame, Основные операции, Индексирование и Срезы, Обработку недостающих данных с помощью Pandas, Операции GroupBy, Агрегации и Концепции визуализации.

Престижность! Вы растете!

# 100DaysOfMLCode
😊❤ Счастливого обучения, ребята!

Продолжайте поддерживать! Не забудьте нажать кнопку 👏.

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

  1. Серия ML - День 6-Панды-Часть 1 - https://medium.com/data-science-everywhere/ml-series-day-6-pandas-for-beginners-part-1-4aacad767d1c
  2. Шпаргалка по Pandas - http://pandas.pydata.org/Pandas_Cheat_Sheet.pdf
  3. Документация Pandas - http://pandas.pydata.org/pandas-docs/version/0.15/tutorials.html
  4. Https://pandas.pydata.org/pandas-docs/stable/
  5. Серия ML, день 7 - Matplotlib - https://medium.com/data-science-everywhere/ml-series-day-7-matplotlib-package-fb355c6431a.