时间:2023-03-15 23:32:01 | 来源:电子商务
时间:2023-03-15 23:32:01 来源:电子商务
一、项目描述df = pd.read_csv('F:/pycharm project data//taobao/phone//final_goods_info.csv', encoding='utf-8', index_col=0)print(df.columns)
这里我们可以把字段氛围四类df.fillna(0, inplace=True)
然后我们需要将频次的数据转化为以及其他一些有实际意义的数字转化为int型cols = ['itemid', 'category', 'sellerId', 'isTmall', 'comment_count', '系统很强大', '手机不错', '用得久', '手机一般', '电池_1', '电池_0', '信号_1', '信号_0', '性价比_1', '功能_1', '功能_0', '音质_1', '音质_0', '屏幕_1', '屏幕_0', '正品_1', '软件_1', '软件_0', '按键_1', '按键_0', '外观_1', '外观_0', '拍照_1', '拍照_0', '手感_1', '死机_1', '配件_1', '配件_0', '包装_1', '赠品_1', '赠品_0', '物流_1', '物流_0', '视频_1', '发热_1', '发热_0', '轻便_1', '操作_1', '性价比_0', '正品_0', '手感_0', '死机_0', '包装_0', '总体_1', '总体_0', '视频_0', '轻便_0', '操作_0']for col in cols: df[col] = df[col].astype('int64')
对于用户分组的信息,如果发生缺失则代表,该商品中没有提及到手机适合的用户对象,所以我们用空值进行填充df.loc[df['年龄分组'] == 0, ['年龄分组']] = ''df.loc[df['角色分组'] == 0, ['角色分组']] = ''
②异常值的处理# 用分位数法去除异常值high_q = df['price'].quantile(q=0.75)# 上四分位数low_q = df['price'].quantile(q=0.25)# 下四分位数interval = (high_q - low_q)# 分位数间隔df = df.loc[(df['price'] > low_q - 3*interval) & (df['price'] < high_q + 3*interval), ]
去除异常数据之后,我们再来看一下各品牌手机的价格情况:# 对价格进行分箱处理labels = list(np.arange(60))counts, bins_edge = np.histogram(df['price'], bins=60)df['分组'] = pd.cut(df['price'], bins=bins_edge, labels=labels, include_lowest=True)price_list = []for bin_price in bins_edge: price_list.append(round(bin_price, 1))df['分组'] = pd.cut(df['price'], bins=bins_edge, labels=labels, include_lowest=True)plt.figure(figsize=(20, 10))sns.barplot(x=price_list[1: 61], y=counts)plt.xticks(rotation=90)plt.ylabel('count')plt.title('price')plt.show()
结果如下:# 按照价格分组数据进行切分gp_df = df.groupby('分组')# 价格和销量的曲线图g_sales_amount = gp_df['sales_amount'].agg(sum)plt.figure(figsize=(20, 12))sns.pointplot(x=np.arange(60), y=g_sales_amount.values[0: 60], color='r')plt.title('price-sales_amount')plt.xlabel('price')plt.xticks(rotation=90)plt.ylabel('sales_amount')plt.show()# 价格和销售量的关系g_sales_volume = gp_df['sales_volume'].agg(sum)plt.figure(figsize=(20, 12))sns.pointplot(x=np.arange(60), y=g_sales_volume.values[0: 60], color='r')plt.title('price-sales_volume')plt.xlabel('price')plt.xticks(rotation=90)plt.ylabel('sales_volume')plt.show()# print(bins_edge)
对比价格和销量,价格和销售额的的关系,我们可以得出以下信息:# 舍去价格位于0-175的价位之间的产品df = df.loc[df['分组'] != 0, ]# 按照价格分组数据进行切分gp_df = df.groupby('分组')# 价格和销量的曲线图g_sales_amount = gp_df['sales_amount'].agg(sum)plt.figure(figsize=(20, 12))sns.pointplot(x=np.arange(60), y=g_sales_amount.values[0: 60], color='r')plt.title('price-sales_amount')plt.xlabel('price')plt.xticks(rotation=90)plt.ylabel('sales_amount')plt.show()# 价格和销售量的关系g_sales_volume = gp_df['sales_volume'].agg(sum)plt.figure(figsize=(20, 12))sns.pointplot(x=np.arange(60), y=g_sales_volume.values[0: 60], color='r')plt.title('price-sales_volume')plt.xlabel('price')plt.xticks(rotation=90)plt.ylabel('sales_volume')plt.show()# print(bins_edge)
我们现在可以发现,当剔除了0-175之间特殊消费的影响后,销售额和销售量随价格波动的具有非常高的一致性,仍然有两个关键的位置,一个位置是6,对应1049.9-1224.9元的价格区间;一个是31的位置,对应的是5424.5-5599.5元的价格区间。价格低于1224.9时,销量和销售额随着价格的升高而升高;当价格位于1224.9-5424.5元区间内时,价格和销售量和销售额之间都呈现出反复脉冲的关系;当价格为5424.5-5599.5元区间内的时候销售额和销售量都出现显著的波峰;当价格高于5599.5元的时候,销售量和销售额都随着价格升高急剧下降。# 总体市场分析df['市场分组'] = ''df.loc[df['分组'].isin(list(np.arange(0, 7))), ['市场分组']] = 'low_market'df.loc[df['分组'].isin(list(np.arange(7, 31))), ['市场分组']] = 'medium_market'df.loc[df['分组'].isin(list(np.arange(31, 60))), ['市场分组']] = 'high_market'print(df.head(100))market_a_df = df.groupby('市场分组')['sales_amount'].sum().sort_values(ascending=False)market_v_df = df.groupby('市场分组')['sales_volume'].sum().sort_values(ascending=False)# 市场销售额和销售量分析plt.figure(figsize=(10, 10))plt.pie(market_a_df, labels=market_a_df.index, autopct="%1.1f%%")plt.title('market_amount')plt.show()plt.figure(figsize=(10, 10))plt.pie(market_v_df, labels=market_v_df.index, autopct="%1.1f%%")plt.title('market_volume')plt.show()
对比销售额和销售量在各个市场中的占比情况,我们可以得到以下信息:# 低端市场用户分布研究low_df = df.loc[df['分组'].isin(list(np.arange(0, 7))), ]g_low_df = low_df.groupby('年龄分组')['sales_amount'].sum().sort_values(ascending=False)# 低端市场的用户分布plt.figure(figsize=(10, 10))plt.pie(g_low_df, labels=g_low_df.index, autopct="%1.1f%%")plt.title('low_market_user')plt.show()
在上面的图中,左边是低端市场中用户按照年龄分类后的分布情况,右边是我国目前的人口结构中的年龄分布情况。对比我们可以发现在低端市场中,主要是老年人用户群体,占比超过53.3%,这非常符合我们的预期。但是我们也要注意到,按照低端市场在总市场占比50.5%,低端市场的用户中年人占比33.9%,中年人在我国人口结构中占比71.2%来计算,这部分中年人用户是一个庞大的基数。那这部分中年人的消费为什么会在低端市场?# 低端市场中年人用户画像研究cols = ['系统很强大', '手机不错', '用得久', '手机一般', '电池_1', '电池_0', '信号_1', '信号_0', '性价比_1', '功能_1', '功能_0', '音质_1', '音质_0', '屏幕_1', '屏幕_0', '正品_1', '软件_1', '软件_0', '按键_1', '按键_0', '外观_1', '外观_0', '拍照_1', '拍照_0', '手感_1', '死机_1', '配件_1', '配件_0', '包装_1', '赠品_1', '赠品_0', '物流_1', '物流_0', '视频_1', '发热_1', '发热_0', '轻便_1', '操作_1', '性价比_0', '正品_0', '手感_0', '死机_0', '包装_0', '总体_1', '总体_0', '视频_0', '轻便_0', '操作_0']# 进行用户分组分析g_low_um_df = low_df.loc[df['年龄分组'] == '中年人', cols].sum(axis=0).sort_values(ascending=False)# 中年人用户关注性能分析plt.figure(figsize=(10, 10))plt.pie(g_low_um_df[0: 10], labels=g_low_um_df.index[0: 10], autopct="%1.1f%%")plt.title('low_muser_point')plt.show()#中年人品牌分析bm_df = low_df.loc[df['年龄分组'] == '中年人']g_low_bm_df = bm_df.groupby('brand')['sales_amount'].sum().sort_values(ascending=False)# 中年人用户品牌分析plt.figure(figsize=(10, 10))plt.pie(g_low_bm_df[0: 8], labels=g_low_bm_df.index[0: 8], autopct="%1.1f%%")plt.title('low_muser_brand')plt.show()
在上面的图中,左边是中年人用户对手机某方面属性关注的占比情况,右边为中年人用户对品牌的偏好。可以发现中年人用户更为关注手机的整体性能,以及外观方面的属性,更青睐于荣耀,华为和小米三个品牌。(注意这里把荣耀和华为拆开是为了后面的对比方便)# 低端市场用户画像研究cols = ['系统很强大', '手机不错', '用得久', '手机一般', '电池_1', '电池_0', '信号_1', '信号_0', '性价比_1', '功能_1', '功能_0', '音质_1', '音质_0', '屏幕_1', '屏幕_0', '正品_1', '软件_1', '软件_0', '按键_1', '按键_0', '外观_1', '外观_0', '拍照_1', '拍照_0', '手感_1', '死机_1', '配件_1', '配件_0', '包装_1', '赠品_1', '赠品_0', '物流_1', '物流_0', '视频_1', '发热_1', '发热_0', '轻便_1', '操作_1', '性价比_0', '正品_0', '手感_0', '死机_0', '包装_0', '总体_1', '总体_0', '视频_0', '轻便_0', '操作_0']# 进行用户分组分析g_low_u_df = low_df[cols].sum(axis=0).sort_values(ascending=False)# 低端市场用户关注性能分析plt.figure(figsize=(10, 10))plt.pie(g_low_u_df[0: 10], labels=g_low_u_df.index[0: 10], autopct="%1.1f%%")plt.title('low_user_point')plt.show()#低端市场品牌分析g_low_m_df = low_df.groupby('brand')['sales_amount'].sum().sort_values(ascending=False)# 中年人用户品牌分析plt.figure(figsize=(10, 10))plt.pie(g_low_m_df[0: 8], labels=g_low_m_df.index[0: 8], autopct="%1.1f%%")plt.title('low_user_brand')plt.show()
我们可以发现低端市场中的用户画像和低端市场中中年人的用户画像差距非常大,在手机的属性方面,低端市场的用户更为关注的是手机的音质、功能(手机的基本功能,例如电打电话、上网等)方面的属性,这与低端市场中老年人占比较多有关;品牌的偏好上,低端市场的用户出现了一些不知名的小品牌,荣耀也占一定的比例。# 中端市场用户画像研究cols = ['系统很强大', '手机不错', '用得久', '手机一般', '电池_1', '电池_0', '信号_1', '信号_0', '性价比_1', '功能_1', '功能_0', '音质_1', '音质_0', '屏幕_1', '屏幕_0', '正品_1', '软件_1', '软件_0', '按键_1', '按键_0', '外观_1', '外观_0', '拍照_1', '拍照_0', '手感_1', '死机_1', '配件_1', '配件_0', '包装_1', '赠品_1', '赠品_0', '物流_1', '物流_0', '视频_1', '发热_1', '发热_0', '轻便_1', '操作_1', '性价比_0', '正品_0', '手感_0', '死机_0', '包装_0', '总体_1', '总体_0', '视频_0', '轻便_0', '操作_0']# 进行用户分组分析medium_df = df.loc[df['分组'].isin(list(np.arange(7, 31))), ]g_medium_u_df = medium_df[cols].sum(axis=0).sort_values(ascending=False)# 低端市场用户关注性能分析plt.figure(figsize=(10, 10))plt.pie(g_medium_u_df[0: 10], labels=g_medium_u_df.index[0: 10], autopct="%1.1f%%")plt.title('medium_user_point')plt.show()#中端市场品牌分析g_medium_m_df = medium_df.groupby('brand')['sales_amount'].sum().sort_values(ascending=False)# 中年人用户品牌分析plt.figure(figsize=(10, 10))plt.pie(g_medium_m_df[0: 8], labels=g_medium_m_df.index[0: 8], autopct="%1.1f%%")plt.title('medium_user_brand')plt.show()
对比中端市场用户的画像和低端市场中中年人的用户画像,可以发现在手机的属性方面,中端市场用户和低端市场中年人的用户关注点近似,都是产品的功能(手机的基本功能,例如电打电话、上网等)、外观、电池、拍照等;在品牌偏好上苹果的价位较高,没有千元机,所以低端市场的中年人用户没有选择权,但对华为、荣耀、小米几个品牌商认同度接近。# 中端市场分析gp_df = df.groupby('分组')# 价格和销量的曲线图g_sales_amount = gp_df['sales_amount'].agg(sum)plt.figure(figsize=(20, 12))sns.pointplot(x=np.arange(7, 31), y=g_sales_amount.values[7: 31], color='r')plt.title('price-sales_amount')plt.xlabel('price')plt.xticks(rotation=90)plt.ylabel('medium_sales_amount')plt.show()# 价格和销售额的关系g_sales_volume = gp_df['sales_volume'].agg(sum)plt.figure(figsize=(20, 12))sns.pointplot(x=np.arange(7, 31), y=g_sales_volume.values[7: 31], color='r')plt.title('price-sales_volume')plt.xlabel('price')plt.xticks(rotation=90)plt.ylabel('medium_sales_volume')plt.show()
可以发现中端市场的价格和销售额以及销售量都存在着反复脉冲的复杂关系,那为什么会呈现出这种关系呢?# 中端市场用户研究g_medium_df = medium_df.groupby('年龄分组')['sales_amount'].sum().sort_values(ascending=False)# 低端市场的用户分布plt.figure(figsize=(10, 10))plt.pie(g_medium_df, labels=g_medium_df.index, autopct="%1.1f%%")plt.title('medium_market_user')plt.show()
上图是中端市场用户的一个分布图,由于我们在从评论中挖掘用户信息的时候,主要是挖掘在评论中提及到的对象,比如某条评论中可能会提及到手机适合老人使用,那么我们就可以挖掘到老人这个用户信息,但是对于大部分给自己买手机的消费者来说,不会表明自己的身份,只会对产品本身加以评论,所以图中缺失的80.1%的用户信息主要集中在中青年,有独立的消费能力的人群中。# 中端市场价格多元化与销售量的关系pro_list = ['华为', '苹果', '小米', '荣耀', 'oppo', 'vivo', '三星']g_b_medium_df = medium_df.groupby('brand')['price']price_sum_list = []for i in range(len(pro_list)): b_df = g_b_medium_df.get_group(pro_list[i]).value_counts() price_sum_list.append(len(b_df))# print(price_sum_list)plt.figure(figsize=(12, 8))sns.barplot(x=pro_list, y=price_sum_list)plt.title('medium_market_brand_price')plt.show()g_b_medium_volume_df = medium_df.groupby('brand')['sales_volume']volume_sum_list = []for i in range(len(pro_list)): b_df = g_b_medium_df.get_group(pro_list[i]).sum() volume_sum_list.append(b_df)# print(price_sum_list)plt.figure(figsize=(12, 8))sns.barplot(x=pro_list, y=volume_sum_list)plt.title('medium_market_brand_volume')plt.show()
在上图中,左边的图表示在中端市场中每个品牌手机制定的价格数量,右边的图表示每个品牌手机在中端市场中的销售额,我们可以很明显的看出一致性非常强,既制定价格数越多的品牌,其对应的销售额就越多,这也很好的证明了我们上面的结论。# 高端市场用户画像研究high_df = df.loc[df['分组'].isin(list(np.arange(31, 60))), ]cols = ['系统很强大', '手机不错', '用得久', '手机一般', '电池_1', '电池_0', '信号_1', '信号_0', '性价比_1', '功能_1', '功能_0', '音质_1', '音质_0', '屏幕_1', '屏幕_0', '正品_1', '软件_1', '软件_0', '按键_1', '按键_0', '外观_1', '外观_0', '拍照_1', '拍照_0', '手感_1', '死机_1', '配件_1', '配件_0', '包装_1', '赠品_1', '赠品_0', '物流_1', '物流_0', '视频_1', '发热_1', '发热_0', '轻便_1', '操作_1', '性价比_0', '正品_0', '手感_0', '死机_0', '包装_0', '总体_1', '总体_0', '视频_0', '轻便_0', '操作_0']# 进行用户分组分析g_high_u_df = high_df[cols].sum(axis=0).sort_values(ascending=False)# 高端市场用户关注性能分析plt.figure(figsize=(10, 10))plt.pie(g_high_u_df[0: 10], labels=g_high_u_df.index[0: 10], autopct="%1.1f%%")plt.title('high_user_point')plt.show()#中端市场品牌分析g_high_m_df = high_df.groupby('brand')['sales_amount'].sum().sort_values(ascending=False)# 中年人用户品牌分析plt.figure(figsize=(10, 10))plt.pie(g_high_m_df[0: 5], labels=g_high_m_df.index[0: 5], autopct="%1.1f%%")plt.title('high_user_brand')plt.show()
上图中左边为高端市场中用户关注的手机属性分布情况,右图为高端市场的用户对品牌的偏好分布情况,对比后我们发现:# 高端市场价格多元化与销售量的关系pro_list = ['华为', '苹果', '小米', '荣耀', 'oppo', 'vivo', '三星']g_b_high_df = high_df.groupby('brand')['price']price_sum_list = []for i in range(len(pro_list)): b_df = g_b_high_df.get_group(pro_list[i]).value_counts() price_sum_list.append(len(b_df))# print(price_sum_list)plt.figure(figsize=(12, 8))sns.barplot(x=pro_list, y=price_sum_list)plt.title('high_market_brand_price')plt.show()g_b_high_volume_df = high_df.groupby('brand')['sales_volume']volume_sum_list = []for i in range(len(pro_list)): b_df = g_b_high_df.get_group(pro_list[i]).sum() volume_sum_list.append(b_df)# print(price_sum_list)plt.figure(figsize=(12, 8))sns.barplot(x=pro_list, y=volume_sum_list)plt.title('high_market_brand_volume')plt.show()
在上图中,左边的图表示在高端市场中每个品牌手机制定的价格数量,右边的图表示每个品牌手机在高端市场中的销售额,我们可以很明显的看出华为在高端市场中价格制定相对比较集中,但是其在销售额上仍然表现比较好,这其实反映了华为进入高端市场是相对比较谨慎的。# 销量和销售额分析g_a_df = df.groupby('brand')['sales_amount'].sum().sort_values(ascending=False)g_v_df = df.groupby('brand')['sales_volume'].sum().sort_values(ascending=False)# 销售量plt.figure(figsize=(12, 12))plt.pie(g_a_df[0: 8], labels=g_a_df.index[0: 8], autopct="%1.1f%%")plt.title('high_user_brand')plt.show()# 销售额plt.figure(figsize=(12, 12))plt.pie(g_v_df[0: 8], labels=g_v_df.index[0: 8], autopct="%1.1f%%")plt.title('high_user_brand')plt.show()
在上图中,左边的图表示各品牌的销量占比,右边的图表示每个品牌手机销售额占比。结合三星在中高端市场多元化的价格策略分析,我们发现尽管三星在中端市场和高端市场中实施了多元化的价格策略,但是从整体上来看,中高端市场的价格多元化战略并没有给三星带来整体市场在销量以及销售额上的提升。这是什么原因造成的呢?# 各品牌均价g_mp_df = medium_df.groupby('brand')['price'].mean().sort_values(ascending=False)plt.figure(figsize=(20, 8))sns.barplot(x=g_mp_df.index, y=g_mp_df.values)plt.xticks(rotation=90)plt.title('m_brand_mean_price')plt.show()
我们可以看出在中端市场,销售额占比较大的几个品牌除了苹果外,华为、小米、荣耀、oppo、vivo的价格均低于三星。关键词:挖掘,分析,数据