Skip to content

Instantly share code, notes, and snippets.

@daxiongshu
Created June 6, 2019 17:34
Show Gist options
  • Save daxiongshu/addfa970b3dd7f7b2d2e017a4c0b651e to your computer and use it in GitHub Desktop.
Save daxiongshu/addfa970b3dd7f7b2d2e017a4c0b651e to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from scipy.stats import ks_2samp\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"train = train_gd.to_pandas()\n",
"target_mask = train['target'] == 1\n",
"non_target_mask = train['target'] == 0 \n",
"statistics_array = []\n",
"for col in train.columns[2:]:\n",
" statistic, pvalue = ks_2samp(train.loc[non_target_mask, col], train.loc[target_mask, col])\n",
" statistics_array.append(statistic)\n",
" fig, ax = plt.subplots(1, 1, figsize=(10, 4))\n",
" sns.kdeplot(train.loc[non_target_mask, col], ax=ax, label='Target == 0')\n",
" sns.kdeplot(train.loc[target_mask, col], ax=ax, label='Target == 1')\n",
"\n",
" ax.set_title('name: {}, statistics: {:.5f}, pvalue: {:5f}'.format(col, statistic, pvalue))\n",
" plt.show()\n",
" break"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment