Узнайте больше о 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 (), передавая имя желаемого ключевого столбца фреймов данных. Это приведет к DataFrameGroupBy
object. Теперь, например, давайте создадим 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
Мы можем применить агрегат к этому DataFrameGroupBy
object, который выполнит соответствующие шаги применения / комбинирования для получения желаемого результата.
Агрегаты
Некоторые из наиболее часто используемых функций агрегирования:
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
😊❤ Счастливого обучения, ребята!
Продолжайте поддерживать! Не забудьте нажать кнопку 👏.
Использованная литература:
- Серия ML - День 6-Панды-Часть 1 - https://medium.com/data-science-everywhere/ml-series-day-6-pandas-for-beginners-part-1-4aacad767d1c
- Шпаргалка по Pandas - http://pandas.pydata.org/Pandas_Cheat_Sheet.pdf
- Документация Pandas - http://pandas.pydata.org/pandas-docs/version/0.15/tutorials.html
- Https://pandas.pydata.org/pandas-docs/stable/
- Серия ML, день 7 - Matplotlib - https://medium.com/data-science-everywhere/ml-series-day-7-matplotlib-package-fb355c6431a.