Name Last Update
..
README.md Loading commit data...
main.py Loading commit data...
run.sh Loading commit data...

README.md

热门书籍索引生成项目

项目简介

本项目旨在根据机构的阅读行为数据(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 统计、文件写入等步骤的成功与错误信息,以便跟踪和排查问题。

运行方法

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

python main.py
# 或者
sh run.sh