Python数据分析:内衣销售哪家强?
前些天,我看到某公司对数据分析师的招聘要求有一条:
分析客户人群的购买习惯,并通过购买习惯做出相关数据分析。
正好我最近在找项目练手,于是我决定研究亚马逊上Top100的细分品类——女(qing)式(qu)内衣的销售情况。
我的分析分为核心的三步:
第一步,爬取商品排名和详情页链接,需要的字段为:排名、商品名、详情页链接
第二步,爬取商品详情,需要的信息为:
·店家:这不就是竞争对手吗?分析其爆品情况,保留店家链接,后续可针对性挖掘分析
·价格:分析爆品价格区间,对商品定价、切分市场有帮助
·上架时间:新品?爆了多久?
·星级、评论数、评论标签、所有评论链接:进一步爬取评论内容,来分析爆品的优劣势
·尺寸、颜色:也是非常有价值的参考数据,但在实际爬取过程中遇到问题,后面会提到
·图片链接:难道你不想看看商品长啥样吗?
第三步,数据转化为可视化图表,并做分析。
文末分享本次研究的所有代码和数据,是不是迫不及待想要看过程了?
如何爬取内衣数据
爬取过程分为三步
1、链接数据库,安排header、代理信息
# 0、创建数据库 client = pymongo.MongoClient('localhost', 27017) Amazon = client['Amazon'] item_info_M = Amazon['item_info_M'] # 0、反爬措施 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ 72.0.3626.109 Safari/537.36' } # http://cn-proxy.com/ proxy_list = [ 'http://117.177.250.151:8081', 'http://111.85.219.250:3129', 'http://122.70.183.138:8118', ] proxy_ip = random.choice(proxy_list) # 随机获取代理ip proxies = {'http': proxy_ip}
2、爬取商品列表页和详情页
核心事项:
1)构建函数来获取单个商品的详细信息;
2)利用for循环,遍历商品详情页链接列表,来获取每个商品的详细信息
def get_item_info_2(item_url,data): wb_data = requests.get(item_url, headers=headers, proxies=proxies) soup = BeautifulSoup(wb_data.text, 'lxml') #获取price(需要判断) price = soup.select('#priceblock_ourprice') data['price'] = price[0].text if price else None # 获取star和reviews(需要判断) star = soup.select('div>div>span>span>span>a>i>span.a-icon-alt') if star: data['star'] = star[0].text.split(' ')[0] data['reviews'] = soup.select('#reviews-medley-footer > div.a-row.a-spacing-large > a')[0].text. split(' ')[2] data['Read reviews that mention'] = list(i.text.strip(' ').strip() for i in soup.select('span.cr -lighthouse-term')) else: data['star'] = None data['reviews'] = None data['Read reviews that mention'] = None data['Date_first_listed_on_Amazon'] = soup.select('#detailBullets_feature_div > ul > li> span > span:nth -child(2)')[-1].text # 获取reviews_link(需要判断) reviews_link = soup.select('#reviews-medley-footer > div.a-row.a-spacing-large > a') if reviews_link: data['reviews_link'] = 'https://www.amazon.com' + reviews_link[0].get('href') else: data['reviews_link'] = None # 获取store和store_link (需要判断) store = soup.select('#bylineInfo') if store: data['store'] = store[0].text data['store_link'] = 'https://www.amazon.com' + soup.select('#bylineInfo')[0].get('href') else: data['store'] = None data['store_link'] = None item_info_M.insert_one(data) # 存入MongoDB数据库 print(data) # 3、将商品详情写入csv文件 for i in range(100): get_item_info_2(item_links[i],item_info[i]) print('已写入第{}个商品'.format(i+1))
3、爬取评论
核心事项:
1)从上一步的csv文件中,读取Rank , item_name , reviews , reviews_link字段
2)构建函数读取每个商品的所有评论
3)利用for循环,获取所有商品的所有评论
4)存储到数据库和csv文件中
csv_file = csv.reader(open('C:/Users/zbd/Desktop/3.csv','r')) reviews_datalst = [] for i in csv_file: reviews_data = { 'Rank':i[10], 'item_name':i[8], 'reviews':i[6], 'reviews_link':i[5] } reviews_datalst.append(reviews_data) del reviews_datalst[0] # 删除表头 #print(reviews_datalst) reviews_links = list(i['reviews_link'] for i in reviews_datalst) # 将评论详情页链接存储到列表reviews_links
4、爬取size和color数据
和第三步基本一样,代码基本一样,主要在于要确认每页评论的size&color个数。
headers = ['_id','item_name', 'customer_name', 'star', 'review_date', 'review_title', 'review_text'] with open('C:/Users/zbd/Desktop/4.csv','w',newline='',encoding='utf-8') as f: f_csv = csv.DictWriter(f, headers) f_csv.writeheader() f_csv.writerows(all_reviews) print('写入完毕!')
爬取完毕后,对数据进行基本的清洗,包括去空值、统一数据格式等,便可开始做分析。
歪果内衣哪家强?
① 不同商家的星级排名
df_star = df['star'].sort_values(ascending = False) df_star.plot(kind = 'bar',color = 'yellow',grid = True,alpha = 0.5,ax =axes[0],width =0.7, ylim = [3,5],title = '不同商家的星级排名') axes[0].axhline(df_star.mean(),label = '平均星级%.2f分' %df_star.mean() ,color = 'r' ,linestyle = '--',) axes[0].legend(loc = 1)
·平均星级达4.15分,高于平均分的商家超过一半(17/32)
·Top1的LALAVAVA高达4.9分,紧随其后也有5家达到4.5分。
·倒数第一N-pearI只有3.2分
让我看看LALAVAVA长什么样。亚马逊上的商品,看上去就是普通泳衣,米国人还是很保守的嘛~
但评分高真的就说明产品好吗?不如来看看评论数吧——
②不同商家的平均评论数排名
df_reviews_mean = df['reviews_mean'].sort_values(ascending = False) df_reviews_mean.plot(kind = 'bar',color = 'blue',grid = True,alpha = 0.5,ax =axes[1],width =0.7, title = '不同商家的平均评论数排名') axes[1].axhline(df_reviews_mean.mean(),label = '平均评论数%i条'%df_reviews_mean.mean(),color = 'r',linestyle = '--',) axes[1].legend(loc = 1)
·首先平均评论数只有193条,而且高于平均线的只有不到三成(12/32),想想淘宝动辄上万,我们的人口优势让米国人羡慕呀;
·再来看星级Top1的LALAVAVA,评论数少得可怜,那么对其商品真实质量就要存疑了;
·而星级倒数的N-pear I,同样评论数很少,那大概率其商品其实不咋地;
·反观评论数Top1的Garmol,其星级评价4.4,口碑佳评论也多,看来是不错的商品;
·紧随其后的几家,其星级分数就低于平均分了
那么,亚马逊的星级评价难道就只受评论数的几颗星比例影响吗?我查阅了网上的一些资料,发现亚马逊评价星级评定的三个重要因素:评论距离现在的时间,评论被买家投票采纳数,评论是否有verified purchase标志(意指真实买家)。此外,评论的字符数,被点击次数等因素也可能会对评论星级有影响。
看来,亚马逊对评论的监控和管理是非常严格而复杂的!当然,最重要的还是看看评论第一名的Garmol长什么样:
比上边的泳衣更点题了,大家说好才是真的好,very sexy!
③不同商家的价格区间排名(按均价)
avg_price = (d-c)/2 avg_price.name = 'avg_price' max_price = avg_price.copy() max_price.name = 'max_price' df_price = pd.concat([c,avg_price,max_price,df_re['price_mean']],axis=1) df_price = df_price.sort_values(['price_mean'],ascending = False) df_price.drop(['price_mean'],axis =1,inplace = True) df_price.plot(kind = 'bar',grid = True,alpha = 0.5 , ax =axes[2],width =0.7,stacked = True, color= ['white','red','blue'],ylim = [0,55],title = '不同商家的价格区间')
·从图上来看,明显ELOVER锁定的是高端市场,定价区间在49刀左右;相反,Goddessvan定价仅0.39刀,还只有一款,猜测可能 是亏本冲量,提高商家曝光,抢夺低端市场
·从均价来看,基本分布在10-20刀间,说明这是内衣市场的主要价格区间;但20-40刀区间居然没有任何商家,可以在这一块深入 研究,看能不能找到证据说明该区间是蓝海,有更大的市场潜力
·而从每个商家的价格区间来看,大多数都是采取多颜色或款式的策略,一方面为用户提供更多选择,另一方面也体现了商家的上新 能力;而仅有少数几家采取了单一爆款的策略
最奢华的ELOVER看上去果然比较女神,缩略图都比别家更用心。
那么,到底哪个商家的策略更靠谱,市场份额更大呢?
④商家的商品数量饼图
df_per = df_re['item_num'] fig,axes = plt.subplots(1,1,figsize = (8,8)) plt.axis('equal') #保证长宽相等 plt.pie(df_per , labels = df_per.index , autopct = '%.2f%%', pctdistance = 1.05 , #shadow = True , startangle = 0 , radius = 1.5 , colors = colors, frame = False )
·在Top100的商品占比中,Avidlove以28%的巨大优势称霸
·而其他商家基本都是个位数的占比,没有很明显的优劣势
Avidlove的内衣是酷酷风的,我喜欢。
单一方面毕竟还是很难衡量哪家商家更优秀,不如综合多个指标来分析吧~
⑤不同商家的加权分排名
df_nor = pd.concat([df_re['star_nor'],df_re['reviews_mean_nor'],df_re['price_mean_nor'],df_re['item_num_nor']],axis =1) df_nor['nor_total'] = df_re['star_nor'] + df_re['reviews_mean_nor'] + df_re['price_mean_nor'] + df_re['item_num_nor'] df_nor = df_nor.sort_values(['nor_total'],ascending = False) df_nor.drop(['nor_total'],axis = 1,inplace = True) df_nor.plot(kind = 'bar',grid = True,alpha = 0.5 , ax =axes[3],width =0.7,stacked = True, title = '不同商家的加权分排名')
将星级、平均评论数、商品均价、商品数量进行标准化处理后,因为不好拍定加权的比例,便将4项的归一化结果x10后直接累加得到总分,并制作成堆积图。
而每个商家的4项指标的占比,则侧面反映其自身的优劣势。
·Avidlove,刚刚的酷酷风内衣,在其他三项中规中矩的情况下,以商品数量优势夺得综合分第一,有种农村包围城市的感觉
·Garmol,主要依靠口碑(星级、平均评论数)的优势,夺得了第二名
·ELOVER,主要依靠精准切分高端市场,夺得了第三名
·N-pearI,没有任何优势,不出意料的光荣垫底
口碑最差的N-pearI,能搜到的商品也最少,不过图很劲爆……
粗略来看的话,想要排名靠前,口碑一定不能太差,至少要保持在平均水平及以上!
⑥不同商家的星级/价格散点图
x轴为商家的商品均价,y轴为商家的星级,点大小为商品数量,商品数量越大,点越大,点颜色为评论均值,评论均值越大,颜色越深红。
利用价格均值和星级均值,将图切分为四个象限:
①左上象限:实惠好评的商家
②右上象限:有点贵,但一分钱一分货的商家
③右下象限:贵,但质量不咋地的商家
④左下象限:便宜没好货的商家
所以借助这张散点图,挑商家买东西就容易多啦:
·追求性价比,可选择Avidlove,而且商品多,任君挑选 (图中圆圈最大的浅红色商家);
·追求高端,可选择ELOVER,它贵有它的道理 (图中最左侧且落在左上象限的商家);
·追求大众,可选择Garmol,评论数最多,而且好评居多 (图中颜色最红的商家)
顾客可以根据自己的喜好挑选合适的商家,那么作为商家如何改进自己呢?
⑦词频分析
前面在爬取的过程中,同样爬取了评论标签,通过对此进行词频分析,可以发现顾客最关心的依次是:
1.是否合身:size、fit等相关字眼多次出现且排位靠前
2.质量:good quality、well made;soft and comfortable、fabric是对材质的肯定
3.款式:cute、sexy、like the picture你懂的
4.价格:cheaply made勉强算价格吧,但更多是对商品质量的怀疑
5.口碑:highly recommend,评论的还是非常有参考价值的
评论标签的数量较少,进一步对2.4w条评论进行词频分析,并制作成词云:
最直观的,仍然是跟“是否合身”以及质量或款式有关。那么我们就从顾客购买商品的Size&Color继续分析
可以明显看出:
Size方面:large、medium、small肯定均有涵盖,但另外还有xlarge、xxlarge、xxxlarge,亚马逊主要是欧美顾客,可能体型相对较大,所以商家应该多研发以及备货针对体型较大的顾客的商品。
Color方面:非常直观:Black > red > blue > green > white > purple….所以黑色、红色永远不会错;绿色是出乎我意料的,商家也可以大胆尝试。
Style方面:词频中出现trim、lace字眼,蕾丝最高!!!
在分析了Top100的商品信息和2.4w条评论后,作为一篇正经的python电商数据分析研究,我们来总结一下亚马逊女士内衣产品和销售策略:
1、一定要注意的竞品
Garmol、ELOVER、Avidlove分别在口碑、定价、产品数量三个方向有其核心优势,是需要重点研究的竞争对手。
2、口碑很重要
·Review和星级是影响口碑的重要因素,需要深入研究其算法机制并制定针对性的营销策略
·Review和星级有基础要求
·平均星级达4.15分,高于平均分的商家超过一半
·平均评论数只有193条,高于平均线的商家约三成
·Review相对淘宝评论较少,亚马逊的算法复杂且惩罚力度大,因此Review重精胜于重多
3、定价策略
·主流市场竞争激烈,价格多集中在10-20刀间
·高端市场有切入机会,目前仅ELOVER一家,价格在40-55刀间
·低端市场价值不大,利润空间小,为了提高曝光或铺量可考虑,但不利于以后冲击中高端市场
·中高端市场机会巨大,20-40刀区间暂无其他商家,有巨大的市场潜力
4、产品策略
·应结合目标市场和定价,提高研发和上新能力,先多产品试错,再尝试单一爆款巩固市场
·内衣尺寸:合身最重要,需贴合国外顾客的体型,一般large及以上。颜色上:保守可多使用黑色、红色,同时可大胆尝试绿色。 款式上:多采用蕾丝装饰
·质量和品控是底线
5、拓展&思考:
用python做一篇正经的数据分析不仅需要python基本技巧,还需要强大的数据清洗知识、数据库知识、电商行业理解以及熟练的文字表述能力,作为数据分析师,要学习的还有很多,尤其是对项目的练习。
众多python教程,尽在云海天教程网,欢迎在线学习!
本文转自:https://mp.weixin.qq.com/s/bnOwST04GOuI1qATyvn7_A