quinta-feira, 31 de agosto de 2023

Uma resposta e uma pergunta

Vi recentemente naquela plataforma anteriormente conhecida como Twitter esta afirmação
Não sei como se designa... X-eet?
Não resisti a ir verificar, e mais, a ver se haveria outra coincidência para além da trivial unidade.
Não sei se existe uma demonstração, mas explorei até à soma dos primeiros 100000 quadrados, e não encontrei outra
Programazinho em Python
Ocorreu-me contudo uma pergunta a que não sei responder: será possível encaixar estes 24 quadrados, com lados de 1 a 24, num quadrado maior com lado 70? 

domingo, 28 de fevereiro de 2021

Um ano com o SARS-CoV-2

Completam-se hoje 52 semanas com casos CoVid-19 em Portugal.
Os primeiros casos registaram-se na semana 10 de 2020, que se iniciou em 2 de Março, e, desde então, foram registados 804562 casos e 16317 óbitos.
Estes números tiveram uma evolução complexa, quer no tempo, quer no espaço, dando origem a inúmeras explicações e controvérsias, de que são exemplo as sessões no Infarmed.

Indicadores de incidência por região

Nos sistemas dinâmicos, costuma usar-se uma representação bidimensional (posição, velocidade), ou quantidade de movimento, para caracterizar o seu estado. 
A posição, por si só, tem muito pouca informação. Imaginemos dois carros fotografados numa autoestrada, próximos um do outro. Será que o que vai à frente vai ser o primeiro a chegar ao seu destino? Se soubermos as suas velocidades instantâneas já somos capazes de fazer uma melhor previsão.
Algumas pessoas usam as variáveis (infecções, óbitos) para tentar compreender a evolução da pandemia. Outros usam as variáveis (hospitalizações, camas ocupadas em UCI), por exemplo.
Calculei os números acumulados, semana a semana, de casos e de óbitos em Portugal, desde a semana 10 de 2020 até à semana 8 de 2021, que hoje terminou, e a leitura destas 52 semanas é surpreendente.

(casos, óbitos) acumulados por semana

Há trajectórias muito curiosas.
Entre a semana 10 e a semana 41 de 2020, os números foram contidos, e estiveram sempre bem abaixo dos 10000 casos por semana. 
Na semana 41 (5 de Outubro de 2020) algo ocorreu que impulsionou os casos até mais de 40000 semana, na semana 47, em que os casos começaram a decrescer até aos cerca de 20000 na semana 52.
Nesta semana (21 de dezembro de 2020), verificou-se um novo e brutal impulso, que levou os casos até cerca de 90000 por semana e os óbitos até cerca de 2000 por semana nas semanas 3 e 4 de 2021, estando agora a decrescer até hoje, em que parece que nos aproximamos da posição de partida.
Não vou especular aqui no que se terá passado naquelas duas semanas, em que foi como se ao sistema tivessem sido aplicadas violentas forças externas, mas sem dúvida que há aqui umas trajectórias elípticas (os óbitos estão atrasados em relação aos casos) e umas violentas perturbações.

segunda-feira, 15 de fevereiro de 2021

Análise de dados e visualização de informação

A pandemia fez-nos pensar que os números muitas vezes representam realidades que nos afectam e evidenciou a importância da visualização de dados  e da comunicação gráfica no mundo de hoje.
Neste primeiro gráfico, representa-se o número de casos e de óbitos CoVid-19 em Portugal dia a dia, desde o dia 2 de Março de 2020, bem como as suas médias móveis de 7 dias.

Dados cronológicos

Os números diários apresentam grandes variações, o que se compreende pela possibilidade de alguns registos não ocorrerem no próprio dia do acontecimento, mas as médias móveis de 7 dias são bastante mais regulares. Ao considerar as médias ao longo de uma semana completa, retiram-se os efeitos dos dias da semana não serem todos iguais do ponto de vista do registo.
As médias de sete dias também permitem melhor identificar os máximos e os mínimos das ocorrências.
Um pormenor importante consiste em saber se os sete dias que são considerados na média são o dia actual e os seis anteriores ou o dia actual, os três anteriores, e os três seguintes.
Normalmente, nestes casos, consideram-se apenas ou dias anteriores, o que quer dizer que há um atraso de 3 dias no cálculo dos valores da média. [alguns leitores recordarão o que são filtros de fase zero e de fase linear, e a noção de atraso de grupo]
Há outra forma de visualizar estes dados, através da trajectória no plano de um ponto com coordenadas (casos, óbitos), e passando a variável cronológica a ser um parâmetro da trajectória.

Trajectórias (casos, óbitos)

Os dias estão numerados desde o dia 2 de Março de 2020 (dia 1) até ao dia 350 (14 de Fevereiro de 2021).
Nesta visualização, inspirada no espaço das fases dos sistemas dinâmicos (posição, velocidade), intui-se que o sistema mostra uma certa "inércia", isto é, que há uma trajectória que não poderá ser modificada de uma forma abrupta sem uma causa externa muito forte.
Aquela seta cor de laranja procura evidenciar que a variação diária da média móvel de 7 dias será 1/7 da variação dos valores entre o dia em causa e o dia homólogo da semana anterior:
     mm7(n) = [x(n)+x(n-1)+x(n-2)+x(n-3)+x(n-4)+x(n-5)+x(n-6)]/7
     mm7(n) = mm7(n-1)+[x(n)-x(n-7)]/7.
[alguns leitores recordarão aqui que os filtros de média podem ser realizados de uma forma recursiva ou não recursiva]
A capacidade de compreender informação apresentada de uma forma gráfica é uma das dimensões do pensamento computacional, e excede muito a representação de variáveis, ou de conjuntos de variáveis função da mesma variável independente.
Os que gostam de usar a linguagem Python podem olhar para esta galeria da biblioteca seaborn.

domingo, 13 de dezembro de 2020

Saber é... saber perguntar

Pensamento computacional é um misto de muitas atitudes, que basicamente se reduzem a pensarmos sempre em como ensinaríamos um computador (uma máquina programável) a encontrar as respostas às nossas perguntas, sejam elas quais forem.
Um computador não faz perguntas, ajuda-nos a encontrar respostas.
O Google não ensina, ajuda-nos a aprender.
Mas perguntar ao Google é difícil, há quem encontre as respostas à primeira tentativa e há quem nunca as encontre. Pensamento computacional ajuda...


Só sabemos verdadeiramente um assunto quando somos capazes de formular perguntas, por mais complexo e trabalhoso que seja o caminho para encontrar a resposta.


Os humanos comunicam com as máquinas (que alguns criaram) usando linguagens (que outros criaram) e partilhando conceitos.
Portanto, "convencer" uma máquina a dar-nos uma resposta obriga a saber formular a pergunta e a traduzí-la numa linguagem que a máquina entenda, tirando partido das características mais próprias das máquinas, não se importa de realizar tarefas repetitivas, não se cansa, não inventa...
Tratar uma máquina como uma máquina, é uma das dimensões fundamentais do pensamento computacional.

quarta-feira, 26 de dezembro de 2018

Permutações

Perguntava o Público na semana passada: se colocarmos por ordem alfabética todas as "palavras" de sete letras que se podem obter permutando as sete letras da palavra SETÚBAL, qual será a palavra que aparece na posição 2018ª?
O número total de permutações é 7! = 7x6! = 7x720 = 5040, e agora temos de imaginar como se colocam por ordem alfabética e qual surgirá na posição 2018.
Colocando as sete letras por ordem alfabética, obtemos ABELSTÚ, o que quer dizer que das 5040 palavras, as primeiras 720 começam por A, as 720 seguintes, nas posições 721 a 1440, começam por B, as seguintes, nas posições 1441 a 2160, começam por E, etc. 2018 fica neste grupo, logo a palavra procurada começa por E.
A seguir, podemos procurar a segunda letra, dividindo este grupo em 6 grupos de comprimento 120, uma vez que 6! = 6x5! = 6x120, depois o grupo em que 2018 recair em 5 grupos de comprimento 24, etc.
Deixando um bocadinho de mistério para o leitor, a figura seguinte esquematiza todo o raciocínio, e dá o resultado: ETÚABSL.


Evidentemente que um computador resolve isto à força e com uma perna às costas:


É só experimentar.
Mas a ideia geral é que perante cada problema cada um deve olhar para os recursos (de conhecimentos e de computação) de que dispõe e procurar uma forma de o resolver.
Ou esperar pelo Público da próxima semana...

sexta-feira, 8 de dezembro de 2017

Pensamento Computacional: uma competência para o futuro

Magnífico, o artigo de Arlindo Oliveira no Público de hoje.
Felizmente, começam a ser notórios os sinais de que a sociedade civil, os actores do processo educativo, estão a despertar para as novas mentalidades essenciais para compreender o mundo de hoje, o estranho mundo de hoje, para aí viver e sobreviver, para compreender os fenómenos emergentes, desde a "inteligência" artificial às cripto-moedas e às notícias "falsas", para perceber como se podem "roubar" 54 milhões de Euros em bitcoins, para perceber como um "jogo" como os CryptoKitties pode ser um sucesso.
Cada vez mais, é essencial compreender a posição relativa do homem e da máquina, do "Program or be Programmed", do pensamento computacional, da capacidade de entender os problemas e de formular soluções numa linguagem que uma máquina seja capaz de executar.

domingo, 8 de outubro de 2017

Diz respeito a todos!

Nos tempos de hoje, e cada vez mais, exige-se que cada um que compreenda a nova realidade que os computadores e as redes determinam, e com os quais todos nos defrontamos no dia a dia, quer quando usamos o Google e o Facebook, quando recebemos as recomendações da Amazon ou do Netflix, quando nos interrogamos sobre o que serão algoritmos, ou que é a inteligência artificial, ou se um dia uma máquina adquirirá consciência própria...
Não pode haver um aluno bem formado que não tenha reflectido sobre estes assuntos, que não compreenda como os computadores funcionam, que não tenha consciência da quantidade de informação que hoje é gerada em cada minuto, que desconheça as posições relativas do homem e da máquina, por mais fantásticas e surpreendentes que sejam as notícias que todos os dias nos batem à porta.
Hoje há enormes progressos nos domínios do processamento da voz, da análise da imagem, do processamento de linguagem natural, da interpretação da realidade, seja em drones ou em veículos auto-guiados, da informação e da contra-informação, que têm e terão impacto nas vidas futuras dos nossos jovens.
Seria desejável que todos estivessem preparados para contribuir para esta nova realidade, não obviamente através da especificação ou programação de computadores, mas através da sua capacidade de descrever processos e tarefas num linguagem que possa ser compreendida por uma máquina, por um dispositivo automático, e executada de uma forma automática.
Brevemente, nenhum curso será interessante, e eventualmente mesmo aprovado, se não contiver esta componente de formação de uma forma clara.
Ou não será assim?