CoderCastrov logo
CoderCastrov
Питон

Аналитика данных для оптимизации жизни: Покупка автомобиля

Аналитика данных для оптимизации жизни: Покупка автомобиля
просмотров
5 мин чтение
#Питон

Несколько месяцев назад меня заинтересовала покупка нового автомобиля. Конкретно, я хотел купить джип для бездорожья летом. Меня больше всего интересовало приобретение подержанного джипа с некоторыми модификациями (подъемный комплект, большие шины, лебедка и т. д.). Джипы очень популярны в Колорадо, и, как следствие, рынок для них имеет большой объем с быстрым оборотом. Это затрудняет анализ всех вариантов на рынке в эффективный способ.

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

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


Автоматизация поиска

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

Определение характеристик

Сначала мне нужно было знать, какую информацию я хочу искать и собирать. Вот параметры, которые я выбрал:

· Пробег

· Год выпуска

· Марка/Модель

· Местоположение

· Дата публикации

· Цена (<$20,000)


Парсинг

Мне нравится покупать машины на Craigslist.org, поэтому это был сайт, на котором мой код должен был искать. Я знал, что в замечательном и лабиринтном мире пакетов Python доступно несколько инструментов для парсинга веб-страниц. Я решил использовать Scrapy, который описывается как "Открытая и совместная платформа для извлечения необходимых данных с веб-сайтов. Быстрый, простой и расширяемый способ."

Когда вы ищете что-то на Craigslist, вы можете изучить, как изменяется URL для каждой страницы поиска и заметить, что это регулярное выражение (то есть оно следует определенному шаблону). Узнав это, я смог создать "паука" для парсинга веб-страниц. Основные задачи, которые выполнял мой паук:

· Искать "Jeep" на Craigslist в радиусе 100 миль от Денвера

· Извлекать заголовок, цену, пробег, одометр, год выпуска и марку из объявления

· Выводить результаты в файл

На странице поиска Craigslist есть плитки для каждого объявления. Паук должен был "перебирать" каждое из них, чтобы получить нужные мне данные. К счастью, каждое объявление помечено обычными тегами HTML, которые можно искать. Например, цена находится по пути xpath: '///span[@class="result-price"]/text()'. У каждой переменной есть свой общий тег, который я могу искать и последовательно выводить в текстовый документ. Если вы не являетесь веб-разработчиком, эта часть кода может быть довольно сложной, но если вам интересно увидеть, о чем я говорю, перейдите на любой веб-сайт, щелкните правой кнопкой мыши и выберите "Инспектировать элемент". Если вы наведетесь на код HTML, вы сможете найти часть веб-страницы, которая вас интересует, а затем снова щелкните правой кнопкой мыши, чтобы скопировать путь xpath.


Код Scrapy


Анализ данных

`

Теперь у нас есть этот текстовый файл, построенный в виде таблицы с результатами поиска джипов на дни. Затем у меня есть отдельный код, который я запускаю в Jupyter Notebook для анализа данных. Основные используемые библиотеки для этой задачи - pandas и matplotlib. Pandas - это абсолютно необходимая библиотека для науки о данных на питоне, а matplotlib - это мощный пакет визуализации для создания графиков.

Самый базовый анализ, который я провел, - это цена по годам, показанная на этой диаграмме:

Эта диаграмма говорит мне несколько вещей, хотя она и довольно простая. (1) Продается больше новых джипов, чем старых. Это ожидаемо, так как автомобили обычно выходят из строя после 20-30 лет использования. (2) Самые старые джипы самые дорогие. Это тоже логично, учитывая, что джип 1960 года должен был пройти обширную реставрацию и может быть предметом коллекционирования.

Есть несколько моделей джипов на выбор: Wrangler, Cherokee, Commander, Liberty и т. д. Меня больше всего интересовало найти Cherokee или Wrangler, поэтому я разделил набор данных на три категории:

· Wrangler

· Cherokee

· Другие

Построение такого же графика для каждой категории дает дополнительное представление:

Следующая диаграмма предоставляет дополнительную полезную информацию для каждого типа. Выводы заключаются в том, что Wranglers в среднем дороже Cherokees и что оба типа джипов дороже других типов.

Еще один важный параметр для учета - это показания одометра для каждой машины. Чтобы построить это, я решил разделить объявления на три диапазона одометра:

· 0-50 тыс. миль

· 50-100 тыс. миль

· 100-150 тыс. миль

Меня не интересовали машины с более чем 150 тыс. миль на двигателе, поэтому это хорошо сработало. Построение отдельно для Wrangler и Cherokee диаграммы цены по годам с раскраской по диапазону одометра дает следующую диаграмму:

Из этого мы видим, что:

· Джипы с меньшим пробегом новее

· Большинство имеют более 100 тыс. миль

· Есть немного Wranglers за $20k с пробегом менее 100 тыс. миль

· Cherokee с пробегом менее 100 тыс. миль обычно новее, чем Wranglers с таким же пробегом

3D Scatter plot of Odometer by Year by Price

Удобнее анализировать данные все на одном графике, поэтому я решил построить 3D диаграмму рассеяния для каждого диапазона одометра по цене по годам и раскрашенную по модели. На рисунке 4 мы видим результат этой идеи. Из этого мы видим, что количество джипов уменьшается с уменьшением пробега и что есть обратная связь между ценой и пробегом. Моя идеальная покупка была бы Wrangler с пробегом менее 100 тыс. миль и ценой менее $15,000. Исходя из этого, моя цель - середина крайнего правого кластера для потенциальных покупок.


Запуск моего веб-парсера и анализ графиков привел меня к моему окончательному решению после примерно 3 месяцев. Я был более чем доволен своей конечной покупкой и с удовольствием развивал свои навыки на питоне, решая реальную жизненную проблему.

Final Purchase