Python数据分析:内衣销售哪家强?[python头条资讯]

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

以上是 Python数据分析:内衣销售哪家强?[python头条资讯] 的全部内容, 来源链接: utcz.com/z/528010.html

回到顶部