<jupyter_start><jupyter_text>**Análise dos Dados do Airbnb -  Rio de Janeiro**Se você ainda não conhece essa empresa que só vem ganhando o coração dos viajantes, eu trago uma breve explicação do que o [Airbnb](https://pt.wikipedia.org/wiki/) oferece. Airbnb é um serviço online comunitário para as pessoas anunciarem, descobrirem e reservarem acomodações e meios de hospedagem.O Airbnb permite aos indivíduos alugar o todo ou parte de sua própria casa, como uma forma de acomodação extra. O site fornece uma plataforma de busca e reservas entre a pessoa que oferece a acomodação e o turista que busca pela locação.Os dados utilizados nesta análise foram obtidos através do site [Inside Airbnb](http://insideairbnb.com/get-the-data.html).<jupyter_code>!pip install missingno

# importar os pacotes necessários
%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno 

# configurar as visualizações
sns.set_style('darkgrid')
sns.set_palette('Accent')
# obtendo os dados
data_path = 'http://data.insideairbnb.com/brazil/rj/rio-de-janeiro/2020-04-20/visualisations/listings.csv'
df = pd.read_csv(data_path)
df.head()<jupyter_output><empty_output><jupyter_text>**Dicionário de variáveis**---> *   **id** - número de id gerado para identificar o imóvel> *   **name** - nome da propriedade anunciada> *   **host_id** - número de id do proprietário (anfitrião) da propriedade> *   **host_name** - Nome do anfitrião> *   **neighbourhood_group** - esta coluna não contém nenhum valor válido> *   **neighbourhood** - nome do bairro> *   **latitude** - coordenada da latitude da propriedade> *   **longitude** - coordenada da longitude da propriedade> *   **room_type** - informa o tipo de hospedagem que é oferecido> *   **price** - preço para alugar o imóvel> *   **minimum_nights** - quantidade mínima de noites para reservar> *   **number_of_reviews** - número de reviews que a propriedade possui> *   **last_review** - data do último review> *   **reviews_per_month** - quantidade de reviews por mês> *   **calculated_host_listings_count** - quantidade de imóveis do mesmo anfitrião> *  **availability_365** - número de dias de disponibilidade dentro de 365 dias  **Análise dos Dados** > **Quantos atributos/variáveis/colunas e quantas entradas/linhas possui o nosso dataset?**<jupyter_code>print('DIMENSÕES DO DATAFRAME:')
print(f'Linhas:  {df.shape[0]}')
print(f'Colunas:  {df.shape[1]}')<jupyter_output>DIMENSÕES DO DATAFRAME:
Linhas:  35870
Colunas:  16<jupyter_text>> **Quais são os tipos de dados (dtypes) das nossas variáveis?**<jupyter_code>df.dtypes<jupyter_output><empty_output><jupyter_text>> **Nosso dataset possui valores ausentes?**<jupyter_code>df.isnull().values.any()
df.isnull().sum()
# visualização das entradas de cada coluna, aqui podemos notar visualmente as colunas com valores NaN
msno.bar (df, figsize = (10,5))<jupyter_output><empty_output><jupyter_text>> Como vimos anteriormente, nosso dataset possui 35870 entradas. E analisando os valores ausentes no comando anterior notamos que a variável *neighbourhood_group* não tem dados. Sendo assim, ela não acrescentará em nada na nossa análise, vamos deletar essa variável do nosso DataFrame.<jupyter_code>df.drop('neighbourhood_group', axis=1, inplace=True)<jupyter_output><empty_output><jupyter_text>> **Verificando agora a porcentagem de valores ausentes de cada coluna**As colunas *reviews_per_month* e *last_review* contém 41,16% de dados ausentes aproximadamente. Já as colunas *name* e *host_name* contém  aproximadamente, 0,16% e 0,01% respectivamente.<jupyter_code># ordenar em ordem decrescente as variáveis por seus valores ausentes
(df.isnull().sum() / len(df)).sort_values(ascending=False) * 100
# contagem de valores distintos ordenados por ordem decrescente
df.nunique().sort_values(ascending=False)<jupyter_output><empty_output><jupyter_text>> **Histograma das variáveis**<jupyter_code># análise visual das variáveis númericas através de um gráfico de frequências (histograma)
df.hist(bins=15, figsize=(15,10));<jupyter_output><empty_output><jupyter_text>> Notamos que há índicios da presença de outliers nos nosso dados, como vemos nas colunas *price*, *minimum_nights* e *calculated_host_listings_count*.Um dos indícios é o fato de não conseguirmos visualizar uma distribuição porque possivelmente os outliers, se presentes, estão distorcento a representação gráfica.>> **Detecção de outliers:**<jupyter_code># visualizando um resumo estatístico das variáveis númericas
df[['price', 'minimum_nights', 'number_of_reviews', 'reviews_per_month',
    'calculated_host_listings_count', 'availability_365']].describe().round(2)<jupyter_output><empty_output><jupyter_text>> **Pontos principais da análise feita através do método describe.**>> *   O valor mínimo da variável *price* é 0> *   O valor máximo da variável *price* é 131.727> *   O valor máximo da variável *minimum_nights* é 1.123>*   O valor máximo da variável *calculated_host_listinings_count* é 200 > **Boxplot das variáveis que possivelmente apresentam outliers**<jupyter_code>plt.figure(figsize=(15,3))
sns.boxplot(data=df, x='minimum_nights')
plt.title('Boxplot minimum_nights')
plt.show()

# ver quantidade de valores acima de 30 dias para minimum_nights
print(f'[minimun_nights]\nValores acima de 30: {len(df[df.minimum_nights > 30])} entradas')
print('Porcentagem: {:.4f}%'.format(len(df[df.minimum_nights > 30])/ len(df.minimum_nights)* 100))
plt.figure(figsize=(15,3))
sns.boxplot(data=df, x='price')
plt.title('Boxplot price')
plt.show()

# ver quantidade de valores acima de 1500 para price
print(f'[price]\nValores acima de 1500: {len(df[df.price > 1500])} entradas')
print('Porcentagem: {:.4f}%'.format(len(df[df.price > 1500])/ len(df.price) * 100))<jupyter_output><empty_output><jupyter_text>> **Histograma sem outilers**>>Depois de identificar os outilers, vamos plotar novamente o histograma para visualizarmos os dados limpos<jupyter_code># histogramas com valores de minimum_nights menor que 30 e price menor que 1500
df_clean = df.copy()
df_clean = df_clean.query('minimum_nights < 30 & price < 1500')
df_clean.hist(bins=15, figsize=(15,10));<jupyter_output><empty_output><jupyter_text>>  **Correlação existente entre as variáveis**>> Correlação é a relação estatística entre duas variáveis. Os coeficientes de correlação são métodos estatísticos para se medir as relações entre variáveis.>> Calculamos o coeficiente de correlação com a função *corr()*> > Irei apresentar essa correlação através de uma matriz e de uma forma mais> visual através de um heatmap (mapa de calor).<jupyter_code>corr = df_clean[['price', 'minimum_nights', 'number_of_reviews', 'reviews_per_month',
    'calculated_host_listings_count', 'availability_365']].corr()
corr
sns.set_context("notebook", font_scale=1.0, rc={"lines.linewidth": 2.5})
plt.figure(figsize=(10,5))
# criando uma máscara para ver apenas os valores de correlação uma vez
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask, 1)] = True
a = sns.heatmap(corr,mask=mask, annot=True, fmt='.2f')
rotx = a.set_xticklabels(a.get_xticklabels(), rotation=90)
roty = a.set_yticklabels(a.get_yticklabels(), rotation=30)<jupyter_output><empty_output><jupyter_text>> **Qual é o tipo de hospedagem mais alugado?**<jupyter_code># a quantidade de cada tipo de imóvel disponível
df_clean['room_type'].value_counts()
# porcentagem de cada tipo de imóvel disponível
df_clean['room_type'].value_counts() / len(df_clean)<jupyter_output><empty_output><jupyter_text>>  **Qual é a localidade mais cara?**<jupyter_code># média de preço do top 10 localidades mais caras
df_clean.groupby('neighbourhood')['price'].mean().sort_values(ascending=False)[:10]<jupyter_output><empty_output><jupyter_text>> Observação: Como podemos ver existem bairros com mais imóveis alugados, o que pode influenciar diretamente na média de preços por localidade feita anteriormente<jupyter_code># contagem de imóveis por localidade
df_clean['neighbourhood'].value_counts()<jupyter_output><empty_output><jupyter_text>> **Plotando os imóveis pela latitude-longitude**<jupyter_code>df_clean.plot(kind="scatter", x='longitude', y='latitude', alpha=0.4, c=df_clean['price'], s=8,
              cmap=plt.get_cmap('jet'), figsize=(12,8));<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11290322580645161, 'fraction_numerical': 0.018175252768415983, 'mean_word_length': 6.602012808783166, 'pattern_counts': {'":': 1, '<': 62, '<?xml version=': 0, '>': 111, 'https://': 1, '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': '15', 'dir': 'jupyter-structured-clean-dedup', 'id': '391154', 'license': 'MIT', 'n_tokens_mistral': 3160, 'n_tokens_neox': 2946, 'n_words': 805, 'path': 'Analisando_dados_Airbnb_Rio_de_Janeiro.ipynb', 'repo_name': 'beatrizmaiads/Analise-de-Dados-Airbnb', 'size': '8308'}