Автомобили в Голландии: мини-статистика

Привет Хабр.

Эту статью можно считать логическим продолжением цикла про Велоинфраструктуру в Голландии. В этот раз речь пойдет про автомобили.

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

Для тех кому интересно, на чем ездят голландцы кроме велосипедов, продолжение под катом.

Исходные данные

В качестве источника данных использовалась профессиональная камера наблюдения AXIS, имеющая возможность встроенного распознавания автомобильных номеров. Сам по себе номер не так уж интересен для статистики, куда более интересна дополнительная информация, которую можно по нему получить. И это в Голландии делается просто, на сайте rdw.nl по любому номеру совершенно бесплатно можно получить информацию по автомобилю, послав простой GET-запрос (для примера можно посмотреть взятый наугад номер H789GF). Данных возвращается довольно много, включая год выпуска, мощность, стоимость по каталогу и пр. А это уже интереснее.

За 3 дня работы камеры было собрано 370 записей, на которых оказалось примерно 100 автомобилей. Из всего этого был собран датасет, который выглядит примерно так:

car_id,datetime,manufacturer,model,year,price 3,2020-01-23 16:57:26,PEUGEOT,PEUGEOT 206,2004.0, 3,2020-01-23 16:57:26,PEUGEOT,PEUGEOT 206,2004.0, 26,2020-01-23 16:41:39,NISSAN,NISSAN NISSAN JUKE,2012.0,25965.0 26,2020-01-23 16:41:39,NISSAN,NISSAN NISSAN JUKE,2012.0,25965.0 26,2020-01-23 16:41:39,NISSAN,NISSAN NISSAN JUKE,2012.0,25965.0 26,2020-01-23 16:41:38,NISSAN,NISSAN NISSAN JUKE,2012.0,25965.0 21,2020-01-23 16:30:33,BMW,BMW 5ER REIHE,2004.0, 21,2020-01-23 16:30:33,BMW,BMW 5ER REIHE,2004.0, 21,2020-01-23 16:30:32,BMW,BMW 5ER REIHE,2004.0, 47,2020-01-23 16:24:55,VOLVO,VOLVO 240 POLAR U9,1993.0, 47,2020-01-23 16:24:54,VOLVO,VOLVO 240 POLAR U9,1993.0, 

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

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

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

Итак, приступим. Те, кому код неинтересен, могут пролистать текст сразу до графиков.

Обработка и результаты

Подключим необходимые компоненты и загрузим датасет в Pandas:

import pandas as pd import matplotlib.pyplot as plt  df = pd.read_csv("license_plates.csv", quotechar='"')

Нас интересуют модели машин, так что выделим необходимое подмножество и уберем дубликаты (на каждый проезд машины камера генерирует 3-4 события). Для удобства отображения графиков отсортируем датасет по модели автомобиля.

df_cars = df[['car_id', 'manufacturer', 'model', 'year', 'price']] df_cars = df_cars.drop_duplicates()  df_cars['year'] = df_cars["year"].map(int) df_cars['price'] = df_cars["price"].map(get_rounded, na_action=None).astype('Int64') df_cars['car'] = df_cars['model'] + '/' + df_cars['year'].apply(str)  df_cars = df_cars.sort_values('manufacturer', ascending=True, inplace=False)

Напишем вспомогательную функцию извлечения данных в виде гистограммы:

def extract_as_hist(dataframe, param: str):     g = dataframe.groupby([param])     msg_count = g.size().reset_index(name='counts')     grouped = g.mean().reset_index()     grouped['counts'] = msg_count['counts']     return grouped[param].values, grouped['counts'].values

Теперь можно приступать к самому интересному — собственно графикам.

Модель машины

Выделим данные с помощью написанной выше функции.

model, model_cnt = extract_as_hist(df_cars, 'model') plt.gca().invert_yaxis() plt.xticks(np.arange(min(model_cnt)-2, max(model_cnt)+2, 1.0)) plt.rcParams['figure.figsize'] = [8, 16] plt.barh(model, model_cnt, label='Car Model') plt.gca().legend(loc='upper right') plt.gcf().tight_layout()

Результат в виде графика:

Как можно видеть, первое место по популярности занимает Volkswagen Golf, второе Mercedes-Benz Sprinter, третье Volkswagen Polo. Из необычного, можно отметить разве что Porsche и Tesla — в российских бизнес-центрах эти модели встречаются не настолько часто 😉 Volvo Plug-In Hybrid и Volvo Twin Engine тоже довольно-таки экзотичны.

Производитель

Можно посмотреть данные по производителям:

manufacturer, manufacturer_cnt = extract_as_hist(df_cars, 'manufacturer')  plt.gca().invert_yaxis() plt.xticks(np.arange(min(manufacturer_cnt)-2, max(manufacturer_cnt)+2, 1.0)) plt.barh(manufacturer, manufacturer_cnt, label='Car Manufacturer')

График:

В целом, на первом месте с заметным отрывом выбивается Volkswagen, второе делят равномерно BMW, Mercedes и Volvo. Ни одного ВАЗа за время теста замечено не было 😉

Год выпуска

Код приводить не буду, он такой же. Сразу график:

Как можно видеть, большинство ездят на машинах не старше 5-летней давности, хотя и 10-летние авто экзотикой не являются. Есть даже пара раритетов 1993 и 1994г. Это оказались VOLVO 240 POLAR U9 и BMW 325I CABRIOLET E2 соответственно.

Цена

Сразу приведу график:

Мы видим что основная масса авто имеет вполне четкий пик по средней цене порядка 30К Евро. Верхушку топа занимают TESLA MODEL X 2018г (120К) и PORSCHE CAYENNE DIESEL 2014г (115К). Самый дешевый автомобиль — PEUGEOT 107 2012г за 5К.

Выводы

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

Если у кого-то есть данные по другим странам, было бы интересно сравнить.

ссылка на оригинал статьи https://habr.com/ru/post/485296/

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *