Como posso encontrar a coluna mediana em um banco de dados?

8

Tenho dados sobre o período de construção de moradias em áreas de divulgação. Transferi esses dados para minhas áreas de estudo e gostaria de determinar o período médio de construção de cada área de estudo. O único problema é que as informações das colunas são o número de habitações e eu não quero a mediana delas, mas o título da coluna para preencher a linha em um novo campo (ou algo mais indicando isso, de preferência o período no texto) formato, mas não é o fim do mundo se for apenas um número indicando o período).

Estou anexando uma imagem da tabela de atributos com os campos relevantes destacados. Existe um campo MEDIAN, mas os dados que estou usando foram criados por outra pessoa e estão mal documentados, portanto, não tenho certeza se o cálculo já foi realizado ou não.

(As sete colunas representam sete períodos de tempo sem sobreposição ordenados cronologicamente. O campo [Mediana] parece indexar o período em que a construção total ficou pela metade; ou seja, registra o tempo médio. )

Captura de tela da mesa

Emily
fonte
1
Você está pedindo o nome (ou índice) do campo em que o valor mediano ocorre? (Esse claramente não é o valor [mediano] atual). Ou talvez você esteja pedindo o nome (ou índice) do período durante o qual a primeira metade de toda a construção foi encontrada? Por exemplo, na linha 1, a construção total no final dos períodos foi de 45, 180, 485, 1495, 1995, 2130, 2130. A mediana de 2130/2 = 1065 ocorreu durante o quarto período (e, com certeza, [Mediana ] = 4) Normalmente, isso não seria chamado de "mediana", mas parece consistente com os dados atuais.
whuber
@whuber, estou paranóico por estar incorreto, porque o homem que compilou isso está em Vancouver e eu não posso perguntar a ele de imediato e ele não documentou nada nos metadados.
Emily
Ainda não tenho idéia do que significa "coluna mediana" - alguém pode reformular o título e a pergunta?
precisa saber é o seguinte
1
@ blah A terminologia está realmente correta, conforme explicado no início da minha resposta e esclarecido em um comentário à resposta de Nathanus. Para responder à sua solicitação, adicionei um parágrafo à pergunta.
whuber

Respostas:

8

Supondo que as colunas apareçam na ordem do tempo, a primeira linha (por exemplo) indica que a construção total em cada período foi

0, 0+45 = 45, 45+135 = 180, 180+405 = 585, 585+1010 = 1595, ..., 2230+0 = 2230.

A construção estava na metade em 2230/2 = 1115. Isso ocorreu durante o período 4, porque no final do período 3 o total era 585, no final do período 4 o total era 1595 e 585 <= 1115 <1595.

Este parece ser o resultado relatado pela coluna [Mediana], que fornece o índice do período (começando em 1 à esquerda).

Você pode codificar isso no seu idioma favorito . A tabela é tão pequena (100 linhas), no entanto, que uma planilha será conveniente, apenas para verificar o que você faz mais formalmente em Python ou o que quer. Aqui está o que pode parecer:

Planilha

As três primeiras linhas de dados têm os mesmos valores que o seu. As próximas duas linhas de dados (cercadas por linhas em branco) são escolhidas mais abaixo na sua tabela. As últimas cinco linhas de dados exercitam um pouco o algoritmo.

(Observe, como mostrado nas duas últimas linhas da planilha, como o Excel escolhe o período posterior sempre que o meio cai exatamente entre dois períodos. Essa não é necessariamente a resposta "correta", mas é válida.)

Aqui estão as fórmulas nas colunas H: R:

Fórmulas

Você não precisa digitar todos eles. A única digitação necessária é:

  • =H2+A2no I2. Arraste isso pelo O2. Isso calcula as somas cumulativas. Requer que as colunas A: G estejam em ordem cronológica.

  • =O2/2em P2. Isso encontra metade do total.

  • =Match(P2,H2:O2,1)no segundo trimestre. Isso indexa a coluna em que a construção estava pela metade.

  • =Offset($A$1:$G$1,0 0, Q2-1, 1, 1)em R2. Isso obtém o cabeçalho da coluna correspondente ao índice.

Em seguida, cole 0em toda a coluna H e arraste I2: R2 para quantas linhas forem necessárias.

Isso efetivamente serve como pseudocódigo para o algoritmo. A parte mais complicada será a pesquisa para implementar a MATCHfunção do Excel . Mas isso não requer nenhuma habilidade: não é ineficiente pesquisar cada matriz de somas cumulativas sequencialmente (e não com o algoritmo de pesquisa binária preferido), porque essas matrizes são muito curtas.

whuber
fonte
Muito obrigado whuber! Era isso que eu estava procurando. :)
Emily
1

Se você quiser retornar a coluna mediana, provavelmente usaria um cursor python para percorrer as linhas. Use os campos para preencher uma lista e, em seguida, retorne o item central (será indexado em [3] para 7 itens) depois de chamar a função classificada () na lista que você criou. Vou escrever um pouco de código para você quando voltar do almoço.

Nathanus
fonte
Adie a codificação até ter certeza de que é isso que é necessário!
whuber
Se é o ano ou a quantidade, é apenas a diferença entre um dicionário e uma lista, devo pensar.
Nathanus
Estive verificando manualmente o comentário de um la @ whuber na minha pergunta e talvez a coluna esteja correta, embora seja bom saber como fazer isso para futuras regiões de estudo (que não possuem essas colunas)
Emily
Eu acho que é um cálculo completamente diferente, @ Nathanus. Um vê os dados como um conjunto não ordenado de contagens {x1, x2, ..., x7} enquanto o outro os vê como diferenças em uma sequência (0, x1, x1 + x2, x1 + x2 + x3, ..., x7) representando uma distribuição cumulativa ao longo do tempo. A mediana das contagens será um valor excedido em três deles e maior ou igual aos outros três. A mediana da distribuição cumulativa é um tempo, não uma contagem, e é encontrada usando os métodos descritos na minha resposta.
whuber
1
Você está certo: a distinção não é clara na pergunta. Ele só saiu nos comentários. Eu inseri um pequeno parágrafo explicativo na pergunta.
whuber