nesticot commited on
Commit
66f7ba6
·
1 Parent(s): 1bbe9ce

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +154 -87
app.py CHANGED
@@ -715,9 +715,32 @@ pitcher_test_df = pitcher_test_df.set_index('pitcher_id')
715
  batter_dict = batter_test_df['batter'].to_dict()
716
  pitcher_dict = pitcher_test_df['pitcher'].to_dict()
717
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
718
  level_dict = {'MLB':'MLB','AAA':'AAA','AA':'AA','A+':'A+','A':'A'}
719
  level_dict_pitch = {'MLB':'MLB','AAA':'AAA','AA':'AA','A+':'A+','A':'A'}
720
 
 
721
  plot_dict_small_all = {
722
  'k':'k_percent',
723
  'bb':'bb_percent',
@@ -739,31 +762,11 @@ plot_dict_small_all = {
739
  'chase_percent':'chase_percent',
740
  'chase_contact':'chase_contact',}
741
 
742
- plot_dict_small_all_input = {
743
- 'k_percent':'k_percent',
744
- 'bb_percent':'bb_percent',
745
- 'bb_minus_k_percent':'bb_minus_k_percent',
746
- 'csw_percent':'csw_percent',
747
- 'woba_percent':'woba_percent',
748
- 'launch_speed':'launch_speed',
749
- 'launch_speed_90':'launch_speed_90',
750
- 'hard_hit_percent':'hard_hit_percent',
751
- 'sweet_spot_percent':'sweet_spot_percent',
752
- 'launch_angle':'launch_angle',
753
- 'zone_percent':'zone_percent',
754
- 'barrel_percent':'barrel_percent',
755
- 'swing_percent':'swing_percent',
756
- 'whiff_rate':'whiff_rate',
757
- 'swstr_rate':'swstr_rate',
758
- 'zone_swing_percent':'zone_swing_percent',
759
- 'zone_contact_percent':'zone_contact_percent',
760
- 'chase_percent':'chase_percent',
761
- 'chase_contact':'chase_contact',}
762
 
763
  plot_dict_small_this_one = {
764
  'k_percent':'K%',
765
  'bb_percent':'BB%',
766
- 'bb_minus_k_percent':'BB-K%',
767
  'csw_percent':'CSW%',
768
  'woba_percent':'wOBA',
769
  'launch_speed':'Exit Velocity',
@@ -780,16 +783,50 @@ plot_dict_small_this_one = {
780
  'zone_contact_percent':'Z-Contact%',
781
  'chase_percent':'O-Swing%',
782
  'chase_contact':'O-Contact%',}
783
- def decimal_format_assign(x):
784
- if x['decimal_format'] == 'percent_1':
785
- return '{:,.1%}'
786
- if x['decimal_format'] == 'string_3':
787
- return '{:,.3f}'
788
- if x['decimal_format'] == 'string_0':
789
- return '{:,.0f}'
790
- if x['decimal_format'] == 'string_1':
791
- return '{:,.1f}'
792
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
793
  plot_dict_small_this_format = {
794
  'k_percent':'{:,.1%}',
795
  'bb_percent':'{:,.1%}',
@@ -832,50 +869,31 @@ plot_dict_small_this_format_diff = {
832
  'chase_percent':'{0:+.1%}',
833
  'chase_contact':'{0:+.1%}',}
834
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
835
 
836
- plot_dict_small = {
837
- 'k':'K%',
838
- 'bb':'BB%',
839
- 'bb_minus_k':'BB-K%',
840
- 'csw':'CSW%',
841
- 'woba':'wOBA',
842
- 'launch_speed':'Exit Velocity',
843
- 'launch_speed_90':'90th Percentile Exit Velocity',
844
- 'hard_hit':'HardHit%',
845
- 'sweet_spot':'SweetSpot%',
846
- 'launch_angle':'Launch Angle',
847
- 'zone_percent':'Zone%',
848
- 'barrel':'Barrel%',
849
- 'swing_percent':'Swing%',
850
- 'whiff_rate':'Whiff%',
851
- 'swstr_rate':'SwStr%',
852
- 'zone_swing':'Z-Swing%',
853
- 'zone_contact':'Z-Contact%',
854
- 'chase_percent':'O-Swing%',
855
- 'chase_contact':'O-Contact%',}
856
 
857
 
858
- plot_dict_small_pitch = {
859
- 'k':'K%',
860
- 'bb':'BB%',
861
- 'bb_minus_k':'K-BB%',
862
- 'csw':'CSW%',
863
- 'woba':'wOBA',
864
- 'launch_speed':'Exit Velocity',
865
- 'launch_speed_90':'90th Percentile Exit Velocity',
866
- 'hard_hit':'HardHit%',
867
- 'sweet_spot':'SweetSpot%',
868
- 'launch_angle':'Launch Angle',
869
- 'zone_percent':'Zone%',
870
- 'barrel':'Barrel%',
871
- 'swing_percent':'Swing%',
872
- 'whiff_rate':'Whiff%',
873
- 'sw_str':'SwStr%',
874
- 'zone_swing':'Z-Swing%',
875
- 'zone_contact':'Z-Contact%',
876
- 'chase_percent':'O-Swing%',
877
- 'chase_contact':'O-Contact%',}
878
-
879
  team_list = ['All'] + sorted(list(exit_velo_df_codes_summ_batter.parent_org_abb.unique()))
880
  sort_list = ['Season Stat','Timeframe Stat','Difference']
881
 
@@ -906,11 +924,11 @@ app_ui = ui.page_fluid(ui.layout_sidebar(
906
  ui.input_select("level_id", "Select Level",level_dict,width=1,multiple=True,selected='MLB',selectize=True),
907
  ui.input_select("team_id", "Select Team",team_list,width=1,size=1,multiple=True,selected='All',selectize=True),
908
  ui.input_select("sort_id", "Sort By",sort_list,width=1,size=1,selected='Timeframe Stat'),
909
- ui.input_numeric("n", "Minimum PA", value=50),
910
- ui.input_switch("sort_order", "Ascending?")),
911
-
912
  ui.panel_main(ui.tags.h2("Batter Season Average vs Timeframe Average"),
913
- ui.tags.h6("Created By: @TJStats, Data: MLB"),
914
  ui.output_text("txt"),
915
  ui.output_table("result")),
916
  ))
@@ -1051,14 +1069,10 @@ def server(input, output, session):
1051
  print(plot_dict_small_all_input[input.stat_id()])
1052
  exit_velo_df_codes_summ_time['Difference'] = exit_velo_df_codes_summ_time[input.stat_id()+'_time'] - exit_velo_df_codes_summ_time[input.stat_id()]
1053
 
1054
- # format_column = decimal_format_assign(pitcher_dict_stat[plot_dict_small_all[input.stat_id()]])
1055
-
1056
-
1057
  format_column = plot_dict_small_this_format[input.stat_id()]
1058
  format_column_diff = plot_dict_small_this_format_diff[input.stat_id()]
1059
- # print(format_column)
1060
-
1061
-
1062
 
1063
 
1064
  if input.sort_id() == 'Difference':
@@ -1098,14 +1112,67 @@ def server(input, output, session):
1098
  # })
1099
 
1100
 
1101
- exit_velo_df_codes_summ_time[plot_dict_small_this_one[input.stat_id()]] = exit_velo_df_codes_summ_time[plot_dict_small_this_one[input.stat_id()]].map(format_column.format)
1102
- exit_velo_df_codes_summ_time[plot_dict_small_this_one[input.stat_id()]+' Since'] = exit_velo_df_codes_summ_time[plot_dict_small_this_one[input.stat_id()]+' Since'].map(format_column.format)
1103
- exit_velo_df_codes_summ_time['Difference'] = exit_velo_df_codes_summ_time['Difference'].map(format_column_diff.format)
1104
-
1105
- return exit_velo_df_codes_summ_time[['Rank','Batter ID','Batter','Team','Level','PA',plot_dict_small_this_one[input.stat_id()],
1106
  'PA Since',plot_dict_small_this_one[input.stat_id()]+' Since',
1107
  'Difference']]
1108
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1109
  # @output
1110
  # @render.plot(alt="A histogram")
1111
  # def plot_pitch():
 
715
  batter_dict = batter_test_df['batter'].to_dict()
716
  pitcher_dict = pitcher_test_df['pitcher'].to_dict()
717
 
718
+
719
+ plot_dict_small_all_input = {
720
+ 'k_percent':'k_percent',
721
+ 'bb_percent':'bb_percent',
722
+ 'bb_minus_k_percent':'bb_minus_k_percent',
723
+ 'csw_percent':'csw_percent',
724
+ 'woba_percent':'woba_percent',
725
+ 'launch_speed':'launch_speed',
726
+ 'launch_speed_90':'launch_speed_90',
727
+ 'hard_hit_percent':'hard_hit_percent',
728
+ 'sweet_spot_percent':'sweet_spot_percent',
729
+ 'launch_angle':'launch_angle',
730
+ 'zone_percent':'zone_percent',
731
+ 'barrel_percent':'barrel_percent',
732
+ 'swing_percent':'swing_percent',
733
+ 'whiff_rate':'whiff_rate',
734
+ 'swstr_rate':'swstr_rate',
735
+ 'zone_swing_percent':'zone_swing_percent',
736
+ 'zone_contact_percent':'zone_contact_percent',
737
+ 'chase_percent':'chase_percent',
738
+ 'chase_contact':'chase_contact',}
739
+
740
  level_dict = {'MLB':'MLB','AAA':'AAA','AA':'AA','A+':'A+','A':'A'}
741
  level_dict_pitch = {'MLB':'MLB','AAA':'AAA','AA':'AA','A+':'A+','A':'A'}
742
 
743
+
744
  plot_dict_small_all = {
745
  'k':'k_percent',
746
  'bb':'bb_percent',
 
762
  'chase_percent':'chase_percent',
763
  'chase_contact':'chase_contact',}
764
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
765
 
766
  plot_dict_small_this_one = {
767
  'k_percent':'K%',
768
  'bb_percent':'BB%',
769
+ 'bb_minus_k_percent':'BB%-K%',
770
  'csw_percent':'CSW%',
771
  'woba_percent':'wOBA',
772
  'launch_speed':'Exit Velocity',
 
783
  'zone_contact_percent':'Z-Contact%',
784
  'chase_percent':'O-Swing%',
785
  'chase_contact':'O-Contact%',}
786
+
787
+
788
+ plot_dict_small = {
789
+ 'k':'K%',
790
+ 'bb':'BB%',
791
+ 'bb_minus_k':'BB%-K%',
792
+ 'csw':'CSW%',
793
+ 'woba':'wOBA',
794
+ 'launch_speed':'Exit Velocity',
795
+ 'launch_speed_90':'90th Percentile Exit Velocity',
796
+ 'hard_hit':'HardHit%',
797
+ 'sweet_spot':'SweetSpot%',
798
+ 'launch_angle':'Launch Angle',
799
+ 'zone_percent':'Zone%',
800
+ 'barrel':'Barrel%',
801
+ 'swing_percent':'Swing%',
802
+ 'whiff_percent':'Whiff%',
803
+ 'sw_str':'SwStr%',
804
+ 'zone_swing':'Z-Swing%',
805
+ 'zone_contact':'Z-Contact%',
806
+ 'chase_percent':'O-Swing%',
807
+ 'chase_contact':'O-Contact%',}
808
+
809
+ plot_dict_small_pitch = {
810
+ 'k':'K%',
811
+ 'bb':'BB%',
812
+ 'bb_minus_k':'BB%-K%',
813
+ 'csw':'CSW%',
814
+ 'woba':'wOBA',
815
+ 'launch_speed':'Exit Velocity',
816
+ 'launch_speed_90':'90th Percentile Exit Velocity',
817
+ 'hard_hit':'HardHit%',
818
+ 'sweet_spot':'SweetSpot%',
819
+ 'launch_angle':'Launch Angle',
820
+ 'zone_percent':'Zone%',
821
+ 'barrel':'Barrel%',
822
+ 'swing_percent':'Swing%',
823
+ 'whiff_percent':'Whiff%',
824
+ 'sw_str':'SwStr%',
825
+ 'zone_swing':'Z-Swing%',
826
+ 'zone_contact':'Z-Contact%',
827
+ 'chase_percent':'O-Swing%',
828
+ 'chase_contact':'O-Contact%',}
829
+
830
  plot_dict_small_this_format = {
831
  'k_percent':'{:,.1%}',
832
  'bb_percent':'{:,.1%}',
 
869
  'chase_percent':'{0:+.1%}',
870
  'chase_contact':'{0:+.1%}',}
871
 
872
+ plot_dict_small_this_format_sorted = {
873
+ 'k_percent':False,
874
+ 'bb_percent':True,
875
+ 'bb_minus_k_percent':True,
876
+ 'csw_percent':False,
877
+ 'woba_percent':True,
878
+ 'launch_speed':True,
879
+ 'launch_speed_90':True,
880
+ 'hard_hit_percent':True,
881
+ 'sweet_spot_percent':True,
882
+ 'launch_angle':True,
883
+ 'zone_percent':False,
884
+ 'barrel_percent':True,
885
+ 'swing_percent':True,
886
+ 'whiff_rate':False,
887
+ 'swstr_rate':False,
888
+ 'zone_swing_percent':False,
889
+ 'zone_contact_percent':True,
890
+ 'chase_percent':False,
891
+ 'chase_contact':True,}
892
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
893
 
894
 
895
+ team_list = ['All'] + sorted(list(exit_velo_df_codes_summ_batter.parent_org_abb.unique()))
896
+ sort_list = ['Season Stat','Timeframe Stat','Difference']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
897
  team_list = ['All'] + sorted(list(exit_velo_df_codes_summ_batter.parent_org_abb.unique()))
898
  sort_list = ['Season Stat','Timeframe Stat','Difference']
899
 
 
924
  ui.input_select("level_id", "Select Level",level_dict,width=1,multiple=True,selected='MLB',selectize=True),
925
  ui.input_select("team_id", "Select Team",team_list,width=1,size=1,multiple=True,selected='All',selectize=True),
926
  ui.input_select("sort_id", "Sort By",sort_list,width=1,size=1,selected='Timeframe Stat'),
927
+ ui.input_numeric("n", "Minimum PA", value=50),
928
+ ui.input_numeric("n_top", "Show top 'n'", value=0),
929
+ ui.input_switch("sort_order", "Ascending?"),),
930
  ui.panel_main(ui.tags.h2("Batter Season Average vs Timeframe Average"),
931
+ ui.tags.h6("Created By: @TJStats, Data: MLB"),
932
  ui.output_text("txt"),
933
  ui.output_table("result")),
934
  ))
 
1069
  print(plot_dict_small_all_input[input.stat_id()])
1070
  exit_velo_df_codes_summ_time['Difference'] = exit_velo_df_codes_summ_time[input.stat_id()+'_time'] - exit_velo_df_codes_summ_time[input.stat_id()]
1071
 
1072
+ # print(format_column)
 
 
1073
  format_column = plot_dict_small_this_format[input.stat_id()]
1074
  format_column_diff = plot_dict_small_this_format_diff[input.stat_id()]
1075
+ print('Difference',format_column)
 
 
1076
 
1077
 
1078
  if input.sort_id() == 'Difference':
 
1112
  # })
1113
 
1114
 
1115
+ # exit_velo_df_codes_summ_time[plot_dict_small_this_one[input.stat_id()]] = exit_velo_df_codes_summ_time[plot_dict_small_this_one[input.stat_id()]].map(format_column.format)
1116
+ # exit_velo_df_codes_summ_time[plot_dict_small_this_one[input.stat_id()]+' Since'] = exit_velo_df_codes_summ_time[plot_dict_small_this_one[input.stat_id()]+' Since'].map(format_column.format)
1117
+ # exit_velo_df_codes_summ_time['Difference'] = exit_velo_df_codes_summ_time['Difference'].map(format_column_diff.format)
1118
+ exit_velo_df_codes_summ_time_style_setting = exit_velo_df_codes_summ_time[['Rank','Batter ID','Batter','Team','Level','PA',plot_dict_small_this_one[input.stat_id()],
 
1119
  'PA Since',plot_dict_small_this_one[input.stat_id()]+' Since',
1120
  'Difference']]
1121
 
1122
+ df_min_max = exit_velo_df_codes_summ_time_style_setting.copy()
1123
+
1124
+ if int(input.n_top()) > 0:
1125
+ exit_velo_df_codes_summ_time_style_setting = exit_velo_df_codes_summ_time_style_setting.head(int(input.n_top()))
1126
+
1127
+ # exit_velo_df_codes_summ_time_style = exit_velo_df_codes_summ_time[['Rank','Pitcher ID','Pitcher','Team','Level','PA',plot_dict_small_this_one[input.stat_id()],
1128
+ # 'PA Since',plot_dict_small_this_one[input.stat_id()]+' Since',
1129
+ # 'Difference']]
1130
+
1131
+ #exit_velo_df_codes_summ_time_style = exit_velo_df_codes_summ_time.copy()
1132
+
1133
+ exit_velo_df_codes_summ_time_style_set = exit_velo_df_codes_summ_time_style_setting.style.set_properties(**{'border': '1 px'},overwrite=False).set_table_styles([{
1134
+ 'selector': 'caption',
1135
+ 'props': [
1136
+ ('color', ''),
1137
+ ('fontname', 'Century Gothic'),
1138
+ ('font-size', '16px'),
1139
+ ('font-style', 'italic'),
1140
+ ('font-weight', ''),
1141
+ ('text-align', 'centre'),
1142
+ ]
1143
+
1144
+ },{'selector' :'th', 'props':[('text-align', 'center'),('Height','24px'),('border', '1 px black solid !important')]},{'selector' :'td', 'props':[('text-align', 'center'),('font-size', '16px')]}],overwrite=False).set_table_styles(
1145
+ [{'selector': 'tr', 'props': [('line-height', '1px')]}],overwrite=False).set_properties(
1146
+ **{'Height': '28px'},**{'text-align': 'center'},overwrite=False).hide_index().format(
1147
+ {
1148
+ plot_dict_small_this_one[input.stat_id()]: format_column,
1149
+ plot_dict_small_this_one[input.stat_id()]+' Since': format_column,
1150
+ "Difference":format_column_diff,
1151
+ })
1152
+
1153
+ if plot_dict_small_this_format_sorted[input.stat_id()]:
1154
+ cmap_sum = matplotlib.colors.LinearSegmentedColormap.from_list("", ["#4285f4","#FFFFFF","#F0E442"])
1155
+
1156
+ else:
1157
+ cmap_sum = matplotlib.colors.LinearSegmentedColormap.from_list("", ["#F0E442","#FFFFFF","#4285f4"])
1158
+
1159
+
1160
+ exit_velo_df_codes_summ_time_style_set = exit_velo_df_codes_summ_time_style_set.background_gradient(cmap=cmap_sum,subset = ((list(exit_velo_df_codes_summ_time_style_set.index[:]),exit_velo_df_codes_summ_time_style_set.columns[-1])),vmin=df_min_max[df_min_max.columns[-1]].min(),vmax=df_min_max[df_min_max.columns[-1]].max())
1161
+ exit_velo_df_codes_summ_time_style_set = exit_velo_df_codes_summ_time_style_set.background_gradient(cmap=cmap_sum,subset = ((list(exit_velo_df_codes_summ_time_style_set.index[:]),exit_velo_df_codes_summ_time_style_set.columns[-2])),vmin=df_min_max[df_min_max.columns[-2]].min(),vmax=df_min_max[df_min_max.columns[-2]].max())
1162
+ exit_velo_df_codes_summ_time_style_set = exit_velo_df_codes_summ_time_style_set.background_gradient(cmap=cmap_sum,subset = ((list(exit_velo_df_codes_summ_time_style_set.index[:]),exit_velo_df_codes_summ_time_style_set.columns[-4])),vmin=df_min_max[df_min_max.columns[-4]].min(),vmax=df_min_max[df_min_max.columns[-4]].max())
1163
+
1164
+ exit_velo_df_codes_summ_time_style_set = exit_velo_df_codes_summ_time_style_set.set_properties(
1165
+ **{'border': '1px black solid !important'},subset = ((list(exit_velo_df_codes_summ_time_style_set.index[:-1]),exit_velo_df_codes_summ_time_style_set.columns[:]))).set_properties(
1166
+ #**{'font-weight': 'bold'},subset = ((list(exit_velo_df_codes_summ_time_style.index[:]),exit_velo_df_codes_summ_time_style.columns[:4]))).set_properties(
1167
+ **{'min-width':'100px'},subset = ((list(exit_velo_df_codes_summ_time_style_set.index[:-1]),exit_velo_df_codes_summ_time_style_set.columns[1])),overwrite=False).set_properties(
1168
+ **{'min-width':'150px'},subset = ((list(exit_velo_df_codes_summ_time_style_set.index[:-1]),exit_velo_df_codes_summ_time_style_set.columns[2])),overwrite=False).set_properties(
1169
+ **{'min-width':'85px'},subset = ((list(exit_velo_df_codes_summ_time_style_set.index[:-1]),exit_velo_df_codes_summ_time_style_set.columns[3:])),overwrite=False).set_properties(
1170
+ **{'border': '1px black solid !important'},subset = ((list(exit_velo_df_codes_summ_time_style_set.index[:]),exit_velo_df_codes_summ_time_style_set.columns[:])))
1171
+
1172
+
1173
+
1174
+ return exit_velo_df_codes_summ_time_style_set
1175
+
1176
  # @output
1177
  # @render.plot(alt="A histogram")
1178
  # def plot_pitch():