Создать график / статистику для выбранной таблицы MySQL через Python - PullRequest
3 голосов
/ 14 февраля 2010

Я хотел бы начать с вашего мнения о том, как мне решить эту задачу, а не просто как структурировать мой код.

Вот что я пытаюсь сделать: у меня много данных, загруженных в таблицу mysql для большого количества уникальных имен + даты (то есть, где дата - это отдельное поле). Моя цель - иметь возможность выбрать конкретное имя (используя rawinput и, возможно, в будущем добавить раскрывающееся меню) и увидеть месячный тренд со скользящей средней и, возможно, другими показателями для одного из полей (доход , доход в месяц, клики и т. д.). Что вы посоветуете - перенести эти данные в рабочую книгу Excel с помощью Python или есть способ отобразить эту информацию на Python (с диаграммами, которые, конечно, сравниваются с Excel)?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 января 2011

Анализ таких данных (имя, дата) можно рассматривать как выдачу специальных SQL-запросов для получения информации о временных сериях.

Вы будете «выбирать» свою информацию по дате / времени (день / неделя / месяц / год или более подробно по часам / минутам) в зависимости от размера вашего набора данных.

Я часто использую такой запрос, когда поле даты усечено до частоты дискретизации, в mysql функция DATE_FORMAT хороша для этого (postgres и oracle используют date_trunc и trunc соответственно)

То, что вы хотите видеть в ваших данных, соответствует вашим условиям WHERE.

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');

выполнить этот запрос и вывести в CSV-файл. Для этого вы можете использовать прямые команды mysql, но я рекомендую создать сценарий python, который выполняет такой запрос, и вы можете использовать опции getopt для форматирования вывода (с заголовками столбцов или без них, используйте разделитель, отличный от используемого по умолчанию, и т. Д.). И даже вы можете динамически строить запрос на основе некоторых опций.

Чтобы построить такую ​​информацию, взгляните на инструменты временных рядов. Если у вас отсутствуют данные (дата, которая не появится в результате такого SQL-запроса), вам следует позаботиться о выборе. Я думаю, что Excel не подходит для этого (или недостаточно хорош для этого), но может стать началом.

Лично я нашел dygraph, библиотеку javascript, действительно классную для построения временных рядов, и ее можно использовать с файлом csv в качестве источника. Осторожно в такой конфигурации, из-за ограничений безопасности между доменами, файл csv и html-страница, которые отображают объект Dygraph, должны находиться на одном сервере (или независимо от того, какое ограничение безопасности вашего браузера хочет принять).

Я использовал для создания такого веб-приложения, используя django, так как это мой любимый веб-фреймворк, где я заключаю URL-вызов в следующий код:

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

Первый URL вызывает представление, которое просто выводит файл шаблона с переменной, которая ссылается на URL для получения файла csv для объекта Dygraph:

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

Второй URL вызывает представление, которое генерирует запрос sql и выводит результат в виде текста / csv для визуализации Dygraph.

Он «самодельный» может быть простым или расширенным, легко запускаться на любом настольном компьютере, может быть расширен до выходного формата json для использования другими библиотеками / фреймворками javascript.

Еще есть инструмент с открытым исходным кодом, связанный с такими отчетами (но возможностей временных рядов часто недостаточно для моих нужд), таких как Pentaho, JasperReport, SOFA. Вы делаете запрос как источник данных внутри отчета в таком инструменте и строите график, который выводит временную серию.

Я обнаружил, что сегодня веб-техника с правильной библиотекой / структурой javascript действительно начинает корректно бросать вызов этой старой моде отчетности с помощью таких классических инструментов BI, и это делает вещи интерактивными: -)

0 голосов
/ 14 февраля 2010

Ваша проблема может быть разбита на две основные части: анализ данных и их представление.Я предполагаю, что вы уже знаете, как выполнять анализ данных, и вам интересно, как это представить.

Это кажется проблемой, которая особенно хорошо подходит для веб-приложения.Есть ли причина, по которой вы хотели бы избежать этого?

Если вы новичок в веб-программировании и программировании в целом, тогда что-то вроде web2py может быть простым способом начать,Здесь есть простое учебное пособие .

Для настольных приложений с большим количеством баз данных посмотрите dabo .Это делает такие вещи, как создание представлений таблиц базы данных, действительно простым. wxpython , на котором он построен, также имеет множество простых графических функций.

...