# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3 (ipykernel)
#     language: python
#     name: python3
# ---

# # Aula 01 - Resolução dos Exercícios
#
# ## Novas perguntas do CEO para vocês
# 1. Quantas casas estão disponíveis para compra?
# 2. Quantos atributos as casas possuem?
# 3. Quais são os atributos das casas?
# 4. Qual a casa mais cara ( casa com o maior valor de venda )?
# 5. Qual a casa com o maior número de quartos?
#
# 6. Qual a soma total de quartos do conjunto de dados?
# 7. Quantas casas possuem 2 banheiros?
# 8. Qual o preço médio de todas as casas no conjunto de dados?
# 9. Qual o preço médio de casas com 2 banheiros?
# 10. Qual o preço mínimo entre as casas com 3 quartos?
#
# 11. Quantas casas possuem mais de 300 metros quadrados na sala de estar?
# 12. Quantas casas tem mais de 2 andares?
# 13. Quantas casas tem vista para o mar?
# 14. Das casas com vista para o mar, quantas tem 3 quartos?
# 15. Das casas com mais de 300 metros quadrados de sala de estar, quantas tem mais de 2 banheiros?
#

# # Resolução

# ## Import Libraries

# +
import numpy  as np
import pandas as pd
import seaborn as sns

from matplotlib import pyplot as plt
import plotly.express as px
# -

# Supress Scientific Notation
np.set_printoptions(suppress=True)
pd.set_option('display.float_format', '{:.2f}'.format)

# ## Loading Data

# loading data into memory
data = pd.read_csv( '../kc_house_data.csv' )

# ## 1. Quantas casas estão disponíveis para compra?

# +
# Eu vou considerar que a coluna "id" representa a identificação única do imóvel
num_houses_unique = data['id'].nunique()

# Resultado
print( 'Estão disponíveis {} imóveis'.format( num_houses_unique ) )
# -

# ## 2. Quantos atributos as casas possuem?

# +
# O numero de colunas representam os atributos do apartamento.
# id e date - não são atributos do apartamento
num_attributes = len( data.columns ) - 2

# Resultado
print( 'Os imóveis posseum {} atributos'. format( num_attributes ) )
# -

# ## 3. Quais são os atributos das casas?

# Strategia: Excluir as colunas "id", "date" e mostrar os atributos restantes
df = data.drop( ['id', 'date'], axis=1 )
print( df.columns.tolist() )

# ## 4. Qual a casa mais cara ( casa com o maior valor de venda )?

# +
# Stratégia: Selecionar a coluna "id", "price", ordenar as casas pela coluna "price" em ordem decrescente e 
#   escolher o imóvel do primeiro id.
house_expensive = data[['id', 'price']].sort_values( 'price', ascending=False ).loc[0,'id']

print( 'Most expensive house: {}'.format( house_expensive ) )
# -

# ## 5. Qual a casa com o maior número de quartos?

# +
# Estratégia:
# 1. Selecionar a coluna "id", "bedroom"
# 2. Ordenar os imóveis pelo numero de quartos de ordem decrescente
# 3. Selecionar a primeira coluna "id"

df = data[['id', 'bedrooms']].sort_values( 'bedrooms', ascending=False )

print( 'House with biggest number of bedrooms: {}'.format( df.iloc[0, 0] ) )
# -

# ## 6. Qual a soma total de quartos do conjunto de dados?

# Estratégia:
# 1. Somar a coluna "bedrooms"
print( 'Total sum of bedrooms: {}'.format( data['bedrooms'].sum() ) )

# ## 7. Quantas casas possuem 2 banheiros?

# +
# Estratégia:
# 1. Filtrar linhas (imóveis) que possuem 2 banheiros.
# 2. Contar o número de linhas do dataset

df = data.loc[data['bathrooms'] == 2, :]
num_houses = len( df )

print( 'Total number of houses with 2 bathrooms: {}'.format( num_houses ) )
# -

# ## 8. Qual o preço médio de todas as casas no conjunto de dados?

# +
# Estratégia:
# 1. Calcular o preço médio da coluna "price"
avg_price = np.round( data['price'].mean(), 2 )

print( 'Average Price: ${}'.format( avg_price ) )
# -

# ## 9. Qual o preço médio de casas com 2 banheiros?

# +
# Estratégia:
# 1. Selecionar imóveis com 2 banheiros.
# 2. Calcular o preço médio da coluna "price" do novo conjunto de dados

avg_price = np.round( data.loc[data['bathrooms'] == 2, 'price'].mean(), 2 )

print( 'Average Price: ${}'.format( avg_price ) )
# -

# ## 10. Qual o preço mínimo entre as casas com 3 quartos?

# +
# Estratégia:
# 1. Selecionar imóveis com 3 bathrooms.
# 2. Calcular o menor preço da coluna "price" do novo conjunto de dados

min_price = np.round( data.loc[data['bedrooms'] == 3, 'price'].min(), 2 )

print( 'Min Price: ${}'.format( min_price ) )
# -

# ## 11. Quantas casas possuem mais de 300 metros quadrados na sala de estar?

# +
# Estratégia:
# 1. Selecionar imóveis com mais de 300 sqft_living.
# 2. Contar o número de imóveis nesse novo conjunto de dados.

houses = data.loc[data['sqft_living'] > 300, 'id'].shape[0]

print( 'There are {} Houses with living room grater than 300 square foot'.format( houses ) )
# -

# ## 12. Quantas casas tem mais de 2 andares?

# +
# Estratégia:
# 1. Selecionar imóveis com a coluna 'floors' maior que 2.
# 2. Contar o número de imóveis nesse novo conjunto de dados.

houses = data.loc[data['floors'] > 2, 'id'].shape[0]

print( 'There are {} Houses with the number of floors grater than 2'.format( houses ) )
# -

# ## 13. Quantas casas tem vista para o mar?

# +
# Estratégia:
# 1. Selecionar imóveis com a coluna 'waterfront' igual a 1.
# 2. Contar o número de imóveis nesse novo conjunto de dados.

houses = data.loc[data['floors'] == 1, 'id'].shape[0]

print( 'There are {} Houses with the number of floors grater than 2'.format( houses ) )
# -

# ## 14. Das casas com vista para o mar, quantas tem 3 quartos?

# +
# Estratégia:
# 1. Selecionar imóveis com a coluna 'waterfront' igual a 1 e a coluna 'bedrooms' maior que 3.
# 2. Contar o número de imóveis nesse novo conjunto de dados.

houses = data.loc[(data['waterfront'] == 1) & (data['bedrooms'] > 2), 'id'].shape[0]

print( 'There are {} Houses with waterfront and bedrooms greater then 3'.format( houses ) )
# -

# ## 15. Das casas com mais de 300 metros quadrados de sala de estar, quantas tem mais de 2 banheiros?

# +
# Estratégia:
# 1. Selecionar imóveis com a coluna 'sqft_living' maior que 300 e a coluna 'bathrooms' maior que 2.
# 2. Contar o número de imóveis nesse novo conjunto de dados.

houses = data.loc[(data['sqft_living'] > 300) & (data['bathrooms'] > 2), 'id'].shape[0]

print( 'There are {} Houses with living room greater than 300 and bathrooms bigger than 2'.format( houses ) )
# -



StarcoderdataJupyterScriptsDedupFiltered