<jupyter_start><jupyter_text>Estatísticas descritivas e Visualização de DadosEste notebook é responsável por mostrar as estatíscas descritivas da base dados com visualizações.Será analisado o comportamento de algumas características que são cruciais na compra/venda de veículos usados.<jupyter_code>from Utils import *
from tqdm import tqdm
from matplotlib import pyplot as plt
import seaborn as sns
pd.set_option('display.max_colwidth', 100)
DATASET = "../datasets/clean_vehicles_2.csv"
df = pd.read_csv(DATASET)

df.describe()<jupyter_output><empty_output><jupyter_text>Estatísticas UnivariadasAqui vamos análisar o comportamento de alguns dados em relação a sua distribuição. Ano de fabricação<jupyter_code>##Análise de média, desvio padrão, mediana e moda do Ano de fabricação
print(
"Ano do veículo:\n"
"Média: "+floatStr(df['year'].mean())+"\n"+
"Desvio padrão: "+floatStr(df['year'].std())+"\n"+   
"Mediana: "+floatStr(df['year'].median())+"\n"+
"IQR: "+floatStr(df['year'].describe()[6] - df['year'].describe()[4])+"\n"+
"Moda: "+floatStr(df['year'].mode().loc[0])    
)<jupyter_output>Ano do veículo:
Média: 2010.26
Desvio padrão: 8.67
Mediana: 2012.0
IQR: 9.0
Moda: 2017.0<jupyter_text>Aqui notamos uma mediana maior do que a média. O que nos levar a imaginar que esta grandeza não segue uma distribuição normal.Isto indica que deve haver alguns carros muito antigos sendo vendidos, gerando uma caractéristica de assimetria na curva.Para verifcarmos isso, vamos gerar o histograma<jupyter_code>##Plotar o histograma da distribuição em relação ao ano de fabricação do veículo
bars = df[df['year']> 0].year.max() - df[df['year']> 0].year.min()
df[df['year']> 0].year.hist(bins = int(bars))<jupyter_output><empty_output><jupyter_text>Porém, este plotting não nos dá uma boa visualização. Nesta lista há alguns carros voltados para colecionadores, que não é o perfil que queremos estudar. Então, tomando o ano de 1985 como limiar, analisamos o histograma da distribuição de carros comercializáveis "para uso normal".Agora conseguimos perceber que a maior parte dos carros vendidos são fábricados depois de 2000.<jupyter_code>##Plot do histograma dos anos de fabricação do carro limitando à 1985
bars = df['year'].max() - 1985
df[df['year']> 1985].year.hist(bins = int(bars))<jupyter_output><empty_output><jupyter_text>Preço de revenda do veículo<jupyter_code>##Análise de estatísticas univariadas dos valores de preço do veículo
print(
"Preço do veículo:\n"
"Média: "+floatStr(df[df['price'] > 0].price.mean())+"\n"+
"Desvio padrão: "+floatStr(df[df['price'] > 0].price.std())+"\n"+   
"Mediana: "+floatStr(df[df['price'] > 0].price.median())+"\n"+
"IQR: "+floatStr(df['price'].describe()[6] - df['price'].describe()[4])+"\n"+
"Moda: "+floatStr(df[df['price'] > 0].price.mode().loc[0])    
)<jupyter_output>Preço do veículo:
Média: 36809.65
Desvio padrão: 6571953.45
Mediana: 11495.0
IQR: 13000.0
Moda: 7995<jupyter_text>Aqui encontramos uma diferença muito grandes nestes dados. O que nos faz pensar que temos uma distribuição muito variada e assimétrica de preços.Devido a esta característica, não conseguiremos ver um histograma com todos os dados. Podemos contornar isto de 2 maneiras:   * Poderíamos usar o log10 para ter uma noção da ordem de grandeza, mas não conseguiríamos extrair muita informação, pois a maioria se encaixariam em log10(x) = 4.   * Outra alternativa seria plotar um subconjunto dos preços. Então, depois de algumas análises, protaremos apenas valores de 0 a $ 100.000.<jupyter_code>sns.distplot(df[(df['price'] > 0) & (df['price'] < 100000)].price, bins = 100,norm_hist = False, hist=True, kde=False)<jupyter_output><empty_output><jupyter_text>Leitura atual do Odômetro (Milhas percorrida pelo veículo)<jupyter_code>##Análise de estatísticas univariadas dos valores de leitura do Odômetro.
##Note que estamos descartando valores nulos para fazer esta análise
print(
"Odômetro do veículo:\n"
"Média: "+floatStr(df[df['odometer'] > 0].odometer.mean())+"\n"+
"Desvio padrão: "+floatStr(df[df['odometer'] > 0].odometer.std())+"\n"+   
"Mediana: "+floatStr(df[df['odometer'] > 0].odometer.median())+"\n"+
"IQR: "+floatStr(df['odometer'].describe()[6] - df['odometer'].describe()[4])+"\n"+
"Moda: "+floatStr(df[df['odometer'] > 0].odometer.mode().loc[0])    
)<jupyter_output>Odômetro do veículo:
Média: 99705.09
Desvio padrão: 111570.94
Mediana: 92200.0
IQR: 92054.0
Moda: 150000.0<jupyter_text>Aqui também temos uma grande varidade de valores. Apenas 492 deles estão acima de 800.000 de milhas registradas. Para fim de análise, iremos utilizar este intervalo.<jupyter_code>sns.distplot(df[(df['odometer'] > 0) & (df['odometer'] < 400000)].odometer, bins = 100,norm_hist = False, hist=True, kde=False)<jupyter_output><empty_output><jupyter_text>Visualização de quantidade de anúncios por fabricantes de veículosFaremos uma análise visual para tentar perceber quais as marcas mais populares no mercado de seminovos.<jupyter_code>## Plotar a divisão de mercas que são mais anunciadas
manufacturers = df['manufacturer'].value_counts().drop(df['manufacturer'].value_counts().index[8]).drop(df['manufacturer'].value_counts().index[13:])
sns.set()
plt.figure(figsize=(10,5))
sns.barplot(x=manufacturers.index, y=manufacturers)
print("As 3 marcas mais anunciadas (Ford, chevrolet, toyota) equivalem a "
      +str(round(sum(df['manufacturer'].value_counts().values[0:3])/df['manufacturer'].count()*100,2))
      +"% deste mercado.")

filter_list = ['ford', 'chevrolet', 'toyota', 'nissan', 'honda']
filtereddf = df[df.manufacturer.isin(filter_list)]

ax = sns.boxplot(x="manufacturer", y="price", data= filtereddf[filtereddf['price']< 40000])<jupyter_output><empty_output><jupyter_text>Visualização da relação entre preço de carros classificados por traçãoAqui podemos comparar como o preço variam de acordo com a tração do veículo    * 4wd: 4x4   * rwd: tração traseira    * fwd: <NAME>        Comparamos a média, mediana e quantidade. Porém, já percebemos de análises anteriores que a mediana nos dá um valor mais razoável, por isto ordenamos baseado nela<jupyter_code>df[df['drive'] != 'undefined'].groupby(['drive']).agg(['mean','median','count'])['price'].sort_values(by='median', ascending=False)<jupyter_output><empty_output><jupyter_text>Estatísticas BivariadasAqui vamos tentar encontrar se as grandezas numéricas possuem algum tipo de correlação. Primeiro analisaremos o método de spearman, depois de pearson. Em seguida tentaremos utilizar<jupyter_code>##Aplicando-se alguns limitadores para analisar correlações entre as variáveis
car = df[(df['odometer']> 0) & (df['odometer']<400000)]
car = car[(car['price']>0) & (car['price']<100000)]
car = car[car['year']>=1985]
car = car.drop(['lat','long'], axis=1)
car.cov()
car.corr(method='spearman')
car.corr(method='pearson')
##Relaçãoo de preço x milhas rodadas entre as 3 marcas mais populares
filter_list = ['ford', 'chevrolet', 'toyota']
car[car['manufacturer'].isin(filter_list)].plot.scatter(x='odometer',y='price')
g = sns.FacetGrid(car[car['manufacturer']!='undefined'], col="manufacturer", hue='drive')
g.map(sns.scatterplot, "year", "price")
g.add_legend()

#Clique na imagem pequena para expandir<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13994734654288485, 'fraction_numerical': 0.029652210059581543, 'mean_word_length': 6.662420382165605, 'pattern_counts': {'":': 0, '<': 48, '<?xml version=': 0, '>': 60, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '434', 'license': 'MIT', 'n_tokens_mistral': 2900, 'n_tokens_neox': 2635, 'n_words': 688, 'path': 'Parte 1/notebooks/3-descriptive_stats.ipynb', 'repo_name': 'mbs8/IF679-ciencia-de-dados', 'size': '7227'}