MOTOLICZBY.PL

cropped-cropped-motoliczby-logo-e1676135193682-1.png

motoliczby.pl

O danych


Źródło danych

Dane na stronie motoliczby.pl w zdecydowanej większości zostały pozyskane z bazy danych Cepik poprzez udostępnione Api. Interfejs API do CEPiK został zrealizowany w ramach projektu „Otwarte Dane – Dostęp, Standard, Edukacja”. Więcej informacji o API Cepik znajdziesz tutaj.

Moja odpowiedzialność

Strona ma charakter informacyjny, a dane na niej zawarte zostały pozyskane według najlepszej wiedzy oraz zasobów dostępnych w kopii bazy Cepik (Cepik Api). Biorąc pod uwagę charakter strony, nie ponoszę odpowiedzialności za aktualność, poprawność, kompletność lub jakość dostarczanych danych. Nie ponoszą również odpowiedzialności za decyzje podjęte na podstawie publikowanych danych. 

Ułomność danych w CEPiK

Podstawowe problemy identyfikowane na poziomie struktury danych oraz sposobu ich gromadzenie zostały opisane między innymi w pracy „Ułomności statystyki motoryzacji w Polsce ich konsekwencje dla badań geograficznych”. Autorzy opisują tam trzy podstawowe i ogólne problemy, dotyczące CEP:

„Martwe dusze”, czyli zawyżanie liczby pojazdów poprzez pozostawanie w ewidencji samochodów od dawna nieporuszających się po drogach.

„Auta z kratką”, czyli zaniżanie liczby samochodów osobowych i zawyżanie liczby samochodów ciężarowych w związku z masowym zjawiskiem rejestrowania aut osobowych z homologacją ciężarową.

Auta firmowe, czyli zawyżanie liczby pojazdów w miastach będących siedzibami firm leasingowych i dużych przedsiębiorstw posiadających samochody służbowe.

Błędy w danych CEP

Baza danych CEP niestety posiada błędy, niespójności oraz braki danych. Najważniejsze z nich (te które zidentyfikowałem 🙂 ) to:

  • Brak podstawowych wartości określających producenta lub też model pojazdu – np. marka Cupra (stan luty 2022) nie posiada wartości w polu marka pomimo, że pole model wskazuje właśnie na tę markę.
  • Błędy/duplikaty w słownikach. Np. Toyota Corolla jest opisywana w polu model jako Corolla oraz Toyota Corolla. Tego typu niespójność jest dość powszechna.
  • Baza CEPiK w niektórych latach i niektórych polach ma pozamieniane wartość (np. Rok produkcji jest czasami zamieniony z polem Sposób produkcji).

Również dane, które wykazuje API Cepik nie często nie są zgodne z sumarycznymi danymi prezentowanymi przez portale branżowe czy instytucje analizujące rynek motoryzacyjny. Nie znam zasady pozyskania tamtych danych oraz ich źródła, to co jest na tej stronie zostało pobrane z bazy CEP poprzez API.

Duplikaty

Api CEPiK generuje również dane w sposób niejednorodny. Czasami zapytania generują zduplikowane rekordy w ramach tych samych kryteriów zapytania. Nie znam szczegółów oraz przyczyny takiego działania.

Metoda GET /pojazdy zwraca (nieregularnie) duplikaty w przypadku braku zastosowania parametru sort. Podczas budowanie zapytań polecam zawsze zastosować parametr sortowania danych według pola id, najlepiej ze znakiem ‘minus’ oraz weryfikację duplikatów danych. Moje doświadczenie wskazuję, że takie zapytanie generują najlepsze wyniki. Przykładowe zapytanie:

https://api.cepik.gov.pl/pojazdy?&limit=500&data-od=20230101&data-do=20231231&pokaz-wszystkie-pola=true&sort=-id&tylko-zarejestrowane=false&wojewodztwo=02&page=1

Oczyszczenie danych

Wszystkie dany, które zostały pobrane z bazy Cepik oraz są publikowane na tej stronie zostały oczyszczone z błędów według poniższego schematu. Zastosowałem między innymi:

  • Zamiana pól Rok produkcji z polem Sposób produkcji
  • Usunięcie w polu model, marki pojazdu – przykładowo wartość w polu model Toyota Yaris została zastąpiona wartością Yaris
# Zamieniam model, na sam model tam gdzie model skłda się z marki i modelu - np. marka: Toyota Yaris na Yaris
cc['tc_check_model'] = cc.apply(lambda x: str(x['marka']) in str(x['model']), axis=1)
cc['model'] = cc.apply(lambda x: str(x['model']).replace(str(x['marka']),"") if x['tc_check_model'] == True else x['model'] , axis=1)
  • W przypadku braku wartości w polu marka oraz wystąpieniu wartości w polu nazwa-producenta pole marka zostało uzupełniona wartością z pola nazwa-producenta
print ("######### Zamieniam brak danych w marka na dane z pola nazwa-producenta ############### ")
for dozastapienia, zastap in marki_do_zastapienia_dic.items():

    cc['marka'] = np.where( ((pd.isnull(cc['marka'])) & (cc['nazwa-producenta'] == dozastapienia) ),  zastap , cc['marka'])
  • tabela uzupełnień/zamiany

Aby ujednolicić marki występujące w różnych wariantach (literówki, różne oddziały producentów) w polu marka zostały wykonane zastąpienia według tabeli znajdującej się w poniższym pliku.

tabela zastąpień danych

Korzystanie z danych

Możesz korzystać z danych do celów komercyjnych lub też niekomercyjnych. W przypadku publikacji całości lub fragmentów danych zawartych na tej stronie bardzo proszę o umieszczenie odnośnika do miejsca, z którego dane te zostały pobrane.