{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Exploring E-bay Car Sales Data\n", "- This Data is taken from [Kaggle Competitions](https://www.kaggle.com/orgesleka/used-cars-database/data)\n", "\n", "### Data Dictionary\n", "\n", "> dateCrawled - When this ad was first crawled. All field-values are taken from this date.
\n", "> name - Name of the car.
\n", "> seller - Whether the seller is private or a dealer.
\n", "> offerType - The type of listing
\n", "> price - The price on the ad to sell the car.
\n", "> abtest - Whether the listing is included in an A/B test.
\n", "> vehicleType - The vehicle Type.
\n", "> yearOfRegistration - The year in which which year the car was first registered.
\n", "> gearbox - The transmission type.
\n", "> powerPS - The power of the car in PS.
\n", "> model - The car model name.
\n", "> kilometer - How many kilometers the car has driven.
\n", "> monthOfRegistration - The month in which which year the car was first registered.
\n", "> fuelType - What type of fuel the car uses.\n", "> brand- The brand of the car.
\n", "> notRepairedDamage - If the car has a damage which is not yet repaired.
\n", "> dateCreated - The date on which the eBay listing was created.
\n", "> nrOfPictures - The number of pictures in the ad.
\n", "> postalCode - The postal code for the location of the vehicle.
\n", "> lastSeenOnline - When the crawler saw this ad last online.
\n", "\n", "### Aim\n", "We aim to clean the data and analyze the included used car listings usinfg `pandas` and `matplotlib`\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Introduction to Data" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateCrawlednamesellerofferTypepriceabtestvehicleTypeyearOfRegistrationgearboxpowerPSmodelodometermonthOfRegistrationfuelTypebrandnotRepairedDamagedateCreatednrOfPicturespostalCodelastSeen
02016-03-26 17:47:46Peugeot_807_160_NAVTECH_ON_BOARDprivatAngebot$5,000controlbus2004manuell158andere150,000km3lpgpeugeotnein2016-03-26 00:00:000795882016-04-06 06:45:54
12016-04-04 13:38:56BMW_740i_4_4_Liter_HAMANN_UMBAU_Mega_OptikprivatAngebot$8,500controllimousine1997automatik2867er150,000km6benzinbmwnein2016-04-04 00:00:000710342016-04-06 14:45:08
22016-03-26 18:57:24Volkswagen_Golf_1.6_UnitedprivatAngebot$8,990testlimousine2009manuell102golf70,000km7benzinvolkswagennein2016-03-26 00:00:000353942016-04-06 20:15:37
32016-03-12 16:58:10Smart_smart_fortwo_coupe_softouch/F1/Klima/Pan...privatAngebot$4,350controlkleinwagen2007automatik71fortwo70,000km6benzinsmartnein2016-03-12 00:00:000337292016-03-15 03:16:28
42016-04-01 14:38:50Ford_Focus_1_6_Benzin_TÜV_neu_ist_sehr_gepfleg...privatAngebot$1,350testkombi2003manuell0focus150,000km7benzinfordnein2016-04-01 00:00:000392182016-04-01 14:38:50
\n", "
" ], "text/plain": [ " dateCrawled name \\\n", "0 2016-03-26 17:47:46 Peugeot_807_160_NAVTECH_ON_BOARD \n", "1 2016-04-04 13:38:56 BMW_740i_4_4_Liter_HAMANN_UMBAU_Mega_Optik \n", "2 2016-03-26 18:57:24 Volkswagen_Golf_1.6_United \n", "3 2016-03-12 16:58:10 Smart_smart_fortwo_coupe_softouch/F1/Klima/Pan... \n", "4 2016-04-01 14:38:50 Ford_Focus_1_6_Benzin_TÜV_neu_ist_sehr_gepfleg... \n", "\n", " seller offerType price abtest vehicleType yearOfRegistration \\\n", "0 privat Angebot $5,000 control bus 2004 \n", "1 privat Angebot $8,500 control limousine 1997 \n", "2 privat Angebot $8,990 test limousine 2009 \n", "3 privat Angebot $4,350 control kleinwagen 2007 \n", "4 privat Angebot $1,350 test kombi 2003 \n", "\n", " gearbox powerPS model odometer monthOfRegistration fuelType \\\n", "0 manuell 158 andere 150,000km 3 lpg \n", "1 automatik 286 7er 150,000km 6 benzin \n", "2 manuell 102 golf 70,000km 7 benzin \n", "3 automatik 71 fortwo 70,000km 6 benzin \n", "4 manuell 0 focus 150,000km 7 benzin \n", "\n", " brand notRepairedDamage dateCreated nrOfPictures \\\n", "0 peugeot nein 2016-03-26 00:00:00 0 \n", "1 bmw nein 2016-04-04 00:00:00 0 \n", "2 volkswagen nein 2016-03-26 00:00:00 0 \n", "3 smart nein 2016-03-12 00:00:00 0 \n", "4 ford nein 2016-04-01 00:00:00 0 \n", "\n", " postalCode lastSeen \n", "0 79588 2016-04-06 06:45:54 \n", "1 71034 2016-04-06 14:45:08 \n", "2 35394 2016-04-06 20:15:37 \n", "3 33729 2016-03-15 03:16:28 \n", "4 39218 2016-04-01 14:38:50 " ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "autos = pd.read_csv('autos.csv', encoding=\"Latin-1\")\n", "autos.head()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 50000 entries, 0 to 49999\n", "Data columns (total 20 columns):\n", "dateCrawled 50000 non-null object\n", "name 50000 non-null object\n", "seller 50000 non-null object\n", "offerType 50000 non-null object\n", "price 50000 non-null object\n", "abtest 50000 non-null object\n", "vehicleType 44905 non-null object\n", "yearOfRegistration 50000 non-null int64\n", "gearbox 47320 non-null object\n", "powerPS 50000 non-null int64\n", "model 47242 non-null object\n", "odometer 50000 non-null object\n", "monthOfRegistration 50000 non-null int64\n", "fuelType 45518 non-null object\n", "brand 50000 non-null object\n", "notRepairedDamage 40171 non-null object\n", "dateCreated 50000 non-null object\n", "nrOfPictures 50000 non-null int64\n", "postalCode 50000 non-null int64\n", "lastSeen 50000 non-null object\n", "dtypes: int64(5), object(15)\n", "memory usage: 7.6+ MB\n" ] } ], "source": [ "autos.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### _Key Observations:_\n", "\n", "- The Dataset includes of 20 Columns, most of which are Strings\n", "\n", "- Some Columns have null values, but none have more than 20% null values." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cleaning Column Names\n", "\n", "- The column names use camelcase instead of Python's preferred snakecase, which means we can't just replace spaces with underscores." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['dateCrawled', 'name', 'seller', 'offerType', 'price', 'abtest',\n", " 'vehicleType', 'yearOfRegistration', 'gearbox', 'powerPS', 'model',\n", " 'odometer', 'monthOfRegistration', 'fuelType', 'brand',\n", " 'notRepairedDamage', 'dateCreated', 'nrOfPictures', 'postalCode',\n", " 'lastSeen'],\n", " dtype='object')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "column_names = autos.columns\n", "column_names" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['date_crawled', 'name', 'seller', 'offer_type', 'price', 'abtest',\n", " 'vehicle_type', 'registration_year', 'gearbox', 'power_ps', 'model',\n", " 'odometer', 'registration_month', 'fuel_type', 'brand',\n", " 'unrepaired_damage', 'ad_created', 'nr_of_pictures', 'postal_code',\n", " 'last_seen'],\n", " dtype='object')\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_crawlednameselleroffer_typepriceabtestvehicle_typeregistration_yeargearboxpower_psmodelodometerregistration_monthfuel_typebrandunrepaired_damagead_creatednr_of_picturespostal_codelast_seen
02016-03-26 17:47:46Peugeot_807_160_NAVTECH_ON_BOARDprivatAngebot$5,000controlbus2004manuell158andere150,000km3lpgpeugeotnein2016-03-26 00:00:000795882016-04-06 06:45:54
12016-04-04 13:38:56BMW_740i_4_4_Liter_HAMANN_UMBAU_Mega_OptikprivatAngebot$8,500controllimousine1997automatik2867er150,000km6benzinbmwnein2016-04-04 00:00:000710342016-04-06 14:45:08
22016-03-26 18:57:24Volkswagen_Golf_1.6_UnitedprivatAngebot$8,990testlimousine2009manuell102golf70,000km7benzinvolkswagennein2016-03-26 00:00:000353942016-04-06 20:15:37
32016-03-12 16:58:10Smart_smart_fortwo_coupe_softouch/F1/Klima/Pan...privatAngebot$4,350controlkleinwagen2007automatik71fortwo70,000km6benzinsmartnein2016-03-12 00:00:000337292016-03-15 03:16:28
42016-04-01 14:38:50Ford_Focus_1_6_Benzin_TÜV_neu_ist_sehr_gepfleg...privatAngebot$1,350testkombi2003manuell0focus150,000km7benzinfordnein2016-04-01 00:00:000392182016-04-01 14:38:50
\n", "
" ], "text/plain": [ " date_crawled name \\\n", "0 2016-03-26 17:47:46 Peugeot_807_160_NAVTECH_ON_BOARD \n", "1 2016-04-04 13:38:56 BMW_740i_4_4_Liter_HAMANN_UMBAU_Mega_Optik \n", "2 2016-03-26 18:57:24 Volkswagen_Golf_1.6_United \n", "3 2016-03-12 16:58:10 Smart_smart_fortwo_coupe_softouch/F1/Klima/Pan... \n", "4 2016-04-01 14:38:50 Ford_Focus_1_6_Benzin_TÜV_neu_ist_sehr_gepfleg... \n", "\n", " seller offer_type price abtest vehicle_type registration_year \\\n", "0 privat Angebot $5,000 control bus 2004 \n", "1 privat Angebot $8,500 control limousine 1997 \n", "2 privat Angebot $8,990 test limousine 2009 \n", "3 privat Angebot $4,350 control kleinwagen 2007 \n", "4 privat Angebot $1,350 test kombi 2003 \n", "\n", " gearbox power_ps model odometer registration_month fuel_type \\\n", "0 manuell 158 andere 150,000km 3 lpg \n", "1 automatik 286 7er 150,000km 6 benzin \n", "2 manuell 102 golf 70,000km 7 benzin \n", "3 automatik 71 fortwo 70,000km 6 benzin \n", "4 manuell 0 focus 150,000km 7 benzin \n", "\n", " brand unrepaired_damage ad_created nr_of_pictures \\\n", "0 peugeot nein 2016-03-26 00:00:00 0 \n", "1 bmw nein 2016-04-04 00:00:00 0 \n", "2 volkswagen nein 2016-03-26 00:00:00 0 \n", "3 smart nein 2016-03-12 00:00:00 0 \n", "4 ford nein 2016-04-01 00:00:00 0 \n", "\n", " postal_code last_seen \n", "0 79588 2016-04-06 06:45:54 \n", "1 71034 2016-04-06 14:45:08 \n", "2 35394 2016-04-06 20:15:37 \n", "3 33729 2016-03-15 03:16:28 \n", "4 39218 2016-04-01 14:38:50 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import re\n", "\n", "def clean_col(col):\n", " col.strip()\n", " col = col.replace(\"yearOfRegistration\",\n", " \"registration_year\")\n", " col = col.replace(\"monthOfRegistration\", \n", " \"registration_month\")\n", " col = col.replace(\"notRepairedDamage\", \n", " \"unrepaired_damage\")\n", " col = col.replace(\"dateCreated\", \n", " \"ad_created\")\n", " return re.sub('([a-z0-9])([A-Z])', r'\\1_\\2',col).lower()\n", " \n", "autos.columns = [clean_col(c) for c in autos.columns]\n", "print(autos.columns)\n", "autos.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***Changed Names for all the columnms from camelCase to snake_case. For e.g. 'nrOfPictures' became 'nr_of_pictures'***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Intitial Exploration and Cleaning\n", "\n", "Some other cleaning tasks could be:\n", "- We will look for Text columns where all or almost all values are the same. These can often be dropped as they don't have useful information for analysis. \n", "- Examples of numeric data stored as text which can be cleaned and converted." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_crawlednameselleroffer_typepriceabtestvehicle_typeregistration_yeargearboxpower_psmodelodometerregistration_monthfuel_typebrandunrepaired_damagead_creatednr_of_picturespostal_codelast_seen
count5000050000500005000050000500004490550000.0000004732050000.000000472425000050000.0000004551850000401715000050000.050000.00000050000
unique482133875422235728NaN2NaN24513NaN740276NaNNaN39481
top2016-03-08 10:40:35Ford_FiestaprivatAngebot$0testlimousineNaNmanuellNaNgolf150,000kmNaNbenzinvolkswagennein2016-04-03 00:00:00NaNNaN2016-04-07 06:17:27
freq378499994999914212575612859NaN36993NaN402432424NaN3010710687352321946NaNNaN8
meanNaNNaNNaNNaNNaNNaNNaN2005.073280NaN116.355920NaNNaN5.723360NaNNaNNaNNaN0.050813.627300NaN
stdNaNNaNNaNNaNNaNNaNNaN105.712813NaN209.216627NaNNaN3.711984NaNNaNNaNNaN0.025779.747957NaN
minNaNNaNNaNNaNNaNNaNNaN1000.000000NaN0.000000NaNNaN0.000000NaNNaNNaNNaN0.01067.000000NaN
25%NaNNaNNaNNaNNaNNaNNaN1999.000000NaN70.000000NaNNaN3.000000NaNNaNNaNNaN0.030451.000000NaN
50%NaNNaNNaNNaNNaNNaNNaN2003.000000NaN105.000000NaNNaN6.000000NaNNaNNaNNaN0.049577.000000NaN
75%NaNNaNNaNNaNNaNNaNNaN2008.000000NaN150.000000NaNNaN9.000000NaNNaNNaNNaN0.071540.000000NaN
maxNaNNaNNaNNaNNaNNaNNaN9999.000000NaN17700.000000NaNNaN12.000000NaNNaNNaNNaN0.099998.000000NaN
\n", "
" ], "text/plain": [ " date_crawled name seller offer_type price abtest \\\n", "count 50000 50000 50000 50000 50000 50000 \n", "unique 48213 38754 2 2 2357 2 \n", "top 2016-03-08 10:40:35 Ford_Fiesta privat Angebot $0 test \n", "freq 3 78 49999 49999 1421 25756 \n", "mean NaN NaN NaN NaN NaN NaN \n", "std NaN NaN NaN NaN NaN NaN \n", "min NaN NaN NaN NaN NaN NaN \n", "25% NaN NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN NaN \n", "max NaN NaN NaN NaN NaN NaN \n", "\n", " vehicle_type registration_year gearbox power_ps model \\\n", "count 44905 50000.000000 47320 50000.000000 47242 \n", "unique 8 NaN 2 NaN 245 \n", "top limousine NaN manuell NaN golf \n", "freq 12859 NaN 36993 NaN 4024 \n", "mean NaN 2005.073280 NaN 116.355920 NaN \n", "std NaN 105.712813 NaN 209.216627 NaN \n", "min NaN 1000.000000 NaN 0.000000 NaN \n", "25% NaN 1999.000000 NaN 70.000000 NaN \n", "50% NaN 2003.000000 NaN 105.000000 NaN \n", "75% NaN 2008.000000 NaN 150.000000 NaN \n", "max NaN 9999.000000 NaN 17700.000000 NaN \n", "\n", " odometer registration_month fuel_type brand unrepaired_damage \\\n", "count 50000 50000.000000 45518 50000 40171 \n", "unique 13 NaN 7 40 2 \n", "top 150,000km NaN benzin volkswagen nein \n", "freq 32424 NaN 30107 10687 35232 \n", "mean NaN 5.723360 NaN NaN NaN \n", "std NaN 3.711984 NaN NaN NaN \n", "min NaN 0.000000 NaN NaN NaN \n", "25% NaN 3.000000 NaN NaN NaN \n", "50% NaN 6.000000 NaN NaN NaN \n", "75% NaN 9.000000 NaN NaN NaN \n", "max NaN 12.000000 NaN NaN NaN \n", "\n", " ad_created nr_of_pictures postal_code last_seen \n", "count 50000 50000.0 50000.000000 50000 \n", "unique 76 NaN NaN 39481 \n", "top 2016-04-03 00:00:00 NaN NaN 2016-04-07 06:17:27 \n", "freq 1946 NaN NaN 8 \n", "mean NaN 0.0 50813.627300 NaN \n", "std NaN 0.0 25779.747957 NaN \n", "min NaN 0.0 1067.000000 NaN \n", "25% NaN 0.0 30451.000000 NaN \n", "50% NaN 0.0 49577.000000 NaN \n", "75% NaN 0.0 71540.000000 NaN \n", "max NaN 0.0 99998.000000 NaN " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos.describe(include='all')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### _Key Observations:_\n", "- **nr_of_pictures**, **seller** and **offer_type** columns have mostly a single value. And they should be dropped.\n", "- Columns **price** and **odometer** are shown as text (Object) type, whereas they should be numeric (int) type and should be converted." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 5000\n", "1 8500\n", "2 8990\n", "3 4350\n", "4 1350\n", "Name: price, dtype: int64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos[\"price\"] = autos[\"price\"].replace({'\\$':'',',':''}, regex=True).astype(int)\n", "autos[\"price\"].head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 150000\n", "1 150000\n", "2 70000\n", "3 70000\n", "4 150000\n", "Name: odometer_km, dtype: int64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos[\"odometer\"] = autos[\"odometer\"].replace({'km':'',',':''}, regex=True).astype(int)\n", "autos.rename(columns={'odometer':'odometer_km'}, inplace=True)\n", "autos['odometer_km'].head()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_crawlednamepriceabtestvehicle_typeregistration_yeargearboxpower_psmodelodometer_kmregistration_monthfuel_typebrandunrepaired_damagead_createdpostal_codelast_seen
count50000500005.000000e+04500004490550000.0000004732050000.0000004724250000.00000050000.0000004551850000401715000050000.00000050000
unique4821338754NaN28NaN2NaN245NaNNaN740276NaN39481
top2016-03-08 10:40:35Ford_FiestaNaNtestlimousineNaNmanuellNaNgolfNaNNaNbenzinvolkswagennein2016-04-03 00:00:00NaN2016-04-07 06:17:27
freq378NaN2575612859NaN36993NaN4024NaNNaN3010710687352321946NaN8
meanNaNNaN9.840044e+03NaNNaN2005.073280NaN116.355920NaN125732.7000005.723360NaNNaNNaNNaN50813.627300NaN
stdNaNNaN4.811044e+05NaNNaN105.712813NaN209.216627NaN40042.2117063.711984NaNNaNNaNNaN25779.747957NaN
minNaNNaN0.000000e+00NaNNaN1000.000000NaN0.000000NaN5000.0000000.000000NaNNaNNaNNaN1067.000000NaN
25%NaNNaN1.100000e+03NaNNaN1999.000000NaN70.000000NaN125000.0000003.000000NaNNaNNaNNaN30451.000000NaN
50%NaNNaN2.950000e+03NaNNaN2003.000000NaN105.000000NaN150000.0000006.000000NaNNaNNaNNaN49577.000000NaN
75%NaNNaN7.200000e+03NaNNaN2008.000000NaN150.000000NaN150000.0000009.000000NaNNaNNaNNaN71540.000000NaN
maxNaNNaN1.000000e+08NaNNaN9999.000000NaN17700.000000NaN150000.00000012.000000NaNNaNNaNNaN99998.000000NaN
\n", "
" ], "text/plain": [ " date_crawled name price abtest vehicle_type \\\n", "count 50000 50000 5.000000e+04 50000 44905 \n", "unique 48213 38754 NaN 2 8 \n", "top 2016-03-08 10:40:35 Ford_Fiesta NaN test limousine \n", "freq 3 78 NaN 25756 12859 \n", "mean NaN NaN 9.840044e+03 NaN NaN \n", "std NaN NaN 4.811044e+05 NaN NaN \n", "min NaN NaN 0.000000e+00 NaN NaN \n", "25% NaN NaN 1.100000e+03 NaN NaN \n", "50% NaN NaN 2.950000e+03 NaN NaN \n", "75% NaN NaN 7.200000e+03 NaN NaN \n", "max NaN NaN 1.000000e+08 NaN NaN \n", "\n", " registration_year gearbox power_ps model odometer_km \\\n", "count 50000.000000 47320 50000.000000 47242 50000.000000 \n", "unique NaN 2 NaN 245 NaN \n", "top NaN manuell NaN golf NaN \n", "freq NaN 36993 NaN 4024 NaN \n", "mean 2005.073280 NaN 116.355920 NaN 125732.700000 \n", "std 105.712813 NaN 209.216627 NaN 40042.211706 \n", "min 1000.000000 NaN 0.000000 NaN 5000.000000 \n", "25% 1999.000000 NaN 70.000000 NaN 125000.000000 \n", "50% 2003.000000 NaN 105.000000 NaN 150000.000000 \n", "75% 2008.000000 NaN 150.000000 NaN 150000.000000 \n", "max 9999.000000 NaN 17700.000000 NaN 150000.000000 \n", "\n", " registration_month fuel_type brand unrepaired_damage \\\n", "count 50000.000000 45518 50000 40171 \n", "unique NaN 7 40 2 \n", "top NaN benzin volkswagen nein \n", "freq NaN 30107 10687 35232 \n", "mean 5.723360 NaN NaN NaN \n", "std 3.711984 NaN NaN NaN \n", "min 0.000000 NaN NaN NaN \n", "25% 3.000000 NaN NaN NaN \n", "50% 6.000000 NaN NaN NaN \n", "75% 9.000000 NaN NaN NaN \n", "max 12.000000 NaN NaN NaN \n", "\n", " ad_created postal_code last_seen \n", "count 50000 50000.000000 50000 \n", "unique 76 NaN 39481 \n", "top 2016-04-03 00:00:00 NaN 2016-04-07 06:17:27 \n", "freq 1946 NaN 8 \n", "mean NaN 50813.627300 NaN \n", "std NaN 25779.747957 NaN \n", "min NaN 1067.000000 NaN \n", "25% NaN 30451.000000 NaN \n", "50% NaN 49577.000000 NaN \n", "75% NaN 71540.000000 NaN \n", "max NaN 99998.000000 NaN " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos.drop(columns = ['nr_of_pictures','seller','offer_type'], inplace=True)\n", "autos.describe(include='all')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exploring the Odometer and Price Columns\n", "\n", "- We continue exploring the data, specifically looking for data that doesn't look right. We'll start by analyzing the odometer_km and price columns. \n", "- We will analyze the columns using minimum and maximum values. And, look for any values that look unrealistically high or low (outliers) that we might want to remove." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2357,)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos['price'].unique().shape" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 5.000000e+04\n", "mean 9.840044e+03\n", "std 4.811044e+05\n", "min 0.000000e+00\n", "25% 1.100000e+03\n", "50% 2.950000e+03\n", "75% 7.200000e+03\n", "max 1.000000e+08\n", "Name: price, dtype: float64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos['price'].describe()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 1421\n", "1 156\n", "2 3\n", "3 1\n", "5 2\n", "8 1\n", "9 1\n", "10 7\n", "11 2\n", "12 3\n", "Name: price, dtype: int64\n" ] }, { "data": { "text/plain": [ "99999999 1\n", "27322222 1\n", "12345678 3\n", "11111111 2\n", "10000000 1\n", "3890000 1\n", "1300000 1\n", "1234566 1\n", "999999 2\n", "999990 1\n", "Name: price, dtype: int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(autos['price'].value_counts().sort_index().head(10))\n", "autos['price'].value_counts().sort_index(ascending=False).head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*We can observe outliers (below 100 or above 1000000), in `price` column and we will remove them.*" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2312,)\n" ] }, { "data": { "text/plain": [ "100 134\n", "110 3\n", "111 2\n", "115 2\n", "117 1\n", "120 39\n", "122 1\n", "125 8\n", "129 1\n", "130 15\n", "135 1\n", "139 1\n", "140 9\n", "145 2\n", "149 7\n", "150 224\n", "156 2\n", "160 8\n", "170 7\n", "173 1\n", "175 12\n", "179 1\n", "180 35\n", "185 1\n", "188 1\n", "190 16\n", "193 1\n", "195 2\n", "198 1\n", "199 41\n", " ... \n", "120000 2\n", "128000 1\n", "129000 1\n", "130000 1\n", "135000 1\n", "137999 1\n", "139997 1\n", "145000 1\n", "151990 1\n", "155000 1\n", "163500 1\n", "163991 1\n", "169000 1\n", "169999 1\n", "175000 1\n", "180000 1\n", "190000 1\n", "194000 1\n", "197000 1\n", "198000 1\n", "220000 1\n", "250000 1\n", "259000 1\n", "265000 1\n", "295000 1\n", "299000 1\n", "345000 1\n", "350000 1\n", "999990 1\n", "999999 2\n", "Name: price, Length: 2312, dtype: int64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Removing Outliers\n", "autos = autos[autos['price'].between(100,1000000)]\n", "\n", "print(autos['price'].unique().shape)\n", "autos['price'].value_counts().sort_index()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(13,)\n" ] }, { "data": { "text/plain": [ "count 48227.000000\n", "mean 125920.127729\n", "std 39542.413981\n", "min 5000.000000\n", "25% 125000.000000\n", "50% 150000.000000\n", "75% 150000.000000\n", "max 150000.000000\n", "Name: odometer_km, dtype: float64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(autos['odometer_km'].unique().shape)\n", "autos['odometer_km'].describe()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5000 760\n", "10000 245\n", "20000 757\n", "30000 777\n", "40000 814\n", "50000 1009\n", "60000 1153\n", "70000 1214\n", "80000 1412\n", "90000 1733\n", "100000 2101\n", "125000 5038\n", "150000 31214\n", "Name: odometer_km, dtype: int64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos['odometer_km'].value_counts().sort_index()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***We removed outliers from price column and found no outliers in odometer_km column.***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exploring the Date Columns\n", "\n", "There are 5 columns that should represent date values. Some of these columns were created by the crawler, some came from the website itself." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_crawledad_createdlast_seenregistration_monthregistration_year
02016-03-26 17:47:462016-03-26 00:00:002016-04-06 06:45:5432004
12016-04-04 13:38:562016-04-04 00:00:002016-04-06 14:45:0861997
22016-03-26 18:57:242016-03-26 00:00:002016-04-06 20:15:3772009
32016-03-12 16:58:102016-03-12 00:00:002016-03-15 03:16:2862007
42016-04-01 14:38:502016-04-01 00:00:002016-04-01 14:38:5072003
\n", "
" ], "text/plain": [ " date_crawled ad_created last_seen \\\n", "0 2016-03-26 17:47:46 2016-03-26 00:00:00 2016-04-06 06:45:54 \n", "1 2016-04-04 13:38:56 2016-04-04 00:00:00 2016-04-06 14:45:08 \n", "2 2016-03-26 18:57:24 2016-03-26 00:00:00 2016-04-06 20:15:37 \n", "3 2016-03-12 16:58:10 2016-03-12 00:00:00 2016-03-15 03:16:28 \n", "4 2016-04-01 14:38:50 2016-04-01 00:00:00 2016-04-01 14:38:50 \n", "\n", " registration_month registration_year \n", "0 3 2004 \n", "1 6 1997 \n", "2 7 2009 \n", "3 6 2007 \n", "4 7 2003 " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos[['date_crawled','ad_created','last_seen', 'registration_month', 'registration_year']][0:5]" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "date_crawled object\n", "ad_created object\n", "last_seen object\n", "registration_month int64\n", "registration_year int64\n", "dtype: object" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos[['date_crawled','ad_created','last_seen', 'registration_month', 'registration_year']].dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`date_crawled`, `last_seen`, and `ad_created` columns are all identified as string values by pandas. Because these three columns are represented as strings, we need to convert the data into a numerical representation so we can understand it quantitatively. \n", "\n", "`registration_month` and `registration_year` are represented as numeric values, so we can use methods like Series.describe() and draw graphs to understand the distribution without any extra data processing." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cleaning `date_crawled`, `last_seen`, and `ad_created`\n", "We will clean and analyze the date columns first. We can notice that the first 10 characters represent the day (e.g. 2016-03-12). To understand the date range, we can extract just the date value by doing some string formatting" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_crawlednamepriceabtestvehicle_typeregistration_yeargearboxpower_psmodelodometer_kmregistration_monthfuel_typebrandunrepaired_damagead_createdpostal_codelast_seen
020160326Peugeot_807_160_NAVTECH_ON_BOARD5000controlbus2004manuell158andere1500003lpgpeugeotnein201603267958820160406
120160404BMW_740i_4_4_Liter_HAMANN_UMBAU_Mega_Optik8500controllimousine1997automatik2867er1500006benzinbmwnein201604047103420160406
220160326Volkswagen_Golf_1.6_United8990testlimousine2009manuell102golf700007benzinvolkswagennein201603263539420160406
320160312Smart_smart_fortwo_coupe_softouch/F1/Klima/Pan...4350controlkleinwagen2007automatik71fortwo700006benzinsmartnein201603123372920160315
420160401Ford_Focus_1_6_Benzin_TÜV_neu_ist_sehr_gepfleg...1350testkombi2003manuell0focus1500007benzinfordnein201604013921820160401
\n", "
" ], "text/plain": [ " date_crawled name price \\\n", "0 20160326 Peugeot_807_160_NAVTECH_ON_BOARD 5000 \n", "1 20160404 BMW_740i_4_4_Liter_HAMANN_UMBAU_Mega_Optik 8500 \n", "2 20160326 Volkswagen_Golf_1.6_United 8990 \n", "3 20160312 Smart_smart_fortwo_coupe_softouch/F1/Klima/Pan... 4350 \n", "4 20160401 Ford_Focus_1_6_Benzin_TÜV_neu_ist_sehr_gepfleg... 1350 \n", "\n", " abtest vehicle_type registration_year gearbox power_ps model \\\n", "0 control bus 2004 manuell 158 andere \n", "1 control limousine 1997 automatik 286 7er \n", "2 test limousine 2009 manuell 102 golf \n", "3 control kleinwagen 2007 automatik 71 fortwo \n", "4 test kombi 2003 manuell 0 focus \n", "\n", " odometer_km registration_month fuel_type brand unrepaired_damage \\\n", "0 150000 3 lpg peugeot nein \n", "1 150000 6 benzin bmw nein \n", "2 70000 7 benzin volkswagen nein \n", "3 70000 6 benzin smart nein \n", "4 150000 7 benzin ford nein \n", "\n", " ad_created postal_code last_seen \n", "0 20160326 79588 20160406 \n", "1 20160404 71034 20160406 \n", "2 20160326 35394 20160406 \n", "3 20160312 33729 20160315 \n", "4 20160401 39218 20160401 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos['date_crawled'] = autos['date_crawled'].str[:10]\n", "autos['date_crawled'] = autos['date_crawled'].str.replace('-','').astype(int)\n", "\n", "autos['last_seen'] = autos['last_seen'].str[:10]\n", "autos['last_seen'] = autos['last_seen'].str.replace('-','').astype(int)\n", "\n", "autos['ad_created'] = autos['ad_created'].str[:10]\n", "autos['ad_created'] = autos['ad_created'].str.replace('-','').astype(int)\n", "\n", "autos.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Analyzing `date_crawled`**" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[20160326 20160404 20160312 20160401 20160321 20160320 20160316 20160322\n", " 20160315 20160331 20160323 20160329 20160317 20160305 20160306 20160328\n", " 20160310 20160403 20160319 20160402 20160314 20160405 20160311 20160307\n", " 20160308 20160327 20160309 20160325 20160318 20160330 20160324 20160313\n", " 20160406 20160407]\n" ] }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "print(autos['date_crawled'].unique())\n", "autos['date_crawled'].groupby(autos['date_crawled']).count().plot(kind='bar', figsize=(14, 3))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***DATE CRAWLED - The above distribution look like a uniform ditribution.
Which means that the ads were crawled on a regular basis, with an average of 3% ads being crawled daily for 34 days.***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Analyzing `ad_created`**" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[20160326 20160404 20160312 20160401 20160321 20160320 20160316 20160322\n", " 20160314 20160331 20160323 20160329 20160317 20160305 20160306 20160328\n", " 20160310 20160403 20160319 20160402 20160315 20160405 20160311 20160307\n", " 20160308 20160327 20160309 20160325 20160318 20160330 20160324 20160313\n", " 20160406 20160304 20160407 20160224 20160302 20160229 20160103 20151110\n", " 20160301 20160303 20160228 20160127 20160219 20160225 20160223 20160214\n", " 20160212 20160129 20160205 20160122 20160201 20160202 20160217 20160221\n", " 20150810 20150611 20160211 20160114 20160110 20160208 20151205 20160227\n", " 20160222 20160113 20150909 20160220 20160116 20151230 20160207 20160107\n", " 20160226 20160218 20160209 20160216]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "print(autos['ad_created'].unique())\n", "autos['ad_created'].groupby(autos['ad_created']).count().plot(kind='bar', figsize=(16, 4))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***AD CREATED - The above distribbution look like a left skewed ditribution.Which means that most of the ads were created recently.
It could be beacuse the cars that were posted earlier (like a month or two ago) would have got sold, hence their ad was pulled down.
Leaving only a very small number of ads (of unsold cars) posted from a long period of time.***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Analyzing `last_seen`**" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[20160406 20160315 20160401 20160323 20160407 20160326 20160316 20160402\n", " 20160318 20160405 20160317 20160307 20160328 20160312 20160324 20160404\n", " 20160330 20160331 20160320 20160319 20160403 20160314 20160310 20160327\n", " 20160322 20160329 20160311 20160325 20160313 20160309 20160321 20160306\n", " 20160308 20160305]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "print(autos['last_seen'].unique())\n", "autos['last_seen'].groupby(autos['last_seen']).count().plot(kind='bar', figsize=(14, 3))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***LAST SEEN - Here the distribution is heavily left skewed, with almost 50% of the ads being seen in last 3 days of the dataset.
We can give a similar analogy to 'ad_created', older car ads are in less quantity in last seen, as they might be sold already.
And, as a consequence most of the last seens ads are of recent sellers, who are interested in selling their cars ASAP.***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cleaning, Analyzing `registration_month` and `registration_year`\n", "\n", "Removing outliers (if any) from both the columns." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 3 6 7 4 8 12 10 0 9 11 5 2 1]\n" ] }, { "data": { "text/plain": [ "3 4981\n", "0 4313\n", "6 4255\n", "4 4020\n", "5 4016\n", "7 3842\n", "10 3577\n", "12 3359\n", "9 3318\n", "11 3305\n", "1 3199\n", "8 3115\n", "2 2927\n", "Name: registration_month, dtype: int64" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(autos['registration_month'].unique())\n", "autos['registration_month'].value_counts() " ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 3 6 7 4 8 12 10 9 11 5 2 1]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Observed 0 as an outlier\n", "autos = autos[autos['registration_month']!=0]\n", "\n", "print(autos['registration_month'].unique())\n", "autos['registration_month'].groupby(autos['registration_month']).count().plot(kind='bar', figsize=(8, 3))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***Observed outlier for 'Registration month' was 0. Removed it.\n", "And, as expected the ditribution is uniform, since people can buy cars any month of the year.***" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1800, 1927, 1929, 1931, 1934, 1937, 1938, 1939, 1941, 1943, 1948, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2800, 4800, 5000, 6200, 9000]\n" ] }, { "data": { "text/plain": [ "count 43914.000000\n", "mean 2004.060277\n", "std 44.351169\n", "min 1800.000000\n", "25% 1999.000000\n", "50% 2004.000000\n", "75% 2008.000000\n", "max 9000.000000\n", "Name: registration_year, dtype: float64" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(sorted(autos['registration_year'].unique()))\n", "autos['registration_year'].describe()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1927, 1929, 1931, 1934, 1937, 1938, 1939, 1941, 1943, 1948, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Here all the values for years before 1900 and after 2017 are invlaid or outliers\n", "\n", "autos = autos[autos['registration_year'].between(1900,2017)]\n", "\n", "print(sorted(autos['registration_year'].unique()))\n", "autos['registration_year'].groupby(autos['registration_year']).count().plot(kind='bar', figsize=(16, 3))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***Observed outliers for 'Registration year' were values below 1900 and above 2017. Removed those outliers.
We can observe that the distribution is left skewed.\n", "Most of the cars were registered between 1998-2008.
\n", "It can be explained from the fact that most cars are used for max. 10-15 years and then sell/discard them.***" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_crawlednamepriceabtestvehicle_typeregistration_yeargearboxpower_psmodelodometer_kmregistration_monthfuel_typebrandunrepaired_damagead_createdpostal_codelast_seen
020160326Peugeot_807_160_NAVTECH_ON_BOARD5000controlbus2004manuell158andere1500003lpgpeugeotnein201603267958820160406
120160404BMW_740i_4_4_Liter_HAMANN_UMBAU_Mega_Optik8500controllimousine1997automatik2867er1500006benzinbmwnein201604047103420160406
220160326Volkswagen_Golf_1.6_United8990testlimousine2009manuell102golf700007benzinvolkswagennein201603263539420160406
320160312Smart_smart_fortwo_coupe_softouch/F1/Klima/Pan...4350controlkleinwagen2007automatik71fortwo700006benzinsmartnein201603123372920160315
420160401Ford_Focus_1_6_Benzin_TÜV_neu_ist_sehr_gepfleg...1350testkombi2003manuell0focus1500007benzinfordnein201604013921820160401
\n", "
" ], "text/plain": [ " date_crawled name price \\\n", "0 20160326 Peugeot_807_160_NAVTECH_ON_BOARD 5000 \n", "1 20160404 BMW_740i_4_4_Liter_HAMANN_UMBAU_Mega_Optik 8500 \n", "2 20160326 Volkswagen_Golf_1.6_United 8990 \n", "3 20160312 Smart_smart_fortwo_coupe_softouch/F1/Klima/Pan... 4350 \n", "4 20160401 Ford_Focus_1_6_Benzin_TÜV_neu_ist_sehr_gepfleg... 1350 \n", "\n", " abtest vehicle_type registration_year gearbox power_ps model \\\n", "0 control bus 2004 manuell 158 andere \n", "1 control limousine 1997 automatik 286 7er \n", "2 test limousine 2009 manuell 102 golf \n", "3 control kleinwagen 2007 automatik 71 fortwo \n", "4 test kombi 2003 manuell 0 focus \n", "\n", " odometer_km registration_month fuel_type brand unrepaired_damage \\\n", "0 150000 3 lpg peugeot nein \n", "1 150000 6 benzin bmw nein \n", "2 70000 7 benzin volkswagen nein \n", "3 70000 6 benzin smart nein \n", "4 150000 7 benzin ford nein \n", "\n", " ad_created postal_code last_seen \n", "0 20160326 79588 20160406 \n", "1 20160404 71034 20160406 \n", "2 20160326 35394 20160406 \n", "3 20160312 33729 20160315 \n", "4 20160401 39218 20160401 " ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autos.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exploring Price by Brand\n", "\n", "***Selecting Top Brands***" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['volkswagen', 'bmw', 'opel', 'mercedes_benz', 'audi', 'ford'], dtype='object')\n" ] } ], "source": [ "brands = autos['brand'].value_counts(normalize=True)\n", "results = brands >= 0.05\n", "\n", "## Finding names of brands wit more then 5% share of ads\n", "top_brands_name = brands[results].index\n", "print(top_brands_name)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***Mean Price***" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'volkswagen': 5943.71,\n", " 'bmw': 8637.41,\n", " 'opel': 3173.85,\n", " 'mercedes_benz': 8846.68,\n", " 'audi': 9718.9,\n", " 'ford': 4289.74}" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "brand_mean_price = {}\n", "\n", "for car in top_brands_name:\n", " mean_price = autos.loc[autos['brand']== car,'price'].mean()\n", " brand_mean_price[car] = round(mean_price, 2)\n", " \n", "brand_mean_price" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***Mean Mileage***" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'volkswagen': 128365.67,\n", " 'bmw': 132575.41,\n", " 'opel': 128805.64,\n", " 'mercedes_benz': 131034.56,\n", " 'audi': 128830.76,\n", " 'ford': 123839.23}" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "brand_mean_mileage = {}\n", "\n", "for car in top_brands_name:\n", " mean_mileage = autos.loc[autos['brand'] == car, 'odometer_km'].mean()\n", " brand_mean_mileage[car] = round(mean_mileage, 2)\n", "\n", "brand_mean_mileage" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***The average prices are as follows:***\n", "\n", "|**Brand**|Average Price|\n", "|-|-|\n", "|**Volkswagen:** | 5943.71 |\n", "|**BMW:** | 8637.41|\n", "|**Opel:** | 3173.85|\n", "|**Mercedes Benz:** | 8846.68|\n", "|**Audi:** | 9718.9|\n", "|**Ford:** | 4289.74|\n", "\n", "***Here we may notice that the most expensive vehicles are from Audi, BMW and Mercedes.
While Ford, Opel are the most economical options, Volkswagen is in between.***\n", "\n", "---\n", "\n", "***The Average Mileage is as follows***\n", "\n", "|**Brand**|Average Price|\n", "|-|-|\n", "|**Volkswagen** | 128365.67|\n", "|**BMW**|132575.41|\n", "|**Opel** | 128805.64|\n", "|**Mercedes Benz**| 131034.56|\n", "|**Audi**|128830.76|\n", "|**Ford**| 123839.23|\n", "\n", "***Here, maximum mileage is given by BMW and least by Ford.***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Storing Aggregate Data in a DataFrame" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**First we will convert dictionary into a Series**" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "bmp_series\n", "\n", "audi 9718.90\n", "mercedes_benz 8846.68\n", "bmw 8637.41\n", "volkswagen 5943.71\n", "ford 4289.74\n", "opel 3173.85\n", "dtype: float64 \n", "\n", "bmm_series\n" ] }, { "data": { "text/plain": [ "bmw 132575.41\n", "mercedes_benz 131034.56\n", "audi 128830.76\n", "opel 128805.64\n", "volkswagen 128365.67\n", "ford 123839.23\n", "dtype: float64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bmp_series = pd.Series(brand_mean_price).sort_values(ascending=False)\n", "bmm_series = pd.Series(brand_mean_mileage).sort_values(ascending=False)\n", "print('bmp_series\\n')\n", "print(bmp_series,'\\n')\n", "print('bmm_series')\n", "bmm_series" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Create a dataframe from the first series object using the dataframe constructor.**" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mean_price
audi9718.90
mercedes_benz8846.68
bmw8637.41
volkswagen5943.71
ford4289.74
opel3173.85
\n", "
" ], "text/plain": [ " mean_price\n", "audi 9718.90\n", "mercedes_benz 8846.68\n", "bmw 8637.41\n", "volkswagen 5943.71\n", "ford 4289.74\n", "opel 3173.85" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "top_brands_df = pd.DataFrame(bmp_series, columns=['mean_price'])\n", "top_brands_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Assign the other series as a new column in this dataframe.**" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mean_pricemean_mileage
audi9718.90128830.76
mercedes_benz8846.68131034.56
bmw8637.41132575.41
volkswagen5943.71128365.67
ford4289.74123839.23
opel3173.85128805.64
\n", "
" ], "text/plain": [ " mean_price mean_mileage\n", "audi 9718.90 128830.76\n", "mercedes_benz 8846.68 131034.56\n", "bmw 8637.41 132575.41\n", "volkswagen 5943.71 128365.67\n", "ford 4289.74 123839.23\n", "opel 3173.85 128805.64" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "top_brands_df['mean_mileage'] = bmm_series\n", "top_brands_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***Here we can observe that car mileage/brand does not vary much as compared to the car prices/brand.

While mean price difference for most expensive car brand (Audi) and most economical car brand (Opel) was a gigantic 71%.
However, same is not true for mean mileage, with total difference between top mileage giving brand(BMW) & least mileage giving brand(Ford) being mere 7%.***" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }