钻展定向数据生成方法

用处

通过固定资源位下定向维度,可以观察出对应的哪个资源位下的哪个定向在拉开的日期中适合投放。另外创意也是同理。不加赘述。

前期要求

计划都是根据 资源位_定向 命名的;否则不成功。

生成要求

桌面准备一个Demo.txt的文档,其中把所有的定向的数据按照分日下载的总览放入到上面。

步骤

具体的生成文档程序所示. 都是顺序处理,无难点。

其中有两个关键点:
1, 分割字符串,可以用切片,也可以用正则,这里用的是切片,有兴趣的可以用’(.)_(.)’识别也可以。
用处:例如2中的例子160x200_Kinoo的C店; 160x200_Kinoo旗舰店 实际上对应人群一样; 可以放在一起。
2, 就是对应的具有相似字眼的文本处理,例如 160x200_核心人群; 160x200_核心人群双11预售两头投; 40行所在的位置

程序

import numpy as np
import pandas as pd

strings = open('C:\Users\Administrator\Desktop\demo.txt','r+').readlines();

for i in range(len(strings)):
    strings[i] = strings[i].split('
')[0]

columns = strings[0].split('	')

data = []
for i in np.arange(1,len(strings)):
    data.append(strings[i].split('	'))

df = pd.DataFrame(data,columns = columns);

#不用正则表达式,直接用字符串处理的方法
dxl = [] #资源位和定向
zyw = []
for i in range(len(df)):
    temp = df.计划基本信息[i].split('_')
    zyw.append(temp[0])
    dx = ''
    for j in np.arange(1,len(temp)):
        dx = dx + temp[j]
    dxl.append(dx)

df['资源位'] = pd.Series(zyw, index = range(len(df)))


#除去 相应不需要的字眼
new_dx = [] #无重集合__set类型
new_Data = [] #无重集合, 有序的正确字符串类型  <==== 后续能用上
newLL = []
for i in range(len(dxl)):
    tempReso = set(dxl[i]) - set('双11预售两头投')
    if(tempReso in new_dx):
        if(len(tempReso) <= len(set(dxl[i]))): #不涵盖这几个字
            newLL.append(dxl[i])
        else:
            for kk in new_Data :
                set(kk) == tempReso
                newLL.append(kk)
                break
    else:
        newLL.append(dxl[i])
        new_dx.append(tempReso)
        new_Data.append(dxl[i])

df['当前定向'] = pd.Series(newLL, index = range(len(df)))

#((set(s1) - set('双11预售两头投'))==(set(s2) - set('双11预售两头投'))):

'''
按日子分开; 将各个计划存储到对应的单元 < 无视 双11 两头投字眼>。
1, 显示每天的分布情况; 花费; //定时间

#2,显示相同的计划对应的时间维度 //定计划

3,生成的是对应的定向店铺的维度 

'''

df.to_csv('C:\Users\Administrator\Desktop\demo1.csv')


def setDayToDf(df,string):
    tempDf = df[df.时间 == string]
    kk = 'F:\By\12December\RubishResouse\'+ string +'_df.csv'
    tempDf.to_csv(kk)
    return 
#setDayToDf(df,'2016-10-11') #完成日期的生成模式

#传递进去资源位; 生成只涵盖资源位的位置
def setZYW(df,string):
    tempDf = df[df.资源位 == string]
    kk = 'F:\By\12December\RubishResouse\'+ string +'_df.csv'
    tempDf.to_csv(kk)
    return 

'''
生辰给资源位和定向 都相同// 根据时间维度变化的各个文件
'''

zyw0 = np.unique(zyw)
dx0 = np.unique(new_Data)
for i in zyw0:  #资源位
    for j in dx0: #定向
        df1 = df[df.资源位 == i] 
        temp_df2 = df1[df1.当前定向 == j]
        if(len(temp_df2) >2 ):
            file = 'F:\By\12December\RubishResouse\'+ i+'_'+j +'_df.csv'
            print('已经生成文档: ' ,file )
            temp_df2.to_csv(file)
        else:
            pass

print('End')

程序2

target: 生成对应目标下汇总的数据;

import numpy as np
import pandas as pd


index0 = ['展现','点击','消耗','点击率(%)','点击单价(元)','千次展现成本(元)','访客',
                '深度进店量','访问时长','访问页面数','收藏宝贝量','收藏店铺量','添加购物车量',
                '拍下订单量','拍下订单金额','成交订单量','成交订单金额','点击转化率(%)','投资回报率']
num = 3

strings = open('C:\Users\Administrator\Desktop\demo.txt','r+').readlines();

for i in range(len(strings)):
    strings[i] = strings[i].split('
')[0]

columns = strings[0].split('	')

data = []
for i in np.arange(1,len(strings)):
    data.append(strings[i].split('	'))

#把data变化成double型
for x in range(len(data)):
    for y in np.arange(2, len(data[x])):
        if(data[x][y] == ''):
            data[x][y] = 0
        else:
            data[x][y] = float(data[x][y])


df = pd.DataFrame(data,columns = columns);

#不用正则表达式,直接用字符串处理的方法
dxl = [] #资源位和定向
zyw = []
for i in range(len(df)):
    temp = df.计划基本信息[i].split('_')
    zyw.append(temp[0])
    dx = ''
    for j in np.arange(1,len(temp)):
        dx = dx + temp[j]
    dxl.append(dx)

df['资源位'] = pd.Series(zyw, index = range(len(df)))

'''
再替换回资源位
'''
for d in range(len(dxl)):
    dxl[d] = dxl[d][0:num]
df['定向'] = pd.Series(dxl, index = range(len(dxl)))

df.to_csv('C:\Users\Administrator\Desktop\ot1.csv')


def summary0(dfi):
    l = np.zeros(len(index0))
    #低级求和运算类    
    for d1 in dfi.as_matrix():
        for k in range(14):
            l[k] = l[k] + d1[k+2]
    #将低级求和项的几个权重算出来,分别是访问市长度访问页面数、
    l[3] = l[1]/l[0] #ctr
    l[4] = l[2]/l[1] #cpc
    l[5] = 1000*l[2]/l[0] #cpm
    l[8] = l[8]/l[6] #访问市场
    l[9] = l[9]/l[6] #访问页面数
    l[17] = l[15]/l[1]
    l[18] = l[16]/l[2] #roi
    return pd.Series(l, index = index0)


 #print('输入对应的资源位和需要的定向前4个字')

#通过df.columns 生成后复制进来; 不能直接取步长; 传递进去的都是去重后的数据

def setZDS(zyw = df.资源位 ,dx = df.定向 ):
    return np.unique(df.资源位),np.unique(df.定向)

def summary1(zyw1): #资源位
    df_temp = df[df.资源位 == zyw1]
    if(len(df_temp.index)>0):
        return zyw1,summary0(df_temp)
    else:
        return 

def summary2(dx1):#定向
    df_temp = df[df.定向 == dx1]
    if(len(df_temp.index)>0):
        return dx1,summary0(df_temp)
    else:
        return 

def summary3(zyw1, dx1):#资源位和定向
    df1 = df[df.资源位 == zyw1]
    sts = zyw1+'_'+dx1
    df_temp = df1[df1.定向 == dx1]
    if(len(df_temp.index)>0):
        return sts, summary0(df_temp)
    else:
        return 

zyws, dxs = setZDS() 

#生成定向的表格
def setDXT():
    l = []            
    for x in dxs:
        if(len(x)>0):
          l.append(summary2(x))
    return l
def setZyT():
    l = []            
    for x in zyws:
        if(len(x)>0):
          l.append(summary1(x))
    return l

def setZDT():
    l = []
    for x in dxs:
        for y in zyws:
          l.append(summary3(x,y))
    return l


def writeLS():
    la = []
    la.extend(setDXT())
    la.extend(setZyT())
    cc = open('C:\Users\Administrator\Desktop\new.txt','w+')

    cc.write('资源位_定向')
    cc.write('	')
    for ii in index0:    
        cc.write(ii)
        cc.write('	')
    cc.write('
')

    for sys in la:
        for x in sys:
            cc.write(sys[0])
            cc.write('	')
            for y in sys[1]:
                cc.write(str(y))
                cc.write('	')
            cc.write('
')
    cc.close()

writeLS()



原文地址:https://www.cnblogs.com/actanble/p/6713440.html