成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

python告訴你ti8 dota2英雄bp

zhonghanwen / 3062人閱讀

摘要:創(chuàng)建表格創(chuàng)建工作表創(chuàng)建表頭圖片英雄圖片英雄圖片英雄第一行為表頭第一行是表頭,對(duì)應(yīng)的每一列填充數(shù)據(jù)行設(shè)置行高列英雄圖片,根據(jù)獲取英雄名統(tǒng)計(jì)次數(shù)表格生成,還可以插入柱狀圖。

文章鏈接:https://mp.weixin.qq.com/s/phJzZEQojndY-iNe77RF_w

恭喜OG成為ti8冠軍,很可惜這次偶數(shù)年ti8中國(guó)隊(duì)LGD與冠軍失之交臂。

上學(xué)那會(huì)兒還是個(gè)dota的玩家,現(xiàn)在已經(jīng)不玩了,對(duì)于這種國(guó)際性的賽事還是會(huì)比較關(guān)注的,這篇文章就是爬取ti8期間,bp英雄的統(tǒng)計(jì)(b是ban的簡(jiǎn)稱(chēng):禁止一個(gè)英雄上場(chǎng);p是pick的簡(jiǎn)稱(chēng):挑選英雄上場(chǎng))。

python爬蟲(chóng)之前寫(xiě)過(guò)幾篇文章的,都是用requests+ BeautifulSoup 進(jìn)行頁(yè)面解析獲取數(shù)據(jù)的。

python itchat 爬取微信好友信息

python爬蟲(chóng)學(xué)習(xí):爬蟲(chóng)QQ說(shuō)說(shuō)并生成詞云圖,回憶滿(mǎn)滿(mǎn)

一如既往的,找到這樣的頁(yè)面,但是卻解析不到這些數(shù)據(jù)。

再仔細(xì)一看,原來(lái)這些數(shù)據(jù)是js動(dòng)態(tài)加載渲染的,可以看到是接口請(qǐng)求來(lái)的數(shù)據(jù),慶幸的是這個(gè)接口不需要cookie之類(lèi)的驗(yàn)證信息的,直接get請(qǐng)求可以拿到數(shù)據(jù),這樣處理起來(lái)就方便的,對(duì)照頁(yè)面可以知道json格式的各字段名。

json結(jié)構(gòu)分析

數(shù)據(jù)來(lái)源是接口,直接

response = requests.get(url)
data = json.loads(response.text)

通過(guò)json.loads 去解析string類(lèi)型的數(shù)據(jù),主要數(shù)據(jù)格式如下:

{
    total: 402,
    data: [{
        match_id: 4080856812,
        radiant: {
            team_id: 15,
            name: "PSG.LGD",
            tag: "PSG.LGD",
            country_code: "CN",
            score: 34,
            bans: [{ //每個(gè)英雄數(shù)據(jù)
                name: "spectre",
                name_cn: "幽鬼",
                id: 67
            }, ...],
            picks: [{
                name: "earthshaker",
                name_cn: "撼地者",
                id: 7
            }, ...]
        },
        dire: {
            team_id: 2586976,
            name: "OG",
            tag: "OG",
            country_code: "US",
            score: 35,
            bans: [{
                name: "tiny",
                name_cn: "小小",
                id: 19
            }, ...],
            picks: [{
                name: "furion",
                name_cn: "先知",
                id: 53
            }, ...]
        },
        radiant_win: 0,
        end_time: "2018-08-26 10:51"
    }, ...]
}

每個(gè)item含radiant、dire ,其中radiant_win: 1,代表radiant 獲勝,0 則代表dire 獲勝。bans里面的是ban的英雄數(shù)據(jù)列表,picks里面是pick的英雄數(shù)據(jù)列表。

這里是用循環(huán)不斷去請(qǐng)求獲取的,每次的數(shù)據(jù)是20條,可以改變size改變條數(shù)。

page = 1
while True:
    url = "https://www.dotamore.com/api/v1/league/matchlist?league_id=9870&page=%d&size=20" % page
    response = requests.get(url)
    data = json.loads(response.text)
    page += 1
    for item in data["data"]:
        # 比賽從8月16開(kāi)始,小于這個(gè)時(shí)間生成excel,跳出循環(huán)
        if item["end_time"] < "018-08-16 00:00":
            //生成excel
            ...
        return
        //bp數(shù)據(jù)
        ...
bp數(shù)據(jù)

每項(xiàng)里面的bans、picks數(shù)據(jù)都要處理,每個(gè)英雄是一條記錄,重復(fù)的就+1,所以給每個(gè)英雄count 的屬性,記錄次數(shù)。

# item 指radiant 或dire 的bans、picks列表數(shù)據(jù)
def bp(item, bp_dict):
    if item is None:
        return
    # 遍歷bans 或picks 數(shù)據(jù)
    for i, bp in enumerate(item):
        key = bp["name"]
        # 如果這個(gè)英雄已存在,count+1
        if key in bp_dict.keys():
            bp_dict[key]["count"] = bp_dict[key]["count"] + 1
        else:  # 不存在就記錄一條數(shù)據(jù)
            bp_dict[key] = copy.deepcopy(bp)
            bp_dict[key].update(count=1)
    return bp_dict

每條英雄數(shù)據(jù)是個(gè)鍵值對(duì)字典,鍵是name 屬性即英文名字,值就是bans、picks里的各項(xiàng)英雄數(shù)據(jù),順便加上了count 屬性。每個(gè)英雄數(shù)據(jù)存在dict()

{ //每條英雄數(shù)據(jù)
    name: "tiny",
    name_cn: "小小",
    id: 19,
    count:1
}

分別獲取兩只隊(duì)伍bp數(shù)據(jù)存放

b_dict = dict()
p_dict = dict()
# ban的數(shù)據(jù)
bp(item["radiant"]["bans"], b_dict)
bp(item["dire"]["bans"], b_dict)
# pick的數(shù)據(jù)
bp(item["radiant"]["picks"], p_dict)
bp(item["dire"]["picks"], p_dict)

也可以統(tǒng)計(jì)所有英雄的出場(chǎng)次數(shù),非搬即選bp_list。
還可以獲取冠軍隊(duì)伍的bp情況,team_id 即隊(duì)伍的id。

if item["radiant_win"] == 0:
    if item["dire"]["team_id"] == "2586976":
        bp(item["dire"]["bans"], b_win_dict)
        bp(item["dire"]["picks"], p_win_dict)
else:
    if item["radiant"]["team_id"] == "2586976":
        bp(item["radiant"]["bans"], b_win_dict)
        bp(item["radiant"]["picks"], p_win_dict)
生成excel

以上數(shù)據(jù)我們得到的是字典,里面有各英雄的bp次數(shù),現(xiàn)在要對(duì)這些數(shù)據(jù)進(jìn)行排序,按次數(shù)從大到小排序,這里就用到sorted()方法

# x[0]是根據(jù)鍵排序,x[1]是根據(jù)值,這里的值是字典,取["count"]項(xiàng)排序,得到的是元祖的list
new_b_dict = sorted(b_dict.items(), key=lambda x: x[1]["count"], reverse=True)

得到的是數(shù)組,生成表格在之前這篇文章中有過(guò)使用,這里使用的是xlsxwriter三方庫(kù)來(lái)操作excel 表格的。

# 創(chuàng)建excel表格
file = xlsxwriter.Workbook("dota.xlsx")
# 創(chuàng)建工作表1
sheet1 = file.add_worksheet("sheet1")
# 創(chuàng)建表頭
headers = ["圖片", "英雄", "ban", "", "圖片", "英雄", "pick", "", "圖片", "英雄", "bp_all"]
for i, header in enumerate(headers):
    # 第一行為表頭
    sheet1.write(0, i, header)

第一行是表頭,對(duì)應(yīng)的每一列填充數(shù)據(jù)

def insert_data(sheet1, headers, bp_list, col1, col2, col3):
    for row in range(len(bp_list)):  # 行
        # 設(shè)置行高
        sheet1.set_row(row + 1, 30)
        for col in range(len(headers)):  # 列
            if col == col1:  # 英雄圖片,根據(jù)id獲取
                url = "http://cdn.dotamore.com/heros_id_62_35/%d.png" % bp_list[row][1]["id"]
                image_data = BytesIO(urlopen(url).read())
                sheet1.insert_image(row + 1, col, url, {"image_data": image_data})
            if col == col2:  # 英雄名
                name = bp_list[row][1]["name_cn"]
                sheet1.write(row + 1, col, name)
            if col == col3:  # 統(tǒng)計(jì)次數(shù)
                count = bp_list[row][1]["count"]
                sheet1.write(row + 1, col, count)

excel 表格生成,還可以插入柱狀圖。

def insert_chart(file, sheet1, bp_list, name, M, col_x, col_y):
    chart = file.add_chart({"type": "column"})  # 柱狀圖
    chart.add_series({
        "categories": ["sheet1", 1, col_x, len(bp_list), col_x],  # 圖表類(lèi)別標(biāo)簽范圍,x軸,這里取英雄的名字,即英雄名字那一列,行數(shù)根據(jù)數(shù)據(jù)列表確定
        "values": ["sheet1", 1, col_y, len(bp_list), col_y],  # 圖表數(shù)據(jù)范圍,y軸,即次數(shù)那一列,行數(shù)根據(jù)數(shù)據(jù)列表確定
        "data_labels": {"value": True},
    })
    chart.set_title({"name": name})  # 圖表標(biāo)題
    chart.set_size({"width": 2000, "height": 400})
    chart.set_x_axis({"name": "英雄"})  # x軸描述
    chart.set_y_axis({"name": "次數(shù)"})  # y軸描述
    chart.set_style(3)  # 直方圖類(lèi)型
    sheet1.insert_chart(M, chart)  # 在表格M處插入柱狀圖

效果圖:

這里只是簡(jiǎn)單的對(duì)數(shù)據(jù)進(jìn)行篩選展示,這些數(shù)據(jù)還是可以用來(lái)做更多的數(shù)據(jù)分析的,數(shù)據(jù)來(lái)源:刀魔數(shù)據(jù)。
github地址:https://github.com/taixiang/py_dota

最后放上lgd的圖片,希望他們明年能在ti9上再干回來(lái)

歡迎關(guān)注我的博客:https://blog.manjiexiang.cn/
更多精彩歡迎關(guān)注微信號(hào):春風(fēng)十里不如認(rèn)識(shí)你

有個(gè)「佛系碼農(nóng)圈」,歡迎大家加入暢聊,開(kāi)心就好!


過(guò)期了,可加我微信 tx467220125 拉你入群。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42309.html

相關(guān)文章

  • 2016年,我對(duì)爬蟲(chóng)的總結(jié)

    摘要:都說(shuō)年末了,該給自己寫(xiě)寫(xiě)總結(jié)了。我現(xiàn)在做一些簡(jiǎn)單的爬蟲(chóng)都會(huì)用它。并且對(duì)數(shù)據(jù)的實(shí)時(shí)性要求較高,或者爬數(shù)據(jù)的時(shí)候封的太厲害了。對(duì)于這一類(lèi)的爬蟲(chóng)。消息隊(duì)列用于分發(fā)消息給某個(gè)爬蟲(chóng)節(jié)點(diǎn)。爬蟲(chóng)節(jié)點(diǎn)完成具體的爬蟲(chóng),格式化爬蟲(chóng)數(shù)據(jù)。最后,感謝我的,謝謝 都說(shuō)年末了,該給自己寫(xiě)寫(xiě)總結(jié)了。今天我想談一談的是我在公司這一年多里的負(fù)責(zé)的部分工作---爬蟲(chóng)。做了這么久的爬蟲(chóng),是該寫(xiě)點(diǎn)什么,留下點(diǎn)什么。在我所負(fù)責(zé)...

    netmou 評(píng)論0 收藏0
  • 大話爬蟲(chóng)的基本套路

    摘要:有什么作用通過(guò)有效的爬蟲(chóng)手段批量采集數(shù)據(jù),可以降低人工成本,提高有效數(shù)據(jù)量,給予運(yùn)營(yíng)銷(xiāo)售的數(shù)據(jù)支撐,加快產(chǎn)品發(fā)展。因?yàn)樾畔⑹峭耆_(kāi)的,所以是合法的。 showImg(https://segmentfault.com/img/remote/1460000011359885?w=566&h=316);   什么是爬蟲(chóng)? 網(wǎng)絡(luò)爬蟲(chóng)也叫網(wǎng)絡(luò)蜘蛛,如果把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么蜘蛛就是在...

    Towers 評(píng)論0 收藏0
  • 復(fù)仇者聯(lián)盟誰(shuí)才是絕對(duì) C 位?Python分析9萬(wàn)條數(shù)據(jù)告訴答案

    摘要:數(shù)據(jù)庫(kù)文件已經(jīng)超過(guò)了了。復(fù)聯(lián)從開(kāi)始便是漫威宇宙各路超級(jí)英雄的集結(jié),到現(xiàn)在的第部,更是全英雄的匯聚。所以,滅霸出現(xiàn)的次數(shù)居然高于了鋼鐵俠。情感分析,又稱(chēng)為意見(jiàn)挖掘傾向性分析等。 showImg(https://segmentfault.com/img/remote/1460000019095022); 作者 | 羅昭成責(zé)編 | 唐小引 《復(fù)聯(lián) 4》國(guó)內(nèi)上映第十天,程序員的江湖里開(kāi)始流傳這...

    shiweifu 評(píng)論0 收藏0
  • Python列表和Dictionary簡(jiǎn)介

    摘要:如果沒(méi)有,請(qǐng)記住列表中的第一項(xiàng)是項(xiàng)。通過(guò)練習(xí),您將更好地計(jì)算列表中的項(xiàng)目。例如,要將項(xiàng)添加到我們的水果列表中,我們可以使用名為的方法。通過(guò)這樣做,該項(xiàng)目的值也將被刪除。在中,這意味著使用以及名稱(chēng)和要?jiǎng)h除的項(xiàng)目的名稱(chēng)。 showImg(https://segmentfault.com/img/remote/1460000019177365?w=852&h=479); 來(lái)源 | 愿碼(C...

    dunizb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<