Coursera – Introduction to Data Science in Python #16 (3週目その3)

Coursera『Introduction to Data Science in Python – by University of Michigan』の学習メモ

Scales

データサイエンティストとして知っておくべき4つのスケール。

Ratio scale

データ間の異なりが一定な尺度。例えば、身長や体重。

Interval scale

データ間の異なりが一定な尺度であるが、測れないことがない。例えば、気温は0度であっても有効な値。方角も同様に0という概念がない。

Ordinal scale

データ間の異なりが一定ではなく、その順序が重要な意味を持つ尺度。例えば、成績のグレード。

Nominal scale

カテゴリ分けの値。

Why scales?

これらのスケールは、統計や機械学習においてとても重要なものであり、Pandasでもスケールを扱うたくさんの関数が存在する。

astype(‘category’)

カテゴリーデータを生成するメソッド。


# 以下のような成績グレードをデータフレームで生成
df = pd.DataFrame(['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D'],
                  index=['excellent', 'excellent', 'excellent', 'good', 'good', 'good', 'ok', 'ok', 'ok', 'poor', 'poor'])
df.rename(columns={0: 'Grades'}, inplace=True)
df

df['Grades'].astype('category').head()
# excellent    A+
# excellent     A
# excellent    A-
# good         B+
# good          B
# Name: Grades, dtype: category
# Categories (11, object): [A, A+, A-, B, ..., C+, C-, D, D+]

この引数に “ordered=True” を渡せば、Ordinal scaleにすることができる。


grades = df['Grades'].astype('category',
                             categories=['D', 'D+', 'C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+'],
                             ordered=True)
grades.head()
# excellent    A+
# excellent     A
# excellent    A-
# good         B+
# good          B
# Name: Grades, dtype: category
# Categories (11, object): [D < D+ < C- < C ... B+ < A- < A < A+]

grades > 'C'
# excellent     True
# excellent     True
# excellent     True
# good          True
# good          True
# good          True
# ok            True
# ok           False
# ok           False
# poor         False
# poor         False
# Name: Grades, dtype: bool

cut(object, number)

データを引数で渡したnumberの数分にカテゴリ分するPandasのメソッド


s = pd.Series([168, 180, 174, 190, 170, 185, 179, 181, 175, 169, 182, 177, 180, 171])
pd.cut(s, 3)
# 0     (167.978, 175.333]
# 1     (175.333, 182.667]
# 2     (167.978, 175.333]
# 3         (182.667, 190]
# 4     (167.978, 175.333]
# 5         (182.667, 190]
# 6     (175.333, 182.667]
# 7     (175.333, 182.667]
# 8     (167.978, 175.333]
# 9     (167.978, 175.333]
# 10    (175.333, 182.667]
# 11    (175.333, 182.667]
# 12    (175.333, 182.667]
# 13    (167.978, 175.333]
# dtype: category
# Categories (3, object): [(167.978, 175.333] < (175.333, 182.667] < (182.667, 190]]

pd.cut(s, 3, labels=['Small', 'Medium', 'Large'])
# 0      Small
# 1     Medium
# 2      Small
# 3      Large
# 4      Small
# 5      Large
# 6     Medium
# 7     Medium
# 8      Small
# 9      Small
# 10    Medium
# 11    Medium
# 12    Medium
# 13     Small
# dtype: category
# Categories (3, object): [Small < Medium < Large]

Source

兵庫県西宮市生まれのフリーランスRailsエンジニア。海外を拠点にデジタルノマド生活中。/ 前職・資格:公認会計士 / プログラミング言語:Ruby, JavaScript, HTML, CSS / 日本語・英語
コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です