NBAはデータを豊富に提供しているので分析に適しています。
ただし、身長や体重が日本と異なる表記なので、日本で分かりやすいようにデータを変換してみます。
ついでに欠損値除去や微調整してデータを取り扱い安くします。
まず、元データ player_data.csv の中身を確認します。
- filename = "player_data.csv"
- df = pd.read_csv(filename)
- print(df.head())
- print()
- print(df.shape)
- print()
- print(df.info())
name year_start year_end position height weight birth_date college
0 Alaa Abdelnaby 1991 1995 F-C 6-10 240.0 June 24, 1968 Duke University
1 Zaid Abdul-Aziz 1969 1978 C-F 6-9 235.0 April 7, 1946 Iowa State University
2 Kareem Abdul-Jabbar 1970 1989 C 7-2 225.0 April 16, 1947 University of California, Los Angeles
3 Mahmoud Abdul-Rauf 1991 2001 G 6-1 162.0 March 9, 1969 Louisiana State University
4 Tariq Abdul-Wahad 1998 2003 F 6-6 223.0 November 3, 1974 San Jose State University
(4550, 8)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4550 entries, 0 to 4549
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 4550 non-null object
1 year_start 4550 non-null int64
2 year_end 4550 non-null int64
3 position 4549 non-null object
4 height 4549 non-null object
5 weight 4544 non-null float64
6 birth_date 4519 non-null object
7 college 4248 non-null object
dtypes: float64(1), int64(2), object(5)
- print(df[df['weight'].isnull()])
- print()
- print(df[df['birth_date'].isnull()].sort_values('year_end', ascending=False))
- df2 = df.dropna(how="any")
- # 1foot = 30.48, 1inch = 2.54cm
- FOOT= 30.48
- INCH = 2.54
- # 1pond = 0.4536kg
- LB = 0.4536
- # フィートをセンチに
- def toCenti(height):
- ft, inc = height.split("-")
- cent = int(ft) * FOOT + int(inc) * INCH
- return round(cent, 2)
- # ポンドをキログラムに
- def toKilogram(weight):
- kg = weight * LB
- return round(kg, 2)
- # 以上の関数を身長体重データに適用させる
- df2['height'] = df2['height'].apply(toCenti)
- df2['weight'] = df2['weight'].apply(toKilogram)
- print(df2.head())
- print()
- print(df2.shape)