| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package examples.myUtils;
- import com.alibaba.fastjson.JSONObject;
- import java.util.*;
- public class FissionConvert {
- private static final double plusSmooth = 3.0;
- private static final Set<String> realSet = new HashSet<>(Arrays.asList("hour", "group_n", "user_launchs", "user_shares", "user_return_1_uv", "user_return_n_uv"));
- private static final Set<String> hotSceneSet = new HashSet<>(Arrays.asList("1008", "1007", "1074", "1058", "1067", "1010", "1095"));
- public static JSONObject getFeature(String dt, Map<String, String> record, int accurate) {
- Map<String, Double> featMap = new HashMap<>();
- try {
- String dtKey = String.format("dt@%s", dt);
- featMap.put(dtKey, 1.0);
- Map<String, String> feature = ConvertUtils.getRecordCol(record, "feature");
- for (Map.Entry<String, String> entry : feature.entrySet()) {
- String key = entry.getKey();
- String value = entry.getValue();
- if (realSet.contains(key)) {
- double featValue = Double.parseDouble(value);
- featMap.put(key, featValue);
- } else {
- if ("scene".equals(key)) {
- String featKey;
- if (hotSceneSet.contains(value)) {
- featKey = String.format("%s@%s", key, value);
- } else {
- featKey = String.format("%s@%s", key, "other");
- }
- featMap.put(featKey, 1.0);
- } else {
- String featKey = String.format("%s@%s", key, value);
- featMap.put(featKey, 1.0);
- }
- }
- }
- // rate
- double launchs = Double.parseDouble(feature.getOrDefault("user_launchs", "0"));
- double shares = Double.parseDouble(feature.getOrDefault("user_shares", "0"));
- double return_1_uv = Double.parseDouble(feature.getOrDefault("user_return_1_uv", "0"));
- double return_n_uv = Double.parseDouble(feature.getOrDefault("user_return_n_uv", "0"));
- if (launchs > 0) {
- double rov_1 = FeatureUtils.plusSmooth(return_1_uv, launchs, plusSmooth);
- double rov_n = FeatureUtils.plusSmooth(return_n_uv, launchs, plusSmooth);
- double str = FeatureUtils.plusSmooth(shares, launchs, plusSmooth);
- featMap.put("rov_1", rov_1);
- featMap.put("rov_n", rov_n);
- featMap.put("str", str);
- }
- if (shares > 0) {
- double ros_1 = FeatureUtils.plusSmooth(return_1_uv, shares, plusSmooth);
- double ros_n = FeatureUtils.plusSmooth(return_n_uv, shares, plusSmooth);
- featMap.put("ros_1", ros_1);
- featMap.put("ros_n", ros_n);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return ConvertUtils.filterAndTruncate(featMap, accurate);
- }
- }
|