#指定分类树下节目点击次数和人数的统计,这次采用pandas模块
#Linux python3
#select p.name, p.code, c.name, c.categoryid
# from program p,
# categorydtl cdtl,
# (select *
# from category
# start with categoryid = '41719'
# connect by parentid = prior categoryid) c
# where cdtl.categoryid = c.categoryid
# and p.programid = cdtl.objid
# 可以在linux上同时保留python2和python3的环境,python3建议安装Anaconda3,很多常用的模块就不需要在线安装。
#https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.0-Linux-x86_64.sh
import pandas as pd
#C3文件名
txtfile = '/newdata/C3/00000000.00000002.viewinfo.20181111.0001.txt'
#指定分类下节目明细表,就是上面的sql导出的csv文件
csvfile = '/root/bestv-categorydtl1.csv'
#读两个文件,由于C3文件比较大,1千万行左右,所以加载时需要30秒左右。C3文件采用“|”分割(sep='|'),csv文件用“,”分割,names指定每个列的列名
txtdf = pd.read_table(txtfile,sep='|',encoding='utf-8',low_memory=False,names = ['user_id','start_time','end_time','unknow','program_name','program_code'])
csvdf = pd.read_table(csvfile,sep=',',encoding='utf-8',low_memory=False,names = ['program_code','category_id'])
#merge 合并合并,on='program_code'指定合并时的连接键,默认采用两个文件的同名列名连接。
mergedf = pd.merge(csvdf,txtdf,on='program_code')
#根据合并结果,对user_id去重,然后取len,得到去重后user_id的个数
usercount = len(mergedf.user_id.drop_duplicates())
#根据合并结果,然后取len,得到观看次数
viewcount = len(mergedf)
#打印输出
print(usercount,viewcount)
#输出结果,表示有1747个不同user_id,这些用户产生5579次观看就
# time python3 bestvview.py
1747 5579
real 1m7.260s
user 0m18.158s
sys 0m43.385s
pandas指定分类树下节目点击次数和人数的统计
最新推荐文章于 2021-11-24 19:22:13 发布