通过python为选定的mysql表创建图表/统计信息

通过python为选定的mysql表创建图表/统计信息,python,mysql,excel-2007,mysql-python,Python,Mysql,Excel 2007,Mysql Python,首先,我想征求您对我应该如何处理这项任务的意见,而不是简单地询问如何构造代码 下面是我要做的:我将大量数据加载到mysql表中,以获得大量的唯一名称+日期(即,日期是一个单独的字段)。我的目标是能够选择一个特定的名称(使用rawinput,将来可能还会添加一个下拉菜单),并查看其中一个字段(收入、每月收入、点击次数等)的月度趋势、移动平均数,以及其他统计数据。您有什么建议-通过python将这些数据移动到excel工作簿,或者有没有一种方法可以用python显示这些信息(当然,使用与excel比

首先,我想征求您对我应该如何处理这项任务的意见,而不是简单地询问如何构造代码

下面是我要做的:我将大量数据加载到mysql表中,以获得大量的唯一名称+日期(即,日期是一个单独的字段)。我的目标是能够选择一个特定的名称(使用rawinput,将来可能还会添加一个下拉菜单),并查看其中一个字段(收入、每月收入、点击次数等)的月度趋势、移动平均数,以及其他统计数据。您有什么建议-通过python将这些数据移动到excel工作簿,或者有没有一种方法可以用python显示这些信息(当然,使用与excel比较的图表)


谢谢

您的问题可以分为两大部分:分析数据和呈现数据。我假设您已经知道如何进行数据分析部分,并且您想知道如何展示它

这似乎是一个特别适合web应用程序的问题。你想避免这样做有什么原因吗

如果您对web编程和一般编程非常陌生,那么类似的东西可能是一种简单的入门方法。有一个

对于桌面数据库密集型应用程序,请查看。它使在数据库表上创建视图变得非常简单,它构建在它的基础上,还具有许多简单的图形功能。

分析此类数据(名称、日期)可以被视为发出特殊的SQL查询以获取时间序列信息

您将根据数据集的大小,按日期/时间框架(天/周/月/年或更详细的小时/分钟)对信息进行“采样”

我经常使用这样的查询,其中日期字段被截断为采样率,在mysql中,date_格式函数很酷(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文件一起作为源文件使用。在这种配置中要小心,由于跨域安全约束,显示Dygraph对象的csv文件和html页面应位于同一服务器上(或浏览器希望接受的任何安全约束)

我曾经使用django构建过这样的web应用程序,因为它是我最喜欢的web框架,我将url调用包装为:

GET /timeserie/view/<category>/<value_to_plot>
GET /timeserie/csv/<category>/<value_to_plot> 
GET/timeserie/view//
获取/timeserie/csv//
第一个url调用一个视图,该视图仅输出一个模板文件,其中包含一个引用url的变量,以获取动态图形对象的csv文件:

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

g3=新动态图(
document.getElementById(“graphdiv3”),
“{{csv_url}}”,
{
展期:15,
卖弄者:是的
}
);
第二个url调用一个视图,该视图生成sql查询,并将结果输出为文本/csv,由Dygraph呈现

它是“自制的”,可以很简单,也可以扩展,可以在任何桌面计算机上轻松运行,还可以扩展为输出json格式,供其他javascript库/框架使用

除此之外,还有开源工具,与此类报告相关(但timeseries功能通常不足以满足我的需要),如Pentaho、JasperReport和SOFA。您可以在这样的工具中将查询作为报表中的数据源,并构建一个输出timeserie的图形


我发现,今天,使用正确的javascript库/框架的web技术确实开始正确地挑战传统的报告方式,通过这些经典的BI工具,它可以使事情变得交互式:-)

我不会反对web应用,我对编程完全是个新手…我想在创建web应用程序方面迈出一小步,但如果你认为这是一条路,你能给我指出正确的方向吗?我编辑了我的回复,推荐web2py,因为它使开始web编程变得非常简单,所有的开发都是在浏览器中完成的。