<jupyter_start><jupyter_text>Abordagem de Múltiplos Arquivos e de Gráficos Aluno: <NAME>  1 - Entendimento do Negócio Análises:* Caracterização dos hóspedes (proporção de homens e mulheres, distribuição de idade e quantidade de dias de hospedagem); * Comparação entre a nota do hotel e a quantidade de hóspedes; Responda as seguintes perguntas (no notebook):* Há indícios de que uma superlotação do hotel ocasionou uma menor nota?* Em geral, quem oferece as piores notas para o hotel, homens ou mulheres?* Os hóspedes que ofereceram as melhores notas, ficaram hospedados quantos dias, em média?* Qual a faixa etária dos hóspedes que ficam mais tempo no hotel? Use o seguinte parâmetro para faixa etária:* 18 a 20 anos;* 21 a 30 anos;* 31 a 40 anos;* 41 a 50 anos;* 51 a 60 anos;* 60 anos ou mais.  2 - Entendimento dos dados<jupyter_code># O glob é uma biblioteca para coletar e manipular o endereço de pastas no computador
import glob
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

#Apresentas os dados no notebook.
%matplotlib inline

# Definindo estilo para os gráficos.
sns.set_style("darkgrid")

# Tamanho da imagem.
plt.rcParams['figure.figsize'] = (10,6)

# Parametros do Pandas, limitando a quantidade máxima e a largura das colunas.
pd.set_option('max_columns', 120)
pd.set_option('max_colwidth', 5000)<jupyter_output><empty_output><jupyter_text>A função *map()* do Python aplica uma função em cada um dos itens de um conjunto iterável (*lista, por exemplo*) e tem como retorno um item iterável (*como uma lista*). Um exemplo prático:<jupyter_code># Agrupando arquivos e lendo os dados. 
dados = pd.concat(map(pd.read_csv, glob.glob(os.path.join('aula', "*.csv"))))
dados.info(memory_usage='deep')
# memory_usage='deep' informa a quantidade de memória usada.
# Primeiros dados.
dados.head()
# Últimos dados.
dados.tail()<jupyter_output><empty_output><jupyter_text>3 - Preparação dos dados<jupyter_code># Convertendo a coluna de data da pesquisa para o tipo "datetime"
dados['dataPesquisa'] = pd.to_datetime(dados['dataPesquisa'], format="%Y-%m-%d")
dados.info(memory_usage='deep')
# Proporção por sexo.
dados['sexo'].value_counts()
# Gero um gráfico básico para proporção de sexo.
fig, axs = plt.subplots(1,2,figsize=(14,7))
sns.countplot(x='sexo',data=dados,ax=axs[0])
axs[0].set_title("Proporção por Sexo")

dados['sexo'].value_counts().plot(x=None,y=None, kind='pie', ax=axs[1], autopct='%1.2f%%', 
                                  wedgeprops = { 'linewidth' : 3, 'edgecolor' : 'white' })
axs[1].set_title("Porcentagem de cada sexo")
plt.show()
# Distribuição das idades.
sns.histplot(dados['idade'], bins=20)
plt.title('Dsitribuição da idade dos hospedes')
plt.xlabel('Idade')
plt.ylabel('Frequência')
plt.show()
# Separando dados do sexo feminino.
feminino = dados.loc[dados['sexo'] == 'F']

sns.histplot(feminino['idade'], bins=20)
plt.title('Distribuição de idade do sexo feminino')
plt.xlabel('Idade')
plt.ylabel('Frequência')
plt.show()
# Separando dados do sexo masculino.
masculino = dados.loc[dados['sexo'] == 'M']

sns.histplot(masculino['idade'], bins=20)
plt.title('Distribuição de idade do sexo masculino')
plt.xlabel('Idade')
plt.ylabel('Frequência')
plt.show()
# Gráfico da quantidade por dia de hospedagem
plt.plot(dados.groupby(by=['dataPesquisa']).size())
plt.title('Quantidade de hópedes entrevistados por dia')
plt.ylabel('Hóspedes')
plt.xlabel('Data')
plt.show()
# Gráfico de comparação entre a nota do hotel e a quantidade de hóspedes
plt.figsize=(18,7)
sns.lineplot(data=dados, x='dataPesquisa', y='notaHospedagem', style_order='whitegrid')
plt.show()
# Gráfico de comparação entre a nota média do hotel e a quantidade de hóspedes
mediaNota = dados.groupby(by=['dataPesquisa']).mean().reset_index()
mediaNota = mediaNota.set_index('dataPesquisa')
mediaNota = mediaNota['notaHospedagem']

fig, (ax1, ax2) = plt.subplots(2)
fig.suptitle('Quantidade de Clientes e Notas')
ax1.plot(dados.groupby(by=['dataPesquisa']).size(), 'g-', label='Hóspedes')
ax1.set_ylabel('Hóspedes')

ax2.plot(mediaNota, 'r-', label='Nota Média')
ax2.set_ylabel('Média da Nota')
ax2.set_xlabel('Data')

plt.show()<jupyter_output><empty_output><jupyter_text>4 - Perguntas  4.1 - Há indícios de que uma superlotação do hotel ocasionou uma menor nota?<jupyter_code>## Gráfico de comparação entre a nota média do hotel e a quantidade de hóspedes
fig, ax1 = plt.subplots()
fig.suptitle('Quantidade de Clientes e Notas')
fig.figsize=(20,20)
ax1.plot(dados.groupby(by=['dataPesquisa']).size(), 'g-', label='Hóspedes')
ax1.set_ylabel('Hóspedes')

ax2 = ax1.twinx() 
ax2.plot(mediaNota, 'r-', label='Nota Média')
ax2.set_ylabel('Média da Nota')
ax2.set_xlabel('Data')
plt.show()<jupyter_output><empty_output><jupyter_text>Uma relevante parcela das notas indicam que quanto mais hóspedes a nota é menor e quanto menos hóspedes a nota é maior. Podemos pensar em questões de atendimento, quanto maior o número de clientes, alguns serviços podem demorar mais que outros pela lotação do estabelicimento. Mas também como pode-se verificar no gráfico acima, tem-se notas altas com uma quantida alta de hóspedes, mas em parcela menor nesta observação. Sendo assim, pode-se afirmar que a lotação pode ocasionar nas notas serem menores.  4.2 - Em geral, quem oferece as piores notas para o hotel, homens ou mulheres?<jupyter_code># Gráfico da proporção de notas por sexo.
sns.countplot(x ='notaHospedagem', hue='sexo' , data = dados)
plt.title('Proporção de notas por sexo')
plt.xlabel('Nota Hospedagem')
plt.ylabel('Frequência')
plt.show()<jupyter_output><empty_output><jupyter_text>De acordo com o gráfico que vemos acima, pode-se afirmar que as piores notas geralmente é fornecida por hóspedes do sexo feminino. Vemos que das notas de 0 a 1 hóspedes do sexo feminino deram mais notas nestas escalas. Notas entre 2 e 5 hóspedes do sexo feminino forneceram uma menor quantidade de notas nestas escalas. Com exceção da nota 4 em que hóspedes do sexo feminino forneceram uma quantidade de nota em uma parcela de diferença pequena, maior do que hóspedes do sexo masculino.   4.3 - Os hóspedes que ofereceram as melhores notas, ficaram hospedados quantos dias, em média?<jupyter_code># Filtrando base por notas acima da média total.
notasMaioresMedia = dados.loc[dados['notaHospedagem'] > dados['notaHospedagem'].mean()].reset_index()
notasMaioresMedia
# Distribuição do tempo de hospedagem.
notasMaioresMedia['tempoEstadia'].describe()
# Gerando gráfico da distribuição do tempo de hospedagem por frequeência e notas acima da média total.
sns.countplot(x='tempoEstadia', data=notasMaioresMedia)
plt.title('Proporção de notas maiores que a média por tempo de estadia')
plt.xlabel('Tempo de Estadia')
plt.ylabel('Frequência')
plt.show()<jupyter_output><empty_output><jupyter_text>Pode-se verificar que o tempo de estadia de hóspedes com notas acima da média total da base está entre 5 e 6 dias. Vemos também com o gráfico abaixo em que há todas as notas em todos os valores de tempo de estadia, ficando complicado infromar com o gráfico de dispersão a relação entre notas e tempo de estadia.<jupyter_code># Gerando gráfico de dispersão do tempo de hospedagem por notas acima da média total.
sns.scatterplot(data=dados, x="tempoEstadia", y="notaHospedagem", hue="notaHospedagem")
plt.title('Dispersão de tempo de estadia por nota acima da média total')
plt.xlabel('Tempo de Estadia')
plt.ylabel('Nota de Hospedagem')
plt.show()
# Agrupando por sexo e nota de hospedagem.
dados.groupby(by=['sexo', 'notaHospedagem']).count()
# Agrupando por sexo e tempo de estadia.
dados.groupby(by=['sexo', 'tempoEstadia']).count()<jupyter_output><empty_output><jupyter_text>4.4 - Qual a faixa etária dos hóspedes que ficam mais tempo no hotel?<jupyter_code># Filtrando base por tempo de estadia acima da média total.
tempoEstadiaMaioresMedia = dados.loc[dados['tempoEstadia'] > dados['tempoEstadia'].mean()].reset_index()
tempoEstadiaMaioresMedia
# Gerando faixa etária e incluindo coluna da mesma na base de dados.
cortes = [10, 20, 30, 40, 50, 60, np.inf]
faixas = ['18 a 20 anos', '21 a 30 anos', '31 a 40 anos', '41 a 50 anos', '51 a 60 anos', '61 anos ou mais']

tempoEstadiaMaioresMedia['faixaEtaria'] = pd.cut(tempoEstadiaMaioresMedia['idade'], cortes, labels=faixas)
tempoEstadiaMaioresMedia
# Gráfico da distribuição da faixa etária dos hospedes com mais tempo de hospedagem.
sns.histplot(tempoEstadiaMaioresMedia['faixaEtaria'], bins=20)
plt.title('Faixa etária dos hospedes por tempo de hospedagem e sexo')
plt.xlabel('Faixa Etária')
plt.ylabel('Frequência')
plt.show()
# Gráfico da distribuição da faixa etária dos hospedes com mais tempo de hospedagem e sexo.
sns.countplot(x ='faixaEtaria', hue='sexo' , data = tempoEstadiaMaioresMedia)
plt.title('Faixa etária dos hospedes por tempo de hospedagem e sexo')
plt.xlabel('Faixa Etária por sexo')
plt.ylabel('Frequência')
plt.show()
# Agrupando por sexo e faixa etária.
tempoEstadiaMaioresMedia.groupby(by=['sexo', 'faixaEtaria']).count()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11100066269052353, 'fraction_numerical': 0.014137397835210957, 'mean_word_length': 5.906941266209, 'pattern_counts': {'":': 0, '<': 34, '<?xml version=': 0, '>': 36, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '363040', 'license': 'MIT', 'n_tokens_mistral': 3578, 'n_tokens_neox': 3453, 'n_words': 1016, 'path': 'ProjetosFaculdade/Multiplos_Arquivos/multiplosArquivos_rafhael_martins.ipynb', 'repo_name': 'rafhaelom/DataScience', 'size': '9075'}