Meu banco no Django não tá querendo dar migration

E é mesmo, boy?

Calma, chora não, tem um comando no django pra te ajudar antes que você faça o velho processo: “Deletar Banco -> Criar Banco com o mesmo nome -> MakeMigrations -> Migrate”, conheça o não tão famoso :

— fake

com este parâmetro, basicamente, o django assume  que as tabelas já existem, ou você pode simplesmente rodar “python manage.py migrate app_name”, também vai funcionar.

E aqui fica mais um drop de algumas coisas que tô aprendendo enquanto trabalho no Projeto Amadeus.

I do care about my City Hall’s Data.

I am a Computer Science undergraduate student from Recife, Pernambuco, Brazil. And Recife is a tech hub . I can’t tell my whole story in tech here but just to sum up:

  • Studied in a technichal school of Game Development (which also had lectures on Design and Game Design).
  • Passed the entrance exam for University (ENEM)
  • Entered on the biggest IT company of town (C.E.S.A.R.)
  • Struggled with the math behind the course, left the job and learned about Data Science field.
  • Starts a research on Educational Data Analysis.

Then…I’ve found about http://www.dados.recife.pe.gov.br which is an open data initiative from my City. And there is a dataset about the public health care system called SAMU. The dataset is fully in Portuguese but you can download there, it’s about all the call requests made in 2015. And I decided to analyze all this data to improve my skills, I hope you enjoy a bit of the descriptive analysis I’ve done and some thoughts I’ve raised and tried to answer.

What is it?

The data I’ve analyzed (still am) are about the emergency calls of 2015 made to SAMU (for those who don’t know, it’s the public health emergency system in Brazil). There were 70.011 calls!

You can find this data on this link and it’s divided between 5 datasets “ambulances”, “neighborhood”, “districts” , “expertise”, “removes” and “calls”.

Our variable of focus is desistência (“give up on call”), filled a posteriori, it’s a variable which I’ll be able to use Machine Learning algorithm to predict it’s values, the problem will binary, so it’s values are “give up” or “not give up”.

Exploratory Analysis

Basically, a exploratory analysis is used to understand more about how the variables relate with each other, which insights I can get.

When I split my dataset by sex, I can already plot a simple bar graph with “some” result:

The difference in desistência between man and women is insignificant, the first one gave up 14,5% of the times and the second, 13,3%.

From the variable Sex, I decided to mess up with the age and started playing with the spans, such as, how the olders behave? And I thought how to do a correct segmentation. It was cool to find that there existis a law defition for elder in Brazil(the following is in Portuguese, sorry):

No Brasil, considera-se idoso quem tiver atingido os 60 ou mais anos de idade, homem ou mulher, nacional ou estrangeiro, urbano ou rural, trabalhador da iniciativa privada, de serviço público, livre ou recluso, exercendo atividades ou aposentado, incluindo o pensionista e qualquer que seja a sua condição social (Martinez, 2005, pg. 20).

Source: http://boilerdo.blogspot.com.br/2013/04/quem-pode-ser-considerado-idoso-nos.html

Another source: http://www.planalto.gov.br/ccivil_03/leis/l8842.htm

Data Transformation (And keep up with the analysis)

There exists a column called “solicitacao_data”(call date), then I though about which questions I could answer based on the time, here goes the first one:

Which is the worse day and time to call SAMU?

As it is a date, the first thing I had to do was to transform, was to create a column that given a date, I’d return the week day. The distribution below is there result:

And how did I answer the question from this section?

The following code #easy #butno I calculated the amount of minutes between the call and the arrival at the hospital, even though I still think I have to look for outliers( my bad, I haven’t done it yet):

teste para calcular o tempo de espera -> chegada ao hospital
tempo_1 = solicitacoes_2015[“data_acionamento”][0]
tempo_2 = solicitacoes_2015[“data_chegada”][0]
fmt = “%Y-%m-%d %H:%M” #REGEX
tempo_1_parsed = datetime.datetime.strptime(tempo_1,fmt)
tempo_2_parsed = datetime.datetime.strptime(tempo_2,fmt)
tp1_ts = time.mktime(tempo_1_parsed.timetuple())
tp2_ts = time.mktime(tempo_2_parsed.timetuple())
print(tempo_1)
print(tempo_2)
#print(tp2_ts)
#print(tp1_ts)
print (str(int(tp2_ts-tp1_ts) / 60) + “ minutos “)
index = 0
tempo_de_transporte = []
for data_acionamento in solicitacoes_2015[“data_acionamento”]:
 if type(data_acionamento) is not float: #nan is considered to be a float type
 data_acionamento_parser = datetime.datetime.strptime(data_acionamento, fmt)
 data_acionamento_ts = time.mktime(data_acionamento_parser.timetuple())
 if type(solicitacoes_2015[“data_chegada”].iloc[index]) is not float:
 data_chegada_parser = datetime.datetime.strptime(solicitacoes_2015[“data_chegada”].iloc[index], fmt)
 data_chegada_ts = time.mktime(data_chegada_parser.timetuple())
 #print(data_acionamento_parser)
 #print(data_chegada_parser)
 tempo_de_transporte_instancia = int(data_chegada_ts — data_acionamento_ts)/ 60
 tempo_de_transporte.append(tempo_de_transporte_instancia)
 print(str(tempo_de_transporte_instancia) + “ minutos”)
 else:
 tempo_de_transporte.append(9999) #Significando Missing
 else:
 tempo_de_transporte.append(9999) #Significando Missing
 index += 1

To be able to do something about these data, I had to use the function GroupBy, and how the name says, it create groups from the distincts values of a column.

#agrupando por dia da semana, quais deles possui a maior quantidade de desistências?
solicitacoes_2015_por_dia = solicitacoes_2015.groupby(“solicitacao_diadasemana”)
for dia, solicitacoes in solicitacoes_2015_por_dia:
 print(“No dia “ + dia +”\n”)
 qtd_desistencias = solicitacoes[solicitacoes[“motivodescarte_descricao”] == “DESISTENCIA DA SOLICITAÇÃO”].shape[0]
 print(str(qtd_desistencias) + “ Desistências”)
 print(str(qtd_desistencias/solicitacoes.shape[0]) + “% de desistências sobre todas as chamadas”)
 print(“\n”)

I couldn’t find the hour yet but the SAMU takes way longer on Friday ( Good #Party :/)

#TIP 1

If possible, not on friday

There are many reasons for this (that I can think of but can’t proof though), I haven’t get any other dataset to do so, but it’s possible that eveyone is going out friday night, maybe it’ll be interesting to match the slowest hospitals with their location. (Does somebody dataset about Recife Traffic?)

Which days have the most calls to SAMU?

On decreasing order, the days that had the most call to SAMU were Sunday, Saturday and Monday.

On Sunday, waiting time for SAMU was about 38 minutes in average on Sunday (removing the calls as “9999” , missing values) but it still contains the calls that were disposed. Here is the snippet to get the data:

for dia, solicitacoes in solicitacoes_2015_por_dia:
 print(“No dia “ + dia +”\n”)
 qtd_tempo_gasto = solicitacoes[solicitacoes[“tempo_de_transporte_minutos”] != 9999][“tempo_de_transporte_minutos”].sum()
 print(str(qtd_tempo_gasto) + “ total no dia durante 2015”)
 print(str(qtd_tempo_gasto/solicitacoes.shape[0]) + “ de minutos em média”)
 print(“\n”)

Something relatively easy to be done, these transformations brought some interesting things, such as an example, our next question:

What are the days with most give ups?

And again, the champion is Sunday, with 1800 give ups, on about 16,7% of all calls on Sunday. This means that SAMU has a margin of almost 17% of WASTED CALLS. Imagine, for example, possible causes: Someone rescued before, the patient was rescued by a private company( some people call both, public and private sometimes) and “mock calls” (when you call but you’re lying).

P.S.: “Mock Call” is a crime and there are still e homo sapiens that does it.

On the section “Quanto custa” of the text above you can read( it is in portuguese) that a the team and equipments of a single SAMU costs 30R$ Thousands!, imagine the cost to move all of this 17% of the time.

#TIP 2

STAY CALM.

Analyze the situation, if it’s possible to someone to rescue faster, don’t CALL SAMU.

What are the major reasons to call?

Between all the patients whom were helped, these are the top 5 reasons:

CAUSAS EXTERNAS            10378
NEUROLOGICA                 2962
CARDIOLOGICA                2383
INFECÇÃO                    2219
RESPIRATORIA                1960

I don’t know(yet) what causa externas means. Neurologia, in my head ( I haven’t interviewed anyone on SAMU to know more about it), must head injuries and impacts on car accidents. The same to cardiologia, yes, a lot of people suffer for heart strokes, mainly elderly, as I could see from the data(next section).

If i stratify the data from Sex, the Top 5 modifies:

Masculino:

CAUSAS EXTERNAS            1024
INFECÇÃO                    753
CARDIOLOGICA                735
NEUROLOGICA                 732
RESPIRATORIA                683

Feminino:

CAUSAS EXTERNAS            807
INFECÇÃO                   605
CARDIOLOGICA               595
RESPIRATORIA               532
NEUROLOGICA                523

And the neighborhoods?

There is a part of the dataset called “neighborhood_2015.csv” which describes in details the data of the colun “bairrosaude_descricao”. I just asked myself which neighborhood had the most calls:

E para entender o porque, fui dar uma olhada na configuração do IBGE do bairro do CENTRO, é discrepante a quantidade de chamadas comparada à outros bairros, porém no link do IBGE sobre Recife, não existe nenhum bairro chamado “Centro”, ainda tenho de procurar a informação sobre quais “bairros” o CENTRO acopla dentro dele.

Ainda acho que essa variável vai ser de grande valor para o modelo que irei criar.

For the second Part

On the second part I’ll show more data set transformation and the implementation of a few models to predict the variable “withdrawl”.

And also metrics like correlation and how to create a ROC curve( since the it’s a binary problem).

I hope you liked the post and here are my social media links:

Youtube Channel debugasse:https://www.youtube.com/channel/UCey2da8VAlR–glrFCIggmA

Github: https://github.com/fbormann

SAMU em 2015 — Uma análise Parte I

Peço perdão se você achar meus vícios de escrita neste texto, ele é um pouco informal.

A primeira parte deste post se refere ao objetivo deste projeto que estou escrevendo o código e rodando desde Janeiro.

Eu estou tentando melhorar minha formulação de perguntas. Não desoluções. Ainda não sou bom nem na primeira quanto mais na segunda. Mas melhorei minha forma de escrever, pelo que parece.

O que é?

Os dados que analisei (estou analisando) são referentes as chamadas de socorro do ano de 2015 feitas pelo SAMU. Foram 70.011 chamadas. Isto só para o SAMU.

Ele se encontra no link e é dividido em 5 datasets “viaturas”,”bairros”,”distritos”, “especialidades”, “remocoes” e “solicitacoes”.

Mas a variável que será foco do trabalho é desistência, preenchida a posteriori, é uma variável que posso utilizar algoritmos de aprendizagem de máquina para avaliar seus resultados, o problema será binário, ou seja: Desistiu ou não desistiu.

Análise Exploratória

Basicamente, uma análise exploratória é entender como as variáveis se relacionam, quais insights são possíveis explorar.

Ao separar o dataset por sexo, já temos algum (que diz nada) resultado:

A desistência entre homens e mulheres é insignificante, os primeiros desistem 14,5% das vezes e as segundas, 13,3% das vezes.

A partir do sexo, decidi brincar com a idade e sai fazendo algumas divisões, por exemplo, como se comportam os idosos? E pensei em como fazer uma segmentação correta. Foi legal achar que existe uma definição na lei para idoso:

No Brasil, considera-se idoso quem tiver atingido os 60 ou mais anos de idade, homem ou mulher, nacional ou estrangeiro, urbano ou rural, trabalhador da iniciativa privada, de serviço público, livre ou recluso, exercendo atividades ou aposentado, incluindo o pensionista e qualquer que seja a sua condição social (Martinez, 2005, pg. 20).

Fonte: http://boilerdo.blogspot.com.br/2013/04/quem-pode-ser-considerado-idoso-nos.html

Outra fonte: http://www.planalto.gov.br/ccivil_03/leis/l8842.htm

Os idosos correspondem à 25% das chamadas com 17,802 exemplos, aqui a disparidade entre os sexos aumenta:

[Gráfico dos idosos separados por sexo]

Transformando os dados (E continuando a Análise)

Existe uma coluna chamada “solicitacao_data”, ai pensei em quais perguntas eu poderia responder, aqui vai a primeira:

Qual o pior dia e hora para chamar o SAMU?

Como ele é uma data, a primeira coisa que tive de transformar, foi criar uma coluna que dado uma data, retorna o dia da semana. O resultado foi a distribuição abaixo:

E como fiz para descobrir o dia que há mais demora?

Foi esse código #suave #sqn que calculei a quantidade de minutos que cada chamada demorou, ainda acho que eu devo olhar os outliers para melhorar minha análise:

teste para calcular o tempo de espera -> chegada ao hospital
tempo_1 = solicitacoes_2015[“data_acionamento”][0]
tempo_2 = solicitacoes_2015[“data_chegada”][0]
fmt = “%Y-%m-%d %H:%M” #REGEX
tempo_1_parsed = datetime.datetime.strptime(tempo_1,fmt)
tempo_2_parsed = datetime.datetime.strptime(tempo_2,fmt)
tp1_ts = time.mktime(tempo_1_parsed.timetuple())
tp2_ts = time.mktime(tempo_2_parsed.timetuple())
print(tempo_1)
print(tempo_2)
#print(tp2_ts)
#print(tp1_ts)
print (str(int(tp2_ts-tp1_ts) / 60) + “ minutos “)
index = 0
tempo_de_transporte = []
for data_acionamento in solicitacoes_2015[“data_acionamento”]:
 if type(data_acionamento) is not float: #nan is considered to be a float type
 data_acionamento_parser = datetime.datetime.strptime(data_acionamento, fmt)
 data_acionamento_ts = time.mktime(data_acionamento_parser.timetuple())
 if type(solicitacoes_2015[“data_chegada”].iloc[index]) is not float:
 data_chegada_parser = datetime.datetime.strptime(solicitacoes_2015[“data_chegada”].iloc[index], fmt)
 data_chegada_ts = time.mktime(data_chegada_parser.timetuple())
 #print(data_acionamento_parser)
 #print(data_chegada_parser)
 tempo_de_transporte_instancia = int(data_chegada_ts — data_acionamento_ts)/ 60
 tempo_de_transporte.append(tempo_de_transporte_instancia)
 print(str(tempo_de_transporte_instancia) + “ minutos”)
 else:
 tempo_de_transporte.append(9999) #Significando Missing
 else:
 tempo_de_transporte.append(9999) #Significando Missing
 index += 1

Para conseguir realizar algo com esses dados, tive de utilizar a função GroupBy, e como o próprio nome diz, ele forma grupos a partir dos valores distintos de uma coluna.

#agrupando por dia da semana, quais deles possui a maior quantidade de desistências?
solicitacoes_2015_por_dia = solicitacoes_2015.groupby(“solicitacao_diadasemana”)
for dia, solicitacoes in solicitacoes_2015_por_dia:
 print(“No dia “ + dia +”\n”)
 qtd_desistencias = solicitacoes[solicitacoes[“motivodescarte_descricao”] == “DESISTENCIA DA SOLICITAÇÃO”].shape[0]
 print(str(qtd_desistencias) + “ Desistências”)
 print(str(qtd_desistencias/solicitacoes.shape[0]) + “% de desistências sobre todas as chamadas”)
 print(“\n”)

Eu não consegui descobrir a hora ainda mas o SAMU demora muito mais na Sexta-feira (Adeus #baladinhatop :/).

#DICA 1

Se possível não na sexta.

Existem várias razões para isso, ainda não cruzei com nenhum estudo sobre Recife mas acho ok assumir que o trânsito implica em um grande fator, dado que sexta-feira tá todo mundo na #baladinhaTOP, talvez seja interessante cruzar os hospitais mais lentos e a sua localização. (Alguém conhece algum Dataset de trânsito do Recife?)

Quais os dias que há mais chamadas no SAMU?

Em ordem decrescente, os dias em que houveram mais chamadas do SAMU foram Domingo, sábado e segunda.

No domingo, a demora do SAMU foi em média 38 minutos no Domingo (excluindo as chamadas que foram marcadas como “9999” de tempo de espera) mas ainda contém as chamadas descartadas. Segue o snippet para conseguir os dados:

for dia, solicitacoes in solicitacoes_2015_por_dia:
 print(“No dia “ + dia +”\n”)
 qtd_tempo_gasto = solicitacoes[solicitacoes[“tempo_de_transporte_minutos”] != 9999][“tempo_de_transporte_minutos”].sum()
 print(str(qtd_tempo_gasto) + “ total no dia durante 2015”)
 print(str(qtd_tempo_gasto/solicitacoes.shape[0]) + “ de minutos em média”)
 print(“\n”)

Algo relativamente tranquilo de ser feito, essa transformações trouxeram várias coisas interessantes, como por exemplo, nossa próxima pergunta:

Quais dias há maiores desistências?

E novamente, o campeão foi o Domingo, com 1800 desistências, em torno de 16,7% de todas as chamadas no domingo. Isso quer dizer que o SAMU tem uma margem de QUASE 17% SEM APROVEITAMENTO. Imagine, por exemplo, possíveis causas: Alguém socorreu, o paciente foi atendido por um particular(as pessoas desesperadas podem chamar os dois.) e o trote.

P.S.: Trote é crime e ainda tem homo sapiens que o faz.

Na seção “Quanto custa” do texto você pode perceber que uma equipe e equipamentos do SAMU custam 30R$ MIL!(só para contratar e montar uma ambulância), imagina quanto custa deslocar esse povo todo para uma chamada inútil.

#DICA 2

STAY CALM. E análise a situação, se for possível, se alguém for lhe socorrer, NÃO CHAME O SAMU.

Quais as maiores causas de chamadas?

Entre todos os pacientes que são socorridos, segue o Top 5 de chamadas do SAMU:

CAUSAS EXTERNAS            10378
NEUROLOGICA                 2962
CARDIOLOGICA                2383
INFECÇÃO                    2219
RESPIRATORIA                1960

Eu não sei (ainda) o que significa causas externas. Neurologia, em minha cabeça (ainda não entrevistei ninguém do SAMU para saber sobre), deve ser por traumas cranianos e impactos provenientes de acidentes de trânsito. O mesmo para a CARDIOLOGIA, sim, um monte de gente sofre de infartos, principalmente idosos, como eu pude comprovar ao segmentar os dados entre os idosos.

Fazendo a segmentação dos dados a partir do sexo, o Top 5 se modifica:

Masculino:

CAUSAS EXTERNAS            1024
INFECÇÃO                    753
CARDIOLOGICA                735
NEUROLOGICA                 732
RESPIRATORIA                683

Feminino:

CAUSAS EXTERNAS            807
INFECÇÃO                   605
CARDIOLOGICA               595
RESPIRATORIA               532
NEUROLOGICA                523

E os Bairros?

Existe uma parte do datasets que é “bairros_2015.csv”, que descreve em detalhes os dados da coluna “bairrosaude_descricao”. Fui plotar para saber qual o bairro onde há mais chamadas:

E para entender o porque, fui dar uma olhada na configuração do IBGE do bairro do CENTRO, é discrepante a quantidade de chamadas comparada à outros bairros, porém no link do IBGE sobre Recife, não existe nenhum bairro chamado “Centro”, ainda tenho de procurar a informação sobre quais “bairros” o CENTRO acopla dentro dele.

Ainda acho que essa variável vai ser de grande valor para o modelo que irei criar.

Para a Parte II

Na segunda parte vou mostrar como as transformações no dataset e a implementação de alguns modelos para predizer a variável “desistência”. Métricas como correlação, e como criar uma curva ROC (dado que o problema é binário).

Espero que você tenha gostado do post e segue meus links nas redes sociais:

Canal debugasse: https://www.youtube.com/channel/UCey2da8VAlR–glrFCIggmA

Github: https://github.com/fbormann

Prefeitura do Recife e suas(nossas) despesas

Mas o que são essas despesas, Bormann?

Vocês conhecem o site http://dados.recife.pe.gov.br/ ? Basicamente, é um site onde a prefeitura do Recife fornece vários dados públicos. Eu decidi pegar os dados das despesas da prefeitura. E eu formulei várias perguntas(hipóteses) para iniciar a pesquisa e sim, algumas foram bem óbvias.

Questionamento #1: Ao final do ano, devem existir mais contas à serem pagas?

Dezembro é o 2º colocado na lista de meses com mais contas de 2014, porém do top 6 de quantidades de despesa por mês, todos os outros 5 são do primeiro semestre.

Segue os resultados:

Quantidade_de_contas

ou para visualizar melhor:

quantidade_de_contas_por_mes_grafico

Exceto janeiro.  Porque?

Seguem as minhas hipóteses:

  • De fato não há contas no mês de janeiro e basicamente o trabalho é realizado somente nas pendências do mês de Dezembro.
  • A força de trabalho da secretaria de contas está bem reduzida pois boa parte do quadro de funcionários está de férias, logo menos trabalhos = menos resultados.
  • Nenhuma das anteriores.

Talvez eu consiga achar algum representante da prefeitura para enteder os do’s and don’ts dentro da prefeitura.

Questionamento #2:  Que secretaria paga mais?

Meu chute inicial seria alguma secretaria de saúde ou serviço social, e pelos dados:

Quantidade_de_contas_por_secretaria

Eu acertei!. Apesar que eu não sabia que a secretaria da prefeitura se chamava “Fundo Municipal de Saúde”…mas legal saber que boa parte das contas também vai para a secretaria de educação mas será que eles recebem o maior repasse em valores absolutos? E porque a secretaria de infraestrutura, coitada das nossas avenidas, tem poucas contas? Quem serão os mais contratados?.

Questionamento #3: Quem gasta mais?

Antes de saber quem gasta mais…. só para saber o quanto nossa prefeitura gastou em 2014:

R$953,674,879.87 ( 953 Milhões 674 mil ) Reais.

O que você acha desse valor?

Questionamento #4: Será que a prefeitura realmente possui muito dinheiro para investir?

Basicamente é como se para cada cidadão, que pelas estimativas do IBGE  são 1,617,183, fossem arrecadados (ou investidos) 589R$ por contribuinte, apesar que sabemos da quantidade de inadiplentes é bem alta(um dado que eu ainda preciso buscar), será que distribuir os recursos dessa forma é viável?

O que você acha que é possível fazer de relevante caso você tivesse 589R$ para contribuir em despesas públicas? Ou será que estou sendo injusto em perguntar isto pois o rendimento mediano (possivelmente, o mais próximo da realidade) é de apenas 500R$ por domílicio? Ou melhor ainda: este valor é algo realmente preocupante já que o rendimento médio por domílicio é de R$3.755?

Fonte: http://cidades.ibge.gov.br/xtras/temas.php?lang=&codmun=261160&idtema=16&search=pernambuco|recife|sintese-das-informacoes

Então pessoal, este é o estudo que tenho feito esses dias e espero que tenham inspirado vocês a olharem mais para sua prefeitura ao invés de ficar tentando resolver o macro (nosso país), procurem resolver as pequenas coisas.

Abraços,

O que é Data Science? E porque eu falo tanto disso?

O que é essa área que Bormann tanto fala?… Basicamente, como bem explicado pela NYU (New York University):

“One way to consider data science is as an evolutionary step in interdisciplinary fields like business analysis that incorporate computer science, modeling, statistics, analytics, and mathematics.”. [1]

Tradução: Uma boa forma de se pensar sobre data science, é imaginar como um passo evolucionário em campos interdisciplinares como análises de negócios que incorporam ciências da computação, modelagem, estatística, análises e matemática.

E com a grande explosão de dados que nós temos hoje em dia (pense só em quanto texto e imagens vocês produzem por dia somente no whatsapp…), mais e mais informação anda desorganizada e sem sentido por ai,  esperando para TALVEZ ser descoberta, a gente nunca sabe se vai achar um diamante no meio dessa informação bruta né? É ai que mora a graça do negócio, é necessário que muitas hipóteses tenham sido formuladas e refutadas para que valor real seja agregado ao negócio pela análise de dados.

Quais as aplicações?

Irei descrever uma bem simples: sabe aquele filme recomendado do Netflix?! Você acha que ele veio de onde? Da indicação do seu melhor amigo? hmm…

sqn_image

Existe uma grande massa de dados, por exemplo, de quais categorias de filme você mais assiste, qual o horário, quanto tempo duram os filmes e quais atores estão presentes neles mas e ai? você acha que algo tão personalizado assim daria certo? nem tanto…MILHÕES de usuários são parecidos com você e são eles(e você) que definem qual filmes serão recomendados para a sua próxima sessão de pipoca com refrigerante.

Mas porque tu escolheu isso, Bormann?

Sempre tive um viés para analisar o comportamento das pessoas e relacionar com outros padrões e brincar com eles (leia-se tentar novos “inputs” para ter novos “outputs”). Enfim, pude unir os conhecimentos(ou pelo menos a afinidade com elas) nas Ciências Sociais e a tecnicidade da área (programação, estatística) e assim juntar uma área que gosto com outra que pareço (sério, só pareço) ter afinidade.

Mas vamos falar do que todo mundo gosta né? DINHEIRO.

Vamos a alguns dados: [2][3]

  • 3,433 postos de trabalhos abertos (somente nos EUA);
  • Salário base(por ano) : $105,395 (por baixo, uns 9,000$/mês)
  • E considerado o 9 colocado no ranking de “melhores trabalhos”

Alguém aqui discorda que esses são bons motivos para procurar esta posição?.

Em suma, a profissão PARECE ser a união entre hobby + projeção financeira + boas condições de trabalho excelentes. E por sua grande projeção de impacto, já que grandes massas de dados formadas por dados desorganizados serão cada vez mais comuns. Enfim, espero que agora vocês achem sentido no que eu falo e curtido o post.

[1] http://www.nyu.edu/

[2] http://www.glassdoor.com/blog/highest-paying-jobs-demand/

[3] http://www.glassdoor.com/Best-Jobs-in-America-LST_KQ0,20.htm

#Drop 4 Data Science: qual o benefício para as pequenas empresas?

Primeiro, vamos conhecer:

O que é uma pequena empresa? Segundo o SEBRAE:

“Se a receita bruta anual for superior a R$ 360.000,00 e igual ou inferior é R$ 3.600.000,00, a sociedade será enquadrada como empresa de pequeno porte”[1]

Como que uma pequena empresa, com uma receita pequena como esta pode utilizar os seus dados para melhorar o seu negócio?, reduzir custos?, e aprender sobre seus clientes?.

Quem são meus usuários?

Basicamente, quase toda empresa hoje em dia possui cadastros dos seus clientes, seja em forma de papel ou online (via Facebook, Google+). Então, descobrir quem são seus usuários,

  • Qual a faixa etária consome mais?
  • Qual o sexo que, na média, consome mais?
  • Quem compra o produto X mais vezes?
  • Quantas vezes eles vêem a sua loja? (para o caso de lojas físicas)

Essas são perguntas facilmente respondidas por um data scientists, na verdade, sua vertente data analyst, que é capaz de fazer análise descritivas, desta forma o empreendedor e sua pequena empresa podem entender mais seu consumidor, aprender sobre seus estilos e gostos e quais suas preferências.

Como seus usuários se comportam?

  • Se eu aumentar o preço de um produto que está sendo POUCO vendido, é POSSÍVEL que as vendas AUMENTEM? (sim, isto é uma possibilidade)
  • Quais os meses que estes usuários mais gastam e menos gastam?

Pequenas empresas não precisam de grandes formas para coletar dados, até mesmo um formulário de papel funciona, desde que estes dados sejam colocados em uma planilha Excel por exemplo,  e sim, o Excel é uma ótima ferramenta para análise de dados.

Novas campanhas

A maioria dos pequenos negócios hoje em dia realizam grandes movimentos online como postagens no instagram, campanhas no facebook e o feedback de todos esses meios sociais é mensurável SIM!, com um bom data scientist, estes dados podem ser analisados de forma a tornar sua campanha mais efetiva, a conversão mais alta e ROI(Return on invesment) de cada atividade maior.

Este é um pequeno drop para o post desta semana!

Fontes:

[1] http://www.sebrae.com.br/sites/PortalSebrae/artigos/Entenda-as-distin%C3%A7%C3%B5es-entre-microempresa,-pequena-empresa-e-MEI

Drop #3 – Tweepy e Pandas: Primeiras Impressões

Twitter_logo_blue

Esta semana eu tentei construir um post interessante para amanhã( 04 de setembro), talvez, quem saiba, eu consiga. E os culpados desta semana, ou seja, me deram um trabalho enorme para aprender e ler sua documentação, esses são : Pandas e Tweepy.

Pandas é um dos melhores packages para manipulação de dados para Python, standard mesmo e bem amplo, além de possuir uma documentação extensa, muito boa e cheia de tutoriais. Segue o link da documentação: http://pandas.pydata.org/pandas-docs/stable/index.html para quem quiser aprender um pouco mais sobre esse package.

Tweepy, já é um package,  que ao contrário do Pandas, bem restrito. Se limita a ser uma camada de abstração entre a API e o seu código em python, desta forma é muito mais fácil utilizar a API do twitter para obter dados e gravá-los.
O tweepy possui poucos exemplos online e estes são poucos diversificados.

Um pouco mais sobre o Pandas:

pandas não, infelizmente o pandas não possui este olhar para você enquanto você o programa.

Mas vamos nessa, o pandas possui dois tipos principais de dados básicos e que se bem utilizados trazem extremas vantagens : Series e Dataframes. O primeiro, é isto mesmo, uma série, se assemelha fortemente aos dictionary de várias outras linguagens, todo objeto possui uma key própria. Já o Dataframe é algo fantástico, funciona como uma tabela/planilha de um banco relacional, com colunas como id’s e linhas como registros. E este, possui métodos fantásticos!!! Como o Dataframe.to_csv, isso mesmo, o panda possui um método bem simples para serializar todos os dados em um arquivo csv. Para mim, esta é uma dádiva que não encontrei em R, por exemplo(mas com certeza existe um package que conserta isto).

Já o tweepy:

Fora o que já falei sobre o tweepy, o que eu posso dizer é que ele abstrai as diferentes APIs do twitter de forma bem legal. Por exemplo, com o mesmo objeto, eu posso acessar a minha timeline ( que está conectada ao meu app criado no https://dev.twitter.com/) ou acessar a Streaming API que me permite acessar todos os tweets do mundo, e utilizando um simples dictionary, eu posso filtrar somente twitter que possuem certas palavras (“Sport”, por exemplo.).

 

Espero que vocês tenham gostado deste drop e que tenha despertado a curiosidade para procurar mais.

 

 

 

Drop #2 – Big Data : somente um hype?! OU TEM DINHEIRO ROLANDO?!

bigdataanalytics

Primeiro, como é a primeira vez que falo sobre Big Data em meu blog, aqui tem uma pequena definição que concordo sobre o que é Big Data: 

“De maneira mais simplista, a ideia também pode ser compreendida como a análise de grandes quantidades de dados para a geração de resultados importantes que, em volumes menores, dificilmente seriam alcançados.”. [1]

Imagine por exemplo, uma análise dos e-mails enviados em um ano de 3 milhões de pessoas, ou a análise do movimento de todos os carros em Recife(667.405 veículos segundo o Detran)[2] ou de todas as pessoas que utilizam o Facebook no Brasil.

Outro ponto que destacou o tamanho hype envolvendo Big Data foi o report do LinkedIn do ano anterior[3], e o primeiro lugar mundial combina justamente com o rank Brasileiro [4], com o termo “Statistical Analysis and Data Mining” no número 1 entre as pesquisas de trabalho.

Mas sim, o que isso tem a ver comigo?!

Simples jovem, imagine que daqui a pouco (ok, colocando o fator Brasil, talvez em 10 anos) teremos planos de saúde populares enviando e-mails SUGERINDO exames pois eles possuem seu histórico hospitalar e dados de sua vida como : sua idade, gênero fisiológico, onde você mora, e traçando todos estes dados com de outros 200.000 assinantes por exemplo, eles possam perceber exames necessários a sua idade de forma que você recorra a menos cirurgias (geralmente operações mais caras do que exames), de forma que o plano reduza custos de forma eficiente e consiga, de fato, melhorar sua saúde, esta é uma das melhores e mais básicas aplicações de Big Data.

Mas não se engane e pense que no Brasil várias empresas estão contratando pessoas com habilidades em Big Data (Apache Hadoop, IBM Spark e afins), muitos dos gerentes de T.I. não possuem um background em Banco de Dados, por exemplo, para entender o poder que a informação possui, como demonstra este relato de 2014, onde apenas 29% PRETENDIAM fazer um investimento em Big Data no ano de 2015.

Maiores investimentos ainda são necessários para que o Brasil se torne uma potência em Big Data, contundo, boas coisas já estão acontecendo no país, como o lançamento do centro de P&D da EMC e que já produz frutos em pesquisas utilizando Big Data Analytics para o bem-social[5], Big Data não é um hype e deve trazer muitos investimentos de grandes empresas nos próximos anos já que informação e personalização serão grandes nomes no futuro dos serviços de tecnologia oferecidos.

 

Imagino que a maioria de vocês já tenha ouvido falar do termo, espero que de forma positiva mas se você ouviu ou leu algo muito legal sobre Big Data e quer adicionar algo a conversa, comente abaixo:

Referências

[1] http://www.infowester.com/big-data.php

[2] http://www.detran.pe.gov.br/images/stories/estatisticas/HP/1.11_frota_municipio.pdf

[3] http://blog.linkedin.com/2014/12/17/the-25-hottest-skills-that-got-people-hired-in-2014/

[4] http://www.slideshare.net/linkedin/the-25-hottest-skills-of-2014-on-linkedin

[5] http://reflectionsblog.emc.com/2015/07/big-data-technology-for-social-good/

Paola Oliveira e seus 3 Milhōes de R$

Paola-Oliveira

Foco….. Detalhes

Ok, vamos prestar atenção nos detalhes desta matéria: (http://extra.globo.com/famosos/paolla-oliveira-a-celebridade-do-brasil-com-mais-forca-no-mercado-publicitario-na-atualidade-17126796.html?topico=paolla-oliveira), se estima que Paola Oliveira tenha recebido 3R$ milhões durante todo o ano e 350R$ mil por trabalho!, mas a parte interessante da matéria é como eles mensuram o valor da “imagem” de Paolla, neste trecho:

“Paolla é considerada uma personalidade que reúne características importantes como confiabilidade, sensualidade e sofisticação. Sua popularidade só aumenta, não só com o sucesso das personagens que interpreta, mas também pelo interesse da mídia por sua vida pessoal, fazendo com que a estrela esteja sempre no noticiário, em evidência.”

Antes de mais nada, o que estou fazendo neste post não é de medir exatamente o valor da imagem da Paola Oliveira mas sim, conceder uma estimação muito boa utilizando dados abertos (pois este o foco do meu blog: minha área profissional e suas aplicações).

Então, nada mais justo do que medir o quanto ela aparece na mídia e qual o impacto disto, correto?, então…vamos começar com o instagram[1]. Após uma pequena fuçada, achei o perfil oficial da Paolla, o @paolaoliveira5. E aqui vai minha tabela “imaginária” de valores, baseadas nestes links:

http://petapixel.com/2012/07/19/how-much-is-a-like-comment-or-follower-on-instagram-worth-to-you/ (Imprensa)

http://buyinstagramfollowers.biz/buy-instagram-followers/ ( Empresa, sim, isto existe)

Pelo que diz aqui…1,000 seguidores equivalem à 90$(dólares), utilizando a cotação do dia em que estou escrevendo esta parte do post(10/08/2015), a cotação do dólar está em R$3,50, ou seja 90$ = 315R$, para coletar o número EXATO de seguidores da Paola Oliveira, utilizei a API do instagram, pois é o principal meio de comunicação dela e seus fãs.

———————–SCRIPT ——————————————————

Input:
api = InstagramAPI(client_id=client_id,client_secret=client_secret)
userdata = api.user(user_id)
print("The user " + userdata.username +" possui "+ str(userdata.counts['followed_by']) + ' Followers')
Output:
The user paolaoliveira5 possui 1405080 Followers
-----------------------SCRIPT ------------------------------------------------------

Ela possui 1405080 seguidores!, dividindo isto por 1,000 e multiplicando por 315R$, o que equivale a um valor de 442.484R$!(aproximadamente), este é o valor “aproximado” da conta do instagram da Paola Oliveira. Ok mas isto seria uma forma exagerada de medir o impacto de um artista, correto?.

Vamos tentar colocar métricas mais precisas: tal qual o valor de um like? imagine que um like equivale à 0,05R$…

———————–SCRIPT ——————————————————

try:
    recent_media,next = api.user_recent_media(user_id=user_id,count=20) #desta forma eu consigo pegar os dados de todas as fotos
    while next:
        list = next.split('&') #Separa todos os componentes de next(uma str) em uma lista 
        temp,max_id = list[3].split('max_id=') #list[3] é uma gambiarra
        more_media, next = api.user_recent_media(user_id="9281904",count=40,max_id=max_id)
        recent_media.extend(more_media)

    for media in recent_media:
            sum = sum + media.like_count
except Exception as e:
    print(e)
print("Quantidade de likes total: "+ str(sum))
print("Quantidade de postagens: "+ str(userdata.counts['media']))
media = sum/userdata.counts['media']

print("Numero medio de likes por foto: "+ str(media))
-----------------------SCRIPT ------------------------------------------------------

Utilizando o script acima consegui capturar todas as fotos já postadas no perfil da Paola Oliveira, e suas propriedades:

  •  quantidade de likes,
  • quantidade de comentários
  • conteúdo dos comentários

Deu pra perceber que existem muitos dados né? kkkk(Essa API[2] do instagram é muito boa), e a média de likes por foto da Paola é igual à 19.372 likes por foto/vídeo no instagram, como sabemos, a média é uma forma de medição central, ou seja, é esperado que uma foto da Paola alcance esta quantidade de likes, é mais fácil prever tal resultado. E um like, com certeza vale mais do que um seguidor pois ele é a “pegada” deixada pelo follower de que aquela foto é boa, logo, fazemos pequenas contas temos que cada foto da Paolla Oliveira no Instagram deve valer bemmmmmmm no mínimo 968R$. Mas perai, esse valor um instagrammer pequeno consegue receber, então que tal adicionarmos um décimo do valor da conta da Paolla na jogada? É garotada…são 45216,4R$(Quarenta e Cinco Mil) por foto!, contando que o mercado publicitário tradicional(televisivo) ainda possua um incentivo financeiro maior, podemos facilmente perceber que 350R$ mil por um produto publicitário utilizando a imagem da atriz não parece algo tão distante assim…

Vale mesmo?

Como expliquei no começo do texto, o objetivo deste e de todos os outros textos é mostrar o processo de obtenção dos dados e como eles foram utilizados para responder a pergunta principal, e sim, Paola Oliveira “merece” o cachê que ganha já que possui uma rede de “contatos” e uma influência agradável a praticamente qualquer marca feminina. Espero que vocês tenham gostado da minha estimação e espero que vocês escolham uma destas perguntas abaixo, as três são grandes desafios!

Obs1: Python é uma ótima ferramenta!, sério, possui bibliotecas para muitas coisas, como a que utilizei neste post: python-instagram. Além disso possui uma sintaxe muito próxima de uma linguagem também nova, chamada Swift(a que irá substitui o objective-C para programação em iOS).

[1] Utilizei a API do instagram e a biblioteca python-instagram, a documentação para devs pode ser encontrada aqui:  instagram.com/developer

[2] https://pt.wikipedia.org/wiki/Interface_de_programa%C3%A7%C3%A3o_de_aplica%C3%A7%C3%B5es

Drop #1 – ” Why so many subways?”

image

I’m from Recife, Brazil. If you don’t know the city that much, Google it, you’ll find it pretty amazing. However, and that’s not a complain, there has been a boost in subways stores around the city. And that’s a question I was asking myself:” Why are there so many subways? ” and why they keep coming, how they are organized know and what makes them profitable. And know I can’t answer all those questions, but I tried my best.
So I looked for places to find my answer and I came up with the idea of using Google Maps, indeed, they showed me that exists 30, yes that’s right, 30 subways around the city, just take a look:

image

But let’s go deeper at the analysis, we can see that there clusters of subways around the city, to count it right, 23 are located at the same zone, okay, it’s a big zone but still that almost 80% are located at 1/4 of the territory (there are four zones), which is the north one, and other five are located at the south( Boa Viagem neighborhood), all the other 2 left are located at poorer zones, we can understand that here:
image

But then, I was wondering, why there are so many together? And why are there even smaller and condensed clusters of subways? Take a look at this neighborhood :
image

Can you see that exists 4 subways way close to each other, like, about less than 1km from each other? Even though they are the main business Avenue of the city, it just seems unbelievable that there was no way to organize themselves better, I know it is a franchise and probably, their owners are different but imagine if instead of being concentrated they were split along the whole Avenue? It would reach a far broader audience and make their profit rise.

And here goes another little cluster to analyze but I will focus on rather different questions: image

OK, the figures I circulated where areas which it’s common sense of the citizens that they see crowded and have a good traffic of people/cars, which make easier to understand why there are subways around there, but look close at stores 3 and 6, store 3 it’s in an avenue that I still don’t know if it has a traffic enough to make it a profitable place or, making a better questions, if it’s a great a place to put a subway logo on it, I think I’ll use waze data or somewhere else to understand it better. But let’s focus on number 6, you can see that the red circle is way closer to 5 than 6, so what are the reasons 6 exists in the first place? (suppose that 6 came after 5 in time), if not, what made someone create number 5? Is it a good way to organize s franchise across the city?

So, here it is folks, my small analysis about some data I’ve found on the Internet to answer my simple question and I hope you liked it and found the discussion interesting, if you have something to add, please, put your fingers on the keyboard and comment, I’d appreciate.
Any datasets or questions? Mail me at felipe.bormann@gmail.com.