1 заметка с тегом

#lamptest #analyst #dataanalyst #python #analyze #blog

Веселая аналитика. Lamptest💡💡

Работаем с данными и описательная статистика

Предыдущие части:
Веселая аналитика. Lamptest💡 (http://rweather.ru/blog/all/veselaya-analitika-lamptest-p1/?fbclid=IwAR3ULM3nfXwEvB9oOTlruAsm4qtoNMtGctmAxAit2nlbU8WlYs7cPxdwZhQ)

В первой части дилогии (трилогии 🤔) мы разобрались как автоматически собрать данные с сайтов, где контент подгружается динамически, спарсили данные и превратили их в pandas dataframe.

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

Напомню, что парсили сайт Алексея Надёжина — lamptest.ru LampTest в соцсетях:
Facebook: fb.com/lamptest.ru
Вконтакте: vk.com/lamptest
Geektimes: geektimes.ru/company/lamptest
Алексей тестирует светодиодные лампы, пишет обзоры и все это сведено в таблицу, по ней можно выбрать, что вас интересует и посмотреть всякие интересности!

Инструменты

  • python
  • matplotlib
  • pandas
  • plotly.express

Вся магия происходит в jupyter notebook

Данные

После открытия файла с данными

pd.read_csv(‘data/lamptest.csv’)

Пользуемся пакетом data_view https://pypi.org/project/data-view/ .

from data_view import view

Функция view покажет:
размер данных, кол-во пропущенных значений и дубликатов, отрисует гистограммы числовых признаков. И много других описательных статистик и не только.

Запускаем

view(bulbs, only_numeric=False)

Разбираем результат.
Признаки, имеющиеся в наличии:

  • brand — производитель лампы
  • model — наименование в модельном ряду
  • desc — описание (заявленные производителем параметры, в формате строки)
  • base — цоколь
  • shape — форма
  • price — цена
  • p — измеренная потребляемая мощность
  • lm_prc — отношение измеренного и заявленного светового потока
  • lm — измеренный световой поток
  • eff — эффективность (кол-во люмен на ватт)
  • eq — эквивалент мощности лампы накаливания
  • color — измеренная цветовая температура
  • cri — измеренный индекс цветопередачи
  • angle — измеренный угол освещения
  • flicker — измеренный коэффициент пульсации
  • rating — рейтинг по шкале от 1 до 5

Кол-во пропусков в данных

Категориальные признаки

Топ-5 элементов категориального признака

Промежуточный итог

  • дубликатов нет
  • признаки с наибольшим кол-вом пропусков:
  • цена (price)
  • угол освещения (angle)
    Наибольшее кол-во брендов:
    • Gauss — 182
    • X-Flash — 144
    • Navigator — 136
    • Наносвет — 132
    • Эра — 128
      Кол-во представленных цоколей:
    • Е27 — 1321 — стандартный цоколь
    • Е14 — 922 — “маленький” цоколь, миньон
      Кол-во ламп разной формы:
    • Bulb — 894 (лампа “классической” формы)
    • Spot — 516 (точечный светильник)
    • Candle — 462 (лампа-свеча)

Предобработка

в данных есть признак desc — заявленные производителем параметры (параметры, представленные в виде строки, параметры разделены пробелом). Попробуем извлечь из них ценность.

Разделим каждую запись по пробелу и посчитаем длину получившегося списка с помощью:

bulbs['desc'].map(lambda x: len(x.split())).value_counts()

Результат на рисунке ниже:

  • 4 элемента — 2376
  • 3 элемента — 311
  • 5 элементов — 137
  • 6 элементов — 7
  • 2 элемента — 4
  • 1 элемент — 2

Записи с длиной 4 и 3 составляют 94% всех данных на них и остановимся. Расположение необходимых элементов в строке указано на изображении ниже.

Создаем в таблице новые признаки:

  • color_init — заявленную цветовую температуру
  • lm_init — заявленный световой поток
  • p_init — заявленная мощность

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

bulbs['color_delta'] = (bulbs['color'] - bulbs['color_init']) / bulbs['color_init']
bulbs['lm_delta'] = (bulbs['lm'] - bulbs['lm_init']) / bulbs['lm_init']
bulbs['p_delta'] = (bulbs['p'] - bulbs['p_init']) / bulbs['p_init']

Немного статистики

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

Таблица форм и наименований цоколей электрических ламп

Самые популярные формы колб:
Bulb — грушевидная

Candle — свеча

Spot — точечный светильник

G45 — шарообразная

Посмотрим на распределение цен на лампы у каждого бренда. Сделан срез данных (лампочки мощностью от 7-12 Ватт и бренды, у которых более 50 моделей ламп)

Для тех, кто хочет интерактивности 👉 https://urevoleg.github.io/plotly-graph/bulbs_price_by_brand.html
Самая дорогая лампочка у Gauss — 1479 руб, самая дешевая Эра — 58 руб.
Бренды REV, Camelion, Diall, Эра — имеют малый разброс цены, самые «ходовые» модели ламп у них в одном ценовом сегменте 100 — 200 руб, у всех остальных брендов сильный разброс на цены, можно найти как дешевые, дорогие лампы, так и лампы средней цены.

На сайте есть собственный рейтинг ламп (рейтинг числовой 0 — 5 баллов), разметим его, с помощью таких правил:

  • > 4.5 — отлично
  • <= 4.5 and > 4 — хорошо
  • <= 4 and > 3.5 — удовлетворительно
  • <= 3.5 плохо
def get_str_rating(r):
    if not np.isnan(r):
        if r > 4.5:
            return 'отлично'
        elif r > 4 and r <= 4.5:
            return 'хорошо'
        elif r > 3.5 and r <= 4:
            return 'удовлетворительно'
        else:
            return 'плохо'
    else:
        return np.nan

Более 50% ламп имеют хороший рейтинг от Алексея Надёжина + авторские правила, 27% — плохой рейтинг и отличных ламп чуть более 3%.

Посмотрим на бренды «отличных» ламп:
Магия pandas 🧙‍♂️

bulbs.query("brand in @brands_list and p_init > 6 and p_init < 13 and rating_str=='отлично'").groupby('brand')['model'].count()

IKEA и Наносвет — лидеры по кол-ву ламп с отличным рейтингом!

Распределение цен по «качественному рейтингу», интересно, что можно нарваться на высокую (даже на очень) цену при удовлетворительном качестве.

Изучайте графики, делайте выводы, бегите в магазин за нужными лампочками!
В следующей части:

  • составим свой рейтинг на основе имеющихся данных 📊
  • посмотрим, значимо ли различаются цены при разных уровнях рейтинга 🤔
  • рассмотрим на сколько и в какую сторону чаще всего отклоняются заявленные характеристики
  • какой из брендов отвечает за свои слова
  • попробуем завести machine learning (попробуем предсказать цену на модели, у которых она пропущена) 😈
 782   9 мес   #analytics   #lamptest #analyst #dataanalyst #python #analyze #blog