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 Leitura de Arquivos de Dados • Introdução; • Lendo e Gravando Arquivo de Texto; • Lendo Arquivos CSV com o Pandas; • Lendo Arquivos Json. • Ler arquivos de texto, Arquivos Comma-Separated Values (CSV) com o Pandas e arquivos JavaScript Object Notation (Json); • Criar gráfi cos a partir de arquivos de dados manipulando os mesmos com os pacotes Numpy, Pandas e Matplotlib. OBJETIVOS DE APRENDIZADO Leitura de Arquivos de Dados 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 Leitura de Arquivos de Dados Introdução A análise de dados necessita de grande quantidade de dados para serem prepa- rados para, então, permitir um exame mais aprofundado. Esses dados, como você deve imaginar, necessitam estar armazenados em arquivos ou bancos de dados. Já tínhamos visto os três principais pacotes para a análise de dados, sendo que o Pandas permite manipular dados em formato semelhante a planilhas, enquanto o Matplotlib possibilita gerar gráficos com base nesses dados. Todos os exemplos foram criados a partir de um conjunto de dados fictícios, criados com alguns recur- sos do Numpy, por exemplo. Em um trabalho de análise real, geralmente esses dados são fornecidos por meio de arquivos que podem ser desde um simples formato TXT, até um banco de dados – relacional ou não relacional. Assim, nesta Unidade veremos como manipular arquivos TXT, JavaScript Object Notation (Json) e Comma-Separated Values (CSV ) com o Pandas. Lendo e Gravando Arquivo de Texto Um arquivo de texto é simples e gravado com a extensão .txt. Python fornece por padrão alguns métodos para manipular arquivos TXT, vejamos: • open(): abrir o arquivo; • read(): ler os dados do arquivo; • write(): gravar dados no arquivo; • seek(): mover o ponteiro do mouse ao início do arquivo; • readlines(): retornar à lista de linhas do arquivo; • close(): fazer o arquivo. Podemos ter os nossos arquivos de texto gravados em pastas ou no mesmo local em que gravamos o arquivo .py – ou arquivo do Jupyter Notebook –; fique atento(a), pois no momento de informar o caminho terá que decidir se caberá colo- car os nomes das pastas, ou somente o nome do arquivo. Para começar o nosso exemplo, crie um arquivo denominado exemplo1.txt na mesma pasta em que estiver trabalhando com o Jupyter. Você poderá utilizar o Bloco de Notas ou Notepad++ para criar esse arquivo; digite algum texto e o salve em seguida. É importante salvar o seu arquivo com o formato UTF-8. Vejamos como ler os dados do arquivo em Python. 8 9 Exemplo de leitura: # Abrindo o arquivo para leitura “r” e com a codificação UTF-8 arquivo1 = open(“exemplo1.txt”, “r”,encoding=’utf8’) # Para ler os dados do arquivo usamos read print(arquivo1.read()) #saída: Python é uma linguagem boa para análise de dados. # Podemos, por exemplo, verificar a quantidade de caracteres do arquivo print(arquivo1.tell()) 57 # A partir do momento em que lemos o arquivo, se quisermos ler novamente precisamos mover o ponteiro para o início do arquivo, fazemos isso com o comando seek() arquivo1.seek(0,0) # Para ler parte do arquivo, você pode especificar uma quantidade de carac- teres, no exemplo a seguir, lemos somente a palavra Python e ainda deixamos a mesma em letras maiúsculas. print(arquivo1.read(6).upper()) # saída: PYTHON Exemplo de gravação: # Para gravar em um arquivo txt, devemos abrir o mesmo para gravação “w” # Cuidado, a opção “w” apaga os dados do arquivo se ele existir # Se precisar gravar em um arquivo que já possua dados, e queira fazer tanto leitura quanto gravação, você poderá abri-lo como “r+” arquivo2 = open(“exemplo2.txt”, “w”) arquivo2.write(“Gravando algo a partir do Python.”) # saída: 33 arquivo2.close() # Necessário para fechar e efetivar a gravação # Lendo o arquivo gravado arquivo2 = open(“exemplo2.txt”, “r+”) print(arquivo2.read()) # Saída: Gravando algo a partir do Python. # Acrescentando conteúdo, como o arquivo foi aberto com r+ podemos gravar também arquivo2.write(“ Adicionando mais linhas.”) 9 UNIDADE Leitura de Arquivos de Dados #saída: 23 arquivo2.close() arquivo2 = open(“exemplo2.txt”, “r”) print(arquivo2.read()) # Saída: Gravando algo a partir do Python. Adicionando mais linhas. Agora leremos um dataset – conjunto de dados tabulados –; como existem diversas fontes de datasets pela web, vejamos alguns exemplos: • Dataset de Chicago: http://bit.ly/38QOuzz; • Portal Brasileiro de Dados Abertos: http://bit.ly/2tBlonX; • Kaggle – comunidade de cientistas de dados com vários desafios: http://bit.ly/2S6jbuD Utilizaremos um dataset referente à venda de videogames com quantidade acima de 100.000 cópias, estando o dataset. Disponível em: http://bit.ly/2ManlOs. É necessário criar uma conta gratuita para obter essas bases. Ex pl or Neste exemplo, utilizaremos o arquivo vgsales.csv, pois um arquivo CSV é basi- camente um texto. Lembre-se de gravar o arquivo na pasta de seu projeto Python. Exemplo: dataset = open(“vgsales.csv”) dados = dataset.read() print(dados) # saída: Rank,Name,Platform,Year,Genre,Publisher,NA_Sales,EU_Sales,JP_Sales,Other_ Sales,Global_Sales 1,Wii Sports,Wii,2006,Sports,Nintendo,41.49,29.02,3.77,8.46,82.74 2,Super Mario Bros.,NES,1985,Platform,Nintendo,29.08,3.58,6.81,0.77,40.24 3,Mario Kart Wii,Wii,2008,Racing,Nintendo,15.85,12.88,3.79,3.31,35.82 4,Wii Sports Resort,Wii,2009,Sports,Nintendo,15.75,11.01,3.28,2.96,33 5,Pokemon Red/Pokemon Blue,GB,1996,Role-Playing,Nintendo,11.27,8.89,10.22,1,31.37 6,Tetris,GB,1989,Puzzle,Nintendo,23.2,2.26,4.22,0.58,30.26 7,New Super Mario Bros.,DS,2006,Platform,Nintendo,11.38,9.23,6.5,2.9,30.01 8,Wii Play,Wii,2006,Misc,Nintendo,14.03,9.2,2.93,2.85,29.02 9,New Super Mario Bros. Wii,Wii,2009,Platform,Nintendo,14.59,7.06,4.7,2.26,28.62 10, Duck Hunt,NES,1984,Shooter,Nintendo,26.93,0.63,0.28,0.47,28.31 11, Nintendogs,DS,2005,Simulation,Nintendo,9.07,11,1.93,2.75,24.76 10 11 12, Mario Kart DS,DS,2005,Racing,Nintendo,9.81,7.57,4.13,1.92,23.42 13, Pokemon Gold/Pokemon Silver,GB,1999,Role-Playing,Nintendo,9,6.18,7.2,0.71,23.114, Wii Fit,Wii,2007,Sports,Nintendo,8.94,8.03,3.6,2.15,22.72 15, Wii Fit Plus,Wii,2009,Sports,Nintendo,9.09,8.59,2.53,1.79,22 16,Kinect Adventures!,X360,2010,Misc,Microsoft Game Stu- dios,14.97,4.94,0.24,1.67,21.82 17,Grand Theft Auto V,PS3,2013,Action,Take-Two Interactive,7.01,9.27,0.97,4.14,21.4 18,Grand Theft Auto: San Andreas,PS2,2004,Action,Take-Two Interacti- ve,9.43,0.4,0.41,10.57,20.81 … # Podemos transformar as linhas do arquivo em posições em uma lista com o comando split(“\n”) l inhas = dados.split(‘\n’) linhas[0] #retorna o cabeçalho # Saída: ‘Rank,Name,Platform,Year,Genre,Publisher,NA_Sales,EU_Sales,JP_Sales,Other_ Sales,Global_Sales’ # Para ver o primeiro registro l inhas[1] # saída: ‘1,Wii Sports,Wii,2006,Sports,Nintendo,41.49,29.02,3.77,8.46,82.74’ # É possível ainda separar as informações de cada linha em colunas # Assim você terá acesso a cada dado do registro campos = linhas[1].split(“,”) campos[1] # Saída: ‘Wii Sports’ campos[5] # Saída: Nintendo # Se quiser, tente fazer um laço FOR para percorrer cada linha, transfor- mando os seus valores em campos e imprimindo algo na tela. Você deve ter notado que para manipular um arquivo CSV diretamente no Python, embora seja possível, demanda trabalho para preparar os dados e organizá-los; en- tão, deve imaginar: “será que não existe nada mais fácil”? A resposta você já sabe e até já estudou – é o Pandas. Na próxima seção veremos como ler um arquivo CSV com o Pandas. 11 UNIDADE Leitura de Arquivos de Dados Lendo Arquivos CSV com o Pandas CSV – Comma-Separated Values – são arquivos textos separados por vírgulas, podendo ser facilmente abertos no Office Excel e – como você percebeu – pode- mos mexer com os quais no Python. Embora seja simples, manipular um arquivo CSV diretamente com Python para preparar os dados para análise torna-se uma tarefa trabalhosa, de modo que para minimizar esse trabalho podemos usar o pacote Pandas. Assim, veremos alguns casos de manipulação de arquivos CSV com o Pandas. Exemplo: import pandas as pd nome_arq = “vgsales.csv” df = pd.read_csv(nome_arq) df.head() # Saída na Tabela 1: Tabela 1 – Início do dataset de games vendidos Rank Name Platform Year Genre Publisher NA_ Sales EU_ Sales JP_ Sales Other_ Sales Global_ Sales 0 1 Wii Sports Wii 2006.0 Sports Nintendo 41.49 29.02 3.77 8.46 82.74 1 2 Super Mario Bros. NES 1985.0 Platform Nintendo 29.08 3.58 6.81 0.77 40.24 2 3 Mario Kart Wii Wii 2008.0 Racing Nintendo 15.85 12.88 3.79 3.31 35.82 3 4 Wii Sports Resort Wii 2009.0 Sports Nintendo 15.75 11.01 3.28 2.96 33.00 4 5 Pokemon Red/Pokemon Blue GB 1996.0 Role- Playing Nintendo 11.27 8.89 10.22 1.00 31.37 # Podemos trabalhar com cada coluna do DataFrame gerado pelo Pandas df[“Global_Sales”] # saída: 0 82.74 1 40.24 2 35.82 3 33.00 4 31.37 5 30.26 6 30.01 7 29.02 8 28.62 9 28.31 12 13 10 24.76 ... 16595 0.01 16596 0.01 16597 0.01 Name: Global_Sales, Length: 16598 # Criaremos um novo dataframe com os dados de Publisher e Global_Sales df2 = pd.DataFrame({ ‘Publisher’: df[“Publisher”], ‘Sales’: df[“Global_Sa- les”]} ) # Você pode utilizar as funções estatísticas, os gráficos e todo o conteúdo que estudamos até aqui # Verificando o valor máximo de vendas globais df2.max() # saída: 82.74 # Podemos verificar o valor médio vendido media = df[“Global_Sales”].mean() print(“A média é: “, media) Geraremos um gráfico com a taxa de vendas para as empresas Nintendo, Activision, Capcom, Ubisoft e Microsoft Game Studios. Exemplo: import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv(“vgsales.csv”) obj = (‘Nintendo’, ‘Activision’, ‘Capcom’, ‘Ubisoft’, ‘Microsoft Game Studios’) valores = [len(df.loc[df[“Publisher”] == obj[0]]), len(df.loc[df[“Publisher”] == obj[1]]), len(df.loc[df[“Publisher”] == obj[2]]), len(df.loc[df[“Publisher”] == obj[3]]), len(df.loc[df[“Publisher”] == obj[4]]) ] colors=[“blue”, “red”, “yellow”, ‘green’, “pink”] plt.pie(valores, labels=obj, colors=colors, autopct=”%1.f%%”, shadow=True, startangle=0) plt.show() # saída: 13 UNIDADE Leitura de Arquivos de Dados Activision Capcom Nintendo Microsoft Game Studios Ubisoft 31% 12% 29% 6% 22% Figura 1 – Gráfico com as vendas globais Procure trabalhar com os dados deste dataset e gerar diferentes visualizações para análise. Lendo Arquivos Json Um arquivo Json é similar a um dicionário em Python. São tipos de arquivos padrões para diversas aplicações web e podem ser interessantes fontes de dados para análise. Podemos fazer diversas operações com Json, por exemplo: • Transformar um dicionário em Python para Json; • Ler e gravar um arquivo .json; • Ler dados no formato Json da web. Estas são somente algumas possibilidades – veremos cada uma no código. Exemplos: # Vamos criar um dicionário dict = {‘curso’: ‘Ciência da Computação’, ‘campus’: [‘Anália Franco’,’São Miguel Paulista’], ‘disciplinas’: [‘Programação Web’,’Algoritmos’,’Prog. Orientada a Ob- jetos’, ‘Engenharia de software’], ‘semestres’: 8} # Podemos imprimir a chave e o valor por meio do for 14 15 for k,v in dict.items(): print (k, “:”,v) # Saída: curso : Ciência da Computação campus : [‘Anália Franco’, ‘São Miguel Paulista’] disciplinas : [‘Programação Web’, ‘Algoritmos’, ‘Prog. Orientada a Objetos’, ‘Engenharia de software’] semestres : 8 # Para trabalhar com o Json, devemos importar o pacote: import json # Para converter um dicionário em Json, usamos a função dumps() json.dumps(dict) # Saída: ‘{“curso”: “Ci\\u00eancia da Computa\\u00e7\\u00e3o”, “campus”: [“An\\u00e- 1lia Franco”, “S\\u00e3o Miguel Paulista”], “disciplinas”: [“Programa\\u00e7\\ u00e3o Web”, “Algoritmos”, “Prog. Orientada a Objetos”, “Engenharia de sof- tware”], “semestres”: 8}’ # Criando um arquivo Json arquivo = open(‘dados.json’,’w’) arquivo.write(json.dumps(dict)) # Saída: 242 # Leitura de arquivos Json arquivo = open(‘dados.json’,’r’) texto = arquivo.read() dados_json = json.loads(texto) # Podemos trabalhar com o Json como um dicionário # Para imprimir algo, basta informar a chave dados_json[‘curso’] # saída: ‘Ciência da Computação’ dados_json[‘disciplinas’] # Saída: [‘Programação Web’, ‘Algoritmos’, ‘Prog. Orientada a Objetos’, ‘Engenharia de software’] 15 UNIDADE Leitura de Arquivos de Dados O arquivo para o exemplo foi retirado de: https://on.doi.gov/2S7IAEr Ex pl or Consultaremos um arquivo Json por meio de um Uniform Resource Locator (URL); neste exemplo, veremos os dados de terremotos que ocorreram pelo mun- do com magnitude de 4.5. Para isto, utilizaremos o serviço web da United States Geological Survey (USGS), que fornece diferentes arquivos para consulta sobre terremotos – uma fonte de dados bem interessante. USGS: https://on.doi.gov/38UJlG Ex pl or O arquivo oferecido traz várias informações, tais como: features: [ { type: “Feature”, properties: { mag: Decimal, place: String, time: Long Integer, … }, coordinates: [ longitude, latitude, depth ] O arquivo para o exemplo foi retirado de: https://on.doi.gov/2S7IAEr Ex pl or 16 17 Veja uma parte do código Json na seguinte Figura: Figura 2 – Dados de terremotos de magnitude 4.5 Fonte: Adaptada de earthquake.usgs.gov Ela boraremos um breve modelo, extraindo do arquivo informações sobre o local e a magnitude do terremoto. 17 UNIDADE Leitura de Arquivos de Dados Exemplo: # Acessando um Json por meio do URL # Primeiro devemos importar o pacote urllib from urllib.request import urlopen # Usamos o método urlopen resp = urlopen(“https://earthquake.usgs.gov/earthquakes/feed/v1.0/summa- ry/4.5_day.geojson”).read().decode(‘utf8’) # Com base no retorno, transformamosa TXT em Json dados = json.loads(resp) # Extrairemos somente as informações de features do primeiro elemento, po- sição 0 features = dados[“features”][0] features # Saída {‘type’: ‘Feature’, ‘properties’: {‘mag’: 4.5, ‘place’: “51km N of Bandar ‘Abbas, Iran”, ‘time’: 1568652942482, ‘updated’: 1568657441040, ‘tz’: 210, ‘url’: ‘https://earthquake.usgs.gov/earthquakes/eventpage/us70005h57’, ‘detail’: ‘https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ us70005h57.geojson’, ‘felt’: None, ‘cdi’: None, ‘mmi’: None, ‘alert’: None, ‘status’: ‘reviewed’, ‘tsunami’: 0, ‘sig’: 312, ‘net’: ‘us’, ‘code’: ‘70005h57’, ‘ids’: ‘,us70005h57,’, ‘sources’: ‘,us,’, ‘types’: ‘,geoserve,origin,phase-data,’, ‘nst’: None, ‘dmin’: 2.695, ‘rms’: 1.01, ‘gap’: 132, 18 19 ‘magType’: ‘mb’, ‘type’: ‘earthquake’, ‘title’: “M 4.5 - 51km N of Bandar ‘Abbas, Iran”}, ‘geometry’: {‘type’: ‘Point’, ‘coordinates’: [56.267, 27.6516, 10]}, ‘id’: ‘us70005h57’} # Das informações retornadas podemos extrair o local do terremoto, identi- ficado pela chave “place” dentro da chave “properties” features[“properties”][“place”] # Saída “51km N of Bandar ‘Abbas, Iran” Podemos ainda criar uma lista de lugares nos quais ocorreram terremotos, con- forme registrado na base Json. Exemplo: # Selecionaremos todos os “features” features = dados[“features”] # Se pesquisarmos o tamanho da lista features teremos a quantidade de po- sições da lista len(features) # saída 12 # Rodaremos um for para extrair somente os locais dos terremotos e criaremos uma lista somente com essas informações lugares=[] for item in features: lugares.append(item[“properties”][“place”]) lugares # Saída: [“51km N of Bandar ‘Abbas, Iran”, “16km S of Se’ergu, China”, ‘65km NNE of Calama, Chile’, ‘23km SE of Darchula, Nepal’, ‘45km SSW of Zhangye, China’, ‘60km E of Yamada, Japan’, ‘104km ENE of Laiwui, Indonesia’, ‘247km SE of Lambasa, Fiji’, ‘126km NNE of Barranca, Peru’, ‘151km SSE of Chichi-shima, Japan’, “17km ESE of Ust’-Kamchatsk Staryy, Russia”, ‘62km E of Arzak, China’] 19 UNIDADE Leitura de Arquivos de Dados Agora que você já conhece outras formas de obter datasets, já pode começar a fazer as suas próprias análises. Procure refazer os exemplos em sua máquina; desafie- -se a obter outros dados e gerar os seus próprios datasets com base no que aqui es- tudamos. É interessante que você pratique o uso desses arquivos de dados para gerar gráficos diferentes, assim, treinará tudo o que foi visto até o momento. O assunto referente à leitura de arquivos pode se estender a fim de obter os dados para análises provenientes de bancos de dados. Um banco de dados bem simples para integrar com o Python é o SQLite, sendo um interessante modelo relacional para obter ou gravar os seus dados – posteriormente trabalhados. Outra dica é o banco de dados não relacionais – NoSQL – denominado MongoDB – pense neste como um repositório em formato Json; é igualmente interessante pes- quisar sobre esse banco e a sua manipulação em Python. Para aprender como integrar o SQLite no Python, acesse o SQLite tutorial: SQLite Python – creating a new database: http://bit.ly/2Z9p6R9 Ademais, trabalhando com o Python e MongoDB juntos você conseguirá manipular um banco não relacional e, com isso, obter ou gravar os seus dados em formato Json ou dicionários do Python. Para conhecer mais, acesse Introduction to working with MongoDB and PyMongo: http://bit.ly/34zW7as Ex pl or 20 21 Material Complementar Indicações para saber mais sobre os assuntos abordados nesta Unidade: Sites Manipulando Arquivos Texto em Python – Input and Output http://bit.ly/34yI0ly Manipulando arquivo CSV em Python http://bit.ly/2Ewz3ik Manipulando arquivo CSV com o Pandas http://bit.ly/2Z0yO8s Json encoder and decoder http://bit.ly/2Ewz3ik 21 UNIDADE Leitura de Arquivos de Dados 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. 22
Compartilhar