config.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. def build_country_holidays(city_to_country):
  57. countries = sorted(set(city_to_country.values()))
  58. start_date = pd.Timestamp('2025-11-01')
  59. end_date = pd.Timestamp('2026-12-31')
  60. country_holidays = {}
  61. for country in countries:
  62. try:
  63. hdays = holidays.country_holidays(
  64. country,
  65. years=[2025, 2026]
  66. )
  67. # 转成 set[date],方便高速查询
  68. country_holidays[country] = {
  69. d for d in hdays
  70. if start_date.date() <= d <= end_date.date()
  71. }
  72. except Exception:
  73. # 个别国家 holidays 库可能不支持
  74. country_holidays[country] = set()
  75. return country_holidays
  76. # 热门的航线
  77. vj_flight_route_list_hot = [
  78. "CAN-DPS", "CAN-HAN", "CAN-SGN", "CTU-HAN", "CTU-SGN",
  79. "DAD-SEL", "DEL-HAN", "DPS-CAN", "HAN-CAN", "HAN-DAD",
  80. "HAN-SHA", "HAN-UIH", "HKG-PQC", "KUL-DAD", "NGO-HAN",
  81. "NHA-HAN", "NHA-SEL", "PQC-HKG", "PUS-NHA", "SEL-DAD",
  82. "SEL-SGN", "SGN-CAN", "SGN-DPS", "SGN-NGO", "SGN-NHA",
  83. "SGN-PQC", "SGN-SEL", "SGN-SHA", "SHA-HAN", "SHA-SGN",
  84. "SIN-DAD", "TPE-HAN", "TPE-PQC", "TPE-SGN", "TYO-HAN",
  85. "TYO-SGN"
  86. ]
  87. # 冷门的航线
  88. vj_flight_route_list_nothot = [
  89. "BKK-SGN", "BKK-TPE", "BLR-FUK", "BMV-HAN", "BNE-SGN",
  90. "CAN-PQC", "CTU-BNE", "CTU-DPS", "CTU-PQC", "DAD-DEL",
  91. "DAD-DLI", "DAD-HAN", "DLI-HAN", "DPS-BOM", "DPS-HAN",
  92. "DPS-SGN", "DPS-SHA", "FUK-DPS", "HAN-CTU",
  93. "HAN-DEL", "HAN-DLI", "HAN-KUL", "HAN-NGO",
  94. "HAN-NHA", "HAN-OSA", "HAN-PQC", "HAN-RMQ", "HAN-SGN",
  95. "HAN-TPE", "HAN-TYO", "HKG-SGN", "HKT-SGN", "HPH-NHA",
  96. "KHH-BNE", "KUL-HAN", "MEL-HKG", "MEL-HKT", "MEL-SGN",
  97. "MNL-SGN", "NGO-SYD", "OSA-REP", "OSA-SGN", "PQC-DAD",
  98. "PQC-SEL", "PQC-SGN", "SEL-NHA", "SEL-VTE", "SGN-CTU",
  99. "SGN-DAD", "SGN-HAN", "SGN-HKG", "SGN-HPH", "SGN-HYD",
  100. "SGN-MNL", "SGN-OSA", "SGN-SYD",
  101. "SGN-TPE", "SGN-TYO", "SHA-BKK", "SHA-BLR", "SHA-DPS",
  102. "SHA-PQC", "SIN-HAN", "SIN-PQC", "SIN-SGN", "SYD-SGN",
  103. "TYO-AMD", "UIH-SGN"
  104. ]
  105. # 所有航线
  106. vj_flight_route_list = vj_flight_route_list_hot + vj_flight_route_list_nothot
  107. if __name__ == '__main__':
  108. # from collections import Counter
  109. # # 检查重复项
  110. # # 统计每个航线出现的次数
  111. # route_counter = Counter(vj_flight_route_list)
  112. # # 找出重复的航线
  113. # duplicates = {route: count for route, count in route_counter.items() if count > 1}
  114. # # 输出结果
  115. # if duplicates:
  116. # print("发现重复的航线:")
  117. # for route, count in duplicates.items():
  118. # print(f" {route}: 出现 {count} 次")
  119. # print(f"\n总共发现 {len(duplicates)} 条重复航线")
  120. # # 查找这些航线分别在哪个列表中
  121. # print("\n重复航线分布:")
  122. # for route in duplicates:
  123. # hot_count = vj_flight_route_list_hot.count(route)
  124. # nothot_count = vj_flight_route_list_nothot.count(route)
  125. # print(f" {route}: hot列表中出现 {hot_count} 次, nothot列表中出现 {nothot_count} 次")
  126. # else:
  127. # print("没有发现重复航线")
  128. COUNTRY_HOLIDAYS = build_country_holidays(city_to_country)
  129. print(COUNTRY_HOLIDAYS)