Оглавление:

«1. Краткое введение"

2.Набор данных

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

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

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

Это первая часть моей демонстрации о том, как прогнозировать цены на продукты питания, используя набор данных из реального мира. Он содержит этапы введения, очистки данных и предварительной обработки. Для выбора функций, обучения модели и оценки пожалуйста, нажмите здесь, чтобы перейти ко второй части этого!

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

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

Для демонстрации я использую блокнот Google Colab.

Набор данных

К счастью, набор данных был взят с https://data.humdata.org/.

Вы можете скачать набор данных отсюда: https://data.humdata.org/dataset/wfp-food-prices-for-sri-lanka/resource/3638f0d6-9969-48cf-a919-1d879d037ec6

Теперь у нас есть набор данных! Но пока мы не знаем, как там организованы данные. Данные могут быть в разных формах. А также некоторые поля данных, очевидно, не повлияют на цену продуктов питания. Если это так, вы можете удалить их, прежде чем продолжить.

Если вы откроете файл .csv, вы увидите разные поля данных и их значения. Чтобы получить четкое представление о наборе данных, с которым мы имеем дело, мы можем просмотреть его в нашей записной книжке Colab.

Здесь я загрузил и сохранил файл данных на Google Диске.

Мы видим, что 0-я строка содержит некоторые нежелательные данные. Следовательно, мы удаляем эту строку.

Вот как сейчас выглядит датафрейм

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

На данный момент во фрейме данных 4168 строк и 13 столбцов.

Затем я ищу пропущенные значения, потому что иначе наша модель будет работать неправильно с пропущенными значениями. Есть много способов справиться с пропущенными значениями.

Мы можем просто удалить записи с отсутствующими значениями, а также указать значение для отсутствующих данных на основе остальных данных и т. д. Здесь давайте посмотрим, сколько столбцов останется, если мы отбросим записи (строки), содержащие отсутствующие значения. значения данных. Затем я перестраиваю фрейм данных, удаляя пустые места удаленных строк.

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

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

Давайте начнем!

LKR (шри-ланкийские рупии) — это валюта, используемая в Шри-Ланке. Поле «Цена» содержит цену конкретного товара в LKR. Следовательно, нам не нужно отдельное поле для содержания «валюты». Я просто удаляю этот столбец из фрейма данных.

Поле usdprice содержит ту же цену в долларах США.

Мы собираемся сделать прогноз цены в LKR. Таким образом, вы можете определить, что поле usdprice бесполезно ни в наборе функций, ни в наборе меток. Итак, я просто удаляю это поле.

Я удаляю поле «цена» еще и потому, что оно не связано с исследованием (я не буду объяснять эти вещи более подробно, чтобы не упустить фокус этой статьи).

Также поля, содержащие различные административные единицы, были переименованы в соответствии с контекстом Шри-Ланки для ясности понимания. «admin1» было переименовано в «провинция», а «admin2» было переименовано в «район».

Теперь идем дальше.!

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

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

Теперь вы видите, что столбец месяца содержит только месяцы (от 1 до 12), а столбец года содержит год.

Год — это числовое значение. Кроме того, в качестве числовых значений у нас есть только «цена», «долгота» и «широта». Все остальные относятся к типу Nominal.

Что насчет месяца? Это категорично. Можем ли мы давать веса по месяцам? Вес 1 за январь? 12 за декабрь. Это не правильное сравнение! Мы используем 1 для января, так как это первый месяц года в соответствии со стандартным способом. Это идентификатор. Теперь вы понимаете, что нет смысла тренировать поле месяца со значениями от 1 до 12!

Посмотрите еще раз, что еще осталось сейчас?

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

Сначала возьмем поле «категория».

Вы можете увидеть уникальные значения, которые он содержит, используя следующую строку кода.

Мы видим, что есть 6 категорий. Как и в примере с «месяцами», который мы обсуждали ранее, здесь наша модель также будет обучаться с ложными фактами, если мы пронумеруем эти категории от 1 до 6. Потому что модели получают это как значение веса для конкретной категории. Нет смысла присваивать веса категориям продуктов питания на основе нашего собственного желания, верно!

Поэтому я делаю словарь этих 6 категорий.

Чтобы увидеть, что мы собираемся делать, посмотрите, например, на следующую строку:

Теперь я создаю 6 полей (6 столбцов) в своем фрейме данных для этих 6 категорий. Теперь у нас есть столбцы «бобовые и орехи», «овощи и фрукты», «мясо, рыба и яйца» и так далее..!

Поскольку категорией вышеуказанной записи данных является «зерновые и клубнеплоды», я отмечаю «1» в поле «зерновые и клубнеплоды» и 0 в остальных полях категорий.

Нравится :

Ставим там всего 1 ,0! Это двоично! Потому что вы можете видеть, что если категория не относится к овощам и фруктам, мы просто ставим там ноль. Вес не добавляется! И если это тип «злаки и клубнеплоды», то поставьте 1 в качестве значений поля для «злаков и клубнеплодов». Наибольшее значение веса, которое могут иметь эти 6 полей, равно 1. Итак, вы видите, что эти поля отображают только существование. Не число. Итак, теперь вы закончили с этими номинальными значениями!

Теперь нам не нужно поле «категория», так как у нас есть эти 6 полей. Так что просто бросьте его!
Теперь вместо категории поля в нашем фрейме данных у нас есть 6 полей с именами этих категорий в качестве имен полей!

На данный момент так выглядит ваш фреймворк данных!

Вы можете предварительно обработать все остальные номинальные значения так же, как мы сделали для поля «категория»! Попробуйте !!!

После предварительной обработки всех других полей, подобных приведенным выше, затем запишите свой фрейм данных в csv и сохраните его на своем диске, чтобы получить к нему дальнейший доступ!

Мы прошли долгий путь! Теперь вы знаете, как предварительно обработать значения в наборе данных перед обучением модели машинного обучения.

Нажмите здесь, чтобы перейти ко второй части статьи, чтобы предсказать цены, включая выбор функций, обучение модели и оценку!

Ваше здоровье!!!