Следующая тема: БРу. Анализ данных и оформление результатов

Вернуться в раздел: Базовый Python

Вернуться в оглавление: Я.Практикум

10. Предварительная обработка данных.

 10.1 От осины не родятся апельсины. Принцип GIGO

 10.2 Поиск проблем в данных

 10.3 Переименование столбцов

Задача №1 

Выведите на экран названия столбцов таблицы в df.

import pandas as pd
df = pd.read_csv('music_log.csv')
print(df.columns)

Задача №2

Измените названия столбцов

import pandas as pd
df = pd.read_csv('music_log.csv')
df = df.rename(columns={'  user_id':'user_id','total play':'total_play','Artist':'artist'})

Задача №3

Проверьте результат изменений. Запросите для df атрибут columns.

import pandas as pd
df = pd.read_csv('music_log.csv')
df = df.rename(columns={'  user_id':'user_id','total play':'total_play','Artist':'artist'})
print(df.columns)

 10.4 Обработка пропущенных значений

 10.5 Яндекс музыка. Пропущенные значения

Задача №1

Получите общую информацию о датасете df с помощью соответствующего метода.

import pandas as pd
df = pd.read_csv('music_log_upd_col.csv')
df.info()

Задача №2

import pandas as pd
df = pd.read_csv('music_log_upd_col.csv')
print(df.isna().sum())

Задача №3

Исправить источник данных в учебной работе не получится. Придётся работать с теми данными, что есть. Для исследования важно сохранить содержание столбца genre_name. Если по какой-то причине имя исполнителя и название трека оказались упущены, а жанр композиции известен, эту строку надо сберечь. Заполните отсутствующие значения столбца track_name строкой 'unknown'.

import pandas as pd
df = pd.read_csv('music_log_upd_col.csv')
df['track_name'] = df['track_name'].fillna('unknown')

Задача №4

Заполните отсутствующие значения столбца artist_name словом 'unknown'.

import pandas as pd
df = pd.read_csv('music_log_upd_col.csv')
df['track_name'] = df['track_name'].fillna('unknown')
df['artist_name'] = df['artist_name'].fillna('unknown')

Задача №5

Удалите строки, в которых отсутствует значение в столбце genre_name. Не забудьте записать результат обратно в переменную df.

import pandas as pd
df = pd.read_csv('music_log_upd_col.csv')
df['track_name'] = df['track_name'].fillna('unknown')
df['artist_name'] = df['artist_name'].fillna('unknown')
df = df.dropna(subset=['genre_name'])

Задача №6

Проверьте полученный результат. Ещё раз получите общую информацию о датафрейме.

import pandas as pd
df = pd.read_csv('music_log_upd_col.csv')

df['track_name'] = df['track_name'].fillna('unknown')
df['artist_name'] = df['artist_name'].fillna('unknown')
df = df.dropna(subset = ['genre_name'])

# напишите ваш код здесь
df.info()

 10.6 Обработка дубликатов

 10.7 Яндекс музыка. Дубликаты

Задача №1

Сохраните размер таблицы в переменной shape_table.

import pandas as pd
df = pd.read_csv('music_log_upd_nan.csv')
shape_table = df.shape

Задача №2

Посчитайте и выведите на экран суммарное количество явных дубликатов в таблице.

import pandas as pd
df = pd.read_csv('music_log_upd_nan.csv')
shape_table = df.shape
print(df.duplicated().sum())

Задача №3

Не удаляя код из предыдущего задания, избавьтесь от дубликатов. Вызовите метод reset_index(drop=True) , чтобы обновить индексы строк и удалить колонку со старыми индексами.

import pandas as pd
df = pd.read_csv('music_log_upd_nan.csv')
shape_table = df.shape
print(df.duplicated().sum())
df = df.drop_duplicates().reset_index(drop=True) 

Задание №4

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

import pandas as pd
df = pd.read_csv('music_log_upd_nan.csv')
print(sorted(df['genre_name'].unique()))

Задание №5

В столбце genre_name замените значение 'электроника' на 'electronic' .

import pandas as pd
df = pd.read_csv('music_log_upd_nan.csv')
print (df['genre_name'].unique())
df['genre_name'] = df['genre_name'].replace('электроника','electronic')

Задача №6

Теперь оцените изменения: пересчитайте количество значений 'электроника' в столбце genre_name. Если удалось заменить все значения 'электроника' на 'electronic', то результат вывода должен быть 0.

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

import pandas as pd
df = pd.read_csv('music_log_upd_nan.csv')

print(df['genre_name'].unique())

df['genre_name'] = df['genre_name'].replace('электроника', 'electronic')
# посчитайте genre_final_count здесь

genre_final_count = df[df['genre_name'] == 'электроника']
genre_final_count = genre_final_count['genre_name'].count()
print(genre_final_count)

 10.8 Лаборатория алгоритма обработки

Задача №1

Выполните предобработку данных для Яндекс Музыки:

Импортируйте библиотеку pandas.

Считайте csv-файл music_log.csv.

Переименуйте три столбца: ' user_id' → 'user_id'; 'total play' → 'total_play'; 'Artist' → 'artist'.

Заполните отсутствующие значения в столбцах track, artist и genre.

Удалите строки-дубликаты, при этом удалите старую индексацию и добавьте новую.

Выведите на экран первые 20 строк обновлённого датафрейма.

# импортируйте библиотеку pandas
import pandas as pd
# считайте csv-файл 'music_log.csv' в переменную df
df = pd.read_csv('music_log.csv')
# переименуйте названия столбцов df
df = df.rename(columns={'  user_id':'user_id','total play':'total_play','Artist':'artist'})
# объявите список columns_to_replace с названиями столбцов track, artist, genre
columns_to_replace = ['track', 'artist', 'genre']
# заполните отсутствующие значения столбцов из списка columns_to_replace значением 'unknown' в цикле
for column in columns_to_replace:
    df[column] = df[column].fillna('unknown')
# удалите строки-дубликаты из датафрейма df
df = df.drop_duplicates().reset_index(drop=True) 
# выведите на экран первые 20 строчек обновлённого набора данных df
print(df.head(20))

 10.9 Заключение

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

 10.10 Проверочные задания. Предобработка данных

Проверочные задания. Предобработка данных Чтобы пройти тест нужно правильно ответить на 5 вопросов из 10. Время на прохождение: 10 минут

Задание 1 из 10
Выберите все проблемы, с которыми можно столкнуться во время предобработки?

Правильный ответ Пробелы в названиях столбцов

Правильный ответ Неявные дубликаты в данных

Правильный ответ Пропуски в значениях

Работа аналитика часто начинается с предобработки. Нужно проверить, нет ли в данных ошибок. Ведь пропущенные ошибки приведут к неверным результатам. Распространённая проблема — пробелы или сочетание прописных и строчных букв в названиях столбцов. Лучше заменить на «змеиный регистр». Другая проблема — пропуски. Их можно удалить, но тогда вы потеряете часть ценных данных. Найти неявные дубликаты не так легко, но лучше от них избавиться: такие дубликаты исказят результат.

Задание 2 из 10

Какие методы найдут пропущенные значения в датафрейме?

Правильный ответ isna()

Тоже правильный ответ isnull()

На пропуски укажут значения NA и None. Методы isna() и isnull() помогут их отыскать. В выдаче методов разницы нет, но разработчики больше предпочитают isna().

Задание 3 из 10

Какой метод удалит пропущенные значения в датафрейме?

Правильный ответ dropna()

Два метода найдут пропуски, но всего один их удалит. И это метод dropna().

Задание 4 из 10

Какой код заменит пропущенные значения в столбце 'column' на 'unknown'?

Правильный ответ df['column'] = df['column'].fillna('unknown')

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

Задание 5 из 10

Какой метод переименует столбцы в датафрейме?

Правильный ответ rename()

Метод count() считает значения, а duplicated() и drop_duplicates() работают с дубликатами. Названия столбцов заменит rename(). У него один аргумент — словарь columns. В ключах этого словаря указывают прежние названия столбцов, а в значениях — новые.

Задание 6 из 10

Какие методы вернут объект, состоящий из логических значений True и False?

Правильный ответ duplicated()

Правильный ответ isna()

Правильный ответ isnull()

Методы isna() и isnull() найдут пропуски, а duplicated() отыщет дубликаты. Что у них общего: в случае пропуска или дубликата возвращается True, иначе — False. Количество пропусков или дубликатов можно посчитать. Для этого результаты передают методу sum().

Задание 7 из 10

Какая команда очистит датафрейм от дубликатов, добавит новую индексацию и удалит старую?

Правильный ответ df = df.drop_duplicates().reset_index(drop=True)

Если удалить строки с пропусками или дубликатами, индексация в датафрейме нарушится. Её обновляют с помощью метода reset_index(). Чтобы удалить старую индексацию, нужно вызвать метод с аргументом drop=True.

Задание 8 из 10

Какая команда очистит датафрейм от дубликатов, добавит новую индексацию и сохранит старую?

Правильный ответ df = df.drop_duplicates().reset_index()

Если нужно сохранить старую индексацию, метод reset_index() вызывают без аргумента drop=True. Тогда прежние индексы попадут в столбец index.

Задание 9 из 10

Какой метод поможет в поиске неявных дубликатов?

Правильный ответ unique()

Если данные вносят вручную, неявных дубликатов сложно избежать. Одну позицию можно назвать по-разному: 'Сок апельсиновый', 'сок апельсиновый' и даже 'Сок Апельсиновый'. А если в названии допустить ошибку, вариантов станет ещё больше. Найти такие дубликаты поможет метод unique(). Он вернёт список уникальных значений, среди которых выбирают неявные дубликаты.

Задание 10 из 10

Как избавиться от неявных дубликатов в датафрейме cafe? import pandas as pd

column_names = ['date','position','price'] orders = [ ['2021.05.12', 'Сок апельсиновый', 100], ['2021.05.12', 'Пицца Маргарита', 300], ['2021.05.12', 'Мороженое ванильное', 150], ['2021.05.12', 'Апельсиновый сок', 100] ] cafe = pd.DataFrame(data=orders, columns=column_names)

Правильный ответ cafe['position'] = cafe['position'].replace('Апельсиновый сок', 'Сок апельсиновый')

Абсолютных дубликатов в датафрейме cafe нет. Поэтому метод drop_duplicates() тут не поможет. Найти неявные дубликаты можно с помощью unique(). В датафрейме 4 уникальных значения, но 'Сок апельсиновый' и 'Апельсиновый сок' относятся к одной позиции. Метод replace() это исправит. В первом аргументе метода указывают значение, которое хотят заменить. Во втором — новое значение для дубликата.

Следующая тема: БРу. Анализ данных и оформление результатов

Вернуться в раздел: Базовый Python

Вернуться в оглавление: Я.Практикум