item_get_sales - 获取商品销量详情

item_get_sales - 获取商品销量详情

获取淘宝商品精确销量接口

在这里插入图片描述

测试网址:点击注册测试

Result Object:
---------------------------------------
{
	"item": {
		"num_iid": "641311955474",
		"detail_url": "http://item.taobao.com/item.htm?id=641311955474",
		"title": "Kroche 官方授权 珍珠蝴蝶结廓形西装外套女薄款宽松百搭西服上衣",
		"price": "650.00",
		"pic_url": "http://img.alicdn.com/i4/806774180/O1CN01bDWRTG1gkUDovhH3z_!!806774180.jpg",
		"quantity": "706",
		"preSellPrice": "",
		"promotion_price": "",
		"sales_30day": "39",
		"total_sales": "73",
		"data_from": "vip"
	},
	"error": "",
	"reason": "",
	"error_code": "0000",
	"cache": 0,
	"api_info": "today:31 max:10000",
	"execution_time": 1.046,
	"server_time": "Beijing/2021-05-17 15:59:33",
	"client_ip": "106.6.33.137",
	"call_args": [],
	"api_type": "taobao",
	"translate_language": "zh-CN",
	"translate_engine": "google_cn",
	"server_memory": "5.34MB",
	"request_id": "gw-4.60a222655cac7"
}
def get_all_item_daily_sales(order_table, store, store_level, month_list=None): """ 获取指定月份的仓的日均销量和标准差 :param store: 仓覆盖的范围 :param store_level: 仓库层级 :param is_dacu: 1:参考大促,2:不参考大促 :param month_list: 参考的月份 :return: dataframe """ firstclstore_set = set(order_table['firstclstore']) # 全部一级仓集合 secondclstore_set = set(order_table['secondclstore']) # 全部二级仓集合 advanceclstore_set = set(order_table['advanceclstore']) # 全部前置仓集合 localclstore_set = set(order_table['localstore']) # 全部本地仓集合 # 筛选仓覆盖范围 if store is None: order_df = order_table elif store in firstclstore_set and store_level == 1: order_df = order_table[order_table['firstclstore'] == store] elif store in secondclstore_set and store_level == 2: order_df = order_table[order_table['secondclstore'] == store] elif store in advanceclstore_set and store_level == 3: order_df = order_table[order_table['advanceclstore'] == store] elif store in localclstore_set and store_level == 4: order_df = order_table[order_table['localstore'] == store] # 筛选月份 order_df.qty = order_df.qty.astype(int) item_sale_df = order_df.groupby(['skuid', 'month', 'day'])['qty'].sum().reset_index() if month_list is None or len(month_list) == 0: item_sale_df = item_sale_df else: item_sale_df = item_sale_df.query('month in @month_list') del item_sale_df['month'] # cal_days = len(item_sale_df['day'].unique()) item_sale_table_df = item_sale_df.pivot(index='skuid', columns='day', values='qty').rename_axis( columns=None).reset_index() item_sale_table_df = item_sale_table_df.fillna(0) item_sale_table_df.set_index(['skuid'], inplace=True) mean_std_df = pd.DataFrame(index=item_sale_table_df.index, columns=['mean_sale', 'std_sale']) # 遍历每个 SKU for sku in item_sale_table_df.index: sales = item_sale_table_df.loc[sku] # 找到首次销售日期 start_date = sales[sales > 0].index.min() if pd.isna(start_date): # 从未销售,设为 0 mean_std_df.loc[sku, "mean_sale"] = 0 mean_std_df.loc[sku, "std_sale"] = 0 else: end_date = sales.index.max() valid_dates = sales.index[(sales.index >= start_date) & (sales.index <= end_date)] if len(valid_dates) <= 30: # 销售天数不足30天,取全部有效数据 window_sales = sales[valid_dates] else: # 取最近30天 # 计算最近30天的起始日期 end_time_date = datetime.strptime(end_date, '%Y%m%d') start_window = end_time_date - pd.Timedelta(days=29) start_window = start_window.strftime('%Y%m%d') window_sales = sales[start_window:end_date] # 计算均值和标准差 mean_std_df.loc[sku, "mean_sale"] = window_sales.mean() mean_std_df.loc[sku, "std_sale"] = window_sales.std() # # 获取行平均值 # item_mean_sale = pd.DataFrame(item_sale_table_df.mean(axis=1), columns=['mean_sale']) # item_std_sale = pd.DataFrame(item_sale_table_df.std(axis=1), columns=['std_sale']) # if item_std_sale.isnull().values.any(): # print('item_std_sale 中存在空值') # item_std_sale.fillna(0, inplace=True) # mean_std_df = pd.merge(item_mean_sale, item_std_sale, how='outer', left_index=True, right_index=True) pd_df = mean_std_df.reset_index() return pd_df
最新发布
09-30
由于没有给出`get_all_item_daily_sales`函数的具体代码,下面给出一个示例代码来实现获取指定月份仓的日均销量和标准差,并对其进行优化。 ### 示例代码 ```python import pandas as pd import numpy as np def get_all_item_daily_sales(data, month): # 假设data是一个DataFrame,包含日期和销量列 # 先将日期列转换为日期类型 data['date'] = pd.to_datetime(data['date']) # 筛选出指定月份的数据 month_data = data[data['date'].dt.month == month] # 按仓分组计算日均销量 daily_sales = month_data.groupby('warehouse')['sales'].mean() # 按仓分组计算销量的标准差 sales_std = month_data.groupby('warehouse')['sales'].std() return daily_sales, sales_std # 示例数据 data = pd.DataFrame({ 'date': ['2024-01-01', '2024-01-02', '2024-02-01', '2024-02-02'], 'warehouse': ['A', 'A', 'B', 'B'], 'sales': [10, 20, 30, 40] }) # 调用函数获取指定月份(如1月)的日均销量和标准差 daily_sales, sales_std = get_all_item_daily_sales(data, 1) print("日均销量:", daily_sales) print("销量标准差:", sales_std) ``` ### 代码解释 1. **数据预处理**:使用`pd.to_datetime`将日期列转换为日期类型,方便后续筛选指定月份的数据。 2. **筛选数据**:通过`dt.month`方法筛选出指定月份的数据。 3. **分组计算**:使用`groupby`方法按仓分组,分别计算日均销量销量的标准差。 ### 优化建议 - **提前筛选数据**:如果数据量很大,可以在读取数据时就筛选出指定月份的数据,减少内存占用。 - **使用向量化操作**:`pandas`和`numpy`的向量化操作比循环操作更快,可以充分利用这些库的优势。 - **缓存中间结果**:如果某些计算结果会被多次使用,可以将其缓存起来,避免重复计算。 ### 优化后的代码示例 ```python import pandas as pd import numpy as np def get_all_item_daily_sales(data, month): # 假设data是一个DataFrame,包含日期和销量列 # 先将日期列转换为日期类型 data['date'] = pd.to_datetime(data['date']) # 提前筛选出指定月份的数据 month_data = data[data['date'].dt.month == month].copy() # 按仓分组计算日均销量和标准差 grouped = month_data.groupby('warehouse')['sales'] daily_sales = grouped.mean() sales_std = grouped.std() return daily_sales, sales_std # 示例数据 data = pd.DataFrame({ 'date': ['2024-01-01', '2024-01-02', '2024-02-01', '2024-02-02'], 'warehouse': ['A', 'A', 'B', 'B'], 'sales': [10, 20, 30, 40] }) # 调用函数获取指定月份(如1月)的日均销量和标准差 daily_sales, sales_std = get_all_item_daily_sales(data, 1) print("日均销量:", daily_sales) print("销量标准差:", sales_std) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值