通过Python创建选定MySQL表的图表/统计信息

3

我想先请您就如何解决这个任务提出您的意见,而不仅仅是如何构建我的代码。

这是我的目标:我有大量数据加载到mysql表中,针对许多唯一的名称+日期(即日期是一个单独的字段)。我的目标是能够选择特定的名称(使用rawinput,并可能在未来添加下拉菜单)并查看一个月的趋势,带有移动平均线,以及其他统计数据,例如收入、每月收入、点击次数等。您的建议是将此数据通过Python移动到Excel工作簿中,还是有一种方法可以在Python中显示此信息(当然要与Excel的图表进行比较)?

谢谢!

2个回答

2

分析这些数据(名称,日期)可以被视为发出特定的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文件作为源。在这种配置中要小心,由于跨域安全约束,显示Dygraph对象的CSV文件和HTML页面应该在同一台服务器上(或者在您的浏览器所接受的任何安全约束下)。
我过去习惯使用django构建这样的Web应用程序,因为它是我最喜欢的Web框架,我将其封装成以下形式的URL调用:
GET /timeserie/view/<category>/<value_to_plot>
GET /timeserie/csv/<category>/<value_to_plot> 

第一个url调用一个视图,它仅输出一个模板文件,并使用变量引用url以获取Dygraph对象的csv文件:

<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

你的问题可以分为两个主要部分:数据分析和呈现。我假设你已经知道如何进行数据分析部分,而且你想知道如何呈现它。

这似乎是一个特别适合Web应用程序的问题。你有什么原因不想使用Web应用程序吗?

如果你对Web编程和编程一般都很陌生,那么像web2py这样的东西可能是一个简单的入门方式。这里有一个简单的教程

对于一个桌面数据库重型应用程序,可以看看dabo。它使得创建数据库表视图之类的事情变得非常简单。它是基于wxpython构建的,也具有许多简单的绘图功能。


我不反对使用Web应用程序,只是我完全是新手编程...我想朝着创建Web应用程序迈出第一步,但如果您认为这是正确的方法,您能指点我吗? - DalivDali
我编辑了我的回复,建议使用web2py,因为它使得网络编程非常简单,并且你所有的开发都在浏览器中完成。 - Ryan Ginstrom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接