Python爬取網(wǎng)易云音樂熱門評(píng)論
最近在研究文本挖掘相關(guān)的內(nèi)容,所謂巧婦難為無米之炊,要想進(jìn)行文本分析,首先得到有文本吧。獲取文本的方式有很多,比如從網(wǎng)上下載現(xiàn)成的文本文檔,或者通過第三方提供的API進(jìn)行獲取數(shù)據(jù)。但是有的時(shí)候我們想要的數(shù)據(jù)并不能直接獲取,因?yàn)椴⒉惶峁┲苯拥南螺d渠道或者API供我們獲取數(shù)據(jù)。那么這個(gè)時(shí)候該怎么辦呢?有一種比較好的辦法是通過網(wǎng)絡(luò)爬蟲,即編寫計(jì)算機(jī)程序偽裝成用戶去獲得想要的數(shù)據(jù)。利用計(jì)算機(jī)的高效,我們可以輕松快速地獲取數(shù)據(jù)。
那么該如何寫一個(gè)爬蟲呢?有很多種語言都可以寫爬蟲,比如Java,php,python 等,我個(gè)人比較喜歡使用python。因?yàn)閜ython不僅有著內(nèi)置的功能強(qiáng)大的網(wǎng)絡(luò)庫(kù),還有諸多優(yōu)秀的第三方庫(kù),別人直接造好了輪子,我們直接拿過來用就可以了,這為寫爬蟲帶來了極大的方便。不夸張地說,使用不到10行python代碼其實(shí)就可以寫一個(gè)小小的爬蟲,而使用其他的語言可以要多寫很多代碼,簡(jiǎn)潔易懂正是python的巨大的優(yōu)勢(shì)。
好了廢話不多說,進(jìn)入今天的正題。最近幾年網(wǎng)易云音樂火了起來,我自己就是網(wǎng)易云音樂的用戶,用了幾年了。以前用的是QQ音樂和酷狗,通過我自己的親身經(jīng)歷來看,我覺得網(wǎng)易云音樂最優(yōu)特色的就是其精準(zhǔn)的歌曲推薦和獨(dú)具特色的用戶評(píng)論(鄭重聲明?。。∵@不是軟文,非廣告?。?!僅代表個(gè)人觀點(diǎn),非喜勿噴?。?。經(jīng)常一首歌曲下面會(huì)有一些被點(diǎn)贊眾多的神評(píng)論。加上前些日子網(wǎng)易云音樂將精選用戶評(píng)論搬上了地鐵,網(wǎng)易云音樂的評(píng)論又火了一把。所以我想對(duì)網(wǎng)易云的評(píng)論進(jìn)行分析,發(fā)現(xiàn)其中的規(guī)律,特別是分析一些熱評(píng)具有什么共同的特點(diǎn)。帶著這個(gè)目的,我開始了對(duì)網(wǎng)易云評(píng)論的抓取工作。
python內(nèi)置了兩個(gè)網(wǎng)絡(luò)庫(kù)urllib和urllib2,但是這兩個(gè)庫(kù)使用起來不是特別方便,所以在這里我們使用一個(gè)廣受好評(píng)的第三方庫(kù)requests。使用requests只用很少的幾行代碼就可以實(shí)現(xiàn)設(shè)置代理,模擬登陸等比較復(fù)雜的爬蟲工作。如果已經(jīng)安裝pip的話,直接使用pip install requests 即可安裝。中文文檔地址在此http://docs.python-requests.org/zh_CN/latest/user/quickstart.html,大家有什么問題可以自行參考官方文檔,上面會(huì)有非常詳細(xì)的介紹。至于urllib和urllib2這兩個(gè)庫(kù)也是比較有用的,以后如果有機(jī)會(huì)我會(huì)再給大家介紹一下。
在正式開始介紹爬蟲之前,首先來說一下爬蟲的基本工作原理,我們知道我們打開瀏覽器訪問某個(gè)網(wǎng)址本質(zhì)上是向服務(wù)器發(fā)送了一定的請(qǐng)求,服務(wù)器在收到我們的請(qǐng)求之后,會(huì)根據(jù)我們的請(qǐng)求返回?cái)?shù)據(jù),然后通過瀏覽器將這些數(shù)據(jù)解析好,呈現(xiàn)在我們的面前。如果我們使用代碼的話,就要跳過瀏覽器的這個(gè)步驟,直接向服務(wù)器發(fā)送一定的數(shù)據(jù),然后再取回服務(wù)器返回的數(shù)據(jù),提取出我們想要的信息。但是問題是,有的時(shí)候服務(wù)器需要對(duì)我們發(fā)送的請(qǐng)求進(jìn)行校驗(yàn),如果它認(rèn)為我們的請(qǐng)求是非法的,就會(huì)不返回?cái)?shù)據(jù),或者返回錯(cuò)誤的數(shù)據(jù)。所以為了避免發(fā)生這種情況,我們有的時(shí)候需要把程序偽裝成一個(gè)正常的用戶,以便順利得到服務(wù)器的回應(yīng)。如何偽裝呢?這就要看用戶通過瀏覽器訪問一個(gè)網(wǎng)頁與我們通過程序訪問一個(gè)網(wǎng)頁之間的區(qū)別。通常來說,我們通過瀏覽器訪問一個(gè)網(wǎng)頁,除了發(fā)送訪問的url之外,還會(huì)給服務(wù)發(fā)送額外的信息,比如headers(頭部信息)等,這就相當(dāng)于是請(qǐng)求的身份證明,服務(wù)器看到了這些數(shù)據(jù),就會(huì)知道我們是通過正常的瀏覽器訪問的,就會(huì)乖乖地返回?cái)?shù)據(jù)給我們了。所以我們程序就得像瀏覽器一樣,在發(fā)送請(qǐng)求的時(shí)候,帶上這些標(biāo)志著我們身份的信息,這樣就能順利拿到數(shù)據(jù)。有的時(shí)候,我們必須在登錄狀態(tài)下才能得到一些數(shù)據(jù),所以我們必須要模擬登錄。本質(zhì)上來說,通過瀏覽器登錄就是post一些表單信息給服務(wù)器(包括用戶名,密碼等信息),服務(wù)器校驗(yàn)之后我們就可以順利登錄了,利用程序也是一樣,瀏覽器post什么數(shù)據(jù),我們?cè)瓨影l(fā)送就可以了。關(guān)于模擬登錄,我后面會(huì)專門介紹一下。當(dāng)然事情有的時(shí)候也不會(huì)這么順利,因?yàn)橛行┚W(wǎng)站設(shè)置了反爬措施,比如如果訪問過快,有時(shí)候會(huì)被封ip(典型的比如豆瓣)。這個(gè)時(shí)候我們還得要設(shè)置代理服務(wù)器,即變更我們的ip地址,如果一個(gè)ip被封了,就換另外一個(gè)ip,具體怎么做,這些話題以后慢慢再說。
最后,再介紹一個(gè)我認(rèn)為在寫爬蟲過程中非常有用的一個(gè)小技巧。如果你在使用火狐瀏覽器或者chrome的話,也許你會(huì)注意到有一個(gè)叫作開發(fā)者工具(chrome)或者web控制臺(tái)(firefox)的地方。這個(gè)工具非常有用,因?yàn)槔盟?,我們可以清楚地看到在訪問一個(gè)網(wǎng)站的過程中,瀏覽器到底發(fā)送了什么信息,服務(wù)器究竟返回了什么信息,這些信息是我們寫爬蟲的關(guān)鍵所在。下面你就會(huì)看到它的巨大用處。
----------------------------------------------------正式開始的分割線---------------------------------------------------
首先打開網(wǎng)易云音樂的網(wǎng)頁版,隨便選擇一首歌曲打開它的網(wǎng)頁,這里我以周杰倫的《晴天》為例。如下圖1
圖1
接下來打開web控制臺(tái)(chrom的話打開開發(fā)者工具,如果是其他瀏覽器應(yīng)該也是類似),如下圖2
圖2
然后這個(gè)時(shí)候我們需要點(diǎn)選網(wǎng)絡(luò),清除所有的信息,然后點(diǎn)擊重新發(fā)送(相當(dāng)于是刷新瀏覽器),這樣我們就可以直觀看到瀏覽器發(fā)送了什么信息以及服務(wù)器回應(yīng)了什么信息。如下圖3
圖3
刷新之后得到的數(shù)據(jù)如下圖4所示:
圖4
可以看到瀏覽器發(fā)送了非常多的信息,那么哪一個(gè)才是我們想要的呢?這里我們可以通過狀態(tài)碼做一個(gè)初步的判斷,status code(狀態(tài)碼)標(biāo)志了服務(wù)器請(qǐng)求的狀態(tài),這里狀態(tài)碼為200即表示請(qǐng)求正常,而304則表示不正常(狀態(tài)碼種類非常多,如果要想詳細(xì)了解可以自行搜索,這里不說304具體的含義了)。所以我們一般只用看狀態(tài)碼為200的請(qǐng)求就可以了,還有就是,我們可以通過右邊欄的預(yù)覽來粗略觀察服務(wù)器返回了什么信息(或者查看響應(yīng))。如下圖5所示:
圖5
通過這兩種方法結(jié)合一般我們就可以快速找到我們想要分析的請(qǐng)求。注意圖5中的請(qǐng)求網(wǎng)址一欄即是我們想要請(qǐng)求的網(wǎng)址,請(qǐng)求的方法有兩種:get和post,還有一個(gè)需要重點(diǎn)關(guān)注的就是請(qǐng)求頭,里面包含了user-Agent(客戶端信息),refrence(從何處跳轉(zhuǎn)過來)等多種信息,一般無論是get還是post方法我們都會(huì)把頭部信息帶上。頭部信息如下圖6所示:
圖6
另外還需要注意的是:get請(qǐng)求一般就直接把請(qǐng)求的參數(shù)以?parameter1=value1¶meter2=value2 等這樣的形式發(fā)送了,所以不需要帶上額外的請(qǐng)求參數(shù),而post請(qǐng)求則一般需要帶上額外的參數(shù),而不直接把參數(shù)放在url當(dāng)中,所以有的時(shí)候我們還需要關(guān)注參數(shù)這一欄。經(jīng)過仔細(xì)尋找,我們終于找到原來與評(píng)論相關(guān)的請(qǐng)求在http://music.163.com/weapi/v1/resource/comments/R_SO_4_186016?csrf_token= 這個(gè)請(qǐng)求當(dāng)中,如下圖7所示:
圖7
點(diǎn)開這個(gè)請(qǐng)求,我們發(fā)現(xiàn)它是一個(gè)post請(qǐng)求,請(qǐng)求的參數(shù)有兩個(gè),一個(gè)是params,還有一個(gè)是encSecKey,這兩個(gè)參數(shù)的值非常的長(zhǎng),感覺應(yīng)該像是加密過的。如下圖8所示:
圖8
服務(wù)器返回的和評(píng)論相關(guān)的數(shù)據(jù)為json格式的,里面含有非常豐富的信息(比如有關(guān)評(píng)論者的信息,評(píng)論日期,點(diǎn)贊數(shù),評(píng)論內(nèi)容等等),如下圖9所示:(其實(shí)hotComments為熱門評(píng)論,comments為評(píng)論數(shù)組)
圖9
至此,我們已經(jīng)確定了方向了,即只需要確定params和encSecKey這兩個(gè)參數(shù)值即可,這個(gè)問題困擾了我一下午,我弄了很久也沒有搞清楚這兩個(gè)參數(shù)的加密方式,但是我發(fā)現(xiàn)了一個(gè)規(guī)律,http://music.163.com/weapi/v1/resource/comments/R_SO_4_186016?csrf_token= 中 R_SO_4_后面的數(shù)字就是這首歌的id值,而對(duì)于不同的歌曲的param和encSecKey值,如果把一首歌比如A的這兩個(gè)參數(shù)值傳給B這首歌,那么對(duì)于相同的頁數(shù),這種參數(shù)是通用的,即A的第一頁的兩個(gè)參數(shù)值傳給其他任何一首歌的兩個(gè)參數(shù),都可以獲得相應(yīng)歌曲的第一頁的評(píng)論,對(duì)于第二頁,第三頁等也是類似。但是遺憾的是,不同的頁數(shù)參數(shù)是不同的,這種辦法只能抓取有限的幾頁(當(dāng)然抓取評(píng)論總數(shù)和熱門評(píng)論已經(jīng)足夠了),如果要想抓取全部數(shù)據(jù),就必須搞明白這兩個(gè)參數(shù)值的加密方式。以為沒有搞明白,昨天晚上我?guī)е@個(gè)問題去知乎搜索了一下,居然真的被我找到了答案。到此為止,如何抓取網(wǎng)易云音樂的評(píng)論全部數(shù)據(jù)就全部講完了。
按照慣例,最后上代碼,親測(cè)有效:
#!/usr/bin/env python2.7 # -*- coding: utf-8 -*- # @Time : 2017/3/28 8:46 # @Author : Lyrichu # @Email : 919987476@qq.com # @File : NetCloud_spider3.py ''' @Description: 網(wǎng)易云音樂評(píng)論爬蟲,可以完整爬取整個(gè)評(píng)論 部分參考了@平胸小仙女的文章(地址:https://www.zhihu.com/question/36081767) post加密部分也給出了,可以參考原帖: 作者:平胸小仙女 鏈接:https://www.zhihu.com/question/36081767/answer/140287795 來源:知乎 ''' from Crypto.Cipher import AES import base64 import requests import json import codecs import time # 頭部信息 headers = { 'Host':"music.163.com", 'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", 'Accept-Encoding':"gzip, deflate", 'Content-Type':"application/x-www-form-urlencoded", 'Cookie':"_ntes_nnid=754361b04b121e078dee797cdb30e0fd,1486026808627; _ntes_nuid=754361b04b121e078dee797cdb30e0fd; JSESSIONID-WYYY=yfqt9ofhY%5CIYNkXW71TqY5OtSZyjE%2FoswGgtl4dMv3Oa7%5CQ50T%2FVaee%2FMSsCifHE0TGtRMYhSPpr20i%5CRO%2BO%2B9pbbJnrUvGzkibhNqw3Tlgn%5Coil%2FrW7zFZZWSA3K9gD77MPSVH6fnv5hIT8ms70MNB3CxK5r3ecj3tFMlWFbFOZmGw%5C%3A1490677541180; _iuqxldmzr_=32; vjuids=c8ca7976.15a029d006a.0.51373751e63af8; vjlast=1486102528.1490172479.21; __gads=ID=a9eed5e3cae4d252:T=1486102537:S=ALNI_Mb5XX2vlkjsiU5cIy91-ToUDoFxIw; vinfo_n_f_l_n3=411a2def7f75a62e.1.1.1486349441669.1486349607905.1490173828142; P_INFO=m15527594439@163.com|1489375076|1|study|00&99|null&null&null#hub&420100#10#0#0|155439&1|study_client|15527594439@163.com; NTES_CMT_USER_INFO=84794134%7Cm155****4439%7Chttps%3A%2F%2Fsimg.ws.126.net%2Fe%2Fimg5.cache.netease.com%2Ftie%2Fimages%2Fyun%2Fphoto_default_62.png.39x39.100.jpg%7Cfalse%7CbTE1NTI3NTk0NDM5QDE2My5jb20%3D; usertrack=c+5+hljHgU0T1FDmA66MAg==; Province=027; City=027; _ga=GA1.2.1549851014.1489469781; __utma=94650624.1549851014.1489469781.1490664577.1490672820.8; __utmc=94650624; __utmz=94650624.1490661822.6.2.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; playerid=81568911; __utmb=94650624.23.10.1490672820", 'Connection':"keep-alive", 'Referer':'http://music.163.com/' } # 設(shè)置代理服務(wù)器 proxies= { 'http:':'http://121.232.146.184', 'https:':'https://144.255.48.197' } # offset的取值為:(評(píng)論頁數(shù)-1)*20,total第一頁為true,其余頁為false # first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}' # 第一個(gè)參數(shù) second_param = "010001" # 第二個(gè)參數(shù) # 第三個(gè)參數(shù) third_param = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7" # 第四個(gè)參數(shù) forth_param = "0CoJUm6Qyw8W8jud" # 獲取參數(shù) def get_params(page): # page為傳入頁數(shù) iv = "0102030405060708" first_key = forth_param second_key = 16 * 'F' if(page == 1): # 如果為第一頁 first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}' h_encText = AES_encrypt(first_param, first_key, iv) else: offset = str((page-1)*20) first_param = '{rid:"", offset:"%s", total:"%s", limit:"20", csrf_token:""}' %(offset,'false') h_encText = AES_encrypt(first_param, first_key, iv) h_encText = AES_encrypt(h_encText, second_key, iv) return h_encText # 獲取 encSecKey def get_encSecKey(): encSecKey = "257348aecb5e556c066de214e531faadd1c55d814f9be95fd06d6bff9f4c7a41f831f6394d5a3fd2e3881736d94a02ca919d952872e7d0a50ebfa1769a7a62d512f5f1ca21aec60bc3819a9c3ffca5eca9a0dba6d6f7249b06f5965ecfff3695b54e1c28f3f624750ed39e7de08fc8493242e26dbc4484a01c76f739e135637c" return encSecKey # 解密過程 def AES_encrypt(text, key, iv): pad = 16 - len(text) % 16 text = text + pad * chr(pad) encryptor = AES.new(key, AES.MODE_CBC, iv) encrypt_text = encryptor.encrypt(text) encrypt_text = base64.b64encode(encrypt_text) return encrypt_text # 獲得評(píng)論json數(shù)據(jù) def get_json(url, params, encSecKey): data = { "params": params, "encSecKey": encSecKey } response = requests.post(url, headers=headers, data=data,proxies = proxies) return response.content # 抓取熱門評(píng)論,返回?zé)嵩u(píng)列表 def get_hot_comments(url): hot_comments_list = [] hot_comments_list.append(u"用戶ID 用戶昵稱 用戶頭像地址 評(píng)論時(shí)間 點(diǎn)贊總數(shù) 評(píng)論內(nèi)容\n") params = get_params(1) # 第一頁 encSecKey = get_encSecKey() json_text = get_json(url,params,encSecKey) json_dict = json.loads(json_text) hot_comments = json_dict['hotComments'] # 熱門評(píng)論 print("共有%d條熱門評(píng)論!" % len(hot_comments)) for item in hot_comments: comment = item['content'] # 評(píng)論內(nèi)容 likedCount = item['likedCount'] # 點(diǎn)贊總數(shù) comment_time = item['time'] # 評(píng)論時(shí)間(時(shí)間戳) userID = item['user']['userID'] # 評(píng)論者id nickname = item['user']['nickname'] # 昵稱 avatarUrl = item['user']['avatarUrl'] # 頭像地址 comment_info = userID + " " + nickname + " " + avatarUrl + " " + comment_time + " " + likedCount + " " + comment + u"\n" hot_comments_list.append(comment_info) return hot_comments_list # 抓取某一首歌的全部評(píng)論 def get_all_comments(url): all_comments_list = [] # 存放所有評(píng)論 all_comments_list.append(u"用戶ID 用戶昵稱 用戶頭像地址 評(píng)論時(shí)間 點(diǎn)贊總數(shù) 評(píng)論內(nèi)容\n") # 頭部信息 params = get_params(1) encSecKey = get_encSecKey() json_text = get_json(url,params,encSecKey) json_dict = json.loads(json_text) comments_num = int(json_dict['total']) if(comments_num % 20 == 0): page = comments_num / 20 else: page = int(comments_num / 20) + 1 print("共有%d頁評(píng)論!" % page) for i in range(page): # 逐頁抓取 params = get_params(i+1) encSecKey = get_encSecKey() json_text = get_json(url,params,encSecKey) json_dict = json.loads(json_text) if i == 0: print("共有%d條評(píng)論!" % comments_num) # 全部評(píng)論總數(shù) for item in json_dict['comments']: comment = item['content'] # 評(píng)論內(nèi)容 likedCount = item['likedCount'] # 點(diǎn)贊總數(shù) comment_time = item['time'] # 評(píng)論時(shí)間(時(shí)間戳) userID = item['user']['userId'] # 評(píng)論者id nickname = item['user']['nickname'] # 昵稱 avatarUrl = item['user']['avatarUrl'] # 頭像地址 comment_info = unicode(userID) + u" " + nickname + u" " + avatarUrl + u" " + unicode(comment_time) + u" " + unicode(likedCount) + u" " + comment + u"\n" all_comments_list.append(comment_info) print("第%d頁抓取完畢!" % (i+1)) return all_comments_list # 將評(píng)論寫入文本文件 def save_to_file(list,filename): with codecs.open(filename,'a',encoding='utf-8') as f: f.writelines(list) print("寫入文件成功!") if __name__ == "__main__": start_time = time.time() # 開始時(shí)間 url = "http://music.163.com/weapi/v1/resource/comments/R_SO_4_186016/?csrf_token=" filename = u"晴天.txt" all_comments_list = get_all_comments(url) save_to_file(all_comments_list,filename) end_time = time.time() #結(jié)束時(shí)間 print("程序耗時(shí)%f秒." % (end_time - start_time))
我利用上述代碼跑了一下,抓了兩首周杰倫的熱門歌曲《晴天》(有130多萬評(píng)論)和《告白氣球》(有20多萬評(píng)論),前者跑了大概有20多分鐘,后者有6600多秒(也就是將近2個(gè)小時(shí)),截圖如下:
注意我是按照空格來分隔的,每一行分別有用戶ID 用戶昵稱 用戶頭像地址 評(píng)論時(shí)間 點(diǎn)贊總數(shù) 評(píng)論內(nèi)容 這些內(nèi)容。我將這兩個(gè)txt文件上傳到百度云了,對(duì)數(shù)據(jù)感興趣的同學(xué)可以直接下載進(jìn)行文本分析,地址為:《晴天》(http://pan.baidu.com/s/1kU50rBL),《告白氣球》(http://pan.baidu.com/s/1i4PNjff),或者自己跑一下代碼抓取一下也是可以的(注意不要開太多線程給網(wǎng)易云的服務(wù)器太大壓力哦~~中間有一段時(shí)間服務(wù)器返回?cái)?shù)據(jù)特別慢,不知道是不是限制訪問了,后來又好了)。我后面也許會(huì)自己去對(duì)評(píng)論數(shù)據(jù)進(jìn)行可視化分析,敬請(qǐng)期待!
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
在notepad++中實(shí)現(xiàn)直接運(yùn)行python代碼
今天小編就為大家分享一篇在notepad++中實(shí)現(xiàn)直接運(yùn)行python代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12關(guān)于Python中的海象運(yùn)算符使用方法詳解
這篇文章主要介紹了關(guān)于Python中的海象運(yùn)算符“:=”使用方法詳解,海象運(yùn)算符(walrus?operator)是?Python?3.8?中引入的一種新的語法,需要的朋友可以參考下2023-04-04Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能,結(jié)合實(shí)例形式分析了Python基于wmi模塊的遠(yuǎn)程連接與進(jìn)程操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06Pandas中的 transform()結(jié)合 groupby()用法示例詳解
這篇文章主要介紹了Pandas中的 transform() 結(jié)合 groupby() 用法示例,本文通過一個(gè)餐廳數(shù)據(jù)集給大家分享解決方案,示例代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-09-09python數(shù)據(jù)預(yù)處理之將類別數(shù)據(jù)轉(zhuǎn)換為數(shù)值的方法
下面小編就為大家?guī)硪黄猵ython數(shù)據(jù)預(yù)處理之將類別數(shù)據(jù)轉(zhuǎn)換為數(shù)值的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07centos 安裝python3.6環(huán)境并配置虛擬環(huán)境的詳細(xì)教程
這篇文章主要介紹了centos-安裝python3.6環(huán)境并配置虛擬環(huán)境的詳細(xì)教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02淺談numpy.where() 的用法和np.argsort()的用法說明
這篇文章主要介紹了淺談numpy.where() 的用法和np.argsort()的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-05-05