2010-02-14 18 views
3

Je voudrais commencer par vous demander votre opinion sur la façon dont je devrais m'attaquer à cette tâche, au lieu de simplement structurer mon code.Créer un tableau/des statistiques pour la table mysql sélectionnée via python

Voici ce que j'essaie de faire: J'ai beaucoup de données chargées dans une table mysql pour un grand nombre de noms uniques + dates (c'est-à-dire, où la date est un champ séparé). Mon but est de pouvoir sélectionner un nom particulier (en utilisant rawinput, et peut-être à l'avenir ajouter un menu déroulant) et de voir une tendance mensuelle, avec une moyenne mobile, et peut-être d'autres statistiques, pour l'un des champs (revenu , revenus par mois, clics, etc.) Quel est votre conseil - de déplacer ces données vers un classeur Excel via python, ou y a-t-il un moyen d'afficher ces informations en python (avec des graphiques qui se comparent à Excel, bien sûr)?

Merci!

Répondre

0

Votre problème peut être divisé en deux parties principales: l'analyse des données et leur présentation. Je suppose que vous savez déjà comment faire la partie analyse de données, et vous vous demandez comment le présenter.

Cela semble être un problème particulièrement adapté à une application Web. Y a-t-il une raison pour laquelle vous voudriez éviter cela?

Si vous débutez dans la programmation et la programmation Web en général, web2py pourrait être un moyen simple de commencer. Il y a un simple tutorial here.

Pour une application de base de données lourde de bureau, jetez un oeil à dabo. Cela facilite grandement la création de vues sur des tables de base de données. wxpython, sur lequel il est construit, a également beaucoup de fonctionnalités graphiques simples.

+0

Je ne serais pas opposé Pour une application web, je suis tout à fait nouveau dans la programmation ... Je voulais faire un petit pas vers la création d'une application web, mais si vous pensez que ce serait la voie à suivre, pourriez-vous me pointer dans la bonne direction? – DalivDali

+0

J'ai édité ma réponse pour recommander web2py, car il est très simple de commencer avec la programmation web, et tout votre développement se fait directement dans le navigateur. –

2

L'analyse de ces données (nom, date) peut être considérée comme l'émission de requêtes SQL ad-hoc pour obtenir des informations de timeseries. Vous allez «échantillonner» vos informations selon une date/heure (jour/semaine/mois/année ou plus détaillée par heure/minute) en fonction de la taille de votre jeu de données.

J'utilise souvent cette requête où le champ de date est tronquer au taux d'échantillonnage, en fonction mysql DATE_FORMAT est cool pour que (postgres et l'utilisation oracle date_trunc et trunc respectivly)

Qu'est-ce que vous voulez voir dans vos données est dans vos conditions WHERE. Exécuter cette requête et la sortie dans un fichier csv.

select DATE_FORMAT(date_field,'%Y-%m-%d') as day, 
     COUNT(*) as nb_event 
FROM yourtable 
WHERE name = 'specific_value_to_analyze' 
GROUP BY DATE_FORMAT(date_field,'%Y-%m-%d'); 

Vous pouvez utiliser des commandes mysql directes pour cela, mais je recommande de faire un script python qui exécute une telle requête, et vous pouvez utiliser les options getopt pour le formatage de sortie (avec ou sans en-têtes de colonnes, utiliser un séparateur différent par défaut). Et même vous pouvez construire dynamiquement la requête en fonction de certaines options.

Pour tracer de telles informations, consultez les outils de série chronologique. Si vous avez des données manquantes (date qui n'apparaîtra pas dans le résultat d'une telle requête sql), vous devriez faire attention au choix. Excel n'est pas le bon pour cela, je pense (ou pas assez maîtrisé), mais pourrait être un début.

Personnellement, j'ai trouvé dygraph, une bibliothèque javascript, vraiment cool pour le traçage de séries temporelles, et il peut être utilisé avec un fichier csv comme source. Attention dans une telle configuration, en raison de la contrainte de sécurité de crossdomain, le fichier csv et la page html qui affichent l'objet Dygraph doivent être sur le même serveur (ou quelle que soit la contrainte de sécurité de votre navigateur).

J'utilisé pour construire cette webapp en utilisant django, comme il est mon framework web préféré, où je conclurai appel URL comme ceci:

GET /timeserie/view/<category>/<value_to_plot> 
GET /timeserie/csv/<category>/<value_to_plot> 

La première URL appeler une vue que le simple sortie un fichier modèle avec une variable cette référence l'URL pour obtenir le fichier csv pour l'objet Dygraph:

<script type="text/javascript"> 
    g3 = new Dygraph(
    document.getElementById("graphdiv3"), 
    "{{ csv_url }}", 
    { 
     rollPeriod: 15, 
     showRoller: true 
    } 
); 
</script> 

la deuxième URL appeler une vue qui génère la requête SQL et sortie le résultat sous forme de texte/csv à rendre par Dygraph.

Il est « fait maison » pourrait un simple support ou être prolongée, exécutez facilement sur tout ordinateur de bureau, pourrait être étendue à la sortie format JSON pour être utilisé par d'autres bibliothèques javascript/cadres.

Sinon il y a outil opensource, lié à ces rapports (mais les capacités de timeseries sont souvent pas assez pour mes besoins) comme Pentaho, JasperReport, SOFA. Vous créez la requête en tant que source de données dans un rapport dans un tel outil et créez un graphique qui génère un délai.

Je trouve que la technique de web aujourd'hui correct javascript bibliothèque/cadre est vraiment commencer à être correct de contester cette ancienne mode des rapports par des outils de BI classiques et faire des choses :-) interactive