Data Science Academy - Python Fundamentos - Capítulo 8

Download: http://github.com/dsacademybr


In [1]:
# Versão da Linguagem Python
from platform import python_version
print('Versão da Linguagem Python Usada Neste Jupyter Notebook:', python_version())


Versão da Linguagem Python Usada Neste Jupyter Notebook: 3.7.6

Exercícios Sobre Módulos Python Para Análise de Dados

** ATENÇÃO **

Alguns dos exercícios podem requerer pesquisa adicional na documentação dos pacotes. Pesquise!

Exercício 1


In [2]:
# Crie um array NumPy com 1000000 e uma lista com 1000000.
# Multiplique cada elemento do array e da lista por 2 e calcule o tempo de execução com cada um dos objetos (use %time).
# Qual objeto oferece melhor performance, array NumPy ou lista?
import numpy as np
my_arr = np.arange(1000000)
my_list = list(range(1000000))

%time for _ in range(10): my_arr2 = my_arr * 2
%time for _ in range(10): my_list2 = [x * 2 for x in my_list]


CPU times: user 128 ms, sys: 23.9 ms, total: 152 ms
Wall time: 19.1 ms
CPU times: user 443 ms, sys: 93.7 ms, total: 536 ms
Wall time: 535 ms

Exercício 2


In [3]:
# Exercício 2
# Crie um array de 10 elementos
# Altere o valores de todos os elementos dos índices 5 a 8 para 0
import numpy as np
arr = np.arange(10)
arr


Out[3]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [4]:
arr[5:8] = 0
arr


Out[4]:
array([0, 1, 2, 3, 4, 0, 0, 0, 8, 9])

Exercício 3


In [5]:
# Crie um array de 3 dimensões e imprima a dimensão 1 
import numpy as np
arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
arr3d


Out[5]:
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

In [6]:
arr3d[0]


Out[6]:
array([[1, 2, 3],
       [4, 5, 6]])

Exercício 4


In [7]:
# Crie um array de duas dimensões (matriz).
# Imprima os elementos da terceira linha da matriz
# Imprima todos os elementos da primeira e segunda linhas e segunda e terceira colunas
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2d


Out[7]:
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

In [8]:
# Imprima os elementos da terceira linha da matriz
arr2d[2]


Out[8]:
array([7, 8, 9])

In [9]:
# Imprima todos os elementos da primeira e segunda linhas e segunda e terceira colunas
arr2d[:2, 1:]


Out[9]:
array([[2, 3],
       [5, 6]])

Exercício 5


In [10]:
# Calcule a transposta da matriz abaixo
arr = np.arange(15).reshape((3, 5))
arr


Out[10]:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

In [11]:
arr.T


Out[11]:
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])

Exercício 6


In [12]:
# Considere os 3 arrays abaixo
# Retorne o valor do array xarr se o valor for True no array cond. Caso contrário, retorne o valor do array yarr.
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])

In [13]:
for x, y, c in zip(xarr, yarr, cond):
    print(x, y, c)


1.1 2.1 True
1.2 2.2 False
1.3 2.3 True
1.4 2.4 True
1.5 2.5 False

In [14]:
resultado = [(x if c else y) for x, y, c in zip(xarr, yarr, cond)]
resultado


Out[14]:
[1.1, 2.2, 1.3, 1.4, 2.5]

Exercício 7


In [15]:
# Crie um array A com 10 elementos e salve o array em disco com a extensão npy
# Depois carregue o array do disco no array B
A = np.arange(10)
print(A)
np.save('array_a', A)


[0 1 2 3 4 5 6 7 8 9]

In [16]:
B = np.load('array_a.npy')
print(B)


[0 1 2 3 4 5 6 7 8 9]

Exercício 8


In [17]:
# Considerando a série abaixo, imprima os valores únicos na série
import pandas as pd
obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c', 'a', 'b'])

In [18]:
uniques = obj.unique()
uniques


Out[18]:
array(['c', 'a', 'd', 'b'], dtype=object)

Exercício 9


In [19]:
# Considerando o trecho de código que conecta em uma url na internet, imprima o dataframe conforme abaixo.
import requests
url = 'https://api.github.com/repos/pandas-dev/pandas/issues'
resp = requests.get(url)
resp


Out[19]:
<Response [200]>

In [20]:
data = resp.json()
data[0]['title']


Out[20]:
'CLN: Assorted core/generic.py cleanup'

In [21]:
issues = pd.DataFrame(data, columns=['number', 'title', 'labels', 'state'])
issues


Out[21]:
number title labels state
0 32966 CLN: Assorted core/generic.py cleanup [] open
1 32965 CLN: Clean NDFrame.__finalize__ signature [] open
2 32964 TST: Use indices fixture in tests/indexes/test... [{'id': 127685, 'node_id': 'MDU6TGFiZWwxMjc2OD... open
3 32963 TST: Use indices fixture in tests/indexes/test... [{'id': 127685, 'node_id': 'MDU6TGFiZWwxMjc2OD... open
4 32962 TYP: ensure Block.putmask, Block.where get arr... [] open
5 32961 CLN/STY: Nitpicks [{'id': 106935113, 'node_id': 'MDU6TGFiZWwxMDY... open
6 32960 Dataframe change alters original array used in... [] open
7 32959 BUG: df.iloc[:, :1] with EA column [{'id': 76811, 'node_id': 'MDU6TGFiZWw3NjgxMQ=... open
8 32958 Subsequent calls to read_csv for S3 files in t... [] open
9 32957 BUG: iloc on DataFrame[ea] [] open
10 32956 CLN: update Appender to doc with case __doc__ [] open
11 32955 CLN: Remove encoding specifier [] open
12 32954 Fixture `non_mapping_dict_subclass` is wrongly... [] open
13 32953 Rename non mapping dict fixture [] open
14 32952 CLN: Remove GroupByError exception [{'id': 211029535, 'node_id': 'MDU6TGFiZWwyMTE... open
15 32951 CI: Exception ignored in: 'pandas._libs.tslibs... [] open
16 32950 REF: move mixed-dtype frame_apply check outsid... [] open
17 32949 CLN: remove unnecessary Series._convert calls [] open
18 32948 REF: misplaced DataFrame.where tests [{'id': 127685, 'node_id': 'MDU6TGFiZWwxMjc2OD... open
19 32947 REF: .values -> ._values [] open
20 32944 DOC: Fix capitalization among headings in docu... [] open
21 32943 CLN: xarray tests [] open
22 32942 (WIP) CI: Check that private functions are not... [] open
23 32940 REF: collect casting portion of Block.setitem [] open
24 32939 pandas/core/ops/: replace .format() with f-str... [] open
25 32938 REF: misplaced DTI.shift tests [{'id': 127685, 'node_id': 'MDU6TGFiZWwxMjc2OD... open
26 32937 Fixing scatter plot size (#32904) [{'id': 2413328, 'node_id': 'MDU6TGFiZWwyNDEzM... open
27 32935 DOC: Fixed examples in pandas/tseries [] open
28 32934 Incorrect dtype for concat with empty float an... [{'id': 31404521, 'node_id': 'MDU6TGFiZWwzMTQw... open
29 32933 pandas to_sql(if_exists='replace') should not ... [] open

Exercício 10


In [22]:
# Crie um banco de dados no SQLite, crie uma tabela, insira registros, 
# consulte a tabela e retorne os dados em dataframe do Pandas
import sqlite3
import pandas as pd
query = """
CREATE TABLE TESTE
(Cidade VARCHAR(20), 
 Estado VARCHAR(20),
 taxa REAL,        
 Impostos INTEGER
);"""
con = sqlite3.connect('dsa.db')
con.execute(query)
con.commit()

In [23]:
data = [('Natal', 'Rio Grande do Norte', 1.25, 6),
        ('Recife', 'Pernambuco', 2.6, 3),
        ('Londrina', 'Paraná', 1.7, 5)]
stmt = "INSERT INTO TESTE VALUES(?, ?, ?, ?)"
con.executemany(stmt, data)
con.commit()

In [24]:
cursor = con.execute('select * from teste')
rows = cursor.fetchall()
rows


Out[24]:
[('Natal', 'Rio Grande do Norte', 1.25, 6),
 ('Recife', 'Pernambuco', 2.6, 3),
 ('Londrina', 'Paraná', 1.7, 5)]

In [25]:
cursor.description
pd.DataFrame(rows, columns=[x[0] for x in cursor.description])


Out[25]:
Cidade Estado taxa Impostos
0 Natal Rio Grande do Norte 1.25 6
1 Recife Pernambuco 2.60 3
2 Londrina Paraná 1.70 5

Fim

Obrigado - Data Science Academy - facebook.com/dsacademybr