config.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import holidays
  2. import pandas as pd
  3. CLEAN_VJ_HOT_NEAR_INFO_TAB = "clean_flights_vj_hot_0_7_info_tab"
  4. CLEAN_VJ_HOT_FAR_INFO_TAB = "clean_flights_vj_hot_7_30_info_tab"
  5. CLEAN_VJ_NOTHOT_NEAR_INFO_TAB = "clean_flights_vj_nothot_0_7_info_tab"
  6. CLEAN_VJ_NOTHOT_FAR_INFO_TAB = "clean_flights_vj_nothot_7_30_info_tab"
  7. mongodb_config = {
  8. "host": "192.168.20.218",
  9. "port": 27017,
  10. "db": "flights_datas_db",
  11. "user": "",
  12. "pwd": ""
  13. }
  14. # 城市码-国家码的映射
  15. city_to_country = {
  16. "CAN": "CN", # 广州,中国
  17. "DPS": "ID", # 巴厘岛,印度尼西亚
  18. "HAN": "VN", # 河内,越南
  19. "SGN": "VN", # 胡志明(西贡),越南
  20. "CTU": "CN", # 成都,中国
  21. "DAD": "VN", # 岘港,越南
  22. "SEL": "KR", # 首尔,韩国
  23. "DEL": "IN", # 德里,印度
  24. "UIH": "VN", # 归仁,越南
  25. "HKG": "HK", # 香港,中国
  26. "PQC": "VN", # 富国岛,越南
  27. "KUL": "MY", # 吉隆坡,马来西亚
  28. "NGO": "JP", # 名古屋,日本
  29. "NHA": "VN", # 芽庄,越南
  30. "PUS": "KR", # 釜山,韩国
  31. "SHA": "CN", # 上海,中国
  32. "SIN": "SG", # 新加坡,新加坡
  33. "TPE": "TW", # 台北,中国台湾
  34. "TYO": "JP", # 东京,日本
  35. "BKK": "TH", # 曼谷,泰国
  36. "BLR": "IN", # 班加罗尔,印度
  37. "FUK": "JP", # 福冈,日本
  38. "BMV": "VN", # 邦美蜀,越南
  39. "BNE": "AU", # 布里斯班,澳大利亚
  40. "BOM": "IN", # 孟买,印度
  41. "DLI": "VN", # 大叻,越南
  42. "OSA": "JP", # 大阪,日本
  43. "RMQ": "TW", # 台中,中国台湾
  44. "HKT": "TH", # 普吉岛,泰国
  45. "HPH": "VN", # 海防,越南
  46. "KHH": "TW", # 高雄,中国台湾
  47. "MEL": "AU", # 墨尔本,澳大利亚
  48. "MNL": "PH", # 马尼拉,菲律宾
  49. "SYD": "AU", # 悉尼,澳大利亚
  50. "REP": "KH", # 暹粒,柬埔寨
  51. "VTE": "LA", # 万象,老挝
  52. "HYD": "IN", # 海得拉巴,印度
  53. "AMD": "IN", # 艾哈迈达巴德,印度
  54. }
  55. # 城市码-数字的映射
  56. vj_city_code_map = {k: i for i, k in enumerate(city_to_country.keys())}
  57. # 生成各个国家(地区)的节假日
  58. def build_country_holidays(city_to_country):
  59. countries = sorted(set(city_to_country.values()))
  60. start_date = pd.Timestamp('2025-11-01')
  61. end_date = pd.Timestamp('2026-12-31')
  62. country_holidays = {}
  63. for country in countries:
  64. try:
  65. hdays = holidays.country_holidays(
  66. country,
  67. years=[2025, 2026]
  68. )
  69. # 转成 set[date],方便高速查询
  70. country_holidays[country] = {
  71. d for d in hdays
  72. if start_date.date() <= d <= end_date.date()
  73. }
  74. except Exception:
  75. # 个别国家 holidays 库可能不支持
  76. country_holidays[country] = set()
  77. return country_holidays
  78. # 热门的航线
  79. vj_flight_route_list_hot = [
  80. "CAN-DPS", "CAN-HAN", "CAN-SGN", "CTU-HAN", "CTU-SGN",
  81. "DAD-SEL", "DEL-HAN", "DPS-CAN", "HAN-CAN", "HAN-DAD",
  82. "HAN-SHA", "HAN-UIH", "HKG-PQC", "KUL-DAD", "NGO-HAN",
  83. "NHA-HAN", "NHA-SEL", "PQC-HKG", "PUS-NHA", "SEL-DAD",
  84. "SEL-SGN", "SGN-CAN", "SGN-DPS", "SGN-NGO", "SGN-NHA",
  85. "SGN-PQC", "SGN-SEL", "SGN-SHA", "SHA-HAN", "SHA-SGN",
  86. "SIN-DAD", "TPE-HAN", "TPE-PQC", "TPE-SGN", "TYO-HAN",
  87. "TYO-SGN"
  88. ]
  89. # 冷门的航线
  90. vj_flight_route_list_nothot = [
  91. "BKK-SGN", "BKK-TPE", "BLR-FUK", "BMV-HAN", "BNE-SGN",
  92. "CAN-PQC", "CTU-BNE", "CTU-DPS", "CTU-PQC", "DAD-DEL",
  93. "DAD-DLI", "DAD-HAN", "DLI-HAN", "DPS-BOM", "DPS-HAN",
  94. "DPS-SGN", "DPS-SHA", "FUK-DPS", "HAN-CTU",
  95. "HAN-DEL", "HAN-DLI", "HAN-KUL", "HAN-NGO",
  96. "HAN-NHA", "HAN-OSA", "HAN-PQC", "HAN-RMQ", "HAN-SGN",
  97. "HAN-TPE", "HAN-TYO", "HKG-SGN", "HKT-SGN", "HPH-NHA",
  98. "KHH-BNE", "KUL-HAN", "MEL-HKG", "MEL-HKT", "MEL-SGN",
  99. "MNL-SGN", "NGO-SYD", "OSA-REP", "OSA-SGN", "PQC-DAD",
  100. "PQC-SEL", "PQC-SGN", "SEL-NHA", "SEL-VTE", "SGN-CTU",
  101. "SGN-DAD", "SGN-HAN", "SGN-HKG", "SGN-HPH", "SGN-HYD",
  102. "SGN-MNL", "SGN-OSA", "SGN-SYD",
  103. "SGN-TPE", "SGN-TYO", "SHA-BKK", "SHA-BLR", "SHA-DPS",
  104. "SHA-PQC", "SIN-HAN", "SIN-PQC", "SIN-SGN", "SYD-SGN",
  105. "TYO-AMD", "UIH-SGN"
  106. ]
  107. # 所有航线
  108. vj_flight_route_list = vj_flight_route_list_hot + vj_flight_route_list_nothot
  109. if __name__ == '__main__':
  110. # from collections import Counter
  111. # # 检查重复项
  112. # # 统计每个航线出现的次数
  113. # route_counter = Counter(vj_flight_route_list)
  114. # # 找出重复的航线
  115. # duplicates = {route: count for route, count in route_counter.items() if count > 1}
  116. # # 输出结果
  117. # if duplicates:
  118. # print("发现重复的航线:")
  119. # for route, count in duplicates.items():
  120. # print(f" {route}: 出现 {count} 次")
  121. # print(f"\n总共发现 {len(duplicates)} 条重复航线")
  122. # # 查找这些航线分别在哪个列表中
  123. # print("\n重复航线分布:")
  124. # for route in duplicates:
  125. # hot_count = vj_flight_route_list_hot.count(route)
  126. # nothot_count = vj_flight_route_list_nothot.count(route)
  127. # print(f" {route}: hot列表中出现 {hot_count} 次, nothot列表中出现 {nothot_count} 次")
  128. # else:
  129. # print("没有发现重复航线")
  130. # COUNTRY_HOLIDAYS = build_country_holidays(city_to_country)
  131. # print(COUNTRY_HOLIDAYS)
  132. print(vj_city_code_map)