From 1ca063cdcbecd42bd8936298161bc3cbfceb2740 Mon Sep 17 00:00:00 2001 From: nprasad2077 <114438461+nprasad2077@users.noreply.github.com> Date: Tue, 18 Apr 2023 15:06:13 -0500 Subject: [PATCH] update models to decimal and account for null values --- db.sqlite3 | Bin 188416 -> 188416 bytes ...rdata_ast_alter_playerdata_blk_and_more.py | 148 ++++++++++++++++++ .../0003_playerdata_season_playerdata_team.py | 23 +++ .../0004_alter_playerdata_season.py | 18 +++ ...rdata_ast_alter_playerdata_blk_and_more.py | 148 ++++++++++++++++++ nba_data/models.py | 56 +++---- nba_data/scraper.py | 10 +- 7 files changed, 374 insertions(+), 29 deletions(-) create mode 100644 nba_data/migrations/0002_alter_playerdata_ast_alter_playerdata_blk_and_more.py create mode 100644 nba_data/migrations/0003_playerdata_season_playerdata_team.py create mode 100644 nba_data/migrations/0004_alter_playerdata_season.py create mode 100644 nba_data/migrations/0005_alter_playerdata_ast_alter_playerdata_blk_and_more.py diff --git a/db.sqlite3 b/db.sqlite3 index 18891fe0abe7cb4ff50a4aac80bb86617232404b..b460593634210c8ef6c7f449b7387982d053cf8d 100644 GIT binary patch literal 188416 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 L9Dn62-W~rRmcWZA diff --git a/nba_data/migrations/0002_alter_playerdata_ast_alter_playerdata_blk_and_more.py b/nba_data/migrations/0002_alter_playerdata_ast_alter_playerdata_blk_and_more.py new file mode 100644 index 0000000..c953f7a --- /dev/null +++ b/nba_data/migrations/0002_alter_playerdata_ast_alter_playerdata_blk_and_more.py @@ -0,0 +1,148 @@ +# Generated by Django 4.2 on 2023-04-18 19:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('nba_data', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='playerdata', + name='AST', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='BLK', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='DRB', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='ORB', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='PF', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='PTS', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='STL', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='TOV', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='TRB', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='age', + field=models.IntegerField(), + ), + migrations.AlterField( + model_name='playerdata', + name='effect_fg_percent', + field=models.DecimalField(decimal_places=3, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='field_attempts', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='field_goals', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='field_percent', + field=models.DecimalField(decimal_places=3, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='ft', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='ft_percent', + field=models.DecimalField(decimal_places=3, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='fta', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='games', + field=models.IntegerField(), + ), + migrations.AlterField( + model_name='playerdata', + name='games_started', + field=models.IntegerField(), + ), + migrations.AlterField( + model_name='playerdata', + name='minutes_pg', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='name', + field=models.CharField(max_length=255), + ), + migrations.AlterField( + model_name='playerdata', + name='three_attempts', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='three_fg', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='three_percent', + field=models.DecimalField(decimal_places=3, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='two_attempts', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='two_fg', + field=models.DecimalField(decimal_places=2, max_digits=5), + ), + migrations.AlterField( + model_name='playerdata', + name='two_percent', + field=models.DecimalField(decimal_places=3, max_digits=5), + ), + ] diff --git a/nba_data/migrations/0003_playerdata_season_playerdata_team.py b/nba_data/migrations/0003_playerdata_season_playerdata_team.py new file mode 100644 index 0000000..0a3f191 --- /dev/null +++ b/nba_data/migrations/0003_playerdata_season_playerdata_team.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2 on 2023-04-18 19:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('nba_data', '0002_alter_playerdata_ast_alter_playerdata_blk_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='playerdata', + name='season', + field=models.IntegerField(default=0), + ), + migrations.AddField( + model_name='playerdata', + name='team', + field=models.CharField(default='', max_length=30), + ), + ] diff --git a/nba_data/migrations/0004_alter_playerdata_season.py b/nba_data/migrations/0004_alter_playerdata_season.py new file mode 100644 index 0000000..2101cd0 --- /dev/null +++ b/nba_data/migrations/0004_alter_playerdata_season.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2 on 2023-04-18 19:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('nba_data', '0003_playerdata_season_playerdata_team'), + ] + + operations = [ + migrations.AlterField( + model_name='playerdata', + name='season', + field=models.IntegerField(null=True), + ), + ] diff --git a/nba_data/migrations/0005_alter_playerdata_ast_alter_playerdata_blk_and_more.py b/nba_data/migrations/0005_alter_playerdata_ast_alter_playerdata_blk_and_more.py new file mode 100644 index 0000000..34bf232 --- /dev/null +++ b/nba_data/migrations/0005_alter_playerdata_ast_alter_playerdata_blk_and_more.py @@ -0,0 +1,148 @@ +# Generated by Django 4.2 on 2023-04-18 19:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('nba_data', '0004_alter_playerdata_season'), + ] + + operations = [ + migrations.AlterField( + model_name='playerdata', + name='AST', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='BLK', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='DRB', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='ORB', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='PF', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='PTS', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='STL', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='TOV', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='TRB', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='age', + field=models.IntegerField(null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='effect_fg_percent', + field=models.DecimalField(decimal_places=3, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='field_attempts', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='field_goals', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='field_percent', + field=models.DecimalField(decimal_places=3, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='ft', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='ft_percent', + field=models.DecimalField(decimal_places=3, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='fta', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='games', + field=models.IntegerField(null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='games_started', + field=models.IntegerField(null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='minutes_pg', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='name', + field=models.CharField(max_length=255, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='three_attempts', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='three_fg', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='three_percent', + field=models.DecimalField(decimal_places=3, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='two_attempts', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='two_fg', + field=models.DecimalField(decimal_places=2, max_digits=5, null=True), + ), + migrations.AlterField( + model_name='playerdata', + name='two_percent', + field=models.DecimalField(decimal_places=3, max_digits=5, null=True), + ), + ] diff --git a/nba_data/models.py b/nba_data/models.py index 3f49a30..d555929 100644 --- a/nba_data/models.py +++ b/nba_data/models.py @@ -2,33 +2,35 @@ from django.db import models # Create your models here. class PlayerData(models.Model): - name = models.CharField(max_length=100) - age = models.CharField(max_length=100) - games = models.CharField(max_length=100) - games_started = models.CharField(max_length=100) - minutes_pg = models.CharField(max_length=100) - field_goals = models.CharField(max_length=100) - field_attempts = models.CharField(max_length=100) - field_percent = models.CharField(max_length=100) - three_fg = models.CharField(max_length=100) - three_attempts = models.CharField(max_length=100) - three_percent = models.CharField(max_length=100) - two_fg = models.CharField(max_length=100) - two_attempts = models.CharField(max_length=100) - two_percent = models.CharField(max_length=100) - effect_fg_percent = models.CharField(max_length=100) - ft = models.CharField(max_length=100) - fta = models.CharField(max_length=100) - ft_percent = models.CharField(max_length=100) - ORB= models.CharField(max_length=100) - DRB = models.CharField(max_length=100) - TRB = models.CharField(max_length=100) - AST = models.CharField(max_length=100) - STL = models.CharField(max_length=100) - BLK = models.CharField(max_length=100) - TOV = models.CharField(max_length=100) - PF = models.CharField(max_length=100) - PTS = models.CharField(max_length=100) + name = models.CharField(max_length=255, null=True) + age = models.IntegerField(null=True) + games = models.IntegerField(null=True) + games_started = models.IntegerField(null=True) + minutes_pg = models.DecimalField(max_digits=5, decimal_places=2, null=True) + field_goals = models.DecimalField(max_digits=5, decimal_places=2, null=True) + field_attempts = models.DecimalField(max_digits=5, decimal_places=2, null=True) + field_percent = models.DecimalField(max_digits=5, decimal_places=3, null=True) + three_fg = models.DecimalField(max_digits=5, decimal_places=2, null=True) + three_attempts = models.DecimalField(max_digits=5, decimal_places=2, null=True) + three_percent = models.DecimalField(max_digits=5, decimal_places=3, null=True) + two_fg = models.DecimalField(max_digits=5, decimal_places=2, null=True) + two_attempts = models.DecimalField(max_digits=5, decimal_places=2, null=True) + two_percent = models.DecimalField(max_digits=5, decimal_places=3, null=True) + effect_fg_percent = models.DecimalField(max_digits=5, decimal_places=3, null=True) + ft = models.DecimalField(max_digits=5, decimal_places=2, null=True) + fta = models.DecimalField(max_digits=5, decimal_places=2, null=True) + ft_percent = models.DecimalField(max_digits=5, decimal_places=3, null=True) + ORB= models.DecimalField(max_digits=5, decimal_places=2, null=True) + DRB = models.DecimalField(max_digits=5, decimal_places=2, null=True) + TRB = models.DecimalField(max_digits=5, decimal_places=2, null=True) + AST = models.DecimalField(max_digits=5, decimal_places=2, null=True) + STL = models.DecimalField(max_digits=5, decimal_places=2, null=True) + BLK = models.DecimalField(max_digits=5, decimal_places=2, null=True) + TOV = models.DecimalField(max_digits=5, decimal_places=2, null=True) + PF = models.DecimalField(max_digits=5, decimal_places=2, null=True) + PTS = models.DecimalField(max_digits=5, decimal_places=2, null=True) + team = models.CharField(max_length=30, default='') + season = models.IntegerField(null=True) def __str__(self): return self.name diff --git a/nba_data/scraper.py b/nba_data/scraper.py index 01690e6..b329f4d 100644 --- a/nba_data/scraper.py +++ b/nba_data/scraper.py @@ -33,15 +33,19 @@ rows = table.find("tbody").find_all("tr") # Extract coloumn headers headers = [col.text.strip() for col in header_row.find_all("th")][1:] +headers.extend(['team', 'season']) # Add 'team' and 'season' fields to headers -# extract rows as dictionaries +# Extract rows as dictionaries data = [] for row in rows: cols = row.find_all("td") cols = [col.text.strip() for col in cols] - row_dict = dict(zip(headers, cols)) + row_dict = {header: (None if col == "" else col) for header, col in zip(headers, cols)} + row_dict['team'] = team + row_dict['season'] = season data.append(row_dict) + # locate current directory script_dir = os.path.dirname(os.path.abspath(__file__)) @@ -88,5 +92,7 @@ for row in data: TOV=row['TOV'], PF=row['PF'], PTS=row['PTS'], + team=row['team'], + season=row['season'], ) player_data.save()