{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Analyzing Ice Dance Scoring by Team and Judge Country\n", "\n", "This analysis builds off BuzzFeed News' prior work analzying figure skating scores, which you can find [here](../README.md). The code below calculates the percentage of times judges from any given country have scored each ice dance team above or below the average of the other judges for that performance at 17 high-level competitions between Oct. 2016 and Dec. 2017." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load Judge and Score Data\n", "\n", "*Note:* This section is a reproduction of the setup steps in the [`home-country-preference` notebook](./home-country-preference.ipynb). Please see that notebook for more details about the process." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "all_judges = pd.read_csv(\"../data/processed/judges.csv\")\n", "judge_nat = pd.read_csv(\"../data/processed/judge-country.csv\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "judges = pd.merge(\n", " all_judges,\n", " judge_nat,\n", " on=\"clean_judge_name\"\n", ")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def clean_judge_number(role):\n", " return \"J\" + role.strip()[-1]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "judges[\"clean_role\"] = judges[\"role\"].apply(clean_judge_number)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load score data" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1,726 performances\n", "23,932 aspects\n", "214,531 scores\n" ] } ], "source": [ "performances = pd.read_csv(\"../data/raw/performances.csv\")\n", "print(\"{:,} performances\".format(len(performances)))\n", "\n", "aspects = pd.read_csv(\"../data/raw/judged-aspects.csv\")\n", "print(\"{:,} aspects\".format(len(aspects)))\n", "\n", "scores = pd.read_csv(\"../data/raw/judge-scores.csv\")\n", "print(\"{:,} scores\".format(len(scores)))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "judge_goe = pd.read_csv(\"../data/processed/judge-goe.csv\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "scores_with_context = scores.pipe(\n", " pd.merge,\n", " aspects,\n", " on = \"aspect_id\",\n", " how = \"left\"\n", ").pipe(\n", " pd.merge,\n", " performances,\n", " on = \"performance_id\",\n", " how = \"left\"\n", ").pipe(\n", " pd.merge,\n", " judge_goe,\n", " on = [ \"aspect_id\", \"judge\" ],\n", " how = \"left\"\n", ").assign(\n", " is_junior = lambda x: x[\"program\"].str.contains(\"JUNIOR\"),\n", " program_type = lambda x: x[\"program\"]\\\n", " .apply(lambda x: \"short\" if \"SHORT\" in x else \"free\")\n", ")" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "assert len(scores) == len(scores_with_context)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set Up Data for Analysis" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "392" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "senior_scores = scores_with_context[\n", " (scores_with_context[\"is_junior\"] == False) &\n", " # Because we are only analyzing Ice Dance in this notebook\n", " # we limit the scope of the scoring data to those programs\n", " (scores_with_context[\"program\"].str.contains(\"ICE DANCE\"))\n", "].copy()\n", "\n", "senior_scores[\"performance_id\"].nunique()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def total_points(row):\n", " if row[\"section\"] == \"elements\":\n", " return round(row[\"base_value\"] + row[\"judge_goe\"], 2)\n", " \n", " elif row[\"section\"] == \"components\":\n", " return round(row[\"factor\"] * row[\"score\"], 2)\n", " \n", " else:\n", " print(\"Unknown section: {}\".format(row[\"section\"]))\n", " return None" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "senior_scores[\"total_points\"] = senior_scores.apply(total_points, axis=1)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "perf_judge_grps = senior_scores[\n", " ~senior_scores[\"total_points\"].isnull()\n", "].groupby([\"performance_id\", \"judge\"])" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
performance_idjudgecompetitiondeductionsnamenationpointsprogramprogram_typefinal_score
000693b66b5J1ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA76.3ICE DANCE SHORT DANCEshort76.3
100693b66b5J2ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA76.6ICE DANCE SHORT DANCEshort76.6
200693b66b5J3ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA76.0ICE DANCE SHORT DANCEshort76.0
300693b66b5J4ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA77.9ICE DANCE SHORT DANCEshort77.9
400693b66b5J5ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA74.5ICE DANCE SHORT DANCEshort74.5
\n", "
" ], "text/plain": [ " performance_id judge competition deductions \\\n", "0 00693b66b5 J1 ISU Four Continents Championships 2017 0.0 \n", "1 00693b66b5 J2 ISU Four Continents Championships 2017 0.0 \n", "2 00693b66b5 J3 ISU Four Continents Championships 2017 0.0 \n", "3 00693b66b5 J4 ISU Four Continents Championships 2017 0.0 \n", "4 00693b66b5 J5 ISU Four Continents Championships 2017 0.0 \n", "\n", " name nation points program \\\n", "0 Maia SHIBUTANI / Alex SHIBUTANI USA 76.3 ICE DANCE SHORT DANCE \n", "1 Maia SHIBUTANI / Alex SHIBUTANI USA 76.6 ICE DANCE SHORT DANCE \n", "2 Maia SHIBUTANI / Alex SHIBUTANI USA 76.0 ICE DANCE SHORT DANCE \n", "3 Maia SHIBUTANI / Alex SHIBUTANI USA 77.9 ICE DANCE SHORT DANCE \n", "4 Maia SHIBUTANI / Alex SHIBUTANI USA 74.5 ICE DANCE SHORT DANCE \n", "\n", " program_type final_score \n", "0 short 76.3 \n", "1 short 76.6 \n", "2 short 76.0 \n", "3 short 77.9 \n", "4 short 74.5 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "points_by_judge = pd.DataFrame({\n", " \"points\": perf_judge_grps[\"total_points\"].sum(),\n", " \"deductions\": perf_judge_grps[\"total_deductions\"].first(),\n", " \"name\": perf_judge_grps[\"name\"].first(),\n", " \"nation\": perf_judge_grps[\"nation\"].first(),\n", " \"program\": perf_judge_grps[\"program\"].first(),\n", " \"program_type\": perf_judge_grps[\"program_type\"].first(),\n", " \"competition\": perf_judge_grps[\"competition\"].first()\n", "}).reset_index()\n", "points_by_judge[\"final_score\"] = points_by_judge[\"points\"] - points_by_judge[\"deductions\"]\n", "\n", "points_by_judge.head()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "perf_grps = points_by_judge.groupby([\"performance_id\"])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "perfs = pd.DataFrame({\n", " \"total_points\": perf_grps[\"final_score\"].sum(),\n", " \"total_judges\": perf_grps.size()\n", "}).reset_index()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
performance_idjudgecompetitiondeductionsnamenationpointsprogramprogram_typefinal_scoretotal_judgestotal_points
000693b66b5J1ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA76.3ICE DANCE SHORT DANCEshort76.39689.2
100693b66b5J2ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA76.6ICE DANCE SHORT DANCEshort76.69689.2
200693b66b5J3ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA76.0ICE DANCE SHORT DANCEshort76.09689.2
300693b66b5J4ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA77.9ICE DANCE SHORT DANCEshort77.99689.2
400693b66b5J5ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA74.5ICE DANCE SHORT DANCEshort74.59689.2
\n", "
" ], "text/plain": [ " performance_id judge competition deductions \\\n", "0 00693b66b5 J1 ISU Four Continents Championships 2017 0.0 \n", "1 00693b66b5 J2 ISU Four Continents Championships 2017 0.0 \n", "2 00693b66b5 J3 ISU Four Continents Championships 2017 0.0 \n", "3 00693b66b5 J4 ISU Four Continents Championships 2017 0.0 \n", "4 00693b66b5 J5 ISU Four Continents Championships 2017 0.0 \n", "\n", " name nation points program \\\n", "0 Maia SHIBUTANI / Alex SHIBUTANI USA 76.3 ICE DANCE SHORT DANCE \n", "1 Maia SHIBUTANI / Alex SHIBUTANI USA 76.6 ICE DANCE SHORT DANCE \n", "2 Maia SHIBUTANI / Alex SHIBUTANI USA 76.0 ICE DANCE SHORT DANCE \n", "3 Maia SHIBUTANI / Alex SHIBUTANI USA 77.9 ICE DANCE SHORT DANCE \n", "4 Maia SHIBUTANI / Alex SHIBUTANI USA 74.5 ICE DANCE SHORT DANCE \n", "\n", " program_type final_score total_judges total_points \n", "0 short 76.3 9 689.2 \n", "1 short 76.6 9 689.2 \n", "2 short 76.0 9 689.2 \n", "3 short 77.9 9 689.2 \n", "4 short 74.5 9 689.2 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "points_with_comparison = pd.merge(\n", " points_by_judge,\n", " perfs,\n", " how = \"left\",\n", " on = \"performance_id\"\n", ")\n", "\n", "points_with_comparison.head()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "points_with_comparison[\"avg_without_judge\"] = points_with_comparison\\\n", " .apply(lambda x: (x[\"total_points\"] - x[\"final_score\"]) / (x[\"total_judges\"] - 1), axis=1)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "points_with_comparison[\"points_vs_avg\"] = points_with_comparison[\"final_score\"] - \\\n", " points_with_comparison[\"avg_without_judge\"]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
performance_idjudgecompetitiondeductionsnamenationpointsprogramprogram_typefinal_scoretotal_judgestotal_pointsavg_without_judgepoints_vs_avgsegment_categoryclean_judge_namejudge_countryclean_role
000693b66b5J1ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA76.3ICE DANCE SHORT DANCEshort76.39689.276.6125-0.3125Short Dance|Ice DanceTianyi ZHANGCHNJ1
100693b66b5J2ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA76.6ICE DANCE SHORT DANCEshort76.69689.276.57500.0250Short Dance|Ice DanceMarta OLOZAGARREESPJ2
200693b66b5J3ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA76.0ICE DANCE SHORT DANCEshort76.09689.276.6500-0.6500Short Dance|Ice DanceMayumi KATOJPNJ3
300693b66b5J4ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA77.9ICE DANCE SHORT DANCEshort77.99689.276.41251.4875Short Dance|Ice DanceMark STORTONAUSJ4
400693b66b5J5ISU Four Continents Championships 20170.0Maia SHIBUTANI / Alex SHIBUTANIUSA74.5ICE DANCE SHORT DANCEshort74.59689.276.8375-2.3375Short Dance|Ice DanceAndre-Marc ALLAINCANJ5
\n", "
" ], "text/plain": [ " performance_id judge competition deductions \\\n", "0 00693b66b5 J1 ISU Four Continents Championships 2017 0.0 \n", "1 00693b66b5 J2 ISU Four Continents Championships 2017 0.0 \n", "2 00693b66b5 J3 ISU Four Continents Championships 2017 0.0 \n", "3 00693b66b5 J4 ISU Four Continents Championships 2017 0.0 \n", "4 00693b66b5 J5 ISU Four Continents Championships 2017 0.0 \n", "\n", " name nation points program \\\n", "0 Maia SHIBUTANI / Alex SHIBUTANI USA 76.3 ICE DANCE SHORT DANCE \n", "1 Maia SHIBUTANI / Alex SHIBUTANI USA 76.6 ICE DANCE SHORT DANCE \n", "2 Maia SHIBUTANI / Alex SHIBUTANI USA 76.0 ICE DANCE SHORT DANCE \n", "3 Maia SHIBUTANI / Alex SHIBUTANI USA 77.9 ICE DANCE SHORT DANCE \n", "4 Maia SHIBUTANI / Alex SHIBUTANI USA 74.5 ICE DANCE SHORT DANCE \n", "\n", " program_type final_score total_judges total_points avg_without_judge \\\n", "0 short 76.3 9 689.2 76.6125 \n", "1 short 76.6 9 689.2 76.5750 \n", "2 short 76.0 9 689.2 76.6500 \n", "3 short 77.9 9 689.2 76.4125 \n", "4 short 74.5 9 689.2 76.8375 \n", "\n", " points_vs_avg segment_category clean_judge_name judge_country \\\n", "0 -0.3125 Short Dance|Ice Dance Tianyi ZHANG CHN \n", "1 0.0250 Short Dance|Ice Dance Marta OLOZAGARRE ESP \n", "2 -0.6500 Short Dance|Ice Dance Mayumi KATO JPN \n", "3 1.4875 Short Dance|Ice Dance Mark STORTON AUS \n", "4 -2.3375 Short Dance|Ice Dance Andre-Marc ALLAIN CAN \n", "\n", " clean_role \n", "0 J1 \n", "1 J2 \n", "2 J3 \n", "3 J4 \n", "4 J5 " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "judge_points = pd.merge(\n", " points_with_comparison,\n", " judges[[\n", " \"program\", \"competition\", \"segment_category\",\n", " \"clean_judge_name\", \"judge_country\", \"clean_role\"\n", " ]],\n", " left_on=[ \"program\", \"competition\", \"judge\" ],\n", " right_on=[ \"program\", \"competition\", \"clean_role\" ],\n", " how=\"left\"\n", ").dropna(subset=[\"judge_country\"])\n", "\n", "judge_points.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analyze Ice Dance Competition" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def compare_scores_by_judge_country(skater_name):\n", " \n", " skater_scores = judge_points[\n", " judge_points[\"name\"] == skater_name\n", " ]\n", " \n", " country_grps = skater_scores.groupby(\"judge_country\")\n", " \n", " country_df = pd.DataFrame({\n", " \"scores_above_average\": country_grps.apply(lambda x: len(x[x[\"points_vs_avg\"] > 0])),\n", " \"scores_below_average\": country_grps.apply(lambda x: len(x[x[\"points_vs_avg\"] < 0])),\n", " \"scores_exactly_average\": country_grps.apply(lambda x: len(x[x[\"points_vs_avg\"] == 0])),\n", " \"total_scores\": country_grps.size(),\n", " \"pct_above_average\": round(country_grps.apply(lambda x: len(x[x[\"points_vs_avg\"] > 0])) / \\\n", " country_grps.size() * 100, 2),\n", " \"pct_below_average\": round(country_grps.apply(lambda x: len(x[x[\"points_vs_avg\"] < 0])) / \\\n", " country_grps.size() * 100, 2)\n", " })\n", " \n", " return country_df[\n", " country_df[\"total_scores\"] >= 5\n", " ].sort_values(\"pct_above_average\", ascending=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Gold Medal Contenders" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Results for Virtue/Moir (Canada)**" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pct_above_averagepct_below_averagescores_above_averagescores_below_averagescores_exactly_averagetotal_scores
judge_country
CAN100.000.00160016
JPN83.3316.67102012
KOR83.3316.675106
GER71.4328.575207
CHN70.0030.0073010
RUS56.2543.7597016
AUS50.0050.003306
ESP30.0070.0037010
ITA25.0066.6738112
USA25.0075.00412016
FRA11.1188.891809
\n", "
" ], "text/plain": [ " pct_above_average pct_below_average scores_above_average \\\n", "judge_country \n", "CAN 100.00 0.00 16 \n", "JPN 83.33 16.67 10 \n", "KOR 83.33 16.67 5 \n", "GER 71.43 28.57 5 \n", "CHN 70.00 30.00 7 \n", "RUS 56.25 43.75 9 \n", "AUS 50.00 50.00 3 \n", "ESP 30.00 70.00 3 \n", "ITA 25.00 66.67 3 \n", "USA 25.00 75.00 4 \n", "FRA 11.11 88.89 1 \n", "\n", " scores_below_average scores_exactly_average total_scores \n", "judge_country \n", "CAN 0 0 16 \n", "JPN 2 0 12 \n", "KOR 1 0 6 \n", "GER 2 0 7 \n", "CHN 3 0 10 \n", "RUS 7 0 16 \n", "AUS 3 0 6 \n", "ESP 7 0 10 \n", "ITA 8 1 12 \n", "USA 12 0 16 \n", "FRA 8 0 9 " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compare_scores_by_judge_country(\"Tessa VIRTUE / Scott MOIR\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Results for Papadakis/Cizeron (France)**" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pct_above_averagepct_below_averagescores_above_averagescores_below_averagescores_exactly_averagetotal_scores
judge_country
FRA92.317.69121013
USA85.7114.29122014
CHN83.3316.675106
ESP71.4328.575207
ISR66.6733.334206
ITA50.0050.0055010
JPN50.0050.003306
KOR50.0050.003306
GER42.8657.143407
RUS28.5771.43410014
CZE22.2277.782709
CAN21.4378.57311014
POL20.0080.001405
UKR0.00100.000505
\n", "
" ], "text/plain": [ " pct_above_average pct_below_average scores_above_average \\\n", "judge_country \n", "FRA 92.31 7.69 12 \n", "USA 85.71 14.29 12 \n", "CHN 83.33 16.67 5 \n", "ESP 71.43 28.57 5 \n", "ISR 66.67 33.33 4 \n", "ITA 50.00 50.00 5 \n", "JPN 50.00 50.00 3 \n", "KOR 50.00 50.00 3 \n", "GER 42.86 57.14 3 \n", "RUS 28.57 71.43 4 \n", "CZE 22.22 77.78 2 \n", "CAN 21.43 78.57 3 \n", "POL 20.00 80.00 1 \n", "UKR 0.00 100.00 0 \n", "\n", " scores_below_average scores_exactly_average total_scores \n", "judge_country \n", "FRA 1 0 13 \n", "USA 2 0 14 \n", "CHN 1 0 6 \n", "ESP 2 0 7 \n", "ISR 2 0 6 \n", "ITA 5 0 10 \n", "JPN 3 0 6 \n", "KOR 3 0 6 \n", "GER 4 0 7 \n", "RUS 10 0 14 \n", "CZE 7 0 9 \n", "CAN 11 0 14 \n", "POL 4 0 5 \n", "UKR 5 0 5 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compare_scores_by_judge_country(\"Gabriella PAPADAKIS / Guillaume CIZERON\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Comparing results for the two teams**\n", "\n", "(Includes only countries whose judges scored, in the dataset, at least five performances of each team.)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pct_above_average_canadapct_above_average_france
judge_country
CAN100.0021.43
JPN83.3350.00
KOR83.3350.00
GER71.4342.86
CHN70.0083.33
RUS56.2528.57
ESP30.0071.43
ITA25.0050.00
USA25.0085.71
FRA11.1192.31
\n", "
" ], "text/plain": [ " pct_above_average_canada pct_above_average_france\n", "judge_country \n", "CAN 100.00 21.43\n", "JPN 83.33 50.00\n", "KOR 83.33 50.00\n", "GER 71.43 42.86\n", "CHN 70.00 83.33\n", "RUS 56.25 28.57\n", "ESP 30.00 71.43\n", "ITA 25.00 50.00\n", "USA 25.00 85.71\n", "FRA 11.11 92.31" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compare_scores_by_judge_country(\"Tessa VIRTUE / Scott MOIR\")\\\n", " .join(\n", " compare_scores_by_judge_country(\"Gabriella PAPADAKIS / Guillaume CIZERON\"), \n", " lsuffix=\"_canada\", \n", " rsuffix=\"_france\")\\\n", " .dropna()[[\"pct_above_average_canada\", \"pct_above_average_france\"]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bronze Medal Contenders" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Results for Bobrova/Soloviev (Russia)**" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pct_above_averagepct_below_averagescores_above_averagescores_below_averagescores_exactly_averagetotal_scores
judge_country
RUS100.000.00120012
TUR100.000.009009
ESP71.4328.575207
ISR62.5037.505308
CZE57.1442.864307
CAN50.0050.0066012
KOR50.0050.003306
FRA28.5771.432507
ITA20.0080.0028010
USA16.6783.33210012
\n", "
" ], "text/plain": [ " pct_above_average pct_below_average scores_above_average \\\n", "judge_country \n", "RUS 100.00 0.00 12 \n", "TUR 100.00 0.00 9 \n", "ESP 71.43 28.57 5 \n", "ISR 62.50 37.50 5 \n", "CZE 57.14 42.86 4 \n", "CAN 50.00 50.00 6 \n", "KOR 50.00 50.00 3 \n", "FRA 28.57 71.43 2 \n", "ITA 20.00 80.00 2 \n", "USA 16.67 83.33 2 \n", "\n", " scores_below_average scores_exactly_average total_scores \n", "judge_country \n", "RUS 0 0 12 \n", "TUR 0 0 9 \n", "ESP 2 0 7 \n", "ISR 3 0 8 \n", "CZE 3 0 7 \n", "CAN 6 0 12 \n", "KOR 3 0 6 \n", "FRA 5 0 7 \n", "ITA 8 0 10 \n", "USA 10 0 12 " ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compare_scores_by_judge_country(\"Ekaterina BOBROVA / Dmitri SOLOVIEV\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Results for Chock/Bates (USA)**" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pct_above_averagepct_below_averagescores_above_averagescores_below_averagescores_exactly_averagetotal_scores
judge_country
USA100.000.00160016
JPN87.5012.507108
CHN80.0020.0082010
ESP70.0030.0073010
FRA55.5644.445409
KOR50.0050.004408
GER40.0060.002305
ISR40.0060.002305
CZE25.0075.002608
ITA20.0080.0028010
RUS18.7581.25313016
CAN12.5087.50214016
\n", "
" ], "text/plain": [ " pct_above_average pct_below_average scores_above_average \\\n", "judge_country \n", "USA 100.00 0.00 16 \n", "JPN 87.50 12.50 7 \n", "CHN 80.00 20.00 8 \n", "ESP 70.00 30.00 7 \n", "FRA 55.56 44.44 5 \n", "KOR 50.00 50.00 4 \n", "GER 40.00 60.00 2 \n", "ISR 40.00 60.00 2 \n", "CZE 25.00 75.00 2 \n", "ITA 20.00 80.00 2 \n", "RUS 18.75 81.25 3 \n", "CAN 12.50 87.50 2 \n", "\n", " scores_below_average scores_exactly_average total_scores \n", "judge_country \n", "USA 0 0 16 \n", "JPN 1 0 8 \n", "CHN 2 0 10 \n", "ESP 3 0 10 \n", "FRA 4 0 9 \n", "KOR 4 0 8 \n", "GER 3 0 5 \n", "ISR 3 0 5 \n", "CZE 6 0 8 \n", "ITA 8 0 10 \n", "RUS 13 0 16 \n", "CAN 14 0 16 " ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compare_scores_by_judge_country(\"Madison CHOCK / Evan BATES\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Results for Shibutani/Shibutani (USA)**" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pct_above_averagepct_below_averagescores_above_averagescores_below_averagescores_exactly_averagetotal_scores
judge_country
USA100.000.00160016
ESP80.0020.0082010
ITA80.0020.0082010
CHN60.0040.0064010
CAN43.7556.2579016
FRA42.8657.143407
JPN40.0060.0046010
KOR33.3366.672406
RUS31.2568.75511016
ISR28.5771.432507
CZE16.6783.331506
GER0.00100.000505
TUR0.00100.000505
\n", "
" ], "text/plain": [ " pct_above_average pct_below_average scores_above_average \\\n", "judge_country \n", "USA 100.00 0.00 16 \n", "ESP 80.00 20.00 8 \n", "ITA 80.00 20.00 8 \n", "CHN 60.00 40.00 6 \n", "CAN 43.75 56.25 7 \n", "FRA 42.86 57.14 3 \n", "JPN 40.00 60.00 4 \n", "KOR 33.33 66.67 2 \n", "RUS 31.25 68.75 5 \n", "ISR 28.57 71.43 2 \n", "CZE 16.67 83.33 1 \n", "GER 0.00 100.00 0 \n", "TUR 0.00 100.00 0 \n", "\n", " scores_below_average scores_exactly_average total_scores \n", "judge_country \n", "USA 0 0 16 \n", "ESP 2 0 10 \n", "ITA 2 0 10 \n", "CHN 4 0 10 \n", "CAN 9 0 16 \n", "FRA 4 0 7 \n", "JPN 6 0 10 \n", "KOR 4 0 6 \n", "RUS 11 0 16 \n", "ISR 5 0 7 \n", "CZE 5 0 6 \n", "GER 5 0 5 \n", "TUR 5 0 5 " ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compare_scores_by_judge_country(\"Maia SHIBUTANI / Alex SHIBUTANI\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Results for Hubbell/Donohue (USA)**" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pct_above_averagepct_below_averagescores_above_averagescores_below_averagescores_exactly_averagetotal_scores
judge_country
USA100.000.00160016
ESP80.0020.0082010
FRA77.7822.227209
KOR66.6733.334206
CHN62.5037.505308
JPN60.0040.0064010
TUR60.0040.003205
UKR60.0040.003205
CAN31.2568.75511016
GER20.0080.001405
RUS18.7581.25313016
CZE16.6783.331506
ISR0.00100.000707
ITA0.00100.00010010
\n", "
" ], "text/plain": [ " pct_above_average pct_below_average scores_above_average \\\n", "judge_country \n", "USA 100.00 0.00 16 \n", "ESP 80.00 20.00 8 \n", "FRA 77.78 22.22 7 \n", "KOR 66.67 33.33 4 \n", "CHN 62.50 37.50 5 \n", "JPN 60.00 40.00 6 \n", "TUR 60.00 40.00 3 \n", "UKR 60.00 40.00 3 \n", "CAN 31.25 68.75 5 \n", "GER 20.00 80.00 1 \n", "RUS 18.75 81.25 3 \n", "CZE 16.67 83.33 1 \n", "ISR 0.00 100.00 0 \n", "ITA 0.00 100.00 0 \n", "\n", " scores_below_average scores_exactly_average total_scores \n", "judge_country \n", "USA 0 0 16 \n", "ESP 2 0 10 \n", "FRA 2 0 9 \n", "KOR 2 0 6 \n", "CHN 3 0 8 \n", "JPN 4 0 10 \n", "TUR 2 0 5 \n", "UKR 2 0 5 \n", "CAN 11 0 16 \n", "GER 4 0 5 \n", "RUS 13 0 16 \n", "CZE 5 0 6 \n", "ISR 7 0 7 \n", "ITA 10 0 10 " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compare_scores_by_judge_country(\"Madison HUBBELL / Zachary DONOHUE\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Results for Cappellini/Lanotte (Italy)**" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pct_above_averagepct_below_averagescores_above_averagescores_below_averagescores_exactly_averagetotal_scores
judge_country
ITA100.000.00120012
JPN100.000.00100010
CHN75.0025.006208
UKR60.0040.003205
ESP57.1442.864307
FRA28.5771.432507
CAN25.0075.0039012
RUS25.0075.0039012
ISR16.6783.331506
KOR16.6783.331506
USA16.6783.33210012
\n", "
" ], "text/plain": [ " pct_above_average pct_below_average scores_above_average \\\n", "judge_country \n", "ITA 100.00 0.00 12 \n", "JPN 100.00 0.00 10 \n", "CHN 75.00 25.00 6 \n", "UKR 60.00 40.00 3 \n", "ESP 57.14 42.86 4 \n", "FRA 28.57 71.43 2 \n", "CAN 25.00 75.00 3 \n", "RUS 25.00 75.00 3 \n", "ISR 16.67 83.33 1 \n", "KOR 16.67 83.33 1 \n", "USA 16.67 83.33 2 \n", "\n", " scores_below_average scores_exactly_average total_scores \n", "judge_country \n", "ITA 0 0 12 \n", "JPN 0 0 10 \n", "CHN 2 0 8 \n", "UKR 2 0 5 \n", "ESP 3 0 7 \n", "FRA 5 0 7 \n", "CAN 9 0 12 \n", "RUS 9 0 12 \n", "ISR 5 0 6 \n", "KOR 5 0 6 \n", "USA 10 0 12 " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compare_scores_by_judge_country(\"Anna CAPPELLINI / Luca LANOTTE\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Comparing results for the four teams**" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pct_above_averagescores_above_averagetotal_scores
nameAnna CAPPELLINI / Luca LANOTTEEkaterina BOBROVA / Dmitri SOLOVIEVMadison CHOCK / Evan BATESMaia SHIBUTANI / Alex SHIBUTANIAnna CAPPELLINI / Luca LANOTTEEkaterina BOBROVA / Dmitri SOLOVIEVMadison CHOCK / Evan BATESMaia SHIBUTANI / Alex SHIBUTANIAnna CAPPELLINI / Luca LANOTTEEkaterina BOBROVA / Dmitri SOLOVIEVMadison CHOCK / Evan BATESMaia SHIBUTANI / Alex SHIBUTANI
judge_country
RUS25.00100.0018.7531.253123512121616
JPN100.0025.0087.5040.0010174104810
ITA100.0020.0020.0080.001222812101010
USA16.6716.67100.00100.0022161612121616
\n", "
" ], "text/plain": [ " pct_above_average \\\n", "name Anna CAPPELLINI / Luca LANOTTE \n", "judge_country \n", "RUS 25.00 \n", "JPN 100.00 \n", "ITA 100.00 \n", "USA 16.67 \n", "\n", " \\\n", "name Ekaterina BOBROVA / Dmitri SOLOVIEV Madison CHOCK / Evan BATES \n", "judge_country \n", "RUS 100.00 18.75 \n", "JPN 25.00 87.50 \n", "ITA 20.00 20.00 \n", "USA 16.67 100.00 \n", "\n", " scores_above_average \\\n", "name Maia SHIBUTANI / Alex SHIBUTANI Anna CAPPELLINI / Luca LANOTTE \n", "judge_country \n", "RUS 31.25 3 \n", "JPN 40.00 10 \n", "ITA 80.00 12 \n", "USA 100.00 2 \n", "\n", " \\\n", "name Ekaterina BOBROVA / Dmitri SOLOVIEV Madison CHOCK / Evan BATES \n", "judge_country \n", "RUS 12 3 \n", "JPN 1 7 \n", "ITA 2 2 \n", "USA 2 16 \n", "\n", " total_scores \\\n", "name Maia SHIBUTANI / Alex SHIBUTANI Anna CAPPELLINI / Luca LANOTTE \n", "judge_country \n", "RUS 5 12 \n", "JPN 4 10 \n", "ITA 8 12 \n", "USA 16 12 \n", "\n", " \\\n", "name Ekaterina BOBROVA / Dmitri SOLOVIEV Madison CHOCK / Evan BATES \n", "judge_country \n", "RUS 12 16 \n", "JPN 4 8 \n", "ITA 10 10 \n", "USA 12 16 \n", "\n", " \n", "name Maia SHIBUTANI / Alex SHIBUTANI \n", "judge_country \n", "RUS 16 \n", "JPN 10 \n", "ITA 10 \n", "USA 16 " ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "team_scores = judge_points[\n", " (\n", " judge_points[\"name\"].isin([\n", " \"Ekaterina BOBROVA / Dmitri SOLOVIEV\",\n", " \"Madison CHOCK / Evan BATES\",\n", " \"Maia SHIBUTANI / Alex SHIBUTANI\",\n", " \"Anna CAPPELLINI / Luca LANOTTE\"\n", " ])) &\n", " (\n", " judge_points[\"judge_country\"].isin([\n", " \"ITA\", \"RUS\", \"USA\", \"JPN\"\n", " ]))\n", "]\n", " \n", "grps = team_scores.groupby([\"judge_country\",\"name\"])\n", " \n", "team_df = pd.DataFrame({\n", " \"scores_above_average\": grps.apply(lambda x: len(x[x[\"points_vs_avg\"] > 0])),\n", " \"total_scores\": grps.size(),\n", " \"pct_above_average\": round(grps.apply(lambda x: len(x[x[\"points_vs_avg\"] > 0])) / \\\n", " grps.size() * 100, 2)\n", "}).unstack()\n", " \n", "team_df.sort_values((\"pct_above_average\", \"Ekaterina BOBROVA / Dmitri SOLOVIEV\"), ascending=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "---\n", "\n", "---" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.0" } }, "nbformat": 4, "nbformat_minor": 2 }