Показ дописів із міткою підготовка даних. Показати всі дописи
Показ дописів із міткою підготовка даних. Показати всі дописи

вівторок, 26 лютого 2013 р.

Невідомі значення деяких змінних. Що робити?

Часто трапляється що отриманий набір даних не містить даних по деякі значення змінних.
Наприклад:
Що робити в таких випадках? Можливі рішення:

Видалити рядки, які містять невідомі значення.

Коли і як застосувати: Варто використовувати коли частка рядків з невідомими значеннями мала порівняно з доступним набором даних.
Переваги: Надзвичайно просто реалізується
Недоліки: Втрачаємо частину даних, що може призвести до побудови некоректної моделі.

Заповнити найбільш ймовірним значенням.

Коли і як застосовувати: Якщо дані не мають викидів можна використовувати середнє значення.  Якщо викиди є, краще використати моду - найбільш часте значення. Отримати ці значення можна з допомогою оглядової статистики.
Переваги: Легко й швидко реалізується.
Недоліки: Може викликати появу значних відхилень у даних і сприяти побудові неправильних моделей.

Заповнити використовуючи кореляцію між змінними.

Коли і як застосовувати: Знаходимо кореляцію між змінними, будуємо модель залежності змінних з відомими та невідомими значеннями. На основі моделі вираховуємо значення невідомих змінних.
Переваги: Підбирає більш точні значення ніж при заповненні найбільш ймовірним значенням.
Недоліки: Дуже багато додаткових моделей і перетворень, тому краще використовувати при невеликій кількості змінних.

Заповнити невідомі значення використовуючи подібність між зразками даних (спостереженнями).

Коли і як застосувати: Шукаємо подібність між рядками. Мірою подібності може бути евклідова відстань. Якщо два рядки подібні, і один з містить невідомі значення то їх можна замістити відомим з подібного рядка.
Переваги: Підбирає більш точні значення ніж при заповненні найбільш ймовірним значенням Недоліки: При збільшенні набору даних вимагає все більше обчислень.


При використанні мови R можна використати бібліотеку imputation, яка дозволяє автоматизувати вищенаведені способи. Підбір невідомих значень може здійснюватись з допомогою  визначення середніх значень, алгоритмів k-Nearest Neighbor, Singular Value Decomposition, Singular Value Threshold,  лінійних методів  та побудови дерев.

При написанні поста була використана інформація з книги Data Minig with R: Learning with Case Studies, автором якої є Luis Torgo та курсу Data Analysis, який веде Jeff Leek на проекті Coursera.

вівторок, 29 січня 2013 р.

Збір даних з допомогою Python.

При аналізі цін на нерухомість у Львові використовувались дані з сайту dom.ria.ua. Вони мають певні недоліки (детальніше про них тут ). Тому побудувати більш точну модель визначення ціни можна застосувавши інший підхід до збору даних. Додамо нові фактори для визначення, збільшимо сам набір даних, а також застосуємо кращі методи очищення.

понеділок, 21 січня 2013 р.

Збір та підготовка даних: Неоптимальний спосіб.

Процес написання програми, яка використовуватиме методи data mining можна поділити на такі етапи:
  1. Збір даних;
  2. Підготовка даних;
  3. Аналіз даних;
  4. Тренування моделі;
  5. Тестування моделі;
  6. Використання.
При визначенні ціни квартири у Львові (http://energyfirefox.blogspot.com/2012/12/blog-post.html
збір даних відбувався за таким алгоритмом:
  • Конвертувати сторінку в excel-формат (.xls);
  • Зберегти таким чином перших 10 сторінок видачі.
Підготовка даних:
Для кожної сторінки з допомогою редактора таблиць (LibreOffice Calc, Excel, Google Spreedsheet):
  • Відкинути поля "Стіни", "Назва", "Соток", оскільки вони не містять даних;
  • Відкинути поля "Агенція", "Користувач", "Телефон" та  "Опис", оскільки вони не будуть використовуватись при побудові моделі;
  • Конвертувати дані в .csv формат.
В середовищі R:
  • Об'єднати всі .csv частини в один датафрейм;
  • Після оглядового аналізу даних
    summary(flobj)
    
    відкидаємо квартири, ціна яких менша 18000 у.о. та де число кімнат більше 5, як нетипові чи отримані при помилковому введені даних
  • flobj <- flobj[flobj$Ціна >= 18000 & flobj$Кімнат < 6, ]
    
  • Залишаємо лише ті квартири, про які є повна інформація (ціна, адреса (у деяких об'єктах вказано номер будинку), загальна площа, житлова площа, площа кухні, кількість кімнат, поверховість будинку та поверх, на якому розташована квартира)
  • flobj <- flobj[complete.cases(flobj), ]
    
В результаті отримали набір з майже 800 квартир, з допомогою якого можна проводити подальший аналіз даних. Про саму побудову та тестування моделі тут .
Недоліки, виявлені в процесі збору даних:

  • при конвертації в .xls ціни береться лише цифра без вказання валюти, а враховуючи, що з 1.01.2013 ціни стали вказуватись в гривнях (до того були в доларах), то побудувати коректну модель зараз неможливо;
  • при перетворенні в .xls відсутні дані про тип стін та тип будинку,  хоча на сайті вони є;
  • занадто багато ручної праці (збереження .xls, видалення полів, перетворення в .csv).
Даний етап можна автоматизувати. Як це зробити з використанням Python тут http://energyfirefox.blogspot.com/2013/01/python.html.

неділя, 12 лютого 2012 р.

Підготовка даних для аналізу: визначення номера 5 хвилинного інтервалу для таймстемпу

Досить часто дані, які мають часову складову, аналізуються з віднесенням того чи іншого конкретного значення (рядка) до певного часового інтервалу (дня, години, хвилини тощо). Наприклад: аналіз дзвінків, прийнятих в певну (цілу) годину протягом дня; заявки, оформлені в певний день тижня тощо.

У випадку, якщо джерелом даних є SQL база даних, із приведенням до згаданих стандартних інтервалів гарно справляються вбудовані функції СУБД для роботи з датами.

Існує ще один (часто вживаний і важливий) інтервал, для обрахунку якого стандартного функціоналу не існує. Це інтервал "5-ти хвилинка".