99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀用Python爬取了2900多款防脫洗發(fā)水數(shù)據(jù)分析,助你緩解脫發(fā)困擾
用Python爬取了2900多款防脫洗發(fā)水數(shù)據(jù)分析,助你緩解脫發(fā)困擾
2022-08-29
收藏

作者:俊欣

來源:關(guān)于數(shù)據(jù)分析與可視化

就在前段時間,一項由衛(wèi)健委發(fā)起的脫發(fā)人群調(diào)查數(shù)據(jù)顯示:中國受脫發(fā)問題困擾的人群高達2.5億。聽到這兒,遠在韓國的各家媒體又開始出來搞事情了,

根據(jù)他們的計算,這些人完全脫發(fā)時的總脫發(fā)面積大約可達5900平方公里,相當于首爾市面積(605平方公里)的十倍,那么今天小編就以一個數(shù)據(jù)分析師的身份來為這些人群出出主意,挑幾款相對合適的防脫發(fā)洗發(fā)水給他們來使用

1. 聊聊脫發(fā)困擾

脫發(fā)其實分為很多種情況,如脂溢性脫發(fā),表現(xiàn)為頭屑增多、頭皮痛癢、頭發(fā)油脂分泌旺盛。還有營養(yǎng)性脫發(fā),當飲食作息不規(guī)律時,脫發(fā)情況就會愈發(fā)地嚴重,以及物理性脫發(fā),有時頭發(fā)扎太緊、扯傷毛囊,都會造成脫發(fā)。

不過大家也不用太過于擔心,有研究表明,一個正常人每天脫落80-100根頭發(fā)屬于正常情況,但是如果超過100根就要提高警惕了,極大可能是頭發(fā)的生長跟不上脫發(fā)的速度了。而有一款合適的洗發(fā)水,保持頭皮的清潔衛(wèi)生,對于防脫生發(fā)也有著極大的幫助,而對于不同頭皮發(fā)質(zhì)、不同年齡段的人來說,使用的洗發(fā)水也是不盡相同的。

2. 數(shù)據(jù)采集

數(shù)據(jù)采集是數(shù)據(jù)可視化分析的第一步,也是最基礎(chǔ)的一步,本文主要是基于從電商平臺上抓取一些防脫發(fā)類型的洗發(fā)水,采集過程如下

2.1 頁面分析與程序的編寫

該頁面的總共60件商品由兩個子頁面構(gòu)成的,每一個子頁面分別包含30件商品,通過page參數(shù)來進行調(diào)節(jié),那么我們請求的構(gòu)造方式就變得相當簡單了,

def get_xxx_html(page): params = (
        ('keyword', 'u9632u8131u53D1u6D17u53D1u6C34'),
        ('qrst', '1'),
        ('suggest', '1.def.0.base'),
        ('wq', 'u9632u8131u53D1u6D17u53D1u6C34'),
        ('stock', '1'),
        ('pvid', '4d8b661510984fb5ae2bf68fac6c50c7'),
        ('page', str(page)),
        ('s', '27'),
        ('scrolling', 'y'),
        ('log_id', '1633307411833.8939'),
        ('tpl', '1_M'),
        ('isList', '0'),
    )
    response = requests.get('https://search.xxxx.com/s_new.php', headers=headers, params=params, proxies=proxies)
    response_beau = BeautifulSoup(response.text, 'lxml') return response_beau

通過這個請求,可以獲取到的商品信息如下

而針對評論方面的內(nèi)容,則是以json數(shù)據(jù)形式存在,比較好解析,而且接口api非常明確,可以直接通過商品id這個參數(shù)即可進行請求的獲取

params = (
        ('callback', 'fetchJSON_comment98'),
        ('productId', str(productId)),
        ('score', '0'),
        ('sortType', '5'),
        ('page', '0'),
        ('pageSize', '10'),
        ('isShadowSku', '0'),
        ('fold', '1'),
    )


response = requests.get('https://club.xxxxx.com/comment/productPageComments.action', headers=headers, params=params, cookies=cookies)
response_jsonified = response.text.replace("fetchJSON_comment98", "")[1:-2]
response_jsonified_again = json.loads(response_jsonified)
productCommentSummary = response_jsonified_again.get("productCommentSummary")
commentSum = productCommentSummary.get("commentCountStr")
goodRate = productCommentSummary.get("goodRate")

3.數(shù)據(jù)清洗

數(shù)據(jù)采集后,接下來便對其進行數(shù)據(jù)清洗,去除重復(fù)值與臟數(shù)據(jù),有助于提高可視化分析的準確性。

導(dǎo)入商品數(shù)據(jù)


import pandas as pd
df = pd.read_excel("jd_product_info.xlsx")
df.info()

刪除重復(fù)數(shù)據(jù)


df.drop_duplicates()

特殊字符處理


df["product_name"] = df["product_name"].str.replace(r's','',regex=True)
df["commentSum"] = df["commentSum"].str.replace('+','',regex=True).str.replace('萬','0000',regex=True)
df.describe()

4. 可視化分析

以下我們將從商品的價格分布、評論分布、商品產(chǎn)地分布、旗艦店所賣商品分布,商品功效等維度來進行數(shù)據(jù)的可視化分析

商品價格分布


df["product_price"].plot.hist(stacked = True, bins=20)

可以看到大部分的商品價格都在250元以內(nèi),然后我們對商品的價格區(qū)間做一個統(tǒng)計分析

df["product_price_range"] = df["product_price"].apply(lambda x: range_price(x))
df["product_price_range"].value_counts()

評論數(shù)分布


大部分的商品評論數(shù)都是在5000+或者是2000+左右,或者是在200以及500左右的評論量,而評論數(shù)在50萬以上以及100萬以上的分別有22個和17個,我們可以基本認定這些類的商品,它的購買量是最多的,我們

df["commentSum"].value_counts().head(8)

而評論量在100萬以上的基本上都是霸王旗艦店或者是愛茉莉官方旗艦店所售賣的商品

df[df["commentSum"] == "1000000"]["product_shop_name"].value_counts()

哪些旗艦店的商品最多


那么從總體上來看,哪家店鋪賣的防脫發(fā)的洗發(fā)水更多呢,其中“霸王旗艦店”總體上來看也是售賣防脫發(fā)類型的產(chǎn)品最多的,其次便是“華貿(mào)美妝專營店”和“滋源官方旗艦店”等

df["product_shop_name"].value_counts().head(20)

不同頭皮與不同發(fā)質(zhì)對應(yīng)的洗發(fā)水


不同頭皮、不同發(fā)質(zhì)所對應(yīng)使用的洗發(fā)水不同,例如對于油性頭皮,想要“去屑、控油、防脫”功效的洗發(fā)水,可以這么來搜索

df_1 = df[df["product_head"] == "適合頭皮:油性"]
df_1["commentSum"] = df_1["commentSum"].astype("int")
df_1[df_1["product_function"].str.contains("去屑")].sort_values("commentSum", ascending = False)

例如對于中性頭皮,想要達到控油效果的洗發(fā)水,則可以這么來搜索

df_1 = df[df["product_head"] == "適合頭皮:中性"]
df_1["commentSum"] = df_1["commentSum"].astype("int")
df_1[df_1["product_function"].str.contains("控油")].sort_values("commentSum", ascending = False)

小結(jié)


  1. 本文僅供學(xué)習研究使用,提供的評論僅供參考。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }