复制
收藏
提问
简洁

import lead as lead import numpy as np import pandas as pd import scipy as scipy import sm as sm import statsmodels.api as sm from matplotlib import pyplot as plt import matplotlib from scipy.optimize import curve_fit matplotlib.use('TkAgg') # 1.读取数据 def read_file(file1,file2): raw_data = pd.read_excel("D:\\data\\" + file1) sfbs = pd.read_excel("D:\\data\\" + file2) # 读取省份标识文件 sfbs.rename(columns = { "客户标识" : "客户标志"}, inplace=True) data = raw_data.copy() data1 = pd.merge(sfbs, data, left_on="客户标志", right_on=" 客户标志", how="inner") # 名字不一样貌似会保留两行 data1 = data1.drop(" 客户标志", axis=1) condition = data1["规格"].str.contains("12") # 筛选条件 dat_12 = data1.loc[condition,: ].copy() # 得到12支的数据 return dat_12 if __name__ == "__main__": dat_12 = read_file("葡萄糖酸锌.xlsx","客户省份标识.xlsx") #print(dat_12) # 2进行数据清洗 def data_clear(dat_12): dat_12.dropna(axis="index", how = "any", inplace= True) # 删除缺失值 dat_12 = dat_12.loc[(dat_12["零售数量"]>0) & (dat_12["零售数量"] <100), :] dat_12 = dat_12.loc[(dat_12["进货价"]>0) & (dat_12["进货价"] <100), :] dat_12 = dat_12.loc[(dat_12["零售价"]>0) & (dat_12["零售价"] <100), :] dat_12 = dat_12.loc[(dat_12["生产日期"]> "2017-01-07") & (dat_12["生产日期"] < "2022-05-31"), :] dat_12.loc[:,"生产年月日"] = "" dat_12.loc[:,"生产年月日"] = dat_12["生产日期"].str[0:11] dat_12.loc[:,"零售年月日"] = dat_12["零售日期"].str[0:11] dat_12["生产年月日"] = pd.to_datetime(dat_12["生产年月日"]) dat_12["零售年月日"] = pd.to_datetime(dat_12["零售年月日"]) dat_12.loc[:,"库龄"] = dat_12["零售年月日"] - dat_12["生产年月日"] dat_12["库龄"] = dat_12["库龄"].map(lambda x: x.days) dat_12 = dat_12.loc[(dat_12["库龄"] > 0) & (dat_12["库龄"] <1095), : ] return dat_12 # print(dat_12) def clear(data , x): # 这里x是需要清理的列名,需为字符串 lim_up = data[x].mean() + 1.96* data[x].std() lim_low = data[x].mean() - 1.96 * data[x].std() data = data.loc[ (data[x]<lim_up) & (data[x]>lim_low),:] return data dat_12 = data_clear(dat_12) dat_12 = clear(dat_12, "零售数量") dat_12 = clear(dat_12, "零售价") dat_12 = clear(dat_12, "进货价") dat_12.to_excel("D:\\data\\cleaned_data.xlsx", index=False) # print(dat_12) # 3.计算全国范围店均零售情况 def calculate_country(dat_12): amount = sum(dat_12["零售数量"]) num_store = dat_12.groupby(["客户标志", "门店标志"]).count().shape[0] store_ave = amount / num_store zj = {"销售总量": amount, "门店总数": num_store, "店均销售": store_ave} zj = pd.DataFrame(zj, index=[0]) return zj all_country = calculate_country(dat_12) # print(all_country) # 4.计算出不同门店类型的店均售出 def calculate_diff_class(dat_12): dat1 = dat_12.groupby(["客户标志", "门店标志", "客户类型"], as_index=False)["零售数量"].sum() dat2 = dat1.groupby("客户类型", as_index=False)["零售数量"].sum() dat3 = dat1.groupby("客户类型", as_index=False)["客户标志"].count() dat5 = pd.merge(dat2, dat3, on="客户类型") dat5.rename(columns={"客户标志": "门店数量"}, inplace=True) dat5.loc[:, "店均售出"] = dat5["零售数量"] / dat5["门店数量"] dat5.rename(columns={"客户类型": "范围"}, inplace=True) return dat5 diff_class = calculate_diff_class(dat_12) # print(diff_class) # 5.计算出不同省份的店均售出 def calculate_province(dat_12): dat1 = dat_12.groupby(["客户标志", "门店标志", "省份"], as_index=False)["零售数量"].sum() dat2 = dat1.groupby("省份", as_index=False).agg({"零售数量": "sum", "门店标志": len}) dat2.rename(columns={"门店标志": "门店数量"}, inplace=True) dat2.loc[:, "店均销量"] = dat2["零售数量"] / dat2["门店数量"] dat2.rename(columns={"店均销量": "店均售出", "省份": "范围"}, inplace=True) return dat2 dif_province = calculate_province(dat_12) # print(dif_province) # 6.整理纵向数据情况,数理上,当数据不符合正态分布时,通过对数据求log def prepare_for_longitude(dat_12): dat_12.loc[:, "零售年月"] = dat_12["零售日期"].str[0:7] # 都是开区间 dat_12.loc[:, "加权成本"] = dat_12["进货价"] * dat_12["零售数量"] dat_12.loc[:, "利润率"] = (dat_12["零售价"] - dat_12["进货价"]) / dat_12["进货价"] dat_12.loc[:, "加权总价"] = dat_12["零售价"] * dat_12["零售数量"] dat_12.loc[:, "每笔利润"] = dat_12["加权总价"] - dat_12["加权成本"] dat_12.loc[:, "每笔加权利润率"] = dat_12["利润率"] * da

1801f4b44
2个月前
全网
文档
学术
百科
知识库
时间不限
自动
回答简洁模式
深入研究一些

看起来你正在编写一个Python脚本,用于处理和分析一些销售数据。你的脚本包括以下几个主要部分:

  1. 读取数据:从Excel文件中读取原始数据和省份标识数据,并将它们合并。
  2. 数据清洗:删除缺失值,筛选特定条件的数据,以及对数据进行标准化处理。
  3. 计算全国范围店均零售情况:计算总销售量、门店总数和店均销售量。
  4. 计算不同门店类型的店均售出:根据门店类型分组,计算每个类型的总销售量和门店数量,然后计算店均售出。
  5. 计算不同省份的店均售出:根据省份分组,计算每个省份的总销售量和门店数量,然后计算店均售出。
  6. 准备纵向数据:对数据进行处理,以便进行纵向分析,包括计算加权成本、利润率等。

你的脚本中有几个函数,每个函数都有特定的任务。然而,你的脚本在第6部分的最后似乎有一个语法错误,dat_12["每笔加权利润率"] = dat_12["利润率"] * da 这一行没有完成,da 应该是 dat_12 的一个列名,但是没有给出。

此外,你的脚本中有一些潜在的问题和改进点:

  • 在数据清洗部分,你使用了硬编码的阈值(例如,零售数量、进货价和零售价的范围),这可能需要根据实际数据进行调整。
  • 在数据清洗时,你使用了标准差的方法来去除异常值,这可能不是最佳方法,因为它假设数据是正态分布的。如果数据不是正态分布的,可能需要使用其他方法来识别和处理异常值。
  • 在计算全国范围店均零售情况和其他计算函数中,你使用了sum()count()函数,但没有考虑数据可能存在的分组情况,这可能会导致结果不准确。

如果你需要帮助解决这些问题或者有其他问题需要帮助,请随时告诉我。我可以帮助你调试代码、优化数据处理流程或者提供数据分析的建议。

你觉得结果怎么样?
如何使用pandas进行数据清洗?
numpy在数据分析中的应用
scipy库的优化方法有哪些?
statsmodels在统计分析中的作用
matplotlib绘制数据可视化的方法
如何使用curve_fit进行曲线拟合? pandas处理缺失数据的技巧

以上内容由AI搜集生成,仅供参考

在线客服