Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação Aplicada Material Teórico 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. • Compreender o uso de datasets de domínio público; • Aprender a manipular os dados de datasets; • Aprender a criar gráfi cos para análise de dados em datasets. OBJETIVOS DE APRENDIZADO Estudos de Caso em Python 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: Assim: Organize seus estudos de maneira que passem a fazer parte 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. Organize seus estudos de maneira que passem a fazer parte Mantenha o foco! Evite se distrair com as redes sociais. Mantenha o foco! Evite se distrair com as redes sociais. Determine um horário fixo para estudar. Aproveite as indicações de Material Complementar. Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma Não se esqueça de se alimentar e de se manter hidratado. Aproveite as Conserve seu material e local de estudos sempre organizados. Procure manter contato com seus colegas e tutores para trocar ideias! Isso amplia a aprendizagem. Seja original! Nunca plagie trabalhos. 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 9 i nd = np.a range(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 p lt.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() M ed al ha s EUA 120 100 80 60 40 20 0 China Brasil Países Argentina Alemanha Medalhas – Olimpíadas 2018 Bronze Prata Ouro Figura 1 – Gráfi co de barras segmentadas (medalhas) 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() Sudeste 80 60 40 20 0 Nordeste Sul Regiões Norte Centro-oeste Distribuição de presidenciáveis nas regiões brasileiras Ciro Haddad Bolsonaro Figura 2 – Gráfico de barras segmentadas (presidenciáveis 2018) 10 11 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 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 13 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 M 51.05% 48.95% M F Figura 3 – Gráfi co 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 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 15 dadosEXP5 = df.loc[df[“Years Experience”] == 5] # Calculamos a média das horas trabalhadas com base na coluna Hours Worked mediaEXP5 = dado sEXP5[“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 1 Ano 35 20 15 10 0 2 Anos 3 Anos 4 Anos 5 Anos Média de horas trabalhadas por experiência 30 25 5 Figura 4 – Gráfi co 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 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 17 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: > 60 e < = 70 > 70 e < = 80 > 80 < 60 60.6% 29.0% 9.6% 0.7% < 60 > 60 e < = 70 > 70 e < = 80 Figura 5 – Gráfi co 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 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 19 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 = d f[“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 0.0 100 70 60 50 30 90 80 40 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 Figura 6 – Gráfi co 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 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 21 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
Compartilhar