Blame view

hot/README.md 4.22 KB
5ab1c29c   tangwang   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  # 热门书籍索引生成项目

  

  ## 项目简介

  本项目旨在根据机构的阅读行为数据(reading_time埋点数据)生成热门书籍索引,通过多种方法统计不同维度下的用户访问(UV)数据。项目支持基于机构(tenant)、机构所属行业(tenant_type)及书籍标签(tag)(包括category1和category2,当成tag同等处理)等不同维度进行统计和排名,从而生成热门书籍清单。并带有自动更新的软链接以方便外部访问。

  

  

  ## 文件结构

  - `index_generation.py`:主程序代码,包含数据加载、UV处理、书单生成和输出等主要功能。

  - `logs/`:日志文件存放目录。

  - `output/`:程序生成的书单输出目录。

  

  ## 输入数据

  ### 1. 书籍属性数据 (`all_books.json`)

  - **路径**`CONFIG['books_path']`

  - **内容**:每行包含一个书籍的 JSON 数据,主要字段为:

    - `id`:书籍ID。

    - `merged_tags`:书籍相关的标签列表,用逗号分隔。

    

  ### 2. 机构所属行业数据 (`tenants.json`)

  - **路径**`CONFIG['tenants_path']`

  - **内容**:每行包含一个机构的 JSON 数据,主要字段为:

    - `id`:机构ID。

    - `tenant_type`:机构所属行业类型。

  

  ### 3. 阅读行为数据 (`reading_time.json`)

  - **路径**`CONFIG['base_dir']` 下的文件夹,文件名格式为 `reading_time.json.YYYYMMDD`
  - **内容**:每行包含一个阅读行为的 JSON 数据,主要字段为:

    - `user_id`:用户ID。

    - `book_id`:书籍ID。

    - `tenant_id`:机构ID。

  

  ## 输出数据

  输出数据为生成的热门书籍列表,每个文件包含按指定维度统计的前 `N` 个书籍的排名结果:

  - 文件输出路径:`CONFIG['output_dir']`

  - 文件名格式:`<prefix>_<current_date>.txt`,并生成软链接至 `<prefix>.txt`
  - 输出内容示例:`tenant_id book_id1:uv_count1,book_id2:uv_count2,...`

  

  ### 输出文件类型

  1. `tenant_booklist.txt`:按机构(tenant)统计的热门书籍列表。

  2. `tenant_type_booklist.txt`:按机构所属行业(tenant_type)统计的热门书籍列表。

  3. `tag_booklist.txt`:按标签(tag)统计的热门书籍列表。

  

  ## 配置参数

  ### `CONFIG` 说明

  - `base_dir`:阅读数据文件的目录。

  - `books_path`:书籍属性数据文件路径。

  - `tenants_path`:机构所属行业数据文件路径。

  - `output_dir`:输出目录路径。

  - `days`:用于选择最近 `days` 天内的数据文件。

  - `top_n`:生成前 `N` 个热门书籍。

  - `tenant_type_ratio`:用于在机构数据不足时融合所属行业数据的权重比例。

  - `use_simple_uv_processing`
    - `True`:累加每天的 UV。

    - `False`:以数据周期内总 UV 统计为准。

  

  ## 计算逻辑

  1. **数据加载**

     - 使用 `load_books_data()` 和 `load_tenants_data()` 分别加载书籍和机构的基本信息,确保各个 ID 均为字符串。

     - 使用 `get_recent_files()` 获取最近 `days` 天的阅读数据文件列表。

  

  2. **UV 数据处理**

     - `process_reading_data()`:简单 UV 统计,每条记录中的用户访问量直接累加。

     - `process_reading_data_by_uv()`:用户 UV 去重统计,计算某书籍在一天内的 UV 数量。

     - `CONFIG['use_simple_uv_processing']` 用于决定是否使用简单的累加逻辑。

     

  3. **数据融合**

     - 使用 `merge_tenant_uv_with_type_uv()` 将机构的 UV 数据与其所属行业的 UV 数据按比例进行融合,减小数据量较小的机构所带来的统计偏差。

     

  4. **生成书单**

     - `generate_top_booklist()` 根据 UV 统计数据生成指定维度的前 `N` 本热门书籍列表。

     - 生成的书单文件分别保存机构、机构所属行业、标签维度的热门书籍排名。

  

  5. **输出与软链接**

     - 使用 `write_output()` 将生成的书单写入指定文件,并更新软链接到最新文件。

  

  ## 日志

  程序的所有日志信息输出至 `logs/index_generation.log`,主要记录数据加载、文件处理、UV 统计、文件写入等步骤的成功与错误信息,以便跟踪和排查问题。

  

  ## 运行方法

  在终端中执行以下命令来运行主程序:

  ```bash

  python main.py

  # 或者

  sh run.sh

  ```