python报表自动化
实现Python报告自动化这是上周做的最有激情的事情咯,做这件事情的目的:第一、熟悉python之前也有用但是一段时间不用就生疏了,第二、提高工作效率,做好了个人每天能节约十几分钟,随着在公司的推广节约的时间也会越来越多(不好推),下面看看整个的流程:
没用Python之前的流程
早上工作流程:
第一:各平台下载前天的订单数据并放到相应的位置
第二:平台数据复制到各平台的统计表中并匹配出日期、产品型号,并算出每个产品的销量和销售
第三:把销量、销售额数据复制至全网销量统计表和全网销售统计表中;
以上三步花二十分钟当天的基本工作算是完成了;
用python后的流程:
第一步:各平台下载前天的订单数据并放到相应的位置
第二步:利用当天日期函数datetime -1 得到日期,利用日期+os模块在相应的文件夹中找到相应的数据,并把数据读取为dataFrame ,这一步会得到 原始文件的dataFram和date
第三步:读取相应门店的型号对照表为dataFrame 并把原始数据的dataFrame和对照表的dataFrame中的“商品id”列的类型转为字符串类型;
第四步:利用pd.merge函数左连接匹配原始文件和型号对照表,匹配出每个订单的型号并加上日期列,这里当原始数据表的型号没有全部匹配出来时,把没有匹配出来的数据输出到型号对照表中,在型号对照表添加相应的型号后重新匹配处理,当全部匹配出来后把数据按特定的顺序写入到相应店铺统计表中,同时选出相应的列根据金额排序后写入到全网销量统计表和全网销售表中,到这里大概就完成了利用python进行数据统计了,各个平台的数据统计方式不太一样,根据计算方式用python对原始数据进行处理就好。下面看具体的代码:
第一:根据输入的数字找到相应的文件并读取为dataframe函数
def time_file(number,url_1,url_2=folder_10):
statistical_date=(datetime.datetime.now()-datetime.timedelta(days=number)).strftime("%Y-%m-%d")
mm=statistical_date[5:7]+"月"
file_list_url=url_1+mm+folder_10
url=file_name(file_list_url,statistical_date)
#url_3="【生意参谋】商品效果-"+statistical_date+"-"+statistical_date+".xls"
#url=url_1+mm+url_2+url_3
'''
if url==None:
print ("没有相应的文件,请添加文件")
return
print("处理文件的日期为:",statistical_date)
print("处理文件的路径是:",url)
try :
df=pd.read_excel(url,header=3)
print("文件已读取为df")
#转变“商品ID“的类型
df['商品id']=df['商品id'].astype(str)
return df,statistical_date
except IOError:
print ("没有相应文件 ")
def file_name(file_dir,date):
flie_list=[]
for root,dirs,files in os.walk(file_dir):
flie_list.append(files)
for i in flie_list[0]:
b="".join(i)
if date in b:
return file_dir+b
第二:把数据写入全网销量、全网销售的数据
#功能传入日期和原始文件的df 自动处理文件
def tianjia(date,df,tiaomao_file,dianpu,xinghao=taoxixinghao):
#第二步读取型号对照表
xinghao=pd.read_excel(taoxixinghao)
xinghao['商品id']=xinghao['商品id'].astype(str)
df_1=pd.merge(df,xinghao,how='left',on='商品id')
df_1['日期']=date
df_1.insert(0,'型号',df_1.pop('型号'))
df_1.insert(1,'日期',df_1.pop('日期'))
df_nan=df_1.loc[df_1['型号'].isnull()]
if len(df_nan)>0:
df_nan=df_nan.loc[:,['商品id','商品标题_x','商品链接_x']]
df_nan['店铺']=dianpu
df_nan.insert(0,'店铺',df_nan.pop('店铺'))
df_na=df_nan.reset_index()
df_na.pop('index')
df_new_sheet(taoxixinghao,'商品效果',df_na)
print("型号没有全部匹配出来,请在型号表添加相关型号")
else:
t=[]
for i in range(len(df.columns)+2):
t.append(i)
df_2=df_1.ix[:,t]
#将数据添加天猫统计表中
print ('开始把数据写入店铺统计表文件')
df_new_sheet(tiaomao_file,'所有终端',df_2)
print ("写入店铺统计表完成")
#数据添加至全网销量统计表中
df_1['店铺']=dianpu
df_3=df_1.loc[:,['店铺','日期','型号','支付商品件数','支付金额']]
df_4=df_3[df_3['支付金额']>0]
df_5=df_4.sort_index(by=['支付金额'],axis=0,ascending=False)
df_6=df_5.reset_index(drop=True)
df_new_sheet(quanwangxiaoliang,'所有终端',df_6)
print("已把文件出入全网销量表")
第三:辅助表 把dataframe从指定的xls最后一行开始写入
#功能把dataFrame新增到xls文件中(只能是xls文件)
#从xls表最后一行新增加dataframe数据
#excel_through 为工作薄路径和工作薄名
#sheet操作的工作表
#data 要写入工作薄的df
#这里要工作薄文件格式要为xls文件
def df_new_sheet(excel_through,sheet,data):
#打开需要操作的excel表
ooutfile=excel_through
wb=xlrd.open_workbook(ooutfile) #保留原格式formatting_info=True
#复制原有表
newb=copy(wb)
#获取原有excel表中的sheet
sumsheet=newb.get_sheet(sheet)
#k表示该sheet的最后一行
k=len(sumsheet.rows)
#获取df的行数和列数
hang=len(data)
lie=len(data.columns)
#循环数据放入sheet中
for i in range(hang):
for x in range(lie):
sumsheet.write(k+i,x,data.ix[[i]].values[0][x])#K 行 0列
newb.save(ooutfile)
注意点:1、型号对照表中每个“商品id”都要是唯一的,不然相应的型号会重复匹配,之前就遇到这个坑;2、“商品id”类型要转为为字符串类型
这是最简单的python利用了吧,接下来所有表格的数据都改为python处理,同时把数据导入mysql中,接下来玩Python+MySQL+机器学习啦! 最近有了一个学习对象,有个同事每天9点之前到公司,晚上11点之后回住所基本上没有休息,期间都是在各种学习并把学到的知识用于提升工作效率,了解他之后打破了我自认为很努力的幻觉,自己学习到8点就以为自己很努力拉,跟他一对比真的不算什么了,虽然个人提倡工作也是为了更好的生活,但是自己努力程度明显不够,有些人你见到了就算是长见识了,这算是见到活人的力量咯,接下来希望跟他一样好好学习,早日做出成果出来,当然工作之余不会忘了追追妹子+锻炼身体咯。