2018年B题__任务1

导入pandas 库 与numpy 库 

import pandas as pd
import numpy as np
数据预处理
df1 = pd.read_csv(r'file1.csv',encoding = 'gbk')

使用pd.read_csv(r/w/a"内容.csv",encoding = " ")  encoding是设置文件读取的方式

df1 = df1.drop(70679,axis=0)#脏数据所在70679

数据中有"脏数据" 使用.drop(内容) 清洗该行的数据. 其中, 默认情况下 axis =0 [删除行] , axis = 1 [删除列] 

使用pandas中的模块 读取csv , 读取 csv  [读取: read_csv  创建 : to_csv]

如果需要查找某名称下的内容 使用变量名 = 变量名的CSV[变量名的csv["名称"] == "内容"]  

data_a = df1[df1['地点']=='A']

.split() 函数 : 表示为分隔符 默认为空格 . 如果里面有内容,就以里面的内容为分隔.

.split("",数值)[ ]   :  "- 内容" ,数值 : 以分割次数, [ ] 切片(选取某个字符)

eval() 函数  : 用来执行一个字符串表达式,并返回表达式的值。

def timefunc(time):
    '''提取当前月份'''
    m = time.split('/')[1]
    return eval(m)

lambda() 函数 :  lambda 参数 :  返回值 . (可以使用 也可以不使用)

map() 函数 : 会根据提供的函数对指定序列做映射 -- 一 一 对 应

f = lambda x : timefunc(x)
df1['mounth'] = df1['支付时间'].map(f)
groupby()函数 : 语法 .groupby("")[""] 当()的值是自定义函数的值时,不需要" ".
例如 : groupby('mounth')['实际金额'] 按照 monthy与实际金额 进行分组
默认情况下是 axis = 0 方向(行方向)进行分组.
如果groupby后面写入axis=1 按照方向(列方向)进行分组,
sum() : 求数据(非NA值)的总和  count() :求分组中数据(非NA值)的平均值 
loc[]的用法 : 按照数据序列切片 。也可以使用 [] 切片。
a1 = data_a.groupby('mounth')['实际金额'].sum().loc[4]
a2 = data_a.groupby('mounth')['实际金额'].count().loc[4]
print('A售货机2017年4月的交易额为' + str(a1) +' 订单量为' + str(a2))
b1 = data_b.groupby('mounth')['实际金额'].sum().loc[4]
b2 = data_b.groupby('mounth')['实际金额'].count().loc[4]
print('B售货机2017年4月的交易额为' + str(b1) +' 订单量为' + str(b2))
c1 = data_c.groupby('mounth')['实际金额'].sum().loc[4]
c2 = data_c.groupby('mounth')['实际金额'].count().loc[4]
print('C售货机2017年4月的交易额为' + str(c1) +' 订单量为' + str(c2))
d1 = data_d.groupby('mounth')['实际金额'].sum().loc[4]
d2 = data_d.groupby('mounth')['实际金额'].count().loc[4]
print('D售货机2017年4月的交易额为' + str(d1) +' 订单量为' + str(d2))
e1 = data_e.groupby('mounth')['实际金额'].sum().loc[4]
e2 = data_e.groupby('mounth')['实际金额'].count().loc[4]
print('E售货机2017年4月的交易额为' + str(e1) +' 订单量为' + str(e2))
all1 = df1.groupby('mounth')['实际金额'].sum().loc[4]
all2 = df1.groupby('mounth')['实际金额'].count().loc[4]
print('所有售货机2017年4月的交易额为' + str(all1) +' 订单量为' + str(all2))
print('\n')

apply()函数 : 当一个函数的参数存在于一个元组或者一个字典中时,用来间接的调用这个函数,并肩元组或者字典中的参数按照顺序传递给参数.

默认情况下,axis= 0 ,有时候也会 axis=1指逐行应用.

apply ()函数 : 合并 数据 


配置文件 my.ini 的内容 : 

复制代码
m_p = grouped.apply(group1,'mounth') 
复制代码

 

首先导库 并且对数据进行预处理

#任务1

#任务1.1 : 创建各个售货机的csv , 再将附件1的数据进行分析处理--将地点中相同的数据放在一起。

#提取附件1的数据,使得数据统一化

#任务1.2 :计算每台售货机 2017 年 4 月份的交易额、订单量及所有售货机交易总额和订单总量,以表格形式体现在报告中。

#由于数据中没有直接明确月份的数据,如果按照上面的方法 会出现错误点。需要对支付时间进行以‘/’进行分隔 再进行切片; 也需要使用自定义函数 -- 按照上面的操作 让数值返回到一个地址 再次将支付时间以此对应赋给(map()函数)mounth。

这是需要再次调用data_a 目的是 :对新增的月份信息进行更新 (由于新创建一个mouth 系统本身不知道mouth是什么,需要对表进行更新 -- 复制data_a~data_e )

基本数据准备完成 开始计算 4 月份的交易额
其中需要使用groupby()函数进行分组 再次使用[]切片或者是.loc()进行切片. 其中.sum() 是计算数据和的方法 ; .count()是计算数据的量数。

#任务 1.3 计算每台售货机每个月的每单平均交易额与日均订单量,以表格形式体现在报告中

每台每月总销售额 :使用自定义函数 首先计算实际金额的总和 然后使用groupby()函数把整个数据按照地点分组, 再次 在上一步的基础上使用apply()函数 -- 合并 前面2步的数据 。
每台每月总销售量:使用自定义函数 首先计算订单号的数量 然后使用groupby()函数把整个数据按照地点分组, 再次 在上一步的基础上使用apply()函数 -- 合并 前面2步的数据 。

每台的每月每单平均交易额 : 每台每月总销售额 / 每台每月总销售量

**每台日均订单量: 每台每月总销售量 / 每月的时间

我与答案的区别是 : 
我: 每月的时间 : **   每台日均订单量: 每台每月总销售量 / 每月的时间

因为有A~E个销售机 每月的时间是一个定值 所以不用将时间再次进行分解,直接使用。
答案: 因为有A~E个销售机 将时间分解 每台 每月 有多少天。
---任意取2个变量,一个保留不动 另一个使用字典(k,i)写出时间的长度 ,然后再使用遍历(1,13)再使不动的变量[i] = 字典的[i],最后 每台日均订单量: 每台每月总销售量 / 每月的时间 。

posted @ 2020-09-20 21:30  敲代码的小付  阅读(265)  评论(0)    收藏  举报