Estudos de Caso em Python

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 22

Linguagem de

Programação Aplicada
Material Teórico
Estudos de Caso em Python

Responsável pelo Conteúdo:


Prof. Dr. Alcides Teixeira Barboza Junior

Revisão Textual:
Prof. Me. Luciano Vieira Francisco
Estudos de Caso em Python

• Introdução;
• Leitura, Manipulação e Visualização de Datasets.

OBJETIVOS DE APRENDIZADO
• Compreender o uso de datasets de domínio público;
• Aprender a manipular os dados de datasets;
• Aprender a criar gráficos para análise de dados em datasets.
Orientações de estudo
Para que o conteúdo desta Disciplina seja bem
aproveitado e haja maior aplicabilidade na sua
formação acadêmica e atuação profissional, siga
algumas recomendações básicas:
Conserve seu
material e local de
estudos sempre
organizados.
Aproveite as
Procure manter indicações
contato com seus de Material
colegas e tutores Complementar.
para trocar ideias!
Determine um Isso amplia a
horário fixo aprendizagem.
para estudar.

Mantenha o foco!
Evite se distrair com
as redes sociais.

Seja original!
Nunca plagie
trabalhos.

Não se esqueça
de se alimentar
Assim: e de se manter
Organize seus estudos de maneira que passem a fazer parte hidratado.
da sua rotina. Por exemplo, você poderá determinar um dia e
horário fixos como seu “momento do estudo”;

Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma


alimentação saudável pode proporcionar melhor aproveitamento do estudo;

No material de cada Unidade, há leituras indicadas e, entre elas, artigos científicos, livros, vídeos
e sites para aprofundar os conhecimentos adquiridos ao longo da Unidade. Além disso, você tam-
bém encontrará sugestões de conteúdo extra no item Material Complementar, que ampliarão sua
interpretação e auxiliarão no pleno entendimento dos temas abordados;

Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de discus-
são, pois irão auxiliar a verificar o quanto você absorveu de conhecimento, além de propiciar o
contato com seus colegas e tutores, o que se apresenta como rico espaço de troca de ideias e
de aprendizagem.
UNIDADE Estudos de Caso em Python

Introdução
Os pacotes Numpy, Pandas e Matplotlib, como você já estudou, auxiliam na
tarefa de análise de dados, dando suporte à preparação ou leitura dos dados até à
visualização por meio de gráficos.

Você também deve se lembrar que estudamos sobre como carregar arquivos
de dados, ou datasets; geralmente esses arquivos possuem muitos dados, e para
processá-los temos a disponibilidade de pacotes como Pandas e o Numpy para
realizar alguns processamentos.

Agora que você já conhece as ferramentas, chegou o momento de juntar tudo


para utilizar em exemplos práticos. Nesta Unidade você fará uso de todos os con-
ceitos passados nas unidades anteriores; apresentaremos alguns “estudos de caso”
para demonstrar o uso desses conceitos. Então, abra o seu Jupyter Notebook ou
Idle do Python e comecemos a trabalhar.

Leitura, Manipulação e
Visualização de Datasets
Processaremos diferentes arquivos de dados para cada um dos exemplos desta
seção; então, antes de começar, certifique-se que já baixou todos do ambiente.

Estudo de caso 1
Precisamos apresentar um gráfico de barras para demonstrar o ganho de meda-
lhas de cinco países, os dados serão criados manualmente neste estudo, visto que
o intuito é demonstrar o uso de um gráfico de barras segmentadas. Eis o código:

# Importação dos pacotes

import numpy as np

import matplotlib.pyplot as plt

# Relação de países da amostra

paises = [‘EUA’, ‘China’, ‘Brasil’, ‘Argentina’, ‘Alemanha’]

# Dados referentes a cada país da amostra e suas respectivas medalhas de


ouro, prata e bronze, dados fictícios

bronze = np.array([38, 17, 26, 19, 15])

prata = np.array([37, 23, 18, 18, 10])

ouro = np.array([46, 27, 26, 19, 17])

# Criação de um vetor de índices para o eixo x do gráfico

8
ind = np.arange(len(paises))

# No Jupyter, precisamos inserir todas as linhas abaixo em uma única célula

# Barra de medalhas de ouro

plt.bar(ind, ouro, label=’Ouro’ , color=’gold’ , bottom=prata+bronze)

# Barra de medalhas de prata

plt.bar(ind, prata, label=’Prata’, color=’silver’, bottom=bronze)

# Barra de medalhas de bronze

plt.bar(ind, bronze, label=’Broze’, color=’#CD853F’)

# Associação dos nomes dos países para cada índice do eixo X

plt.xticks(ind, paises)

# Rótulos dos eixos X e Y

plt.ylabel(“Medalhas”)

plt.xlabel(“Países”)

# Legenda padrão para as três medalhas

plt.legend()

# Título do gráfico

plt.title(“Medalhas - Olimpíadas 2018”)

plt.show()

Medalhas – Olimpíadas 2018


120 Ouro
Prata
100 Bronze

80
Medalhas

60

40

20

0
EUA China Brasil Argentina Alemanha
Países

Figura 1 – Gráfico de barras segmentadas (medalhas)

9
9
UNIDADE Estudos de Caso em Python

Estudo de caso 2
Um setor público precisa visualizar os resultados das eleições presidenciais de
2018. É necessário criar um gráfico para demonstrar a quantidade de votos dos três
candidatos mais votados. Tal gráfico deve evidenciar as porcentagens de cada um dos
candidatos nas regiões Sudeste, Nordeste, Sul, Norte e Centro-Oeste. Eis o código:

import numpy as np

import matplotlib.pyplot as plt

regioes = [‘SUDESTE’, ‘NORDESTE’, ‘SUL’, ‘NORTE’, ‘CENTRO-OESTE’]

# Dados retirados do site

# https://congressoemfoco.uol.com.br/eleicoes/acompanhe-por-aqui-a-
apuracao-de-votos-em-tempo-real/

bolsonaro = np.array([53.965, 28.187, 58.446, 50.357, 57.677])

haddad = np.array([20.74, 49.824, 19.213, 30.331, 20.59])

ciro = np.array([11.937, 16.214, 8.786, 7.657, 9.707])

index = np.arange(len(regioes))

# Insira as linhas abaixo dentro de uma célula do Jupyter

plt.bar(index, ciro, label=”Ciro”, color=”yellow”)

plt.bar(index, haddad, label=”Haddad”, color=”blue”, bottom= ciro)

plt.bar(index, bolsonaro, label=”Bolsonaro”, color=”red”, bottom= ciro+haddad)

plt.xticks(index, regioes)

plt.xlabel(“Regiões”)

plt.legend()

plt.title(“Distribuição de presidenciáveis nas regiões brasileiras”)

plt.show()

Distribuição de presidenciáveis nas regiões brasileiras


Bolsonaro
Haddad
80 Ciro

60

40

20

0
Sudeste Nordeste Sul Norte Centro-oeste
Regiões

Figura 2 – Gráfico de barras segmentadas (presidenciáveis 2018)

10
Estudo de caso 3
Para este estudo você encontrará os dados no arquivo axisdata.xlsx.

Alcides é o gerente de vendas da Axis Auto e se prepara para uma reunião anual
de vendas, necessitando, para tanto, de algumas análises e gráficos. Os dados pre-
sentes no dataset incluem o gênero, as horas trabalhadas, o treinamento, os anos
de experiência e a média de carros vendidos no ano para cada membro da equipe.
Assim, apresente:

A média de carros vendidos no ano pela sua equipe


Código:

import matplotlib.pyplot as plt

import pandas as pd

df = pd.read_csv(“axisdata.csv”)

media = df[“Cars Sold”].mean()

print(“A média de carros é: “, media)

# saída

A média de carros é: 3.9229229229229228

O valor máximo de carros vendidos e o(s) respectivo(s) nome(s) do(s) vendedor(es), em


ordem alfabética
Código:

import pandas as pd

nome = []

df = pd.read_csv(“axisdata.csv”)

# Valor máximo de carros vendidos

maximo = df[“Cars Sold”].max()

print(“Valor máximo de carros vendidos”, maximo)

# saída

Valor máximo de carros vendidos 7

# Nomes dos vendedores

for i in range(len(df)):

if(df[“Cars Sold”][i] == maximo):

nome.append(df[“Fname”][i])

11
11
UNIDADE Estudos de Caso em Python

# Vamos ordenar o vetor de nomes

nome.sort()

print(nome)

# saída

[‘August’, ‘Brad’, ‘Brad’, ‘Brad’, ‘Carla’, ‘Charles’, ‘Charles’, ‘Charles’,


‘Frank’, ‘John’, ‘Lisa’, ‘Onika’, ‘Paula’, ‘Peter’, ‘Ronelle’, ‘Sam’,
‘Sam’, ‘Sam’, ‘Sam’, ‘Sam’, ‘Tom’, ‘Tom’, ‘Tom’, ‘Victoria’, ‘Walter’]

O valor mínimo de carros vendidos e o(s) respectivo(s) nome(s) do(s) vendedor(es), em


ordem alfabética
Código:

import pandas as pd

nome = []

df = pd.read_csv(“axisdata.csv”)

minimo = df[“Cars Sold”].min()

print(“Valor mínimo de carros vendidos”, minimo)

# saída:

Valor mínimo de carros vendidos 1

for i in range(len(df)):

if(df[“Cars Sold”][i] == minimo):

nome.append(df[“Fname”][i])

nome.sort()

print(nome)

# saída:

[‘Adam’, ‘Adam’, ‘August’, ‘Betty’, ‘Betty’, ‘Betty’, ‘Brad’, ‘Brad’,


‘Carla’, ‘Carla’, ‘Carla’, ‘Carla’, ‘Carla’, ‘Carla’, ‘Charles’, ‘Charles’,
‘Denise’, ‘Francine’, ‘Frank’, ‘Frank’, ‘Frank’, ‘Jack’, ‘Jack’, ‘Jackie’,
‘Jackie’, ‘Jada’, ‘Jada’, ‘John’, ‘Karen’, ‘Lisa’, ‘Mary’, ‘Nicole’,
‘Onika’, ‘Paula’, ‘Peter’, ‘Peter’, ‘Roger’, ‘Roger’, ‘Samantha’,
‘Samantha’, ‘Samantha’, ‘Tom’, ‘Victoria’, ‘Walter’]

Um gráfico para demonstrar a taxa de vendas por gênero (F e M).


Código:

import matplotlib.pyplot as plt

import pandas as pd

12
df = pd.read_csv(“axisdata.csv”)

obj = (“F”, “M”)

# Vamos pegar os valores de Gender igual a F e M, criamos um vetor com


esses valores

valores = [len(df.loc[df[“Gender”] == “F”]), len(df.loc[df[“Gender”] ==


“M”])]

colors=[“blue”, “red”]

# Insira as linhas abaixo em uma única célula

plt.pie(valores, labels=obj, colors=colors, autopct=”%.2f%%”, shadow=True,


startangle=12)

# Legenda dos dois objetos de pesquisa

plt.legend(obj)

plt.axis(“equal”)

plt.show()

# saida:

F F
M
48.95%

51.05%

M
Figura 3 – Gráfico de setores (vendas por gêneros)

Média de horas trabalhadas para as pessoas que vendem mais de três carros.
Código:

import matplotlib.pyplot as plt

import pandas as pd

df = pd.read_csv(“axisdata.csv”)

media = df.loc[df[“Cars Sold”] > 3].mean()

print(“A média de carros é: “, media[“Hours Worked”])

13
13
UNIDADE Estudos de Caso em Python

# saída:
A média de carros é: 34.74

Um gráfico referente à média das horas trabalhadas para cada valor da experiência, ou seja,
a média de horas para as pessoas com 1 ano de experiência, 2, 3 e assim sucessivamente.
Código:
# Vamos precisar dos três pacotes juntos
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Leitura do dataset
df = pd.read_csv(“axisdata.csv”)
# Criamos os rótulos do eixo X
rotulos = [“1 Ano”, “2 Anos”, “3 Anos”, “4 Anos”, “5 Anos”]

# Criamos a variável dadosEXP1 como o DataFrame resultante da pesquisa do


método loc que busca o campo Years Experience igual a 1
dadosEXP1 = df.loc[df[“Years Experience”] == 1]
# Calculamos a média das horas trabalhadas com base na coluna Hours Worked
mediaEXP1 = dadosEXP1[“Hours Worked”].mean()

# Criamos a variável dadosEXP1 como o DataFrame resultante da pesquisa do


método loc que busca o campo Years Experience igual a 2
dadosEXP2 = df.loc[df[“Years Experience”] == 2]
# Calculamos a média das horas trabalhadas com base na coluna Hours Worked
mediaEXP2 = dadosEXP2[“Hours Worked”].mean()

# Criamos a variável dadosEXP1 como o DataFrame resultante da pesquisa do


método loc que busca o campo Years Experience igual a 3
dadosEXP3 = df.loc[df[“Years Experience”] == 3]
# Calculamos a média das horas trabalhadas com base na coluna Hours Worked
mediaEXP3 = dadosEXP3[“Hours Worked”].mean()

# Criamos a variável dadosEXP1 como o DataFrame resultante da pesquisa do


método loc que busca o campo Years Experience igual a 4
dadosEXP4 = df.loc[df[“Years Experience”] == 4]
# Calculamos a média das horas trabalhadas com base na coluna Hours Worked
mediaEXP4 = dadosEXP4[“Hours Worked”].mean()

# Criamos a variável dadosEXP1 como o DataFrame resultante da pesquisa do


método loc que busca o campo Years Experience igual a 5

14
dadosEXP5 = df.loc[df[“Years Experience”] == 5]
# Calculamos a média das horas trabalhadas com base na coluna Hours Worked
mediaEXP5 = dadosEXP5[“Hours Worked”].mean()

valores = [mediaEXP1, mediaEXP2, mediaEXP3, mediaEXP4, mediaEXP5]


index = np.arange(len(rotulos))

# Insira as linhas abaixo em uma única célula do Jupyter


plt.bar(index, valores)
plt.xticks(index, rotulos, fontsize=20, rotation=30)
plt.title(“Média de horas trabalhadas por experiência”)
plt.show()
# saída

Média de horas trabalhadas por experiência


35

30

25

20

15

10

0
1 Ano 2 Anos 3 Anos 4 Anos 5 Anos
Figura 4 – Gráfico de barras (horas trabalhadas)

Estudo de caso 4
Para este estudo, você encontrará os dados no arquivo gradedata.xlsx. Descu-
bra, então, o seguinte:

Calcule e mostre – no prompt – a porcentagem de alunos com as notas – grade – nas


faixas < 60, = 70, = 80, > 90.
Código:

import pandas as pd
df = pd.read_csv(“gradedata.csv”)

15
15
UNIDADE Estudos de Caso em Python

# Localizamos na tabela a coluna grade com notas < 60


dadosnota1 = df.loc[df[“grade”] < 60]
# Calculamos a porcentagem
nota1 = len(dadosnota1) *100/ len(df.index)

# Localizamos na tabela a coluna grade com notas = 70


dadosnota2 = df.loc[df[“grade”] == 70]
# Calculamos a porcentagem
nota2 = len(dadosnota2) *100/ len(df.index)

# Localizamos na tabela a coluna grade com notas = 80


dadosnota3 = df.loc[df[“grade”] == 80]
# Calculamos a porcentagem
nota3 = len(dadosnota3) *100 / len(df.index)

# Localizamos na tabela a coluna grade com notas > 90


dadosnota4 = df.loc[df[“grade”] > 90]
# Calculamos a porcentagem
nota4 = len(dadosnota4) *100/ len(df.index)

print(“Alunos com notas <60: %.1f %%” %(nota1))


print(“Alunos com notas =70: %.1f %%” %(nota2))
print(“Alunos com notas =80: %.1f %%” %(nota3))
print(“Alunos com notas >90: %.1f %%” %(nota4))
# saída

Alunos com notas <60: 0.7 %


Alunos com notas =70: 0.1 %
Alunos com notas =80: 0.2 %
Alunos com notas >90: 23.8 %

Apresente os dados graficamente para as notas – grade – nas faixas <= 60, > 60 e <= 70,
> 70 e <= 80, > 80, destacando a maior taxa.
Código:

import matplotlib.pyplot as plt


import pandas as pd
df = pd.read_csv(“gradedata.csv”)
dadosnota1 = df.loc[df[“grade”] <= 60]
nota1 = len(dadosnota1)*100 / len(df.index)

16
dadosnota2 = df.loc[(df[“grade”] > 60) & (df[“grade”] <= 70)]
nota2 = len(dadosnota2)*100 / len(df.index)

dadosnota3 = df.loc[(df[“grade”] > 70) & (df[“grade”] <= 80)]


nota3 = len(dadosnota3) *100/ len(df.index)

dadosnota4 = df.loc[df[“grade”] > 80]


nota4 = len(dadosnota4) *100/ len(df.index)

obj = (“< 60”, “> 60 e <= 70”, “> 70 e <= 80”, “> 80”)
valores = [nota1, nota2, nota3, nota4]
colors=[“blue”, “red”, “grey”, “yellow”]
explode = (0, 0, 0, 0.2)
# Digite as linhas abaixo em uma única célula
plt.pie(valores, labels=obj, explode=explode, colors=colors,
autopct=»%1.1f%%», shadow=True)
plt.legend(obj)
plt.axis(“equal”)
plt.show()
# saída:

> 70 e < = 80

29.0%
> 60 e < = 70
9.6%
< 60
0.7%

< 60
60.6% > 60 e < = 70
> 70 e < = 80
> 80

Figura 5 – Gráfico de setores (referente às notas)

Apresente a maior e menor notas para ambos os gêneros. Para cada valor encontrado,
imprima o nome e sobrenome do primeiro aluno da lista.
Código:

import pandas as pd
df = pd.read_csv(“gradedata.csv”)
# Buscamos o gênero masculino
homem = df.loc[df[“gender”] == “male”]

17
17
UNIDADE Estudos de Caso em Python

hMax = homem[“grade”].max() # maior nota


hMin = homem[“grade”].min() # menor nota
# Localizamos o nome dos homens
homemMax = homem.loc[homem[“grade”] == hMax]
homemMin = homem.loc[homem[“grade”] == hMin]

# Buscamos o gênero feminino


mulher = df.loc[df[“gender”] == “female”]
mMax = mulher[“grade”].max() # maior nota
mMin = mulher[“grade”].min() # menor nota
# Localizamos o nome das mulheres
mulherMax = mulher.loc[mulher[“grade”] == mMax]
mulherMin = mulher.loc[mulher[“grade”] == mMin]

# Impressão da maior e menor nota do gênero masculino


# Vamos imprimir o primeiro e segundo nome do primeiro aluno de cada
listagem, mas poderíamos imprimir toda a lista com os alunos da maior nota
e na menor nota
print(“Homem com a maior nota: “, homemMax[“fname”][homemMax[“fname”].
first_valid_index()], homemMax[“lname”][homemMax[“fname”].first_valid_
index()])
print(“Homem com a menor nota: “, homemMin[“fname”][homemMin[“fname”].
first_valid_index()], homemMin[“lname”][homemMin[“fname”].first_valid_
index()])

# Impressão da maior e menor nota do gênero feminino


# Vamos imprimir o primeiro e segundo nome do primeiro aluno de cada
listagem, mas poderíamos imprimir toda a lista com os alunos da maior nota
e na menor nota
print(“Mulher com a maior nota: “, mulherMax[“fname”][mulherMax[“fname”].
first_valid_index()], mulherMax[“lname”][mulherMax[“fname”].first_valid_
index()])
print(“Mulher com a menor nota: “, mulherMin[“fname”][mulherMin[“fname”].
first_valid_index()], mulherMin[“lname”][mulherMin[“fname”].first_valid_
index()])
# saída:
Homem com a maior nota: Ivor Arnold
Homem com a menor nota: Keegan Rasmussen
Mulher com a maior nota: Libby Guzman
Mulher com a menor nota: Alika Poole

18
Crie um gráfico de dispersão horas/nota.
Código:

import matplotlib.pyplot as plt


import pandas as pd
import numpy as np

df = pd.read_csv(“gradedata.csv”)
# Vamos extrair duas Series, uma de horas e outra de notas
xs = df[“hours”]
ys = df[“grade”]

# Insira as linhas abaixo em uma única célula


plt.scatter(xs,ys, color= “black”)
plt.title(“Dispersão de horas por nota”)
plt.show()
# saída

100
90

80
70

60

50

40

30
0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0
Figura 6 – Gráfico de dispersão horas/notas

Chegamos ao final desta Unidade, de modo que procure praticar tudo o que
estudou; treine com o site Kaggle, no qual encontrará diversos desafios, alguns
voltados à inteligência artificial e outros com o nosso foco em análise de dados e
visualização – você achará diversos datasets para treinar e fazer as suas análises.

19
19
UNIDADE Estudos de Caso em Python

Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:

  Sites
Kaggle
Datasets públicos, competições, códigos no Jupyter e discussões.
http://bit.ly/2RCVWZ7

 Leitura
Manipulando arquivos CSV com o Pandas
http://bit.ly/2t019zJ
Tutorial do Numpy
http://bit.ly/2RGlswz
Iniciando o uso do Pandas
http://bit.ly/2Pyfco0
Tutorial do Matplotlib
http://bit.ly/38wUhue
Documentação do Python 3.x
http://bit.ly/2LLLsTl

20
Referências
BECKER, J. L. Estatística básica: transformando dados em informação. Porto
Alegre, RS: Bookman, 2015.

CASTRO, L. N. de. Introdução à mineração de dados: conceitos básicos, algo-


ritmos e aplicações. São Paulo: Saraiva, 2016.

PERKOVIC, L.; VIEIRA, D. Introdução à computação usando Python: um foco


no desenvolvimento de aplicações. Rio de Janeiro: LTC, 2016.

21
21

Você também pode gostar