Pergunta

O post no cálculo linhas de tendência em um gráfico de dispersão ( como faço para calcular uma linha de tendência para um gráfico? ) é bastante útil, mas estou curioso como se poderia ir sobre encontrar uma linha de tendência em um gráfico onde o eixo-x é um campo DateTime, em vez de um inteiro . Por exemplo, considere o caso de mapear o número de assinantes de uma lista de discussão ao longo do tempo:

Jan 1: 100 assinantes
02 de janeiro: 105 assinantes
05 de janeiro: 120 assinantes
10 de janeiro: 117 assinantes
etc ...

O problema que eu estou correndo em é descobrir o 'run' (delta x) parte deste ... desde que os intervalos não vão ser uniformemente espaçados, não podemos apenas supor uma única unidade da passagem do tempo entre cada medição. Eu tenho um palpite de que eu vou ter que trabalhar para fora algum tipo de escala, mas eu estou preso lá.

Alguém pode explicar como calcular uma linha de tendência quando o eixo-x é um campo DateTime? (Se você postar um exemplo de código, C #, VB.NET ou Java seria muito apreciada!)

Foi útil?

Solução

Você vai ter que fazer uma espécie de interpolação linear. Você precisa converter as datas e horários para uma escala linear. A boa notícia é que você começa a escolher esta escala. Então calcular quantos minutos ou segundos, ou horas ... se passaram desde o início do seu enredo. então você pode usar isso como a parte de "run".

No seu exemplo, podemos sair de dias:

Jan 1: 0 dias, 100 assinantes 02 de janeiro: 1 dia, 105 assinantes Jan 5: 4 dias, 120 assinantes Jan 10: 9 dias, 117 assinantes

Outras dicas

Você sempre pode converter a data em um inteiro

a web dá este exemplo:

DateTime given = new DateTime(2008, 7, 31, 10, 0, 0);
TimeSpan t = given.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0));
long unixTime = (long) t.TotalSeconds;

Apesar de suas amostras não são uniformemente espaçados, a sua linha de tendência pode ainda ter uma constante "run".

Por exemplo, você poderia escolher intervalos de 1 semana. Nesse caso, ter o número médio de assinantes para Jan 1,2, e 5 e colocar um ponto na Jan 7. Em seguida, pegue a média para 10 Jan & 13, e traçar um ponto em Jan 14. etc ..

Se você tem um monte de dados históricos, uso intervalos de 1 mês, ou talvez trimestral seria melhor atender seus dados.

Especifique uma data de origem e considerá-lo x = 1. Escolheu horas ou 8 períodos de uma hora, se você quiser ser mais específico.

The first day:
jan 1, 2006 -> x = 1
45 days later
February 13th?? -> x = 45
2 years later:
jan 1, 2008 -> x = 730
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top