公司的一些金融数据集需要做一个统计,总量达到了18G,面对这么大的数据集,R语言显现出了自身的弊端,跑完这么大的数据可能需要数小时,甚至更长的时间。
那么,将python与hive结合做基础的统计与数据的挖掘工作,无疑是最好的选择。
数据挖掘目标:实现金融app上的精准推荐
数据取样:htdata用户app安装使用数据集 jrlc是app的hash码对应
数据预处理:去htdata中的干扰字符,干扰用户
数据建模:获得app权重、对用户进行评分、划分用户 即 p(appi)、score(m)、count--sore(m)
模型评价:基本实现
模型实现:python
下面的代码是对数据的切片,统计;至于结果呈现,用matplotlib包和numpy就能实现。由于支付宝在数据集中有很大的影响,所以需要将支付宝的数据去掉才有一定的代表性。
# -*- coding:utf-8 -*- #htdata的绝对路径 filename="D://data//htdata.txt" #金融app hash表的绝对路径 jrlc="D://data//jrlc.txt" data=open(filename,'r').readlines() cdata=open(jrlc,'r').readlines() ##APP与HASH码表的遍历 app_count=0 ##用户安装APP数 id_data_count=0 ##第i个tdid的安装APP数 app_count_i=0 s_app_count_i=0 ##第i个tdid的使用APP数 app_count_i_u=0 ##用户列表 app=[] ##用户使用的app id_data=[] ##单个用户列表 id_data_u=[] ##用户使用的app列表 service_data_u=[] appi_1=[] appi_2=[] ''' 1、遍历获取金融APP的hash码 2、与投资者的使用APP匹配 3、count投资者总的APP安装和使用次数 4、投资者m中某个APP的安装和使用次数 5、投资者APP得分 ''' ####获取金融APP的hash码值 for items in cdata: if items not in app: app.append(items.split('/t')[1]) for line in data: id_data_count=id_data_count+1 #使用的并在hash表中的app进行计数 for item in line.replace("<>",",").split('/t')[1].split(','): if item in app: app_count_i_u=app_count_i_u+1 else: app_count_i_u=app_count_i_u #获取投资者的tdid--id_data_u、使用的app id_data if len(line.split("/t/t"))!=2: id_data_u.append(line.split(',')[0].replace("((","")) id_data.append(line.replace("<>",",").split('/t')[1].split(',')) #获取投资者的使用且在hash表中APP列表--service_data_u if len(line.split("/t/t"))!=2: for item in line.replace("<>",",").split('/t')[1].split(','): if item in app: service_data_u.append(item) ####appi的名称和权重 def count_service_data_u_c(): #cc=0 for i in xrange(len(app)-1): Data=app[i+1] count=service_data_u.count(Data) if count==0: pass elif count>0 and count!=304: #cc=cc+count appi_1.append(app[i+1]) appi_2.append(float(count/14.26)) return appi_1,appi_2 #### 求score() def score(): d1,d2=count_service_data_u_c() d=[] d_s=[] for line in id_data: d_s.append(sum(d)) d=[] for item in line: ##去掉支付宝的权重 if item in d1 and item!="-2174612473328510485": p=d2[d1.index(item)] d.append(p) else: d.append(0) d_sum_null=(d) return d_s #print id_data_u print score() #print count_service_data_u_c()