系列文章目录

对英雄联盟比赛预测(一)- 特征分析

对英雄联盟比赛预测(二)- 数据获取api分析

对英雄联盟比赛预测(三)- 数据获取Java实现

对英雄联盟比赛预测(四)- 数据清洗


文章目录

前言

一、数据原型

二、步骤

1. 引入相关依赖

2. 相关实体类

3. 清洗

4. 结果

总结


前言

本文主要对前文获取的数据,做清洗,去除脏数据,并格式化。

文章三中最新代码:https://github.com/majixiang/riotgames-spider ,欢迎大家指正。


一、数据原型

通过前面第三篇文章,介绍从官网获取数据,本人已经获取了26万条数据,也就是13万场比赛,因这些数据都是json格式的,不适合后续处理,所以需要将这些数据合并成csv文件

二、步骤

1. 引入相关依赖

项目使用gradle编译,commons-io用来读写文件,fastjson用来解析json,hutool用来生成csv文件流。

    compileOnly 'org.projectlombok:lombok:1.18.18'implementation 'org.apache.commons:commons-lang3:3.11'implementation 'commons-io:commons-io:2.6'implementation 'com.jayway.jsonpath:json-path:2.4.0'implementation 'com.alibaba:fastjson:1.2.75'implementation 'cn.hutool:hutool-all:5.5.7'

2. 相关实体类

实体类和文章三里一致,并新增一个Game类,用来存放csv的行数据,如下:


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;/*** @author jixiang.ma* @date 2021/2/4 11:39**/
@Getter
@Setter
@ToString
public class Game {private long gameId;private long gameCreation;private int gameDuration;private int queueId;private int mapId;private int seasonId;private int win;private int firstBlood;private int firstTower;private int firstInhibitor;private int firstBaron;private int firstDragon;private int firstRiftHerald;private int t1_towerKills;private int t1_inhibitorKills;private int t1_baronKills;private int t1_dragonKills;private int t1_vilemawKills;private int t1_riftHeraldKills;private int t1_dominionVictoryScore;// 总击杀数private int t1_kills;private int t1_deaths;private int t1_assists;// 整个团队的最大连杀数private int t1_largestKillingSpree;private int t1_largestMultiKill;private int t1_killingSprees;private int t1_longestTimeSpentLiving;//整个团队双杀的次数private int t1_doubleKills;private int t1_tripleKills;private int t1_quadraKills;private int t1_pentaKills;private int t1_unrealKills;// 团队总伤害private int t1_totalDamageDealt;// 魔法伤害private int t1_magicDamageDealt;// 物理伤害private int t1_physicalDamageDealt;// 真实伤害private int t1_trueDamageDealt;// 造成的最大伤害private int t1_largestCriticalStrike;// 对英雄的总伤害private int t1_totalDamageDealtToChampions;private int t1_magicDamageDealtToChampions;private int t1_physicalDamageDealtToChampions;private int t1_trueDamageDealtToChampions;private int t1_totalHeal;private int t1_totalUnitsHealed;private int t1_damageSelfMitigated;private int t1_damageDealtToObjectives;private int t1_damageDealtToTurrets;private int t1_visionScore;private int t1_timeCCingOthers;private int t1_totalDamageTaken;private int t1_magicalDamageTaken;private int t1_physicalDamageTaken;private int t1_trueDamageTaken;private int t1_goldEarned;private int t1_goldSpent;// 补兵数private int t1_totalMinionsKilled;// 野怪数private int t1_neutralMinionsKilled;private int t1_totalTimeCrowdControlDealt;private int t1_champLevel;private int t1_visionWardsBoughtInGame;private int t1_sightWardsBoughtInGame;private int t2_towerKills;private int t2_inhibitorKills;private int t2_baronKills;private int t2_dragonKills;private int t2_vilemawKills;private int t2_riftHeraldKills;private int t2_dominionVictoryScore;// 总击杀数private int t2_kills;private int t2_deaths;private int t2_assists;// 整个团队的最大连杀数private int t2_largestKillingSpree;private int t2_largestMultiKill;private int t2_killingSprees;private int t2_longestTimeSpentLiving;//整个团队双杀的次数private int t2_doubleKills;private int t2_tripleKills;private int t2_quadraKills;private int t2_pentaKills;private int t2_unrealKills;// 团队总伤害private int t2_totalDamageDealt;// 魔法伤害private int t2_magicDamageDealt;// 物理伤害private int t2_physicalDamageDealt;// 真实伤害private int t2_trueDamageDealt;// 造成的最大伤害private int t2_largestCriticalStrike;// 对英雄的总伤害private int t2_totalDamageDealtToChampions;private int t2_magicDamageDealtToChampions;private int t2_physicalDamageDealtToChampions;private int t2_trueDamageDealtToChampions;private int t2_totalHeal;private int t2_totalUnitsHealed;private int t2_damageSelfMitigated;private int t2_damageDealtToObjectives;private int t2_damageDealtToTurrets;private int t2_visionScore;private int t2_timeCCingOthers;private int t2_totalDamageTaken;private int t2_magicalDamageTaken;private int t2_physicalDamageTaken;private int t2_trueDamageTaken;private int t2_goldEarned;private int t2_goldSpent;// 补兵数private int t2_totalMinionsKilled;// 野怪数private int t2_neutralMinionsKilled;private int t2_totalTimeCrowdControlDealt;private int t2_champLevel;private int t2_visionWardsBoughtInGame;private int t2_sightWardsBoughtInGame;}

3. 清洗


import cn.hutool.Hutool;
import cn.hutool.core.text.csv.CsvUtil;
import cn.hutool.core.text.csv.CsvWriter;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;
import com.jayway.jsonpath.JsonPath;
import io.transwarp.entity.Match;
import io.transwarp.entity.MatchDetail;
import io.transwarp.entity.Participants;
import io.transwarp.entity.Win;
import org.apache.commons.io.FileUtils;import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;/*** @author jixiang.ma* @date 2021/2/4 10:15**/
public class DataClean {public static void main(String[] args) throws IOException {// json数据源String jsonPath = "E:\\data\\data\\";File jsonPathFile = new File(jsonPath);if (jsonPathFile.isDirectory()) {File[] files = jsonPathFile.listFiles();// 要输出的csv路径CsvWriter writer = CsvUtil.getWriter(new File("D:/games.csv"), Charset.forName("UTF-8"), true);writer.writeLine("gameId","gameCreation","gameDuration","queueId","mapId","seasonId","win","firstBlood","firstTower","firstInhibitor","firstBaron","firstDragon","firstRiftHerald","t1_towerKills","t1_inhibitorKills","t1_baronKills","t1_dragonKills","t1_riftHeraldKills","t1_dominionVictoryScore","t1_kills","t1_deaths","t1_assists","t1_largestKillingSpree","t1_largestMultiKill","t1_killingSprees","t1_longestTimeSpentLiving","t1_doubleKills","t1_tripleKills","t1_quadraKills","t1_pentaKills","t1_unrealKills","t1_totalDamageDealt","t1_magicDamageDealt","t1_physicalDamageDealt","t1_trueDamageDealt","t1_largestCriticalStrike","t1_totalDamageDealtToChampions","t1_magicDamageDealtToChampions","t1_physicalDamageDealtToChampion","t1_trueDamageDealtToChampions","t1_totalHeal","t1_totalUnitsHealed","t1_damageSelfMitigated","t1_damageDealtToObjectives","t1_damageDealtToTurrets","t1_visionScore","t1_timeCCingOthers","t1_totalDamageTaken","t1_magicalDamageTaken","t1_physicalDamageTaken","t1_trueDamageTaken","t1_goldEarned","t1_goldSpent","t1_totalMinionsKilled","t1_neutralMinionsKilled","t1_totalTimeCrowdControlDealt","t1_champLevel","t1_visionWardsBoughtInGame","t1_sightWardsBoughtInGame","t2_towerKills","t2_inhibitorKills","t2_baronKills","t2_dragonKills","t2_riftHeraldKills","t2_dominionVictoryScore","t2_kills","t2_deaths","t2_assists","t2_largestKillingSpree","t2_largestMultiKill","t2_killingSprees","t2_longestTimeSpentLiving","t2_doubleKills","t2_tripleKills","t2_quadraKills","t2_pentaKills","t2_unrealKills","t2_totalDamageDealt","t2_magicDamageDealt","t2_physicalDamageDealt","t2_trueDamageDealt","t2_largestCriticalStrike","t2_totalDamageDealtToChampions","t2_magicDamageDealtToChampions","t2_physicalDamageDealtToChampions","t2_trueDamageDealtToChampions","t2_totalHeal","t2_totalUnitsHealed","t2_damageSelfMitigated","t2_damageDealtToObjectives","t2_damageDealtToTurrets","t2_visionScore","t2_timeCCingOthers","t2_totalDamageTaken","t2_magicalDamageTaken","t2_physicalDamageTaken","t2_trueDamageTaken","t2_goldEarned","t2_goldSpent","t2_totalMinionsKilled","t2_neutralMinionsKilled","t2_totalTimeCrowdControlDealt","t2_champLevel","t2_visionWardsBoughtInGame","t2_sightWardsBoughtInGame");for (File file : files) {if (file.getName().contains("detail")) {System.out.println("current file is : " + file.getName());String data = FileUtils.readFileToString(file, Charset.forName("UTF-8"));MatchDetail matchDetail = JSONObject.toJavaObject(JSONObject.parseObject(data), MatchDetail.class);if(null == matchDetail.getGameId()) {continue;}writer.writeLine(matchDetail.getGameId().toString(),matchDetail.getGameCreation().toString(),matchDetail.getGameDuration().toString(),matchDetail.getQueueId().toString(),matchDetail.getMapId().toString(),matchDetail.getSeasonId().toString(),getWin(matchDetail),getFirstBlood(matchDetail),getFirstTower(matchDetail),getFirstInhibitor(matchDetail),getFirstBaron(matchDetail),getFirstDragon(matchDetail),getFirstRiftHerald(matchDetail),getTowerKills(matchDetail, 1),getInhibitorKills(matchDetail, 1),getBaronKills(matchDetail, 1),getDragonKills(matchDetail, 1),getRiftHeraldKills(matchDetail, 1),getDominionVictoryScore(matchDetail, 1),getKills(matchDetail, 1),getDeaths(matchDetail, 1),getAssists(matchDetail, 1),getLargestKillingSpree(matchDetail, 1),getLargestMultiKill(matchDetail, 1),getKillSprees(matchDetail, 1),getLongestTimeSpentLiving(matchDetail, 1),getDoubleKills(matchDetail, 1),getTripleKills(matchDetail, 1),getQuadraKills(matchDetail, 1),getPentaKills(matchDetail, 1),getTotalDamageDealt(matchDetail, 1),getMagicDamageDealt(matchDetail, 1),getPhysicalDamageDealt(matchDetail, 1),getTrueDamageDealt(matchDetail, 1),getLargestCriticalStrike(matchDetail, 1),getTotalDamageDealtToChampions(matchDetail, 1),getMagicDamageDealtToChampions(matchDetail, 1),getPhysicalDamageDealtToChampions(matchDetail, 1),getTrueDamageDealtToChampions(matchDetail, 1),getTotalHeal(matchDetail, 1),getTotalUnitsHealed(matchDetail, 1),getDamageSelfMitigated(matchDetail, 1),getDamageDealtToObjectives(matchDetail, 1),getDamageDealtToTurrets(matchDetail, 1),getVisionScore(matchDetail, 1),getTimeCCingOthers(matchDetail, 1),getTotalDamageTaken(matchDetail, 1),getMagicalDamageTaken(matchDetail, 1),getPhysicalDamageTaken(matchDetail, 1),getTrueDamageTaken(matchDetail, 1),getGoldEarned(matchDetail, 1),getGoldSpent(matchDetail, 1),getTotalMinionsKilled(matchDetail, 1),getNeutralMinionsKilled(matchDetail, 1),getTotalTimeCrowdControlDealt(matchDetail, 1),getChampLevel(matchDetail, 1),getVisionWardsBoughtInGame(matchDetail, 1),getSightWardsBoughtInGame(matchDetail, 1),getTowerKills(matchDetail, 2),getInhibitorKills(matchDetail, 2),getBaronKills(matchDetail, 2),getDragonKills(matchDetail, 2),getRiftHeraldKills(matchDetail, 2),getDominionVictoryScore(matchDetail, 2),getKills(matchDetail, 2),getDeaths(matchDetail, 2),getAssists(matchDetail, 2),getLargestKillingSpree(matchDetail, 2),getLargestMultiKill(matchDetail, 2),getKillSprees(matchDetail, 2),getLongestTimeSpentLiving(matchDetail, 2),getDoubleKills(matchDetail, 2),getTripleKills(matchDetail, 2),getQuadraKills(matchDetail, 2),getPentaKills(matchDetail, 2),getTotalDamageDealt(matchDetail, 2),getMagicDamageDealt(matchDetail, 2),getPhysicalDamageDealt(matchDetail, 2),getTrueDamageDealt(matchDetail, 2),getLargestCriticalStrike(matchDetail, 2),getTotalDamageDealtToChampions(matchDetail, 2),getMagicDamageDealtToChampions(matchDetail, 2),getPhysicalDamageDealtToChampions(matchDetail, 2),getTrueDamageDealtToChampions(matchDetail, 2),getTotalHeal(matchDetail, 2),getTotalUnitsHealed(matchDetail, 2),getDamageSelfMitigated(matchDetail, 2),getDamageDealtToObjectives(matchDetail, 2),getDamageDealtToTurrets(matchDetail, 2),getVisionScore(matchDetail, 2),getTimeCCingOthers(matchDetail, 2),getTotalDamageTaken(matchDetail, 2),getMagicalDamageTaken(matchDetail, 2),getPhysicalDamageTaken(matchDetail, 2),getTrueDamageTaken(matchDetail, 2),getGoldEarned(matchDetail, 2),getGoldSpent(matchDetail, 2),getTotalMinionsKilled(matchDetail, 2),getNeutralMinionsKilled(matchDetail, 2),getTotalTimeCrowdControlDealt(matchDetail, 2),getChampLevel(matchDetail, 2),getVisionWardsBoughtInGame(matchDetail, 2),getSightWardsBoughtInGame(matchDetail, 2));}}}}private static String getWin(MatchDetail matchDetail) {return Win.Win.equals(matchDetail.getTeams().get(0).getWin()) ? "1" : "2";}private static String getFirstBlood(MatchDetail matchDetail) {return matchDetail.getTeams().get(0).getFirstBlood() ? "1" : "2";}private static String getFirstTower(MatchDetail matchDetail) {return matchDetail.getTeams().get(0).getFirstTower() ? "1" : "2";}private static String getFirstInhibitor(MatchDetail matchDetail) {return matchDetail.getTeams().get(0).getFirstInhibitor() ? "1" : "2";}private static String getFirstBaron(MatchDetail matchDetail) {return matchDetail.getTeams().get(0).getFirstBaron() ? "1" : "2";}private static String getFirstDragon(MatchDetail matchDetail) {return matchDetail.getTeams().get(0).getFirstDragon() ? "1" : "2";}private static String getFirstRiftHerald(MatchDetail matchDetail) {return matchDetail.getTeams().get(0).getFirstRiftHerald() ? "1" : "2";}private static String getTowerKills(MatchDetail matchDetail, int team) {return matchDetail.getTeams().get(team - 1).getTowerKills() + "";}private static String getInhibitorKills(MatchDetail matchDetail, int team) {return matchDetail.getTeams().get(team - 1).getTowerKills() + "";}private static String getBaronKills(MatchDetail matchDetail, int team) {return matchDetail.getTeams().get(team - 1).getBaronKills() + "";}private static String getDragonKills(MatchDetail matchDetail, int team) {return matchDetail.getTeams().get(team - 1).getDragonKills() + "";}private static String getRiftHeraldKills(MatchDetail matchDetail, int team) {return matchDetail.getTeams().get(team - 1).getRiftHeraldKills() + "";}private static String getDominionVictoryScore(MatchDetail matchDetail, int team) {return matchDetail.getTeams().get(team - 1).getDominionVictoryScore() + "";}private static String getKills(MatchDetail matchDetail, int team) {int totalKills = filter(matchDetail, team).mapToInt(p -> p.getStats().getKills()).sum();return totalKills + "";}private static String getDeaths(MatchDetail matchDetail, int team) {int totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getDeaths()).sum();return totalDeaths + "";}private static String getAssists(MatchDetail matchDetail, int team) {int totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getAssists()).sum();return totalDeaths + "";}private static String getLargestKillingSpree(MatchDetail matchDetail, int team) {int totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getLargestKillingSpree()).max().orElse(0);return totalDeaths + "";}private static String getLargestMultiKill(MatchDetail matchDetail, int team) {int totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getLargestMultiKill()).max().orElse(0);return totalDeaths + "";}private static String getKillSprees(MatchDetail matchDetail, int team) {int totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getKillingSprees()).max().orElse(0);return totalDeaths + "";}private static String getLongestTimeSpentLiving(MatchDetail matchDetail, int team) {int totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getLongestTimeSpentLiving()).max().orElse(0);return totalDeaths + "";}private static String getDoubleKills(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getDoubleKills()).sum();return totalDeaths + "";}private static String getTripleKills(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTripleKills()).sum();return totalDeaths + "";}private static String getQuadraKills(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTripleKills()).sum();return totalDeaths + "";}private static String getPentaKills(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getPentaKills()).sum();return totalDeaths + "";}private static String getTotalDamageDealt(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTotalDamageDealt()).sum();return totalDeaths + "";}private static String getMagicDamageDealt(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getMagicDamageDealt()).sum();return totalDeaths + "";}private static String getPhysicalDamageDealt(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getPhysicalDamageDealt()).sum();return totalDeaths + "";}private static String getTrueDamageDealt(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTrueDamageDealt()).sum();return totalDeaths + "";}private static String getLargestCriticalStrike (MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getLargestCriticalStrike()).sum();return totalDeaths + "";}private static String getTotalDamageDealtToChampions(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTotalDamageDealtToChampions()).sum();return totalDeaths + "";}private static String getMagicDamageDealtToChampions(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getMagicDamageDealtToChampions()).sum();return totalDeaths + "";}private static String getPhysicalDamageDealtToChampions(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getPhysicalDamageDealtToChampions()).sum();return totalDeaths + "";}private static String getTrueDamageDealtToChampions (MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTrueDamageDealtToChampions()).sum();return totalDeaths + "";}private static String getTotalHeal(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTotalHeal()).sum();return totalDeaths + "";}private static String getTotalUnitsHealed(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTotalUnitsHealed()).sum();return totalDeaths + "";}private static String getDamageSelfMitigated (MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getDamageSelfMitigated()).sum();return totalDeaths + "";}private static String getDamageDealtToObjectives(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getDamageDealtToObjectives()).sum();return totalDeaths + "";}private static String getDamageDealtToTurrets (MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getDamageDealtToTurrets()).sum();return totalDeaths + "";}private static String getVisionScore(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getVisionScore()).sum();return totalDeaths + "";}private static String getTimeCCingOthers(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTimeCCingOthers()).sum();return totalDeaths + "";}private static String getTotalDamageTaken(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTotalDamageTaken()).sum();return totalDeaths + "";}private static String getMagicalDamageTaken(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getMagicalDamageTaken()).sum();return totalDeaths + "";}private static String getPhysicalDamageTaken(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getPhysicalDamageTaken()).sum();return totalDeaths + "";}private static String getTrueDamageTaken(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTrueDamageTaken()).sum();return totalDeaths + "";}private static String getGoldEarned(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getGoldEarned()).sum();return totalDeaths + "";}private static String getGoldSpent(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getGoldSpent()).sum();return totalDeaths + "";}private static String getTotalMinionsKilled(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTotalMinionsKilled()).sum();return totalDeaths + "";}private static String getNeutralMinionsKilled(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getNeutralMinionsKilled()).sum();return totalDeaths + "";}private static String getTotalTimeCrowdControlDealt(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getTotalTimeCrowdControlDealt()).sum();return totalDeaths + "";}private static String getChampLevel (MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getChampLevel()).sum();return totalDeaths + "";}private static String getVisionWardsBoughtInGame(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getVisionWardsBoughtInGame()).sum();return totalDeaths + "";}private static String getSightWardsBoughtInGame(MatchDetail matchDetail, int team) {long totalDeaths = filter(matchDetail, team).mapToInt(p -> p.getStats().getSightWardsBoughtInGame()).sum();return totalDeaths + "";}private static Stream<Participants> filter(MatchDetail matchDetail, int team) {return matchDetail.getParticipants().stream().filter(participants -> {if (participants.getTeamId() == (team * 100)) {return true;} else {return false;}});}
}

4. 结果

经过清洗后,最终生成了一个116186行数据的csv文件


总结

本文主要讲述从前文获得的json文件,清洗后转换成方便后续使用的csv文件。

下一节将介绍预测中的特征工程。

对英雄联盟比赛预测(四)- 数据清洗相关推荐

  1. 对英雄联盟比赛预测(三)- 数据获取Java实现

    系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 文章目录 系列文章目录 声明 前言 一.基本框架 ...

  2. 对英雄联盟比赛预测(一)- 特征分析

    系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 这里写目录标题 系列文章目录 我们先来分析下影响比 ...

  3. 对英雄联盟比赛预测(二)- 数据获取api分析

    系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 文章目录 系列文章目录 声明 前言 一.数据源分析 ...

  4. 分析5万多场英雄联盟比赛,教你如何轻松用python预测胜负

    CDA数据分析师 出品   作者:真达.Mika 数据:真达   后期:Mika [导读] 今天教大家用Python预测英雄联盟比赛胜负.Show me data,用数据说话!今天我们聊一聊 pyth ...

  5. 飞桨学习赛:英雄联盟大师预测2023年2月85.365分方案

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 飞桨学习赛:英雄联盟大师预测2023年2月85.365分方案 比赛链接 - 飞桨学习赛:英雄联盟大 ...

  6. 我的飞桨学习赛:英雄联盟大师预测

    我的飞浆学习赛:英雄联盟大师预测 原始代码 数据集 评分结果 改进方式 构建更多的前馈神经网络 修改模型的超参数 学习率 batch_size和epoch 进行特征选择 改进的结果 目前正在改进的方法 ...

  7. 基于LightGBM分类实现英雄联盟数据预测(一)

    基于LightGBM分类实现英雄联盟数据预测(一) 文章目录 基于LightGBM分类实现英雄联盟数据预测(一) 一.LightGBM的介绍 二.操作步骤 Step1:库函数导入 Step2 .读入数 ...

  8. 基于LightGBM分类实现英雄联盟数据预测(二)

    基于LightGBM分类实现英雄联盟数据预测(二) 这里写目录标题 基于LightGBM分类实现英雄联盟数据预测(二) Step5:利用 LightGBM 进行训练与预测 plt.figure(fig ...

  9. 吃鸡排名预测挑战赛 空气质量预测 英雄联盟大师预测 手机行为识别 员工离职预测 猫十二分类体验赛

    1.吃鸡排名预测挑战赛 https://aistudio.baidu.com/aistudio/competition/detail/155/0/introduction 2.空气质量预测https: ...

最新文章

  1. kotlin与java对比
  2. 数据存储方案-闭包表
  3. 修改Tomcat7的/webapps/ROOT发布路径
  4. adb logcat 保存_保存的logcat在Android设备上的文本文件
  5. 数据之路 - Python爬虫 - 数据存储
  6. 计算机网络实验报告西南科技大学,西南科技大学计算机网络-实验二.docx
  7. 网络 应用层 | HTTP的认识及实现(模拟实现一个简单的服务器)
  8. Linked List Cycle | ||
  9. 10录屏电流声_到底有没有完全免费的电脑+手机(安卓)录屏神器推荐,要能录制系统内部声音+麦克风的?...
  10. IDC 监控技术介绍
  11. iocomp iPlot使用说明4 通道对象
  12. 录屏软件推荐:bilibili哔哩哔哩直播姬录屏软件下载使用指南
  13. 微软win2008停止服务器,微软停止技术支持Windows Server 2008/2008 R2
  14. 如何清理浏览器缓存快捷键
  15. 国产ADAS“再”突围
  16. Cyclone IV代FPGA的可编程逻辑资源
  17. Codeforces - 1152B - Neko Performs Cat Furrier Transform
  18. Decision Model and Notation (DMN)
  19. 怎么防止解决百度转码问题
  20. @Transactional注解回滚(事物)

热门文章

  1. 阿拉丁和飞毯(唯一分解定理&因数个数求和+素筛)
  2. mysql数据库-DDL语言
  3. 若依微服务版(ruoyi-cloud)使用记录
  4. fifa足球世界服务器不稳定,FIFA足球世界卡顿怎么办?卡顿原因及解决办法介绍
  5. 企业网络中一个非常诡异的部分网页打不开的问题
  6. springboot集成rabbitmq死信队列的延时队列使用
  7. zabbix 6.2安装
  8. 波兰表示法与逆波兰表示法
  9. 如何建立编程思想和提高编程思想
  10. 2022年软件设计师考试知识点:图