terça-feira, 25 de julho de 2017

Apache Spark Streaming Tutorial: Identificando as Hashtags de Tendência do Twitter

Hoje em dia, os dados estão crescendo e se acumulando mais rápido do que nunca. Atualmente, cerca de 90% de todos os dados gerados em nosso mundo foram gerados somente nos últimos dois anos. Devido a essa taxa de crescimento impressionante, as grandes plataformas de dados tiveram que adotar soluções radicais para manter esses enormes volumes de dados.

Uma das principais fontes de dados hoje são as redes sociais. Permita-me demonstrar um exemplo da vida real: lidar, analisar e extrair informações de dados de redes sociais em tempo real usando uma das soluções eco de Big Data mais importantes, Apache Spark e Python.



Neste artigo, vou ensinar-lhe como criar um aplicativo simples que lê fluxos online do Twitter usando o Python e, em seguida, processa os tweets usando o Apache Spark Streaming para identificar hashtags e, finalmente, retorna as principais hashtags de tendências e representa esses dados em um painel de controle.

Criando suas próprias credenciais para as APIs do Twitter
Para obter tweets do Twitter, você precisa se registrar no TwitterApps clicando em "Criar novo aplicativo" e, em seguida, preencha o formulário abaixo, depois clique em "Criar seu aplicativo do Twitter".



Em segundo lugar, acesse seu aplicativo recém-criado e abra a guia "Keys and Access Tokens". Em seguida, clique em "Gerar meu token de acesso".



Seus novos tokens de acesso aparecerão abaixo.



E agora você está pronto para o próximo passo.

Criando o Twitter HTTP Client
Nesta etapa, vou mostrar-lhe como criar um cliente simples que obterá os tweets da API do Twitter usando o Python e os passará para a instância Spark Streaming. Vai ser fácil de seguir para qualquer Python Developer.

Primeiro, vamos criar um arquivo chamado [twitter_app.py] e, em seguida, adicionaremos o código juntos como abaixo.

Importe as bibliotecas que usaremos abaixo:


import socket
import sys
import requests
import requests_oauthlib
import json


E adicione as variáveis que serão usadas no OAuth para se conectar ao Twitter conforme abaixo:


# Replace the values below with yours
ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN'
ACCESS_SECRET = 'YOUR_ACCESS_SECRET'
CONSUMER_KEY = 'YOUR_CONSUMER_KEY'
CONSUMER_SECRET = 'YOUR_CONSUMER_SECRET'
my_auth = requests_oauthlib.OAuth1(CONSUMER_KEY, CONSUMER_SECRET,ACCESS_TOKEN, ACCESS_SECRET)


Agora, vamos criar uma nova função chamada get_tweets que chamará o URL da API do Twitter e retornará a resposta para um fluxo de tweets.

def get_tweets():
 url = 'https://stream.twitter.com/1.1/statuses/filter.json'
 query_data = [('language', 'en'), ('locations', '-130,-20,100,50'),('track','#')]
 query_url = url + '?' + '&'.join([str(t[0]) + '=' + str(t[1]) for t in query_data])
 response = requests.get(query_url, auth=my_auth, stream=True)
 print(query_url, response)
 return response


Em seguida, crie uma função que obtenha a resposta acima e extraia o texto dos tweets do objeto JSON de todos os tweets. Depois disso, envie todos os tweets à instância Spark Streaming (serão discutidos mais tarde) através de uma conexão TCP.

def send_tweets_to_spark(http_resp, tcp_connection):
 for line in http_resp.iter_lines():
     try:
         full_tweet = json.loads(line)
         tweet_text = full_tweet['text']
         print("Tweet Text: " + tweet_text)
         print ("------------------------------------------")
         tcp_connection.send(tweet_text + '\n')
     except:
         e = sys.exc_info()[0]
         print("Error: %s" % e)


Agora vamos fazer a parte principal, um app host de conexão socket, na qual o Spark vai se conectar. Vamos configurar o IP aqui para ser o localhost, pois todos serão executados na mesma máquina e na porta 9009. Então chamaremos o método get_tweets, que fizemos acima, para obter os tweets do Twitter e passar sua resposta junto com a conexão de socket para send_tweets_to_spark para enviar os tweets para Spark.

TCP_IP = "localhost"
TCP_PORT = 9009
conn = None
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
print("Waiting for TCP connection...")
conn, addr = s.accept()
print("Connected... Starting getting tweets.")
resp = get_tweets()
send_tweets_to_spark(resp, conn)


Configurando nossa aplicação de streaming de Apache Spark
Vamos construir o nosso aplicativo Spark streaming que fará o processamento em tempo real para os tweets recebidos, extrairá os hashtags deles e calculará quantas hashtags foram mencionadas.



Primeiro, temos que criar uma instância de Contexto Spark (sc), então criamos o Contexto de Transmissão ssc de sc com um intervalo de lote de dois segundos que fará a transformação em todos os fluxos recebidos a cada dois segundos. Observe que estabelecemos o nível de log para ERROR para desabilitar a maioria dos logs que o Spark escreve.

Nós definimos um ponto de controle aqui para permitir a verificação periódica do RDD; Isso é obrigatório para ser usado em nosso aplicativo, pois usaremos transformações com estado (serão discutidas mais adiante na mesma seção).

Em seguida, definimos nosso DStream dataStream principal que se conectará ao servidor de socket que criamos antes, na porta 9009, e leia os tweets dessa porta. Cada registro no DStream será um tweet.

from pyspark import SparkConf,SparkContext
from pyspark.streaming import StreamingContext
from pyspark.sql import Row,SQLContext
import sys
import requests
# create spark configuration
conf = SparkConf()
conf.setAppName("TwitterStreamApp")
# create spark context with the above configuration
sc = SparkContext(conf=conf)
sc.setLogLevel("ERROR")
# create the Streaming Context from the above spark context with interval size 2 seconds
ssc = StreamingContext(sc, 2)
# setting a checkpoint to allow RDD recovery
ssc.checkpoint("checkpoint_TwitterApp")
# read data from port 9009
dataStream = ssc.socketTextStream("localhost",9009)


Agora, vamos definir a nossa lógica de transformação. Primeiro vamos dividir todos os tweets em palavras e colocá-los em palavras RDD. Então, vamos filtrar apenas hashtags de todas as palavras e mapeá-los para um par de (hashtag, 1) e colocá-los no hashtags RDD.

Então precisamos calcular quantas vezes a hashtag foi mencionada. Nós podemos fazer isso usando a função reductionByKey. Esta função calculará quantas vezes a hashtag foi mencionada por cada lote, ou seja, irá redefinir as contagens em cada lote.

No nosso caso, precisamos calcular as contagens em todos os lotes, então usaremos outra função chamada updateStateByKey, pois esta função permite que você mantenha o estado de RDD ao atualizá-lo com novos dados. Desta forma, é chamado de Transformação de Estado.

Note que, para usar updateStateByKey, você precisa configurar um ponto de controle e o que fizemos na etapa anterior.

# split each tweet into words
words = dataStream.flatMap(lambda line: line.split(" "))
# filter the words to get only hashtags, then map each hashtag to be a pair of (hashtag,1)
hashtags = words.filter(lambda w: '#' in w).map(lambda x: (x, 1))
# adding the count of each hashtag to its last count
tags_totals = hashtags.updateStateByKey(aggregate_tags_count)
# do processing for each RDD generated in each interval
tags_totals.foreachRDD(process_rdd)
# start the streaming computation
ssc.start()
# wait for the streaming to finish
ssc.awaitTermination()


O updateStateByKey assume uma função como um parâmetro chamado de função de atualização. Ele é executado em cada item no RDD e faz a lógica desejada.

No nosso caso, criamos uma função de atualização chamada aggregate_tags_count que somará todos os novos valores para cada hashtag e os adiciona ao total_sum que é a soma em todos os lotes, e salva os dados em tags_totals RDD.

def aggregate_tags_count(new_values, total_sum):
 return sum(new_values) + (total_sum or 0)


Em seguida, fazemos o processamento em tags_totals RDD em cada lote para convertê-lo em tabela temporária usando o Spark SQL Context e, em seguida, execute uma instrução de seleção para recuperar os dez principais hashtags com suas contagens e colocá-los em frame de dados hashtag_counts_df.

def get_sql_context_instance(spark_context):
 if ('sqlContextSingletonInstance' not in globals()):
        globals()['sqlContextSingletonInstance'] = SQLContext(spark_context)
 return globals()['sqlContextSingletonInstance']
def process_rdd(time, rdd):
 print("----------- %s -----------" % str(time))
 try:
     # Get spark sql singleton context from the current context
     sql_context = get_sql_context_instance(rdd.context)
     # convert the RDD to Row RDD
     row_rdd = rdd.map(lambda w: Row(hashtag=w[0], hashtag_count=w[1]))
     # create a DF from the Row RDD
     hashtags_df = sql_context.createDataFrame(row_rdd)
     # Register the dataframe as table
     hashtags_df.registerTempTable("hashtags")
     # get the top 10 hashtags from the table using SQL and print them
     hashtag_counts_df = sql_context.sql("select hashtag, hashtag_count from hashtags order by hashtag_count desc limit 10")
     hashtag_counts_df.show()
     # call this method to prepare top 10 hashtags DF and send them
     send_df_to_dashboard(hashtag_counts_df)
 except:
     e = sys.exc_info()[0]
     print("Error: %s" % e)


O último passo no nosso aplicativo Spark é enviar o quadro de dados hashtag_counts_df para o aplicativo do painel. Então, vamos converter o quadro de dados em dois arrays, um para os hashtags e outro para suas contagens. Em seguida, nós os enviaremos para o aplicativo do painel de controle através da API REST.

def send_df_to_dashboard(df):
 # extract the hashtags from dataframe and convert them into array
 top_tags = [str(t.hashtag) for t in df.select("hashtag").collect()]
 # extract the counts from dataframe and convert them into array
 tags_count = [p.hashtag_count for p in df.select("hashtag_count").collect()]
 # initialize and send the data through REST API
 url = 'http://localhost:5001/updateData'
 request_data = {'label': str(top_tags), 'data': str(tags_count)}
 response = requests.post(url, data=request_data)


Finalmente, aqui está um exemplo de saída do Spark Streaming durante a execução e a impressão do hashtag_counts_df, você notará que a saída é impressa exatamente a cada dois segundos, de acordo com os intervalos do lote.



Crie um painel de controle em tempo real simples para representar os dados
Agora, vamos criar um aplicativo de painel simples que será atualizado em tempo real pela Spark. Vamos construí-lo usando Python, Flask e Charts.js.

Primeiro, vamos criar um projeto Python com a estrutura abaixo e baixar e adicionar o arquivo Chart.js no diretório estático.



Então, no arquivo da aplicação.py, criamos uma função chamada update_data, que será chamada pelo Spark através da URL http://localhost:5001/ updateData para atualizar as matrizes de valores e etiquetas globais.

Além disso, a função refresh_graph_data é criada para ser chamada pela solicitação AJAX para retornar os novos rótulos e matrizes de valores atualizados como JSON. A função get_chart_page renderizará a página chart.html quando chamada.

from flask import Flask,jsonify,request
from flask import render_template
import ast
app = Flask(__name__)
labels = []
values = []
@app.route("/")
def get_chart_page():
 global labels,values
 labels = []
 values = []
 return render_template('chart.html', values=values, labels=labels)
@app.route('/refreshData')
def refresh_graph_data():
 global labels, values
 print("labels now: " + str(labels))
 print("data now: " + str(values))
 return jsonify(sLabel=labels, sData=values)
@app.route('/updateData', methods=['POST'])
def update_data():
 global labels, values
 if not request.form or 'data' not in request.form:
     return "error",400
 labels = ast.literal_eval(request.form['label'])
 values = ast.literal_eval(request.form['data'])
 print("labels received: " + str(labels))
 print("data received: " + str(values))
 return "success",201
if __name__ == "__main__":
 app.run(host='localhost', port=5001)


Agora, vamos criar um gráfico simples no arquivo chart.html para exibir os dados da hashtag e atualizá-los em tempo real. Conforme definido abaixo, precisamos importar as bibliotecas de JavaScript Chart.js e jquery.min.js.

Na etiqueta do corpo, temos que criar uma tela e dar-lhe uma ID para fazer referência a ela ao exibir o gráfico usando o JavaScript na próxima etapa.

<!DOCTYPE html>
<html>
 <head>
     <meta charset="utf-8"/>
     <title>Top Trending Twitter Hashtags</title>
     <script src='static/Chart.js'></script>
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
 
 </head>
 <body>
         <h2>Top Trending Twitter Hashtags</h2>
         <div style="width:700px;height=500px">
             <canvas id="chart"></canvas>
         </div>
 </body>
</html>


Agora, vamos construir o gráfico usando o código JavaScript abaixo. Primeiro, obtemos o elemento de tela, e então criamos um novo objeto de gráfico e passamos o elemento de tela para ele e definimos seu objeto de dados como abaixo.

Observe que os labels de dados e os dados são delimitados com rótulos e variáveis de valores que são retornados enquanto renderiza a página ao chamar a função get_chart_page no arquivo app.py.

A última parte restante é a função que está configurada para fazer uma solicitação Ajax a cada segundo e chama a URL /refreshData, que executará refresh_graph_data em app.py e retornará os novos dados atualizados e, em seguida, atualizará o gráfico que renderiza os novos dados.

<script>
   var ctx = document.getElementById("chart");
   var myChart = new Chart(ctx, {
     type: 'horizontalBar',
     data: {
         labels: [{% for item in labels %}
                   "{{item}}",
                  {% endfor %}],
         datasets: [{
             label: '# of Mentions',
             data: [{% for item in values %}
                       {{item}},
                     {% endfor %}],
             backgroundColor: [
                 'rgba(255, 99, 132, 0.2)',
                 'rgba(54, 162, 235, 0.2)',
                 'rgba(255, 206, 86, 0.2)',
                 'rgba(75, 192, 192, 0.2)',
                 'rgba(153, 102, 255, 0.2)',
                 'rgba(255, 159, 64, 0.2)',
                 'rgba(255, 99, 132, 0.2)',
                 'rgba(54, 162, 235, 0.2)',
                 'rgba(255, 206, 86, 0.2)',
                 'rgba(75, 192, 192, 0.2)',
                 'rgba(153, 102, 255, 0.2)'
             ],
             borderColor: [
                 'rgba(255,99,132,1)',
                 'rgba(54, 162, 235, 1)',
                 'rgba(255, 206, 86, 1)',
                 'rgba(75, 192, 192, 1)',
                 'rgba(153, 102, 255, 1)',
                 'rgba(255, 159, 64, 1)',
                 'rgba(255,99,132,1)',
                 'rgba(54, 162, 235, 1)',
                 'rgba(255, 206, 86, 1)',
                 'rgba(75, 192, 192, 1)',
                 'rgba(153, 102, 255, 1)'
             ],
             borderWidth: 1
         }]
     },
     options: {
         scales: {
             yAxes: [{
                 ticks: {
                     beginAtZero:true
                 }
             }]
         }
     }
   });
   var src_Labels = [];
   var src_Data = [];
   setInterval(function(){
     $.getJSON('/refreshData', {
     }, function(data) {
         src_Labels = data.sLabel;
         src_Data = data.sData;
     });
     myChart.data.labels = src_Labels;
     myChart.data.datasets[0].data = src_Data;
     myChart.update();
   },1000);
</script>


Execução das aplicações em conjunto
Vamos executar os três aplicativos na ordem abaixo:
1. Cliente do aplicativo do Twitter.
2. Spark App.
3. Dashboard Web App.

Então você pode acessar o painel de controle em tempo real usando a URL

Agora, você pode ver seu gráfico sendo atualizado, conforme abaixo:



Apache Streaming - Casos de uso da vida real
Aprendemos a fazer análises de dados simples em dados em tempo real usando Spark Streaming e integrando-o diretamente com um painel simples usando um serviço web RESTful. A partir deste exemplo, podemos ver o quão poderoso é o Spark, pois captura um fluxo maciço de dados, transforma-o e extrai informações valiosas que podem ser usadas facilmente para tomar decisões a qualquer momento. Existem muitos casos de uso úteis que podem ser implementados e que podem servir para diferentes indústrias, como notícias ou marketing.



Exemplo da indústria de notícias
Podemos rastrear as hashtags mais freqüentemente mencionadas para saber quais os temas em que as pessoas estão falando mais nas mídias sociais. Além disso, podemos acompanhar hashtags específicos e seus tweets para saber o que as pessoas estão dizendo sobre tópicos ou eventos específicos no mundo.

Exemplo de Marketing

Podemos coletar o fluxo de tweets e, fazendo análises de sentimentos, classificamo-los e determinemos os interesses das pessoas, a fim de direcioná-los com ofertas relacionadas aos seus interesses.

Além disso, há muitos casos de uso que podem ser aplicados especificamente para grandes análises de dados e podem servir muitas indústrias. Para mais casos de uso de Apache Spark em geral, sugiro que você verifique uma de nossas postagens anteriores.

Eu encorajo você a ler mais sobre Spark Streaming a partir daqui para saber mais sobre suas capacidades e fazer uma transformação mais avançada nos dados para obter mais informações em tempo real.

BY HANEE' MEDHAT - FREELANCE SOFTWARE ENGINEER @TOPTAL

segunda-feira, 3 de julho de 2017

Power Pivot for Excel: principais casos de uso e exemplos

Todo analista financeiro é um expert com o Excel. No entanto, à medida que o armazenamento se torna mais barato, nossas organizações estão acumulando mais dados. E cada vez mais dados tornam mais difícil o trabalho com o Excel, chegando no limite das linhas (1.048.576) ou o documento fica extremamente lento para processar os dados.

Frequentemente a decisão é se vamos perder algum dado importante, ou trabalhar ou se vamos trabalhar em um tedioso workbook. Às vezes, temos de ser criativos para combinar dois grandes conjuntos de dados. Recorremos a fórmulas enroladas e esperamos para sempre que os cálculos sejam resolvidos.

Felizmente, você não precisa mais tomar essas decisões. A funcionalidade Power Pivot do Excel fornece uma maneira de extrair, combinar e analisar grandes conjuntos de dados. Apesar de ter sido lançado com o Excel 2010, a maioria dos analistas financeiros que conheço ainda não sabe como usar o Power Pivot, e muitos não sabem que ele existe.

Neste artigo, vou mostrar-lhes como usar o Power Pivot para superar problemas comuns do Excel e dar uma olhada em vantagens adicionais do software usando alguns exemplos. Este tutorial Power Pivot para Excel deve servir como um guia e, no final, explorarei alguns exemplos de casos de uso em que o Power Pivot pode ser inestimável.

O que é Power Pivot e porque ele é útil?

Power Pivot é uma característica do Microsoft Excel que foi introduzida como um complemento para o Excel 2010 e 2013 e agora é uma característica nativa para o Excel 2016. Como a Microsoft explica, o Power Pivot para Excel "permite que você importe milhões de linhas de dados de múltiplas fontes de dados em uma única pasta de trabalho do Excel, criar relacionamentos entre dados heterogêneos, criar colunas e medidas calculadas usando fórmulas, criar tabelas dinâmicas e gráficos dinâmicos e depois analisar os dados de forma que você possa tomar decisões de negócios oportunas sem requerer assistência de TI".

O idioma de expressão primário que a Microsoft usa no Power Pivot é DAX (Data Analysis Expressions), embora outros possam ser usados em situações específicas. Mais uma vez, como a Microsoft explica, "DAX é uma coleção de funções, operadores e constantes que podem ser usadas em uma fórmula, ou expressão, para calcular e retornar um ou mais valores. Dito de forma mais simples, o DAX ajuda você a criar novas informações a partir de dados já em seu modelo. "Felizmente, para aqueles que já estão familiarizados com o Excel, as fórmulas DAX serão familiares, uma vez que muitas das fórmulas têm uma sintaxe semelhante (por exemplo, SUM, AVERAGE, TRUNC) .

Para maior clareza, os principais benefícios do uso do Power Pivot vs. Excel básico podem ser resumidos a seguir:

  • Ele permite importar e manipular centenas de milhões de linhas de dados onde o Excel tem uma restrição difícil de pouco mais de um milhão de linhas.
  • Ele permite importar dados de várias fontes para uma única pasta de trabalho de origem sem ter que criar várias folhas de origem que sofram problemas de controle de versão e transferibilidade.
  • Ele permite que você manipule os dados importados, analise-o e tire conclusões sem diminuir o ritmo do seu computador.
  • Ele permite que você visualize os dados com PivotCharts e Power BI.


Nas seções a seguir, vou percorrer cada um dos itens acima e mostrar-lhes como o Power Pivot para Excel pode ser útil.

1) Importando grandes Datasets

Conforme discutido anteriormente, uma das principais limitações do Excel diz respeito ao trabalho com conjuntos de dados extremamente grandes. Felizmente para nós, o Excel agora pode carregar bem o limite de um milhão de linhas diretamente no Power Pivot.

Para demonstrar isso, gerei um conjunto de dados de amostra de dois anos de vendas para um varejista de produtos esportivos com nove categorias de produtos diferentes e quatro regiões. O conjunto de dados resultante é de dois milhões de linhas.

Usando a guia Dados na faixa de opções, criei uma nova consulta a partir do arquivo CSV. Essa funcionalidade costumava ser chamada de PowerQuery, mas a partir do Excel 2016, ela está integrada na guia Dados do Excel.

Exibição 1: Criando a Nova Query



De uma pasta de trabalho em branco no Excel para carregar todos os dois milhões de linhas no Power Pivot, demorou cerca de um minuto! Observe que eu consegui realizar alguma formatação leve de dados promovendo a primeira linha para se tornar o nome da coluna. Ao longo dos últimos anos, a funcionalidade Power Query melhorou grandemente de um suplemento do Excel para uma parte bem integrada da guia Dados na barra de ferramentas. Power Query pode girar, aplainar, limpar e moldar seus dados através de seu conjunto de opções e seu próprio idioma, M.

2) Importando Dados de Multiplas Fontes

Um dos principais benefícios do Power Pivot para Excel é a capacidade de importar facilmente dados de várias fontes. Anteriormente, muitos de nós criamos várias planilhas para nossas várias fontes de dados. Muitas vezes, esse processo envolveu escrever código VBA e copiar/colar dessas fontes diferentes. Felizmente, para nós, o Power Pivot permite que você importe dados de fontes de dados diferentes diretamente para o Excel sem ter que executar os problemas mencionados acima.

Usando a função Query na Exibição 1, podemos tirar de qualquer uma das seguintes fontes:

  • Microsoft Azure
  • SQL Server
  • Teradata
  • Facebook
  • Salesforce
  • JSON files
  • Excel workbooks
  • ...e muito mais 
Além disso, várias fontes de dados podem ser combinadas na função Query ou na janela Power Pivot para integrar dados. Por exemplo, você pode retirar dados de custo de produção de um workbook do Excel e resultados de vendas reais do servidor SQL através da Consulta no Power Pivot. A partir daí, você pode combinar os dois conjuntos de dados combinando os números de produção-lote para produzir margens brutas por unidade.

3) Trabalhando com grandes Datasets

Outra vantagem importante do Power Pivot para Excel é a capacidade de manipular e trabalhar com grandes conjuntos de dados para tirar conclusões e análises relevantes. Eu vou percorrer alguns exemplos comuns abaixo para lhe dar uma idéia do poder da ferramenta.

Medidas

Junkies do Excel, sem dúvida, concordam que as tabelas dinâmicas são uma das mais úteis e, ao mesmo tempo, uma das tarefas mais frustrantes que realizamos. Frustrante especialmente quando se trata de trabalhar com conjuntos de dados maiores. Felizmente, o Power Pivot para Excel nos permite criar, facilmente e rapidamente, tabelas dinâmicas ao trabalhar com conjuntos maiores de dados.

Na imagem abaixo (Exibição 2), observe como a janela do Power Pivot é separada em dois painéis. O painel superior possui os dados e o painel inferior abriga as medidas. Uma medida é um cálculo que é executado em todo o conjunto de dados. Eu entrei uma medida digitando a célula destacada.



Exibição 2: Criando Medidas



A partir daí, observe como é rápido criar uma tabela dinâmica familiar em um conjunto de dados grande.

Exibição 3: Criando uma PivotTable



Dimensão de Tabelas

Como analistas financeiros usando o Excel, nos tornamos adeptos do uso de fórmulas enroladas para dobrar a tecnologia à nossa vontade. Nós dominamos VLOOKUP, SUMIF, e até mesmo o temido INDEX(MATCH()). No entanto, usando o Power Pivot, podemos lançar muito disso na janela.

Exibição 4: Adicionando uma User-Created Table no modelo do Power Pivot



Para demonstrar essa funcionalidade, criei uma pequena tabela de referência na qual atribuí cada Categoria a um Tipo. Ao escolher "Adicionar ao modelo de dados", esta tabela é carregada no Power Pivot (Figura 4 acima).

Eu também criei uma tabela de datas para usar com nosso conjunto de dados. O Power Pivot para Excel facilita a criação rápida de uma tabela de datas para consolidar por meses, trimestres e dias da semana. O usuário também pode criar uma tabela de data mais personalizada para analisar por semanas, anos fiscais ou qualquer grupo específico da organização.

Exibição 5: Criando um Date Table



Colunas Calculadas

Além das medidas, existe outro tipo de cálculo: colunas calculadas. Os usuários do Excel estarão à vontade para escrever essas fórmulas, pois são muito semelhantes às fórmulas de escrita em tabelas de dados. Criei uma nova coluna calculada abaixo, que classifica a tabela de Dados de Contabilidade por Montante. As vendas abaixo de US$50 são rotuladas como "Pequenas", e todas as outras são rotuladas como "Grande". A fórmula não se parece intuitiva?

Exibição 6: Criando uma coluna calculada



Relacionamentos

Podemos então criar uma relação entre o campo Categoria da tabela de dados contábeis e o campo Categoria usando a visualização do diagrama. Além disso, podemos definir um relacionamento entre o campo Data de vendas da Tabela de dados contábeis e o campo Data da tabela do calendário.

Exibição 7: Definindo Relacionamentos



Agora, sem nenhuma função SUMIF ou VLOOKUP necessária, podemos criar uma tabela dinâmica que calcula as vendas totais por ano e tipo, com um "slicer" para o tamanho da transação.

Exibição 8: PivotTable Usando Relacionamentos



Ou, podemos criar um gráfico de vendas médias para cada dia da semana usando a nova tabela de calendário.

Exibição 9: PivotChart Usando Relacionamentos



Embora este gráfico pareça simples, é impressionante que demorou menos de dez segundos para criar uma consolidação de mais de dois milhões de linhas de dados, sem adicionar uma nova coluna aos dados de vendas.

Ao ser capaz de executar todos esses cenários de relatórios consolidados, sempre podemos seguir detalhando os itens de linha individuais. Nós mantemos nossos dados altamente granulares.

Funções Avançadas

Até agora, a maioria das análises que mostrei são cálculos relativamente diretos. Agora, eu quero demonstrar algumas das capacidades mais avançadas desta plataforma.

Inteligência de Tempo

Muitas vezes, quando examinamos os resultados financeiros, queremos compará-lo a um prazo comparável ao ano anterior. Power Pivot possui algumas funções de inteligência do tempo incorporado.

Same Period Last Year Sales:=CALCULATE([Total Sales],SAMEPERIODLASTYEAR('Calendar'[Date]))
YOY Sales Growth:=if(not(ISBLANK([Same Period Last Year Sales])),([Total Sales]/[Same Period Last Year Sales])-1,BLANK())

Por exemplo, adicionar apenas duas medidas acima para a tabela de dados contábeis no Power Pivot me permite produzir a seguinte tabela dinâmica em poucos cliques.

Exibição 10: Time Intelligence PivotTable



Granulidades Desiguais

Como analista financeiro, um problema que tenho para resolver muitas vezes é a de granularidades incompatíveis. Em nosso exemplo, os dados de vendas reais é mostrada no nível de categoria, mas vamos preparar esse orçamento só no nível sazonal. Para promover essa incompatibilidade, vamos preparar orçamento trimestral, embora os dados de venda sejam diários.

Exibição 11: Granularidades Desiguais - Tabela de Orçamento



Com Power Pivot para Excel, esta inconsistência é facilmente resolvida. Ao criar duas tabelas de referência adicionais ou tabelas de dimensão na nomenclatura de banco de dados, agora podemos criar os relacionamentos apropriados para analisar nossas vendas reais contra os valores orçamentados.

Exibição 12: Granularidades Desiguais - Relacionamentos



No Excel, a seguinte tabela dinâmica se junta rapidamente.

Exibição 13: Granularidades Desiguais - Orçamento vs. Resultados Atuais



Além disso, podemos definir novas medidas que calculem a variação entre as vendas reais e as vendas orçamentadas conforme abaixo:

Actual-to-Budget Variance:=if(ISBLANK([Total Budgeted Sales]),BLANK(),[Total Sales]/[Total Budgeted Sales]-1)

Usando essa medida, podemos mostrar a variância em uma tabela dinâmica.

Exibição 14: Granularidades Desiguais - Variação de Resultados



Total percentual

Finalmente, vamos examinar as vendas em uma categoria específica como uma porcentagem de todas as vendas (por exemplo, contribuição da categoria para as vendas globais) e as vendas em uma categoria específica como uma porcentagem de todas as vendas do mesmo tipo (por exemplo, contribuição da categoria para o tipo de vendas sazonal). Eu criei as duas medidas abaixo:

Total Sales as Percent of All Sales:=[Total Sales]/CALCULATE([Total Sales],ALL('Accounting Data')) Total Sales as Percent of Type:=[Total Sales]/CALCULATE([Total Sales],ALL('Accounting Data'[Category]))

Essas medidas agora podem ser implantadas em uma nova tabela dinâmica:



Observe como os cálculos são realizados na categoria e no tipo sazonal. Eu amo o quão rápido e sem esforço esses cálculos são realizados em um conjunto de dados tão grande. Estes são apenas alguns exemplos da elegância e pura potência computacional do Power Pivot.

Compressão

Outro benefício é que o tamanho dos arquivos diminui. O tamanho do arquivo original era de 91MB, e agora ele está abaixo de 4MB. Essa é uma compressão de 96% do arquivo original.

Exibição 16: Tamanho dos arquivos



Como isso acontece? Power Pivot usa o mecanismo xVelocity para comprimir os dados. Em termos simples, os dados são armazenados em colunas em vez de linhas. Esse método de armazenamento permite que o computador comprima valores duplicados. No nosso conjunto de dados de exemplo, existem apenas quatro regiões que são repetidas em todos os dois milhões de linhas. Power Pivot para Excel pode armazenar mais eficientemente esses dados. O resultado é que, para dados que possuem muitos valores de repetição, custa muito menos para armazenar esses dados.

Uma coisa a ser observada é que usei valores de dólares inteiros neste conjunto de dados de amostra. Se eu incluísse dois pontos decimais para refletir centavos, o efeito de compressão diminui para 80%.

SSAS Tabular

Os modelos Power Pivot também podem ser escaláveis para toda a empresa. Digamos que você crie um modelo Power Pivot que começa a ganhar muitos usuários na organização, ou os dados crescem para dez milhões de linhas, ou ambos. Neste ponto, você pode não querer que trinta usuários diferentes atualizem o modelo ou façam mudanças. O modelo pode ser perfeitamente convertido em tabelas SSAS. Todas as tabelas e relacionamentos são mantidos, mas agora você pode controlar a freqüência de atualização, atribuir funções (por exemplo, somente leitura, ler e processar) para vários usuários e implantar apenas um pequeno front-end do Excel que se vincula ao modelo Tabular. O resultado é que seus usuários podem então acessar o modelo Tabular implantado com uma pasta de trabalho pequena, mas não ter acesso às fórmulas e medidas.

4) Data Visualization and Analysis

CUBE Formulas


Um dos constantes pedidos de meus clientes é que eu crie relatórios que estejam de acordo com um layout estritamente definido. Eu tenho clientes que solicitam larguras de colunas específicas, códigos de cores RGB e nomes e tamanhos de fontes pré-definidos. Considere o seguinte painel:



Como preenchemos os números de vendas sem gerar tabelas dinâmicas se todas as nossas vendas estiverem alojadas no Power Pivot for Excel? Usando fórmulas CUBE! Podemos escrever fórmulas de CUBE dentro de qualquer célula do Excel e isso irá realizar o cálculo usando o modelo Power Pivot que já construímos.

Por exemplo, a seguinte fórmula é digitada na célula em "2016 Total Sales:"



A primeira parte da fórmula, destacada em amarelo, refere-se ao nome do modelo Power Pivot. Em geral, é ThisWorkbookDataModel para versões mais recentes do Power Pivot para Excel. A porção em verde define que queremos usar a medida Vendas totais. A parte em azul instrui o Excel a filtrar apenas as linhas que possuem uma Data de Vendas com um ano igual a 2016.

Por trás das cenas, o Power Pivot construiu um cubo OLAP (Online Analytical Processing) com os dados, colunas calculadas e medidas. Este design permite que o usuário do Excel acesse os dados obtendo diretamente com as funções CUBE. Usando as fórmulas do CUBE, consegui construir declarações financeiras completas que estejam em conformidade com layouts predefinidos. Esta capacidade é um dos destaques do uso do Power Pivot para Excel para análise financeira.

Power BI

Outra vantagem do Power Pivot para o Excel é que você pode rapidamente tomar qualquer pasta de trabalho Power Pivot que você cria e convertê-la rapidamente em um modelo Power BI. Ao importar a pasta de trabalho do Excel diretamente no aplicativo Power BI Desktop ou no Power BI Online, você pode analisar, visualizar e compartilhar seus dados com qualquer pessoa em sua organização. Essencialmente, o Power BI é o Power Pivot, o PowerQuery e o SharePoint juntos. Abaixo, criei um painel de bordo ao importar o Power Pivot para Excel anterior para o aplicativo de desktop Power BI. Observe como a interface é interativa:

Exibição 18: Power BI



Uma ótima coisa sobre o Power BI é a Q&A da linguagem natural. Para demonstrar, eu carreguei o modelo Power BI na minha conta de Power BI online. No site, posso fazer perguntas e o Power BI constrói a análise apropriada à medida que escrevo:

Exibição 19: Linguagem Natural do Q&A



Esse tipo de capacidade de consulta permite que o usuário faça perguntas sobre o modelo de dados e interaja com os dados de uma maneira mais fácil do que no Excel.

Outro benefício do Power BI é que os desenvolvedores da Microsoft estão constantemente lançando atualizações para ele. Novos recursos, muitos solicitados pelo usuário, são lançados mensalmente. O melhor de tudo, é uma transição perfeita do Power Pivot para Excel. Então, o tempo que você investiu aprendendo as fórmulas DAX pode ser implantado no Power BI! Para o analista que precisa compartilhar sua análise para muitos usuários em dispositivos variados, o Power BI pode valer a pena explorar.

Melhores Práticas

Uma vez que você começa, há algumas boas práticas que você deve seguir.

O primeiro é decidir cuidadosamente o que importa em primeiro lugar. Você já usa o endereço residencial do vendedor? Preciso conhecer o endereço de e-mail do meu cliente no contexto desta pasta de trabalho? Se o objetivo é agregar os dados em um painel, alguns dos dados disponíveis não serão necessários para esses cálculos.

Outra prática recomendada é lembrar que Power Pivot não é o Excel. No Excel, estamos acostumados a criar cálculos expandindo constantemente nossas planilhas para a direita. Power Pivot para Excel processa os dados de forma mais eficiente se limitarmos esse desejo de destino manifesto. Em vez de criar continuamente colunas calculadas à direita de seus dados, aprenda a escrever medidas no painel inferior. Este hábito assegurará tamanhos menores de arquivos e cálculos mais rápidos.

Finalmente, gostaria de sugerir o uso de nomes simples em inglês para medidas. Passei os primeiros anos fazendo nomes como SumExpPctTotal, mas uma vez que outras pessoas começaram a usar os mesmos workbooks, eu tinha que dar muitas explicações. Agora, quando eu iniciar uma nova pasta de trabalho, uso nomes de medidas como "Linha de despesas como porcentagem de despesas totais".

Casos de Uso do Mundo Real

Neste artigo, eu mostrei apenas um punhado das maneiras pelas quais o Power Pivot para Excel permite que você dê um passo importante além do Excel simples. Eu pensei que seria útil realçar alguns casos de uso do mundo real em que Power Pivot para Excel é extremamente útil.

Analise do desempenho de um grande portfólio de ativos em diferentes intervalos de tempo: desde que o Power Pivot for Excel nos permite definir medidas que comparem um período de tempo com o anterior, podemos rapidamente ter um trimestre a trimestre, ano a ano, E o desempenho de um mês a outro de forma contínua, escrevendo apenas algumas medidas.

Resumir dados contábeis usando níveis de agregação personalizados: ao identificar cada item de linha de razão geral por nome, categoria e demonstração financeira, os relatórios podem ser criados rapidamente, que incluem os itens de linha apropriados.

As cadeias podem identificar vendas na mesma loja: usando uma tabela que mapeia quando as lojas estão online, os resultados financeiros podem ser comparados na mesma loja.

BY ELLEN SU - FINANCE EXPERT @ TOPTOTAL

sábado, 3 de junho de 2017

Tirando a IKEA da caixa e redesenhando para seus 1.6 bilhões de usuários



Mais de 1,6 bilhão de pessoas visitaram o site da IKEA em 2015. Isso é um quinto da população mundial e mais da metade de todas as pessoas com acesso à internet.

Mas, apesar desse alcance incrivelmente impressionante, a IKEA teve um problema de conversão. As plataformas on-line e móveis da loja fizeram um trabalho ruim de conversão de consumidores mais jovens, e a razão não era a falta de apelação ou preço da marca - era uma experiência de usuário desastrosa e desatualizada.



Veja a barra de pesquisa no topo do antigo site.

Poucos usuários da IKEA - se houver - conhecem os nomes suecos exatos dos produtos que procuram, por isso tendem a procurar uma categoria de produtos em vez de um item específico.

Infelizmente, no site atual da IKEA, uma busca simples de "estante de livros" retornou esses resultados:



Uma pesquisa de acompanhamento revelou que a IKEA se refere à maioria das estantes de livros como estantes, mas isso não deveria ter importado.

Os Millennials esperam que suas consultas sejam compreendidas pela primeira vez, e os consumidores mais antigos estão começando a esperar o mesmo.

A partir da home page para as páginas de produtos individuais, a forma de fazer grandes coisas da IKEA prejudicaram sua capacidade para alcançar uma geração inteligente.

Então, como fizemos com que a experiência do usuário da IKEA seja mais intuitiva, mais voltada para frente e mais significativa para os consumidores jovens, enquanto mantém a marca que, literalmente, bilhões de pessoas - jovens e antigos - já confiam? Permita-nos compartilhar nossas instruções passo a passo. (Chave inglesa não incluída).

Passo 1: projete uma primeira experiência amigável.

No site atual da IKEA, os visitantes foram recebidos instantaneamente com um pop-up, pedindo-lhes que se inscrevam para a lista de discussão. O pop-up foi abrasivo e desagradável. Ele estabeleceu o tom errado, então nós acabamos com isso.




Modified Image
Original Image


Substitui o pop-up por uma caixa de deslocamento mais sutil, que aparece depois de um usuário estar no site por pelo menos um minuto.

A opção de inscrição não interfere com o resto do site, e oferece economias instantâneas se o usuário optar por se juntar à lista de endereços. Como os compradores da IKEA tendem a ser conscientes dos custos, encontramos essa abordagem mais suave com uma oferta adicional para ser muito mais eficaz.

Passo 2: Reestruturar a página inicial

Em seguida, a página inicial estava muito confusa com informações e opções.

O site parecia ocupado, e nenhuma seção particular imediatamente chamou a atenção, criando uma experiência que se sentia avassaladora.

Optamos por reduzir drasticamente o conteúdo na página inicial, focando principalmente em um slider de imagem grande, que apresentou imagens de diferentes tipos de ambientes.

Também criamos as imagens mais representativas da base de clientes reais da IKEA.

O antigo site apresentava grandes salas em casas inatingíveis. A coisa é: a maioria dos americanos hoje são locatários.

As gerações mais jovens estão adiando casar, ter filhos e comprar casas.

Então substituímos as fotos prístinas, usadas na página inicial e nas páginas de destino da categoria, com imagens que refletem uma variedade muito mais ampla de arranjos de vida e estilos pessoais.



Nossas fotos apresentam exemplos de layout de cozinha (como o acima mencionado) e outros exemplos relacionados a pessoas ativas em torno de uma categoria específica - principalmente em apartamentos e espaços de vida menores.



Passo 3: Revisar a busca no IKEA

Lembra-se daquela maldita pesquisa de "estante de livros"?

Não foi um incidente isolado.

Por exemplo, procurar no site antigo para "sofá" não retornou nenhum produto correspondente. Por outro lado, a procura de "sofá" produziu 1095 resultados. Isso não é bom.

Então, nosso próximo passo foi uma revisão total do recurso de pesquisa da IKEA, utilizando os últimos avanços no processamento de linguagem natural e busca semântica usando a API do wit.ai.

O objetivo era capacitar os usuários para que pudessem encontrar o que procuravam o mais rápido possível sem ter que navegar pelas complexas hierarquias da sala empregadas pelo site atual da IKEA.



Passo 4: Redesenhar a experiência móvel.



Hoje, 68% dos americanos e mais de 85% dos smartphones dos Millennials e 87% dos usuários de smartphones informam que nunca se separam de seus dispositivos móveis. Não é necessário dizer que a plataforma móvel é uma necessidade absoluta para qualquer negócio.

O site móvel da IKEA foi essencialmente uma versão reduzida de seu site completo - não intuitivo e não amigável para dispositivos móveis.

Nosso primeiro passo foi integrar nossos recursos de pesquisa aprimorados no site móvel, tornando mais fácil para os usuários chegar ao produto de sua escolha.





Também integramos uma ferramenta de digitalização de código de barras para que as pessoas que comprassem nas lojas da IKEA possam procurar informações e críticas mais detalhadas sobre o produto antes de comprar.

Cinquenta e sete por cento dos compradores móveis comparam preços e produtos nas lojas, então essa adição foi vital.



Então fizemos atualizações sérias para o aplicativo IKEA.

As mudanças que fizemos incluíram facilitar a acessibilidade, o recurso de lista de compras e oferecer dicas de design semanais.





Sair da caixa e no futuro

A presença on-line desatualizada da IKEA foi dissuasora para os consumidores mais jovens, mas as mudanças que incorporamos atraem todos os fatores demográficos.

Ao oferecer a toda a presença on-line da empresa um design mais intuitivo e avançado, habilitamos a IKEA a permanecer fiel à sua marca, criando uma experiência melhor para todos os seus 1,6 bilhões de usuários.

Quais os problemas que você teve no passado com a experiência digital da IKEA? E como você sugere melhorá-lo?

Você pode ver a apresentação completa do projeto aqui.

BY MICHAEL ABEHSERA - DESIGN BLOG EDITOR @ TOPTAL

domingo, 28 de maio de 2017

Você precisa de um herói - o gestor de projeto

Este artigo é para você, o empresário valente com uma idéia de aplicativo em seu coração e um pouco de dinheiro no banco. Os diagramas que você rabiscou em guardanapos do coquetel será notado em todo mundo, e os caminhões de descarga cheios do dinheiro foram despachados na sua casa. Para garantir que eles cheguem a tempo, aqui estão alguns conselhos simples para fazer o seu ciclo de produção funcionar sem problemas.

Em primeiro lugar, por que você precisa de um gerente de projeto

"Os programas de computador são as coisas mais complexas que os seres humanos fazem", diz Douglas Crockford. Você pode não ter ouvido esse nome antes, mas para um programador ele é muito famoso. Ele é atualmente um arquiteto de software sênior no Paypal, e ele foi pioneiro de todos os tipos de tecnologia legal que está além do alcance deste artigo. Ele é alguém que sabe muito sobre como trabalhar em grandes projetos.

Quanto a mim, eu tenho programado por 13 anos, e até agora, em algum momento, cada projeto me leva para um território inexplorado. Há tantas tecnologias diferentes lá fora, e novas técnicas estão sendo planejadas em uma taxa tão alarmante que eu nunca sinto que estou completamente no topo do que está acontecendo. Embora cada projeto tenha seus desafios únicos, existem algumas constantes:

  • O projeto tem seu tempo de pressão.
  • O orçamento é menor do que eu gostaria.
  • Eu sou mais caro do que o cliente gostaria.
  • Eu não escuto tão bem como o cliente gostaria.
  • O cliente não explica as coisas tão perfeitamente quanto eu gostaria.
Claramente, precisamos de uma babá. Alguém tem de intervir para estabelecer as regras básicas, manter todos honestos e certificar-se de que não estamos esquecendo nada importante. Alguém tem que facilitar a comunicação entre todas as partes.

Esse alguém, esse herói, é o gerente do projeto.



Por que o gerente de produto está em uma caixa? Ele é um gato. Os gatos amam caixas.

A Toptal não ofereceu contratos com gerentes de projeto quando eu comecei a escrever este artigo, mas eles fazem agora. Sinergia! Já posso imaginar o poder que traz ler as dicas a seguir, e a percepção de que perdíamos uma grande oportunidade.

Por que um programador não se torna um bom gerente de projeto

Deixando de lado a Certificação pelo Project Management Institute, a coisa mais importante que um gerente de projeto pode trazer para a mesa é a experiência. Como resultado, muitos programadores se tornariam gerentes de projeto decentes; temos mais experiência do que ninguém em projetos técnicos e nossas mentes analíticas são adaptáveis na catalogação de informações e estabelecimento de metas concretas.

Deus sabe, você está nos pagando o suficiente, então parece razoável esperar que nós pudéssemos nos controlar, em vez de forçá-lo a pagar pelo tempo de outra pessoa também, certo?

Bem, para começar, você está nos pagando para codificar.

Quando saímos de nossa programação atordoada para tomar decisões sobre o que priorizar, ou para discutir sobre o que realmente vai ser feito esta semana, o código não está sendo escrito. Em seguida, leva pelo menos 10 minutos para voltar para a "zona", especialmente se estamos estressados pela conversa que acabamos de ter, o que é provável, se estávamos discutindo recursos prioritários. Não é grande coisa, eu sei, mas isso é tudo sobre como fazer o uso mais eficiente de recursos caros.

Mais importante ainda, nós realmente não podemos ver a floresta pelas árvores. Se você não tirar nada deste artigo, por favor, entenda isso: Se eu passar o dia todo olhando para alguns bugs específicos, meu cérebro perde o controle do quadro maior.

Meu cérebro recompensa-me quando eu corrijo os bugs, e eu suponho que fiz grandes coisas e que posso jogar video game agora. Quando alguém me lembra que a home page ainda está quebrada, vem como uma surpresa completa porque eu passei o dia enchendo meu cérebro com o conhecimento muito detalhado de um pedaço muito pequeno do projeto geral, esquecendo o resto dele. Isso é apenas como funciona o meu cérebro, e um monte de outros programadores têm um psicológico semelhante.



Quando saímos de nossa programação atordoada para tomar decisões de projeto, o código não está sendo escrito.

Por que o cliente não se torna um bom gerente de projeto

Bem, então, se nós programadores não queremos assumir a responsabilidade de fazer as coisas gerenciais do projeto, então ele deve cair para você, cliente. É o seu dinheiro. É a sua visão. Você é o responsável por tudo, de qualquer maneira.

No entanto, você também tem muito a fazer.

Muitos clientes são meros mortais com trabalhos do dia a dia, como nós, e alguns foram até mesmo conhecidos por sofrer de procrastinação ou esquecimento. Embora isso certamente não descreva você, por favor, considere a idéia de ter um 'Recordador Profissional' ao redor, de modo que possa regressar a um importante trabalho de manter o projeto com vida.

Se você trabalhou em, ou supervisionou, um projeto técnico de um âmbito semelhante, você talvez tenha se tornado, de fato, um bom gerente para o projeto. Se não, por favor, não subestime o valor de alguém que pode prever os problemas que possam surgir. Estimativas de tempo são sempre apenas estimativas, e os erros tendem a aparecer nos últimos momentos. Vale a pena o custo de outro empregado (que seja parcial) para ter alguém ao redor quem saiba que partes o processo precisa, ou são susceptíveis de necessidade, de maior atenção.

Faça, por exemplo, o controle de qualidade (QA). QA adequada é essencial para conseguir o que quer fora de qualquer projeto, e ele nunca recebe a atenção que isso merece. Um bom gerente de projeto vai aproveitar ao máximo os recursos limitados da QA, e também vai assegurar a qualidade dos programadores para você. Às vezes, nós saimos da nossa profundidade, e as vezes nós cometemos erros. Você precisa de uma pessoa tecnicamente proficiente em um papel de supervisão para determinar se o seu programador está tendo um mau dia, ou se, de fato, ele é uma boa alternativa para o projeto. Corrigir problemas pessoais desde o início pode significar a diferença entre a vida e a morte para o seu projeto.

Por último, mesmo você, ó glorioso cliente, às vezes precisa de um pouco de verificação e/ou equilíbrio. Isso é difícil de escrever uma vez que os programadores de computador não são conhecidos por sua natureza franca. É suficiente dizer que, eu tenho trabalhado em muitos projetos onde o cliente foi inflexível e que tudo era prioridade e absolutamente tudo era necessário para ficar pronto. Apesar de não ter dúvida alguma de que era verdade, infelizmente, esses clientes, não tinham o controle sobre o número de horas gastas em um dia. Eles não terminam com um resultado positivo ou desejado, e eu sinto que este resultado poderia ter sido evitado se o cliente confiasse a um Gerente de Projeto a autoridade para avaliar a carga de trabalho e com muito tato, mas firmemente, manter as coisas sob controle. É difícil não levar pro lado pessoal tomada de decisões erradas em um projeto técnico, onde é a sua idéia e seu dinheiro em jogo, sendo que o programador não se importa com tudo isto.

Uma lista incompleta de técnicas para a gestão de um projeto técnico

Se você decidiu ignorar as 1000 palavras anteriores e gerencia por si o projeto, ou se você vai contratar alguém, mas quer ser bem mais informado sobre o processo, a lista a seguir irá ajudá-lo. Eu nunca fui (oficialmente) um gerente de projeto, então eu não posso dizer que ferramentas qualquer gerente de projeto usaria, mas eu tive um bom sucesso com todas essas técnicas:

Milestones

Ao iniciar um novo projeto, a maioria das pessoas intuitivamente sabe que é importante dividir o projeto em pedaços ligeiramente mais gerenciáveis, com cada pedaço variando de algumas semanas a alguns meses de trabalho. No início do projeto, é bom ter uma reunião inicial para estabelecer esses marcos. É normal ser um pouco vago sobre como você vai alcançá-los, o mais importante é manter a verificação após cada marco, de modo a se beneficiar da compreensão melhorada de todos do projeto, e para se certificar de que os marcos do projeto ainda são (aproximadamente) do mesmo tamanho inicialmente considerado.

Tempo Estimado

Nós programadores absolutamente detestamos estimativas porque sabemos que elas estarão 'erradas' e sabemos que elas serão usadas 'contra' nós. É normal que elas sejam assim, pois por definição, elas são baseadas em um punhado de incógnitas. Também é normal que elas sejam usadas 'contra' nós porque nossos trabalhos, de certa forma, são muito confortáveis e não faz mal, de vez em quando, este tipo de pressão.

Então sinta-se livre para pedir estimativas cada vez que o trabalho começa em um novo marco. Você deve esperar uma linha ou duas para cada característica principal junto com uma estimativa aproximada de quanto tempo essa característica tomará. Eu costumo fazer uma estimativa otimista, em seguida, a dobro. Isso garante o tempo extra para as imprevisíveis armadilhas que podem surgir.

Histórias de usuário

As histórias de usuários são breves descrições de uma única peça de funcionalidade dentro do aplicativo. Elas são úteis como um registro de características importantes e deve ser bem medida, capaz de caber em uma ficha e muitas vezes acompanhada por um pouco de desenho. Mais importante ainda, elas servem como uma ponte entre o que o cliente quer e o que o programador tem que fazer. Elas devem ser simples o suficiente para o cliente entender rapidamente, mas detalhadas o suficiente para nós, programadores.

Para algumas informações rápidas sobre as histórias de usuários, eu encontrei estes tutoriais de Mountain Goat Software e Roman Pichler para ser de alta qualidade e sucinta. Para obter mais informações sobre toda a filosofia de "Agile Project Management", experimente esta postagem no blog Toptal The Ultimate Introdução à Agile Project Management por Paul Barnes.

Composiçôes (mock-ups)

Este não é um artigo sobre por que você precisa de um designer, porque eu sinto que a maioria dos clientes já entende isso, mas é preciso repetir porque você verá enormes ganhos de produtividade se você desenhar um projeto concreto, bem claro para seus programadores. Cada vez que temos que tomar uma decisão de design temos que deixar "a zona", e cada vez que temos que voltar e mudar algo, porque não foram fornecidos com o esboço final, bem, você faz a matemática ... Eu não estou reclamando, porque o design é divertido, mas na minha experiência, esta é a fonte No 1 de evitáveis horas extras faturáveis.

A maioria dos designers fornece composições, também conhecidas como comps, no Adobe Photoshop, no Adobe Illustrator ou no Sketch. Se você está fazendo isso sozinho, você pode usar uma das inúmeras ferramentas on-line como Balsamiq ou InVision. O comp não tem que ter as mesmas cores e estilos como o produto acabado (uma vez que estes podem ser facilmente alterados mais tarde), mas por favor, adicione um tempo extra para garantir que todos os elementos da interface do usuário estão presentes e contabilizados.

Reuniões de Stand-Up

Longas reuniões às vezes são inevitáveis, mas você realmente não quer sobrecarregar seus programadores ou ocupar mais do seu tempo do que é necessário. Eu tive clientes que pareciam esperar que eu me lembrasse de tudo o que foi dito durante uma reunião de duas horas e meia; Eles ficaram muito desapontados. Uma reunião stand-up é geralmente limitada a 15 minutos, e é habitual ficar durante toda ela. O aspecto permanente é importante para garantir que todos participem, bem como para manter a reunião curta.

Durante os stand-ups, todos circulam para fornecer um breve relatório de status, mantendo todos os membros da equipe atualizados sobre o progresso de cada um. Você pode encontrar mais sobre stand-ups em ExtremeProgramming.Org. Se você trabalha remotamente e não quer receber todos no Skype todos os dias, você pode tentar uma ferramenta divertida, como 15Five como uma alternativa para stand-ups. 15Five permite que os membros da equipe forneçam sua entrada sempre que for conveniente para eles, e os levará com perguntas do questionário para obter mais respostas em profundidade.

Ticketing System

Enquanto qualquer pessoa pode manter um sistema de notas e/ou Google Docs (com tarefas de todos destacados em cores diferentes), não é realmente necessário; Muitas pessoas têm tentado resolver este problema para você. Basecamp e Trello são famosos por sua facilidade de uso, enquanto Pivotal tenta encapsular toda a filosofia "ágil" em um pacote prático. Seja qual for a sua escolha, um bom sistema de anotações permitirá, no mínimo:

  • Criar tarefas
  • Atribuir prioridade e data de vencimento
  • Link de Tarefas e sub-tarefas
  • Atribuir resoluções diferentes, como "concluído" ou "Falha"
  • Mostrar todas as tarefas atribuídas a um determinado usuário


Quando um gerente de projeto mostrar-lhe 40 anotações vermelhas e brilhantes como prioridade para o mesmo dia, você vai realmente entender o valor desta visão para o projeto.



Você não tem que usar notas para controlar bugs abertos.

Controle de Versões

Você pode nem mesmo olhar para o código no sistema de controle de versão do seu projeto, mas o controle de origem (ou versão) é uma das ferramentas mais importantes à nossa disposição, o maior sistema de backup imaginável.

A maioria dos projetos modernos usam o Git, embora às vezes você funcione em Subversion (SVN) ao trabalhar em projetos que estiveram ao redor por um período. O Github permite que você hospede repositórios públicos ilimitados gratuitamente (além disso, contém a maioria dos projetos open source do mundo), enquanto o Bitbucket permite hospedar repositórios privados ilimitados e é, portanto, a escolha preferida para projetos comerciais.

Seja qual for o sistema de controle de versão que você escolher, ele armazena nosso código remotamente, caso de alguma aconteça, além de registrar cada vez que "atualizamos" o código, forçando a todos nós a escrever uma pequena mensagem descrevendo o que estávamos fazendo. Isso evita que os desenvolvedores diferentes sobrescrevam o código do outro, ele nos permite ver todas as alterações que foram feitas ao longo de um determinado período de tempo e nos permite criar novas versões de código para armazenar recursos que não serão atualizadas para produção, de imediato. Ele ainda tem um comando chamado "culpa" que mostra quem foi responsável por uma determinada linha de código, e quando ele foi atualizado.

Controle de versão é demais.

Desenvolvimento orientado a testes

Esta é uma prática relativamente cara, o que significa que não é freqüentemente empregado em projetos onde o orçamento é limitado a um par de freelancers. Então você, como um start-up, não deve se sentir muito mal por não fazer isso, mas eu tenho que pendurar a idéia na frente de você, porque ela fornece a defesa final contra bugs. Basicamente, os programadores passam horas preciosas adicionais escrevendo testes (pequenos blocos de código) que garantem que certas partes do aplicativo se comportem de maneiras específicas, previsíveis e repetitivas. Por exemplo, eu poderia escrever um teste afirmando que quando o botão "login" é clicado, um popup abre com um campo de nome de usuário nele.

A beleza dos testes é que uma vez que eu os escrevi, posso executá-los todos com um único comando. Se eu tiver 200 testes escritos, posso executá-los depois de lançar uma nova versão do aplicativo para me certificar de que nenhum bug foi introduzido em qualquer um desses 200 recursos. Não é perfeito, mas é o mais próximo possível de garantia de aplicativos livres de erros (bug-lite, pelo menos).

Em resumo

Isso é tudo que eu sei sobre gerenciamento de projetos. Eu não tenho certeza de quanto isso tudo passaria no Instituto de Gerenciamento de Projetos, mas é tudo o que eu obtive trabalhando em projetos da web ao longo da última década. Claro, eu recomendo que você contrate alguém para obter o benefício de sua experiência, mas espero que você encontre esta informação útil, mesmo se isso não é algo que você é capaz de fazer. Você será a autoridade final neste projeto, assim quanto mais você entender sobre seu funcionamento interno, mais provável será a vitória.

BY ETHAN JAMES - FREELANCE SOFTWARE ENGINEER @ TOPTAL