import pandas as pd
import numpy as np
high, size = 100, 20
df = pd.DataFrame({'perception': np.random.randint(0, high, size),
'age': np.random.randint(0, high, size),
'smokes_cat': pd.Categorical(np.tile(['lots', 'little', 'not'], size//3+1)[:size]),
'outcome': np.random.randint(0, high, size),
'outlook_cat': pd.Categorical(np.tile(['positive', 'neutral', 'negative'], size//3+1)[:size])
})
df.insert(2, 'age_cat', pd.Categorical(pd.cut(df.age, range(0, high+5, size//2), right=False,
labels=["{0} - {1}".format(i, i + 9) for i in range(0, high, size//2)])))
def tierify(i):
if i <= 25:
return 'lowest'
elif i <= 50:
return 'low'
elif i <= 75:
return 'med'
return 'high'
df.insert(1, 'perception_cat', df['perception'].map(tierify))
df.insert(6, 'outcome_cat', df['outcome'].map(tierify))
np.random.shuffle(df['smokes_cat'])
print('Columns:', ', '.join(df.columns))
print(df)
aW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKCmhpZ2gsIHNpemUgPSAxMDAsIDIwCmRmID0gcGQuRGF0YUZyYW1lKHsncGVyY2VwdGlvbic6IG5wLnJhbmRvbS5yYW5kaW50KDAsIGhpZ2gsIHNpemUpLAogICAgICAgICAgICAgICAgICAgJ2FnZSc6IG5wLnJhbmRvbS5yYW5kaW50KDAsIGhpZ2gsIHNpemUpLAogICAgICAgICAgICAgICAgICAgJ3Ntb2tlc19jYXQnOiBwZC5DYXRlZ29yaWNhbChucC50aWxlKFsnbG90cycsICdsaXR0bGUnLCAnbm90J10sIHNpemUvLzMrMSlbOnNpemVdKSwKICAgICAgICAgICAgICAgICAgICdvdXRjb21lJzogbnAucmFuZG9tLnJhbmRpbnQoMCwgaGlnaCwgc2l6ZSksCiAgICAgICAgICAgICAgICAgICAnb3V0bG9va19jYXQnOiBwZC5DYXRlZ29yaWNhbChucC50aWxlKFsncG9zaXRpdmUnLCAnbmV1dHJhbCcsICduZWdhdGl2ZSddLCBzaXplLy8zKzEpWzpzaXplXSkKICAgICAgICAgICAgICAgICAgfSkKZGYuaW5zZXJ0KDIsICdhZ2VfY2F0JywgcGQuQ2F0ZWdvcmljYWwocGQuY3V0KGRmLmFnZSwgcmFuZ2UoMCwgaGlnaCs1LCBzaXplLy8yKSwgcmlnaHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscz1bInswfSAtIHsxfSIuZm9ybWF0KGksIGkgKyA5KSBmb3IgaSBpbiByYW5nZSgwLCBoaWdoLCBzaXplLy8yKV0pKSkKCmRlZiB0aWVyaWZ5KGkpOgogICAgaWYgaSA8PSAyNToKICAgICAgICByZXR1cm4gJ2xvd2VzdCcKICAgIGVsaWYgaSA8PSA1MDoKICAgICAgICByZXR1cm4gJ2xvdycKICAgIGVsaWYgaSA8PSA3NToKICAgICAgICByZXR1cm4gJ21lZCcKICAgIHJldHVybiAnaGlnaCcKCmRmLmluc2VydCgxLCAncGVyY2VwdGlvbl9jYXQnLCBkZlsncGVyY2VwdGlvbiddLm1hcCh0aWVyaWZ5KSkKZGYuaW5zZXJ0KDYsICdvdXRjb21lX2NhdCcsIGRmWydvdXRjb21lJ10ubWFwKHRpZXJpZnkpKQoKbnAucmFuZG9tLnNodWZmbGUoZGZbJ3Ntb2tlc19jYXQnXSkKCnByaW50KCdDb2x1bW5zOicsICcsICcuam9pbihkZi5jb2x1bW5zKSkKcHJpbnQoZGYpCg==