<jupyter_start><jupyter_text>Descrição do DatasetLink: https://www.kaggle.com/austinreese/craigslist-carstrucks-dataO dataset contém os carros usados e à venda listados no Craiglist dentro dos Estados Unidos. Dados foram coletados através de um scrapper e atualizados constantemente dentro do período de alguns meses.O dataset contém quase todas as informações relevantes mostradas no Craiglist.O dataset contém 435.849 amostras. Colunas do Dataset| Coluna                 | Descrição                                                                                    | Tipo         ||------------------------|----------------------------------------------------------------------------------------------|--------------|| id                     | Identificador da entrada, número único que representa o anúncio que foi postado no Craiglist | Integer      || url                    | Url do anúncio                                                                               | String       || region                 | Região dos Estados Unidos no Craiglist                                                       | String       || price                  | Preço (em dólar) do carro no anúncio                                                         | Float        || year                   | Ano de fabricaçao do veiculo                                                                 | Integer      || manufacturer           | Fabricante do veículo                                                                        | String       || model                  | Modelo/nome do veículo                                                                       | String       || condition              | Condição do veículo (boa, ruim, seminovo, excelente...)                                      | String       || cylinders              | Número de cilindros                                                                          | Integer      || fuel                   | Tipo de combustivel                                                                          | String       || odometer               | Milhas viajada pelo veículo                                                                  | Float        || title_status           | O status do veículo (limpo, reconstruído, apenas partes...)                                  | String       || transmission           | Tipo de transmissão do veículo                                                               | String       || drive                  | Tipo de tração: rwd (traseira), 4wd (quatro rodas) e fwd (dianteira)                         | String       || size                   | Tamanho do veículo                                                                           | String       || type                   | Tipo genérico do veículo (pickup, offroad, hatchback, sedan, suv...)                         | String       || paint_color            | Cor do veículo                                                                               | String       || description            | Descrição do veículo no anúncio                                                              | String       || state                  | Estado onde foi feito o anúncio                                                              | String       || lat                    | Latitude do anúncio                                                                          | Float        || long                   | Longitude do anúncio                                                                         | Float        || vin (removida)          | Número de identificação do veículo                                                           | String       || region_url (removida)  | Url da região do Estados Unidos                                                              | String       || county     (removida)  | Coluna inútil deixada por engano, será desconsiderada durante o projeto                      | Float        || image_url  (removida)  | Url da imagem                                                                                | String       |<jupyter_code>import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns<jupyter_output><empty_output><jupyter_text>Carregamento do dataset<jupyter_code>ORIGINAL_DATASET = "../datasets/vehicles.csv"

df = pd.read_csv(ORIGINAL_DATASET)
df<jupyter_output><empty_output><jupyter_text>Visão geral do dataset<jupyter_code>df.head()
df.describe()
df.dtypes
df.info()<jupyter_output><class 'pandas.core.frame.DataFrame'>
RangeIndex: 435849 entries, 0 to 435848
Data columns (total 25 columns):
 #   Column        Non-Null Count   Dtype  
---  ------        --------------   -----  
 0   id            435849 non-null  int64  
 1   url           435849 non-null  object 
 2   region        435849 non-null  object 
 3   region_url    435849 non-null  object 
 4   price         435849 non-null  int64  
 5   year          434732 non-null  float64
 6   manufacturer  415102 non-null  object 
 7   model         429650 non-null  object 
 8   condition     249043 non-null  object 
 9   cylinders     269465 non-null  object 
 10  fuel          432858 non-null  object 
 11  odometer      360701 non-null  float64
 12  title_status  434043 non-null  object 
 13  transmission  433703 non-null  object 
 14  vin           239197 non-null  object 
 15  drive         313838 non-null  object 
 16  size          139888 non-null  object 
 17  type          318741 non-null  object 
 18  pain[...]<jupyter_text>Remove as colunas 'county', 'region_url', 'image_url' e 'vin'A coluna county não continha informações utéis, todos os valores eram nulos. A coluna region_url contém informação redundante, portanto também foi removida, e a coluna image_url não será útil nesse projeto.É criado o 'clean_vehicles.csv', que é o dataset sem essas colunas.<jupyter_code>df.drop(columns=['county', 'region_url', 'image_url'], inplace=True)
DATASET = "../datasets/clean_vehicles.csv"
df.to_csv(DATASET, index=False)
df.head()<jupyter_output><empty_output><jupyter_text>Usando o dataset apenas com as colunas relevantes<jupyter_code>df = pd.read_csv(DATASET)
df.head()<jupyter_output><empty_output><jupyter_text>Mostra o número de elementos nulos em cada coluna do dataset<jupyter_code>df['size']
df.isnull().sum()<jupyter_output><empty_output><jupyter_text>Visualização de dados Preço (price)De acordo com as análises abaixo pode-se notar que há vários anúncios o com preços de carro menor que U\$100, que são provavelmente outliers.<jupyter_code>df['log_price'] = df['price'].apply(np.log10)
df[df['price'] > 0]['price'].apply(np.log10).hist()
df[df['log_price'] > 0].boxplot(column=['log_price'])
too_low_price_df = df[df['price'] < 500]
too_low_price_df['price'].hist()
too_high_price_df = df[df['price'] > 200000]
too_high_price_df['price'].hist()<jupyter_output><empty_output><jupyter_text>Milhas viajadas (odometer)<jupyter_code>df['log_odometer'] = df['odometer'].apply(np.log10)
df[df['log_odometer'] > 0]['log_odometer'].hist()
df[df['log_odometer'] > 0].boxplot(column='log_odometer')
# Verifica se existe carros com quantidade de milhas menor que zero
df[df['odometer'] < 0]
df[df.odometer > 2000000].odometer
# Quantidade de valores faltantes para a coluna 'odometer'
df['odometer'].isnull().sum()
df.drop(columns=['log_odometer'], inplace=True)<jupyter_output><empty_output><jupyter_text>Latitude e Longitude (lat e lon)<jupyter_code># Verifica se existe algum dado de latitude fora do range
df[(df['lat'] < -90) & (df['lat'] > 90)]
# Verifica se existe algum dado de longitude fora do range
df[(df['long'] < -180) & (df['long'] > 180)]
null_lat = df.lat.isnull().sum()
null_long = df.long.isnull().sum()
print("Latitudes nulas: {}\nLongitudes nulas: {}".format(null_lat, null_long))
#sns.pairplot(df, x_vars=['lat', 'long'], y_vars=['lat', 'long'])
fig, ax = plt.subplots()
ax.scatter(df['long'], df['lat'], s = 14, color = 'blue', alpha = 1)
ax.set(xlabel = 'lon', ylabel = 'lat')
plt.axis([-180,180,-90,90])
plt.gcf().set_size_inches((12,12))
plt.show()
df.info()
df[df['manufacturer'].isnull()]<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10413607440039158, 'fraction_numerical': 0.027288301517376407, 'mean_word_length': 1.5209747069710056, 'pattern_counts': {'":': 0, '<': 41, '<?xml version=': 0, '>': 45, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 54, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '610372', 'license': 'MIT', 'n_tokens_mistral': 2343, 'n_tokens_neox': 2154, 'n_words': 601, 'path': 'Parte 1/notebooks/1-initial-analysis.ipynb', 'repo_name': 'mbs8/IF679-ciencia-de-dados', 'size': '8172'}