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

把英雄分類,看 Python 帶你上王者

系統(tǒng) 1654 0

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

技術(shù)棧

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

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

三、做成餅圖

EM 聚類簡(jiǎn)介

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

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

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

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

進(jìn)行英雄聚類

使用 sklearn 庫中的的 EM 聚類算法框架,采用高斯混合模型

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

          
        

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

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

  2. covariance_type:協(xié)方差類型,包括{‘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 聚類如下:

          
            # 構(gòu)造 GMM 聚類
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ù)制代碼

          
        

屬性降維

可以先通過熱力圖來判斷下哪些屬性是強(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 聚類計(jì)算

采用高斯混合模式,并把生成的類別寫入 csv 文件中

          
             # 構(gòu)造 GMM 聚類
 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è)英雄的分組情況,這里使用餅圖來做可視化 首先取出數(shù)據(jù)的”分組“和”名稱“兩個(gè)字段,并對(duì)”分組“字段進(jìn)行分組處理

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

          
        

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

          
             from pyecharts import Pie

 k = []
 for name, group in grouped:
     k.append({name: list(group['名稱'].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('英雄完全屬性分類圖', 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ù),頁面如下:

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

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

獲取英雄頁面 URL

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

          
                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 聚類和餅圖呈現(xiàn),都和前面類似,不再贅述,下面來看看餅圖效果

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

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

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

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

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

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美精品一区在线发布 | 免费看污成人午夜网站 | 国产三级做爰在线观看∵ | 富二代视频污 | videosex久久麻豆 | 色综合久久综合欧美综合图片 | 久久精品1 | a级网站 | 五月婷婷开心综合 | 亚洲久草| 我和我的祖国电影在线观看免费版高清 | 欧美成人一区在线 | 亚洲好视频 | 国产日韩欧美一区二区 | 欧美精品一区三区 | 久久日韩在线 | 波多野结衣中文在线观看 | 欧美成人性生活 | 日韩免费一区二区 | 91在线观看网站 | 人成免费a级毛片 | 欧美人成在线视频 | 欧美变态口味重另类日韩毛片 | 5060午夜网| 日韩综合在线 | 久久特级毛片 | 人人草草 | 色欧美片视频在线观看 | 亚洲国产精品国自产电影 | 青青草无限次破解版污 | 国产高清一国产免费软件 | 久久综合亚洲 | 91tm视频 | 天天摸天天做天天爽在线 | 日韩高清一区二区 | 亚洲精品人人 | 91探花 | 久久精品人人做人人 | 日韩毛片欧美一级a网站 | 亚洲精品日本高清中文字幕 | 91视频这里只有精品 |