手机销售数据分析

手机销售数据分析

注: 本文基于Python 实战之淘宝手机销售分析
进行修改。
本文数据来源于网友从淘宝爬取的全网手机销售数据,包括cellphone.csv(淘宝网在售的手机商品信息),count_add_comments.csv(手机商品的评价信息),comments.csv(手机商品的具体评价)

数据介绍

查看数据详细信息

import pandas as pd
import numpy as np
import time
phone=pd.read_csv('cellphone.csv')
add_comments=pd.read_csv('count_add_comments.csv')
comments=pd.read_excel('comments.xlsx')
print(phone.info())
print(add_comments.info())
print(comments.info())

cellphone.csv的数据详细信息如下:
在这里插入图片描述
count_add_comments.csv的数据详细信息如下:
在这里插入图片描述
comments.csv的数据详细信息如下:
在这里插入图片描述

分析思路

手机销售数据
手机销售数据
度量
分类数据
时间
商品参数
后置摄像头_清晰度
摄像头类型_摄像头个数
网络类型_2g/3g/4g/5g
网络模式_单卡/双卡
运行内存RAM
存储容量
品牌
发货地址
发货城市
发货省份
价格等级
评价内容
爬取时间
商品发布时间
评价时间
累计评价数_总销量
商品现价
商品原价
商品折扣
总销售额
月销量
库存
评分
收藏数
评分
图片
追评
手机品牌统计_词云
手机价格区间统计_直方图
TOP10品牌 手机价格等级构成_堆积柱形图
各个品牌下商品现价与原价对比_分组条形图
各个品牌下收藏数与商品现价的关系_折线图_研究用户是否能突破品牌限制而只关心商品现价而进行收藏商品
各个品牌下销量与商品现价的关系_折线图_研究用户是否能突破品牌限制而只关心商品现价而进行购买商品
各个品牌的总销量_条形图
各发货省销售情况_地图
不同价格等级下的总销量_饼图_从总体上研究价格与销量关系
不同价格等级下的总销售额_饼图_从总体上研究价格与总销售额关系

数据清洗

  • 对导入后的phone数据集进行清洗

在这里插入图片描述
由上表,发现存在空白列,并且商品描述、月销量、库存、评分、累计评价数存在缺失值

  1. 删除空白列
phone=phone.drop(columns=['Unnamed: 19'])
  1. 先获取列名,在此基础上进行更改
phone.columns=['爬取时间', '爬取链接', '商品ID', '商品名称',
       '商品描述', '商品参数', '商品现价',
       '商品原价', '月销量', '库存',
       '发货地址', '商品发布时间',
       '店铺ID', '店铺名称', '商品链接URL', '评分',
       '收藏数' ,'累计评价数', '商品评价印象标签']
  1. 将月销量、库存、累计评价数为null用0填充
phone['月销量']=phone['月销量'].fillna(0)
phone['库存']=phone['库存'].fillna(0)
phone['累计评价数']=phone['累计评价数'].fillna(0)
  1. 删除评分为null的样本
phone.dropna(subset=['评分'])
  • 对add_comments和 phone 进行数据合并,并尽心初步清洗
  1. 对add_comments和 phone 进行数据合并
df=pd.merge(phone,add_comments,left_on='商品ID',right_on='ID(id)')
print(df.info())

合并后的数据如下:
在这里插入图片描述
6. 重命名并删除多余的列

df.columns=['爬取时间', '爬取链接', '商品ID', '商品名称',
       '商品描述', '商品参数', '商品现价',
       '商品原价', '月销量', '库存',
       '发货地址', '商品发布时间',
       '店铺ID', '店铺名称', '商品链接URL', '评分',
       '收藏数' ,'累计评价数', '商品评价印象标签','图片', '追评', 'ID(id)', 'Unnamed: 3']
df=df.drop(columns=['Unnamed: 3'])
df=df.drop(columns=['ID(id)'])
  1. 清洗时间参数
df['商品发布时间']=df['商品发布时间'].apply(lambda op:time.strftime('%Y-%m-%d',time.localtime(op)))

  1. 清洗价格数据
def get_prices(s):
       price=s.split('-')
       l=[float(i) for i in price]
       return np.mean(l)
df['商品现价']=df['商品现价'].apply(get_prices)
df['商品原价']=df['商品原价'].apply(get_prices)
  1. 清洗发货城市数据
pro_list=['北京',
 '天津',
 '上海',
 '重庆',
 '河北',
 '山西',
 '辽宁',
 '吉林',
 '黑龙江',
 '江苏',
 '浙江',
 '安徽',
 '福建',
 '江西',
 '山东',
 '河南',
 '湖北',
 '湖南',
 '广东',
 '海南',
 '四川',
 '贵州',
 '云南',
 '陕西',
 '甘肃',
 '青海',
 '台湾',
 '内蒙古',
 '广西',
 '西藏',
 '宁夏',
 '新疆',
 '香港',
 '澳门']

def get_city(address):
       for i in pro_list:
              if i in address:
                     city=address.replace(i,'')
                     if len(city)==0:
                            city=i
       return city
def get_province(address):
       for i in pro_list:
              if i in address:
                     province=i
       return province
df['发货城市']=df['发货地址'].apply(get_city)
df['发货省份']=df['发货地址'].apply(get_province)
  1. 价格分箱
def get_price_level(p):
    level=p//1000
    if level==0:
        return '0~999'
    if level==1:
        return '1000~1999'
    if level==2:
        return '1999~2999'
    if level==3:
        return '2999~3999'
    if level==4:
        return '3999~4999'
    if level>=5:
        return '5000+'
    else:
        return '计算出错'
df['价格等级']=df['商品现价'].apply(get_price_level)
  1. 手机参数信息提取
target=['后置摄像头',
 '摄像头类型',
 '视频显示格式',
 '分辨率',
 '触摸屏类型',
 '屏幕尺寸',
 '网络类型',
 '网络模式',
 '键盘类型',
 '款式',
 '运行内存RAM',
 '存储容量',
 '品牌',
 '华为型号',
 '电池类型',
 '核心数',
 '机身颜色',
 '手机类型',
 '操作系统',
 'CPU品牌',
 '产品名称']
for t in target:
    def get_pram(p):
        for i in eval(p):
            if i['label']==t:
                return i['value']
    df[t]=df['商品参数'].apply(get_pram)

  • 将处理后的数据存储为"处理后的数据.xlsx"
df.to_excel('处理后的数据.xlsx')

数据可视化

导入数据,删除多余的列

import pandas as pd
import numpy as np
data=pd.read_excel('处理后的数据.xlsx')
data.drop(columns=['Unnamed: 0'],inplace=True)

删除价格异常的样本

# 计算下四分位数和上四分位
Q1 = data['商品现价'].quantile(q = 0.25)
Q3 = data['商品现价'].quantile(q = 0.75)
# 基于1.5倍的四分位差计算上下须对应的值
low_whisker = Q1 - 1.5*(Q3 - Q1)
up_whisker = Q3 + 1.5*(Q3 - Q1)
# 寻找异常点
data=data.drop(data['商品现价'][(data['商品现价']> up_whisker) | (data['商品现价'] < low_whisker)].index)
print(data)

导入相关的可视化库

import matplotlib.pyplot as plt
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.charts import WordCloud
from pyecharts.charts import Scatter
from pyecharts.charts import Line
from pyecharts.charts import Pie
from pyecharts.charts import Geo
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ChartType
1. 淘宝在售手机价格区间统计
sales=data['价格等级'].value_counts()
sales_bar=Bar()
sales_bar.add_xaxis(list(sales.index))
sales_bar.add_yaxis('价格等级',list(sales.values.astype(float)))
sales_bar.render('sales_bar.html')

结果如下:
在这里插入图片描述
由图可得,价格为1000~1999元的手机最多。

2. 绘制手机品牌词云图
word_count=data['品牌'].value_counts()
nameciyu=WordCloud(init_opts=opts.InitOpts(width='880px',height='500px'))
nameciyu.add('',[list(z) for z in zip(word_count.index,
                                      word_count.values.astype(float))])
nameciyu.set_global_opts(title_opts=opts.TitleOpts(title='手机品牌词云图',pos_left='15%'))
nameciyu.render('nameciyu.html')

结果如下:
在这里插入图片描述
由图可得,淘宝网上,华为品牌的商品条目数量是最多的,其次是荣耀品牌的商品条目数量。

3. TOP10品牌 手机价格等级构成
  • 进行数据集处理
#找出销售量top10的品牌
data1=data.groupby('品牌')['累计评价数'].sum().sort_values(ascending=False)[0:10]
# 从data数据集中挑出品牌为top10品牌的手机
data2 = pd.DataFrame(columns =data.columns.tolist())
for i in data1.index:
    temp=data[data['品牌']==i]
    data2=pd.concat([temp,data2])  # 向下拼接

scale1=data2[data2['价格等级']=='0~999'].groupby('品牌')['价格等级'].count().reset_index()
scale2=data2[data2['价格等级']=='1000~1999'].groupby('品牌')['价格等级'].count().reset_index()
scale3=data2[data2['价格等级']=='1999~2999'].groupby('品牌')['价格等级'].count().reset_index()
scale4=data2[data2['价格等级']=='2999~3999'].groupby('品牌')['价格等级'].count().reset_index()
scale5=data2[data2['价格等级']=='3999~4999'].groupby('品牌')['价格等级'].count().reset_index()
scale6=data2[data2['价格等级']=='5000+'].groupby('品牌')['价格等级'].count().reset_index()
scale_data=pd.merge(scale1,scale2,on='品牌',how='outer')
scale_data=pd.merge(scale_data,scale3,on='品牌',how='outer')
scale_data=pd.merge(scale_data,scale4,on='品牌',how='outer')
scale_data=pd.merge(scale_data,scale5,on='品牌',how='outer')
scale_data=pd.merge(scale_data,scale6,on='品牌',how='outer')
scale_data.columns=['品牌','0~999','1000~1999','1999~2999','2999~3999','3999~4999','5000+']
scale_data.fillna(0,inplace=True)
print(scale_data)

处理后结果集如下:

在这里插入图片描述

  • 画出价格等级构成堆积图
duiji_bar=Bar(init_opts=opts.InitOpts(width='1200px',height='600px'))
duiji_bar.add_xaxis(scale_data['品牌'].tolist())
duiji_bar.add_yaxis('0~999',scale_data['0~999'].tolist(),stack='stack1')
duiji_bar.add_yaxis('1000~1999',scale_data['1000~1999'].tolist(),stack='stack1')
duiji_bar.add_yaxis('1999~2999',scale_data['1999~2999'].tolist(),stack='stack1')
duiji_bar.add_yaxis('2999~3999',scale_data['2999~3999'].tolist(),stack='stack1')
duiji_bar.add_yaxis('3999~4999',scale_data['3999~4999'].tolist(),stack='stack1')
duiji_bar.add_yaxis('5000+',scale_data['5000+'].tolist(),stack='stack1')
duiji_bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
duiji_bar.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate":25}))
duiji_bar.render("duiji_bar.html")

结果如下:
在这里插入图片描述

4. 不同品牌手机现价&原价对比
price1=data.groupby('品牌')['商品原价'].mean().reset_index()
price2=data.groupby('品牌')['商品现价'].mean().reset_index()
price=pd.merge(price1,price2,on='品牌')

compare_bar=Bar(init_opts=opts.InitOpts(width='1000px',height='600px'))
compare_bar.add_xaxis(list(price['品牌']))
compare_bar.add_yaxis('商品原价',list(np.round(price['商品原价'],2)),gap='20%',category_gap='50%')
compare_bar.add_yaxis('商品现价',list(np.round(price['商品现价'],2)),gap='20%',category_gap='50%')
compare_bar.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate":90}))
compare_bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
compare_bar.render('compare_bar.html')

结果如下:
在这里插入图片描述
由图形可得,华为品牌的手机,原价与现价相比,差距最大。

5. 收藏数与价格的关系(从品牌的角度)

以价格(每一品牌的价格平均值)为x轴,收藏数(每一品牌的收藏数平均值)为y轴,画出收藏数与价格的关系折现图。

# 数据处理(算出每一品牌的商品价格平均值和每一品牌的商品收藏数平均值)
sale=data.groupby('品牌')['商品现价'].mean().reset_index()
store=data.groupby('品牌')['收藏数'].mean().reset_index()
store_sale=pd.merge(sale,store,on='品牌')
store_sale.sort_values(by='商品现价',inplace=True)
store_sale=store_sale.drop(store_sale[store_sale['收藏数']>10000].index)
#画出折线上的折点
store_sale_scatter=Scatter()
store_sale_scatter.add_xaxis(list(np.round(store_sale['商品现价'],2)))
store_sale_scatter.add_yaxis('收藏数',store_sale[['收藏数','品牌']].values.tolist()) #每个折点上的提示框既有商品价格,又有商品收藏数,还有商品品牌
store_sale_scatter.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
store_sale_scatter.set_global_opts(xaxis_opts=opts.AxisOpts(name='商品现价(元)',type_='value'))
#画出折线
store_sale_line=Line()
store_sale_line.add_xaxis(list(np.round(store_sale['商品现价'],2)))
store_sale_line.add_yaxis('收藏数',store_sale['收藏数'].values.tolist())
store_sale_line.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
store_sale_line.set_global_opts(xaxis_opts=opts.AxisOpts(name='商品现价(元)',type_='value'))
store_sale_line.set_global_opts(tooltip_opts=opts.TooltipOpts(formatter='价格,收藏数,品牌:{c}'))
store_sale_line.overlap(store_sale_scatter).render('store_sale_line.html')

结果如下:
在这里插入图片描述
有图形可得,对于不同品牌,价格并不是客户收藏的重要关注点。

6. 销量与价格的关系(从品牌的角度)

类似于分析收藏数与价格的关系,同样使用折线图研究销量与价格的关系

sale=data.groupby('品牌')['商品现价'].mean().reset_index()
number=data.groupby('品牌')['累计评价数'].mean().reset_index()
number_sale=pd.merge(sale,number,on='品牌')
number_sale.sort_values(by='商品现价',inplace=True)
number_sale=number_sale.drop(number_sale[number_sale['累计评价数']>10000].index)

number_sale_scatter=Scatter()
number_sale_scatter.add_xaxis(list(np.round(number_sale['商品现价'],2)))
number_sale_scatter.add_yaxis('销量',number_sale[['累计评价数','品牌']].values.tolist())
number_sale_scatter.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
number_sale_scatter.set_global_opts(xaxis_opts=opts.AxisOpts(name='商品现价(元)',type_='value'))

number_sale_line=Line()
number_sale_line.add_xaxis(list(np.round(number_sale['商品现价'],2)))
number_sale_line.add_yaxis('销量',number_sale['累计评价数'].values.tolist())
number_sale_line.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
number_sale_line.set_global_opts(xaxis_opts=opts.AxisOpts(name='商品现价(元)',type_='value'))
number_sale_line.set_global_opts(tooltip_opts=opts.TooltipOpts(formatter='价格,销量,品牌:{c}'))
number_sale_line.overlap(number_sale_scatter).render('number_sale_line.html')

结果如下:
在这里插入图片描述
图形证明,并不是所有品牌商品价格越低,销量就越高,只是针对个别品牌,如波导,誉品,纽曼,优思,小辣椒,这几个品牌的平均价格在1000以内,而销售量占所有品牌前五,而小米,荣耀,苹果这样的大品牌虽然价格较高,但是销售量也是居高,可见,品牌知名度对于销量非常重要。

7. 不同品牌手机总销量比较

爬取数据中并未包含总销售量数据,但根据淘宝的系统设置,无论买家是否主动评价,交易成功后将会自动留下评价信息,故在这里可以视‘累计评价数’为总销售量进行分析;

numbers=data.groupby('品牌')['累计评价数'].sum().sort_values()[20:]
number_bar=Bar(init_opts=opts.InitOpts(width='880px',height='600px'))
number_bar.add_xaxis(list(numbers.index))
number_bar.add_yaxis('',list(numbers.values.astype(float)),label_opts = opts.LabelOpts(position='right',font_size=8))
number_bar.set_global_opts(xaxis_opts=opts.AxisOpts(is_show=False),visualmap_opts=opts.VisualMapOpts(max_=26,pos_right=True))
number_bar.reversal_axis()
number_bar.render('number_bar.html')

结果如下:
在这里插入图片描述
由图可得,华为的总销量是最高的。

8. 各发货省销售情况
provin=data.groupby('发货省份')['累计评价数'].sum()
geo=Geo(init_opts=opts.InitOpts(width='880px',height='600px'))
geo.add_schema(maptype='china')
geo.add('',[list(z) for z in zip(provin.index,provin.values.astype(float))],type_=ChartType.EFFECT_SCATTER)
geo.set_series_opts(label_opts=opts.LabelOpts(font_size=8,formatter='{b}'))  # 显示城市
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(min_=5000,max_=1000000),title_opts=opts.TitleOpts(title='各发货省销售情况'))
geo.render("geo.html")

结果如下:
在这里插入图片描述
由图可得,相比其他城市,广东省和北京市的销量居高,江苏省销售量也不容小觑。

9. 不同价格等级总销量饼图(总体上)

从总体上,分析不同价格等级的销量。

scale_number=data.groupby('价格等级')['累计评价数'].mean()
scale_number_pie=Pie()
scale_number_pie.add("",[list(z) for z in zip(scale_number.index,np.round(scale_number.values,2))])
scale_number_pie.set_global_opts(legend_opts=opts.LegendOpts(pos_bottom=True),title_opts=opts.TitleOpts(title='不同价格等级总销量饼图',pos_left='38%'))
scale_number_pie.render('scale_number_pie.html')

结果如下:
在这里插入图片描述

由图形得出,从总体上,价格较低时,销量会较高。
其中0-999的价格等级销量最高,2999-3999的价格等级销量居第二,
1000-1999的价格等级销量居第三,接下来为1999-2999,3999-4000,5000+。

10. 不同价格等级总销售额饼图

从总体上,分析不同价格等级的销售额。

data['总销售额']=data['商品现价']*data['累计评价数']
scale_sale=data.groupby('价格等级')['总销售额'].mean()
scale_sale_pie=Pie()
scale_sale_pie.add("",[list(z) for z in zip(scale_sale.index,np.round(scale_sale.values,2))],radius=["40%","75%"])
scale_sale_pie.set_global_opts(legend_opts=opts.LegendOpts(pos_bottom=True),title_opts=opts.TitleOpts(title='不同价格等级总销售额玫瑰图',pos_left='38%'))
scale_sale_pie.render('scale_sale_pie.html')

结果如下:
在这里插入图片描述
图形显示,价格等级为3999-4999的手机总销售额最高,其次为3999-4999,199-2999,令人惊讶的是,在上轮分析中,0-999的销量是最高的,然而总销售在所有价格等级是最低的。

数据建模

  • 探讨离散变量与月销量的关系
    利用卡方统计量筛选出影响月销量的显著离散变量。
from sklearn.preprocessing import LabelEncoder
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
#对原数据进行编码
data_copy=data.copy()
le = LabelEncoder()
data_copy.iloc[:, 0] = le.fit_transform(data_copy.iloc[:, 0])  # 月销量

le = LabelEncoder()
data_copy.iloc[:, 1] = le.fit_transform(data_copy.iloc[:, 1]) # 后置摄像头清晰度

le = LabelEncoder()
data_copy.iloc[:, 2] = le.fit_transform(data_copy.iloc[:, 2].astype(str))  # 摄像头类型(有几个摄像头)

le = LabelEncoder()
data_copy.iloc[:, 3] = le.fit_transform(data_copy.iloc[:, 3])  # 网络类型(2g,3g,4g,5g)

le = LabelEncoder()
data_copy.iloc[:, 4] = le.fit_transform(data_copy.iloc[:, 4])  # 网络模式(单卡,双卡)

le = LabelEncoder()
data_copy.iloc[:, 5] = le.fit_transform(data_copy.iloc[:, 5])  # 运行内存RAM

le = LabelEncoder()
data_copy.iloc[:, 6] = le.fit_transform(data_copy.iloc[:, 6]) # 存储容量

le = LabelEncoder()
data_copy.iloc[:, 7] = le.fit_transform(data_copy.iloc[:, 7]) # 品牌

X = data_copy.iloc[:, 1:]   #特征
y =data_copy.iloc[:,0] #标签
# 使用卡方统计量进行特征筛选
fs = SelectKBest(score_func=chi2, k='all')
fs.fit_transform(X, y)

for i in range(len(fs.pvalues_)):
    print('%s: %f' % (data.columns[i+1], fs.pvalues_[i]))

结果如下:
在这里插入图片描述
由图显示,小于0.05的有存储容量,品牌,则这两变量显著影响月销量。

  • 探讨离散变量与月销量的关系
    利用热力图筛选出影响月销量的显著连续变量。
#对屏幕尺寸进行处理,转化为浮点型,纳入特征值中
df=df[df['屏幕尺寸'].notnull()]
df['屏幕尺寸']=[float(i.replace('英寸','')) for i in df['屏幕尺寸']]

#绘制热力图
df['商品折扣']=df['商品现价']/df['商品原价']
f=df[['商品折扣','商品现价','商品原价','库存','评分','收藏数','累计评价数','追评','屏幕尺寸','图片','月销量']]

corr=f.corr()
plt.figure(figsize=(12,9))
sns.heatmap(corr,annot=True)
plt.show()

结果如下:
在这里插入图片描述
由图显示,收藏数,累积评价数,图片,追评显著影响月销量。

  • 拟合回归模型
# 存储容量,品牌独热编码
data_select=data_copy.iloc[:,6:8]
enc = OneHotEncoder()   # 创建独热编码方法
enc.fit(data_select)
enc1 = enc.transform(data_select).toarray()
one_hot=pd.DataFrame(enc1)
# 独热编码后的变量拼接连续变量
data_select1=df[['月销量','图片','追评','收藏数','累计评价数']].fillna(0)
df_all=pd.concat([one_hot,data_select1],axis=1)
  1. 建立LASSO回归模型
X = df_all.iloc[:,:].fillna(0).values
Y = df['月销量'].fillna(0).values
# 切分训练集和测试集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
# 将数据集进行标准化
std_x = StandardScaler()
X_train = std_x.fit_transform(X_train)
X_test = std_x.transform(X_test)
# 拟合模型
reg = Lasso(alpha = 0.1)
reg.fit(X_train, Y_train)
# 评价模型
score = reg.score(X_test, Y_test) #R^2值
print(score)

result = reg.predict(X_test)
plt.figure()
plt.plot(np.arange(len(result)), Y_test, "go-", label="True value")
plt.plot(np.arange(len(result)), result, "ro-", label="Predict value")
plt.legend(loc="best")
plt.show()

结果如下:
r方值为在这里插入图片描述
拟合图形为
在这里插入图片描述
由两结果,拟合效果优。

  1. 建立其他模型
def model_test(estimators, x_train, x_test, y_train, y_test):
    for key, estimator in estimators.items():
        estimator.fit(x_train, y_train)
        y_predict = estimator.predict(x_test)
        mse = mean_squared_error(y_test, y_predict)
        print('----------------MSE of %s-------------' % (key), mse) # 均方误差(有偏估计)
        scores = estimator.score(x_test, y_test)
        print('----------------Score of %s-------------' % (key), scores) # R方
        print('\n')


estimators = {}
estimators['Linear'] = LinearRegression()
estimators['ridge'] = Ridge()
estimators['forest'] = RandomForestRegressor()
estimators['gbdt'] = GradientBoostingRegressor()


x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.3)

std_x = StandardScaler()
std_y = StandardScaler()
x_train = std_x.fit_transform(x_train)
x_test = std_x.transform(x_test)

y_train = std_y.fit_transform(y_train.reshape(-1, 1))
y_test = std_y.transform(y_test.reshape(-1, 1))

model_test(estimators, x_train, x_test, y_train, y_test)

结果如下:
在这里插入图片描述
由图显示,岭回归模型的拟合效果同样为优。
有了优秀的模型,只要向模型导入变量,就有很大的可能性能准确预测出手机的月销量。

文本分析

  • 整理出每个评论内容对应的品牌与对应的情感
from snownlp import SnowNLP
import pandas as pd
import numpy as np
df=pd.read_excel("处理后的数据.xlsx")

cmt=pd.read_excel('comments.xlsx')
cmt.columns=['商品ID(id)','评价时间(time)','评价内容(content)','爬取链接(spurl)','爬取时间(sptime)']
cmt=cmt.dropna(subset=['评价内容(content)'])
cmt.index=np.arange(len(cmt))

temp=df[['商品ID','品牌']]
# 通过商品ID,找到评价内容对应的品牌
join_data=pd.merge(cmt,temp,left_on="商品ID(id)",right_on="商品ID")

# 通过情感分析函数,整理出每条评价内容对应的心情
mood=[]
for i in join_data['评价内容(content)']:
    s=SnowNLP(str(i)).sentiments
    if s > 0.6:
        mood.append("positive")
    elif s < 0.4:
        mood.append("negative")
    else:
        mood.append("smooth")
join_data['mood']=mood

#整理出每个品牌下每种情感的总条目数
data=join_data.groupby(['品牌','mood']).count()
data.to_excel('data.xlsx')

部分数据集如下:
在这里插入图片描述
再将其整理成以下形式,保存为data1.xslx:
在这里插入图片描述

  • 画出每种品牌的情感堆积图:
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar
data=pd.read_excel('data1.xlsx')
print(data)
bar=Bar(init_opts=opts.InitOpts(width='1200px',height='600px'))
bar.add_xaxis(data['品牌'].tolist())
bar.add_yaxis('positive',data['positive'].tolist(),stack='stack1')
bar.add_yaxis('negative',data['negative'].tolist(),stack='stack1')
bar.add_yaxis('smooth',data['smooth'].tolist(),stack='stack1')
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
bar.reversal_axis()
bar.render('堆积图.html')

结果如下:
在这里插入图片描述

  • 画出积极情感占比比较图
data['积极情感占比']=data['positive']/(data['positive']+data['negative']+data['smooth'])
data=data.sort_values(by='积极情感占比')
print(data)
bar=Bar(init_opts=opts.InitOpts(width='1200px',height='600px'))
bar.add_xaxis(data['品牌'].tolist())
bar.add_yaxis('积极情感占比',data['积极情感占比'].tolist())
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
bar.reversal_axis()
bar.render('积极情感占比比较.html')

结果如下:
在这里插入图片描述

由图显示,大部分品牌下的手机的评价内容的情感是比较积极偏向的,其中,几米品牌的评价内容为积极情感的占比在所有品牌居最高,而苹果的评价内容为积极情感的占比是最低的。

  • 11
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
营销数据分析 让数字说话 内容 指标分析 数据收集和指标统计 常用分析方法 竞争分析 市场调查与置信度分析 客户细分与精确营销 商业预测技术 营销分析框架 KPI 信息收集 分析报告 分析模板 分析主题 分析什么 根据主题建 立数据库 收集数据 数据分析和 呈现 什么是主题? 销售量预测 竞争分析 客户满意度分析 客户流失分析 渠道分析 促销分析 数据分析控制程序 数据采集流程 负责人 采集方法 数据项目格式 采集周期 汇总方法 数据分析流程 负责人(岗位) 分析主题 分析方法 报告模板 报告周期 数据分析和挖掘工具简介 ERP系统 Crystal report OLAP系统 SAS DB2 SOL Server Brio 统计 Spss SAS Minitab OLAP 挖掘 Clementine Teradata SAS IBM Intelligent miner 报告 结论 建议 摘要 演绎 归纳 正文 演绎体系 **产品市场 份额下跌5% 竞品销量增 加 渠道扩张 价格调整 产品质量问 题 产能不足 归纳体系 价格变化 品牌变化 增长速度 市场份额 竞争分析 结论 常规分析 营销分析 销售分析 竞争分析 财务分析 促销分析 分类 区域分析 渠道分析 品种分析 交叉分析 宏观市场指标 市场占有率/相对市场占有率 销售网络 客户和销售区域 产品组合 市场增长率 同比 环比 行业对比 公司经营状况指标 收入\毛利\净利润 利润率 销售利润率 成本利润率 产值利润率 成本 销货成本:含物流、税收 促销成本:资金利用率 BCG矩阵 增长率% 0.1 1 10 -50 0 50 100 150 0.5 0.25 0.125 D S C P 休闲食品销售图 薯片 玉米饼 坚果 蛋卷 脆饼 谷物片 花生糖 点心 0.28% 5.28% 10.28% 15.28% 20.28% 25.28% -7.84% 12.16% 32.16% 52.16% 72.16% 92.16% 112.16% 132.16% 152.16% 市场增长率 市场份额 薯片 玉米饼 坚果 蛋卷 脆饼 谷物片 花生糖 点心 客户相关指标 细分市场盈利能力 忠诚度 客户满意度 新产品购买率 客户获取成本 客户盈亏平衡分析 广告评估指标 到达率和接触频率 总收视点=到达率*接触频率 点击率 转化率 广告销售比=广告支出/销售额 扣除广告成本每笔新增销售获取利润 零售营销评估指标 周转率=年销售额\平均每月库存量 库存投资毛利回报率=毛利\平均存货成本 每平方销售额 每员工利润 平均交易额=销售总额\交易次数 零售商利润率=(销售价格-批发价格)\销售价格 直复营销衡量指标 反馈率=响应直邮广告的人数\发送总人数 转化率 直邮毛利 直邮投资回报率 内容 指标分析 数据收集和指标统计 常用分析方法 竞争分析 市场调查与置信度分析 客户细分与精确营销 商业预测技术 指标分析的主要方法 指标分解 对比分析 时间序列分析 因果分析 数据分布分析 如何确定采集内容 根据主题建立数据数据采集和存储 数据分析和呈现 客户 关系 销售 渠道 广告 媒体 促销 活动 市场分析 课题 分析内容 数据收集 优化销售渠道 渠道与购买行为的关联性 客户的购买过程、销量 市场细分 顾客细分与目标客户选定 顾客购买行为、购买动 机 销售预测 市场占有率,(按区域和流通渠道 划分)销售预测、回归模型 销量、竞争对手销量、 社会经济环境统计数据 宏观环境 国内外的政治、经济、社会、文化、 技术、自然环境、生活形态 政治、经济、社会、文 化、技术、自然环境、 生活形态等统计量 区域市场 课题 分析内容 数据收集 商圈购买力 商圈市场的预测 人口、家庭收入、零售额 竞争分析 区域市场竞争对手、客户细分 商圈内消费者对不同商品、服务 的购买行为、各竞争对手销量 顾客购买行为 客户需求、客户细分 顾客的生活形态、来店行为、来 店理由 销售趋势 销售状况的预测 零售额、商场面积 营销组合与资源配置 课题 分析内容 数据收集 新产品计划 新产品测试、需求预测 用户满意度、新产品与旧产品销 售情况 价格 竞争产品价格、促销费用、价格 与需求的关系等 本企业与竞争企业按不同渠道的 销售价格、销量 促销 广告媒体、促销活动效果 知名度、收视率、阅读率和促销 效果(销量及毛利) 流通 流通渠道 不同区域、流通渠道的销售数据 数据来源 销售数据 (CRM\ERP\CRR) 市场调查 一手 资源 行业协会 第三方收费数据 政府统计机构 搜索引擎 二手 资源 数据搜集工具和手段 延长保修卡\保修期 抽奖 折扣卡 资料下载 顾问式销售 数据表的规划和设计 简化原则 避免重复采集 部手机可运算项 简化填写方法 规范性原则 建立唯

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值