转载

python--统计数据集

公司的一些金融数据集需要做一个统计,总量达到了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() 
正文到此结束
Loading...