3

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

这是我想要做的事情:我将大量数据加载到 mysql 表中以获取大量唯一名称 + 日期(即,日期是一个单独的字段)。我的目标是能够选择一个特定的名称(使用 rawinput,也许将来会添加一个下拉菜单)并查看其中一个字段(收入、每月收入、点击次数等)。您有什么建议 - 通过 python 将这些数据移动到 excel 工作簿,或者有没有办法在 python 中显示这些信息(当然,图表与 excel 相比)?

谢谢!

4

2 回答 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 构建这样的 webapp,因为它是我最喜欢的 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 查询并将结果输出为 text/csv 以由 Dygraph 呈现。

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

另外还有开源工具,与此类报告相关(但时间序列功能通常不足以满足我的需要),例如 Pentaho、JasperReport、SOFA。您可以在此类工具中将查询作为报告中的数据源,并构建输出时间序列的图表。

我发现今天具有正确 javascript 库/框架的 Web 技术真正开始正确地挑战这种经典 BI 工具的旧报告方式,并且它使事情变得互动:-)

于 2011-01-08T12:26:31.837 回答
0

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

这似乎是一个特别适合 Web 应用程序的问题。您是否有理由要避免这种情况?

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

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

于 2010-02-14T08:35:04.183 回答