利用数据分析星际争霸2选手

1、利用爬虫爬取http://aligulac.com/网站上的职业选手数据

爬虫与数据集在我的github上https://github.com/wuchangsheng951/kaggle

1)网站概况

image.png

2)选手数据
image.png

3)利用bs4爬取数据,代码和获取到的数据集都放在了我的github里。
https://github.com/wuchangsheng951/kaggle
csv数据如下
image.png

2、数据清晰

#加载数据集
df=pd.read_csv('/home/kesci/input/temp4946/星际争霸数据集.csv')
#将玩家1和玩家二都处于排名之中
df=df[df.player_2.isin(df.player_1.unique())]
#将win替换为1,输替换为0
df.player_1_match_status=df.player_1_match_status.map({'[\'winner\']':1,'[\'loser\']':0 })
df.tournament_type=df.tournament_type.map({'offline':1,'online':0 })
df=df.drop(['addon','player_2_match_status'],axis=1)
image.png

类型转换以及分割字符串

df.score=df.score.str.replace('–',' ')
df.score=df.score.str.strip()
df['player_1_win']=df.score.str.slice(0,1)
df['player_2_win']=df.score.str.slice(2,5)
df['player_2_win']=df['player_2_win'].str.strip()
df['player_1_win']=df['player_1_win'].astype(int)
df['player_2_win']=df['player_2_win'].astype(int)
#将时间转换为datatime类型
#df.match_date=pd.to_datetime(df.match_date)
df=df.rename(columns={'player_1_match_status':'win'})
df['P_win']=0
df['Z_win']=0
df['T_win']=0
df['total']=0
def k(row):
    if row['player_1_race']=='P':
        row['P_win']=row['player_1_win']
    elif  row['player_1_race']=='T':
        row['T_win']=row['player_1_win']
    elif  row['player_1_race']=='Z':
        row['Z_win']=row['player_1_win']
    if  row['player_2_race']=='P':
        row['P_win']=row['player_2_win']
    elif  row['player_2_race']=='Z':
        row['Z_win']=row['player_2_win']
    elif  row['player_2_race']=='T':
        row['T_win']=row['player_2_win']
    row['total'] = row['player_1_win']+row['player_2_win']
    return row
df=df.apply(k,axis=1)
df=df.drop('score',axis=1)
image.png

然后就可以计算啦

#各个种族职业选手人数
labels={'P','IMBAZ','IMBAT'}#标题
plt.rcParams['font.sans-serif']=['SimHei']
sizes=[race.count('P'),race.count('Z'),race.count('T')]#占比
#colors=['yellowgreen','green','red','orange']#规定颜色
explode=[0,0,0]#占比突出
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%')#,colors=colors)
plt.axis('equal')#显示比例

image.png
#剔除随机选手
df=df[df.player_1_race!='R' ]
df=df[df.player_2_race!='R' ]
#创建十三个以三个月为间隔的时间间隔
date=pd.date_range('1/1/2015', periods=13, freq='3M')
#将日期转为datetime类型方便比较
df.match_date=pd.to_datetime(df.match_date)

计算pvz各个种族胜率

PVT=[]
PVZ=[]
ZVT=[]
for i in range(12):
    df_temp=df[(df.match_date>date[i]) &(df.match_date<date[i+1])]
    rate=df_temp.groupby(['player_1_race','player_2_race']).sum().reset_index()
    PVT.append((rate.iloc[1,6]/rate.iloc[1,9]+rate.iloc[3,6]/rate.iloc[3,9])/2)
    PVZ.append((rate.iloc[2,6]/rate.iloc[2,9]+rate.iloc[6,6]/rate.iloc[6,9])/2)
    ZVT.append((rate.iloc[7,7]/rate.iloc[7,9]+rate.iloc[5,7]/rate.iloc[5,9])/2)
image.png
image.png

种族胜率排名

#选取2015年之后的数据
df=df[df.match_date>'2015']
rate=df.pivot_table(index=['player_1','player_1_race','player_2_race'],aggfunc=np.sum)
rate=rate.reset_index()
#种族胜率排名
def  mm(row):
    row['win']=row.player_1_win/row.total
    return row

rating=rate[rate.total>100].apply(mm,axis=1)
lala=rating.groupby(['player_1','player_1_race','player_2_race']).mean().sort_values('win').reset_index()
#在此处修改对阵种族
lala[(lala['player_1_race']=='T') & (lala['player_2_race']=='P')][-30:].plot('player_1','win',kind='barh')
image.png

选手胜率排名

#选手胜率排名
player='ByuN'
def func(row):
  row['win'] = row['player_1_win']/row['total']
  return row
#此处可以修改时间
temp1=df[(df.player_1==player)&(df.match_date>='2017-4')].groupby('player_2').sum().reset_index().apply(func,axis=1).sort_values('win')
temp1=temp1[temp1.total>10].reset_index()
temp1.plot('player_2','win',kind='barh',title=player,xticks=[x*0.1 for x in range(10)])

image.png

线上线下胜率

#线下线上胜率
df=df[df.match_date>'2017']
if_on_line=df[df.tournament_type==0]
def  lala(row):
  row['win']=row.player_1_win/row.total
  return row

offline=if_on_line.groupby(['player_1']).sum().reset_index()
offline=offline.apply(lala,axis=1).sort_values('win')[-30:]
offline.plot('player_1','win',kind='barh')
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容