In [1]:
import pandas as pd
50 Over Batting¶
In [2]:
# Load the data from both Excel files
df_regionalliga_batting = pd.read_excel('F50/BCV-Regionalliga-Bayern 2024 Batting Records - Bayerischer Cricket Verband e.V..xlsx')
df_verbandsliga_batting = pd.read_excel('F50/BCV-Verbandsliga-Bayern 2024 Batting Records - Bayerischer Cricket Verband e.V..xlsx')
# Standardize column names
df_regionalliga_batting.columns = df_regionalliga_batting.columns.str.strip().str.lower()
df_verbandsliga_batting.columns = df_verbandsliga_batting.columns.str.strip().str.lower()
# Ensure both DataFrames have the same columns
df_regionalliga_batting = df_regionalliga_batting[df_verbandsliga_batting.columns]
# Merge the two DataFrames along rows
df_combined_batting = pd.concat([df_regionalliga_batting, df_verbandsliga_batting], ignore_index=True)
In [3]:
output_file = 'F50/Combined_BCV_Batting_Records_2024.xlsx'
df_combined_batting.to_excel(output_file, index=False)
Top 20 by runs¶
In [4]:
# Convert columns 'runs' and 'avg' to numeric, forcing errors to NaN (if any)
df_combined_batting['runs'] = pd.to_numeric(df_combined_batting['runs'], errors='coerce')
df_combined_batting['avg'] = pd.to_numeric(df_combined_batting['avg'], errors='coerce')
# Sort by 'runs' (descending)
top_20_by_runs = df_combined_batting.sort_values(by=['runs'], ascending=[False]).head(20)
top_20_by_runs
Out[4]:
# | player | group | team | mat | inns | no | runs | 4's | 6's | 50's | 100's | hs | sr | avg | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | Sasi Kiran Alur | REGIONAL LEAGUE SUD | BATCC-I | 12 | 12 | 0 | 349 | 33 | 3 | 2 | 0 | 56 | 60.38 | 29.08 |
1 | 2 | Zeeshan Sami | REGIONAL LEAGUE SUD | BATCC-I | 12 | 12 | 1 | 280 | 34 | 7 | 2 | 0 | 94 | 83.83 | 25.45 |
2 | 3 | Rohit Verma | Regional League Nord | BATCC-II | 10 | 9 | 1 | 221 | 16 | 5 | 1 | 0 | 51 | 56.09 | 27.62 |
3 | 4 | Muhammad Talha | REGIONAL LEAGUE SUD | BATCC-I | 11 | 11 | 1 | 159 | 13 | 9 | 0 | 1 | 130 | 82.81 | 15.90 |
46 | 1 | Arjun Nadol | South Centre - I | BATCC-III | 8 | 8 | 0 | 153 | 15 | 5 | 1 | 0 | 50 | 57.52 | 19.12 |
4 | 5 | Vineep Bhat | REGIONAL LEAGUE SUD | BATCC-I | 12 | 12 | 0 | 152 | 15 | 1 | 0 | 0 | 41 | 79.17 | 12.67 |
5 | 6 | Praveen Daneti | REGIONAL LEAGUE SUD | BATCC-I | 9 | 9 | 0 | 122 | 8 | 8 | 1 | 0 | 60 | 79.74 | 13.56 |
6 | 7 | Md. Essa Haqbin | REGIONAL LEAGUE SUD | BATCC-I | 3 | 3 | 0 | 120 | 10 | 2 | 1 | 0 | 64 | 74.53 | 40.00 |
7 | 8 | Rajesh Kumar Srivastava | Regional League Nord | BATCC-II | 7 | 6 | 0 | 120 | 15 | 0 | 0 | 0 | 37 | 57.69 | 20.00 |
8 | 9 | Deepak Kamal | Regional League Nord | BATCC-II | 8 | 8 | 0 | 116 | 7 | 2 | 0 | 0 | 33 | 48.95 | 14.50 |
9 | 10 | Satya Prakash Sahoo | REGIONAL LEAGUE SUD | BATCC-I | 13 | 13 | 1 | 102 | 9 | 2 | 0 | 0 | 16 | 42.68 | 8.50 |
10 | 11 | Amaljith Narayanan Nair | Regional League Nord | BATCC-II | 9 | 8 | 0 | 95 | 4 | 1 | 0 | 0 | 30 | 38.93 | 11.88 |
47 | 2 | Haris Ali | South Centre - I | BATCC-III | 9 | 9 | 0 | 94 | 7 | 4 | 0 | 0 | 44 | 59.49 | 10.44 |
11 | 12 | Sanjeev Sivaraman | REGIONAL LEAGUE SUD | BATCC-I | 7 | 7 | 1 | 85 | 8 | 0 | 0 | 0 | 40 | 43.37 | 14.17 |
12 | 13 | Shashidhara Hanumaiah Veerabhadraiah | REGIONAL LEAGUE SUD | BATCC-I | 9 | 9 | 0 | 78 | 10 | 0 | 0 | 0 | 27 | 52.70 | 8.67 |
13 | 14 | Nitesh Singh | REGIONAL LEAGUE SUD | BATCC-I | 14 | 13 | 3 | 75 | 3 | 1 | 0 | 0 | 16 | 56.39 | 7.50 |
14 | 15 | Manjunatha Muniramaiah | REGIONAL LEAGUE SUD | BATCC-I | 6 | 6 | 0 | 72 | 3 | 5 | 0 | 0 | 22 | 66.67 | 12.00 |
15 | 16 | Saurabh Singh Patel | Regional League Nord | BATCC-II | 11 | 10 | 0 | 71 | 5 | 2 | 0 | 0 | 30 | 42.51 | 7.10 |
48 | 3 | Ashish Satpathy | South Centre - I | BATCC-III | 5 | 5 | 1 | 62 | 7 | 0 | 0 | 0 | 33 | 48.82 | 15.50 |
16 | 17 | Nitin Madan | REGIONAL LEAGUE SUD | BATCC-I | 11 | 11 | 3 | 61 | 4 | 0 | 0 | 0 | 17 | 38.61 | 7.62 |
Top 20 by average. Only those conisdered who have played more matches than the team mean.¶
In [5]:
# Calculate the mean of 'mat' column to use as 'n'
n = df_combined_batting['mat'].mean()
print('Mean of matches across players:', n)
# Filter players who have played at least 'n' matches
filtered_df = df_combined_batting[df_combined_batting['mat'] >= n]
# Sort by 'avg' in descending order to find the top 10 players by average
top_20_by_avg = filtered_df.sort_values(by=['avg'], ascending=[False]).head(20)
top_20_by_avg
Mean of matches across players: 5.171428571428572
Out[5]:
# | player | group | team | mat | inns | no | runs | 4's | 6's | 50's | 100's | hs | sr | avg | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | Sasi Kiran Alur | REGIONAL LEAGUE SUD | BATCC-I | 12 | 12 | 0 | 349 | 33 | 3 | 2 | 0 | 56 | 60.38 | 29.08 |
2 | 3 | Rohit Verma | Regional League Nord | BATCC-II | 10 | 9 | 1 | 221 | 16 | 5 | 1 | 0 | 51 | 56.09 | 27.62 |
1 | 2 | Zeeshan Sami | REGIONAL LEAGUE SUD | BATCC-I | 12 | 12 | 1 | 280 | 34 | 7 | 2 | 0 | 94 | 83.83 | 25.45 |
7 | 8 | Rajesh Kumar Srivastava | Regional League Nord | BATCC-II | 7 | 6 | 0 | 120 | 15 | 0 | 0 | 0 | 37 | 57.69 | 20.00 |
46 | 1 | Arjun Nadol | South Centre - I | BATCC-III | 8 | 8 | 0 | 153 | 15 | 5 | 1 | 0 | 50 | 57.52 | 19.12 |
3 | 4 | Muhammad Talha | REGIONAL LEAGUE SUD | BATCC-I | 11 | 11 | 1 | 159 | 13 | 9 | 0 | 1 | 130 | 82.81 | 15.90 |
8 | 9 | Deepak Kamal | Regional League Nord | BATCC-II | 8 | 8 | 0 | 116 | 7 | 2 | 0 | 0 | 33 | 48.95 | 14.50 |
11 | 12 | Sanjeev Sivaraman | REGIONAL LEAGUE SUD | BATCC-I | 7 | 7 | 1 | 85 | 8 | 0 | 0 | 0 | 40 | 43.37 | 14.17 |
5 | 6 | Praveen Daneti | REGIONAL LEAGUE SUD | BATCC-I | 9 | 9 | 0 | 122 | 8 | 8 | 1 | 0 | 60 | 79.74 | 13.56 |
4 | 5 | Vineep Bhat | REGIONAL LEAGUE SUD | BATCC-I | 12 | 12 | 0 | 152 | 15 | 1 | 0 | 0 | 41 | 79.17 | 12.67 |
14 | 15 | Manjunatha Muniramaiah | REGIONAL LEAGUE SUD | BATCC-I | 6 | 6 | 0 | 72 | 3 | 5 | 0 | 0 | 22 | 66.67 | 12.00 |
10 | 11 | Amaljith Narayanan Nair | Regional League Nord | BATCC-II | 9 | 8 | 0 | 95 | 4 | 1 | 0 | 0 | 30 | 38.93 | 11.88 |
50 | 5 | Fahad Munawwar | South Centre - I | BATCC-III | 6 | 6 | 2 | 45 | 2 | 1 | 0 | 0 | 18 | 27.95 | 11.25 |
47 | 2 | Haris Ali | South Centre - I | BATCC-III | 9 | 9 | 0 | 94 | 7 | 4 | 0 | 0 | 44 | 59.49 | 10.44 |
12 | 13 | Shashidhara Hanumaiah Veerabhadraiah | REGIONAL LEAGUE SUD | BATCC-I | 9 | 9 | 0 | 78 | 10 | 0 | 0 | 0 | 27 | 52.70 | 8.67 |
9 | 10 | Satya Prakash Sahoo | REGIONAL LEAGUE SUD | BATCC-I | 13 | 13 | 1 | 102 | 9 | 2 | 0 | 0 | 16 | 42.68 | 8.50 |
22 | 23 | Bhavin Kantilal Solanki | REGIONAL LEAGUE SUD | BATCC-I | 6 | 5 | 0 | 39 | 2 | 1 | 0 | 0 | 31 | 57.35 | 7.80 |
16 | 17 | Nitin Madan | REGIONAL LEAGUE SUD | BATCC-I | 11 | 11 | 3 | 61 | 4 | 0 | 0 | 0 | 17 | 38.61 | 7.62 |
13 | 14 | Nitesh Singh | REGIONAL LEAGUE SUD | BATCC-I | 14 | 13 | 3 | 75 | 3 | 1 | 0 | 0 | 16 | 56.39 | 7.50 |
23 | 24 | Amit Rajendra Desai | REGIONAL LEAGUE SUD | BATCC-I | 10 | 9 | 4 | 36 | 1 | 1 | 0 | 0 | 14 | 48.65 | 7.20 |
T20 Batting¶
In [6]:
# 20 Over Batting
# Load the data from both Excel files
df_regionalliga_batting = pd.read_excel('T20/T20 1.Verbandsliga - 2024 Batting Records - Bayerischer Cricket Verband e.V..xlsx')
df_verbandsliga_batting = pd.read_excel('T20/T20 2. Verbandsliga - 2024 Batting Records - Bayerischer Cricket Verband e.V..xlsx')
# Standardize column names
df_regionalliga_batting.columns = df_regionalliga_batting.columns.str.strip().str.lower()
df_verbandsliga_batting.columns = df_verbandsliga_batting.columns.str.strip().str.lower()
# Ensure both DataFrames have the same columns
df_regionalliga_batting = df_regionalliga_batting[df_verbandsliga_batting.columns]
# Merge the two DataFrames along rows
df_combined_batting = pd.concat([df_regionalliga_batting, df_verbandsliga_batting], ignore_index=True)
In [7]:
output_file = 'T20/Combined_BCV_Batting_Records_2024.xlsx'
df_combined_batting.to_excel(output_file, index=False)
Top 20 by runs¶
In [8]:
# Convert columns 'runs' and 'avg' to numeric, forcing errors to NaN (if any)
df_combined_batting['runs'] = pd.to_numeric(df_combined_batting['runs'], errors='coerce')
df_combined_batting['avg'] = pd.to_numeric(df_combined_batting['avg'], errors='coerce')
# Sort by 'runs' (descending)
top_20_by_runs = df_combined_batting.sort_values(by=['runs'], ascending=[False]).head(20)
top_20_by_runs
Out[8]:
# | player | group | team | mat | inns | no | runs | 4's | 6's | 50's | 100's | hs | sr | avg | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | Shashidhara Hanumaiah Veerabhadraiah | A | BATCC-I | 11 | 10 | 0 | 207 | 18 | 6 | 0 | 0 | 40 | 82.47 | 20.70 |
1 | 2 | Muhammad Talha | A | BATCC-I | 14 | 12 | 0 | 189 | 8 | 13 | 0 | 0 | 49 | 87.50 | 15.75 |
45 | 1 | Arjun Nadol | B | BATCC-III | 8 | 8 | 0 | 162 | 12 | 8 | 1 | 0 | 57 | 86.17 | 20.25 |
46 | 2 | Ashish Joshi | B | BATCC-III | 6 | 6 | 1 | 159 | 10 | 11 | 0 | 1 | 100 | 150.00 | 31.80 |
2 | 3 | Saurabh Singh Patel | B | BATCC-II | 10 | 10 | 1 | 152 | 10 | 6 | 0 | 0 | 39 | 108.57 | 16.89 |
3 | 4 | Rohit Verma | B | BATCC-II | 10 | 10 | 1 | 135 | 12 | 1 | 0 | 0 | 30 | 84.38 | 15.00 |
4 | 5 | Sushanth Reddy Chandamollu | B | BATCC-II | 6 | 6 | 0 | 123 | 9 | 0 | 0 | 0 | 35 | 91.11 | 20.50 |
5 | 6 | Manjunatha Muniramaiah | A | BATCC-I | 5 | 4 | 0 | 117 | 9 | 6 | 0 | 0 | 49 | 150.00 | 29.25 |
6 | 7 | Amaljith Narayanan Nair | B | BATCC-II | 10 | 10 | 1 | 109 | 11 | 1 | 1 | 0 | 56 | 87.20 | 12.11 |
7 | 8 | Mohammad Essa Haqbin | A | BATCC-I | 2 | 2 | 1 | 106 | 11 | 7 | 1 | 0 | 68 | 153.62 | 106.00 |
8 | 9 | Praveen Daneti | A | BATCC-I | 13 | 11 | 2 | 87 | 1 | 8 | 0 | 0 | 22 | 102.35 | 9.67 |
9 | 10 | Satya Prakash Sahoo | A | BATCC-I | 9 | 8 | 1 | 83 | 2 | 4 | 0 | 0 | 25 | 95.40 | 11.86 |
10 | 11 | Venkat Vinay Ayyagari | A | BATCC-I | 12 | 9 | 1 | 72 | 3 | 3 | 0 | 0 | 18 | 71.29 | 9.00 |
11 | 12 | Vineep Bhat | A | BATCC-I | 10 | 9 | 0 | 71 | 1 | 1 | 0 | 0 | 18 | 71.72 | 7.89 |
12 | 13 | Zeeshan Sami | A | BATCC-I | 7 | 7 | 1 | 70 | 7 | 2 | 0 | 0 | 40 | 89.74 | 11.67 |
13 | 14 | Sasi Kiran Alur | A | BATCC-I | 6 | 5 | 0 | 65 | 5 | 0 | 0 | 0 | 24 | 75.58 | 13.00 |
14 | 15 | Ashish Joshi | A | BATCC-I | 2 | 2 | 1 | 63 | 4 | 5 | 0 | 0 | 43 | 157.50 | 63.00 |
15 | 16 | Deepak Kamal | B | BATCC-II | 9 | 9 | 0 | 56 | 5 | 0 | 0 | 0 | 13 | 53.33 | 6.22 |
16 | 17 | Apurva Sharma | B | BATCC-II | 6 | 6 | 0 | 49 | 1 | 3 | 0 | 0 | 18 | 104.26 | 8.17 |
17 | 18 | Sanjeev Sivaraman | A | BATCC-I | 3 | 3 | 1 | 46 | 1 | 0 | 0 | 0 | 38 | 67.65 | 23.00 |
Top 20 by average. Only those conisdered who have played more matches than the team mean.¶
In [9]:
# Calculate the mean of 'mat' column to use as 'n'
n = df_combined_batting['mat'].mean()
print('Mean of matches across players:', n)
# Filter players who have played at least 'n' matches
filtered_df = df_combined_batting[df_combined_batting['mat'] >= n]
# Sort by 'avg' in descending order to find the top 10 players by average
top_20_by_avg = filtered_df.sort_values(by=['avg'], ascending=[False]).head(20)
top_20_by_avg
Mean of matches across players: 4.855072463768116
Out[9]:
# | player | group | team | mat | inns | no | runs | 4's | 6's | 50's | 100's | hs | sr | avg | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
46 | 2 | Ashish Joshi | B | BATCC-III | 6 | 6 | 1 | 159 | 10 | 11 | 0 | 1 | 100 | 150.00 | 31.80 |
5 | 6 | Manjunatha Muniramaiah | A | BATCC-I | 5 | 4 | 0 | 117 | 9 | 6 | 0 | 0 | 49 | 150.00 | 29.25 |
0 | 1 | Shashidhara Hanumaiah Veerabhadraiah | A | BATCC-I | 11 | 10 | 0 | 207 | 18 | 6 | 0 | 0 | 40 | 82.47 | 20.70 |
4 | 5 | Sushanth Reddy Chandamollu | B | BATCC-II | 6 | 6 | 0 | 123 | 9 | 0 | 0 | 0 | 35 | 91.11 | 20.50 |
45 | 1 | Arjun Nadol | B | BATCC-III | 8 | 8 | 0 | 162 | 12 | 8 | 1 | 0 | 57 | 86.17 | 20.25 |
2 | 3 | Saurabh Singh Patel | B | BATCC-II | 10 | 10 | 1 | 152 | 10 | 6 | 0 | 0 | 39 | 108.57 | 16.89 |
1 | 2 | Muhammad Talha | A | BATCC-I | 14 | 12 | 0 | 189 | 8 | 13 | 0 | 0 | 49 | 87.50 | 15.75 |
3 | 4 | Rohit Verma | B | BATCC-II | 10 | 10 | 1 | 135 | 12 | 1 | 0 | 0 | 30 | 84.38 | 15.00 |
13 | 14 | Sasi Kiran Alur | A | BATCC-I | 6 | 5 | 0 | 65 | 5 | 0 | 0 | 0 | 24 | 75.58 | 13.00 |
6 | 7 | Amaljith Narayanan Nair | B | BATCC-II | 10 | 10 | 1 | 109 | 11 | 1 | 1 | 0 | 56 | 87.20 | 12.11 |
9 | 10 | Satya Prakash Sahoo | A | BATCC-I | 9 | 8 | 1 | 83 | 2 | 4 | 0 | 0 | 25 | 95.40 | 11.86 |
12 | 13 | Zeeshan Sami | A | BATCC-I | 7 | 7 | 1 | 70 | 7 | 2 | 0 | 0 | 40 | 89.74 | 11.67 |
8 | 9 | Praveen Daneti | A | BATCC-I | 13 | 11 | 2 | 87 | 1 | 8 | 0 | 0 | 22 | 102.35 | 9.67 |
26 | 27 | Amit Rajendra Desai | A | BATCC-I | 10 | 6 | 4 | 19 | 1 | 0 | 0 | 0 | 10 | 111.76 | 9.50 |
10 | 11 | Venkat Vinay Ayyagari | A | BATCC-I | 12 | 9 | 1 | 72 | 3 | 3 | 0 | 0 | 18 | 71.29 | 9.00 |
16 | 17 | Apurva Sharma | B | BATCC-II | 6 | 6 | 0 | 49 | 1 | 3 | 0 | 0 | 18 | 104.26 | 8.17 |
11 | 12 | Vineep Bhat | A | BATCC-I | 10 | 9 | 0 | 71 | 1 | 1 | 0 | 0 | 18 | 71.72 | 7.89 |
15 | 16 | Deepak Kamal | B | BATCC-II | 9 | 9 | 0 | 56 | 5 | 0 | 0 | 0 | 13 | 53.33 | 6.22 |
47 | 3 | Haris Ali | B | BATCC-III | 8 | 7 | 0 | 43 | 3 | 1 | 0 | 0 | 13 | 97.73 | 6.14 |
32 | 33 | Manav Gidra | B | BATCC-II | 6 | 3 | 1 | 11 | 1 | 0 | 0 | 0 | 8 | 73.33 | 5.50 |
Top 20 by strike rate. Only those conisdered who have scored more than the team mean.¶
In [10]:
# Calculate the mean of 'mat' column to use as 'n'
n = df_combined_batting['runs'].mean()
print('Mean of runs across players:', n)
# Filter players who have scored atleast n runs
filtered_df = df_combined_batting[df_combined_batting['runs'] >= n]
# Sort by 'avg' in descending order to find the top 10 players by strike rate
top_20_by_strikerate = filtered_df.sort_values(by=['sr'], ascending=[False]).head(20)
top_20_by_strikerate
Mean of runs across players: 40.84057971014493
Out[10]:
# | player | group | team | mat | inns | no | runs | 4's | 6's | 50's | 100's | hs | sr | avg | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
14 | 15 | Ashish Joshi | A | BATCC-I | 2 | 2 | 1 | 63 | 4 | 5 | 0 | 0 | 43 | 157.50 | 63.00 |
7 | 8 | Mohammad Essa Haqbin | A | BATCC-I | 2 | 2 | 1 | 106 | 11 | 7 | 1 | 0 | 68 | 153.62 | 106.00 |
5 | 6 | Manjunatha Muniramaiah | A | BATCC-I | 5 | 4 | 0 | 117 | 9 | 6 | 0 | 0 | 49 | 150.00 | 29.25 |
46 | 2 | Ashish Joshi | B | BATCC-III | 6 | 6 | 1 | 159 | 10 | 11 | 0 | 1 | 100 | 150.00 | 31.80 |
2 | 3 | Saurabh Singh Patel | B | BATCC-II | 10 | 10 | 1 | 152 | 10 | 6 | 0 | 0 | 39 | 108.57 | 16.89 |
16 | 17 | Apurva Sharma | B | BATCC-II | 6 | 6 | 0 | 49 | 1 | 3 | 0 | 0 | 18 | 104.26 | 8.17 |
8 | 9 | Praveen Daneti | A | BATCC-I | 13 | 11 | 2 | 87 | 1 | 8 | 0 | 0 | 22 | 102.35 | 9.67 |
47 | 3 | Haris Ali | B | BATCC-III | 8 | 7 | 0 | 43 | 3 | 1 | 0 | 0 | 13 | 97.73 | 6.14 |
9 | 10 | Satya Prakash Sahoo | A | BATCC-I | 9 | 8 | 1 | 83 | 2 | 4 | 0 | 0 | 25 | 95.40 | 11.86 |
48 | 4 | Md. Essa Haqbin | B | BATCC-III | 2 | 2 | 0 | 41 | 5 | 1 | 0 | 0 | 41 | 95.35 | 20.50 |
4 | 5 | Sushanth Reddy Chandamollu | B | BATCC-II | 6 | 6 | 0 | 123 | 9 | 0 | 0 | 0 | 35 | 91.11 | 20.50 |
12 | 13 | Zeeshan Sami | A | BATCC-I | 7 | 7 | 1 | 70 | 7 | 2 | 0 | 0 | 40 | 89.74 | 11.67 |
1 | 2 | Muhammad Talha | A | BATCC-I | 14 | 12 | 0 | 189 | 8 | 13 | 0 | 0 | 49 | 87.50 | 15.75 |
6 | 7 | Amaljith Narayanan Nair | B | BATCC-II | 10 | 10 | 1 | 109 | 11 | 1 | 1 | 0 | 56 | 87.20 | 12.11 |
45 | 1 | Arjun Nadol | B | BATCC-III | 8 | 8 | 0 | 162 | 12 | 8 | 1 | 0 | 57 | 86.17 | 20.25 |
3 | 4 | Rohit Verma | B | BATCC-II | 10 | 10 | 1 | 135 | 12 | 1 | 0 | 0 | 30 | 84.38 | 15.00 |
0 | 1 | Shashidhara Hanumaiah Veerabhadraiah | A | BATCC-I | 11 | 10 | 0 | 207 | 18 | 6 | 0 | 0 | 40 | 82.47 | 20.70 |
13 | 14 | Sasi Kiran Alur | A | BATCC-I | 6 | 5 | 0 | 65 | 5 | 0 | 0 | 0 | 24 | 75.58 | 13.00 |
11 | 12 | Vineep Bhat | A | BATCC-I | 10 | 9 | 0 | 71 | 1 | 1 | 0 | 0 | 18 | 71.72 | 7.89 |
10 | 11 | Venkat Vinay Ayyagari | A | BATCC-I | 12 | 9 | 1 | 72 | 3 | 3 | 0 | 0 | 18 | 71.29 | 9.00 |
50 Over Bowling¶
In [11]:
# Load the data from both Excel files
df_regionalliga_bowling = pd.read_excel('F50/BCV-Regionalliga-Bayern 2024 Bowling Records - Bayerischer Cricket Verband e.V..xlsx')
df_verbandsliga_bowling = pd.read_excel('F50/BCV-Verbandsliga-Bayern 2024 Bowling Records - Bayerischer Cricket Verband e.V..xlsx')
# Standardize column names
df_regionalliga_bowling.columns = df_regionalliga_bowling.columns.str.strip().str.lower()
df_verbandsliga_bowling.columns = df_verbandsliga_bowling.columns.str.strip().str.lower()
# Ensure both DataFrames have the same columns
df_regionalliga_bowling = df_regionalliga_bowling[df_verbandsliga_bowling.columns]
# Merge the two DataFrames along rows
df_combined_bowling = pd.concat([df_regionalliga_bowling, df_verbandsliga_bowling], ignore_index=True)
In [12]:
output_file = 'F50/Combined_BCV_Bowling_Records_2024.xlsx'
df_combined_bowling.to_excel(output_file, index=False)
In [13]:
df_combined_bowling.columns
Out[13]:
Index(['#', 'player', 'group', 'team', 'mat', 'inns', 'overs', 'runs', 'wkts', 'bbf', 'mdns', 'dots', 'econ', 'avg', 'sr', 'hat-trick', '4w', '5w', 'wides', 'nb'], dtype='object')
Top 20 wicket takers¶
In [14]:
# Convert columns 'wkts' and 'econ' to numeric, forcing errors to NaN (if any)
df_combined_bowling['wkts'] = pd.to_numeric(df_combined_bowling['wkts'], errors='coerce')
df_combined_bowling['econ'] = pd.to_numeric(df_combined_bowling['econ'], errors='coerce')
df_combined_bowling['overs'] = pd.to_numeric(df_combined_bowling['overs'], errors='coerce')
# Sort by 'wkts' (descending)
top_20_by_wkts = df_combined_bowling.sort_values(by=['wkts'], ascending=[False]).head(20)
top_20_by_wkts
Out[14]:
# | player | group | team | mat | inns | overs | runs | wkts | bbf | mdns | dots | econ | avg | sr | hat-trick | 4w | 5w | wides | nb | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | Satya Prakash Sahoo | REGIONAL LEAGUE SUD | BATCC-I | 13 | 12 | 107.1 | 274 | 20 | 10/ 4 | 15 | 485 | 2.56 | 13.70 | 32.1 | 0 | 2 | 0 | 32 | 5 |
1 | 2 | Amit Rajendra Desai | REGIONAL LEAGUE SUD | BATCC-I | 10 | 10 | 61.1 | 251 | 18 | 17/ 3 | 2 | 256 | 4.10 | 13.94 | 20.4 | 0 | 0 | 0 | 51 | 3 |
2 | 3 | Vineep Bhat | REGIONAL LEAGUE SUD | BATCC-I | 12 | 11 | 77.0 | 286 | 17 | 33/ 3 | 5 | 314 | 3.71 | 16.82 | 27.2 | 0 | 0 | 0 | 21 | 1 |
3 | 4 | Nitesh Singh | REGIONAL LEAGUE SUD | BATCC-I | 14 | 12 | 58.1 | 251 | 16 | 26/ 5 | 5 | 231 | 4.32 | 15.69 | 21.8 | 0 | 0 | 1 | 39 | 2 |
4 | 5 | Rohit Verma | Regional League Nord | BATCC-II | 10 | 10 | 59.0 | 413 | 15 | 30/ 4 | 2 | 200 | 7.00 | 27.53 | 23.6 | 0 | 1 | 0 | 68 | 4 |
5 | 6 | Rajesh Kumar Srivastava | Regional League Nord | BATCC-II | 7 | 7 | 46.4 | 270 | 13 | 27/ 3 | 3 | 189 | 5.79 | 20.77 | 21.5 | 0 | 0 | 0 | 72 | 0 |
6 | 7 | Manjunatha Muniramaiah | REGIONAL LEAGUE SUD | BATCC-I | 6 | 5 | 34.0 | 130 | 12 | 37/ 4 | 3 | 153 | 3.82 | 10.83 | 17.0 | 0 | 1 | 0 | 30 | 0 |
7 | 8 | Vineet Bhola | Regional League Nord | BATCC-II | 8 | 8 | 53.0 | 350 | 12 | 22/ 3 | 5 | 171 | 6.60 | 29.17 | 26.5 | 0 | 0 | 0 | 27 | 0 |
8 | 9 | Nitin Madan | REGIONAL LEAGUE SUD | BATCC-I | 11 | 10 | 62.2 | 244 | 11 | 30/ 3 | 5 | 257 | 3.91 | 22.18 | 34.0 | 0 | 0 | 0 | 11 | 2 |
27 | 1 | Haris Ali | South Centre - I | BATCC-III | 9 | 9 | 53.1 | 270 | 10 | 9/ 2 | 1 | 201 | 5.08 | 27.00 | 31.9 | 0 | 0 | 0 | 54 | 1 |
28 | 2 | Mohammed Shakir | South Centre - I | BATCC-III | 4 | 4 | 28.0 | 133 | 9 | 25/ 4 | 1 | 108 | 4.75 | 14.78 | 18.7 | 0 | 1 | 0 | 22 | 2 |
9 | 10 | Mohammed Shakir | Regional League Nord | BATCC-II | 5 | 5 | 37.3 | 163 | 9 | 20/ 3 | 2 | 153 | 4.35 | 18.11 | 25.0 | 0 | 0 | 0 | 23 | 1 |
29 | 3 | Abdul Nasir Kunari | South Centre - I | BATCC-III | 4 | 4 | 28.0 | 141 | 6 | 27/ 2 | 0 | 94 | 5.04 | 23.50 | 28.0 | 0 | 0 | 0 | 19 | 1 |
10 | 11 | Saurabh Singh Patel | Regional League Nord | BATCC-II | 11 | 8 | 28.0 | 159 | 6 | 15/ 2 | 0 | 100 | 5.68 | 26.50 | 28.0 | 0 | 0 | 0 | 14 | 1 |
11 | 12 | Manav Gidra | Regional League Nord | BATCC-II | 3 | 3 | 28.3 | 155 | 5 | 40/ 2 | 0 | 97 | 5.44 | 31.00 | 34.2 | 0 | 0 | 0 | 14 | 1 |
12 | 13 | Sasi Kiran Alur | REGIONAL LEAGUE SUD | BATCC-I | 12 | 8 | 19.4 | 127 | 5 | 9/ 1 | 1 | 74 | 6.46 | 25.40 | 23.6 | 0 | 0 | 0 | 17 | 4 |
14 | 15 | Dinesh Sasi Kumar | Regional League Nord | BATCC-II | 6 | 5 | 14.0 | 112 | 5 | 54/ 5 | 0 | 47 | 8.00 | 22.40 | 16.8 | 0 | 0 | 1 | 27 | 5 |
13 | 14 | Shahroz Ismail | Regional League Nord | BATCC-II | 5 | 5 | 13.0 | 91 | 5 | 36/ 2 | 1 | 44 | 7.00 | 18.20 | 15.6 | 0 | 0 | 0 | 15 | 4 |
31 | 5 | Muhammed Minhaj Madathodi | South Centre - I | BATCC-III | 5 | 5 | 21.0 | 169 | 4 | 11/ 1 | 0 | 61 | 8.05 | 42.25 | 31.5 | 0 | 0 | 0 | 25 | 0 |
30 | 4 | Shashank Bhoskar | South Centre - I | BATCC-III | 3 | 3 | 16.0 | 81 | 4 | 22/ 3 | 2 | 57 | 5.06 | 20.25 | 24.0 | 0 | 0 | 0 | 13 | 0 |
Top 20 by economy rate. Only those conisdered who have bowled more than the team mean.¶
In [15]:
# Calculate the mean of 'overs' column to use as 'n'
n = df_combined_bowling['overs'].mean()
print('Mean of overs across players:', n)
# Filter players who have bowled min n overs
filtered_df = df_combined_bowling[df_combined_bowling['overs'] >= n]
# Sort by 'economy rate' in ascending order to find the top 10 players by economy
top_20_by_economy = filtered_df.sort_values(by=['econ'], ascending=[True]).head(20)
top_20_by_economy
Mean of overs across players: 24.147727272727273
Out[15]:
# | player | group | team | mat | inns | overs | runs | wkts | bbf | mdns | dots | econ | avg | sr | hat-trick | 4w | 5w | wides | nb | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | Satya Prakash Sahoo | REGIONAL LEAGUE SUD | BATCC-I | 13 | 12 | 107.1 | 274 | 20 | 10/ 4 | 15 | 485 | 2.56 | 13.70 | 32.1 | 0 | 2 | 0 | 32 | 5 |
2 | 3 | Vineep Bhat | REGIONAL LEAGUE SUD | BATCC-I | 12 | 11 | 77.0 | 286 | 17 | 33/ 3 | 5 | 314 | 3.71 | 16.82 | 27.2 | 0 | 0 | 0 | 21 | 1 |
6 | 7 | Manjunatha Muniramaiah | REGIONAL LEAGUE SUD | BATCC-I | 6 | 5 | 34.0 | 130 | 12 | 37/ 4 | 3 | 153 | 3.82 | 10.83 | 17.0 | 0 | 1 | 0 | 30 | 0 |
8 | 9 | Nitin Madan | REGIONAL LEAGUE SUD | BATCC-I | 11 | 10 | 62.2 | 244 | 11 | 30/ 3 | 5 | 257 | 3.91 | 22.18 | 34.0 | 0 | 0 | 0 | 11 | 2 |
1 | 2 | Amit Rajendra Desai | REGIONAL LEAGUE SUD | BATCC-I | 10 | 10 | 61.1 | 251 | 18 | 17/ 3 | 2 | 256 | 4.10 | 13.94 | 20.4 | 0 | 0 | 0 | 51 | 3 |
3 | 4 | Nitesh Singh | REGIONAL LEAGUE SUD | BATCC-I | 14 | 12 | 58.1 | 251 | 16 | 26/ 5 | 5 | 231 | 4.32 | 15.69 | 21.8 | 0 | 0 | 1 | 39 | 2 |
9 | 10 | Mohammed Shakir | Regional League Nord | BATCC-II | 5 | 5 | 37.3 | 163 | 9 | 20/ 3 | 2 | 153 | 4.35 | 18.11 | 25.0 | 0 | 0 | 0 | 23 | 1 |
28 | 2 | Mohammed Shakir | South Centre - I | BATCC-III | 4 | 4 | 28.0 | 133 | 9 | 25/ 4 | 1 | 108 | 4.75 | 14.78 | 18.7 | 0 | 1 | 0 | 22 | 2 |
29 | 3 | Abdul Nasir Kunari | South Centre - I | BATCC-III | 4 | 4 | 28.0 | 141 | 6 | 27/ 2 | 0 | 94 | 5.04 | 23.50 | 28.0 | 0 | 0 | 0 | 19 | 1 |
27 | 1 | Haris Ali | South Centre - I | BATCC-III | 9 | 9 | 53.1 | 270 | 10 | 9/ 2 | 1 | 201 | 5.08 | 27.00 | 31.9 | 0 | 0 | 0 | 54 | 1 |
11 | 12 | Manav Gidra | Regional League Nord | BATCC-II | 3 | 3 | 28.3 | 155 | 5 | 40/ 2 | 0 | 97 | 5.44 | 31.00 | 34.2 | 0 | 0 | 0 | 14 | 1 |
10 | 11 | Saurabh Singh Patel | Regional League Nord | BATCC-II | 11 | 8 | 28.0 | 159 | 6 | 15/ 2 | 0 | 100 | 5.68 | 26.50 | 28.0 | 0 | 0 | 0 | 14 | 1 |
5 | 6 | Rajesh Kumar Srivastava | Regional League Nord | BATCC-II | 7 | 7 | 46.4 | 270 | 13 | 27/ 3 | 3 | 189 | 5.79 | 20.77 | 21.5 | 0 | 0 | 0 | 72 | 0 |
7 | 8 | Vineet Bhola | Regional League Nord | BATCC-II | 8 | 8 | 53.0 | 350 | 12 | 22/ 3 | 5 | 171 | 6.60 | 29.17 | 26.5 | 0 | 0 | 0 | 27 | 0 |
4 | 5 | Rohit Verma | Regional League Nord | BATCC-II | 10 | 10 | 59.0 | 413 | 15 | 30/ 4 | 2 | 200 | 7.00 | 27.53 | 23.6 | 0 | 1 | 0 | 68 | 4 |
T20 Bowling¶
In [16]:
# Load the data from both Excel files
df_regionalliga_bowling = pd.read_excel('T20/T20 1.Verbandsliga - 2024 Bowling Records - Bayerischer Cricket Verband e.V..xlsx')
df_verbandsliga_bowling = pd.read_excel('T20/T20 2. Verbandsliga - 2024 Bowling Records - Bayerischer Cricket Verband e.V..xlsx')
# Standardize column names
df_regionalliga_bowling.columns = df_regionalliga_bowling.columns.str.strip().str.lower()
df_verbandsliga_bowling.columns = df_verbandsliga_bowling.columns.str.strip().str.lower()
# Ensure both DataFrames have the same columns
df_regionalliga_bowling = df_regionalliga_bowling[df_verbandsliga_bowling.columns]
# Merge the two DataFrames along rows
df_combined_bowling = pd.concat([df_regionalliga_bowling, df_verbandsliga_bowling], ignore_index=True)
In [17]:
output_file = 'T20/Combined_BCV_Bowling_Records_2024.xlsx'
df_combined_bowling.to_excel(output_file, index=False)
Top 20 wicket takers¶
In [18]:
# Convert columns 'wkts' and 'econ' to numeric, forcing errors to NaN (if any)
df_combined_bowling['wkts'] = pd.to_numeric(df_combined_bowling['wkts'], errors='coerce')
df_combined_bowling['econ'] = pd.to_numeric(df_combined_bowling['econ'], errors='coerce')
df_combined_bowling['overs'] = pd.to_numeric(df_combined_bowling['overs'], errors='coerce')
# Sort by 'wkts' (descending)
top_20_by_wkts = df_combined_bowling.sort_values(by=['wkts'], ascending=[False]).head(20)
top_20_by_wkts
Out[18]:
# | player | group | team | mat | inns | overs | runs | wkts | bbf | mdns | dots | econ | avg | sr | hat-trick | 4w | 5w | wides | nb | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | Vineet Bhola | B | BATCC-II | 10 | 9 | 32.0 | 286 | 20 | 28/ 4 | 0 | 83 | 8.94 | 14.30 | 9.6 | 1 | 1 | 0 | 18 | 3 |
1 | 2 | Vineep Bhat | A | BATCC-I | 10 | 9 | 32.2 | 179 | 19 | 7/ 5 | 1 | 103 | 5.54 | 9.42 | 10.2 | 0 | 1 | 1 | 15 | 0 |
2 | 3 | Satya Prakash Sahoo | A | BATCC-I | 9 | 9 | 36.0 | 128 | 15 | 1/ 3 | 4 | 144 | 3.56 | 8.53 | 14.4 | 0 | 0 | 0 | 19 | 1 |
3 | 4 | Amit Rajendra Desai | A | BATCC-I | 10 | 10 | 33.3 | 188 | 15 | 22/ 4 | 1 | 115 | 5.61 | 12.53 | 13.4 | 0 | 1 | 0 | 22 | 1 |
4 | 5 | Venkat Vinay Ayyagari | A | BATCC-I | 12 | 8 | 19.0 | 145 | 12 | 11/ 2 | 0 | 60 | 7.63 | 12.08 | 9.5 | 0 | 0 | 0 | 13 | 4 |
26 | 1 | Moynul Hasan | B | BATCC-III | 6 | 6 | 20.0 | 147 | 8 | 21/ 2 | 1 | 62 | 7.35 | 18.38 | 15.0 | 0 | 0 | 0 | 12 | 4 |
5 | 6 | Rohit Verma | B | BATCC-II | 10 | 10 | 31.5 | 282 | 8 | 23/ 3 | 0 | 81 | 8.86 | 35.25 | 23.9 | 0 | 0 | 0 | 37 | 7 |
6 | 7 | Nitin Madan | A | BATCC-I | 8 | 7 | 26.0 | 124 | 6 | 18/ 3 | 2 | 85 | 4.77 | 20.67 | 26.0 | 0 | 0 | 0 | 12 | 1 |
27 | 2 | Shobhit Madan | B | BATCC-III | 5 | 4 | 11.2 | 57 | 6 | 13/ 3 | 0 | 38 | 5.03 | 9.50 | 11.3 | 0 | 0 | 0 | 6 | 1 |
7 | 8 | Bhavin Kantilal Solanki | A | BATCC-I | 6 | 4 | 10.0 | 63 | 5 | 19/ 3 | 0 | 36 | 6.30 | 12.60 | 12.0 | 0 | 0 | 0 | 14 | 1 |
8 | 9 | Shashidhara Hanumaiah Veerabhadraiah | A | BATCC-I | 11 | 7 | 19.0 | 87 | 4 | 7/ 2 | 3 | 75 | 4.58 | 21.75 | 28.5 | 0 | 0 | 0 | 15 | 0 |
9 | 10 | Deepak Kamal | B | BATCC-II | 9 | 2 | 5.0 | 47 | 4 | 33/ 4 | 0 | 15 | 9.40 | 11.75 | 7.5 | 0 | 1 | 0 | 2 | 0 |
28 | 3 | Ajay Somanath | B | BATCC-III | 1 | 1 | 4.0 | 14 | 4 | 14/ 4 | 0 | 17 | 3.50 | 3.50 | 6.0 | 1 | 1 | 0 | 0 | 1 |
29 | 4 | Haris Ali | B | BATCC-III | 8 | 7 | 26.0 | 149 | 4 | 7/ 2 | 0 | 90 | 5.73 | 37.25 | 39.0 | 0 | 0 | 0 | 20 | 3 |
30 | 5 | Fahad Munawwar | B | BATCC-III | 3 | 2 | 7.0 | 54 | 4 | 25/ 3 | 0 | 19 | 7.71 | 13.50 | 10.5 | 0 | 0 | 0 | 3 | 3 |
31 | 6 | Apurva Sharma | B | BATCC-III | 1 | 1 | 1.0 | 7 | 3 | 7/ 3 | 0 | 3 | 7.00 | 2.33 | 2.0 | 0 | 0 | 0 | 0 | 0 |
32 | 7 | Shashank Bhoskar | B | BATCC-III | 2 | 2 | 8.0 | 57 | 3 | 16/ 2 | 0 | 19 | 7.12 | 19.00 | 16.0 | 0 | 0 | 0 | 6 | 1 |
33 | 8 | Sabarinath Sabarinath | B | BATCC-III | 3 | 3 | 7.0 | 61 | 3 | 7/ 1 | 0 | 21 | 8.71 | 20.33 | 14.0 | 0 | 0 | 0 | 5 | 1 |
13 | 14 | Rajesh Kumar Srivastava | B | BATCC-II | 7 | 4 | 10.0 | 77 | 3 | 18/ 3 | 1 | 33 | 7.70 | 25.67 | 20.0 | 0 | 0 | 0 | 9 | 2 |
34 | 9 | Abhijeesh Maroli | B | BATCC-III | 5 | 4 | 5.0 | 57 | 3 | 30/ 3 | 0 | 15 | 11.40 | 19.00 | 10.0 | 0 | 0 | 0 | 13 | 6 |
Top 20 by economy rate. Only those conisdered who have bowled more than the team mean.¶
In [19]:
# Calculate the mean of 'overs' column to use as 'n'
n = df_combined_bowling['overs'].mean()
print('Mean of overs across players:', n)
# Filter players who have bowled min n overs
filtered_df = df_combined_bowling[df_combined_bowling['overs'] >= n]
# Sort by 'economy rate' in ascending order to find the top 10 players by economy
top_20_by_economy = filtered_df.sort_values(by=['econ'], ascending=[True]).head(20)
top_20_by_economy
Mean of overs across players: 13.315384615384614
Out[19]:
# | player | group | team | mat | inns | overs | runs | wkts | bbf | mdns | dots | econ | avg | sr | hat-trick | 4w | 5w | wides | nb | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2 | 3 | Satya Prakash Sahoo | A | BATCC-I | 9 | 9 | 36.0 | 128 | 15 | 1/ 3 | 4 | 144 | 3.56 | 8.53 | 14.4 | 0 | 0 | 0 | 19 | 1 |
8 | 9 | Shashidhara Hanumaiah Veerabhadraiah | A | BATCC-I | 11 | 7 | 19.0 | 87 | 4 | 7/ 2 | 3 | 75 | 4.58 | 21.75 | 28.5 | 0 | 0 | 0 | 15 | 0 |
6 | 7 | Nitin Madan | A | BATCC-I | 8 | 7 | 26.0 | 124 | 6 | 18/ 3 | 2 | 85 | 4.77 | 20.67 | 26.0 | 0 | 0 | 0 | 12 | 1 |
1 | 2 | Vineep Bhat | A | BATCC-I | 10 | 9 | 32.2 | 179 | 19 | 7/ 5 | 1 | 103 | 5.54 | 9.42 | 10.2 | 0 | 1 | 1 | 15 | 0 |
3 | 4 | Amit Rajendra Desai | A | BATCC-I | 10 | 10 | 33.3 | 188 | 15 | 22/ 4 | 1 | 115 | 5.61 | 12.53 | 13.4 | 0 | 1 | 0 | 22 | 1 |
29 | 4 | Haris Ali | B | BATCC-III | 8 | 7 | 26.0 | 149 | 4 | 7/ 2 | 0 | 90 | 5.73 | 37.25 | 39.0 | 0 | 0 | 0 | 20 | 3 |
10 | 11 | Nitesh Singh | A | BATCC-I | 8 | 7 | 15.5 | 93 | 3 | 11/ 2 | 0 | 47 | 5.87 | 31.00 | 31.7 | 0 | 0 | 0 | 18 | 0 |
17 | 18 | Manjunatha Muniramaiah | A | BATCC-I | 5 | 5 | 20.0 | 127 | 2 | 19/ 2 | 1 | 61 | 6.35 | 63.50 | 60.0 | 0 | 0 | 0 | 16 | 1 |
12 | 13 | Haris Ali | A | BATCC-I | 6 | 6 | 16.0 | 106 | 3 | 8/ 1 | 0 | 46 | 6.62 | 35.33 | 32.0 | 0 | 0 | 0 | 15 | 0 |
26 | 1 | Moynul Hasan | B | BATCC-III | 6 | 6 | 20.0 | 147 | 8 | 21/ 2 | 1 | 62 | 7.35 | 18.38 | 15.0 | 0 | 0 | 0 | 12 | 4 |
4 | 5 | Venkat Vinay Ayyagari | A | BATCC-I | 12 | 8 | 19.0 | 145 | 12 | 11/ 2 | 0 | 60 | 7.63 | 12.08 | 9.5 | 0 | 0 | 0 | 13 | 4 |
5 | 6 | Rohit Verma | B | BATCC-II | 10 | 10 | 31.5 | 282 | 8 | 23/ 3 | 0 | 81 | 8.86 | 35.25 | 23.9 | 0 | 0 | 0 | 37 | 7 |
0 | 1 | Vineet Bhola | B | BATCC-II | 10 | 9 | 32.0 | 286 | 20 | 28/ 4 | 0 | 83 | 8.94 | 14.30 | 9.6 | 1 | 1 | 0 | 18 | 3 |
22 | 23 | Manav Gidra | B | BATCC-II | 6 | 6 | 16.0 | 159 | 2 | 11/ 1 | 0 | 36 | 9.94 | 79.50 | 48.0 | 0 | 0 | 0 | 11 | 4 |