今年不知道有多少小伙伴原地不动过年。今年虽然不能回老家过年,但今年又要过,又要买年货,给家人和长辈送礼。于是出于好奇,我用爬虫从某宝获取数据,结合Python数据分析和第三方可视化平台,分析大家过年都买了什么。Finebi第三方可视化工具完成。接下来是Python中的实现过程。对于本文的描述,主要分为以下五个步骤:分析思路爬虫部分数据清洗数据可视化及分析结论与建议1.分析思路其实对于今天的数据来说,我们主要做的是一个探索性分析;先梳理已有的字段,包括标题(提取的类目)、价格、销量、店名、发货地。下面来做一个详细的维度拆分和可视化图形选择:品类:TOP10品类销量有哪些?(表格或水平条形图)显示流行(最常出现的)类别;(词云)价格:年货价格区间分布;(甜甜圈图,观察百分比)销量,店名:TOP10销量最高的店铺What?(条形图)与品类联动,如订购坚果,对应显示销售排名的店铺;(联动,使用三方工具)发货地:销量最高的城市有哪些?(图)2.爬取数据爬取主要是利用selenium来模拟浏览器的点击。前提是已经安装了selenium和浏览器驱动。这里我使用谷歌浏览器。找到对应版本号并下载对应版本驱动后,一定要对应浏览器的版本号。pipinstallselenium安装成功后,运行如下代码,输入关键词“年货”,扫码,等待程序慢慢收录。#coding=utf8importrefromselenium.webdriver.chrome.optionsimportOptionsfromseleniumimportwebdriverimporttimeimportcsv#搜索商品,获取商品页码defsearch_product(key_word):#定位输入框browser.find_element_by_id("q").send_keys(key_word)#定义点击按钮,点击browser.find_element_by_class_name('btn-search').click()#最大化窗口:为了我们扫码方便browser.maximize_window()#等待15秒,给usenoughtimetoscanCodetime.sleep(15)#找到这个“页码”,得到“这个文本总共100页”page_info=browser.find_element_by_xpath('//div[@class="total"]').text#注意:findall()返回的是一个列表,虽然此时它只有一个元素,但它也是一个列表。page=re.findall("(\d+)",page_info)[0]returnpage#获取数据defget_data():#通过页面分析发现所有信息都在items节点下items=browser.find_elements_by_xpath('//div[@class="items"]/div[@class="itemJ_MouserOnverReq"]')foriteminitems:#参数信息pro_desc=item.find_element_by_xpath('.//div[@class="rowrow-2title"]/a').text#Pricepro_price=item.find_element_by_xpath('.//strong').text#Paymentnumberbuy_num=item.find_element_by_xpath('.//div[@class="deal-cnt"]').text#旗舰店shop=item.find_element_by_xpath('.//div[@class="shop"]/a').text#发货地址address=item.find_element_by_xpath('.//div[@class="location"]').text#print(pro_desc,pro_price,buy_num,shop,address)withopen('{}.csv'.format(key_word),mode='a',newline='',encoding='utf-8-sig')asf:csv_writer=csv.writer(f,delimiter=',')csv_writer.writerow([pro_desc,pro_price,buy_num,shop,address])defmain():browser.get('https://www.taobao.com/')page=search_product(key_word)打印(page)get_data()page_num=1whileint(page)!=page_num:print("*"*100)print("抓取页面{}".format(page_num+1))browser.get('https://s.taobao.com/search?q={}&s={}'.format(key_word,page_num*44))browser.implicitly_wait(25)get_data()page_num+=1print("数据爬取完成!")if__name__=='__main__':key_word=input("请输入你要搜索的产品:")option=Options()browser=webdriver.Chrome(chrome_options=option,executable_path=r"C:\Users\cherich\AppData\Local\Google\Chrome\Application\chromedriver.exe")main()采集结果如下:数据准备完成,中间从标题中提取类别的过程比较耗时。建议直接使用整理好的数据。大致思路是对标题进行切分命名实体识别,标注名词,寻找类目名称,比如坚果,茶叶等。3.数据清洗。这里的文件清理几乎是用Excel完成的。数据集小,用Excel效率很高。例如,这是一个价格范围。至此数据清洗已经完成(可视化可以使用三方工具),喜欢折腾的可以继续看如何使用Python进行分析。4.数据可视化与分析1.读取文件importpandasaspdimportmatplotlibasmplmpl.rcParams['font.family']='SimHei'fromwordcloudimportWordCloudfromastimportliteral_evalimportmatplotlib.pyplotaspltdatas=pd。read_csv('./年货.csv',encoding='gbk')datas2.可视化:词云图li=[]foreachindatas['keywords'].values:new_list=str(each).split(',')li.extend(new_list)deffunc_pd(words):count_result=pd.Series(words).value_counts()返回count_result.to_dict()frequency=func_pd(li)frequencys.pop('other')plt.图(figsize=(10,4),dpi=80)wordcloud=WordCloud(font_path="STSONG.TTF",background_color='white',width=700,height=350).fit_words(频率)plt.imshow(wordcloud)plt.axis("off")plt.show()图表说明:我们可以看到词云图,最流行(最常出现)的类别字体最大,依次为:坚果、茶、蛋糕等.3.可视化:绘制环形图#plt.pie(x,lables,autopct,shadow,startangle,colors,explode)food_type=datas.groupby('pricerange').size()plt.figure(figsize=(8,4),dpi=80)explodes=[0,0,0,0,0.2,0.1]size=0.3plt.pie(food_type,radius=1,labels=food_type.index,autopct='%.2f%%',colors=['#F4A460','#D2691E','#CDCD00','#FFD700','#EEE5DE'],wedgeprops=dict(width=size,edgecolor='w'))plt.title('新年价格区间比例',fontsize=18)plt.legend(food_type.index,bbox_to_anchor=(1.5,1.0))plt.show()图表说明:圆环图类似于饼图,代表一个部分相对于整体的比例,我们可以看到约33%的年货在0-200元之间,33%在100-200元之间。显示大部分年货的价格都趋向于200以内。4.可视化:绘制条形图data=datas.groupby(by='店名')['销售额'].sum().sort_values(ascending=False).head(10)plt.figure(figsize=(10,4),dpi=80)plt.ylabel('Sales')plt.title('年销售额前10家',fontsize=18)colors=['#F4A460','#D2691E','#CDCD00','#EEE5DE','#EEB4B4','#FFA07A','#FFD700']plt.bar(data.index,data.values,color=colors)plt.xticks(rotation=45)plt.show()图表说明:以上是店铺销量排名。可以看到三只松鼠的旗舰店排在第一位。过年好像大家都喜欢吃干货。5.可视化:绘制水平条形图foods=datas.groupby(by='category')['sales'].sum().sort_values(ascending=False).head(10)foods.sort_values(ascending=True,inplace=True)plt.figure(figsize=(10,4),dpi=80)plt.xlabel('Sales')plt.title('新年推荐购买排行榜',fontsize=18)colors=['#F4A460','#D2691E','#CDCD00','#CD96CD','#EEE5DE','#EEB4B4','#FFA07A','#FFD700']plt.barh(foods.index,foods.values,颜色=colors,height=1)plt.show()图表说明:根据品类销量排名,排名第一的是坚果,验证了上面的假设,大家都喜欢吃坚果。结论与推荐淘宝年货爆款:坚果、茶叶、糕点、饼干、糖果、白酒、核桃、羊肉、海参、枸杞;年货推荐清单(按销量):坚果、零食、糕点、饼干、茶叶、糖果、松子、红枣、糕点、红烧肉、瓜子、牛奶、核桃;年货价格参考:超过66%的年货价格在0-200元之间;热门门店:三只老鼠、天猫超市、百草味、良品铺子;
