<jupyter_start><jupyter_text>Ao chamar a função _describe()_ no dataframe "df", é possível obter alguns cálculos básicos relacionados às features numéricas do dataframe. As features são: * count = quantidade de valores (2775 linhas)* mean = média* std = desvio padrão (standard deviation)Ao analisar tais dados, é possível observar que a média dos preços de aluguel é de aprox. 2279 reais. A média do preço total é de aprox. 3235 reais.Esses valores possuem um significado muito importante. O preço total do aluguel corresponde aprox. ao triplo do salário mínimo no Brasil.Tal informação abre a (pelo menos) três interpretações possíveis:1.   Os dados estão deturpados;2.   A cidade de São Paulo possui um custo-de-vida altíssimo;3.   O portal QuintoAndar possui um viés, onde a maior parte de seus anúncios corresponde aos imóveis localizados nos bairros mais valorizados da cidade.Para constatar qual interpretação é a correta, vamos resgatar quais são os bairros que mais aparecem em nosso _dataset_.<jupyter_code>df['bairro'].value_counts()<jupyter_output><empty_output><jupyter_text>_Touché!_ Quem conhece a cidade de São Paulo, identifica que os bairros que mais aparecem em nosso _dataset_ correspondem aos bairros mais ricos da cidade (e também do Brasil).  Vamos gerar um gráfico de barras. O eixo _x_ corresponderá aos nossos bairros, e o eixo _y_ corresponderá à média do preço total.<jupyter_code># O seguinte groupby agrupa as colunas 'bairro' e 'total', calculando a média e colocando em ordem ascendente através da coluna 'total'.
df_2 = df[['bairro', 'total']].groupby(['bairro']).mean().sort_values('total').reset_index()
#df_2
import matplotlib.pyplot as plt
%matplotlib inline

fig = plt.figure()

#This creates the size of the figure  [left, bottom, width, height (range 0 to 1)]
axes = fig.add_axes([0, 0, 2, 1]) 

plt.bar('bairro', 'total', width=0.9, align='center', data=df_2)
plt.xticks(rotation=85, fontsize=13)
plt.show()
# O seguinte groupby cria uma nova coluna 'mediana_bairro', agrupa as colunas 'bairro' e 'total', calculando a mediana do bairro na nova coluna e realizando o merge das duas tabelas
df_3 = df.groupby('bairro')['total'].agg(np.median).reset_index()
df_3 = df_3.rename(columns={"total": "mediana_bairro"})
df_4 = pd.merge(df, df_3, on="bairro")
#df_4
# Calcular o preço do m² e gerar uma nova coluna com os valores.
df_4['m²_price'] = df_4['total']/df_4['metragem']
df_4['m²_bairro_price'] = df_4['mediana_bairro']/df_4['metragem']

# O lucro é calculado pela diferença entre preço/metragem do bairro e do próprio imóvel.
df_4['lucro_m²'] = df_4['m²_bairro_price'] - df_4['m²_price'] # preço do m² do bairro subtraído pelo preço do m² no imóvel selecionado
df_4.sort_values(by='lucro_m²', ascending=False)
# análise de correlação
df_5 = df_4[['bairro', 'total', 'metragem', 'quarto', 'banheiro', 'vaga_carro', 'andar', 'aceita_pet', 'mobilia', 'metro_prox']]
#df_5['bairro'] = df_5['bairro'].astype('category').cat.codes   # para tornar as strings em números (categorias)
correlation = df_5.corr()

# plot da matriz de correlação
import seaborn as sn

plot = sn.heatmap(correlation, annot = True, fmt=".1f", linewidths=.6)
plot<jupyter_output><empty_output><jupyter_text>Como podemos interpretar os valores que ρ pode assumir?- ρ = 0,9 a 1,0 (positivo ou negativo): correlação muito forte;- ρ = 0,7 a 0,9 (positivo ou negativo): correlação forte;- ρ = 0,5 a 0,7 (positivo ou negativo): correlação moderada;- ρ = 0,3 a 0,5 (positivo ou negativo): correlação fraca;- ρ = 0 a 0,3 (positivo ou negativo): não possui correlação.Vamos considerar os valores de **0,7 a 1,0**, ou seja, valores com correlação **forte ou muito forte**.Com isso, é possível dizer que as correlações com tal valor são entre:- metragem e número de quartos;- metragem e número de banheiros;- número de quartos e número de banheiros.Tais informações obtidas não representam *insights*, pois são obviedades:- quanto maior a metragem, mais quartos e banheiros cabem no imóvel;- quanto mais quartos, mais banheiros.  Obtendo a correlação entre as features e o valor total do imóvelPara obter uma correlação mais precisa entre as features e o valor total do imóvel, separarei um bairro específico. Abaixo, foi selecionado o bairro da **Consolação** e gerado, novamente, o gráfico de correlações.<jupyter_code>df_6 = df_5.loc[df_5['bairro'] == 'Consolação'] # Filtrar por bairro

correlation = df_6.corr()

# gerar o plot de correlação
plot = sn.heatmap(correlation, annot = True, fmt=".1f", linewidths=.6)<jupyter_output><empty_output><jupyter_text>Com dados de preço mais padronizados (segmentados no bairro 'Consolação'), agora é possível realizar novas análises:- aumento de 10% na correlação entre o tamanho da metragem do imóvel e as features 'quarto' e 'banheiro';- que há, dentro de um bairro/região, correlação forte entre o preço total do imóvel e as features 'metragem', 'quarto' e 'banheiro';- que as correlações da feature 'metro_prox' estão em branco, pois todos os imóveis são próximos do metrô (metrô do bairro Consolação).Agora sabemos, com segurança, que as principais features de nosso *dataset* são o número de banheiros, de quartos e a metragem. Vamos gerar, pensando em um bairro específico, gráficos de linhas:- eixo x: diferentes valores das features;- eixo y: média do preço total considerando cada um desses valores.<jupyter_code>df_6 = df_5.loc[df_5['bairro'] == 'Consolação'] # Filtrar por bairro
#df_6

# Vamos agrupar a coluna metragem e seus preços totais correspondentes
df_metragem = df_6.groupby('metragem')['total'].agg(np.median).reset_index()
df_metragem
# Eixo x = metragem   Eixo y = total
plt.plot(df_metragem['metragem'], df_metragem['total'], label = "Metragem")

plt.xlabel('Quantidade da feature') # etiqueta do eixo X
plt.ylabel('Preço total') # etiqueta do eixo Y
plt.title('Relação da quantidade de metragem e seus preços totais') # Título do gráfico
plt.legend() # exibir legenda dentro do gráfico
plt.show()
# Vamos agrupar a coluna quarto e seus preços totais correspondentes
df_quarto = df_6.groupby('quarto')['total'].agg(np.median).reset_index()
# Vamos agrupar a coluna banheiro e seus preços totais correspondentes
df_banheiro = df_6.groupby('banheiro')['total'].agg(np.median).reset_index()

df_banheiro
# Eixo x = metragem   Eixo y = total
plt.plot(df_quarto['quarto'], df_quarto['total'], label = "Número de quartos")
plt.plot(df_banheiro['banheiro'], df_banheiro['total'], label = "Número de banheiros")

plt.xlabel('Quantidade da feature') # etiqueta do axis X
plt.ylabel('Preço total') # etiqueta do axis Y
plt.title('Relação da quantidade de quartos e banheiros e seus preços totais')  # Título do gráfico
plt.legend() # exibir legenda dentro do gráfico
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10122654056450421, 'fraction_numerical': 0.013447613418058224, 'mean_word_length': 5.551790900290416, 'pattern_counts': {'":': 1, '<': 17, '<?xml version=': 0, '>': 17, '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': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '146780', 'license': 'MIT', 'n_tokens_mistral': 2570, 'n_tokens_neox': 2491, 'n_words': 833, 'path': '.ipynb_checkpoints/4_analise_exploratoria-checkpoint.ipynb', 'repo_name': 'dantebarross/quinto-andar-analise', 'size': '6767'}