diff --git a/Aula01_Atividade_Manipular_Filtrar_DF.ipynb b/Aula01_Atividade_Manipular_Filtrar_DF.ipynb index 36dc5d9..6652133 100644 --- a/Aula01_Atividade_Manipular_Filtrar_DF.ipynb +++ b/Aula01_Atividade_Manipular_Filtrar_DF.ipynb @@ -4,6 +4,64 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "___\n", "# Atividade:
\n", + " | work_year | \n", + "experience_level | \n", + "employment_type | \n", + "job_title | \n", + "salary | \n", + "salary_currency | \n", + "salary_in_usd | \n", + "employee_residence | \n", + "remote_ratio | \n", + "company_location | \n", + "company_size | \n", + "monthly_expensies | \n", + "
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", + "2020 | \n", + "MI | \n", + "FT | \n", + "Data Scientist | \n", + "70000 | \n", + "EUR | \n", + "79833 | \n", + "DE | \n", + "0 | \n", + "DE | \n", + "L | \n", + "1382 | \n", + "
1 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Machine Learning Scientist | \n", + "260000 | \n", + "USD | \n", + "260000 | \n", + "JP | \n", + "0 | \n", + "JP | \n", + "S | \n", + "1405 | \n", + "
2 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Big Data Engineer | \n", + "85000 | \n", + "GBP | \n", + "109024 | \n", + "GB | \n", + "50 | \n", + "GB | \n", + "M | \n", + "1441 | \n", + "
\n", + " | count | \n", + "
---|---|
job_title | \n", + "\n", + " |
Data Scientist | \n", + "143 | \n", + "
Data Engineer | \n", + "132 | \n", + "
Data Analyst | \n", + "97 | \n", + "
Machine Learning Engineer | \n", + "41 | \n", + "
Research Scientist | \n", + "16 | \n", + "
\n", + " | proportion | \n", + "
---|---|
job_title | \n", + "\n", + " |
Data Scientist | \n", + "0.235585 | \n", + "
Data Engineer | \n", + "0.217463 | \n", + "
Data Analyst | \n", + "0.159802 | \n", + "
Machine Learning Engineer | \n", + "0.067545 | \n", + "
Research Scientist | \n", + "0.026359 | \n", + "
remote_ratio | \n", + "0 | \n", + "50 | \n", + "100 | \n", + "All | \n", + "
---|---|---|---|---|
company_size | \n", + "\n", + " | \n", + " | \n", + " | \n", + " |
L | \n", + "0.052718 | \n", + "0.098847 | \n", + "0.174629 | \n", + "0.326194 | \n", + "
M | \n", + "0.130148 | \n", + "0.034596 | \n", + "0.372323 | \n", + "0.537068 | \n", + "
S | \n", + "0.026359 | \n", + "0.029654 | \n", + "0.080725 | \n", + "0.136738 | \n", + "
All | \n", + "0.209226 | \n", + "0.163097 | \n", + "0.627677 | \n", + "1.000000 | \n", + "
\n", + " | work_year | \n", + "experience_level | \n", + "employment_type | \n", + "job_title | \n", + "salary | \n", + "salary_currency | \n", + "salary_in_usd | \n", + "employee_residence | \n", + "remote_ratio | \n", + "company_location | \n", + "company_size | \n", + "monthly_expensies | \n", + "
---|---|---|---|---|---|---|---|---|---|---|---|---|
4 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Machine Learning Engineer | \n", + "150000 | \n", + "USD | \n", + "150000 | \n", + "US | \n", + "50 | \n", + "US | \n", + "L | \n", + "1182 | \n", + "
5 | \n", + "2020 | \n", + "EN | \n", + "FT | \n", + "Data Analyst | \n", + "72000 | \n", + "USD | \n", + "72000 | \n", + "US | \n", + "100 | \n", + "US | \n", + "L | \n", + "1473 | \n", + "
6 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Lead Data Scientist | \n", + "190000 | \n", + "USD | \n", + "190000 | \n", + "US | \n", + "100 | \n", + "US | \n", + "S | \n", + "1573 | \n", + "
8 | \n", + "2020 | \n", + "MI | \n", + "FT | \n", + "Business Data Analyst | \n", + "135000 | \n", + "USD | \n", + "135000 | \n", + "US | \n", + "100 | \n", + "US | \n", + "L | \n", + "1148 | \n", + "
13 | \n", + "2020 | \n", + "MI | \n", + "FT | \n", + "Lead Data Analyst | \n", + "87000 | \n", + "USD | \n", + "87000 | \n", + "US | \n", + "100 | \n", + "US | \n", + "L | \n", + "1493 | \n", + "
... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
599 | \n", + "2022 | \n", + "MI | \n", + "FT | \n", + "Data Scientist | \n", + "130000 | \n", + "USD | \n", + "130000 | \n", + "US | \n", + "100 | \n", + "US | \n", + "M | \n", + "1331 | \n", + "
602 | \n", + "2022 | \n", + "SE | \n", + "FT | \n", + "Data Engineer | \n", + "154000 | \n", + "USD | \n", + "154000 | \n", + "US | \n", + "100 | \n", + "US | \n", + "M | \n", + "1223 | \n", + "
603 | \n", + "2022 | \n", + "SE | \n", + "FT | \n", + "Data Engineer | \n", + "126000 | \n", + "USD | \n", + "126000 | \n", + "US | \n", + "100 | \n", + "US | \n", + "M | \n", + "1201 | \n", + "
604 | \n", + "2022 | \n", + "SE | \n", + "FT | \n", + "Data Analyst | \n", + "129000 | \n", + "USD | \n", + "129000 | \n", + "US | \n", + "0 | \n", + "US | \n", + "M | \n", + "1121 | \n", + "
605 | \n", + "2022 | \n", + "SE | \n", + "FT | \n", + "Data Analyst | \n", + "150000 | \n", + "USD | \n", + "150000 | \n", + "US | \n", + "100 | \n", + "US | \n", + "M | \n", + "1310 | \n", + "
332 rows × 12 columns
\n", + "\n", + " | work_year | \n", + "experience_level | \n", + "employment_type | \n", + "job_title | \n", + "salary | \n", + "salary_currency | \n", + "salary_in_usd | \n", + "employee_residence | \n", + "remote_ratio | \n", + "company_location | \n", + "company_size | \n", + "monthly_expensies | \n", + "
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", + "2020 | \n", + "MI | \n", + "FT | \n", + "Data Scientist | \n", + "70000 | \n", + "EUR | \n", + "79833 | \n", + "DE | \n", + "0 | \n", + "DE | \n", + "L | \n", + "1382 | \n", + "
1 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Machine Learning Scientist | \n", + "260000 | \n", + "USD | \n", + "260000 | \n", + "JP | \n", + "0 | \n", + "JP | \n", + "S | \n", + "1405 | \n", + "
2 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Big Data Engineer | \n", + "85000 | \n", + "GBP | \n", + "109024 | \n", + "GB | \n", + "50 | \n", + "GB | \n", + "M | \n", + "1441 | \n", + "
3 | \n", + "2020 | \n", + "MI | \n", + "FT | \n", + "Product Data Analyst | \n", + "20000 | \n", + "USD | \n", + "20000 | \n", + "HN | \n", + "0 | \n", + "HN | \n", + "S | \n", + "987 | \n", + "
7 | \n", + "2020 | \n", + "MI | \n", + "FT | \n", + "Data Scientist | \n", + "11000000 | \n", + "HUF | \n", + "35735 | \n", + "HU | \n", + "50 | \n", + "HU | \n", + "L | \n", + "1498 | \n", + "
... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
531 | \n", + "2022 | \n", + "MI | \n", + "FT | \n", + "Data Analyst | \n", + "75000 | \n", + "USD | \n", + "75000 | \n", + "CA | \n", + "0 | \n", + "CA | \n", + "M | \n", + "1439 | \n", + "
567 | \n", + "2022 | \n", + "MI | \n", + "FT | \n", + "Data Analyst | \n", + "50000 | \n", + "GBP | \n", + "65438 | \n", + "GB | \n", + "0 | \n", + "GB | \n", + "M | \n", + "1204 | \n", + "
586 | \n", + "2022 | \n", + "MI | \n", + "FT | \n", + "Data Analyst | \n", + "35000 | \n", + "GBP | \n", + "45807 | \n", + "GB | \n", + "0 | \n", + "GB | \n", + "M | \n", + "1172 | \n", + "
600 | \n", + "2022 | \n", + "EN | \n", + "FT | \n", + "Data Analyst | \n", + "67000 | \n", + "USD | \n", + "67000 | \n", + "CA | \n", + "0 | \n", + "CA | \n", + "M | \n", + "1102 | \n", + "
601 | \n", + "2022 | \n", + "EN | \n", + "FT | \n", + "Data Analyst | \n", + "52000 | \n", + "USD | \n", + "52000 | \n", + "CA | \n", + "0 | \n", + "CA | \n", + "M | \n", + "1356 | \n", + "
252 rows × 12 columns
\n", + "\n", + " | work_year | \n", + "experience_level | \n", + "employment_type | \n", + "job_title | \n", + "salary | \n", + "salary_currency | \n", + "salary_in_usd | \n", + "employee_residence | \n", + "remote_ratio | \n", + "company_location | \n", + "company_size | \n", + "monthly_expensies | \n", + "
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", + "2020 | \n", + "MI | \n", + "FT | \n", + "Data Scientist | \n", + "70000 | \n", + "EUR | \n", + "79833 | \n", + "DE | \n", + "0 | \n", + "DE | \n", + "L | \n", + "1382 | \n", + "
1 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Machine Learning Scientist | \n", + "260000 | \n", + "USD | \n", + "260000 | \n", + "JP | \n", + "0 | \n", + "JP | \n", + "S | \n", + "1405 | \n", + "
2 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Big Data Engineer | \n", + "85000 | \n", + "GBP | \n", + "109024 | \n", + "GB | \n", + "50 | \n", + "GB | \n", + "M | \n", + "1441 | \n", + "
3 | \n", + "2020 | \n", + "MI | \n", + "FT | \n", + "Product Data Analyst | \n", + "20000 | \n", + "USD | \n", + "20000 | \n", + "HN | \n", + "0 | \n", + "HN | \n", + "S | \n", + "987 | \n", + "
4 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Machine Learning Engineer | \n", + "150000 | \n", + "USD | \n", + "150000 | \n", + "US | \n", + "50 | \n", + "US | \n", + "L | \n", + "1182 | \n", + "
... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
67 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Data Science Manager | \n", + "190200 | \n", + "USD | \n", + "190200 | \n", + "US | \n", + "100 | \n", + "US | \n", + "M | \n", + "1474 | \n", + "
68 | \n", + "2020 | \n", + "EN | \n", + "FT | \n", + "Data Scientist | \n", + "105000 | \n", + "USD | \n", + "105000 | \n", + "US | \n", + "100 | \n", + "US | \n", + "S | \n", + "1301 | \n", + "
69 | \n", + "2020 | \n", + "SE | \n", + "FT | \n", + "Data Scientist | \n", + "80000 | \n", + "EUR | \n", + "91237 | \n", + "AT | \n", + "0 | \n", + "AT | \n", + "S | \n", + "1170 | \n", + "
70 | \n", + "2020 | \n", + "MI | \n", + "FT | \n", + "Data Scientist | \n", + "55000 | \n", + "EUR | \n", + "62726 | \n", + "FR | \n", + "50 | \n", + "LU | \n", + "S | \n", + "1267 | \n", + "
71 | \n", + "2020 | \n", + "MI | \n", + "FT | \n", + "Data Scientist | \n", + "37000 | \n", + "EUR | \n", + "42197 | \n", + "FR | \n", + "50 | \n", + "FR | \n", + "S | \n", + "1127 | \n", + "
72 rows × 12 columns
\n", + "%matplotlib inline
+
+import pandas as pd
+import numpy as np
+import matplotlib.pyplot as plt
+
Um competidor do Kaggle, George McIntire, que se diz ser apaixonado por músicas, ficou curioso para saber porquê ele gosta das músicas que ele gosta. +Com isso, ele construiu um conjunto de dados de músicas de 2017 obtido via API do Spotify e rotulou cada música como "Like", o que significa que ele gosta e "Dont Like" para músicas que não gosta.
+Fonte: Textos extraídos e/ou adaptados de https://www.kaggle.com/geomack/spotifyclassification.
+ +Consulte o dicionario de dados no link Dicionário de dados antes de resolver os itens a seguir.
+ +dados_1 = pd.read_excel("arquivos/Q1_Spotify_CD.xlsx")
+
dados_1.head(3)
+
dados_1.liking = dados_1.liking.astype('category')
+
dados_1.columns
+
A seção a seguir contém uma análise das variáveis energy
e liking
, por favor faça:
a) Construa um histograma de densidade de frequências da variável energy
separadamente para cada categoria de liking
.
Resposta a partir daqui
+ +i) Gráficos:
+ +dados_1.energy.describe()
+
faixa=np.arange(0,1,0.04)
+
#Uma maneira:
+
+fig = plt.figure(figsize=(15, 4))
+plt.subplot(121)
+dados_1.energy[dados_1.liking=='Dont Like'].plot.hist(bins=faixa, color=('blue'), density=1, title="Dont Like", alpha=0.6)
+plt.ylim(0,2.8)
+plt.ylabel('Densidade')
+plt.xlabel('energy')
+
+plt.subplot(122)
+dados_1.energy[dados_1.liking=='Like'].plot.hist(bins=faixa, color=('red'), density=1, title="Like", alpha=0.6)
+plt.ylim(0,2.8)
+plt.ylabel('Densidade')
+plt.xlabel('energy')
+
+plt.show()
+
b) Interprete os histogramas do item anterior em termos da preferência de George. Existe alguma tendência ou orientação em suas preferências?
+ +Resposta a partir daqui
+ +energy
abaixo de $0.3$ dificilmente Gerge não irá gostar.energy
acima de $0.8$ possivelmente Gerge irá gostar.c) Observando o formato de cada histograma construído anteriormente e utilizando medidas de posição ou centralidade adequadamente, classifique como sendo simétrico, assimétrico a direita ou assimétrico a esquerda. Argumente claramente o motivo de sua classificação. +Apresente as referidas medidas de posição (tendência central)
+ +Resposta a partir daqui
+ +Formato do gráfico com uso de medidas de posição!
+ +dados_1.energy[dados_1.liking=="Dont Like"].describe()
+
dados_1.energy[dados_1.liking=="Like"].describe()
+
Análise das variáveis energy e loudness
+Neste item, considere as variáveis energy
e loudness
(utilize todas as faixas sem separar por liking
).
A partir dos dados, faça:
+ +d) Apresente um gráfico adequado que permita visualizar a associação entre as variáveis energy
e loudness
. Discuta se há uma associação aparente a partir do gráfico
Resposta a partir daqui
+ +fig = plt.figure(figsize=(15, 4))
+plt.subplot(121)
+plt.scatter(dados_1.energy, dados_1.loudness)
+plt.xlabel('energy = atividade/barulhenta')
+plt.ylabel('loudness = qualidade em dB')
+
+plt.subplot(122)
+plt.scatter(dados_1.loudness, dados_1.energy)
+plt.ylabel('energy = atividade/barulhenta')
+plt.xlabel('loudness = qualidade em dB');
+
Nota-se que quanto mais barulhenta (alta energia) for uma faixa maior, tende a ser sua qualidade (dB tendendo a zero). +Uma faixa com qualidade abaixo de -20, tende a ter energia mais próxima de zero.
+ +e) Utilizando uma medida-resumo adequada, discuta o grau de associação dessas duas variáveis: energy
e loudness
.
Resposta a partir daqui
+ +dados_1.energy.corr(dados_1.loudness)
+
Como já notado graficamente, observa-se que há uma forte associação positiva entre essas duas variáveis (0,76), ainda que não seja necessariamente apenas linear.
+ +Mulher Brasileira Chefe de Família. Que Mulher é essa?
+ +Assuma que haja o interesse em descrever o perfil das mulheres casadas e chefes de família1 no ano de 2015 contrapondo àquelas que também são casadas e trabalham, mas não assumem esse papel na família.
+A base de dados que terá acesso traz informações exclusivamente de uma amostra restrita de mulheres casadas que possuem as seguintes características:
+✔ Todas possuem pelo menos um trabalho principal no dia da pesquisa;
+✔ São todas casadas e têm idade entre 20 a 59 anos;
+✔ Todas possuem rendimento do trabalho principal entre R\$ 200,00 e R\\$ 5.000,00;
+✔ Cada mulher tem classificada sua condição na família bem definida na data da pesquisa: Chefe ou Não chefe.
+1Indivíduo que se declara como “pessoa de referência” na família.
+ +O arquivo pnadMulher.xlsx traz informações das seguintes variáveis:
+ +dados = pd.read_excel("arquivos/pnadMulher.xlsx")
+
dados.head()
+
dados.dtypes
+
a) Utilizando alguma ferramenta estatística que seja adequada, construa um gráfico que permita analisar como a idade pode ser semelhante ou não entre as mulheres com condição de chefe e de não chefe na família. +Ainda, interprete o gráfico em termos do problema (de forma clara e sucinta).
+ +Resposta:
+ +A seguir, há algumas opções gráficas corretas que podem ser consideradas para responder tal objetivo.
+ +faixa=range(20,61,2)
+
#Uma maneira:
+
+fig = plt.figure(figsize=(15, 5))
+plt.subplot(121)
+dados.IDADE[dados.CONDFAM=='Chefe'].plot.hist(bins=faixa,
+ color=('blue'), density=1,
+ title="MULHER CHEFE", alpha=0.6)
+plt.ylabel('Densidade')
+plt.xlabel('IDADE (em anos)')
+
+plt.subplot(122)
+dados.IDADE[dados.CONDFAM=='Nao chefe'].plot.hist(bins=faixa,
+ color=('blue'), density=1,
+ title="MULHER NAO CHEFE", alpha=0.6)
+plt.ylabel('Densidade')
+plt.xlabel('IDADE (em anos)')
+
+plt.show()
+
fig = plt.figure(figsize=(15, 7))
+plt.subplot(111)
+dados.IDADE[dados.CONDFAM=='Chefe'].plot.hist(bins=faixa,
+ color=('blue'), density=1, alpha=0.6)
+dados.IDADE[dados.CONDFAM=='Nao chefe'].plot.hist(bins=faixa,
+ color=('red'), density=1, alpha=0.6)
+
+plt.ylabel('Densidade')
+plt.xlabel('IDADE (em anos)')
+plt.legend(('MULHER CHEFE', 'MULHER NÃO CHEFE'))
+plt.show()
+
Interpretação:
+Descrever de forma clara e sucinta como IDADE tem suas diferenças ANALISANDO gráfico.
+Um exemplo: Histograma construído com bins
adequados mostrará que mulheres chefes são mais concentradas entre 34 a 40 anos e mulheres não chefes, entre 32 a 38 anos. Ainda, que entre 24 a 36 anos, mulheres não chefes são mais frequentes dos que mulheres chefes. Já entre 54 a 59 anos, mulheres chefes são mais frequentes do que as não chefes. De maneira geral, há uma maior concentração de mulheres chefes em idades mais altas do que as não chefes.
b) Faça um gráfico adequado que permita visualizar como é a associação entre as variáveis renda mensal familiar per capita e renda mensal do trabalho principal, considerando apenas as mulheres com condição de chefe na família. Ainda, interprete o gráfico em termos do problema (de forma clara e sucinta).
+ +fig = plt.figure(figsize=(9, 5))
+
+plt.scatter(dados.RENDTRABPRINC[dados.CONDFAM=="Chefe"], dados.RENDFAMPERCAPITA[dados.CONDFAM=="Chefe"], c='cyan', alpha=0.8)
+plt.title('RENDFAMPERCAPITA explicada por RENDTRABPRINC')
+plt.xlabel('em reais')
+plt.ylabel('em reais')
+
+plt.tight_layout()
+plt.show()
+
c) Calcule uma medida adequada que permita interpretar o grau de associação entre as variáveis renda mensal familiar per capita e renda mensal do trabalho principal, considerando apenas as mulheres com condição de chefe na família.
+ +print(dados.RENDFAMPERCAPITA[dados.CONDFAM=="Chefe"].corr(dados.RENDTRABPRINC[dados.CONDFAM=="Chefe"]))
+
Interpretação: PARA PROVA, APENAS MULHERES CHEFES
+i) Descrever associação positiva visualizada em gráfico de dispersão, considerando obrigatoriamente variável RENDTRABPRINC
em eixo x e RENDFAMPERCAPITA
em eixo y.
ii) Correlação entre RENDTRABPRINC
e RENDFAMPERCAPITA
.
Esta parte da avaliação se baseia em uma amostra de dados do ENEM 2017 adaptados para esta prova. O dicionario de dados encontra-se no link a seguir:
+ + +filename = "arquivos/enem2017_30K.csv"
+dados = pd.read_csv(filename, index_col=0)
+dados.head(5)
+
a) Apresente uma tabela cruzada que mostre a escolaridade do pai cruzada com o tipo do ensino médio. Aponte a combinação de categorias mais frequente e, baseado no dicionário de dados, explique o que são.
+ +ct = pd.crosstab(dados.ESC_PAI, dados.TIPO_EM, normalize=True)
+
ct*100
+
O crosstab mostra que $20.53\%$ das pessoas têm escolaridade do pai B
, ou seja, não completou o 5.o ano do fundamental ao mesmo tempo que tipo do ensino médio A
, ou seja, estuda em escola pública.
b) Baseado nos dados, encontre a idade da mulher mais idosa que prestou a prova
+ +max(dados[dados.TP_SEXO=="F"].NU_IDADE)
+
c) Avalie a afirmação: pessoas com mais renda tendem a ir melhor no ENEM
+É necessário:
+dados.plot.scatter(x="RENDA", y="NOTA_ENEM")
+
dados.RENDA.corr(dados.NOTA_ENEM)
+
Existe uma correlação de intensidade média entre RENDA
e NOTA_ENEM
. O valor do coeficiente de correlação é 0.4
Nota-se no gráfico que as notas do ENEM variam bastante em todos os níveis de renda
+ +d) Compare as várias categorias do ensino médio. Use um recurso gráfico que permita visualizar a distribuição das notas do ENEM comparando as categorias de ensino médio.
+ +A Somente em escola pública.
+B Parte em escola pública e parte em escola privada SEM bolsa de estudo integral.
+C Parte em escola pública e parte em escola privada COM bolsa de estudo integral.
+D Somente em escola privada SEM bolsa de estudo integral.
+E Somente em escola privada COM bolsa de estudo integral.
+# PROF
+from numpy import arange
+minimo = dados.NOTA_ENEM.min() - 10
+maximo = dados.NOTA_ENEM.max() + 10
+faixa = arange(minimo,maximo,100)
+plt.figure(figsize=(15, 10))
+
+############################################################
+plt.subplot(231)
+plt.hist(dados.loc[dados.TIPO_EM == "A","NOTA_ENEM"],
+ edgecolor='white',density=True, color='#EC4889',
+ linewidth=1, alpha=0.8, bins=faixa)
+plt.ylabel('densidade')
+plt.xlabel('notas')
+plt.title("Tipo A")
+plt.xlim(minimo,maximo)
+
+############################################################
+plt.subplot(232)
+plt.hist(dados.loc[dados.TIPO_EM == "B","NOTA_ENEM"],
+ edgecolor='white', density=True, color='#7895E9',
+ linewidth=1, alpha=0.8, bins=faixa)
+plt.ylabel('densidade')
+plt.xlabel('notas')
+plt.title("Tipo B")
+plt.xlim(minimo,maximo)
+
+############################################################
+plt.subplot(233)
+plt.hist(dados.loc[dados.TIPO_EM == "C","NOTA_ENEM"],
+ edgecolor='white', density=True, color='#C361EB',
+ linewidth=1, alpha=0.8, bins=faixa)
+plt.ylabel('densidade')
+plt.xlabel('notas')
+plt.title("Tipo C")
+plt.xlim(minimo,maximo)
+
+############################################################
+plt.subplot(234)
+plt.hist(dados.loc[dados.TIPO_EM == "D","NOTA_ENEM"],
+ edgecolor='white', density=True, color='#ECC948',
+ linewidth=1, alpha=0.8, bins=faixa)
+plt.ylabel('densidade')
+plt.xlabel('notas')
+plt.title("Tipo D")
+plt.xlim(minimo,maximo)
+
+############################################################
+plt.subplot(235)
+plt.hist(dados.loc[dados.TIPO_EM == "E","NOTA_ENEM"],
+ edgecolor='white', density=True, color='#48ECCC',
+ linewidth=1, alpha=0.8, bins=faixa)
+plt.ylabel('densidade')
+plt.xlabel('notas')
+plt.title("Tipo E")
+plt.xlim(minimo,maximo)
+
+plt.tight_layout()
+plt.show()
+
#Outra maneira:
+plt.figure(figsize=(25,25))
+dados.boxplot(column="NOTA_ENEM", by="TIPO_EM")
+plt.tight_layout()
+plt.show()
+
Resposta: Existe diferença entre os tipos de ensino médio de acordo com a nota no ENEM. Em particular, podemos ressaltar que:
+Alunos de escolas privadas tendem a ter maiores notas do que alunos da rede publica de ensino, ou aqueles que cursaram parte de seu estudo na rede publica.
+Alunos bolsistas da rede privada tendem a ter notas menores no ENEM que alunos sem bolsa, mas essa diferença não é muito grande.
+O Kaggle.com é um site de competições internacionais de Data Science no qual empresas oferecem prêmios para os analistas que fizerem a melhor modelagem preditiva de diversos problemas.
+Em uma das competições recente, o desafio era:
++Ask a home buyer to describe their dream house, and they probably won't begin with the height of the basement ceiling or the proximity to an east-west railroad. But this playground competition's dataset proves that much more influences price negotiations than the number of bedrooms or a white-picket fence.
+With 79 explanatory variables describing (almost) every aspect of residential homes in Ames, Iowa, this competition challenges you to predict the final price of each home.
+
A seguir, vocês receberão um conjunto de dados bem menor em termos de número de variáveis disponível no Kaggle.
+ +A base de dados que terão acesso traz informações de 1460 imóveis cujas variáveis selecionadas possuem as seguintes descrições traduzidas (mantendo os nomes das variáveis e das categorias do problema original - em inglês):
+ +✔ Id: número que identifica o imóvel na base de dados.
+✔ SalePrice: preço de venda da propriedade (em dólares). Ess +a é a variável alvo que você irá tentar predizer.
+✔ Foundation: tipo de fundação, com as seguintes categorias:
+✔ OverallQual: avalia de maneira geral o material e o acabamento da casa, com as seguintes categorias:
+✔ LotArea: tamanho do lote (em pés quadrados).
+✔ X1stFlrSF: tamanho do primeiro andar (em pés quadrados).
+✔ X2ndFlrSF: tamanho do segundo andar (em pés quadrados).
+✔ GarageCars: tamanho da garagem em capacidade de carros (número de carros).
+✔ Fireplaces: número de lareiras.
+✔ Street: tipo de acesso rodoviário à propriedade, com as seguintes categorias:
+✔ LandSlope: inclinação da propriedade, com as seguintes categorias:
+✔ RoofStyle: tipo do telhado, com as seguintes categorias:
+✔ CentralAir: ar condicionado central, com as seguintes categorias:
+✔ YearBuilt: ano da construção do imóvel.
+✔ YrSold: ano de venda do imóvel.
+O arquivo <house.xlsx > traz todas essas 15 variáveis.
+ +dados = pd.read_excel("arquivos/house.xlsx")
+
dados.head()
+
dados.dtypes
+
dados.Foundation = dados.Foundation.astype('category')
+dados.OverallQual = dados.OverallQual.astype('category')
+dados.Street = dados.Street.astype('category')
+dados.LandSlope = dados.LandSlope.astype('category')
+dados.RoofStyle = dados.RoofStyle.astype('category')
+dados.CentralAir = dados.CentralAir.astype('category')
+
+dados.Foundation.cat.categories = (['BrkTil','CBlock','PConc','Slab','Stone','Wood'])
+dados.OverallQual.cat.categories = (['Very Poor','Poor','Fair','Below Average','Average',
+ 'Above Average','Good','Very Good','Excellent','Very Excellent'])
+
+dados.Street.cat.categories = (['Grvl','Pave'])
+dados.LandSlope.cat.categories = (['Gtl','Mod','Sev'])
+dados.RoofStyle.cat.categories = (['Flat','Gable','Gambrel','Hip','Mansard','Shed'])
+dados.CentralAir.cat.categories = (['N','Y'])
+
a) Utilizando alguma ferramenta estatística (gráfica) que seja adequada, analise como a presença ou não de ar central no imóvel (variável CentralAir
) pode impactar sobre preço de vendas de um imóvel (variável SalePrice
). A interpretação precisa ser completa PORÉM sucinta.
dados.SalePrice.describe()
+
faixa=range(34000,800000,50000)
+
#Uma maneira:
+
+fig = plt.figure(figsize=(15, 4))
+plt.subplot(121)
+dados.SalePrice[dados.CentralAir=='N'].plot.hist(bins=faixa, color=('blue'), density=True, title="IMOVEL SEM AR", alpha=0.6)
+plt.ylabel('Densidade')
+plt.xlabel('Preço de venda do imóvel (em dolares)')
+
+plt.subplot(122)
+dados.SalePrice[dados.CentralAir=='Y'].plot.hist(bins=faixa, color=('blue'), density=True, title="IMOVEL COM AR", alpha=0.6)
+plt.ylabel('Densidade')
+plt.xlabel('Preço de venda do imóvel (em dolares)')
+
+plt.show()
+
#Outra maneira:
+dados.boxplot(column="SalePrice",by="CentralAir")
+plt.tight_layout()
+plt.show()
+
#Descrever da forma mais completa como presença de Air Central pode predizer preços de imoveis maiores do que sem Ar Central.
+#Deixar claro que é maior em média, ou em a partir da haste superior do SEM AR encontra-se possiveis aberrantes enquanto que nos imoveis
+#COM AR encontra-se 50% dos imoveis mais caros.
+
b) Utilizando alguma ferramentas estatísticas (numérica E gráfica) que sejam adequadas, analise como o tamanho de área construída do primeiro andar do imóvel (variável X1stFlrSF
) pode impactar sobre preço de vendas do mesmo (variável SalePrice
). A interpretação precisa ser completa PORÉM sucinta.
dados.SalePrice.corr(dados.X1stFlrSF)
+
fig = plt.figure(figsize=(9, 5))
+
+plt.scatter(dados.X1stFlrSF, dados.SalePrice, c='cyan', alpha=0.8)
+plt.title('SalePrice explicado por X1st')
+plt.xlabel('em sqft')
+plt.ylabel('em dolares')
+
+plt.tight_layout()
+plt.show()
+
c) Como você verificaria a seguinte afirmação: Os imóveis sem ar central possuem a mesma qualidade geral de material e de acabamento quando comparados com imóveis que possuem ar central?
+Obs: Considere as variáveis CentralAir
e OverallQual
para responder a pergunta acima.
#pode ser apenas tabela
+ct2=(pd.crosstab(dados.CentralAir, dados.OverallQual, margins=False,
+ rownames=['Ar Central'], colnames=['Qualidade'], normalize='index')*100).round(decimals=2)
+ct2
+
#pode ter grafico tambem mas não é obrigatório se a tabela for bem interpretada
+
+plot = ct2.plot(kind='bar', stacked=True,title='Qualidade por Ar Central',figsize=(8, 6))
+plt.ylabel('Freq.Relativa (em %)')
+
+#Para legenda ficar fora do gráfico
+ax = plt.subplot(111)
+box = ax.get_position()
+ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])
+ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
+
+plt.show()
+
\n", + " | music_id | \n", + "acousticness | \n", + "danceability | \n", + "duration_ms | \n", + "energy | \n", + "instrumentalness | \n", + "liveness | \n", + "loudness | \n", + "speechiness | \n", + "tempo | \n", + "valence | \n", + "song_title | \n", + "artist | \n", + "liking | \n", + "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", + "0 | \n", + "0.0102 | \n", + "0.833 | \n", + "204600 | \n", + "0.434 | \n", + "0.021900 | \n", + "0.165 | \n", + "-8.795 | \n", + "0.4310 | \n", + "150.062 | \n", + "0.286 | \n", + "Mask Off | \n", + "Future | \n", + "Like | \n", + "
1 | \n", + "1 | \n", + "0.1990 | \n", + "0.743 | \n", + "326933 | \n", + "0.359 | \n", + "0.006110 | \n", + "0.137 | \n", + "-10.401 | \n", + "0.0794 | \n", + "160.083 | \n", + "0.588 | \n", + "Redbone | \n", + "Childish Gambino | \n", + "Dont Like | \n", + "
2 | \n", + "2 | \n", + "0.0344 | \n", + "0.838 | \n", + "185707 | \n", + "0.412 | \n", + "0.000234 | \n", + "0.159 | \n", + "-7.148 | \n", + "0.2890 | \n", + "75.044 | \n", + "0.173 | \n", + "Xanny Family | \n", + "Future | \n", + "Like | \n", + "
\n", + " | REGIAO | \n", + "AREA | \n", + "CONDFAM | \n", + "IDADE | \n", + "CORRACA | \n", + "NATUNIAO | \n", + "NIVELINST | \n", + "OCUPACAO | \n", + "ANOSTRAB | \n", + "HORASTRABSEMANA | \n", + "RENDTRABPRINC | \n", + "RENDTRABTODOS | \n", + "RENDFAMPERCAPITA | \n", + "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", + "Norte | \n", + "Urbana | \n", + "Chefe | \n", + "35 | \n", + "Parda | \n", + "So casamento civil | \n", + "Superior incompleto | \n", + "Empregado | \n", + "0 | \n", + "40 a 44 horas | \n", + "880 | \n", + "880 | \n", + "793 | \n", + "
1 | \n", + "Norte | \n", + "Urbana | \n", + "Chefe | \n", + "34 | \n", + "Parda | \n", + "Uniao consensual | \n", + "Medio completo | \n", + "Empregado | \n", + "0 | \n", + "40 a 44 horas | \n", + "790 | \n", + "790 | \n", + "818 | \n", + "
2 | \n", + "Norte | \n", + "Urbana | \n", + "Nao chefe | \n", + "51 | \n", + "Parda | \n", + "So casamento civil | \n", + "Medio completo | \n", + "Empregador | \n", + "11 | \n", + "40 a 44 horas | \n", + "2000 | \n", + "2000 | \n", + "1716 | \n", + "
3 | \n", + "Norte | \n", + "Urbana | \n", + "Nao chefe | \n", + "20 | \n", + "Parda | \n", + "Uniao consensual | \n", + "Medio incompleto | \n", + "Empregado | \n", + "0 | \n", + "40 a 44 horas | \n", + "850 | \n", + "850 | \n", + "666 | \n", + "
4 | \n", + "Norte | \n", + "Urbana | \n", + "Chefe | \n", + "49 | \n", + "Parda | \n", + "Uniao consensual | \n", + "Fundamental incompleto | \n", + "Conta propria | \n", + "9 | \n", + "45 a 48 horas | \n", + "2500 | \n", + "2500 | \n", + "1662 | \n", + "
\n", + " | NU_INSCRICAO | \n", + "SG_UF_RESIDENCIA | \n", + "NU_IDADE | \n", + "TP_SEXO | \n", + "TP_ESTADO_CIVIL | \n", + "TP_ST_CONCLUSAO | \n", + "IN_TREINEIRO | \n", + "NU_NOTA_CN | \n", + "NU_NOTA_CH | \n", + "NU_NOTA_LC | \n", + "... | \n", + "CARRO | \n", + "CELULAR | \n", + "FIXO | \n", + "COMPUTADOR | \n", + "INTERNET | \n", + "Q026 | \n", + "TIPO_EM | \n", + "RENDA | \n", + "NOTA_TESTES | \n", + "NOTA_ENEM | \n", + "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
171957 | \n", + "170003469518 | \n", + "MT | \n", + "26.0 | \n", + "F | \n", + "0.0 | \n", + "1 | \n", + "0 | \n", + "605.4 | \n", + "657.4 | \n", + "542.4 | \n", + "... | \n", + "A | \n", + "E | \n", + "A | \n", + "B | \n", + "A | \n", + "A | \n", + "C | \n", + "3020.091575 | \n", + "2430.9 | \n", + "2990.9 | \n", + "
127898 | \n", + "170005286919 | \n", + "CE | \n", + "17.0 | \n", + "M | \n", + "0.0 | \n", + "2 | \n", + "0 | \n", + "698.5 | \n", + "649.0 | \n", + "630.6 | \n", + "... | \n", + "C | \n", + "B | \n", + "A | \n", + "B | \n", + "B | \n", + "B | \n", + "D | \n", + "3611.589780 | \n", + "2817.1 | \n", + "3677.1 | \n", + "
132925 | \n", + "170005113172 | \n", + "MA | \n", + "21.0 | \n", + "M | \n", + "0.0 | \n", + "1 | \n", + "0 | \n", + "591.0 | \n", + "643.8 | \n", + "597.9 | \n", + "... | \n", + "A | \n", + "D | \n", + "A | \n", + "B | \n", + "B | \n", + "A | \n", + "A | \n", + "1375.454182 | \n", + "2385.8 | \n", + "3325.8 | \n", + "
119870 | \n", + "170005346442 | \n", + "PR | \n", + "17.0 | \n", + "F | \n", + "0.0 | \n", + "2 | \n", + "0 | \n", + "525.6 | \n", + "441.2 | \n", + "509.4 | \n", + "... | \n", + "B | \n", + "C | \n", + "A | \n", + "B | \n", + "B | \n", + "B | \n", + "A | \n", + "2079.516469 | \n", + "1930.0 | \n", + "2450.0 | \n", + "
122904 | \n", + "170004476042 | \n", + "DF | \n", + "26.0 | \n", + "F | \n", + "0.0 | \n", + "1 | \n", + "0 | \n", + "538.0 | \n", + "408.8 | \n", + "523.9 | \n", + "... | \n", + "B | \n", + "C | \n", + "A | \n", + "A | \n", + "A | \n", + "A | \n", + "A | \n", + "1364.095119 | \n", + "1921.8 | \n", + "2381.8 | \n", + "
5 rows × 28 columns
\n", + "ESC_PAI | \n", + "A | \n", + "B | \n", + "C | \n", + "D | \n", + "E | \n", + "F | \n", + "G | \n", + "H | \n", + "
---|---|---|---|---|---|---|---|---|
TIPO_EM | \n", + "\n", + " | \n", + " | \n", + " | \n", + " | \n", + " | \n", + " | \n", + " | \n", + " |
A | \n", + "5.033333 | \n", + "20.523333 | \n", + "13.223333 | \n", + "10.450000 | \n", + "18.220000 | \n", + "3.033333 | \n", + "1.193333 | \n", + "7.643333 | \n", + "
B | \n", + "0.063333 | \n", + "0.393333 | \n", + "0.356667 | \n", + "0.423333 | \n", + "1.220000 | \n", + "0.420000 | \n", + "0.253333 | \n", + "0.250000 | \n", + "
C | \n", + "0.056667 | \n", + "0.260000 | \n", + "0.206667 | \n", + "0.170000 | \n", + "0.483333 | \n", + "0.113333 | \n", + "0.056667 | \n", + "0.090000 | \n", + "
D | \n", + "0.063333 | \n", + "0.436667 | \n", + "0.630000 | \n", + "0.996667 | \n", + "4.466667 | \n", + "3.333333 | \n", + "2.653333 | \n", + "0.443333 | \n", + "
E | \n", + "0.046667 | \n", + "0.253333 | \n", + "0.273333 | \n", + "0.320000 | \n", + "1.070000 | \n", + "0.460000 | \n", + "0.256667 | \n", + "0.160000 | \n", + "
\n", + " | SalePrice | \n", + "Foundation | \n", + "OverallQual | \n", + "LotArea | \n", + "X1stFlrSF | \n", + "X2ndFlrSF | \n", + "GarageCars | \n", + "Fireplaces | \n", + "Street | \n", + "LandSlope | \n", + "RoofStyle | \n", + "CentralAir | \n", + "YearBuilt | \n", + "YrSold | \n", + "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", + "208500 | \n", + "PConc | \n", + "Good | \n", + "8450 | \n", + "856 | \n", + "854 | \n", + "2 | \n", + "0 | \n", + "Pave | \n", + "Gtl | \n", + "Gable | \n", + "Y | \n", + "2003 | \n", + "2008 | \n", + "
1 | \n", + "181500 | \n", + "CBlock | \n", + "Above Average | \n", + "9600 | \n", + "1262 | \n", + "0 | \n", + "2 | \n", + "1 | \n", + "Pave | \n", + "Gtl | \n", + "Gable | \n", + "Y | \n", + "1976 | \n", + "2007 | \n", + "
2 | \n", + "223500 | \n", + "PConc | \n", + "Good | \n", + "11250 | \n", + "920 | \n", + "866 | \n", + "2 | \n", + "1 | \n", + "Pave | \n", + "Gtl | \n", + "Gable | \n", + "Y | \n", + "2001 | \n", + "2008 | \n", + "
3 | \n", + "140000 | \n", + "BrkTil | \n", + "Good | \n", + "9550 | \n", + "961 | \n", + "756 | \n", + "3 | \n", + "1 | \n", + "Pave | \n", + "Gtl | \n", + "Gable | \n", + "Y | \n", + "1915 | \n", + "2006 | \n", + "
4 | \n", + "250000 | \n", + "PConc | \n", + "Very Good | \n", + "14260 | \n", + "1145 | \n", + "1053 | \n", + "3 | \n", + "1 | \n", + "Pave | \n", + "Gtl | \n", + "Gable | \n", + "Y | \n", + "2000 | \n", + "2008 | \n", + "
Carregando algumas bibliotecas:
+ +%matplotlib inline
+import pandas as pd
+import matplotlib.pyplot as plt
+import numpy as np
+
+from scipy import stats
+import math
+
+# Para ter melhor print
+from IPython.display import display
+
O serviço de entregas de comida iQueMedo entrega apenas 4 itens diferentes durante a semana: coxinha (C), carne misteriosa (M), peixe caramelizado - pensa uma maçã do amor, mas de sardinha - (P) e ostra vintage (O). Aos sábados servem pizza ou sushi.
+O DataFrame abaixo mostra o histórico de compras de alguns clientes durante a semana, e qual o pedido que fizeram no sábado. A coluna "Semana" contém uma string onde cada letra representa um pedido (dentre as opções acima: 'C', 'M', 'P' e 'O'), e a coluna "Final" mostra o que foi pedido no final de semana.
+ +import os
+
+filename = 'comidas.csv'
+if filename in os.listdir():
+ print(f'Encontrei o arquivo {filename}, tudo certo para prosseguir com a prova!')
+else:
+ print(f'Não encontrei o arquivo {filename} aqui no diretório {os.getcwd()}, '
+ 'será que você não baixou o arquivo?')
+
comidas = pd.read_csv(filename, sep=";")
+
comidas.head()
+
a) Queremos um sistema que permita escolher, baseado no histórico de pedidos de um cliente, se ele vai preferir sushi ou pizza no sábado.
+Construa um classificador Naive-Bayes para esse problema. Ou seja, determine:
+Observação: você deve adotar as seguintes medidas simplificadoras:
+Dica: para separar uma string em lista de letras é simples: basta usar a função list()
. Por exemplo:
texto = 'PPMPOPOOPP'
+lista = list(texto)
+print(lista)
+
# Coloque seu código aqui...
+
# PROF
+textao_pizza = []
+for item in comidas.loc[comidas['Sábado'] == 'pizza', 'Semana']:
+ textao_pizza += list(item)
+probs_pizza = pd.Series(textao_pizza).value_counts(True)
+
+textao_sushi = []
+for item in comidas.loc[comidas['Sábado'] == 'sushi', 'Semana']:
+ textao_sushi += list(item)
+probs_sushi = pd.Series(textao_sushi).value_counts(True)
+
+ser_prior = comidas['Sábado'].value_counts(True)
+prior_pizza = ser_prior['pizza']
+prior_sushi = ser_prior['sushi']
+
+print('Condicional sushi')
+print(probs_sushi)
+
+print('Condicional pizza')
+print(probs_pizza)
+
+print('Prior sushi')
+print(prior_sushi)
+
+print('Prior pizza')
+print(prior_pizza)
+
b) Determine a recomendação do sistema para um cliente com o seguinte histórico de pedidos: "PPCPCCCOPP"
+Observação: não precisa implementar o "truque do log".
+ +# Coloque seu código aqui...
+
# PROF
+pedidos = 'PPCPCCCOPP'
+
+p_pizza = prior_pizza
+for letra in pedidos:
+ p_pizza *= probs_pizza[letra]
+
+p_sushi = prior_sushi
+for letra in pedidos:
+ p_sushi *= probs_sushi[letra]
+
+if p_pizza > p_sushi:
+ print('Come pizza')
+else:
+ print('Come sushi')
+
c) Saiu uma notícia no jornal que diz que comer peixe caramelizado aumenta muito a incidência de unha encravada, daquelas bem horríveis. (Caso você goste de unha encravada: suponha que a população em geral não gosta.)
+Comente o que você espera que aconteça se você continuar usando seu classificador Naive-Bayes para fazer as recomendações de pizza ou sushi.
+(Nesta questão não tem código ou cálculos para fazer - apenas senso crítico.)
+ +# Coloque sua resposta aqui...
+
O classificador naive-Bayes, se usado como está, apresenta recomendações de pizza ou sushi baseado no gosto antigo da população, onde peixe caramelizado era mais popular. Com isso, as recomendações oferecidas pelo classificador nesta nova situação não serão ideais, havendo um excesso de recomendações errôneas. É necessário coletar novos dados e retreinar o classificador (ou seja, recalcular os priors e as condicionais).
+ +Esta questão é baseada no Projeto 2
+ +Você foi contratado pela empresa The Coca Cola Company para fazer monitoramento de redes sociais. Sua empresa fez um bot que continuamente busca por novas postagens no Twitter e as classifica.
+ +A empresa está interessada em saber quais mensagens estão felizes com a marca versus o total que estão neutros ou insatisfeitos.
+ +Sua base de treinamento está no arquivo coca_cola.xlsx
.
As mensagens felizes têm a coluna Categoria com valor FELIZ
e as mensagens que não são felizes têm como Categoria o valor NAO_FELIZ
.
Note que a coluna Texto já passou pelas seguintes etapas:
+tweets = pd.read_excel("Q3_coca_cola.xlsx")
+
tweets.head()
+
Pede-se:
+ +a) Junte todas as mensagens da cada categoria em uma string única
+ +feliz = tweets[tweets.Categoria=="FELIZ"]
+feliz_texto = " ".join(feliz.Texto)
+feliz_series=pd.Series(feliz_texto.split())
+
+
+nao_feliz = tweets[tweets.Categoria=="NAO_FELIZ"]
+nao_feliz_texto = " ".join(nao_feliz.Texto)
+nao_feliz_series = pd.Series(nao_feliz_texto.split())
+
b) Apresente as tabelas que são equivalentes a $P(palavra|FELIZ)$ e $P(palavra|NAO\_FELIZ)$, e que contém todas as palavras presentes nas respectivas categorias.
+Você deve guardá-las em variáveis e exibi-las de forma semelhante ao que foi feito com o comando tweets.head()
acima.
R.:
+$P(palavra|FELIZ)$
+ +# insira aqui os comandos para obter
+feliz_freq = feliz_series.value_counts(True)
+
$P(palavra|NAO\_FELIZ)$
+ +# insira aqui os comandos para palavra não feliz. Crie mais células se precisar
+nao_feliz_freq = nao_feliz_series.value_counts(True)
+
c) Considerando que:
+pandas
e numpy
Por favor faça:
+Classifique usando um classificador Naive Bayes se a frase "prometo que vai ser a última coca cola do dia"
é uma frase que pertence à categoria FELIZ
ou NAO_FELIZ
Deixe claro (pode ser em comentários) o significado de seus cálculos e a qual conclusão chegou. Principalmente deixei claro em qual número baseou a conclusão
+Atente que vai ser necessário calcular os valores de $P(FELIZ)$ e $P(NAO\_FELIZ)$
+ +frase = "prometo que vai ser a última coca cola do dia" # frase a classificar
+
Primeiramente vamos calcular $P(FELIZ)$ e $P(NAO\_FELIZ)$ seguindo a mesma estratégia usada no projeto 2, ou seja, a proporção dos tweets
+ +P_feliz = len(feliz)/len(tweets)
+P_nao_feliz = len(nao_feliz)/len(tweets)
+
P_nao_feliz
+
P_feliz
+
p_frase_dado_nao_feliz = nao_feliz_freq[frase.split()].prod()
+
p_frase_dado_feliz = feliz_freq[frase.split()].prod()
+
Vamos comparar $P(FELIZ|frase) = \frac{P(frase|FELIZ)P(FELIZ)}{P(frase)}$ com $P(NAO\_FELIZ|frase) = \frac{P(frase|NAO\_FELIZ)P(NAO\_FELIZ)}{P(frase)}$ . Como foi feito na aula de texto com Bayes e no Projeto 2, podemos desprezar o denominador $P(frase)$ que aparece em ambas as fórmulas
+ +Vamos comparar $P(frase|FELIZ)P(FELIZ)$
+ +P_feliz*p_frase_dado_feliz
+
Com $P(frase|NAO\_FELIZ)P(NAO\_FELIZ)$
+ +P_nao_feliz*p_frase_dado_nao_feliz
+
Como se pode ver, as probabilidades dizem que é mais provável que a frase acima seja NAO_FELIZ
Para saber quantas vezes P(NAO_FELIZ|frase) é maior vamos fazer $P(NAO\_FELIZ|frase)/P(FELIZ|frase)$
+ +(P_nao_feliz*p_frase_dado_nao_feliz)/(P_feliz*p_frase_dado_feliz)
+
Ou seja, a frase é $1.67$ vezes mais provável de ser do tipo NAO_FELIZ
que FELIZ
\n", + " | Sábado | \n", + "Semana | \n", + "
---|---|---|
0 | \n", + "pizza | \n", + "PMPCPCC | \n", + "
1 | \n", + "sushi | \n", + "CPO | \n", + "
2 | \n", + "sushi | \n", + "PPMPOPOOPP | \n", + "
3 | \n", + "sushi | \n", + "POPPO | \n", + "
4 | \n", + "pizza | \n", + "CPMM | \n", + "
\n", + " | Texto | \n", + "Categoria | \n", + "
---|---|---|
0 | \n", + "acho que comer hamburguer de soja e se entupir... | \n", + "NAO_FELIZ | \n", + "
1 | \n", + "gosto mais de vaca preta coca cola com sorvet... | \n", + "FELIZ | \n", + "
2 | \n", + "me prometo uma coca cola gelada para o fim do... | \n", + "FELIZ | \n", + "
3 | \n", + "essa coca cola gelada fez meu dia | \n", + "FELIZ | \n", + "
4 | \n", + "prometo parar com doce refrigerante coca cola ... | \n", + "NAO_FELIZ | \n", + "