Atividade: Variáveis qualitativas com a PNAD (ALUNOS)


Aula 02

Link úteis:

  1. Leitura prévia necessária: Magalhães e Lima (7ª. Edição): pág. 9 a 16 – destacando para variáveis qualitativas.
  2. 10 Minutes to Pandas: http://pandas.pydata.org/pandas-docs/stable/10min.html
  3. Essential Basic Functionality: http://pandas.pydata.org/pandas-docs/stable/basics.html
  4. Estude a aula Aula02 Análise Exploratoria Variáveis Qualitativas-ALUNOS.ipynb, o qual contém uma introdução ao Jupyter Notebook. A publicação dessa aula tem como objetivo auxiliá-lo, caso queira, no desenvolvimento dos seus próximos programas, como esta atividade.

Hoje:

  1. Analisar variáveis qualitativas de forma uni e bivariadas utilizando tabelas de frequências e gráficos de barras e de pizza (ou setor).
  2. Trabalhar com a base de dados da PNAD 2013 - Pesquisa Nacional por Amostra de Domicílios

Próxima aula:

  1. Leitura prévia necessária: Magalhães e Lima (7ª. Edição): pág. 9 a 17 – destacando para variáveis quantitativas; pág. 106 e 107 (Definição 4.1 e Exemplo 4.1).


PNAD 2013 – PESQUISA NACIONAL POR AMOSTRA DE DOMICÍLIOS

Base de dados reduzida: pes2013A.txt (75 MB) [Acesse a base de dados aqui: https://dl.dropboxusercontent.com/u/65763596/Aula02/pes2013A.txt]

Dicionário das variáveis: Dicionário de variáveis de pessoas - PNAD 2013.xlsx [Acesse dicionário aqui: https://dl.dropboxusercontent.com/u/65763596/Aula02/Dicion%C3%A1rio%20de%20vari%C3%A1veis%20de%20pessoas%20-%20PNAD%202013.xls]

Muitos especialistas na área de negócios dizem que empresários mais bem sucedidos são aqueles que fazem um planejamento antes de começar seu próprio negócio. Nessa visão, imagine que o Sr. Gold tenha como grande objetivo abrir uma nova faculdade e para isso deseja estudar o perfil do estudante que cursa ensino médio ou pré-vestibular e do que cursa ensino superior.

Assuma que as variáveis de interesse a respeito dos estudantes sejam relativamente as mesmas de 2013 até o momento atual. Nesse caso, seja criativo para ajudar o Sr. Gold que deseja abrir seu negócio, mas não tem certeza sobre quais variáveis o interessam.

Vocês podem ajudá-lo?!

As variáveis a seguir devem fazer parte da sua análise:

  • V0302: sexo
  • V0404: cor ou raça
  • V6002: rede de ensino
  • V4802: nível de ensino e grupos de séries do ensino fundamental que frequentavam (todos os estudantes)

Crie uma variável com região do indivíduo amostrado considerando a variável UF que define o estado e também trabalhe com essa nova variável em suas análises.

Escolha mais pelo menos DUAS variáveis qualitativas para completar sua análise!!

Faça uma análise exploratória apenas com as variáveis qualitativas com foco no objetivo do Sr. Gold.

Sua análise deve conter pelo menos uma das seguintes visualizações:

  1. Gráfico de colunas (bar) e setor (pie) com as frequências relativas cadas categorias das variáveis qualitativas.
  2. Tabela cruzada entre pares de variaveis qualitativas. Montar o gráfico de colunas. Repetir o processo habilitando a opção "stacked=True".

Crie um repositório chamado CD em seu Github

Neste repositório, salve seu trabalho numa pasta chamada aula2

Por exemplo, se seu login for pikachu o projeto vai estar na pasta:

https://github.com/pikachu/CD/aula2

Terça-feira (dia 16/08), no horário de atendimento da sua turma, deverá apresentar aos NINJAS!!



In [36]:
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import os
from numpy import arange

In [3]:
print('Esperamos trabalhar no diretório')
print(os.getcwd())


Esperamos trabalhar no diretório
C:\Users\haik_000\SkyDrive\Insper\Ciencia dos dados\cd\Aula5

In [4]:
dados = pd.read_csv('pes2013A.txt', sep=" ")

Variáveis que usamos foram se sabe ler e escrever (V0601) e se usou internet no último ano (V061111)



In [5]:
dados


Out[5]:
V0101 UF V0102 V0103 V0301 V0302 V8005 V0404 V4011 V0412 ... V4706 V4707 V4809 V4810 V4711 V4718 V4720 V4742 V4750 V4729
1 2013 11 15 3 1 4 42 2 5 2 ... NaN NaN NaN NaN NaN NaN 350 350 350 244
2 2013 11 15 4 1 4 64 8 7 2 ... NaN NaN NaN NaN NaN NaN 678 339 339 243
3 2013 11 15 4 2 4 13 4 0 2 ... NaN NaN NaN NaN NaN NaN 0 339 339 243
4 2013 11 15 5 1 2 23 8 0 2 ... 1 3 5 5 1 800 800 266 266 243
5 2013 11 15 5 2 4 19 8 0 2 ... NaN NaN NaN NaN NaN NaN 0 266 266 243
6 2013 11 15 5 3 4 17 8 0 2 ... NaN NaN NaN NaN NaN NaN 0 266 266 243
7 2013 11 15 6 1 2 59 4 NaN 2 ... 9 3 4 8 2 800 800 400 400 244
8 2013 11 15 6 2 4 56 2 NaN 2 ... NaN NaN NaN NaN NaN NaN 0 400 400 244
9 2013 11 15 7 1 2 25 8 1 2 ... 1 3 5 6 1 1100 1100 411 411 244
10 2013 11 15 7 2 4 23 2 1 2 ... NaN NaN NaN NaN NaN NaN 134 411 411 243
11 2013 11 15 7 3 4 5 2 NaN 4 ... NaN NaN NaN NaN NaN NaN NaN 411 411 244
12 2013 11 15 8 1 2 37 2 NaN 2 ... 3 3 8 1 1 4000 4000 1333 1333 243
13 2013 11 15 8 2 4 25 2 NaN 2 ... NaN NaN NaN NaN NaN NaN 0 1333 1333 244
14 2013 11 15 8 3 2 4 2 NaN 6 ... NaN NaN NaN NaN NaN NaN NaN 1333 1333 243
15 2013 11 15 9 1 4 50 2 5 2 ... 3 3 8 3 1 3500 3500 1750 1750 243
16 2013 11 15 9 2 4 23 2 0 2 ... NaN NaN NaN NaN NaN NaN 0 1750 1750 243
17 2013 11 15 10 1 2 28 2 5 2 ... 1 3 5 8 1 1300 1300 1300 1300 244
18 2013 11 15 11 1 2 41 2 1 4 ... 1 3 3 8 1 1400 1400 280 280 244
19 2013 11 15 11 2 4 34 2 1 2 ... NaN NaN NaN NaN NaN NaN 0 280 280 244
20 2013 11 15 11 3 2 17 2 0 4 ... NaN NaN NaN NaN NaN NaN 0 280 280 243
21 2013 11 15 11 4 2 15 2 0 2 ... NaN NaN NaN NaN NaN NaN 0 280 280 244
22 2013 11 15 11 5 2 1 2 NaN 4 ... NaN NaN NaN NaN NaN NaN NaN 280 280 243
23 2013 11 15 12 1 2 51 8 1 2 ... 9 4 5 8 2 1000 1000 333 333 244
24 2013 11 15 12 2 4 44 4 1 2 ... NaN NaN NaN NaN NaN NaN 0 333 333 244
25 2013 11 15 12 3 2 8 4 NaN 4 ... NaN NaN NaN NaN NaN NaN NaN 333 333 244
26 2013 11 15 13 1 2 36 2 3 2 ... 1 3 12 5 1 1100 1100 1100 1100 243
27 2013 11 15 15 1 2 49 2 5 2 ... 9 3 4 8 2 1300 1300 650 650 244
28 2013 11 15 15 2 2 9 8 NaN 2 ... NaN NaN NaN NaN NaN NaN NaN 650 650 243
29 2013 11 15 16 1 4 25 2 0 2 ... 6 3 10 5 1 678 678 678 678 243
30 2013 11 23 1 1 2 57 8 0 2 ... 9 5 6 1 2 3000 3000 3000 3000 243
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
362526 2013 53 2148 5 5 2 10 4 0 4 ... NaN NaN NaN NaN NaN NaN 0 600 600 299
362527 2013 53 2148 8 1 4 33 2 NaN 2 ... 7 2 10 5 2 800 800 356 356 299
362528 2013 53 2148 8 2 2 43 2 NaN 4 ... 1 2 12 5 1 980 980 356 356 299
362529 2013 53 2148 8 3 2 12 2 0 4 ... NaN NaN NaN NaN NaN NaN 0 356 356 299
362530 2013 53 2148 8 4 4 9 2 NaN 4 ... NaN NaN NaN NaN NaN NaN NaN 356 356 299
362531 2013 53 2148 8 5 2 7 2 NaN 4 ... NaN NaN NaN NaN NaN NaN NaN 356 356 299
362532 2013 53 2148 9 1 2 42 8 0 4 ... 1 5 12 5 1 2000 3100 974 974 299
362533 2013 53 2148 9 2 4 38 8 0 4 ... 6 3 10 5 1 900 970 974 974 299
362534 2013 53 2148 9 3 2 18 8 0 4 ... 1 3 11 3 1 800 800 974 974 299
362535 2013 53 2148 9 4 4 15 8 0 4 ... NaN NaN NaN NaN NaN NaN 0 974 974 299
362536 2013 53 2148 9 5 4 14 8 0 2 ... NaN NaN NaN NaN NaN NaN 0 974 974 299
362537 2013 53 2148 10 1 4 18 8 NaN 2 ... NaN NaN NaN NaN NaN NaN 0 750 400 299
362538 2013 53 2148 10 2 2 23 8 NaN 4 ... 1 3 12 8 1 800 800 750 400 299
362539 2013 53 2148 10 3 2 50 2 NaN 4 ... 1 3 12 8 1 1200 1200 750 1050 299
362540 2013 53 2148 10 4 4 39 2 NaN 4 ... 1 3 9 5 1 900 900 750 1050 300
362541 2013 53 2148 10 5 2 21 2 0 4 ... 1 5 12 8 1 1600 1600 750 800 299
362542 2013 53 2148 10 6 4 22 8 0 2 ... NaN NaN NaN NaN NaN NaN 0 750 800 299
362543 2013 53 2148 11 1 4 35 2 0 2 ... NaN NaN NaN NaN NaN NaN 550 516 516 300
362544 2013 53 2148 11 2 2 49 2 5 4 ... 1 3 7 8 1 1000 1000 516 516 299
362545 2013 53 2148 11 3 4 13 2 0 4 ... NaN NaN NaN NaN NaN NaN 0 516 516 299
362546 2013 53 2148 13 1 2 54 2 NaN 2 ... 9 3 4 8 2 2000 2000 800 800 299
362547 2013 53 2148 13 2 4 48 8 NaN 4 ... 9 1 3 8 2 400 400 800 800 299
362548 2013 53 2148 13 3 2 5 8 NaN 4 ... NaN NaN NaN NaN NaN NaN NaN 800 800 299
362549 2013 53 2148 14 1 2 17 4 0 2 ... 7 2 10 5 2 100 100 100 100 299
362550 2013 53 2148 15 1 4 30 2 0 2 ... NaN NaN NaN NaN NaN NaN 0 387 387 299
362551 2013 53 2148 15 2 2 33 4 0 4 ... 1 3 4 8 1 1200 1550 387 387 300
362552 2013 53 2148 15 3 2 11 2 0 4 ... NaN NaN NaN NaN NaN NaN 0 387 387 299
362553 2013 53 2148 15 4 2 2 8 NaN 4 ... NaN NaN NaN NaN NaN NaN NaN 387 387 299
362554 2013 53 2148 16 1 4 32 8 0 2 ... 1 3 6 5 1 700 800 400 400 299
362555 2013 53 2148 16 2 4 6 8 NaN 4 ... NaN NaN NaN NaN NaN NaN NaN 400 400 299

362555 rows × 72 columns


In [6]:
dados.V4732


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-6-13844682ec5e> in <module>()
----> 1 dados.V4732

C:\Users\haik_000\Anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
   2358                 return self[name]
   2359             raise AttributeError("'%s' object has no attribute '%s'" %
-> 2360                                  (type(self).__name__, name))
   2361 
   2362     def __setattr__(self, name, value):

AttributeError: 'DataFrame' object has no attribute 'V4732'

In [ ]:
#Mudando os rótulos categóricos
dados.V0302 = dados.V0302.astype('category')
dados.V0302.cat.categories =('Masculino', 'Feminino')
dados.V0302

In [ ]:


In [ ]:


In [ ]:
#Mudando os rótulos categóricos

dados.V0404 = dados.V0404.astype('category')
dados.V0404.cat.categories =('Indígena', 'Branca', 'Preta', 'Amarela','Parda')
dados.V0404

In [ ]:
#rotulos V6002
dados.V6002=dados.V6002.astype('category')
dados.V6002.cat.categories = ('Pública', 'Privada')

In [ ]:
#rótulos V061111
dados.V061111=dados.V061111.astype('category')
dados.V061111.cat.categories = ('Acessam', 'Não Acessam')
dados.V061111

In [ ]:
#rótulos V4802
dados.V4802=dados.V4802.astype('category')

dados.V4802.cat.categories = (
'Alfabetização de adultos',
'1ª a 4ª séries do ensino fundamental regular em 8 anos ou de educação de jovens e adultos',
'5ª a 8ª séries do ensino fundamental regular em 8 anos ou de educação de jovens e adultos',
'1ª série do ensino fundamental regular em 9 anos',
'2ª a 5ª séries do ensino fundamental regular em 9 anos', 
'6ª a 9ª séries do ensino fundamental regular em 9 anos ',
'Educação de jovens e adultos não seriado do ensino fundamental',
'Ensino médio, inclusive pré-vestibular',
'Superior, inclusive mestrado ou doutorado')
dados.V4802

In [ ]:
# rotulos V0601
dados.V0601=dados.V0601.astype('category')
dados.V0601.cat.categories = ("Sim", "Não")
dados.V0601

In [ ]:
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')

In [ ]:
sexo = dados.V0302.value_counts()
sexo.plot(kind='bar', color=('blue', 'pink'), legend=False, title='Gênero')

In [ ]:
sexo.plot(kind='pie',colors=('blue', 'pink'), autopct="%0.2f",legend=False, title='Gênero')

In [ ]:
cor = dados.V0404.value_counts()
cor.plot(kind='bar', color=('white', 'brown', 'black', 'yellow', 'red'), legend=False,title='Cor')

In [ ]:
cor.plot(kind='pie', autopct="%0.2f",legend=False, title= 'Cor')

In [ ]:
rede_ensino=dados.V6002.value_counts()
rede_ensino.plot(kind='bar', color=('blue', 'brown'), legend=False, title='rede de ensino')

In [ ]:
rede_ensino.plot(kind='pie', colors=('blue', 'brown'), autopct="%0.2f",legend=False,title='rede de ensino')

In [ ]:
nivel_ensino=dados.V4802.value_counts()
nivel_ensino.plot(kind='bar', color=('white', 'brown', 'black', 'yellow', 'red'), legend=False,title='nivel de ensino') # 2 é publica e 4 é privada; depois arrumamos

In [ ]:


In [ ]:
nivel_ensino.plot(kind='pie', colors=('blue', 'brown', 'pink', 'yellow', 'red'), autopct="%0.2f",legend=False,title='nivel de ensino')

In [ ]:
ler.plot(kind='bar', color=('red', 'blue', 'black', 'yellow', 'red'), legend=False,title='alfabetizados') # 2 é publica e 4 é privada; depois arrumamos

In [ ]:
ler=dados.V0601.value_counts()
ler.plot(kind='pie', autopct="%0.2f",legend=False,title='alfabetizados')

In [ ]:
internet.plot(kind='bar', color=('red', 'blue', 'black', 'yellow', 'red'), legend=False,title='Acessam Internet') # 2 é publica e 4 é privada; depois arrumamos

In [ ]:
#V061111


internet=dados.V061111.value_counts()
internet.plot(kind='pie',autopct="%0.2f", title='Acessam internet')

In [ ]:
ct= pd.crosstab(dados.V0302, dados.V0601)
ct.plot(kind='bar', color = ('yellow', 'salmon'))

In [ ]:
ct

In [ ]:


In [ ]:
regiao = dados.UF
norte= dados[dados.UF <= 16] # 'Norte'
nordeste = dados[(dados.UF >= 17) & (dados.UF <= 29)] # 'Nordeste'
sudeste = dados[(dados.UF >= 31) & (dados.UF <= 35)] # 'Sudeste'
sul =dados[(dados.UF >= 41) & (dados.UF <= 43)] # 'Sul'
centro =dados[(dados.UF >=50 ) & (dados.UF <= 53)] # 'Centro'
#dados['Regiao']=pd.crosstab(dados)

renda = pd.cut(dados.V4742[dados.V4742 <1000000] ,bins= 10).value_counts()
renda.value_counts().plot.bar()

Para o checkpoint:

Reforçar a análise do Sr. Gold utilizando pelo menos duas variáveis quantitativas e explorando bem os recursos (histogramas, boxplots comparativos, comando .describe()).

A idéia que motiva as análises precisa estar clara no texto, e as conclusões tiradas dos dados também.


In [20]:
dados.V8005


Out[20]:
1         42
2         64
3         13
4         23
5         19
6         17
7         59
8         56
9         25
10        23
11         5
12        37
13        25
14         4
15        50
16        23
17        28
18        41
19        34
20        17
21        15
22         1
23        51
24        44
25         8
26        36
27        49
28         9
29        25
30        57
          ..
362526    10
362527    33
362528    43
362529    12
362530     9
362531     7
362532    42
362533    38
362534    18
362535    15
362536    14
362537    18
362538    23
362539    50
362540    39
362541    21
362542    22
362543    35
362544    49
362545    13
362546    54
362547    48
362548     5
362549    17
362550    30
362551    33
362552    11
362553     2
362554    32
362555     6
Name: V8005, dtype: int64

In [7]:
#idade.plot(kind='box', legend=False,title='Idade')
dados.V8005.plot.box(title='Idade dos brasileiros, em bloxplot')


Out[7]:
<matplotlib.axes._subplots.AxesSubplot at 0x165c2c79b00>

In [ ]:


In [12]:
dados.V8005.plot.hist(color='orange',title='Histograma das idades')

plt.xlabel("Idades")
plt.ylabel("Frequência absoluta")


Histograma das idades
Out[12]:
<matplotlib.text.Text at 0x165d23427b8>

In [15]:
acre=dados[dados.UF == 12]
acre.V8005.plot.box(title='Idade dos acreanos, em bloxplot')


Out[15]:
<matplotlib.axes._subplots.AxesSubplot at 0x165d1d71320>

In [14]:
acre.V8005.plot.hist(color='orange',title='Histograma das idades dos acreanos')

plt.xlabel("Idades")
plt.ylabel("Frequência absoluta")


Out[14]:
<matplotlib.text.Text at 0x165d1d64940>

In [17]:
rs=dados[dados.UF == 43]
rs.V8005.plot.box(title='Idade dos gauchos, em bloxplot')


Out[17]:
<matplotlib.axes._subplots.AxesSubplot at 0x165c326d208>

In [34]:
rs.V8005.plot.hist(color='orange',title='Histograma das idades dos gauchos')

plt.xlabel("Idades")
plt.ylabel("Frequência absoluta")


Out[34]:
<matplotlib.text.Text at 0x165d5339470>

In [ ]:


In [50]:
dados["renda"] = dados.V4720

arranjo = arange(0,10000,300)

dados.renda.describe()

plot = dados.Renda.plot.hist(arranjo, color="pink")
plt.title("Histograma da Renda")
plt.xlabel("Renda ")
plt.ylabel("Frequência ")


Out[50]:
<matplotlib.text.Text at 0x165d3731550>

In [ ]:


In [ ]:


In [55]:
acre["renda"] =acre.V4720

arranjo = arange(0,10000,300)

dados.renda.describe()

plot = acre.renda.plot.hist(arranjo, color="purple")
plt.title("Histograma da Renda (acre)")
plt.xlabel("Renda ")
plt.ylabel("Frequência ")


C:\Users\haik_000\Anaconda3\lib\site-packages\ipykernel\__main__.py:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  if __name__ == '__main__':
Out[55]:
<matplotlib.text.Text at 0x165d38246a0>

In [56]:
rs["renda"] =rs.V4720

arranjo = arange(0,10000,300)

dados.renda.describe()

plot = rs.renda.plot.hist(arranjo, color="pink")
plt.title("Histograma da Renda (Rio Grande do Sul)")
plt.xlabel("Renda ")
plt.ylabel("Frequência ")


C:\Users\haik_000\Anaconda3\lib\site-packages\ipykernel\__main__.py:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  if __name__ == '__main__':
Out[56]:
<matplotlib.text.Text at 0x165d537e668>

In [54]:
renda.describe()


Out[54]:
count     3892.000000
mean        92.954265
std        416.556928
min          1.000000
25%          4.000000
50%         12.000000
75%         78.000000
max      18554.000000
Name: V4742, dtype: float64

Percebe-se que no acre há muito mais jovens do que no Rio Grande do Sul (em proporção a sua população), porém a renda dos gaúchos é maior. Entretanto, o sr. Gold prefere ganhar mais dinheiro à ter jovens alunos, sendo indicado para ele abrir a faculdade nos pampas.


In [ ]: