diff --git a/supporting-blog-content/Boston-Celtics-Demo/load_data_and_write_queries.ipynb b/supporting-blog-content/Boston-Celtics-Demo/load_data_and_write_queries.ipynb new file mode 100644 index 00000000..52632039 --- /dev/null +++ b/supporting-blog-content/Boston-Celtics-Demo/load_data_and_write_queries.ipynb @@ -0,0 +1,1591 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "a872c6c5-9901-42f6-9651-d2c14bfb2ed1", + "metadata": {}, + "outputs": [], + "source": [ + "from nba_api.stats.static import teams\n", + "from nba_api.stats.endpoints import leaguegamefinder\n", + "from elasticsearch import Elasticsearch, helpers\n", + "from getpass import getpass" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d11e91d8-f662-46c9-9daa-7f6a4f111bf7", + "metadata": {}, + "outputs": [], + "source": [ + "nba_teams = teams.get_teams()\n", + "celtics = [team for team in nba_teams if team['abbreviation'] == 'BOS'][0]\n", + "celtics_id = celtics['id']" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c6132d82-914d-449f-80c2-5788c9dba54e", + "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", + "
SEASON_IDTEAM_IDTEAM_ABBREVIATIONTEAM_NAMEGAME_IDGAME_DATEMATCHUPWLMINPTS...FT_PCTOREBDREBREBASTSTLBLKTOVPFPLUS_MINUS
0220231610612738BOSBoston Celtics00223005282024-01-11BOS @ MILL241102...0.833625312255613-33.0
1220231610612738BOSBoston Celtics00223005172024-01-10BOS vs. MINW263127...0.9687394621548197.0
2220231610612738BOSBoston Celtics00223005072024-01-08BOS @ INDL240131...0.69013294226381520-2.0
3220231610612738BOSBoston Celtics00223004932024-01-06BOS @ INDW240118...0.5261343562666172017.0
4220231610612738BOSBoston Celtics00223004792024-01-05BOS vs. UTAW240126...0.861947562498122329.0
\n", + "

5 rows × 28 columns

\n", + "
" + ], + "text/plain": [ + " SEASON_ID TEAM_ID TEAM_ABBREVIATION TEAM_NAME GAME_ID \\\n", + "0 22023 1610612738 BOS Boston Celtics 0022300528 \n", + "1 22023 1610612738 BOS Boston Celtics 0022300517 \n", + "2 22023 1610612738 BOS Boston Celtics 0022300507 \n", + "3 22023 1610612738 BOS Boston Celtics 0022300493 \n", + "4 22023 1610612738 BOS Boston Celtics 0022300479 \n", + "\n", + " GAME_DATE MATCHUP WL MIN PTS ... FT_PCT OREB DREB REB AST \\\n", + "0 2024-01-11 BOS @ MIL L 241 102 ... 0.833 6 25 31 22 \n", + "1 2024-01-10 BOS vs. MIN W 263 127 ... 0.968 7 39 46 21 \n", + "2 2024-01-08 BOS @ IND L 240 131 ... 0.690 13 29 42 26 \n", + "3 2024-01-06 BOS @ IND W 240 118 ... 0.526 13 43 56 26 \n", + "4 2024-01-05 BOS vs. UTA W 240 126 ... 0.861 9 47 56 24 \n", + "\n", + " STL BLK TOV PF PLUS_MINUS \n", + "0 5 5 6 13 -33.0 \n", + "1 5 4 8 19 7.0 \n", + "2 3 8 15 20 -2.0 \n", + "3 6 6 17 20 17.0 \n", + "4 9 8 12 23 29.0 \n", + "\n", + "[5 rows x 28 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gamefinder = leaguegamefinder.LeagueGameFinder(team_id_nullable=celtics_id)\n", + "games = gamefinder.get_data_frames()[0]\n", + "games.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "774aacde-f6a8-42bd-9925-53d346a108e7", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SEASON_IDTEAM_IDTEAM_ABBREVIATIONTEAM_NAMEGAME_IDGAME_DATEMATCHUPWLMINPTS...FT_PCTOREBDREBREBASTSTLBLKTOVPFPLUS_MINUS
0220231610612738BOSBoston Celtics00223005282024-01-11BOS @ MILL241102...0.833625312255613-33.0
1220231610612738BOSBoston Celtics00223005172024-01-10BOS vs. MINW263127...0.9687394621548197.0
2220231610612738BOSBoston Celtics00223005072024-01-08BOS @ INDL240131...0.69013294226381520-2.0
3220231610612738BOSBoston Celtics00223004932024-01-06BOS @ INDW240118...0.5261343562666172017.0
4220231610612738BOSBoston Celtics00223004792024-01-05BOS vs. UTAW240126...0.861947562498122329.0
5220231610612738BOSBoston Celtics00223004622024-01-02BOS @ OKCL241123...0.828173047337101415-4.0
6220231610612738BOSBoston Celtics00223004482023-12-31BOS @ SASW240134...0.7731344572967101233.0
7220231610612738BOSBoston Celtics00223004322023-12-29BOS vs. TORW239120...0.850133952293616172.0
8220231610612738BOSBoston Celtics00223004212023-12-28BOS vs. DETW266128...0.8401132432510412156.0
9220231610612738BOSBoston Celtics00223004032023-12-25BOS @ LALW240126...0.750113344318781711.0
10220231610612738BOSBoston Celtics00223003892023-12-23BOS @ LACW241145...0.786153651334591937.0
11220231610612738BOSBoston Celtics00223003732023-12-20BOS @ SACW239144...0.8331436503561091725.0
12220231610612738BOSBoston Celtics00223003622023-12-19BOS @ GSWL264126...0.8821837552865813-6.0
13220231610612738BOSBoston Celtics00223003442023-12-17BOS vs. ORLW239114...0.87510455518410141917.0
14220231610612738BOSBoston Celtics00223003292023-12-15BOS vs. ORLW240128...0.7009253431147102217.0
15220231610612738BOSBoston Celtics00223003192023-12-14BOS vs. CLEW240116...0.850133144227813159.0
16220231610612738BOSBoston Celtics00223003052023-12-12BOS vs. CLEW241120...1.000123345239913137.0
17220231610612738BOSBoston Celtics00223012272023-12-08BOS vs. NYKW240133...0.85782634248571910.0
18220231610612738BOSBoston Celtics00223012022023-12-04BOS @ INDL239112...0.66713435627591719-10.0
19220231610612738BOSBoston Celtics00223002752023-12-01BOS vs. PHIW239125...0.8611036462510820186.0
20220231610612738BOSBoston Celtics00223000532023-11-28BOS vs. CHIW241124...0.7501141523669161827.0
21220231610612738BOSBoston Celtics00223002462023-11-26BOS vs. ATLW239113...0.8001840582493121910.0
22220231610612738BOSBoston Celtics00223000432023-11-24BOS @ ORLL24096...0.73042731171041418-17.0
23220231610612738BOSBoston Celtics00223002282023-11-22BOS vs. MILW240119...0.82443943273515153.0
24220231610612738BOSBoston Celtics00223002172023-11-20BOS @ CHAL264118...0.64311374819681315-3.0
25220231610612738BOSBoston Celtics00223002132023-11-19BOS @ MEMW241102...0.800936452061017192.0
26220231610612738BOSBoston Celtics00223000312023-11-17BOS @ TORW240108...0.88983644295410133.0
27220231610612738BOSBoston Celtics00223001942023-11-15BOS @ PHIW239117...0.789123345237891510.0
28220231610612738BOSBoston Celtics00223001882023-11-13BOS vs. NYKW238114...0.938829372733112216.0
29220231610612738BOSBoston Celtics00223001742023-11-11BOS vs. TORW242117...0.615541463014121423.0
30220231610612738BOSBoston Celtics00223000102023-11-10BOS vs. BKNW241121...0.714173552295371314.0
31220231610612738BOSBoston Celtics00223001592023-11-08BOS @ PHIL241103...0.8429344328861213-3.0
32220231610612738BOSBoston Celtics00223001542023-11-06BOS @ MINL265109...0.765113445201321626-5.0
33220231610612738BOSBoston Celtics00223001362023-11-04BOS @ BKNW240124...0.8521040502246111710.0
34220231610612738BOSBoston Celtics00223001182023-11-01BOS vs. INDW239155...0.9641146572752111951.0
35220231610612738BOSBoston Celtics00223001032023-10-30BOS @ WASW243126...0.71415365131116172119.0
36220231610612738BOSBoston Celtics00223000802023-10-27BOS vs. MIAW239119...0.684163955207615198.0
37220231610612738BOSBoston Celtics00223000652023-10-25BOS @ NYKW241108...0.846739461861113224.0
\n", + "

38 rows × 28 columns

\n", + "
" + ], + "text/plain": [ + " SEASON_ID TEAM_ID TEAM_ABBREVIATION TEAM_NAME GAME_ID \\\n", + "0 22023 1610612738 BOS Boston Celtics 0022300528 \n", + "1 22023 1610612738 BOS Boston Celtics 0022300517 \n", + "2 22023 1610612738 BOS Boston Celtics 0022300507 \n", + "3 22023 1610612738 BOS Boston Celtics 0022300493 \n", + "4 22023 1610612738 BOS Boston Celtics 0022300479 \n", + "5 22023 1610612738 BOS Boston Celtics 0022300462 \n", + "6 22023 1610612738 BOS Boston Celtics 0022300448 \n", + "7 22023 1610612738 BOS Boston Celtics 0022300432 \n", + "8 22023 1610612738 BOS Boston Celtics 0022300421 \n", + "9 22023 1610612738 BOS Boston Celtics 0022300403 \n", + "10 22023 1610612738 BOS Boston Celtics 0022300389 \n", + "11 22023 1610612738 BOS Boston Celtics 0022300373 \n", + "12 22023 1610612738 BOS Boston Celtics 0022300362 \n", + "13 22023 1610612738 BOS Boston Celtics 0022300344 \n", + "14 22023 1610612738 BOS Boston Celtics 0022300329 \n", + "15 22023 1610612738 BOS Boston Celtics 0022300319 \n", + "16 22023 1610612738 BOS Boston Celtics 0022300305 \n", + "17 22023 1610612738 BOS Boston Celtics 0022301227 \n", + "18 22023 1610612738 BOS Boston Celtics 0022301202 \n", + "19 22023 1610612738 BOS Boston Celtics 0022300275 \n", + "20 22023 1610612738 BOS Boston Celtics 0022300053 \n", + "21 22023 1610612738 BOS Boston Celtics 0022300246 \n", + "22 22023 1610612738 BOS Boston Celtics 0022300043 \n", + "23 22023 1610612738 BOS Boston Celtics 0022300228 \n", + "24 22023 1610612738 BOS Boston Celtics 0022300217 \n", + "25 22023 1610612738 BOS Boston Celtics 0022300213 \n", + "26 22023 1610612738 BOS Boston Celtics 0022300031 \n", + "27 22023 1610612738 BOS Boston Celtics 0022300194 \n", + "28 22023 1610612738 BOS Boston Celtics 0022300188 \n", + "29 22023 1610612738 BOS Boston Celtics 0022300174 \n", + "30 22023 1610612738 BOS Boston Celtics 0022300010 \n", + "31 22023 1610612738 BOS Boston Celtics 0022300159 \n", + "32 22023 1610612738 BOS Boston Celtics 0022300154 \n", + "33 22023 1610612738 BOS Boston Celtics 0022300136 \n", + "34 22023 1610612738 BOS Boston Celtics 0022300118 \n", + "35 22023 1610612738 BOS Boston Celtics 0022300103 \n", + "36 22023 1610612738 BOS Boston Celtics 0022300080 \n", + "37 22023 1610612738 BOS Boston Celtics 0022300065 \n", + "\n", + " GAME_DATE MATCHUP WL MIN PTS ... FT_PCT OREB DREB REB AST \\\n", + "0 2024-01-11 BOS @ MIL L 241 102 ... 0.833 6 25 31 22 \n", + "1 2024-01-10 BOS vs. MIN W 263 127 ... 0.968 7 39 46 21 \n", + "2 2024-01-08 BOS @ IND L 240 131 ... 0.690 13 29 42 26 \n", + "3 2024-01-06 BOS @ IND W 240 118 ... 0.526 13 43 56 26 \n", + "4 2024-01-05 BOS vs. UTA W 240 126 ... 0.861 9 47 56 24 \n", + "5 2024-01-02 BOS @ OKC L 241 123 ... 0.828 17 30 47 33 \n", + "6 2023-12-31 BOS @ SAS W 240 134 ... 0.773 13 44 57 29 \n", + "7 2023-12-29 BOS vs. TOR W 239 120 ... 0.850 13 39 52 29 \n", + "8 2023-12-28 BOS vs. DET W 266 128 ... 0.840 11 32 43 25 \n", + "9 2023-12-25 BOS @ LAL W 240 126 ... 0.750 11 33 44 31 \n", + "10 2023-12-23 BOS @ LAC W 241 145 ... 0.786 15 36 51 33 \n", + "11 2023-12-20 BOS @ SAC W 239 144 ... 0.833 14 36 50 35 \n", + "12 2023-12-19 BOS @ GSW L 264 126 ... 0.882 18 37 55 28 \n", + "13 2023-12-17 BOS vs. ORL W 239 114 ... 0.875 10 45 55 18 \n", + "14 2023-12-15 BOS vs. ORL W 240 128 ... 0.700 9 25 34 31 \n", + "15 2023-12-14 BOS vs. CLE W 240 116 ... 0.850 13 31 44 22 \n", + "16 2023-12-12 BOS vs. CLE W 241 120 ... 1.000 12 33 45 23 \n", + "17 2023-12-08 BOS vs. NYK W 240 133 ... 0.857 8 26 34 24 \n", + "18 2023-12-04 BOS @ IND L 239 112 ... 0.667 13 43 56 27 \n", + "19 2023-12-01 BOS vs. PHI W 239 125 ... 0.861 10 36 46 25 \n", + "20 2023-11-28 BOS vs. CHI W 241 124 ... 0.750 11 41 52 36 \n", + "21 2023-11-26 BOS vs. ATL W 239 113 ... 0.800 18 40 58 24 \n", + "22 2023-11-24 BOS @ ORL L 240 96 ... 0.730 4 27 31 17 \n", + "23 2023-11-22 BOS vs. MIL W 240 119 ... 0.824 4 39 43 27 \n", + "24 2023-11-20 BOS @ CHA L 264 118 ... 0.643 11 37 48 19 \n", + "25 2023-11-19 BOS @ MEM W 241 102 ... 0.800 9 36 45 20 \n", + "26 2023-11-17 BOS @ TOR W 240 108 ... 0.889 8 36 44 29 \n", + "27 2023-11-15 BOS @ PHI W 239 117 ... 0.789 12 33 45 23 \n", + "28 2023-11-13 BOS vs. NYK W 238 114 ... 0.938 8 29 37 27 \n", + "29 2023-11-11 BOS vs. TOR W 242 117 ... 0.615 5 41 46 30 \n", + "30 2023-11-10 BOS vs. BKN W 241 121 ... 0.714 17 35 52 29 \n", + "31 2023-11-08 BOS @ PHI L 241 103 ... 0.842 9 34 43 28 \n", + "32 2023-11-06 BOS @ MIN L 265 109 ... 0.765 11 34 45 20 \n", + "33 2023-11-04 BOS @ BKN W 240 124 ... 0.852 10 40 50 22 \n", + "34 2023-11-01 BOS vs. IND W 239 155 ... 0.964 11 46 57 27 \n", + "35 2023-10-30 BOS @ WAS W 243 126 ... 0.714 15 36 51 31 \n", + "36 2023-10-27 BOS vs. MIA W 239 119 ... 0.684 16 39 55 20 \n", + "37 2023-10-25 BOS @ NYK W 241 108 ... 0.846 7 39 46 18 \n", + "\n", + " STL BLK TOV PF PLUS_MINUS \n", + "0 5 5 6 13 -33.0 \n", + "1 5 4 8 19 7.0 \n", + "2 3 8 15 20 -2.0 \n", + "3 6 6 17 20 17.0 \n", + "4 9 8 12 23 29.0 \n", + "5 7 10 14 15 -4.0 \n", + "6 6 7 10 12 33.0 \n", + "7 3 6 16 17 2.0 \n", + "8 10 4 12 15 6.0 \n", + "9 8 7 8 17 11.0 \n", + "10 4 5 9 19 37.0 \n", + "11 6 10 9 17 25.0 \n", + "12 6 5 8 13 -6.0 \n", + "13 4 10 14 19 17.0 \n", + "14 14 7 10 22 17.0 \n", + "15 7 8 13 15 9.0 \n", + "16 9 9 13 13 7.0 \n", + "17 8 5 7 19 10.0 \n", + "18 5 9 17 19 -10.0 \n", + "19 10 8 20 18 6.0 \n", + "20 6 9 16 18 27.0 \n", + "21 9 3 12 19 10.0 \n", + "22 10 4 14 18 -17.0 \n", + "23 3 5 15 15 3.0 \n", + "24 6 8 13 15 -3.0 \n", + "25 6 10 17 19 2.0 \n", + "26 5 4 10 13 3.0 \n", + "27 7 8 9 15 10.0 \n", + "28 3 3 11 22 16.0 \n", + "29 1 4 12 14 23.0 \n", + "30 5 3 7 13 14.0 \n", + "31 8 6 12 13 -3.0 \n", + "32 13 2 16 26 -5.0 \n", + "33 4 6 11 17 10.0 \n", + "34 5 2 11 19 51.0 \n", + "35 11 6 17 21 19.0 \n", + "36 7 6 15 19 8.0 \n", + "37 6 11 13 22 4.0 \n", + "\n", + "[38 rows x 28 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "current_season = games.loc[(games['GAME_DATE'] >= '2023-10-24') & (games['GAME_DATE'] <= '2024-06-20')]\n", + "current_season" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "324399d2-d7d5-45ac-b8c3-51d298836510", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "current_season.isnull().values.any()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "57573682-c9e8-49b0-951b-0a09921ce87a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elastic Cloud ID: ········\n", + "API Key: ········\n" + ] + } + ], + "source": [ + "elastic_cloud_id = getpass(\"Elastic Cloud ID: \")\n", + "elastic_api_key = getpass(\"API Key: \")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "25c1d15c-9cc7-4a42-a525-8a8ef62b47c4", + "metadata": {}, + "outputs": [], + "source": [ + "es = Elasticsearch(cloud_id=elastic_cloud_id, api_key=elastic_api_key)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5d5742bf-a9b2-4363-917d-01f1debf3734", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ObjectApiResponse({'acknowledged': True, 'shards_acknowledged': True, 'index': 'boston_celtics_current_season'})" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "es.indices.create(index=\"boston_celtics_current_season\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "154c9f25-635f-40b1-98b9-2598a66702e6", + "metadata": {}, + "outputs": [], + "source": [ + "timeframe = 'boston_celtics_current_season'\n", + "\n", + "def doc_generator(df, timeframe):\n", + " for index, document in df.iterrows():\n", + " yield {\n", + " \"_index\": timeframe, \n", + " \"_id\": f\"{document['GAME_ID']}\",\n", + " \"_source\": document.to_dict(),\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "06d6ff03-b166-4475-a976-b02b261bcecc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(38, [])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "helpers.bulk(es, doc_generator(current_season, timeframe))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "1de256ef-f264-4f5f-817c-a6ec3694361f", + "metadata": {}, + "outputs": [], + "source": [ + "search_query = {\n", + " \"query\": {\n", + " \"match\": {\n", + " \"WL\": \"W\"\n", + " }\n", + " }\n", + "}\n", + "\n", + "games_won = es.count(index=\"boston_celtics_current_season\", body=search_query)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "90785f66-10aa-41e1-87e7-e90bc6f0c196", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The Celtics won 29 games this season so far.\n" + ] + } + ], + "source": [ + "print(f\"The Celtics won {games_won['count']} games this season so far.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "9c255721-551d-4d6a-aefe-a5e62fdd4cd7", + "metadata": {}, + "outputs": [], + "source": [ + "streak_query = {\n", + " \"size\": 1000, \n", + " \"sort\": [\n", + " {\n", + " \"GAME_DATE\": {\n", + " \"order\": \"asc\"\n", + " }\n", + " }\n", + " ],\n", + " \"_source\": [\"GAME_DATE\", \"WL\"]\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "cfd4dfc9-11d5-4798-8940-f596e4ef87fc", + "metadata": {}, + "outputs": [], + "source": [ + "streak_search = es.search(\n", + " index=\"boston_celtics_current_season\",\n", + " body=streak_query)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "66b02cff-2334-4ac8-a2c4-1fb616202b27", + "metadata": {}, + "outputs": [], + "source": [ + "gs = [hit['_source'] for hit in streak_search['hits']['hits']]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "d5665358-1233-4939-bde9-6690321cb8bf", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[('W', 6), ('W', 6), ('W', 5), ('W', 5), ('W', 3)]\n" + ] + } + ], + "source": [ + "streaks = []\n", + "current_streak = 1\n", + "for i in range(1, len(gs)):\n", + " if gs[i]['WL'] == gs[i-1]['WL']:\n", + " current_streak += 1\n", + " else:\n", + " streaks.append((gs[i-1]['WL'], current_streak))\n", + " current_streak = 1\n", + "\n", + "\n", + "streaks.append((gs[-1]['WL'], current_streak))\n", + "top_streaks = sorted(streaks, key=lambda x: x[1], reverse=True)[:5]\n", + "print(top_streaks)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f4501c88-381e-4bed-a177-80c8bc412ab6", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.12.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}