【发布时间】:2016-05-26 13:55:47
【问题描述】:
背景: 我正在尝试使用 Apache Commons Math 确定救护车的统计数据。我能够为一辆救护车做非常基本的单变量统计,但是当我想确定我车队中所有救护车的统计数据时,我会遇到困难。
目标: 我的目标是使用 JDBC 生成基本结果集,然后将信息解析为统计信息。例如,我想把结果集做成一个表格,显示救护车,2014 年的平均值,2015 年的平均值作为标题。 表格详细信息将显示每辆救护车和每个标题的平均值
<table>
<tr><th>ambulance</th><th>average response time for year 2014</th><th>average response time for year 2015</th></tr>
<tr><td>Medic1</td><td>62</td><td>74</td></tr>
<tr><td>Medic2</td><td>83</td><td>79</td></tr>
<tr><td>Medic3</td><td>68</td><td>71</td></tr>
</table>
尝试的伪代码: 伪代码看起来像这样; 1.) 为 2014 日历年的平均响应时间分配一个变量。 2.) 如果日历年是 2014 年,则遍历结果集中的所有救护车,然后计算平均值。 3.) 为 2015 日历年的平均响应时间分配一个变量。 4.)遍历所有救护车,如果日历年是 2015 年,则计算平均值。 5.) 输出救护车,2014年平均响应时间,2015年平均响应时间
评论: 这将是一个好的开始。至少会出现逻辑和格式以进行更复杂的分析,例如确定逐年的差异。但我被困住了。我不确定如何对每辆救护车进行迭代以生成平均值。
我能够编写 SQL 查询来生成每辆救护车的平均值。但我想使用 Apache Commons Math,因为它提供了 Skew、Kurtosis 和其他度量。您在本段上方看到的是更复杂事物的简化示例。
Java 代码:
package EMSResearch;
import java.sql.*;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
public class EMSResearch
{
public static void main(String[] args)
{
Connection conn = null;
Statement stmt = null;
try
{
conn = DriverManager.getConnection("jdbc:sqlserver://MyDatabase;database=Emergencies;integratedsecurity=false;user=MyUserName;password=MyPassword");
stmt = conn.createStatement();
String strSelect = "SELECT EmergencyID, YearOfCall, ResponseTime, Ambulance";
ResultSet rset = stmt.executeQuery(strSelect);
DescriptiveStatistics ds = new DescriptiveStatistics();
/*the following code does the job of generating average response time for Medic1 for year 2015. But I want it to loop through and get all the ambulances for year 2015*/
while (rset.next())
{
if (rset.getString("Ambulance").equals("Medic1") && rset.getInt("YearOfCall") == 2015)
{
String event = rset.getString("I_EventNumber");
int year = rset.getInt("YearOfCall");
int responseTime = rset.getInt("ResponseTime");
String truck = rset.getString("Ambulance");
ds.addValue(responseTime);
}
}
System.out.println("mean average value " + ds.getMean());
} catch (SQLException ex)
{
ex.printStackTrace();
} finally
{
【问题讨论】:
-
考虑改用SQL window functions。
-
这是我通常做的事情,但是在这种情况下,我想使用 Apache Commons Math,因为它具有 Skew 和 Kurtosis 的方法。而且,一旦我熟练了,我就可以做很多很酷的统计功能。
标签: java loops jdbc resultset apache-commons-math