欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

把英雄分類(lèi),看 Python 帶你上王者

系統(tǒng) 1807 0

王者榮耀這么久了,還沒(méi)上王者?哈哈哈,看過(guò)來(lái),是不是對(duì)英雄理解的不夠透徹呢,是不是還沒(méi)有很好的為英雄分類(lèi)呢,今天就來(lái)看看英雄分類(lèi)

技術(shù)棧

一、EM 聚類(lèi)簡(jiǎn)介

二、爬取網(wǎng)上的英雄初始屬性值

三、做成餅圖

EM 聚類(lèi)簡(jiǎn)介

EM 英文名是 Expectation Maximization,也叫最大期望算法。

在統(tǒng)計(jì)計(jì)算中,最大期望(EM)算法是在概率(probabilistic)模型中尋找參數(shù)最大似然估計(jì)或者最大后驗(yàn)估計(jì)的算法,其中概率模型依賴(lài)于無(wú)法觀測(cè)的隱藏變量(Latent Variable)。

最大期望算法經(jīng)過(guò)兩個(gè)步驟交替進(jìn)行計(jì)算,第一步是計(jì)算期望(E),利用對(duì)隱藏變量的現(xiàn)有估計(jì)值,計(jì)算其最大似然估計(jì)值;第二步是最大化(M),最大化在 E 步上求得的最大似然值來(lái)計(jì)算參數(shù)的值。M 步上找到的參數(shù)估計(jì)值被用于下一個(gè) E 步計(jì)算中,這個(gè)過(guò)程不斷交替進(jìn)行。

在此推薦小編創(chuàng)建的Python學(xué)習(xí)交流群:835017344,這里是python學(xué)習(xí)者聚集地,有大牛答疑,有資源共享!有想學(xué)習(xí)python編程的,或是轉(zhuǎn)行,或是大學(xué)生,還有工作中想提升自己能力的,正在學(xué)習(xí)的小伙伴歡迎加入學(xué)習(xí)。

進(jìn)行英雄聚類(lèi)

使用 sklearn 庫(kù)中的的 EM 聚類(lèi)算法框架,采用高斯混合模型

          
            from sklearn.mixture import GaussianMixture
復(fù)制代碼

          
        

一些主要參數(shù)意義如下,其他參數(shù)可以查看相關(guān)文檔

  1. n_components:混合高斯模型個(gè)數(shù),也就是想要的聚類(lèi)個(gè)數(shù),默認(rèn)為1

  2. covariance_type:協(xié)方差類(lèi)型,包括{‘full’,‘tied’, ‘diag’, ‘spherical’}四種,分別對(duì)應(yīng)完全協(xié)方差矩陣(元素都不為零),相同的完全協(xié)方差矩陣(HMM會(huì)用到),對(duì)角協(xié)方差矩陣(非對(duì)角為零,對(duì)角不為零),球面協(xié)方差矩陣(非對(duì)角為零,對(duì)角完全相同,球面特性),默認(rèn)‘full’ 完全協(xié)方差矩陣

  3. max_iter:最大迭代次數(shù),默認(rèn)100

所以可以構(gòu)造 GMM 聚類(lèi)如下:

          
            # 構(gòu)造 GMM 聚類(lèi)
gmm = GaussianMixture(n_components=20, covariance_type='full')
復(fù)制代碼

          
        

有一份如下結(jié)構(gòu)的數(shù)據(jù):

[圖片上傳中...(image-5dab6a-1562219826453-6)]

可以看到,涉及到的屬性非常多,初始的屬性設(shè)置如下:

          
            feature = ['1級(jí)物理攻擊', '15級(jí)物理攻擊', '每級(jí)成長(zhǎng)',
           '1級(jí)生命', '15級(jí)生命', '生命成長(zhǎng)值', '1級(jí)物理防御',
           '15級(jí)物理防御', '每級(jí)物理防御成長(zhǎng)', '攻速成長(zhǎng)',
           '1級(jí)每5秒回血', '15級(jí)每5秒回血', '1級(jí)最大法力',
           '15級(jí)最大法力', '最大法力成長(zhǎng)', '1級(jí)每五秒回藍(lán)',
           '15級(jí)每5秒回藍(lán)', '近/遠(yuǎn)程?', '移速', '定位', '個(gè)人建議分路']
復(fù)制代碼

          
        

屬性降維

可以先通過(guò)熱力圖來(lái)判斷下哪些屬性是強(qiáng)相關(guān)的,只保留唯一屬性

          
            import seaborn as sns
import matplotlib.pyplot as plt

corr = data[feature].corr()
plt.figure(figsize=(14, 14))
sns.heatmap(corr, annot=True)
plt.show()
復(fù)制代碼

          
        

[圖片上傳中...(image-232849-1562219826453-5)]

可以看到,其中”1級(jí)最大法力“,”15級(jí)最大法力“,”最大法力成長(zhǎng)“,是強(qiáng)相關(guān)的,由此可以做出屬性篩選,最終保留的屬性如下:

          
            features_remain = ['15級(jí)生命', '15級(jí)物理攻擊',
                   '15級(jí)物理防御', '15級(jí)最大法力',
                   '15級(jí)每5秒回血', '15級(jí)每5秒回藍(lán)', '移速',
                   '攻速成長(zhǎng)', '近/遠(yuǎn)程?']
復(fù)制代碼

          
        

數(shù)據(jù)規(guī)范化

將攻擊范圍字段(”近/遠(yuǎn)程?“)轉(zhuǎn)換為 0 和 1

          
            data_new['近/遠(yuǎn)程?'] = data_new['近/遠(yuǎn)程?'].map({'遠(yuǎn)程': 1, '近程': 0})
復(fù)制代碼

          
        

EM 聚類(lèi)計(jì)算

采用高斯混合模式,并把生成的類(lèi)別寫(xiě)入 csv 文件中

          
             # 構(gòu)造 GMM 聚類(lèi)
 gmm = GaussianMixture(n_components=20, covariance_type='full')
 gmm.fit(data_new)

 # 訓(xùn)練數(shù)據(jù)
 prediction = gmm.predict(data_new)
 # print(prediction)

 hero_data.insert(0, '分組', prediction)
 hero_data.to_csv('hero_out.csv', index=False, sep=',', encoding='gb18030')
復(fù)制代碼

          
        

餅圖輸出

為了更加直觀的查看各個(gè)英雄的分組情況,這里使用餅圖來(lái)做可視化 首先取出數(shù)據(jù)的”分組“和”名稱(chēng)“兩個(gè)字段,并對(duì)”分組“字段進(jìn)行分組處理

          
            df = hero_data[['分組', '名稱(chēng)']]
grouped = df.groupby(['分組'])
復(fù)制代碼

          
        

然后取出分組中的數(shù)值,并用 pyecharts 來(lái)畫(huà)餅圖

          
             from pyecharts import Pie

 k = []
 for name, group in grouped:
     k.append({name: list(group['名稱(chēng)'].values)})

 kk = []
 for i in k:
     for k, v in i.items():
        kk.append(v)

length = []
key = []
for i in kk:
    key.append(str(i))
    length.append(len(i))
pie = Pie('英雄完全屬性分類(lèi)圖', title_pos='center')
pie.add("", key, length,
        is_label_show=True, legend_pos="bottom", legend_orient="vertical",)
pie.render()
復(fù)制代碼

          
        

[圖片上傳中...(image-3be250-1562219826453-4)]

抓取英雄初始屬性

要想獲得更加全的英雄數(shù)據(jù),還是需要到網(wǎng)上抓取,這樣才能夠保證英雄的數(shù)量是最新的。這里我使用的是 db.18183.com/ 網(wǎng)站的數(shù)據(jù),頁(yè)面如下:

[圖片上傳中...(image-9bb357-1562219826453-3)]

[圖片上傳中...(image-ce0f68-1562219826453-2)]

獲取英雄頁(yè)面 URL

使用 BeautifulSoup 來(lái)定位到 class 為 mod-iconlist 的 ul 元素,里面保存的就是各個(gè)英雄的頁(yè)面

          
                url = 'http://db.18183.com/'
    url_list = []
    res = requests.get(url + 'wzry').text
    content = BeautifulSoup(res, "html.parser")
    ul = content.find('ul', attrs={'class': "mod-iconlist"})
    hero_url = ul.find_all('a')
    for i in hero_url:
        url_list.append(i['href'])
復(fù)制代碼

          
        

抓取詳細(xì)信息

循環(huán)抓取到的 URL 列表,抓取每個(gè)英雄的詳細(xì)信息

          
                 base_url = 'http://db.18183.com/'
     detail_list = []
     for i in url:
         # print(i)
         res = requests.get(base_url + i).text
         content = BeautifulSoup(res, "html.parser")
         name_box = content.find('div', attrs={'class': 'name-box'})
         name = name_box.h1.text
         hero_attr = content.find('div', attrs={'class': 'attr-list'})
        attr_star = hero_attr.find_all('span')
        survivability = attr_star[0]['class'][1].split('-')[1]
        attack_damage = attr_star[1]['class'][1].split('-')[1]
        skill_effect = attr_star[2]['class'][1].split('-')[1]
        getting_started = attr_star[3]['class'][1].split('-')[1]
        details = content.find('div', attrs={'class': 'otherinfo-datapanel'})
        # print(details)
        attrs = details.find_all('p')
        attr_list = []
        for attr in attrs:
            attr_list.append(attr.text.split(':')[1].strip())
        detail_list.append([name, survivability, attack_damage,
                            skill_effect, getting_started, attr_list])
復(fù)制代碼

          
        

保存到 csv 文件

open 一個(gè)文件,把對(duì)應(yīng)的列表字段存入

          
                 with open('all_hero_init_attr.csv', 'w', encoding='gb18030') as f:
         f.write('英雄名字,生存能力,攻擊傷害,技能效果,上手難度,最大生命,最大法力,物理攻擊,'
                 '法術(shù)攻擊,物理防御,物理減傷率,法術(shù)防御,法術(shù)減傷率,移速,物理護(hù)甲穿透,法術(shù)護(hù)甲穿透,攻速加成,暴擊幾率,'
                 '暴擊效果,物理吸血,法術(shù)吸血,冷卻縮減,攻擊范圍,韌性,生命回復(fù),法力回復(fù)\n')
         for i in details:
             try:
                 rowcsv = '{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}'.format(
                     i[0], i[1], i[2], i[3], i[4], i[5][0], i[5][1], i[5][2], i[5][3], i[5][4], i[5][5],
                     i[5][6], i[5][7], i[5][8], i[5][9], i[5][10], i[5][11], i[5][12], i[5][13], i[5][14], i[5][15],
                    i[5][16], i[5][17], i[5][18], i[5][19], i[5][20]
                )
                f.write(rowcsv)
                f.write('\n')
            except:
                continue
復(fù)制代碼

          
        

數(shù)據(jù)清理

因?yàn)檫@個(gè)網(wǎng)站可能做的不是很用心,有些屬性會(huì)存在兩個(gè)百分號(hào)和為空的情況,如圖:

[圖片上傳中...(image-ced2dd-1562219826452-1)]

所以需要處理下。

對(duì)于兩個(gè)百分號(hào),直接使用 notepad++ 把所有的 %% 的替換為單 % 即可

對(duì)于為空的字段,使用如下代碼處理,填為 0

          
            # 把空值設(shè)置為0
data_init = data_init.fillna(0)
復(fù)制代碼

          
        

完成

對(duì)于數(shù)據(jù)規(guī)范化,GMM 聚類(lèi)和餅圖呈現(xiàn),都和前面類(lèi)似,不再贅述,下面來(lái)看看餅圖效果

[圖片上傳中...(image-13f8ec-1562219826452-0)]

雖然通過(guò)這兩張餅圖,沒(méi)有辦法一下子提高你手殘的毛病,但是明確了英雄的分類(lèi),不是離王者更近了一步嗎


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲综合色播 | 天堂在线观看中文字幕 | 高清国产福利 | 久久久国产一区二区三区 | 亚洲欧美视频 | 欧美日韩中文字幕在线视频 | 91免费国产在线 | 国产精品一区二555 欧美在线免费 | 欧美成人免费全网站大片 | 久久久精品久久视频只有精品 | 日韩在线视频观看 | 精品午夜寂寞黄网站在线 | 欧美一区二区三区久久 | 操操影视 | 国产视频日本 | 亚洲精品久久久久久中文字幕小说 | 黄色午夜电影 | 99热久久国产综合精品久久国产 | 国产福利视频 | 四虎av| 亚洲视频一区在线 | 欧美性色生活片免费播放 | 成人毛片在线观看 | 国产苐1页影院草草影院 | 日韩一区二区三区视频 | 国产一区在线免费观看 | 久久视频这里只要精品 | 中文字幕在线看 | 色爱综合区五月小说 | 午夜视频国语 | 麻豆一二区 | 亚洲一区久久久 | 毛片在线观看视频 | 嫩草影院网影院在线 | 手机看片国产免费现在观看 | 天天干天天操天天透 | 欧美精品免费在线 | 日韩欧美片 | 欧美日韩国产在线 | 亚洲草原天堂 | 欧美一区二区免费 |