Skip to content

Instantly share code, notes, and snippets.

@sfsheath
Last active April 10, 2019 00:41
Show Gist options
  • Save sfsheath/35e9161f6762a944a4032d1465d36b17 to your computer and use it in GitHub Desktop.
Save sfsheath/35e9161f6762a944a4032d1465d36b17 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Turn two columns of categorical data into a weighted bi-partite network"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import networkx as nx\n",
"import pandas as pd\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cat1</th>\n",
" <th>cat2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>cheese</td>\n",
" <td>yes</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>pizza</td>\n",
" <td>no</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>cheese</td>\n",
" <td>no</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>cheese</td>\n",
" <td>yes</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>pizza</td>\n",
" <td>meh</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cat1 cat2\n",
"0 cheese yes\n",
"1 pizza no\n",
"2 cheese no\n",
"3 cheese yes\n",
"4 pizza meh"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d = {'cat1': [\"cheese\", \"pizza\", \"cheese\",\"cheese\", \"pizza\"],\n",
" 'cat2': [\"yes\", \"no\", \"no\", \"yes\", \"meh\"]}\n",
"\n",
"df = pd.DataFrame(data = d)\n",
"\n",
"df # a DataFrame with columns of categorical data"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cat1</th>\n",
" <th>cat2</th>\n",
" <th>count</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>cheese</td>\n",
" <td>no</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>cheese</td>\n",
" <td>yes</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>pizza</td>\n",
" <td>meh</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>pizza</td>\n",
" <td>no</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cat1 cat2 count\n",
"0 cheese no 1\n",
"1 cheese yes 2\n",
"2 pizza meh 1\n",
"3 pizza no 1"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['count'] = 1 # add a 'counter' column\n",
"\n",
"df_counts = df.groupby(by = ['cat1','cat2'] ).count()\n",
"\n",
"df_counts.reset_index(inplace=True) # this is an arbitrary pandas step.\n",
"\n",
"# This is now a weighted edgelist, at least in theory. There's a tiny bit of work to get it into networkx.\n",
"df_counts"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"B = nx.from_pandas_edgelist(df_counts.rename(columns={'cat1':'source','cat2':'target', 'count':'weight'}), edge_attr=True)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"top = df_counts.cat1.unique().tolist()\n",
"pos = nx.bipartite_layout(B, top)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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qhWTJk2isLCQCxcusGXLlhsfcO+9tKpfnzCcne83OLvi/wKbLu0yGpjOd+FcgPOvJoAMYMdtt1Harh0NGzakfv361KpVi1q1ahEdHU1MTAynTp0CIDc3l7Vr15bzMxYRkVsWFAQ3WHhnOM6ueC3OgbwXcA7gOn7tjg0aQGBgxdV4HW4TxrVr1yYlJYWcnBzuuusu7rzzTpYuXXrjA6xWAN4HSoB2OEdMhwMnL+0yFHgReBxoDAQAqZe2fQNEl5TQdNo0/Pz8aN68ORMmTADgb3/7G7/4xS8IDQ2lcePG9OnTh/3795fzMxYRkVv2hz/ccFNrvhu42+LS1zNwNmpXMYwfPE9FcPsZuH6QxQIffXTrb/wG8PCAoUMr/b1mIiLyE7nhtb96h3FGBvTqdcszcAHg6QmbNlX6LCwiIvITueG1321uU5dJ164QG+v84d4KT0/ncQpiERH344bXfrd5a1OZPf2089/x451TY/7QjQAPD+cL97Gx3x0nIiLux82u/dX7NvWVPvvMOd/omjXOH/yV01c2aOD8RT36KLz0kjpiEZHqwk2u/TUnjC87fRrefRf27oX8fOd7yQIDnSPnWrQwuzoREakIVfzaX/PCWEREpIqp3gO4RERE3IDCWERExGQKYxEREZMpjEVEREymMBYRETGZwlhERMRkCmMRERGTKYxFRERMpjAWERExmcJYRETEZApjERERkymMRURETKYwFhERMZnCWERExGQKYxEREZMpjEVEREymMBYRETGZwlhERMRkCmMRERGTKYxFRERMpjAWERExmcJYRETEZApjERERkymMRURETKYwFhERMZnCWERExGQKYxEREZMpjEVEREymMBYRETGZwlhERMRkCmMRERGTKYxFRERM9n8uljIEqAQapAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"nx.draw(B,pos)\n",
"n = nx.draw_networkx_labels(B, pos )"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{('cheese', 'no'): 1,\n",
" ('cheese', 'yes'): 2,\n",
" ('no', 'pizza'): 1,\n",
" ('pizza', 'meh'): 1}"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nx.get_edge_attributes(B, 'weight') "
]
}
],
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment