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

熱線電話:13121318867

登錄
首頁精彩閱讀手把手教你用Pandas庫對淘寶原始數(shù)據(jù)進行數(shù)據(jù)處理和分詞處理
手把手教你用Pandas庫對淘寶原始數(shù)據(jù)進行數(shù)據(jù)處理和分詞處理
2021-08-25
收藏

來源:Python爬蟲與數(shù)據(jù)挖掘

作者: Python進階者

大家好,我是Python進階者。

一、前言

大家好,我是Python進階者,上個禮拜的時候,我的Python交流群里有個名叫程序的大佬,頭像是綠色菜狗的那位,在Python交流群里邊的人應(yīng)該都知道我說的是哪個大佬了,他提供了一份初始淘寶數(shù)據(jù),數(shù)據(jù)乍看上去非常雜亂無章,但是經(jīng)過小小明大佬的神化處理之后,一秒就變清晰了,真是太神了,然后就有了后續(xù)的數(shù)據(jù)分詞處理和可視化等內(nèi)容了,可能群里的人平時工作太忙,沒有來得及看群消息,作為熱心的群主,這里給大家整理成一篇文章,感興趣的小伙伴,可以去實操一下,還是可以學(xué)到很多東西的。言歸正傳,一起來學(xué)習(xí)下今天的數(shù)據(jù)分析內(nèi)容吧。

二、原始數(shù)據(jù)預(yù)處理

1、原始數(shù)據(jù)

在未經(jīng)過處理之前的數(shù)據(jù),長這樣,大家可以看看,全部存儲在一個單元格里邊了,看得十分的讓人難受。如下圖所示。

手把手教你用Pandas庫對淘寶原始數(shù)據(jù)進行<a href='/map/shujuchuli/' style='color:#000;font-size:inherit;'>數(shù)據(jù)處理</a>和分詞處理

按照常規(guī)來說,針對上面的數(shù)據(jù),我們肯定會選擇Excel里邊的數(shù)據(jù)分列進行處理,然后依次的去根據(jù)空格、冒號去分割,這樣可以得到一份較為清晰的數(shù)據(jù)表,誠然,這種方法確實可行,但是小小明大佬另辟蹊徑,給大家用Python中的正則表達式來處理這個數(shù)據(jù),處理方法如下。

2、原始數(shù)據(jù)預(yù)處理

小小明大佬直接使用正則表達式re模塊和pandas模塊進行處理,方法可謂巧妙,一擊即中,數(shù)據(jù)處理代碼如下。

import re import pandas as pd
result = [] with open(r"淘寶數(shù)據(jù).csv") as f: for line in f:
        row = dict(re.findall("([^:t]+):([^:t]+)", line)) if row:
            result.append(row)
df = pd.DataFrame(result)
df.to_excel('new_data.xlsx', encoding='utf-8')
print(df)

之后我們可以看到效果圖,如下圖所示,這下是不是感覺到清爽了很多呢?

手把手教你用Pandas庫對淘寶原始數(shù)據(jù)進行<a href='/map/shujuchuli/' style='color:#000;font-size:inherit;'>數(shù)據(jù)處理</a>和分詞處理

至此,我們對原始的數(shù)據(jù)進行了預(yù)處理,但是這還不夠,我們今天主要的目標是對上面數(shù)據(jù)中的兩列:配料表和保質(zhì)期進行數(shù)據(jù)分析,接下來繼續(xù)我們的數(shù)據(jù)處理和分析。

三、對配料表和保質(zhì)期列進行處理

一開始的時候,程序大佬對配料表和保質(zhì)期這兩列的數(shù)據(jù)進行處理,但是來回得到的分詞中總有一些特殊字符,如下圖所示,我們可以看到這些字符里邊有%、頓號、空格等內(nèi)容。

手把手教你用Pandas庫對淘寶原始數(shù)據(jù)進行<a href='/map/shujuchuli/' style='color:#000;font-size:inherit;'>數(shù)據(jù)處理</a>和分詞處理

我們都知道,這些是我們不需要的字符,當(dāng)時我們在群里討論的時候,我們就想到使用停用詞去針對這些擾人的字符進行處理,代碼如下。

# 創(chuàng)建停用詞list def stopwordslist(filepath): stopwords = [line.strip() for line in open(filepath, 'r', encoding='gbk').readlines()] return stopwords # 對句子進行分詞 def seg_sentence(sentence): sentence_seged = jieba.cut(sentence.strip())
    stopwords = stopwordslist('stop_word.txt') # 這里加載停用詞的路徑 outstr = '' for word in sentence_seged: if word not in stopwords: if word != 't':
                outstr += word
                outstr += " " return outstr

其中stop_word.txt是小編之前在網(wǎng)上找到的一個存放一些常用特殊字符的txt文件,這個文件內(nèi)容可以看看下圖。

手把手教你用Pandas庫對淘寶原始數(shù)據(jù)進行<a href='/map/shujuchuli/' style='color:#000;font-size:inherit;'>數(shù)據(jù)處理</a>和分詞處理

如上圖所示,大概有1894個詞左右,其實在做詞頻分析的時候,使用停用詞去除特殊字符是經(jīng)常會用到的,感興趣的小伙伴可以收藏下,也許后面你會用到呢?代碼和數(shù)據(jù)我統(tǒng)一放到文末了,記得去取就行。經(jīng)過這一輪的數(shù)據(jù)處理之后,我們得到的數(shù)據(jù)就基本上沒有太多雜亂的字符了,如下圖所示。

手把手教你用Pandas庫對淘寶原始數(shù)據(jù)進行<a href='/map/shujuchuli/' style='color:#000;font-size:inherit;'>數(shù)據(jù)處理</a>和分詞處理

得到這些數(shù)據(jù)之后,接下來我們需要對這些詞語做一些詞頻統(tǒng)計,并且對其進行可視化。如果還有想法的話,也可以直接套用詞云模板,生成漂亮的詞云圖,也未嘗不可。

四、詞頻統(tǒng)計

關(guān)于詞頻統(tǒng)計這塊,小編這里介紹兩種方法,兩個代碼都是可以用的,條條大路通羅馬,一起來看看吧!

方法一:常規(guī)處理

這里使用的是常規(guī)處理的方法,代碼親測可用,只需要將代碼中的1.txt進行替換成你自己的那個需要分詞統(tǒng)計的文檔即可,然后系統(tǒng)會自動給你生成一個Excel表格和一個TXT文件,內(nèi)容都是一樣的,只不過一個是表格,一個是文本。

#!/usr/bin/env python3 # -*- coding:utf-8 -*- import sys import jieba import jieba.analyse import xlwt # 寫入Excel表的庫 # reload(sys) # sys.setdefaultencoding('utf-8') if __name__ == "__main__":


    wbk = xlwt.Workbook(encoding='ascii')
    sheet = wbk.add_sheet("wordCount") # Excel單元格名字 word_lst = []
    key_list = [] for line in open('1.txt', encoding='utf-8'): # 1.txt是需要分詞統(tǒng)計的文檔 item = line.strip('nr').split('t') # 制表格切分 # print item tags = jieba.analyse.extract_tags(item[0]) # jieba分詞 for t in tags:
            word_lst.append(t)


    word_dict = {} with open("wordCount_all_lyrics.txt", 'w') as wf2: # 打開文件 for item in word_lst: if item not in word_dict: # 統(tǒng)計數(shù)量 word_dict[item] = 1 else:
                word_dict[item] += 1 orderList = list(word_dict.values())
        orderList.sort(reverse=True) # print orderList for i in range(len(orderList)): for key in word_dict: if word_dict[key] == orderList[i]:
                    wf2.write(key + ' ' + str(word_dict[key]) + 'n') # 寫入txt文檔 key_list.append(key)
                    word_dict[key] = 0 for i in range(len(key_list)):
        sheet.write(i, 1, label=orderList[i])
        sheet.write(i, 0, label=key_list[i])
    wbk.save('wordCount_all_lyrics.xls') # 保存為 wordCount.xls文件

方法二:使用Pandas優(yōu)化處理

這里使用Pandas方法進行處理,代碼如下,小編也是親測有效,小伙伴們也可以去嘗試下。

def get_data(df): # 將食品添加劑這一列空的數(shù)據(jù)設(shè)置為無 # print(df) df.loc[:,'食品添加劑'] = df['食品添加劑'].fillna('無')
    df.loc[:,'保質(zhì)期'] = df['保質(zhì)期'].fillna('無')
    df.loc[:, '配料表'] = df['配料表'].fillna('無') #  分詞并擴展提取 names = df.配料表.apply(jieba.lcut).explode() #  過濾長度小于等于1的詞并去重 df1 = names[names.apply(len) > 1].value_counts() with pd.ExcelWriter("taobao.xlsx") as writer:
        df1.to_excel(writer, sheet_name='配料')


    df2 = pd.read_excel('taobao.xlsx', header=None, skiprows=1, names=['column1', 'column2'])
    print(df2)

上面兩個代碼都是可以用的,最后得到的表格數(shù)據(jù),如下圖所示。

手把手教你用Pandas庫對淘寶原始數(shù)據(jù)進行<a href='/map/shujuchuli/' style='color:#000;font-size:inherit;'>數(shù)據(jù)處理</a>和分詞處理

從上圖我們可以看到配料表里邊的配料占比詳情,有了上述的數(shù)據(jù)之后,接下來我們就可以對其進行可視化操作了。關(guān)于可視化的內(nèi)容,小編也給大家已經(jīng)準備好了,等待下一篇原創(chuàng)文章,給大家輸出,敬請期待。

手把手教你用Pandas庫對淘寶原始數(shù)據(jù)進行<a href='/map/shujuchuli/' style='color:#000;font-size:inherit;'>數(shù)據(jù)處理</a>和分詞處理

五、總結(jié)

大家好,我是Python進階者。本文寫到這里,基本上就告一段落了。本文基于一份雜亂的淘寶原始數(shù)據(jù),利用正則表達式re庫和Pandas數(shù)據(jù)處理對數(shù)據(jù)進行清洗,然后通過stop_word停用詞對得到的文本進行分詞處理,得到較為”干凈“的數(shù)據(jù),之后利用傳統(tǒng)方法和Pandas優(yōu)化處理兩種方式對數(shù)據(jù)進行詞頻統(tǒng)計,針對得到的數(shù)據(jù),下一步將利用Pyecharts庫,進行多重可視化處理,包括但不限于餅圖、柱狀圖、Table表、漏斗圖、極化圖等,通過一系列的改進和優(yōu)化,一步步達到想要的效果,可以說是干貨滿滿,實操性強,親測有效。

數(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); }