FissionConvert.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package examples.myUtils;
  2. import com.alibaba.fastjson.JSONObject;
  3. import java.util.*;
  4. public class FissionConvert {
  5. private static final double plusSmooth = 3.0;
  6. 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"));
  7. private static final Set<String> hotSceneSet = new HashSet<>(Arrays.asList("1008", "1007", "1074", "1058", "1067", "1010", "1095"));
  8. public static JSONObject getFeature(String dt, Map<String, String> record, int accurate) {
  9. Map<String, Double> featMap = new HashMap<>();
  10. try {
  11. String dtKey = String.format("dt@%s", dt);
  12. featMap.put(dtKey, 1.0);
  13. Map<String, String> feature = ConvertUtils.getRecordCol(record, "feature");
  14. for (Map.Entry<String, String> entry : feature.entrySet()) {
  15. String key = entry.getKey();
  16. String value = entry.getValue();
  17. if (realSet.contains(key)) {
  18. double featValue = Double.parseDouble(value);
  19. featMap.put(key, featValue);
  20. } else {
  21. if ("scene".equals(key)) {
  22. String featKey;
  23. if (hotSceneSet.contains(value)) {
  24. featKey = String.format("%s@%s", key, value);
  25. } else {
  26. featKey = String.format("%s@%s", key, "other");
  27. }
  28. featMap.put(featKey, 1.0);
  29. } else {
  30. String featKey = String.format("%s@%s", key, value);
  31. featMap.put(featKey, 1.0);
  32. }
  33. }
  34. }
  35. // rate
  36. double launchs = Double.parseDouble(feature.getOrDefault("user_launchs", "0"));
  37. double shares = Double.parseDouble(feature.getOrDefault("user_shares", "0"));
  38. double return_1_uv = Double.parseDouble(feature.getOrDefault("user_return_1_uv", "0"));
  39. double return_n_uv = Double.parseDouble(feature.getOrDefault("user_return_n_uv", "0"));
  40. if (launchs > 0) {
  41. double rov_1 = FeatureUtils.plusSmooth(return_1_uv, launchs, plusSmooth);
  42. double rov_n = FeatureUtils.plusSmooth(return_n_uv, launchs, plusSmooth);
  43. double str = FeatureUtils.plusSmooth(shares, launchs, plusSmooth);
  44. featMap.put("rov_1", rov_1);
  45. featMap.put("rov_n", rov_n);
  46. featMap.put("str", str);
  47. }
  48. if (shares > 0) {
  49. double ros_1 = FeatureUtils.plusSmooth(return_1_uv, shares, plusSmooth);
  50. double ros_n = FeatureUtils.plusSmooth(return_n_uv, shares, plusSmooth);
  51. featMap.put("ros_1", ros_1);
  52. featMap.put("ros_n", ros_n);
  53. }
  54. } catch (Exception e) {
  55. e.printStackTrace();
  56. }
  57. return ConvertUtils.filterAndTruncate(featMap, accurate);
  58. }
  59. }