我有一个包含产品名称和销售金额(CSV格式)的每日数据集 此数据是最近1年的数据。 我需要找到每种产品的销售额的中位数,并创建一个具有产品名称和销售额中值的模型
现在,当我提供带有产品名称和销售金额的今天的数据时,模型应该为我提供销售金额介于+ /-之间的产品名称 模型中值的10%。
样本数据
ProductName,Date,Amount
P1,01-01-2019,1000
p2,01-01-2019,1000
p3,01-01-2019,1000
P1,02-01-2019,1878
p2,02-01-2019,1540
p3,02-01-2019,1482
P1,04-01-2019,2010
p2,04-01-2019,2540
p3,04-01-2019,2365
P1,06-01-2019,995
p2,06-01-2019,860
p3,06-01-2019,1000
答案 0 :(得分:0)
您似乎无法提供所做工作的任何代码,并且此站点未为您提供代码。 但是仍然看到您是新来的:
尝试一下:
import pandas as pd
import numpy as np
ProductName = [
'P1', 'p2', 'p3', 'P1', 'p2', 'p3', 'P1', 'p2', 'p3', 'P1', 'p2', 'p3'
]
Date = [
'01-01-2019', '01-01-2019', '01-01-2019', '02-01-2019', '02-01-2019',
'02-01-2019', '04-01-2019', '04-01-2019', '04-01-2019', '06-01-2019',
'06-01-2019', '06-01-2019'
]
Amount = [1000, 1000, 1000, 1878, 1540, 1482, 2010, 2540, 2365, 995, 860, 1000]
df = pd.DataFrame({'Product Name': ProductName, 'Date': Date, 'Amount': Amount})
df_Product = df.groupby('Product Name').median()
data = {'ProductName':'P1','Date':'03-04-2019','Amount':1525}
for index,row in df_Product.iterrows():
if data['Amount'] >= row['Amount'] - 0.1*row['Amount'] and data['Amount'] <= row['Amount'] + 0.1*row['Amount']:
print(index)
答案 1 :(得分:0)
有许多检测异常值的方法。它们是基于Z_score的模式,基于统计的检测或基于机器学习的异常值检测。
最近,我正在对多维数据集使用基于统计的OD检测模式。此模式将需要statsmodels lib。
这是示例代码: 将熊猫作为pd导入 导入statsmodels.api作为sm 导入matplotlib.pyplot作为plt 从scipy.stats导入zscore
df=pd.DataFrame(Your_sample_data)
y_col = "amount"
X_cols = ["ProductName","Date"]
X=df[X_cols]
y=df[OD_y_col]
lm = sm.OLS(y,X).fit()
OD_result =lm.outlier_test()
print(lm.summary())
print(OD_result[OD_result.unadj_p<=confidence_level])
希望以上伪代码可以帮助您。