数据可视化中的动态数据转换
Dynamic data transform in data visualization
我对 java 中的数据可视化有疑问。
我在营销团队工作,我需要为他们制作报告。
我的模特:
class AdReportEntity {
String date;
String clientName;
AdInfoEntity adInfo;
int cost;
int impression;
int click;
...
}
AdInfoEntity:
class AdInfoEntity{
String campaignName;
String adgroupName;
String adname;
...
}
客户端有 2 个主要组件:
- 条形图显示每日费用(所有客户的总和)。
- table 显示详细信息:
日期 |客户名称 | campaignName |adgroupName|广告名称|费用|印象|点击
问题:
要求是比较动态的图表和table。
有时用户希望按客户、AdName、campaignName 显示图表,或者可能只是按 campaignName 的前 3 个字符等分组。
如何实现服务器更动态?
我的解决方案是根据参数用户请求求和,例如:
String groupColumn=request.getParameter("column");
switch(groupColumn){
case "clientName":
doSumByClientName();
case "adName":
doSumByAdName();
case "spec1":
doSumBySubStringAdName():
....
}
我在排序和过滤方面遇到了同样的问题。
我也为我的实体尝试了列基础,但很难处理像 ctr=click/impression.
这样的依赖属性
您可以看看 Tablesaw,(https://github.com/lwhite1/tablesaw),不确定它是否能满足您的所有需求,但它肯定会在 Java 中进行排序和过滤。这是一些代码。
Table tornados = Table.createFromCsv("data/tornadoes_1950-2014.csv");
tornadoes.setName("tornadoes");
tornados.structure().print();
output:
Structure of tornadoes_1950-2014.csv
Index Column Name Column Type
0 Date LOCAL_DATE
1 Time LOCAL_TIME
2 State CATEGORY
3 Scale SHORT_INT
4 Injuries SHORT_INT
5 Fatalities SHORT_INT
6 Start Lat FLOAT
7 Start Lon FLOAT
8 Length FLOAT
9 Width FLOAT
tornados.shape()
output:
59945 rows X 10 cols
// gets the month from every date, and counts by month
CategoryColumn month = tornadoes.dateColumn("Date").month();
month.summary();
output:
Column: Date month
Category Count
JANUARY 1417
MARCH 3935
JULY 6305
MAY 13072
SEPTEMBER 3142
OCTOBER 2332
DECEMBER 1355
NOVEMBER 2364
FEBRUARY 1672
APRIL 8533
AUGUST 4066
JUNE 11633
Table injuriesByScale = tornados.median("Injuries").by("Scale");
output:
Median injuries by Tornado Scale
Scale Median [Injuries]
-9 0.0
0 0.0
1 0.0
2 0.0
3 2.0
4 14.0
5 141.0
// query:
Table fatal =
tornados.selectWhere(column("Fatalities").isGreaterThan(0));
// sort
Table sorted = tornados.sortOn("State");
它也做很多其他的事情,包括一些统计数据、简单的图表等。
完全公开,我是 Tablesaw 的主要作者,它的边缘仍然有点粗糙。
我对 java 中的数据可视化有疑问。 我在营销团队工作,我需要为他们制作报告。
我的模特:
class AdReportEntity {
String date;
String clientName;
AdInfoEntity adInfo;
int cost;
int impression;
int click;
...
}
AdInfoEntity:
class AdInfoEntity{
String campaignName;
String adgroupName;
String adname;
...
}
客户端有 2 个主要组件:
- 条形图显示每日费用(所有客户的总和)。
- table 显示详细信息:
日期 |客户名称 | campaignName |adgroupName|广告名称|费用|印象|点击
问题:
要求是比较动态的图表和table。
有时用户希望按客户、AdName、campaignName 显示图表,或者可能只是按 campaignName 的前 3 个字符等分组。
如何实现服务器更动态?
我的解决方案是根据参数用户请求求和,例如:
String groupColumn=request.getParameter("column");
switch(groupColumn){
case "clientName":
doSumByClientName();
case "adName":
doSumByAdName();
case "spec1":
doSumBySubStringAdName():
....
}
我在排序和过滤方面遇到了同样的问题。
我也为我的实体尝试了列基础,但很难处理像 ctr=click/impression.
您可以看看 Tablesaw,(https://github.com/lwhite1/tablesaw),不确定它是否能满足您的所有需求,但它肯定会在 Java 中进行排序和过滤。这是一些代码。
Table tornados = Table.createFromCsv("data/tornadoes_1950-2014.csv");
tornadoes.setName("tornadoes");
tornados.structure().print();
output:
Structure of tornadoes_1950-2014.csv
Index Column Name Column Type
0 Date LOCAL_DATE
1 Time LOCAL_TIME
2 State CATEGORY
3 Scale SHORT_INT
4 Injuries SHORT_INT
5 Fatalities SHORT_INT
6 Start Lat FLOAT
7 Start Lon FLOAT
8 Length FLOAT
9 Width FLOAT
tornados.shape()
output:
59945 rows X 10 cols
// gets the month from every date, and counts by month
CategoryColumn month = tornadoes.dateColumn("Date").month();
month.summary();
output:
Column: Date month
Category Count
JANUARY 1417
MARCH 3935
JULY 6305
MAY 13072
SEPTEMBER 3142
OCTOBER 2332
DECEMBER 1355
NOVEMBER 2364
FEBRUARY 1672
APRIL 8533
AUGUST 4066
JUNE 11633
Table injuriesByScale = tornados.median("Injuries").by("Scale");
output:
Median injuries by Tornado Scale
Scale Median [Injuries]
-9 0.0
0 0.0
1 0.0
2 0.0
3 2.0
4 14.0
5 141.0
// query:
Table fatal =
tornados.selectWhere(column("Fatalities").isGreaterThan(0));
// sort
Table sorted = tornados.sortOn("State");
它也做很多其他的事情,包括一些统计数据、简单的图表等。
完全公开,我是 Tablesaw 的主要作者,它的边缘仍然有点粗糙。