ヒーローを分類してPythonが王者を連れて行くのを見て
7385 ワード
王の栄光はこんなに長くなったのに,まだ王になっていないのか.ハハハ、見て、英雄に対する理解が足りないのではないでしょうか.まだ英雄の分類がよくないのではないでしょうか.今日は英雄の分類を見てみましょう.
テクノロジースタック
一、EMクラスタリングの概要
二、ネット上のヒーローの初期属性値を取得する
三、円グラフを作る
EMクラスタリングの概要
EMの英語名はExpectation Maximizationで、最大期待アルゴリズムとも呼ばれます.
統計計算において、最大期待(EM)アルゴリズムは、確率(probabilistic)モデルにおいてパラメータの最大尤度推定または最大後験推定を探すアルゴリズムであり、確率モデルは観測不可能な隠蔽変数(Latent Variable)に依存する.
最大期待アルゴリズムは2つのステップで交互に計算され、第1のステップは期待(E)を計算し、隠蔽変数に対する既存の推定値を利用して、その最大尤度推定値を計算する.第2ステップは最大化(M)であり,Eステップで求めた最大尤度値を最大化してパラメータの値を計算する.Mステップで見つけたパラメータ推定値を次のEステップ計算に用い,このプロセスは絶えず交互に行われる.
ここではpython学習者が集まる場所で、大牛の質疑応答があり、資源共有があります.pythonプログラミングを学びたい人、転職したい人、大学生、仕事で自分の能力を高めたい人、勉強している仲間は勉強に参加してください.
英雄集団を行なう.
sklearnライブラリのEMクラスタリングアルゴリズムフレームワークを用いてGaussハイブリッドモデルを採用
いくつかの主要なパラメータの意味は次のとおりです.他のパラメータは関連ドキュメントを表示できます. n_components:ハイブリッドGaussモデルの個数、すなわち所望のクラスタリング個数、デフォルトは1 covariance_type:完全共分散行列(要素はすべてゼロではありません)、同じ完全共分散行列(HMMが使用します)、対角共分散行列(非対角はゼロ、対角はゼロ)、球面共分散行列(非対角はゼロ、対角は完全に同じ、球面特性)、デフォルトの「full」完全共分散行列 max_iter:最大反復数、デフォルト100 GMMクラスタリングは次のように構築できます.
次の構造のデータがあります.
[画像アップロード中...(image-5 dab 6 a-1562219826453-6)]
関連するプロパティが非常に多く、初期のプロパティ設定は次のとおりです.
属性次元ダウン
まず、熱力図によって、どの属性が強いかを判断し、一意の属性のみを保持することができます.
[画像アップロード中...(image-23849-1562219826453-5)]
ここで、「レベル1最大法力」、「レベル15最大法力」、「最大法力成長」は、強い相関があり、属性フィルタを作成できます.最終的に保持される属性は次のとおりです.
データの正規化
攻撃範囲フィールド([近接/リモート?])を0と1に変換
EMクラスタリング計算
ガウスブレンドモードを採用し、生成したカテゴリをcsvファイルに書き込む
円グラフ出力
各ヒーローのグループ化状況をより直感的に表示するには、まずデータを取り出した「グループ」と「名前」の2つのフィールドを可視化し、「グループ」フィールドをグループ化するために円グラフを使用します.
次にグループの数値を取り出し、pyechartsで円グラフを描きます.
[画像アップロード中...(image-3 be 250-1562219826453-4)]
ヒーローの初期属性をキャプチャ
より完全なヒーローデータを得るには、ネット上で捕まえる必要があります.そうすれば、ヒーローの数が最新であることを保証することができます.ここで私が使っているのはdbです.18183.com/ウェブサイトのデータ、ページは以下の通りです.
[画像アップロード中...(image-9 bb 357-1562219826453-3)]
[画像アップロード中...(image-ce 0 f 68-1562219826453-2)]
ヒーローページURLを取得
BeautifulSoupを使用して、classがmod-iconlistのul要素にナビゲートします.保存されているのは各ヒーローのページです.
詳細のキャプチャ
検索したURLリストをループし、各ヒーローの詳細をキャプチャします.
csvファイルに保存
Openファイル、対応するリストフィールドを格納
データクリーンアップ
このサイトはあまり意図していない可能性がありますので、図のように2つのパーセントと空の場合があります.
[画像アップロード中...(image-ced 2 dd-1562219826452-1)]
だから処理する必要があります.
2つのパーセンテージについては、notepad++を直接使用してすべての%%を単%に置き換えるとよい
空のフィールドの場合は、次のコード処理を使用して0に入力します.
完了
データの規範化については、GMMクラスタリングと餅図の提示は、いずれも前と類似しており、これ以上説明しないで、餅図の効果を見てみましょう.
[画像アップロード中...(image-13 f 8 ec-1562219826452-0)]
この2枚の円グラフを通して、あなたの手の不自由な欠点を一気に高めることはできませんが、英雄の分類を明確にして、王者に一歩近づいたのではないでしょうか.
テクノロジースタック
一、EMクラスタリングの概要
二、ネット上のヒーローの初期属性値を取得する
三、円グラフを作る
EMクラスタリングの概要
EMの英語名はExpectation Maximizationで、最大期待アルゴリズムとも呼ばれます.
統計計算において、最大期待(EM)アルゴリズムは、確率(probabilistic)モデルにおいてパラメータの最大尤度推定または最大後験推定を探すアルゴリズムであり、確率モデルは観測不可能な隠蔽変数(Latent Variable)に依存する.
最大期待アルゴリズムは2つのステップで交互に計算され、第1のステップは期待(E)を計算し、隠蔽変数に対する既存の推定値を利用して、その最大尤度推定値を計算する.第2ステップは最大化(M)であり,Eステップで求めた最大尤度値を最大化してパラメータの値を計算する.Mステップで見つけたパラメータ推定値を次のEステップ計算に用い,このプロセスは絶えず交互に行われる.
ここではpython学習者が集まる場所で、大牛の質疑応答があり、資源共有があります.pythonプログラミングを学びたい人、転職したい人、大学生、仕事で自分の能力を高めたい人、勉強している仲間は勉強に参加してください.
英雄集団を行なう.
sklearnライブラリのEMクラスタリングアルゴリズムフレームワークを用いてGaussハイブリッドモデルを採用
from sklearn.mixture import GaussianMixture
いくつかの主要なパラメータの意味は次のとおりです.他のパラメータは関連ドキュメントを表示できます.
# GMM
gmm = GaussianMixture(n_components=20, covariance_type='full')
次の構造のデータがあります.
[画像アップロード中...(image-5 dab 6 a-1562219826453-6)]
関連するプロパティが非常に多く、初期のプロパティ設定は次のとおりです.
feature = ['1 ', '15 ', ' ',
'1 ', '15 ', ' ', '1 ',
'15 ', ' ', ' ',
'1 5 ', '15 5 ', '1 ',
'15 ', ' ', '1 ',
'15 5 ', ' / ?', ' ', ' ', ' ']
属性次元ダウン
まず、熱力図によって、どの属性が強いかを判断し、一意の属性のみを保持することができます.
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()
[画像アップロード中...(image-23849-1562219826453-5)]
ここで、「レベル1最大法力」、「レベル15最大法力」、「最大法力成長」は、強い相関があり、属性フィルタを作成できます.最終的に保持される属性は次のとおりです.
features_remain = ['15 ', '15 ',
'15 ', '15 ',
'15 5 ', '15 5 ', ' ',
' ', ' / ?']
データの正規化
攻撃範囲フィールド([近接/リモート?])を0と1に変換
data_new[' / ?'] = data_new[' / ?'].map({' ': 1, ' ': 0})
EMクラスタリング計算
ガウスブレンドモードを採用し、生成したカテゴリをcsvファイルに書き込む
# GMM
gmm = GaussianMixture(n_components=20, covariance_type='full')
gmm.fit(data_new)
#
prediction = gmm.predict(data_new)
# print(prediction)
hero_data.insert(0, ' ', prediction)
hero_data.to_csv('hero_out.csv', index=False, sep=',', encoding='gb18030')
円グラフ出力
各ヒーローのグループ化状況をより直感的に表示するには、まずデータを取り出した「グループ」と「名前」の2つのフィールドを可視化し、「グループ」フィールドをグループ化するために円グラフを使用します.
df = hero_data[[' ', ' ']]
grouped = df.groupby([' '])
次にグループの数値を取り出し、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()
[画像アップロード中...(image-3 be 250-1562219826453-4)]
ヒーローの初期属性をキャプチャ
より完全なヒーローデータを得るには、ネット上で捕まえる必要があります.そうすれば、ヒーローの数が最新であることを保証することができます.ここで私が使っているのはdbです.18183.com/ウェブサイトのデータ、ページは以下の通りです.
[画像アップロード中...(image-9 bb 357-1562219826453-3)]
[画像アップロード中...(image-ce 0 f 68-1562219826453-2)]
ヒーローページURLを取得
BeautifulSoupを使用して、classがmod-iconlistのul要素にナビゲートします.保存されているのは各ヒーローのページです.
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'])
詳細のキャプチャ
検索したURLリストをループし、各ヒーローの詳細をキャプチャします.
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])
csvファイルに保存
Openファイル、対応するリストフィールドを格納
with open('all_hero_init_attr.csv', 'w', encoding='gb18030') as f:
f.write(' , , , , , , , ,'
' , , , , , , , , , ,'
' , , , , , , ,
')
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('
')
except:
continue
データクリーンアップ
このサイトはあまり意図していない可能性がありますので、図のように2つのパーセントと空の場合があります.
[画像アップロード中...(image-ced 2 dd-1562219826452-1)]
だから処理する必要があります.
2つのパーセンテージについては、notepad++を直接使用してすべての%%を単%に置き換えるとよい
空のフィールドの場合は、次のコード処理を使用して0に入力します.
# 0
data_init = data_init.fillna(0)
完了
データの規範化については、GMMクラスタリングと餅図の提示は、いずれも前と類似しており、これ以上説明しないで、餅図の効果を見てみましょう.
[画像アップロード中...(image-13 f 8 ec-1562219826452-0)]
この2枚の円グラフを通して、あなたの手の不自由な欠点を一気に高めることはできませんが、英雄の分類を明確にして、王者に一歩近づいたのではないでしょうか.