Distribution map of NBA players' shooting positions

Xiaobai, who wants to switch to data analysis in the Internet industry, has a certain understanding of python through Buddhist Study in winter vacation. Record the first gadget.

When I was brushing the cross forum, I suddenly saw a data analysis about the NBA. Because I also like playing very much, I immediately became interested.

Because I didn't know much about the url of python, I couldn't climb down the data from the Internet after looking for a pile of materials (almost persuaded). Later, I finally took the first step by looking for materials with ready-made csv.

First open the downloaded CSV data file

import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.patches import Circle, Rectangle, Arc
from matplotlib.offsetbox import  OffsetImage
data1 = pd.read_csv('shots-2019Aaron.csv',encoding='utf-8') 

Then, set the file in it as a scatter diagram through matplotlib, and draw it by determining four elements.

made = data1[data1['outcome']==1]
missed = data1[data1['outcome']==0]
plt.scatter(missed.y, missed.x,color='r', marker='.', alpha=0.3)
plt.scatter(made.y, made.x,color='b', marker='.', alpha=0.3)
#Delete the border and use it
#plt.tick_params(labelbottom=False, labelleft=False)

The first point is to determine the name of a player

The second point is the position of the player's X-axis.

The third point is the position of the player's Y-axis.

The fourth point is whether the ball has scored.    

Finally, it looks like this.


Draw the court again and you'll be finished.

Through the three tools Arc, Rectangle and Circle in matplotlib. Draw Arc, Rectangle and Circle respectively.

#First determine the canvas size
fig = plt.figure(figsize=(12, 10))
#Then determine the division area
ax = fig.subplots(1,1)   

Next, you can start to draw the court in the canvas. Pay attention to the drawing coordinates here.

#The ball basket is 45cm and then scaled equally
circle = Circle((240,40), radius=7.5, linewidth=2, fill=False)
# The whole stadium
outer_box = Rectangle((-10, 0), 500,437 , linewidth=2,fill=False)
#Backboard frame
backboard = Rectangle((210, 32.5), 60, -2, linewidth=2,color ='k')
# Draw a small rectangle inside, widt=12ft, height=19ft
inner_box = Rectangle((160, 0), 160, 190, linewidth=2, color='k',fill=False)
inner_box2 = Rectangle((180, 0), 120, 190, linewidth=2, color='k',fill=False)
# three point line
three_point = Rectangle((19,0),0,130,linewidth=2,color='k')
three_point2 = Rectangle((460,0),0,130,linewidth=2,color='k')
three_arc = Arc((240, 40), 475, 475, theta1=22, theta2=158, linewidth=2,color='k')
# Draw the top arc of the free throw
top_free_throw = Arc((240, 190), 120, 120, theta1=0, theta2=180,linewidth=2, color='k', fill=False)
bottom_free_throw = Arc((240, 190), 120, 120, theta1=180, theta2=0,linewidth=2, color='k', linestyle='--')
# restricted area
restricted = Arc((240, 40), 80, 80, theta1=0, theta2=180, linewidth=2,color='k')

# roof filled color
for rect in rectangle_list:
# Use the for loop to add an image to the canvas
# The y-axis value decreases from bottom to top
# It is convenient to place the ball basket on the top of the figure
plt.xlim(-50, 550)

The course comes out, and then the scatter diagram is combined with the course, which is the effect.  

However, after this data analysis, I found that a lot of data were pieced together everywhere. In fact, I didn't knock down much. If I said that there was no harvest, it wasn't all no harvest. If I said that there was harvest, I felt that the possibility of harvest was that I had a thought about data analysis. The key point was to obtain data, and the next step of analysis was possible only with data, Visualization.

If there are mistakes, I hope you can give me more advice. Finally, I hope some big men can give some suggestions on reemployment or direction.

Keywords: Python Data Analysis matplotlib

Added by sqishy on Tue, 15 Feb 2022 17:18:30 +0200