Dados

A livraria para manipular e descrever os dados em python é pandas.
Os dados estão armazenados num DataFrame.

Criar dados

A forma mais ingénua de criar um DataFrame é à mão, por exemplo a partir de um dicionário

In [1]:
import pandas as pd
d = {'colors':['Blue','Orange','Green','Red'], 'ballots':[78455, 192494, 506892, 287591]}
df = pd.DataFrame(data=d)
df.to_csv(r'/Users/sal/Lectures/mqq/Data/Colors.csv', index=False) # save as .csv file
df
Out[1]:
colors ballots
0 Blue 78455
1 Orange 192494
2 Green 506892
3 Red 287591

Ler dados

Melhor é ler os dados de um ficheiro. Por exemplo, um ficheiro .csv é carregado num DataFrame usando o construtor read_csv

In [2]:
import pandas as pd
df2 = pd.read_csv('/Users/sal/Lectures/mqq/Data/USArrests.csv')
df2
Out[2]:
Murder Assault UrbanPop Rape
0 13.2 236 58 21.2
1 10.0 263 48 44.5
2 8.1 294 80 31.0
3 8.8 190 50 19.5
4 9.0 276 91 40.6
5 7.9 204 78 38.7
6 3.3 110 77 11.1
7 5.9 238 72 15.8
8 15.4 335 80 31.9
9 17.4 211 60 25.8
10 5.3 46 83 20.2
11 2.6 120 54 14.2
12 10.4 249 83 24.0
13 7.2 113 65 21.0
14 2.2 56 57 11.3
15 6.0 115 66 18.0
16 9.7 109 52 16.3
17 15.4 249 66 22.2
18 2.1 83 51 7.8
19 11.3 300 67 27.8
20 4.4 149 85 16.3
21 12.1 255 74 35.1
22 2.7 72 66 14.9
23 16.1 259 44 17.1
24 9.0 178 70 28.2
25 6.0 109 53 16.4
26 4.3 102 62 16.5
27 12.2 252 81 46.0
28 2.1 57 56 9.5
29 7.4 159 89 18.8
30 11.4 285 70 32.1
31 11.1 254 86 26.1
32 13.0 337 45 16.1
33 0.8 45 44 7.3
34 7.3 120 75 21.4
35 6.6 151 68 20.0
36 4.9 159 67 29.3
37 6.3 106 72 14.9
38 3.4 174 87 8.3
39 14.4 279 48 22.5
40 3.8 86 45 12.8
41 13.2 188 59 26.9
42 12.7 201 80 25.5
43 3.2 120 80 22.9
44 2.2 48 32 11.2
45 8.5 156 63 20.7
46 4.0 145 73 26.2
47 5.7 81 39 9.3
48 2.6 53 66 10.8
49 6.8 161 60 15.6

Naturalmente, é possível ler ficheiros diferentes, e voltar a escrever ficheiros .csv a partir de um dataframe ...

Visualizar dados

É possível visualizar os dados usando gráficos de barras

In [4]:
barras = df.plot(x = 'colors', y ='ballots', kind = 'bar')

... gráficos circulares

In [5]:
df_circ = df.set_index('colors') # definimos que o index é a coluna cidades
circular = df_circ.plot.pie(y='ballots', figsize=(7,7))

... istogramas,

In [6]:
df2_MAR = df2.drop(columns='UrbanPop') # tiramos a coluna UrbanPop dos dados, e ficamos com 'Murder', 'Assault' e 'Rape'
histogama = df2_MAR.plot.hist(bins=120, alpha=0.5, density=1)

diagramas de caixa e bigodes, que mostram máximo e mínimo, mediana, 1º e 3º quartils (ou seja, 25% e 75%), e outliers

In [7]:
caixa_bigodes = df2.plot.box()

ou gráficos de dispersão, úteis para ver correlações entre colunas

In [8]:
dispersão = df2.plot.scatter(x = 'Assault', y = 'Murder', s = 30)

Manipular dados

Entradas, linhas ou colunas podem ser retiradas usando os atributos iat ou iloc (a numeração de linas e colunas começa por 0)

In [9]:
A = df2.iat[1,0] # linha 1 coluna 0 
A
Out[9]:
10.0
In [10]:
H = df2.iloc[:,2] # todas as linhas da coluna 2 
H
Out[10]:
0     58
1     48
2     80
3     50
4     91
5     78
6     77
7     72
8     80
9     60
10    83
11    54
12    83
13    65
14    57
15    66
16    52
17    66
18    51
19    67
20    85
21    74
22    66
23    44
24    70
25    53
26    62
27    81
28    56
29    89
30    70
31    86
32    45
33    44
34    75
35    68
36    67
37    72
38    87
39    48
40    45
41    59
42    80
43    80
44    32
45    63
46    73
47    39
48    66
49    60
Name: UrbanPop, dtype: int64

Ou, se queremos apenas os valores e não outro dataframe, usando o atributo values ou, melhor, o método to_numpy

In [11]:
import matplotlib.pyplot as plt
X = df2.iloc[:,1].values # o array formado pela 2ª coluna de df2
Y = df2.iloc[:,2].to_numpy() # o array formado pela 3ª coluna de df2 
ax3 = plt.scatter(X,Y)

Calcular parâmetros

Alguns parâmetros dos dados, como média, qualtis, desvio padrão, vari^ncia, ..., podem ser calculaos usando diferentes "métodos"

In [14]:
media = df2.mean()
media
Out[14]:
Murder        7.788
Assault     170.760
UrbanPop     65.540
Rape         21.232
dtype: float64
In [15]:
mediana = df2.median()
mediana
Out[15]:
Murder        7.25
Assault     159.00
UrbanPop     66.00
Rape         20.10
dtype: float64
In [16]:
df2.quantile(0.5)
Out[16]:
Murder        7.25
Assault     159.00
UrbanPop     66.00
Rape         20.10
Name: 0.5, dtype: float64
In [17]:
variança = df2.var()
variança
Out[17]:
Murder        18.970465
Assault     6945.165714
UrbanPop     209.518776
Rape          87.729159
dtype: float64
In [18]:
desvio = df2.std()
desvio
Out[18]:
Murder       4.355510
Assault     83.337661
UrbanPop    14.474763
Rape         9.366385
dtype: float64
In [ ]: