日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

nba球员python_分组NBA球员

發(fā)布時間:2023/12/29 python 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nba球员python_分组NBA球员 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

nba球員python

In basketball, we typically talk about 5 positions: point guard, shooting guard, small forward, power forward, and center. Based on this, one might expect NBA players to fall into 5 distinct groups- Point guards perform similar to other point guards, shooting guards perform similar to other shooting guards, etc. Is this the case? Do NBA players fall neatly into position groups?

在籃球比賽中,我們通常談論5個位置:控球后衛(wèi),得分后衛(wèi),小前鋒,大前鋒和中鋒。 基于此,人們可能會期望NBA球員分為5個不同的組:控球后衛(wèi)的表現(xiàn)與其他控球后衛(wèi)相似,得分后衛(wèi)的表現(xiàn)與其他得分后衛(wèi)相似,等等。 NBA球員會整齊地屬于位置組嗎?

To answer this question, I will look at how NBA players “group” together. For example, there might be a group of players who collect lots of rebounds, shoot poorly from behind the 3 point line, and block lots of shots. I might call these players forwards. If we allow player performance to create groups, what will these groups look like?

為了回答這個問題,我將研究NBA球員如何“分組”在一起。 例如,可能有一群球員收集很多籃板,在3分線后投籃不佳,并且蓋帽很多。 我可能會叫這些球員前鋒。 如果我們允許玩家表演來創(chuàng)建組,那么這些組會是什么樣?

To group players, I will use k-means clustering (https://en.wikipedia.org/wiki/K-means_clustering).

為了對玩家進行分組,我將使用k-means聚類( https://en.wikipedia.org/wiki/K-means_clustering )。

When choosing a clustering algorithm, its important to think about how the clustering algorithm defines clusters. k-means minimizes the distance between data points (players in my case) and the center of K different points. Because distance is between the cluster center and a given point, k-means assumes clusters are spherical. When thinking about clusters of NBA players, do I think these clusters will be spherical? If not, then I might want try a different clustering algorithm.

選擇聚類算法時,考慮聚類算法如何定義聚類很重要。 k均值可最小化數(shù)據(jù)點(在我的情況下為玩家)與K個不同點的中心之間的距離。 由于距離在聚類中心和給定點之間,因此k均值假設聚類是球形的。 在考慮NBA球員群體時,我認為這些群體將是球形的嗎? 如果沒有,那么我可能想嘗試其他聚類算法。

For now, I will assume generally spherical clusters and use k-means. At the end of this post, I will comment on whether this assumption seems valid.

現(xiàn)在,我將假設總體上為球形簇,并使用k均值。 在這篇文章的結尾,我將評論這個假設是否有效。

1 1 2 2 3 3 4 4 5 5 6 6 7 7

We need data. Collecting the data will require a couple steps. First, I will create a matrix of all players who ever played in the NBA (via the NBA.com API).

我們需要數(shù)據(jù)。 收集數(shù)據(jù)將需要幾個步驟。 首先,我將創(chuàng)建一個所有曾在NBA比賽的球員的矩陣(通過NBA.com API)。

1 1 2 2 3 3 4 4 5 5 6 6

In the 1979-1980 season, the NBA started using the 3-point line. The 3-point has dramatically changed basketball, so players performed different before it. While this change in play was not instantaneous, it does not make sense to include players before the 3-point line.

在1979-1980賽季,NBA開始使用三分線。 3分制極大地改變了籃球,因此球員在此之前的表現(xiàn)有所不同。 盡管這種變化不是立即發(fā)生的,但在三分線之前加入球員沒有任何意義。

1 1 2 2

I have a list of all the players after 1979, but I want data about all these players. When grouping the players, I am not interested in how much a player played. Instead, I want to know HOW a player played. To remove variability associated with playing time, I will gather data that is standardized for 36 minutes of play. For example, if a player averages 4 points and 12 minutes a game, this player averages 12 points per 36 minutes.

我有1979年以后所有球員的名單,但是我想要有關所有這些球員的數(shù)據(jù)。 在對球員分組時,我對球員的出場次數(shù)不感興趣。 相反,我想知道玩家的表現(xiàn)。 為了消除與比賽時間相關的可變性,我將收集36分鐘比賽中標準化的數(shù)據(jù)。 例如,如果一個玩家平均每場比賽獲得4分12分鐘,則該玩家每36分鐘平均獲得12分。

Below, I have written a function that will collect every player’s performance per 36 minutes. The function collects data one player at a time, so its VERY slow. If you want the data, it can be found on my github (https://github.com/dvatterott/nba_project).

在下面,我編寫了一個函數(shù),該函數(shù)將每36分鐘收集一次每個玩家的表現(xiàn)。 該功能一次只能收集一個玩家的數(shù)據(jù),因此其速度非常慢。 如果需要數(shù)據(jù),可以在我的github( https://github.com/dvatterott/nba_project )上找到。

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31
1 1
Index([u'PLAYER_ID', u'LEAGUE_ID', u'TEAM_ID', u'GP', u'GS',u'MIN', u'FGM', u'FGA', u'FG_PCT', u'FG3M',u'FG3A', u'FG3_PCT', u'FTM', u'FTA', u'FT_PCT',u'OREB', u'DREB', u'REB', u'AST', u'STL',u'BLK', u'TOV', u'PF', u'PTS'],dtype='object') Index([u'PLAYER_ID', u'LEAGUE_ID', u'TEAM_ID', u'GP', u'GS',u'MIN', u'FGM', u'FGA', u'FG_PCT', u'FG3M',u'FG3A', u'FG3_PCT', u'FTM', u'FTA', u'FT_PCT',u'OREB', u'DREB', u'REB', u'AST', u'STL',u'BLK', u'TOV', u'PF', u'PTS'],dtype='object')

Great! Now we have data that is scaled for 36 minutes of play (per36 data) from every player between 1979 and 2016. Above, I printed out the columns. I don’t want all this data. For instance, I do not care about how many minutes a player played. Also, some of the data is redundant. For instance, if I know a player’s field goal attempts (FGA) and field goal percentage (FG_PCT), I can calculate the number of made field goals (FGM). I removed the data columns that seem redundant. I do this because I do not want redundant data exercising too much influence on the grouping process.

大! 現(xiàn)在,我們擁有的數(shù)據(jù)在1979年至2016年之間可以擴展到每位玩家36分鐘的比賽(per36數(shù)據(jù))。在上面,我打印了列。 我不想要所有這些數(shù)據(jù)。 例如,我不在乎玩家玩了多少分鐘。 另外,某些數(shù)據(jù)是冗余的。 例如,如果我知道一個球員的射門得分嘗試(FGA)和射門得分百分比(FG_PCT),那么我可以計算出射門得分的數(shù)量(FGM)。 我刪除了似乎多余的數(shù)據(jù)列。 我這樣做是因為我不希望冗余數(shù)據(jù)對分組過程產(chǎn)生太大影響。

Below, I create new data columns for 2 point field goal attempts and 2 point field goal percentage. I also remove all players who played less than 50 games. I do this because these players have not had the opportunity to establish consistent performance.

在下面,我將為2分目標得分和2分目標百分比創(chuàng)建新的數(shù)據(jù)列。 我還將刪除所有玩過少于50場比賽的玩家。 我這樣做是因為這些參與者沒有機會建立一致的表現(xiàn)。

df = df[df['GP']>50] #only players with more than 50 games. df = df.fillna(0) #some players have "None" in some cells. Turn these into 0s df['FG2M'] = df['FGM']-df['FG3M'] #find number of 2pt field goals df['FG2A'] = df['FGA']-df['FG3A'] #2 point field goal attempts df['FG2_PCT'] = df['FG2M']/df['FG2A'] #2 point field goal percentage saveIDs = df['PLAYER_ID'] #save player IDs for later df = df.drop(['PLAYER_ID','LEAGUE_ID','TEAM_ID','GP','GS','MIN','FGM','FGA','FG_PCT','FG3M','FTM','REB','PTS','FG2M'],1) #pull out unncessary columns df = df [ df [ 'GP' ] > 50 ] #only players with more than 50 games. df = df . fillna ( 0 ) #some players have "None" in some cells. Turn these into 0sdf [ 'FG2M' ] = df [ 'FGM' ] - df [ 'FG3M' ] #find number of 2pt field goalsdf [ 'FG2A' ] = df [ 'FGA' ] - df [ 'FG3A' ] #2 point field goal attemptsdf [ 'FG2_PCT' ] = df [ 'FG2M' ] / df [ 'FG2A' ] #2 point field goal percentagesaveIDs = df [ 'PLAYER_ID' ] #save player IDs for laterdf = df . drop ([ 'PLAYER_ID' , 'LEAGUE_ID' , 'TEAM_ID' , 'GP' , 'GS' , 'MIN' , 'FGM' , 'FGA' , 'FG_PCT' , 'FG3M' , 'FTM' , 'REB' , 'PTS' , 'FG2M' ], 1 ) #pull out unncessary columns

It’s always important to visualize the data, so lets get an idea what we’re working with!

可視化數(shù)據(jù)始終很重要,因此讓我們了解一下我們正在使用的數(shù)據(jù)!

The plot below is called a scatter matrix. This type of plot will appear again, so lets go through it carefully. Each subplot has the feature (stat) labeled on its row which serves as its y-axis. The column feature serves as the x-axis. For example the subplot in the second column of the first row plots 3-point field goal attempts by 3-point field goal percentage. As you can see, players that have higher 3-point percentages tend to take more 3-pointers… makes sense.

下面的圖稱為散布矩陣。 這種情節(jié)將再次出現(xiàn),因此請仔細檢查它。 每個子圖的行上都標記了特征(統(tǒng)計),作為其y軸。 列特征用作x軸。 例如,第一行第二列中的子圖以3點投籃命中百分比繪制3點投籃嘗試。 如您所見,擁有較高三分球的球員往往會拿出更多的三分球……這是有道理的。

On the diagonals, I plot the Kernel Density Estimation for the sample histogram. More players fall into areas where where the line is higher on the y-axis. For instance, no players shoot better than ~45% from behind the 3 point line.

在對角線上,我繪制了樣本直方圖的內核密度估計。 更多玩家進入y軸上的線更高的區(qū)域。 例如,沒有球員在三分線后的投籃命中率超過?45%。

One interesting part about scatter matrices is the plots below the diagonal are a reflection of the plots above the diagonal. For example, the data in the second column of the first row and the first column of the second row are the same. The only difference is the axes have switched.

關于散布矩陣的一個有趣的部分是對角線以下的圖是對角線上方的圖的反映。 例如,第一行的第二列和第二行的第一列中的數(shù)據(jù)相同。 唯一的區(qū)別是軸已切換。

axs = pd.tools.plotting.scatter_matrix(df, alpha=0.2, figsize=(12, 12), diagonal='kde'); #the diagonal will show kernel density [ax.set_yticks([]) for ax in axs[:,0]] #turn off the ticks that take up way too much space in such a crammed figure [ax.set_xticks([]) for ax in axs[-1,:]]; axs = pd . tools . plotting . scatter_matrix ( df , alpha = 0.2 , figsize = ( 12 , 12 ), diagonal = 'kde' ); #the diagonal will show kernel density[ ax . set_yticks ([]) for ax in axs [:, 0 ]] #turn off the ticks that take up way too much space in such a crammed figure[ ax . set_xticks ([]) for ax in axs [ - 1 ,:]];

There are a couple things to note in the graph above. First, there’s a TON of information there. Second, it looks like there are some strong correlations. For example, look at the subplots depicting offensive rebounds by defensive rebounds.

上圖中需要注意幾件事。 首先,那里有大量信息。 其次,似乎存在一些強相關性。 例如,查看通過防守籃板描述進攻籃板的子圖。

While I tried to throw out redundant data, I clearly did not throw out all redundant data. For example, players that are good 3-point shooters are probably also good free throw shooters. These players are simply good shooters, and being a good shooter contributes to multiple data columns above.

當我嘗試拋出冗余數(shù)據(jù)時,我顯然沒有拋出所有冗余數(shù)據(jù)。 例如,優(yōu)秀的三分球手也可能是優(yōu)秀的罰球手。 這些球員只是好射手,而成為好射手則有助于上面的多個數(shù)據(jù)列。

When I group the data, I do not want an ability such as shooting to contribute too much. I want to group players equally according to all their abilities. Below I use a PCA to seperate variance associated with the different “components” (e.g., shooting ability) of basketball performance.

當我對數(shù)據(jù)進行分組時,我不希望諸如射擊之類的功能做出太多貢獻。 我想根據(jù)所有能力將球員平均分配。 下面,我使用PCA來區(qū)分與籃球表現(xiàn)的不同“組成部分”(例如投籃能力)相關的差異。

For an explanation of PCA I recommend this link – https://georgemdallas.wordpress.com/2013/10/30/principal-component-analysis-4-dummies-eigenvectors-eigenvalues-and-dimension-reduction/.

對于PCA的解釋,我建議使用此鏈接– https://georgemdallas.wordpress.com/2013/10/30/principal-component-analysis-4-dummies-eigenvectors-eigenvalues-and-dimension-reduction/。

from sklearn.decomposition import PCA from sklearn.preprocessing import scale X = df.as_matrix() #take data out of dataframe X = scale(X) #standardize the data before giving it to the PCA. #I standardize the data because some features such as PF or steals have lower magnitudes than other features such as FG2A #I want both to contribute equally to the PCA, so I make sure they're on the same scale. pca = PCA() #great PCA object pca.fit(X) #pull out principle components var_expl = pca.explained_variance_ratio_ #find amount of variance explained by each component tot_var_expl = np.array([sum(var_expl[0:i+1]) for i,x in enumerate(var_expl)]) #create vector with cumulative variance plt.figure(figsize=(12,4)) #create cumulative proportion of variance plot plt.subplot(1,2,1) plt.plot(range(1,len(tot_var_expl)+1), tot_var_expl*100,'o-') plt.axis([0, len(tot_var_expl)+1, 0, 100]) plt.xlabel('Number of PCA Components Included') plt.ylabel('Percentage of variance explained (%)') plt.subplot(1,2,2) #create scree plot plt.plot(range(1,len(var_expl)+1), var_expl*100,'o-') plt.axis([0, len(var_expl)+1, 0, 100]) plt.xlabel('PCA Component'); from sklearn.decomposition import PCAfrom sklearn.preprocessing import scaleX = df . as_matrix () #take data out of dataframeX = scale ( X ) #standardize the data before giving it to the PCA. #I standardize the data because some features such as PF or steals have lower magnitudes than other features such as FG2A#I want both to contribute equally to the PCA, so I make sure they're on the same scale.pca = PCA () #great PCA objectpca . fit ( X ) #pull out principle componentsvar_expl = pca . explained_variance_ratio_ #find amount of variance explained by each componenttot_var_expl = np . array ([ sum ( var_expl [ 0 : i + 1 ]) for i , x in enumerate ( var_expl )]) #create vector with cumulative varianceplt . figure ( figsize = ( 12 , 4 )) #create cumulative proportion of variance plotplt . subplot ( 1 , 2 , 1 )plt . plot ( range ( 1 , len ( tot_var_expl ) + 1 ), tot_var_expl * 100 , 'o-' )plt . axis ([ 0 , len ( tot_var_expl ) + 1 , 0 , 100 ])plt . xlabel ( 'Number of PCA Components Included' )plt . ylabel ( 'Percentage of variance explained (%)' )plt . subplot ( 1 , 2 , 2 ) #create scree plotplt . plot ( range ( 1 , len ( var_expl ) + 1 ), var_expl * 100 , 'o-' )plt . axis ([ 0 , len ( var_expl ) + 1 , 0 , 100 ])plt . xlabel ( 'PCA Component' );

On the left, I plot the amount of variance explained after including each additional PCA component. Using all the components explains all the variability, but notice how little the last few components contribute. It doesn’t make sense to include a component that only explains 1% of the variability…but how many components to include!?

在左側,我繪制了包括每個其他PCA組件之后說明的方差量。 使用所有組件可以解釋所有可變性,但請注意最后幾個組件的貢獻很少。 包含僅解釋1%變異性的組件是沒有意義的……但是要包含多少個組件!

I chose to include the first 5 components because no component after the 5th explained more than 5% of the data. This part of the analysis is admittedly arbitrary, but 5% is a relatively conservative cut-off.

我之所以選擇包括前5個組成部分,是因為第5個之后的任何組成部分都不能解釋超過5%的數(shù)據(jù)。 誠然,這部分分析是任意的,但5%是相對保守的臨界值。

Below is the fun part of the data. We get to look at what features contribute to the different principle components.

以下是數(shù)據(jù)的有趣部分。 我們來看看哪些功能對不同的主要原理有所貢獻。

  • Assists and 3-point shooting contribute to the first component. I will call this the Outside Skills component.
  • Free throw attempts, assists, turnovers and 2-point field goals contribute to the second component. I will call this the Rim Scoring component.
  • Free throw percentage and 2-point field goal percentage contribute to the third component. I will call this the Pure Points component.
  • 2-point field goal percentage and steals contribute to the fourth component. I will call this the Defensive Big Man component.
  • 3-point shooting and free throws contribute to the fifth component. I will call this the Dead Eye component.
  • 助攻和三分球命中率是第一要素。 我將其稱為“ 外部技能”部分。
  • 罰球,助攻,失誤和2分投籃得分是第二要素。 我將其稱為Rim Scoring組件。
  • 罰球率和2分投籃命中率構成第三部分。 我將其稱為“ 純積分”組件。
  • 2分投籃命中率和搶斷是第四要素。 我將其稱為“ 防御大人物”組件。
  • 三分球和罰球是第五要素。 我將其稱為“ 死眼”組件。

One thing to keep in mind here is that each component explains less variance than the last. So while 3 point shooting contributes to both the 1st and 5th component, more 3 point shooting variability is probably explained by the 1st component.

這里要記住的一件事是,每個組件所解釋的差異都小于最后一個。 因此,盡管三點射擊對第一和第五部分都有貢獻,但第一點可能解釋了更多的三點射擊變異性。

It would be great if we had a PCA component that was only shooting and another that was only rebounding since we typically conceive these to be different skills. Yet, there are multiple aspects of each skill. For example, a 3-point shooter not only has to be a dead-eye shooter, but also has to find ways to get open. Additionally, being good at “getting open” might be something akin to basketball IQ which would also contribute to assists and steals!

如果我們擁有僅用于射擊的PCA組件而僅用于反彈的PCA組件,那將是很好的,因為我們通常認為這些是不同的技能。 但是,每種技能都有多個方面。 例如,一個三點射手不僅必須是死眼射手,而且還必須找到打開自己的方法。 另外,擅長“開放”可能類似于籃球智商,這也有助于助攻和搶斷!

factor_names = ['Outside Skills','Rim Scoring','Pure Points','Defensive Big Man','Dead Eye'] #my component names loadings_df = pd.DataFrame(pca.components_, columns=df.columns) #loadings_df[0:5] #all the factor loadings appear below. factor_names = [ 'Outside Skills' , 'Rim Scoring' , 'Pure Points' , 'Defensive Big Man' , 'Dead Eye' ] #my component namesloadings_df = pd . DataFrame ( pca . components_ , columns = df . columns )#loadings_df[0:5] #all the factor loadings appear below.

Cool, we have our 5 PCA components. Now lets transform the data into our 5 component PCA space (from our 13 feature space – e.g., FG3A, FG3_PCT, ect.). To do this, we give each player a score on each of the 5 PCA components.

太酷了,我們有5個PCA組件。 現(xiàn)在讓我們將數(shù)據(jù)轉換為5個組成部分的PCA空間(來自13個特征空間-例如FG3A,FG3_PCT等)。 為此,我們給每位玩家5個PCA組件中的每個得分。

Next, I want to see how players cluster together based on their scores on these components. First, let’s investigate how using more or less clusters (i.e., groups) explains different amounts of variance.

接下來,我想看看玩家是如何根據(jù)他們在這些組件上的得分聚集在一起的。 首先,讓我們研究一下如何使用更多或更少的群集(即組)來解釋不同數(shù)量的方差。

from scipy.spatial.distance import cdist, pdist, euclidean from sklearn.cluster import KMeans from sklearn import metrics #http://stackoverflow.com/questions/6645895/calculating-the-percentage-of-variance-measure-for-k-means #The above link was helpful when writing this code. reduced_data = PCA(n_components=5, whiten=True).fit_transform(X) #transform data into the 5 PCA components space #kmeans assumes clusters have equal variance, and whitening helps keep this assumption. k_range = range(2,31) #looking amount of variance explained by 1 through 30 cluster k_means_var = [KMeans(n_clusters=k).fit(reduced_data) for k in k_range] #fit kmeans with 1 cluster to 30 clusters #get labels and calculate silhouette score labels = [i.labels_ for i in k_means_var] sil_score = [metrics.silhouette_score(reduced_data,i,metric='euclidean') for i in labels] centroids = [i.cluster_centers_ for i in k_means_var] #get the center of each cluster k_euclid = [cdist(reduced_data,cent,'euclidean') for cent in centroids] #calculate distance between each item and each cluster center dist = [np.min(ke,axis=1) for ke in k_euclid] #get the distance between each item and its cluster wcss = [sum(d**2) for d in dist] #within cluster sum of squares tss = sum(pdist(reduced_data)**2/reduced_data.shape[0]) #total sum of squares bss = tss-wcss #between cluster sum of squares plt.clf() plt.figure(figsize=(12,4)) #create cumulative proportion of variance plot plt.subplot(1,2,1) plt.plot(k_range, bss/tss*100,'o-') plt.axis([0, np.max(k_range), 0, 100]) plt.xlabel('Number of Clusters') plt.ylabel('Percentage of variance explained (%)'); plt.subplot(1,2,2) #create scree plot plt.plot(k_range, np.transpose(sil_score)*100,'o-') plt.axis([0, np.max(k_range), 0, 40]) plt.xlabel('Number of Clusters'); plt.ylabel('Average Silhouette Score*100'); from scipy.spatial.distance import cdist , pdist , euclideanfrom sklearn.cluster import KMeansfrom sklearn import metrics#http://stackoverflow.com/questions/6645895/calculating-the-percentage-of-variance-measure-for-k-means#The above link was helpful when writing this code.reduced_data = PCA ( n_components = 5 , whiten = True ) . fit_transform ( X ) #transform data into the 5 PCA components space#kmeans assumes clusters have equal variance, and whitening helps keep this assumption.k_range = range ( 2 , 31 ) #looking amount of variance explained by 1 through 30 clusterk_means_var = [ KMeans ( n_clusters = k ) . fit ( reduced_data ) for k in k_range ] #fit kmeans with 1 cluster to 30 clusters#get labels and calculate silhouette scorelabels = [ i . labels_ for i in k_means_var ]sil_score = [ metrics . silhouette_score ( reduced_data , i , metric = 'euclidean' ) for i in labels ]centroids = [ i . cluster_centers_ for i in k_means_var ] #get the center of each clusterk_euclid = [ cdist ( reduced_data , cent , 'euclidean' ) for cent in centroids ] #calculate distance between each item and each cluster centerdist = [ np . min ( ke , axis = 1 ) for ke in k_euclid ] #get the distance between each item and its clusterwcss = [ sum ( d ** 2 ) for d in dist ] #within cluster sum of squarestss = sum ( pdist ( reduced_data ) ** 2 / reduced_data . shape [ 0 ]) #total sum of squaresbss = tss - wcss #between cluster sum of squaresplt . clf ()plt . figure ( figsize = ( 12 , 4 )) #create cumulative proportion of variance plotplt . subplot ( 1 , 2 , 1 )plt . plot ( k_range , bss / tss * 100 , 'o-' )plt . axis ([ 0 , np . max ( k_range ), 0 , 100 ])plt . xlabel ( 'Number of Clusters' )plt . ylabel ( 'Percentage of variance explained (%)' );plt . subplot ( 1 , 2 , 2 ) #create scree plotplt . plot ( k_range , np . transpose ( sil_score ) * 100 , 'o-' )plt . axis ([ 0 , np . max ( k_range ), 0 , 40 ])plt . xlabel ( 'Number of Clusters' );plt . ylabel ( 'Average Silhouette Score*100' );

As you can in the left hand plot, adding more clusters explains more of the variance, but there are diminishing returns. Each additional cluster explains a little less data than the last (much like each PCA component explained less variance than the previous component).

就像您在左圖中可以看到的那樣,添加更多的聚類可以解釋更多的方差,但是收益遞減。 每個附加群集比最后一個群集解釋的數(shù)據(jù)要少一些(很像每個PCA組件所解釋的差異都比前一個組件少)。

The particularly intersting point here is the point where the second derivative is greatest, when the amount of change changes the most (the elbow). The elbow occurs at the 6th cluster.

此處特別的交點是變化量變化最大(彎頭)時二階導數(shù)最大的點。 肘部出現(xiàn)在第6組。

Perhaps not coincidently, 6 clusters also has the highest silhouette score (right hand plot). The silhouette score computes the average distance between a player and all other players in this player’s cluster. It then divides this distance by the distance between this player and all players in the next nearest cluster. Silhouette scores range between -1 and 1 (where negative one means the player is in the wrong cluster, 0 means the clusters completely overlap, and 1 means the clusters are extermely well separated).

也許并非巧合,六個聚類也具有最高的輪廓分數(shù)(右圖)。 輪廓分數(shù)計算玩家與該玩家集群中所有其他玩家之間的平均距離。 然后,將這個距離除以該玩家與下一個最近群集中所有玩家之間的距離。 輪廓分數(shù)在-1和1之間(負1表示玩家位于錯誤的群集中,0表示群集完全重疊,而1則表示群集之間的間隔良好)。

Six clusters has the highest silhouette score at 0.19. 0.19 is not great, and suggests a different clustering algorithm might be better. More on this later.

六個群集的輪廓得分最高,為0.19。 0.19不好,表明使用不同的聚類算法可能更好。 稍后再詳細介紹。

Because 6 clusters is the elbow and has the highest silhouette score, I will use 6 clusters in my grouping analysis. Okay, now that I decided on 6 clusters lets see what players fall into what clusters!

因為6個聚類是肘部,并且輪廓分數(shù)最高,所以在分組分析中將使用6個聚類。 好吧,現(xiàn)在我決定對6個集群進行分類,讓我們看看哪些玩家屬于哪個集群!

final_fit = KMeans(n_clusters=6).fit(reduced_data) #fit 6 clusters df['kmeans_label'] = final_fit.labels_ #label each data point with its clusters df['PLAYER_ID'] = saveIDs #of course we want to know what players are in what cluster player_names = [pd.DataFrame(players_df[players_df['PERSON_ID']==x]['DISPLAY_LAST_COMMA_FIRST']).to_string(header=False,index=False) for x in df['PLAYER_ID']] # because playerID #s mean nothing to me, lets get the names too df['Name'] = player_names #lets also create a dataframe with data about where the clusters occur in the 5 component PCA space. cluster_locs = pd.DataFrame(final_fit.cluster_centers_,columns=['component %s'% str(s) for s in range(np.size(final_fit.cluster_centers_,1))]) cluster_locs.columns = factor_names final_fit = KMeans ( n_clusters = 6 ) . fit ( reduced_data ) #fit 6 clustersdf [ 'kmeans_label' ] = final_fit . labels_ #label each data point with its clustersdf [ 'PLAYER_ID' ] = saveIDs #of course we want to know what players are in what clusterplayer_names = [ pd . DataFrame ( players_df [ players_df [ 'PERSON_ID' ] == x ][ 'DISPLAY_LAST_COMMA_FIRST' ]) . to_string ( header = False , index = False ) for x in df [ 'PLAYER_ID' ]]# because playerID #s mean nothing to me, lets get the names toodf [ 'Name' ] = player_names#lets also create a dataframe with data about where the clusters occur in the 5 component PCA space.cluster_locs = pd . DataFrame ( final_fit . cluster_centers_ , columns = [ 'component %s ' % str ( s ) for s in range ( np . size ( final_fit . cluster_centers_ , 1 ))])cluster_locs . columns = factor_names

Awesome. Now lets see how all the clusters look. These clusters were created in 5 dimensional space, which is not easy to visualize. Below I plot another scatter matrix. The scatter matrix allows us to visualize the clusters in different 2D combinations of the 5D space.

太棒了 現(xiàn)在,讓我們看看所有群集的外觀。 這些簇是在5維空間中創(chuàng)建的,這不容易可視化。 在下面,我繪制了另一個散布矩陣。 散布矩陣使我們能夠以5D空間的不同2D組合可視化群集。

from scipy.stats import gaussian_kde plt.clf() centroids = final_fit.cluster_centers_ #find centroids so we can plot them colors = ['r','g','y','b','c','m'] #cluster colors Clusters = ['Cluster 0','Cluster 1','Cluster 2','Cluster 3','Cluster 4','Cluster 5'] #cluster...names numdata, numvars = reduced_data.shape #players by PCA components fig, axes = plt.subplots(nrows=numvars, ncols=numvars, figsize=(10,10)) #create a scatter matrix with 5**2 cells fig.subplots_adjust(hspace=0.05, wspace=0.05) recs=[] for col in colors: #make some patches for the legend recs.append(mpl.patches.Rectangle((0,0),1,1,fc=col)) fig.legend(recs,Clusters,8,ncol=6) #create legend with patches above for i,ax in enumerate(axes.flat): # Hide all ticks and labels plt.setp(ax.get_yticklabels(), visible=False) #tick labels are too much with this many subplots plt.setp(ax.get_xticklabels(), visible=False) ax.grid(False) #again, too much if i%5==0:ax.set_ylabel(factor_names[i/5]) #label outer y axes if i>19:ax.set_xlabel(factor_names[i-20]) #label outer x axes for i, j in zip(*np.triu_indices_from(axes, k=1)): for x, y in [(i,j), (j,i)]: #plot individual data points and cluster centers axes[y,x].plot(reduced_data[:, x], reduced_data[:, y], 'k.', markersize=2) axes[y,x].scatter(centroids[:,x], centroids[:,y],marker='x',s=169,linewidth=3,color=colors, zorder=10) #create kernel density estimation for each PCA factor on the diagonals for i, label in enumerate(factor_names): density = gaussian_kde(reduced_data[:,i]) density.covariance_factor = lambda : .25 density._compute_covariance() x = np.linspace(min(reduced_data[:,i]),max(reduced_data[:,1])) axes[i,i].plot(x,density(x)) from scipy.stats import gaussian_kdeplt . clf ()centroids = final_fit . cluster_centers_ #find centroids so we can plot themcolors = [ 'r' , 'g' , 'y' , 'b' , 'c' , 'm' ] #cluster colorsClusters = [ 'Cluster 0' , 'Cluster 1' , 'Cluster 2' , 'Cluster 3' , 'Cluster 4' , 'Cluster 5' ] #cluster...namesnumdata , numvars = reduced_data . shape #players by PCA componentsfig , axes = plt . subplots ( nrows = numvars , ncols = numvars , figsize = ( 10 , 10 )) #create a scatter matrix with 5**2 cellsfig . subplots_adjust ( hspace = 0.05 , wspace = 0.05 )recs = []for col in colors : #make some patches for the legendrecs . append ( mpl . patches . Rectangle (( 0 , 0 ), 1 , 1 , fc = col ))fig . legend ( recs , Clusters , 8 , ncol = 6 ) #create legend with patches abovefor i , ax in enumerate ( axes . flat ):# Hide all ticks and labelsplt . setp ( ax . get_yticklabels (), visible = False ) #tick labels are too much with this many subplotsplt . setp ( ax . get_xticklabels (), visible = False )ax . grid ( False ) #again, too muchif i % 5 == 0 : ax . set_ylabel ( factor_names [ i / 5 ]) #label outer y axesif i > 19 : ax . set_xlabel ( factor_names [ i - 20 ]) #label outer x axesfor i , j in zip ( * np . triu_indices_from ( axes , k = 1 )):for x , y in [( i , j ), ( j , i )]:#plot individual data points and cluster centersaxes [ y , x ] . plot ( reduced_data [:, x ], reduced_data [:, y ], 'k.' , markersize = 2 )axes [ y , x ] . scatter ( centroids [:, x ], centroids [:, y ], marker = 'x' , s = 169 , linewidth = 3 , color = colors , zorder = 10 )#create kernel density estimation for each PCA factor on the diagonalsfor i , label in enumerate ( factor_names ):density = gaussian_kde ( reduced_data [:, i ])density . covariance_factor = lambda : . 25density . _compute_covariance ()x = np . linspace ( min ( reduced_data [:, i ]), max ( reduced_data [:, 1 ]))axes [ i , i ] . plot ( x , density ( x ))

In this plot above. I mark the center of a given cluster with an X. For example, Cluster 0 and Cluster 5 are both high in outside skills. Cluster 5 is also high in rim scoring, but low in pure points.

在上面的情節(jié)中。 我用X標記給定群集的中心。例如,群集0和群集5的外部技能都很高。 類別5的籃圈得分也很高,但純分數(shù)卻很低。

Below I look at the players in each cluster. The first thing I do is identify the player closest to the cluster’s center. I call this player the prototype. It is the player that most exemplifies a cluster.

下面我看每個集群中的參與者。 我要做的第一件事是確定離集群中心最近的玩家。 我稱這個玩家為原型。 最能說明集群的是玩家。

I then show a picture of this player because… well I wanted to see who these players were. I print out this player’s stats and the cluster’s centroid location. Finally, I print out the first ten players in this cluster. This is the first ten players alphabetically. Not the ten players closest to cluster center.

然后,我給這位球員展示照片,因為……好吧,我想看看這些球員是誰。 我打印出該玩家的統(tǒng)計數(shù)據(jù)和集群的質心位置。 最后,我打印出該集群中的前十名玩家。 按字母順序排列,這是前十名玩家。 不是最接近集群中心的十個玩家。

from IPython.display import display from IPython.display import Image name = player_names[np.argmin([euclidean(x,final_fit.cluster_centers_[0]) for x in reduced_data])] #find cluster prototype PlayerID = str(int(df[df['Name']==name]['PLAYER_ID'])) #get players ID number #player = Image(url = "http://stats.nba.com/media/players/230x185/"+PlayerID+".png") player = Image(url = 'http://www.pybloggers.com/wp-content/uploads/2016/02/4.bp_.blogspot.com_RaOrchOImw8S3mNk3exLeIAAAAAAAAdZkHs-81mnXO_Es400Lloyd-Daniels-ea756945cc0b89b3cf169e62fa86250980926bfc.jpg',width=100) display(player) #display(df[df['Name']==name]) #prototype's stats display(cluster_locs[0:1]) #cluster centroid location df[df['kmeans_label']==0]['Name'][:10] #first ten players in the cluster (alphabetically) from IPython.display import displayfrom IPython.display import Imagename = player_names [ np . argmin ([ euclidean ( x , final_fit . cluster_centers_ [ 0 ]) for x in reduced_data ])] #find cluster prototypePlayerID = str ( int ( df [ df [ 'Name' ] == name ][ 'PLAYER_ID' ])) #get players ID number#player = Image(url = "http://stats.nba.com/media/players/230x185/"+PlayerID+".png")player = Image ( url = 'http://www.pybloggers.com/wp-content/uploads/2016/02/4.bp_.blogspot.com_RaOrchOImw8S3mNk3exLeIAAAAAAAAdZkHs-81mnXO_Es400Lloyd-Daniels-ea756945cc0b89b3cf169e62fa86250980926bfc.jpg' , width = 100 )display ( player )#display(df[df['Name']==name]) #prototype's statsdisplay ( cluster_locs [ 0 : 1 ]) #cluster centroid locationdf [ df [ 'kmeans_label' ] == 0 ][ 'Name' ][: 10 ] #first ten players in the cluster (alphabetically)

Outside Skills 外在技能 Rim Scoring 輪滑得分 Pure Points 純積分 Defensive Big Man 防守大個子 Dead Eye 死眼
0.830457 0.830457 -0.930833 -0.930833 0.28203 0.28203 -0.054093 -0.054093 0.43606 0.43606

First, let me mention that cluster number is a purely categorical variable. Not ordinal. If you run this analysis, you will likely create clusters with similar players, but in a different order. For example, your cluster 1 might be my cluster 0.

首先,讓我說一下集群號是一個純粹的分類變量。 不連續(xù)。 如果運行此分析,則可能會創(chuàng)建具有相似參與者但順序不同的集群。 例如,您的集群1可能是我的集群0。

Cluster 0 has the most players (25%; about 490 of the 1965 in this cluster analysis) and is red in the scatter matrix above.

聚類0的參與者最多(25%;在此聚類分析中為1965年的490%),并且在上方的散點圖中為紅色。

Cluster 0 players are second highest in outside shooting (in the table above you can see their average score on the outside skills component is 0.83). These players are lowest in rim scoring (-0.93), so they do not draw many fouls – they are basically the snipers from the outside.

類別0的玩家在外部射擊中排名第二(在上表中,您在外部技能部分的平均得分為0.83)。 這些球員的籃下得分最低(-0.93),因此他們沒有犯規(guī)很多-他們基本上是外界的狙擊手。

The prototype is Lloyd Daniels who takes a fair number of 3s. I wouldn’t call 31% a dominant 3-point percentage, but its certainly not bad. Notably, Lloyd Daniels doesn’t seem to do much but shoot threes, as 55% of his shots come from the great beyond.

原型是勞埃德·丹尼爾斯(Lloyd Daniels),他需要3分之多的時間。 我不會說31%是占優(yōu)勢的三分百分比,但它的確不錯。 值得一提的是,勞埃德·丹尼爾斯(Lloyd Daniels)似乎并沒有做多,而是投三分,因為他55%的投籃命中率來自于超凡脫俗。

Cluster 0 notable players include Andrea Bargnani, JJ Barea, Danilo Gallinari, and Brandon Jennings. Some forwards. Some Guards. Mostly good shooters.

類別0的著名球員包括Andrea Bargnani,JJ Barea,Danilo Gallinari和Brandon Jennings。 一些前鋒。 一些警衛(wèi)。 主要是優(yōu)秀的射手。

On to Cluster 1… I probably should have made a function from this code, but I enjoyed picking the players pictures too much.

在集群1上……我可能應該從這段代碼中創(chuàng)建一個函數(shù),但是我非常喜歡挑選玩家照片。

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8

Outside Skills 外在技能 Rim Scoring 輪滑得分 Pure Points 純積分 Defensive Big Man 防守大個子 Dead Eye 死眼
-0.340177 -0.340177 1.008111 1.008111 1.051622 1.051622 -0.150204 -0.150204 0.599516 0.599516
1 Abdul-Jabbar, Kareem 4 Abdur-Rahim, Shareef 9 Adams, Alvan 18 Aguirre, Mark 75 Antetokounmpo, Giannis 77 Anthony, Carmelo 85 Arenas, Gilbert 121 Baker, Vin 133 Barkley, Charles 148 Bates, Billyray Name: Name, dtype: object 1 Abdul-Jabbar, Kareem 4 Abdur-Rahim, Shareef 9 Adams, Alvan 18 Aguirre, Mark 75 Antetokounmpo, Giannis 77 Anthony, Carmelo 85 Arenas, Gilbert 121 Baker, Vin 133 Barkley, Charles 148 Bates, Billyray Name: Name, dtype: object

Cluster 1 is green in the scatter matrix and includes about 14% of players.

群集1在散布矩陣中為綠色,包含約14%的玩家。

Cluster 1 is highest on the rim scoring, pure points, and Dead Eye components. These players get the ball in the hoop.

類別1在輪輞得分,純分和“死眼”組件上最高。 這些球員將球踢進籃筐。

Christian Laettner is the prototype. He’s a solid scoring forward.

Christian Laettner是原型。 他是一個可靠的得分手。

Gilbert Arenas stands out in the first ten names as I was tempted to think of this cluster as big men, but it really seems to be players who shoot, score, and draw fouls.

吉爾伯特·阿里納斯(Gilbert Arenas)在前十名中脫穎而出,因為我很想把這個集群視為大個子,但實際上似乎是那些能夠投籃,得分和犯規(guī)的球員。

Cluster 1 Notable players include James Harden,Kevin Garnet, Kevin Durant, Tim Duncan, Kobe, Lebron, Kevin Martin, Shaq, Anthony Randolph??, Kevin Love, Derrick Rose, and Michael Jordan.

第一組的著名球員包括詹姆斯·哈登,凱文·加內特,凱文·杜randint,蒂姆·鄧肯,科比,勒布朗,凱文·馬丁,沙克,安東尼·蘭道夫,凱文·洛夫,德里克·羅斯和邁克爾·喬丹。

name = player_names[np.argmin([euclidean(x,final_fit.cluster_centers_[2]) for x in reduced_data])] PlayerID = str(int(df[df['Name']==name]['PLAYER_ID'])) #player = Image(url = "http://stats.nba.com/media/players/230x185/"+PlayerID+".png") player = Image(url = 'http://www.pybloggers.com/wp-content/uploads/2016/02/imageocd.comimagesnba10doug-west-wallpaper-height-weight-position-college-high-schooldoug-west-cf9867b0b04ef0bb3d71c7696b2acfac313c1995.jpg',width=100) display(player) #display(df[df['Name']==name]) display(cluster_locs[2:3]) df[df['kmeans_label']==2]['Name'][:10] name = player_names [ np . argmin ([ euclidean ( x , final_fit . cluster_centers_ [ 2 ]) for x in reduced_data ])]PlayerID = str ( int ( df [ df [ 'Name' ] == name ][ 'PLAYER_ID' ]))#player = Image(url = "http://stats.nba.com/media/players/230x185/"+PlayerID+".png")player = Image ( url = 'http://www.pybloggers.com/wp-content/uploads/2016/02/imageocd.comimagesnba10doug-west-wallpaper-height-weight-position-college-high-schooldoug-west-cf9867b0b04ef0bb3d71c7696b2acfac313c1995.jpg' , width = 100 )display ( player )#display(df[df['Name']==name])display ( cluster_locs [ 2 : 3 ])df [ df [ 'kmeans_label' ] == 2 ][ 'Name' ][: 10 ]

Outside Skills 外在技能 Rim Scoring 輪滑得分 Pure Points 純積分 Defensive Big Man 防守大個子 Dead Eye 死眼
0.013618 0.013618 0.101054 0.101054 0.445377 0.445377 -0.347974 -0.347974 -1.257634 -1.257634

Cluster 2 is yellow in the scatter matrix and includes about 17% of players.

第2類在散布矩陣中為黃色,包含約17%的玩家。

Lots of big men who are not outside shooters and don’t draw many fouls. These players are strong 2 point shooters and free throw shooters. I think of these players as mid-range shooters. Many of the more recent Cluster 2 players are forwards since mid-range guards do not have much of a place in the current NBA.

很多大個子不在射手之外,也不會犯規(guī)。 這些球員是強力的2分射手和罰球手。 我認為這些球員是中距離射手。 由于中距離后衛(wèi)在當前NBA中沒有太多位置,因此許多最近的Cluster 2球員都是前鋒。

Cluster 2’s prototype is Doug West. Doug West shoots well from the free throw line and on 2-point attempts, but not the 3-point line. He does not draw many fouls or collect many rebounds.

Cluster 2的原型是Doug West。 道格·韋斯特(Doug West)在罰球線和2分球嘗試中投籃不錯,但3分球卻沒有。 他沒有犯規(guī)很多,也沒有得到很多籃板。

Cluster 2 noteable players include LaMarcus Aldridge, Tayshaun Prince, Thaddeus Young, and Shaun Livingston

第2組值得注意的參與者包括LaMarcus Aldridge,Tayshaun Prince,Thaddeus Young和Shaun Livingston

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8

Outside Skills 外在技能 Rim Scoring 輪滑得分 Pure Points 純積分 Defensive Big Man 防守大個子 Dead Eye 死眼
-1.28655 -1.28655 -0.467105 -0.467105 -0.133546 -0.133546 0.905368 0.905368 0.000679 0.000679
7 Acres, Mark 8 Acy, Quincy 13 Adams, Steven 15 Adrien, Jeff 21 Ajinca, Alexis 26 Aldrich, Cole 34 Alexander, Victor 45 Alston, Derrick 51 Amundson, Lou 52 Andersen, Chris Name: Name, dtype: object 7 Acres, Mark 8 Acy, Quincy 13 Adams, Steven 15 Adrien, Jeff 21 Ajinca, Alexis 26 Aldrich, Cole 34 Alexander, Victor 45 Alston, Derrick 51 Amundson, Lou 52 Andersen, Chris Name: Name, dtype: object

Cluster 3 is blue in the scatter matrix and includes about 16% of players.

群集3在分散矩陣中為藍色,包含約16%的玩家。

Cluster 3 players do not have outside skills such as assists and 3-point shooting (they’re last in outside skills). They do not draw many fouls or shoot well from the free throw line. These players do not shoot often, but have a decent shooting percentage. This is likely because they only shoot when wide open next to the hoop.

第3類玩家沒有助攻和3分投籃等外部技能(他們在外部技能上排名倒數(shù))。 他們在罰球線上沒有很多犯規(guī)或投籃不佳。 這些球員不經(jīng)常投籃,但是投籃命中率很高。 這可能是因為它們僅在箍緊敞開時才射擊。

Cluster 3 players are highest on the defensive big man component. They block lots of shots and collect lots of rebounds.

第三組的球員在防守大個子方面最高。 他們擋住了很多投籃,收集了很多籃板。

The Cluster 3 prototype is Kelvin Cato. Cato is not and outside shooter and he only averages 7.5 shots per 36, but he makes these shots at a decent clip. Cato averages about 10 rebounds per 36.

Cluster 3原型是Kelvin Cato。 卡托不是外線投籃手,他每36次只能投籃7.5次,但他的投籃命中率相當不錯。 卡托平均每36籃板可得到10個籃板。

Notable Cluster 3 players include Andrew Bogut, Tyson Chandler, Andre Drummond, Kawahi Leonard??, Dikembe Mutumbo, and Hassan Whiteside.

著名的第3類玩家包括Andrew Bogut,Tyson Chandler,Andre Drummond,Kawahi Leonard ??,Dikembe Mutumbo和Hassan Whiteside。

name = player_names[np.argmin([euclidean(x,final_fit.cluster_centers_[4]) for x in reduced_data])] PlayerID = str(int(df[df['Name']==name]['PLAYER_ID'])) #player = Image(url = "http://stats.nba.com/media/players/230x185/"+PlayerID+".png") player = Image(url = 'http://www.pybloggers.com/wp-content/uploads/2016/02/www.thenolookpass.comwp-contentuploads201201IMG-724x1024-09e16ef35f0e017bc2181a66651e8ea0dfa9fb4b.jpg', width=100) #a photo just for fun display(player) #display(df[df['Name']==name]) display(cluster_locs[4:5]) df[df['kmeans_label']==4]['Name'][:10] name = player_names [ np . argmin ([ euclidean ( x , final_fit . cluster_centers_ [ 4 ]) for x in reduced_data ])]PlayerID = str ( int ( df [ df [ 'Name' ] == name ][ 'PLAYER_ID' ]))#player = Image(url = "http://stats.nba.com/media/players/230x185/"+PlayerID+".png")player = Image ( url = 'http://www.pybloggers.com/wp-content/uploads/2016/02/www.thenolookpass.comwp-contentuploads201201IMG-724x1024-09e16ef35f0e017bc2181a66651e8ea0dfa9fb4b.jpg' , width = 100 ) #a photo just for fundisplay ( player )#display(df[df['Name']==name])display ( cluster_locs [ 4 : 5 ])df [ df [ 'kmeans_label' ] == 4 ][ 'Name' ][: 10 ]

Outside Skills 外在技能 Rim Scoring 輪滑得分 Pure Points 純積分 Defensive Big Man 防守大個子 Dead Eye 死眼
-0.668445 -0.668445 0.035927 0.035927 -0.917479 -0.917479 -1.243347 -1.243347 0.244897 0.244897

Cluster 4 is cyan in the scatter matrix above and includes the least number of players (about 13%).

簇4在上面的散射矩陣中是青色的,并且包含最少數(shù)量的玩家(大約13%)。

Cluster 4 players are not high on outsize skills. They are average on rim scoring. They do not score many points, and they don’t fill up the defensive side of the stat sheet. These players don’t seem like all stars.

第4類玩家的技巧不高。 他們在籃筐得分上平均。 他們得分不高,也沒有填補統(tǒng)計表的防守端。 這些球員似乎并非全明星。

Looking at Doug Edwards’ stats – certainly not a 3-point shooter. I guess a good description of cluster 4 players might be … NBA caliber bench warmers.

看看道格·愛德華茲(Doug Edwards)的數(shù)據(jù)-當然不是三分球。 我想第4組球員的好描述可能是…NBA口徑替補球員。

Cluster 4’s notable players include Yi Jianlian and Anthony Bennet….yeesh

第4組的知名球員包括易建聯(lián)和安東尼·貝內特.... yeesh

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9

Outside Skills 外在技能 Rim Scoring 輪滑得分 Pure Points 純積分 Defensive Big Man 防守大個子 Dead Eye 死眼
0.890984 0.890984 0.846109 0.846109 -0.926444 -0.926444 0.735306 0.735306 -0.092395 -0.092395
12 Adams, Michael 30 Alexander, Cory 41 Allen, Tony 62 Anderson, Kenny 65 Anderson, Mitchell 78 Anthony, Greg 90 Armstrong, Darrell 113 Bagley, John 126 Banks, Marcus 137 Barrett, Andre Name: Name, dtype: object 12 Adams, Michael 30 Alexander, Cory 41 Allen, Tony 62 Anderson, Kenny 65 Anderson, Mitchell 78 Anthony, Greg 90 Armstrong, Darrell 113 Bagley, John 126 Banks, Marcus 137 Barrett, Andre Name: Name, dtype: object

Cluster 5 is magenta in the scatter matrix and includes 16% of players.

群集5在散布矩陣中為洋紅色,包含16%的參與者。

Cluster 5 players are highest in outside skills and second highest in rim scoring yet these players are dead last in pure points. It seems they score around the rim, but do not draw many fouls. They are second highest in defensive big man.

第5類球員的外部技能最高,籃下得分最高,但這些球員在純積分上倒數(shù)第二。 看來他們在籃筐附近得分,但是并沒有犯規(guī)。 他們在防守大個子中排名第二。

Gerald Henderson Sr is the prototype. Henderson is a good 3 point and free throw shooter but does not draw many fouls. He has lots of assists and steals.

Gerald Henderson Sr是原型。 亨德森是個不錯的三分球罰球手,但是并沒有犯規(guī)。 他有很多助攻和搶斷。

Of interest mostly because it generates an error in my code, Gerald Henderson Jr is in cluster 2 – the mid range shooters.

有趣的主要是因為它在我的代碼中生成錯誤,小杰拉德·亨德森(Jerald Henderson Jr)位于第2類–中距離射擊游戲。

Notable cluster 5 players include Mugsy Bogues, MCW, Jeff Hornacek, Magic Johnson, Jason Kidd, Steve Nash, Rajon Rando, John Stockton. Lots of guards.

值得注意的5類玩家包括Mugsy Bogues,MCW,Jeff Hornacek,Magic Johnson,Jason Kidd,Steve Nash,Rajon Rando和John Stockton。 很多警衛(wèi)。

In the cell below, I plot the percentage of players in each cluster.

在下面的單元格中,我繪制了每個群集中玩家的百分比。

plt.clf() plt.hist(df['kmeans_label'], normed=True,bins=[0,1,2,3,4,5,6],rwidth = 0.5) plt.xticks([0.5,1.5,2.5,3.5,4.5,5.5],['Group 0','Group 1','Group 2','Goup 3','Group 4','Group 5']) plt.ylabel('Percentage of Players in Each Cluster'); plt . clf ()plt . hist ( df [ 'kmeans_label' ], normed = True , bins = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 ], rwidth = 0.5 )plt . xticks ([ 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 ],[ 'Group 0' , 'Group 1' , 'Group 2' , 'Goup 3' , 'Group 4' , 'Group 5' ])plt . ylabel ( 'Percentage of Players in Each Cluster' );

I began this post by asking whether player positions is the most natural way to group NBA players. The clustering analysis here suggests not.

我在開始這篇文章時首先詢問球員的位置是否是對NBA球員進行分組的最自然的方法。 這里的聚類分析表明不是。

Here’s my take on the clusters: Cluster 0 is pure shooters, Cluster 1 is talented scorers, Cluster 2 is mid-range shooters, Cluster 3 is defensive big-men, Cluster 4 is bench warmers, Cluster 5 is distributors. We might call the “positions” shooters, scorers, rim protectors, and distributors.

這是我對集群的看法:集群0是純射手,集群1是有才華的得分手,集群2是中距離射手,集群3是防守大個子,集群4是替補球員,集群5是發(fā)行人。 我們可以稱其為“位置”射手,得分手,籃框保護者和分發(fā)者。

It’s possible that our notion of position comes more from defensive performance than offensive. On defense, a player must have a particular size and agility to guard a particular opposing player. Because of this, a team will want a range of sizes and agility – strong men to defend the rim and quick men to defend agile ball carriers. Box scores are notoriously bad at describing defensive performance. This could account for the lack of “positions” in my cluster.

我們的位置觀念有可能更多來自防守表現(xiàn)而非進攻。 在防守時,球員必須具有特定的身材和敏捷度,以防守特定的對位球員。 因此,一支球隊需要各種尺寸和敏捷度-堅強的人防守籃筐,敏捷的人防守敏捷的球籃。 臭名昭著的禁區(qū)得分在描述防守表現(xiàn)方面很糟糕。 這可以解釋我的集群中缺少“位置”的原因。

I did not include player height and weight in this analysis. I imagine height and weight might have made clusters that resemble the traditional positions. I chose to not include height and weight because these are player attributes; not player performance.

在此分析中,我沒有包括球員的身高和體重。 我猜想身高和體重可能使群集類似于傳統(tǒng)位置。 我選擇不包括身高和體重,因為它們是球員屬性。 不是球員的表現(xiàn)。

After looking through all the groups one thing that stands out to me is the lack of specialization. For example we did not find a single cluster of incredible 3-point shooters. Cluster 1 includes many great shooters, but it’s not populated exclusively by great shooters. It would be interesting if adding additional clusters to the analysis could find more specific clusters such as big-men that can shoot from the outside (e.g., Dirk) or high-volume scorers (e.g., Kobe).

在查看了所有組之后,對我而言突出的一件事是缺乏專業(yè)性。 例如,我們沒有發(fā)現(xiàn)一個令人難以置信的三點射手集群。 群集1包含許多優(yōu)秀射手,但并非僅由優(yōu)秀射手組成。 如果將額外的聚類添加到分析中會發(fā)現(xiàn)更具體的聚類,例如可以從外面射擊的大個子(例如Dirk)或得分高的得分手(例如Kobe),這將很有趣。

翻譯自: https://www.pybloggers.com/2016/02/grouping-nba-players/

nba球員python

總結

以上是生活随笔為你收集整理的nba球员python_分组NBA球员的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

日韩免费观看一区二区 | 精品久久一区二区三区 | 免费在线观看中文字幕 | 久久综合色天天久久综合图片 | 一区二区三区中文字幕在线 | 在线中文字幕电影 | 中文字幕人成不卡一区 | 久久99国产精品久久 | 久久在线精品视频 | 亚洲国产999| 久久国产精品二国产精品中国洋人 | 国产97在线观看 | 成人国产精品免费观看 | 国产黄色免费在线观看 | 人人舔人人射 | 亚洲 欧美 综合 在线 精品 | 午夜色影院 | 色在线亚洲 | 色婷婷成人 | 国产在线播放观看 | 欧美日本高清视频 | 日韩免费电影一区二区三区 | 亚洲综合成人在线 | 麻豆果冻剧传媒在线播放 | 在线成人免费电影 | ww亚洲ww亚在线观看 | 亚洲精品高清一区二区三区四区 | 日日综合 | 天天色天天搞 | 91在线看视频免费 | 国模一二三区 | 色婷婷亚洲精品 | 99热在线网站| 国产黄色免费在线观看 | 亚洲在线 | 国产一级电影网 | 精品国产一区在线观看 | 激情五月婷婷综合网 | 伊色综合久久之综合久久 | 精品国产一区二区三区四区在线观看 | 欧美日韩高清在线 | 天天射天天射 | 九色琪琪久久综合网天天 | 999视频网 | 亚洲精品免费观看 | 国产亚洲成av片在线观看 | 奇米影视8888在线观看大全免费 | 日本久久久久久科技有限公司 | 中文字幕一二三区 | 国产一区二区高清不卡 | 中文字幕一区二区三区四区视频 | 亚洲草视频 | 中文字幕在线视频免费播放 | 黄色成人影视 | 久久99久久99精品免视看婷婷 | 国内成人精品视频 | 国产精品永久久久久久久www | 五月婷婷在线观看 | 亚洲美女在线一区 | 国产99久久久国产精品 | 久久五月婷婷丁香社区 | 五月花激情 | 91中文在线观看 | 中文字幕文字幕一区二区 | 人人爽人人av | 日韩免费专区 | 九九天堂 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 欧美日韩中文国产 | 亚洲精品男女 | 国产精品久久久久久久久久免费看 | 999成人免费视频 | 国产情侣一区 | 少妇按摩av | 500部大龄熟乱视频使用方法 | 黄色小网站在线 | 丁香六月综合网 | 久久久久久久99精品免费观看 | 国产精品久久 | 91成人免费在线视频 | av在线播放不卡 | 9999国产| 在线免费观看亚洲视频 | 欧美一区二区三区不卡 | 国产一区二区久久精品 | 91日本在线播放 | 久久综合九色欧美综合狠狠 | 久久久免费毛片 | 欧美日韩免费观看一区=区三区 | 日韩精品一区二区三区第95 | 一区二区三区久久精品 | 久久久久久久久久久网 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 久久精品一区二区三区四区 | 五月天综合 | 在线看免费 | 在线观看深夜福利 | 成人av电影免费在线播放 | 97成人精品区在线播放 | 久久久国产精品一区二区三区 | 夜夜嗨av色一区二区不卡 | 中文字幕之中文字幕 | 国产免费一区二区三区网站免费 | 日韩大片在线播放 | 久久久国产精品免费 | 久久在线精品 | a亚洲视频 | 亚洲视频 视频在线 | 日产乱码一二三区别在线 | 国产成人精品久 | 久久综合色婷婷 | 国产小视频网站 | 国产成人av片 | 狠狠五月婷婷 | 日韩h在线观看 | 日韩av免费大片 | 亚洲精品美女免费 | av免费电影网站 | 五月天丁香 | 久久成人国产精品入口 | 免费合欢视频成人app | 日韩欧美视频一区 | 国产最新91| 中文字幕欧美日韩va免费视频 | 成人不用播放器 | 午夜国产在线观看 | 97av在线视频 | 国产精品二区三区 | 国产一级片免费播放 | 国产美女视频免费 | 午夜999 | 国产涩图 | 最近中文字幕完整高清 | 国产精品嫩草影院9 | 久久久久免费精品 | 久久久久久99精品 | 成人av网站在线 | 亚洲国产字幕 | 欧美色综合 | 在线视频精品播放 | 人人草天天草 | 最近免费中文字幕大全高清10 | 中文字幕在线观看一区二区三区 | 国产成人精品av在线观 | 国产一区视频在线 | 国产精品欧美一区二区三区不卡 | 日韩一区二区三区在线看 | 国产免费片| 中文字幕在线观看视频网站 | www.狠狠 | 久久精品网站免费观看 | 日韩高清网站 | 99爱这里只有精品 | 在线观看色网站 | 久久久久久国产精品美女 | 五月天免费网站 | 91九色精品国产 | 五月天久久精品 | 国模视频一区二区 | 91香蕉国产 | 99爱视频 | 国产五十路毛片 | 日韩高清网站 | 久久伊人精品天天 | 91精品国产成人 | 免费在线激情电影 | 黄网站app在线观看免费视频 | 亚洲精品高清视频在线观看 | 在线观看视频97 | 成人午夜影视 | 久草精品资源 | 爱色av.com| 亚洲精品一区二区网址 | 色伊人网| 欧美性护士 | 久久国产精品小视频 | 久久精品一区二区三区国产主播 | 丁香六月综合网 | 91成人在线网站 | 2019中文最近的2019中文在线 | 黄色精品一区二区 | 999精品视频 | 日本久久片 | 日韩欧美视频免费看 | 国产午夜精品一区二区三区欧美 | 国产精品一区久久久久 | 97在线精品国自产拍中文 | 成年人在线播放视频 | 亚洲一区 影院 | 国产视频欧美视频 | 久久精国产 | 国产1区2区3区精品美女 | 久久99精品一区二区三区三区 | 欧美日本在线视频 | 在线久热 | 婷婷丁香在线视频 | 伊人五月天综合 | 亚洲国产精品电影在线观看 | 国精产品一二三线999 | www.五月天婷婷 | 91人人在线 | 国产在线观看污片 | 人人藻人人澡人人爽 | 激情五月播播久久久精品 | 91精品免费看 | 成人午夜黄色影院 | 热久久免费国产视频 | 97热视频 | 免费观看特级毛片 | 99久久夜色精品国产亚洲 | 国产精品久久久久久久久费观看 | 成人免费中文字幕 | 亚洲精品综合在线观看 | 国产免费又爽又刺激在线观看 | 九九精品视频在线观看 | 麻豆国产视频下载 | 亚洲成人国产精品 | 国产精品综合av一区二区国产馆 | a精品视频 | 18+视频网站链接 | 日韩免费观看一区二区 | 亚洲精品视频大全 | 中文在线免费观看 | 久久精品99国产国产 | 中文字幕电影网 | 91视频在线网址 | 欧美精品久久天天躁 | 91精品国 | 久久97精品 | 天天干天天射天天爽 | 国产午夜精品一区二区三区欧美 | 高清国产午夜精品久久久久久 | 在线观看亚洲国产 | 精品亚洲视频在线 | 日韩欧美在线免费 | 国产免费高清 | 久久在线精品视频 | 久久久 激情| 国产中文欧美日韩在线 | 中文字幕三区 | 免费在线色视频 | 国产不卡视频在线 | 国产香蕉在线 | 四虎影视国产精品免费久久 | 精品国产一区二区三区av性色 | 四虎影视国产精品免费久久 | 伊人干综合 | 夜添久久精品亚洲国产精品 | 成 人 a v天堂 | 午夜私人影院久久久久 | 九色视频网址 | av高清在线观看 | 一级性视频 | 久久综合狠狠综合久久综合88 | 成人永久在线 | 国产视频在 | 天天射一射 | 18久久久| 四虎最新域名 | 五月开心综合 | 亚洲欧美国产日韩在线观看 | 午夜免费久久看 | 国产香蕉av| 久久精品日产第一区二区三区乱码 | 久久伊人五月天 | 91在线观看欧美日韩 | 亚洲欧美国产精品va在线观看 | 黄色一级动作片 | 三日本三级少妇三级99 | 欧美一级免费片 | 国产精品高清一区二区三区 | 男女激情片在线观看 | 97视频免费看 | 激情av在线播放 | 人人爱爱 | 国产粉嫩在线观看 | 国产亚洲在线观看 | 天天干天天草天天爽 | 亚洲国产中文字幕在线观看 | 久久久久久不卡 | 欧美成人精品在线 | 91亚洲网站| 日韩r级在线 | 久草在线看片 | 最新91在线视频 | 亚洲电影第一页av | 国产精品igao视频网入口 | 国产成人福利在线观看 | 成人在线一区二区 | 开心激情久久 | 99精品久久99久久久久 | 精品国产伦一区二区三区免费 | 丁香婷婷综合网 | 亚洲欧洲在线视频 | a在线免费| 久久久免费网站 | 二区三区av| 亚洲天堂社区 | 黄a网| 国产色婷婷 | 亚洲国产精彩中文乱码av | 国内精品亚洲 | 久久久96 | 免费男女羞羞的视频网站中文字幕 | 伊人色**天天综合婷婷 | 亚洲视频在线免费看 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 香蕉视频4aa | 在线国产福利 | 免费在线91| 国产区在线 | 不卡的av在线 | 免费日韩高清 | 高清不卡免费视频 | 超碰日韩在线 | 日本少妇高清做爰视频 | 夜夜干天天操 | 国产一区二区久久久久 | 欧美日韩国产一区二区三区在线观看 | 二区三区视频 | 欧美日韩一区二区久久 | 500部大龄熟乱视频使用方法 | 国产你懂的在线 | 懂色av一区二区在线播放 | 少妇超碰在线 | 中文字幕高清免费日韩视频在线 | 在线va网站 | 91在线小视频| 亚洲va欧洲va国产va不卡 | 在线观看精品一区 | 婷婷婷国产在线视频 | 天天干天天操天天入 | 免费97视频 | 免费h漫在线观看 | 成人免费在线观看av | 日韩有码中文字幕在线 | 免费的成人av | 91精品国产自产老师啪 | 国产精品免费观看视频 | 一区二区三区高清在线观看 | 最新av网址在线 | 国产精品v a免费视频 | 五月婷婷六月综合 | 国产一区二三区好的 | 亚洲精区二区三区四区麻豆 | 国语黄色片 | 国产一区二区三区网站 | 国产不卡网站 | 中文字幕欧美日韩va免费视频 | 麻豆系列在线观看 | 国产成人99av超碰超爽 | 日本女人在线观看 | 最近免费观看的电影完整版 | 日韩精品久久久久 | 日韩aⅴ视频 | 97成人在线免费视频 | 91在线区| 日韩欧美国产精品 | 久久在现视频 | 国产超碰97 | 亚洲免费黄色 | 亚洲精品一区二区久 | 国产精品门事件 | 97成人在线视频 | 99夜色 | av 一区二区三区 | 夜夜高潮夜夜爽国产伦精品 | 亚洲国产精久久久久久久 | 久久99亚洲精品久久久久 | 亚洲免费av在线播放 | 国产精品成人一区二区 | 国产精品麻豆一区二区三区 | 精品视频不卡 | 亚洲午夜久久久综合37日本 | 成人久久网 | 久久永久视频 | 天天插天天操天天干 | 天天综合视频在线观看 | 高清av在线免费观看 | 中文av影院 | 日韩精品不卡在线观看 | 00av视频 | 91麻豆精品91久久久久同性 | 国产一区二区三区 在线 | 999一区二区三区 | 欧美日韩中文另类 | 永久免费的啪啪网站免费观看浪潮 | 91探花系列在线播放 | 国产一区二区高清 | 亚洲视频1区2区 | 中文在线字幕观看电影 | 国产高清av免费在线观看 | 中文字幕a∨在线乱码免费看 | 日韩免费视频一区二区 | 天天射天 | a色视频| 综合色婷婷 | 久久久久久黄色 | 大胆欧美gogo免费视频一二区 | 天天拍天天操 | 日韩精品一区二区免费 | 五月av在线| 日韩激情影院 | 日本在线观看中文字幕 | 最近中文字幕在线中文高清版 | 亚洲国产成人精品久久 | 午夜10000 | 99国产情侣在线播放 | 亚洲成人二区 | 免费看片亚洲 | 精品一区二区三区四区在线 | 天天爽天天爽天天爽 | 成人午夜电影网 | 久久毛片高清国产 | 日韩精品一区二区三区丰满 | 91麻豆精品国产91久久久无限制版 | 国产精品美女www爽爽爽视频 | 天堂久久电影网 | 国产成人综合图片 | 在线蜜桃视频 | 亚洲精品午夜久久久久久久 | 奇米影视777影音先锋 | 黄色软件网站在线观看 | 中文字幕一区二区三区四区视频 | 久久福利在线 | 成人在线电影观看 | 欧美日韩亚洲在线观看 | 国产成人久久久77777 | 国产精品人人做人人爽人人添 | 一本一道久久a久久精品蜜桃 | 亚洲国产成人在线观看 | 激情深爱五月 | 成人精品影视 | 亚洲最新av网站 | 91麻豆精品国产91久久久久久久久 | 91精品秘密在线观看 | 亚洲国产精品视频 | 免费在线播放黄色 | 成人永久在线 | 日韩精品字幕 | 婷婷午夜激情 | 欧美日韩免费观看一区=区三区 | 九九有精品| 91丨九色丨91啦蝌蚪老版 | 中文字幕专区高清在线观看 | 久久久久久97三级 | 中文字幕av电影下载 | 麻豆国产露脸在线观看 | 99精品国产99久久久久久97 | 色婷婷亚洲综合 | 一区二区三区四区不卡 | 91高清视频在线 | 四虎成人精品在永久免费 | 婷婷六月丁 | 精品免费一区 | 黄色av影院| 久久精品视频2 | 久久久久国产免费免费 | 久久精品欧美 | 国产香蕉97碰碰久久人人 | 国产精品高潮久久av | 波多野结衣在线观看一区 | 久久第四色 | 国产精品mm | 人人藻人人澡人人爽 | 玖玖视频免费在线 | 最近乱久中文字幕 | 欧美日韩另类在线 | 伊人小视频 | 久久97超碰 | 日日夜夜狠狠 | www.av免费观看 | 日本护士撒尿xxxx18 | 免费看色的网站 | 黄色av电影在线 | 久久久精品在线观看 | 九九精品视频在线观看 | 免费在线观看黄网站 | 久久久精品 一区二区三区 国产99视频在线观看 | 日韩美在线 | 国产精品一区二区白浆 | 国产色婷婷精品综合在线手机播放 | 天天干夜夜爱 | 天天操比 | 蜜桃视频在线观看一区 | 国产999精品久久久久久麻豆 | 久久这里只有精品视频首页 | av在线收看 | 亚洲视频六区 | 欧美另类视频 | 亚洲成人av免费 | 国内久久久久久 | 五月av在线 | 亚洲精品美女在线观看播放 | 91成版人在线观看入口 | 亚洲视频综合 | 中文字幕 二区 | 国产字幕在线看 | 中文字幕一二 | 9色在线视频 | 国产又粗又猛又色又黄网站 | 日韩激情中文字幕 | 麻豆国产露脸在线观看 | 91在线免费看片 | 亚洲视频在线观看网站 | 中文字幕在线观看免费观看 | 色婷婷av一区 | 极品久久久 | 九九精品视频在线 | 开心丁香婷婷深爱五月 | 亚洲国产最新 | 午夜精品久久久久久久久久久 | 欧美视频在线观看免费网址 | 一级黄色免费网站 | 国产在线精 | 久草男人天堂 | 免费视频久久久久久久 | 99视频国产精品免费观看 | 91av资源在线| 久草热久草视频 | 久久涩涩网站 | www.五月天| 在线看一级片 | 国产高清免费av | 日韩在线高清免费视频 | 日韩理论片在线 | 青春草视频 | 国产精品乱码高清在线看 | 国产字幕在线播放 | 91人人爽人人爽人人精88v | 日韩欧美一区二区在线 | 91成人免费在线视频 | 狠狠久久婷婷 | 91视频啪| 一区二区三区四区久久 | 精品久久综合 | 久久网页 | 黄av免费 | 色婷婷av一区二 | 精品美女在线视频 | 国产精品久久久久久久久久久久午 | 婷婷色网| 欧美精品久久久久久久久久久 | av免费网页 | 欧美性色黄大片在线观看 | 狠狠狠色丁香综合久久天下网 | 四虎成人精品 | 欧美日韩国产高清视频 | 亚洲天堂网站 | 久精品一区 | 精品视频久久 | 91麻豆看国产在线紧急地址 | 免费在线播放黄色 | 狠狠干在线播放 | 日韩极品视频在线观看 | 九九热免费观看 | 综合色伊人 | 激情六月婷婷久久 | 免费观看成人 | 国产精品手机看片 | 中文字幕在线免费观看 | 在线成人免费电影 | 91.精品高清在线观看 | 日韩理论在线观看 | 激情文学综合丁香 | 亚洲国产黄色 | 欧美日韩不卡一区 | 中文字幕在线观看第一页 | 久久久久久免费毛片精品 | 久久精品免费 | 久99精品 | av黄色在线观看 | 久99久久| 99麻豆久久久国产精品免费 | 99视频在线 | 免费观看91视频大全 | 最新av网站在线观看 | 亚洲精品国产视频 | 天天爽天天爽夜夜爽 | 日批在线观看 | 免费看成人a | 日韩电影在线观看一区 | 久久精品久久精品久久39 | 在线v片免费观看视频 | 久久艹国产视频 | 久久久久久久久久久久电影 | 日本老少交| 久久久国产精品免费 | 成人免费视频在线观看 | 久久视频在线观看中文字幕 | 国内久久久久久 | 欧美色图亚洲图片 | 亚洲最大在线视频 | 日韩国产欧美视频 | 97av在线视频| 久久精品这里热有精品 | 97精品国产97久久久久久 | 天天综合久久 | 黄色网www| 免费看黄视频 | 高清av中文在线字幕观看1 | 免费看黄色毛片 | 亚洲在线成人精品 | 日日操操操 | www.福利| 91亚洲永久精品 | 国产一级二级三级在线观看 | 夜色.com | 高清不卡毛片 | 国产精品theporn | 婷婷成人亚洲综合国产xv88 | 欧美精品久久久久性色 | av在线在线 | 亚洲国产高清视频 | 天天操天天摸天天射 | 久久婷婷国产色一区二区三区 | 亚洲精品视频在线观看视频 | 亚洲区另类春色综合小说 | 国产 日韩 欧美 在线 | 91在线视频精品 | 久久av黄色| 久久黄色美女 | 中日韩欧美精彩视频 | 国产一区二区三区网站 | 在线观看亚洲精品视频 | 天天做天天爱天天综合网 | 在线视频日韩一区 | 国产超碰在线 | 国产黄a三级三级 | 国产精品欧美 | 国产在线97 | 亚洲日本三级 | 美女视频久久久 | 欧美激情综合五月 | 精品欧美小视频在线观看 | 天天干天天干天天干天天干天天干天天干 | 在线午夜av | www.天天干 | 免费在线播放av电影 | 日韩精品久久久久久久电影竹菊 | av大全在线播放 | 黄网站色视频免费观看 | 在线观看亚洲电影 | 国产在线观看你懂得 | 狠狠躁天天躁综合网 | 天天操人人干 | 国产尤物一区二区三区 | 久久精品国产一区二区电影 | 日韩电影一区二区三区在线观看 | 国产91九色视频 | 久久人人精品 | 久久99在线| 91精品国产自产在线观看永久 | 免费三级骚 | 免费黄色网址网站 | 天天色天天射综合网 | 丁香花中文在线免费观看 | av黄色成人| 国产亚洲成人网 | 韩国av一区 | 久草在线费播放视频 | 亚洲无在线 | 麻豆国产视频下载 | 91日韩免费| 99精品在线观看 | 婷婷中文字幕综合 | 国产一区二区在线播放视频 | 国产黄色一级片在线 | 色综合狠狠干 | 四虎国产精 | 中文字幕视频观看 | 特及黄色片 | 99视频精品视频高清免费 | av黄色在线观看 | 亚洲精品一区二区三区高潮 | 激情五月看片 | 人人爽人人香蕉 | av成人资源 | 久久草在线视频国产 | 永久免费av在线播放 | 国产精品视频app | www.一区二区三区 | 精品一二 | 国产日韩精品一区二区 | 亚洲日本va中文字幕 | 亚洲精品高清在线 | 国产精品乱看 | 在线观看成人 | 91成人网在线播放 | 亚洲aⅴ乱码精品成人区 | 久久国产一区二区 | 久久久久久久毛片 | 免费一级片视频 | 欧美a级片网站 | 这里只有精品视频在线 | 久久免费精品 | 久久久精品视频网站 | 日韩精品无码一区二区三区 | 成人sm另类专区 | 丁香在线 | 808电影免费观看三年 | 久久人人爽人人爽人人片 | 日韩黄色在线观看 | 操操爽| 国产在线观看免费观看 | 超碰人人在线观看 | 国产午夜三级一二三区 | 国产亚洲片 | 成人中文字幕在线观看 | 成人免费在线观看av | av字幕在线 | 欧美精品久久久久 | 嫩嫩影院理论片 | 一二三精品视频 | 亚洲伊人第一页 | 这里有精品在线视频 | 亚洲特级毛片 | 国产色秀视频 | 国产精品一区二区美女视频免费看 | 国产精品久久嫩一区二区免费 | 亚洲黄色在线免费观看 | www狠狠操| 最近中文字幕大全中文字幕免费 | 日韩亚洲国产中文字幕 | 国产91精品一区二区麻豆网站 | 97电院网手机版 | 最近免费在线观看 | 色资源中文字幕 | 精品久久国产一区 | 91九色国产视频 | 久久99国产精品免费 | 在线a亚洲视频播放在线观看 | 国产精品视频免费观看 | 777久久久| 国产精品美女久久久久久网站 | 婷婷色综合 | 久久精品这里热有精品 | 中文在线中文资源 | 狠狠色网 | 欧美日韩国产二区 | 婷婷午夜激情 | 亚洲天天在线 | 久久久久久久久爱 | 中文字幕在线视频免费播放 | 在线观看中文字幕网站 | 国产精品xxxx18a99 | 中文字幕亚洲在线观看 | 日韩精品专区 | 国产精品久久久久一区二区国产 | 在线天堂8√ | 99热超碰| 日韩久久久 | 国产高清视频在线播放一区 | wwwwww黄| av高清一区| 色婷婷一区| 探花视频在线观看+在线播放 | 国产精品综合久久久 | 极品久久久久 | 免费看三级网站 | 欧美一级看片 | 99av在线视频| 亚洲爱爱视频 | 亚洲区色 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 国产热re99久久6国产精品 | 99久久久国产精品免费观看 | 日韩在线观看视频一区二区三区 | 久久久久久久久国产 | 亚洲九九爱 | 国产999精品久久久久久麻豆 | 天天爽人人爽夜夜爽 | 亚洲va欧美va人人爽春色影视 | 国产精品久久久精品 | 成人久久久久久久久久 | 91麻豆精品国产91久久久无需广告 | 免费视频你懂得 | 天天爱天天舔 | 亚洲国产精品女人久久久 | 亚洲精品视频大全 | 中文字幕91 | 国产美女主播精品一区二区三区 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 亚洲狠狠干 | 精品亚洲网 | 日本久久精| 久久狠狠干 | www.久久免费| 中文国产字幕在线观看 | 日本护士三级少妇三级999 | 波多野结衣一区二区 | av中文字幕在线免费观看 | 日韩免费三级 | 精品国内自产拍在线观看视频 | 欧美日韩天堂 | 亚洲一区美女视频在线观看免费 | 99在线热播精品免费99热 | 91视频88av | 在线观看中文字幕 | 精品国产伦一区二区三区免费 | 午夜色大片在线观看 | 中文字幕国产精品一区二区 | 国产精品亚洲a | 亚洲波多野结衣 | 久久av免费电影 | 免费看毛片网站 | 91精品免费在线 | 99精品欧美一区二区三区 | 久久人人爽视频 | 中文字幕电影一区 | 美女视频a美女大全免费下载蜜臀 | 色综合天天色综合 | 日本一区二区三区免费观看 | 91在线视频免费91 | 草久在线| 亚洲三级黄色 | 欧美日韩精品在线观看视频 | 久久黄色片 | 国产精品剧情在线亚洲 | 国产激情免费 | 韩国一区二区三区在线观看 | 亚洲理论在线 | 亚洲mv大片欧洲mv大片免费 | 特级aaa毛片| 99精彩视频在线观看免费 | av在线直接看| 精品a在线 | 国产精品日韩在线观看 | 亚洲国产伊人 | 婷婷久久国产 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 337p西西人体大胆瓣开下部 | 人人爱人人爽 | 午夜 在线 | 97在线观视频免费观看 | 国产精品久久久久久电影 | 中文字幕一区在线 | 蜜臀91丨九色丨蝌蚪老版 | 国产一区二区成人 | 欧美日韩亚洲在线观看 | av电影不卡在线 | 日本精品一区二区三区在线播放视频 | 亚洲精品乱码久久久久久蜜桃动漫 | a黄色| 国产精品久久久久一区二区三区共 | 欧美精品一区在线 | 精品一区在线看 | 国产精品尤物 | 日韩免费在线观看网站 | 国产精品美女视频 | 午夜精品一区二区三区免费视频 | 国产一区二区成人 | 91免费高清在线观看 | 欧美日韩亚洲精品在线 | 91在线播放视频 | 99精品一区二区三区 | 在线а√天堂中文官网 | 国产69精品久久久久9999apgf | 久久天天拍 | 在线观看久久 | 青青久草在线 | 久久精品站 | 五月花婷婷 | 中文字幕在线播放一区 | 国产专区精品视频 | 国产黄色看片 | aaa日本高清在线播放免费观看 | a午夜在线 | 免费在线观看日韩视频 | 日韩在线观看 | 欧美在线视频不卡 | 久久手机免费观看 | 91亚瑟视频| 国产视频一级 | 涩五月婷婷 | 精品久久久亚洲 | 中文乱码视频在线观看 | 国产精品女教师 | 国产亚洲成人精品 | 成人h在线播放 | 天天干天天拍天天操天天拍 | 免费视频一二三区 | 亚洲成人黄色在线 | 国产视频黄 | 国产麻豆果冻传媒在线观看 | 欧美成人在线网站 | 丰满少妇高潮在线观看 | 天天操天天是 | 亚洲精品国精品久久99热 | 欧美一级xxxx | 亚洲天天干 | 成年人视频在线免费播放 | 三级av免费观看 | 色婷av | 国产高清视频免费在线观看 | 丁香六月婷婷开心婷婷网 | 一二三区av | 制服丝袜一区二区 | 色在线免费观看 | 色婷婷国产精品 | 夜夜操狠狠操 | 国产精品成久久久久三级 | 中文字幕在线免费观看视频 | 日韩3区 | 国产打女人屁股调教97 | 白丝av免费观看 | 久久艹免费 | 91超碰在线播放 | 久久久久国产a免费观看rela | 久草香蕉在线视频 | 欧美午夜久久 | 五月天激情婷婷 | 国产成人三级在线观看 | 91av九色| 亚洲国产久| 国产精品久久艹 | 亚洲第一中文字幕 | 亚洲国产99 | 免费看十八岁美女 | 天堂黄色片 | 最新国产精品久久精品 | 最新成人av | 欧美视频日韩视频 | 亚洲国产中文字幕在线观看 | 国产淫a | 91九色视频在线观看 | 国产福利不卡视频 | 手机在线永久免费观看av片 | 91麻豆精品一区二区三区 | 久久99国产视频 | 精品国产网址 | 免费黄色激情视频 | 欧美日韩国产精品一区二区亚洲 | 国产中文字幕久久 | 亚洲国产网站 | 日韩免费在线观看 | 国产精品系列在线 | 国产精品一二 | 又黄又色又爽 | 99久久精品国产亚洲 | 国产第页 | 成人在线视频一区 | 亚洲精品日韩一区二区电影 | 美国三级黄色大片 | 国产精彩视频 | 激情五月婷婷网 | 99久久精品国产一区 | 91麻豆文化传媒在线观看 | 香蕉91视频 | 天天草天天干天天 | 精品国产中文字幕 | 国产欧美久久久精品影院 | 亚洲最新视频在线 | 欧美日韩精品电影 | av超碰免费在线 | 婷婷草| 久久人人爽 | 久久人人爽人人人人片 | 精品国偷自产国产一区 | 亚洲不卡123 | 色婷婷综合久色 | 国产精品自产拍在线观看中文 | 国产va在线| 99热 精品在线 | 日韩在线电影一区二区 | 天天操天天干天天摸 | 久久久久久久久久亚洲精品 | 四虎在线视频免费观看 | 天天草天天色 | 亚洲精品电影在线 | 日韩欧美电影网 | 日韩免费看视频 | 91在线公开视频 | 五月婷婷激情综合 | 摸bbb搡bbb搡bbbb| 日韩av一卡二卡三卡 | 亚洲国产一区av | 午夜色大片在线观看 | 岛国精品一区二区 | 欧产日产国产69 | 国产黄色大全 | 一区二区三区精品久久久 | 国产二区视频在线 | 亚洲午夜久久久久久久久 | 日韩一区精品 | 国产精品资源在线 | 国产精品中文 | 亚洲精品免费在线播放 | 成年人在线观看 | 中文字幕一区二区三区久久蜜桃 | 2023av在线 | 玖玖在线视频观看 | 久久国产乱| 欧美激情va永久在线播放 | 99视频国产精品免费观看 | 黄色免费网站下载 | 国产成人精品亚洲a | 成人在线你懂得 |