radar-parlamentar / radar Goto Github PK
View Code? Open in Web Editor NEWEstamos de mudança para o GitLab: https://gitlab.com/radar-parlamentar/radar.
Home Page: http://radarparlamentar.polignu.org
Estamos de mudança para o GitLab: https://gitlab.com/radar-parlamentar/radar.
Home Page: http://radarparlamentar.polignu.org
Dica: mais fácil rodas os importers de novo, do que migrar os dados
Me parece que quando o banco de dados possui os votos das duas casas legislativas (cmsp e cdep) o gráfico fica diferente de quando só tem uma delas (isso para a análise em ambas as casas).
Investigar esta história.
valores = {'deputado estadual', 'deputado federal', 'senador', 'vereador'}. Isto poderá ser útil para a interface
Se dados forem incompletos, módulo deve usar os atributos alternativos.
Se mesmo assim não for possível fazer a análise, deve-se lançar exceções e/ou logar mensagens adequadas.
A ideia principal é que terceiros possam escrever importadores sem ter que entender o módulo analise.
Esses terceiros devem se guiar pelas mensagens de erro do módulo analise para criarem um importador adequado.
Mudar a interação cliente - servidor para que haja menos cálculos no cliente
Pra ciar um relacionamento entre objetos, é preciso salvar um deles no banco.
Isso é chato quando você quer usar as classes sem se preocupar com o BD.
Como contornar essa situação?
... e não mais ao Parlamentar.
Assim o Parlamentar passa a ter somente informações pessoais, intrínsecas, e não mais o atributo partido.
importacao? plugins? sources?
Objetivo: deixar a interface mais leve
Adicionar a possibilidade de as pessoas escolherem plotar o gráfico com as cores dos partidos ou não.
Caso o usuário acesse a URL /analises/analise/{casa_que_nao_existe}, então deveríamos mostrar uma mensagem que não existe.
Que acontece se um parlamentar troca de partido durante o período sobre qual estamos analisando os dados?
Creio que a solução seja:
no método votacao.por_partido(), a linha "part = voto.parlamentar.partido().nome" pega o partido mais recente do parlamentar.
Pois nesse momento deveria pegar o partido do parlamentar na data da votação.
Conversar com o pessoal do StrateBI pra termos o Dashboard na página do radar para que os usuários possam analisar os dados mais facilmente.
Apagar o que for preciso, mover pro projeto django o que for conveniente, e garantir que tudo fique executável
Transformar a página cmsp.html em analise.html de forma que a casa legislativa seja um parâmetro da página.
Isto deve ser feito quando já tivermos os dados da Câmara dos Deputados no banco de dados (Issue #30).
Este trabalho será testado com os dados da Câmara dos Deputados e da CMSP, mas a ideia é que já seja adequada para as próximas bases de dados convertidas.
Ajustar os links do menu do site pra essa página.
Creio que várias pessoas não técnicas possam participar da discussão do modelo.
Para isso, olhar um diagrama de classes pode ser menos intimidador do que ter que analisar a classe models.py
Página para listar as questões que hoje estão no arquivo QUESTOES e mostrar as análises encontradas. Essa página poderia ser aberta para que visitantes pudessem sugerir determinadas análises.
O processo de importação das proposições no arquivo votadas.txt* resultou em mais Legislaturas do que Parlamentares. OK, isso pode ocorrer, mas neste momento eu esperava que os dois valores fossem iguais.
Tarefa: identificar Parlamentares com mais de uma Legislatura e verificar se dados estão consistentes. Outra hipótese é que haja Legislaturas sem Parlamentar (o que não deveria acontecer).
voto x votação tá manytomany, mas um voto pertence a somente uma votação.
Obs: se o parâmetro partidos não for None, a análise deve ser feita apenas com os partidos especificados. Caso seja None, a análise deve ser feita com todos os partidos que participaram das votações.
Checar se isso já não está funcionando.
Aparentemente quando você usa uma classe como chave estrangeira no models, é preciso que esta classe já tenha sido declarada antes. Comportamento muito infeliz, seria legal contornar isso (mas longe de prioritário).
Criar um importer na app importadores para jogar os dados das votações da câmara dos deputados no banco de dados.
Rever quais estão de fato sendo utilizados e quais não estão.
Na página de cada casa legislativa, disponibilizar o SQLite com os dados da casa.
Para isso, seria melhor que as tabelas não tivessem o prefixo do nome da aplicação.
Fazer isso depois de terminar #11.
Quando eu acrescentei um atributo na classe, o syncdb não acrescentou o campo na tabela. Foi preciso deletar a tabela para o correto refactory!
Fomos pesquisar votações sobre nomeações de logradouros e aparentemente encontramos apenas uma dessas no nosso banco de dados. No entanto, uma uma busca rápida no XML de 2011, encontramos pelo menos umas 4 votações dessas. Provavelmente estamos deixando de importar várias votações para nosso banco. Investigar isso.
Isso ajuda o usuário a ter uma ideia do quão "representativa" é a figura.
Criar medida(s) da dispersão dentro de cada partido, para saber da homogeneidade de cada um;
E pensar em formas de representar isso graficamente!
"Frame" do quadro está deslocado pra baixo.
Temos que voltar ele "para cima", do lado da lista de partidos.
Obs: a lista de partidos agora tem um partido "Sem partido"
Depois de alguma pesquisa, consegui utilizar o log no Django de forma que os logs aparecem no console disparado pelo runserver.
Contudo, quando acontece algum erro, o stack trace da exceção disparada não aparece no console. Seria muito mais mió de bão se ela aparecesse.
Os testes falham quando se executa manage.py test, mas passam qd se executa o script tests.sh.
Isso porque provavelmente os testes não estão independentes.
E isso pq, me parece, q o Django limpa a base de dados no começo de todos os testes, mas não no início de cada arquivo de test.
O ideal é reescrever os testes para que eles sejam robustos quanto a isso.
tests.sh:
python manage.py test modelagem
python manage.py test analises
python manage.py test importadores
Do jeito que tá hoje, a importação em geral considera que a base de dados estará vazia.
Mas é importante que a importação possa ser rodada várias vezes pra acrescentar novas votações na base.
Considerar que uma proposição pode ter tido novas votações.
Fazer isto para a camara e para a cmsp.
O algoritmo para definir o tamanho das esferas no gráfico PCA está ajustado pra mostrar uma boa representação da Câmara Municipal de São Paulo.
Mas o mesmo algoritmos não ficou muito bom na Câmara dos Deputados, como podemos ver na figura: https://dl.dropbox.com/u/18183156/radar/pca_cdep.png
Repare que os partidos pequenos estão de fato com um tamanho que parece ser o mínimo aceitável. Logo, no fundo o problema que temos aqui é o da enorme disparidade entre o tamanho das bancadas dos partidos. Talvez seja necessário um algoritmo não linear para determinar o tamanho das circunferências. Acredito que algo como "faixas de tamanhos" devam ser usadas.
De qualquer forma, o mais importante é obter um algoritmo mais geral que se adeque bem em qualquer situação.
Mas fazer de forma com que a página da câmara dos deputados e da câmara municipal tenham o mesmo código.
Assim, as próximas inserções de outras casas legislativas será muito mais fácil.
obter os dados de gênero durante o processo de importação.
Criar no modelagem/models.py atributos alternativos e destaca-los como tal no docstring das respectivas classes.
Estes atributos são utilizados quando os dados mais completos não estão disponíveis e não dá pra estima-los.
Exemplos: Parlamentar.partido, Partido.tamanho.
Explicar no docstring do módulo models oq são esses atributos alternativos.
Classe Analise deve receber no construtor uma casa_legislativa e utiliza-la para filtrar as votações que irá analisar.
Exemplo: analisar proximidade dos partidos quando o assunto é "educação".
Bem, só me introduzindo aqui, sou aluno de Engenharia Eletrônica e de Computação da UFRJ.
Hoje vi a apresentação do projeto aqui no YAPC::Brasil 2012 e gostei bastante.
Como falei com alguns de vocês hoje, eu tive uma idéia sobre a identificação partidária dos usuários.
Basicamente o conceito é, que independente da semelhança entre os partidos, é muito dificil para uma pessoa comum saber qual partido, de fato, é mais semelhante à ele.
Por isso pensei que talvez seria interessante, se pudessemos perguntar pro usuário o que ele votaria em cada uma das votações, podendo ele escolher dentre:
Sim, Não, Indiferente, Pular.
Quando ele marcasse Sim/Não seria adicionado ao vetor de votos do usuário esse voto, e em seguida rodariamos o algoritimo de semelhança e plotariamso no gráfico o "eu" com uma cor diferenciada.
Essa idéia é legal, porém perguntar todas as votações do usuário seria algo MUITO CHATO de responder.
Por isso uma idéia legal seria permitir o usuário fazer login, seja com Facebook, Google, ou até mesmo login próprio.
Com isso, ele teria um dashboard de quais votações ele já participou (SIM, NÃO, INDIFERENTE, podendo modificar o seu voto caso ele mude sua forma de pensar) e as que ele não votou (ou clicou em "Pular")
Com isso poderiamos ter também uma progress bar de quantas votações ele já deu sua opinião, quantas ele ainda não votou e quantas ele é indiferente.
Talvez uma barrinha branca, onde primeiro viria a cor verde mostrando os que ele votou sim, depois uma vermelha mostrando as que ele votou não e depois uma amarela mostrando as que ele é indiferente, e o que não estiver preenchido é o quanto ele não votou ainda.
Bem, ainda temos que aprimorar a idéia e pensar como implementar.
Podem contar comigo. =D
Alterar PeriodoAnalise e analises/views.py para fazer a análise de qualquer período de tempo.
Ver que tipo de componentes o Django oferece que poderíamos utilizar para nossa página de questões (Issue #24)
Pesquisar principalmente componentes de blogs, fórums e wikis.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.