/
aula_py.py
360 lines (147 loc) · 6.41 KB
/
aula_py.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
#!/usr/bin/env python
# coding: utf-8
# # Análise de dados com Python
# ## Esse treinamento apresenta algumas das principais ferramentas disponíveis na linguagem python para análise de dados. A busca dos entendimentos se passa a partir dos eixos:
# ### 1 - Compreensão dos dados
# ### 2 - Análise estatística dos dados
# ### 3 - Operações em DataFrames
# ### 4 - Análises de negócio
# ### 5 - SVM como classificador para o problema da predição
#
# ##### Fonte: IBGE / DETRAN
# ## 1 - Compreensão dos dados
# In[1]:
import pandas as pd
df_frota = pd.read_csv('frotarj.csv',sep=';')
# In[2]:
df_frota
# In[3]:
df_frota.describe() # Análise descritiva da amostra
# In[4]:
df_frota.loc[df_frota.MUNICIPIO == "RIO DE JANEIRO"]
# In[5]:
df_frota.loc[:,"MUNICIPIO"]
# In[6]:
df_frota.loc[df_frota.AUTOMOVEL > 100000]
# In[7]:
df_frota_auto_bus = df_frota.loc[:,["MUNICIPIO","AUTOMOVEL","ONIBUS"]]
# In[8]:
df_frota_auto_bus["RELATION"] = df_frota_auto_bus["AUTOMOVEL"] / df_frota_auto_bus["ONIBUS"]
# In[10]:
df_frota_auto_bus
# ## 2 - Análises estatísticas dos dados
# In[57]:
df_frota_auto_bus["RELATION"].describe() # Análise descritiva da variavel RELATION na amostra composta
# In[58]:
import matplotlib # Biblioteca para plot dos dados, facilitadores para análise estatística
# In[16]:
df_frota_auto_bus.plot.scatter('AUTOMOVEL','RELATION',s=10);
# In[20]:
df_frota_auto_bus.plot.scatter('RELATION','AUTOMOVEL',s=10);
# In[26]:
df_frota_auto_bus.AUTOMOVEL.plot.hist();
# In[27]:
df_frota_auto_bus.ONIBUS.plot.hist();
# ### O histograma abaixo apresenta a distribuição nos valores da relação entre total de automóveis pelo total de ônibus nas cidades do estado do Rio de Janeiro
# In[29]:
df_frota_auto_bus.RELATION.plot.hist();
# In[30]:
df_frota_auto_bus.RELATION.plot.kde();
# In[31]:
df_frota_auto_bus.RELATION.var()
# O calculo abaixo representa a medida do desvio padrão dos dados em relação à média amostral
# In[36]:
df_frota_auto_bus.RELATION.std()
# In[37]:
df_frota_auto_bus.RELATION.mean()
# Calculo da correlacao entre automovel e onibus
# In[61]:
df_frota_auto_bus.AUTOMOVEL.corr(df_frota_auto_bus.ONIBUS) # correlacao linear positiva
# In[62]:
df_frota_auto_bus.corr() # correlacao entre os atributos do dataset
# In[63]:
df_frota.corr() # correlacao entre todas as variaveis do problema
# ## 3 - Operações em DataFrames
# In[70]:
df_cidades = pd.read_csv('cidaderj.csv',sep=';')
# In[74]:
df_cidades
# In[77]:
df_cidades.HABITANTES.corr(df_cidades.PIB_CAPITA_1) # Baixa correlação entre HABITANTES / PIB
# In[81]:
df_cidades.loc[df_cidades.MUNICIPIO == 'RIO DE JANEIRO']
# In[82]:
df_cidades.loc[df_cidades.MUNICIPIO == 'NITEROI']
# In[86]:
df_cidades.loc[df_cidades.PIB_CAPITA_1 == df_cidades.PIB_CAPITA_1.max()] # Filter higher PIB
# In[87]:
df_cidades.loc[df_cidades.PIB_CAPITA_1 == df_cidades.PIB_CAPITA_1.min()] # Filter lower PIB
# In[89]:
df_cidades.sort_values(by=['PIB_CAPITA_1'], ascending=True)[0:5] # Ordem decrescente por PIB
# In[90]:
df_cidades.sort_values(by=['PIB_CAPITA_1'], ascending=False)[0:5] # Ordem decrescente por PIB
# In[92]:
df_cidades.PIB_CAPITA_1.plot.hist(); # So por curiosidade - agrupamento do PIB
# In[93]:
df_cidades.PIB_CAPITA_1.plot.kde(); # So por curiosidade - distribuição do PIB
# Vamos combinar os DataFrames para extrair alguns insights
# In[104]:
df_cidade_frota = pd.merge(df_frota, df_cidades, on='MUNICIPIO') # Combine data based on MUNICIPIO
# In[105]:
df_cidade_frota
# ## 4 - Análise de negócio
# #### Algumas análises de negócio
#
# ##### 1 - Apresente a relação entre número de automóveis por habitante nas 5 cidades com maior PIB
# ##### 2 - Uma famosa empresa fabricante de pneus para caminhões deseja montar uma fábrica no estado do RJ. Apresente aos gestores uma cidade candidata à abertura da fábrica que atenda pelo menos 3 cidades com baixo custo operacional de deslocamento. (Este é um exercício de estratégia de negócio, utilize outras fontes de consulta para avaliar a sua decisão)
# 1 - Relação entre número de automóveis por habitante nas 5 cidades com maior PIB
# In[128]:
df_pib = df_cidades.sort_values(by=['PIB_CAPITA_1'], ascending=False)[0:5] # Filtra os 5 melhores PIB
# In[135]:
df_pib_auto = pd.merge(df_frota.loc[:,['MUNICIPIO','AUTOMOVEL']], df_pib.loc[:,['MUNICIPIO', 'PIB_CAPITA_1','HABITANTES']],on='MUNICIPIO') # Merge nos DFs
# In[136]:
df_pib_auto['RELATION_HAB_AUTO'] = df_pib_auto.HABITANTES / df_pib_auto.AUTOMOVEL
# In[137]:
df_pib_auto = df_pib_auto.sort_values(['RELATION_HAB_AUTO'])
df_pib_auto
# ## 5 - SVM como classificador para predição
# In[138]:
df_cidades.describe()
# In[151]:
svm_data = df_cidades.loc[:,['VL_BRUTO_AGROP_1000','VL_BRUTO_INDUSTRIA_1000','VL_BRUTO_SERV_1000','VL_BRUTO_ADMDEF_1000','VL_BRUTO_PRECCORR_1000','IMPOSTOS_PROD_1000','PIB_PRECCORR_1000','HABITANTES','PIB_CAPITA_1']]
svm_data_mean = svm_data.PIB_CAPITA_1.mean()
svm_data.PIB_CAPITA_1 = svm_data.PIB_CAPITA_1.apply(lambda x: 0 if x <= svm_data_mean else 1)
svm_data # Conditions base on PIB numbers to have a "good" PIB_PER_CAPITA
# In[157]:
from sklearn import svm
from sklearn.model_selection import train_test_split
import numpy as np
# get labels - y
labels = np.array(svm_data['PIB_CAPITA_1'])
# get features values - x1,x2,...
features = svm_data.drop('PIB_CAPITA_1', axis = 1)
# name of columns
feature_list = list(features.columns)
# convert to numpy array
features = np.array(svm_data)
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size = 0.25, random_state = 42)
# In[170]:
clf = svm.SVC(gamma='scale',random_state=0)
# In[171]:
clf.fit(train_features, train_labels) # Executa o aprendizado
# In[172]:
predictions = clf.predict(test_features) # Faz a predição
# In[173]:
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(test_labels, predictions)
accuracy # accuracia de 69%
# Vamos rodar o mesmo exemplo com outro classificador - floresta aleatória
# In[175]:
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)
# In[176]:
clf.fit(train_features, train_labels) # Executa o aprendizado
predictions = clf.predict(test_features) # Faz a predição
# In[177]:
accuracy = accuracy_score(test_labels, predictions)
accuracy # accuracia de 86%