Skip to content

Instantly share code, notes, and snippets.

@katchy3132
Last active July 20, 2023 21:32
Show Gist options
  • Save katchy3132/b0157a8e71bcb2fb043d16592e2a3f6a to your computer and use it in GitHub Desktop.
Save katchy3132/b0157a8e71bcb2fb043d16592e2a3f6a to your computer and use it in GitHub Desktop.
Mishnah Statistics
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Based on this spreadsheet: https://docs.google.com/spreadsheets/d/11ITaH8qPFPIo1xvX13X0m7iCUfSgtLMIxP8A-Y39SuE/edit#gid=0"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"executionInfo": {
"elapsed": 1861,
"status": "ok",
"timestamp": 1672231180046,
"user": {
"displayName": "Y Katch",
"userId": "14756336665638820357"
},
"user_tz": -120
},
"id": "nAUjdw4NEDX5",
"tags": []
},
"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>Masechet</th>\n",
" <th>Berachot</th>\n",
" <th>Peah</th>\n",
" <th>Damai</th>\n",
" <th>Kilaim</th>\n",
" <th>Sheviit</th>\n",
" <th>Terumot</th>\n",
" <th>Maserot</th>\n",
" <th>Maser Sheni</th>\n",
" <th>Chalah</th>\n",
" <th>...</th>\n",
" <th>Negaim</th>\n",
" <th>Parah</th>\n",
" <th>Taharot</th>\n",
" <th>Mikvaot</th>\n",
" <th>Niddah</th>\n",
" <th>Machshirin</th>\n",
" <th>Zavim</th>\n",
" <th>Tevul Yom</th>\n",
" <th>Yadayim</th>\n",
" <th>Uktzim</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Seder</td>\n",
" <td>Zeraim</td>\n",
" <td>Zeraim</td>\n",
" <td>Zeraim</td>\n",
" <td>Zeraim</td>\n",
" <td>Zeraim</td>\n",
" <td>Zeraim</td>\n",
" <td>Zeraim</td>\n",
" <td>Zeraim</td>\n",
" <td>Zeraim</td>\n",
" <td>...</td>\n",
" <td>Taharot</td>\n",
" <td>Taharot</td>\n",
" <td>Taharot</td>\n",
" <td>Taharot</td>\n",
" <td>Taharot</td>\n",
" <td>Taharot</td>\n",
" <td>Taharot</td>\n",
" <td>Taharot</td>\n",
" <td>Taharot</td>\n",
" <td>Taharot</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" <td>6</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>8</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" <td>...</td>\n",
" <td>6</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" <td>8</td>\n",
" <td>7</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" <td>5</td>\n",
" <td>11</td>\n",
" <td>10</td>\n",
" <td>6</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>8</td>\n",
" <td>...</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>7</td>\n",
" <td>11</td>\n",
" <td>4</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" <td>10</td>\n",
" <td>13</td>\n",
" <td>10</td>\n",
" <td>...</td>\n",
" <td>8</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>7</td>\n",
" <td>8</td>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" <td>5</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>7</td>\n",
" <td>11</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" <td>10</td>\n",
" <td>13</td>\n",
" <td>6</td>\n",
" <td>12</td>\n",
" <td>11</td>\n",
" <td>...</td>\n",
" <td>11</td>\n",
" <td>4</td>\n",
" <td>13</td>\n",
" <td>5</td>\n",
" <td>7</td>\n",
" <td>10</td>\n",
" <td>7</td>\n",
" <td>7</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 64 columns</p>\n",
"</div>"
],
"text/plain": [
" Masechet Berachot Peah Damai Kilaim Sheviit Terumot Maserot \\\n",
"0 Seder Zeraim Zeraim Zeraim Zeraim Zeraim Zeraim Zeraim \n",
"1 1 5 6 4 9 8 10 8 \n",
"2 2 8 8 5 11 10 6 8 \n",
"3 3 6 8 6 7 10 9 10 \n",
"4 4 7 11 7 9 10 13 6 \n",
"\n",
" Maser Sheni Chalah ... Negaim Parah Taharot Mikvaot Niddah \\\n",
"0 Zeraim Zeraim ... Taharot Taharot Taharot Taharot Taharot \n",
"1 7 9 ... 6 4 9 8 7 \n",
"2 10 8 ... 5 5 8 10 7 \n",
"3 13 10 ... 8 11 8 4 7 \n",
"4 12 11 ... 11 4 13 5 7 \n",
"\n",
" Machshirin Zavim Tevul Yom Yadayim Uktzim \n",
"0 Taharot Taharot Taharot Taharot Taharot \n",
"1 6 6 5 5 6 \n",
"2 11 4 8 4 10 \n",
"3 8 3 6 5 12 \n",
"4 10 7 7 8 0 \n",
"\n",
"[5 rows x 64 columns]"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"df = pd.read_csv('Mishna_count.csv', header=[0]).fillna(0)\n",
"\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"executionInfo": {
"elapsed": 22,
"status": "ok",
"timestamp": 1672231180049,
"user": {
"displayName": "Y Katch",
"userId": "14756336665638820357"
},
"user_tz": -120
},
"id": "c87AAugDIVEV"
},
"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>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>...</th>\n",
" <th>21</th>\n",
" <th>22</th>\n",
" <th>23</th>\n",
" <th>24</th>\n",
" <th>25</th>\n",
" <th>26</th>\n",
" <th>27</th>\n",
" <th>28</th>\n",
" <th>29</th>\n",
" <th>30</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Masechet</th>\n",
" <td>Seder</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" <td>...</td>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>25</td>\n",
" <td>26</td>\n",
" <td>27</td>\n",
" <td>28</td>\n",
" <td>29</td>\n",
" <td>30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Berachot</th>\n",
" <td>Zeraim</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>5</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Peah</th>\n",
" <td>Zeraim</td>\n",
" <td>6</td>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Damai</th>\n",
" <td>Zeraim</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Kilaim</th>\n",
" <td>Zeraim</td>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>10</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 31 columns</p>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 4 5 6 7 8 9 ... 21 22 23 24 25 26 \\\n",
"Masechet Seder 1 2 3 4 5 6 7 8 9 ... 21 22 23 24 25 26 \n",
"Berachot Zeraim 5 8 6 7 5 8 5 8 5 ... 0 0 0 0 0 0 \n",
"Peah Zeraim 6 8 8 11 8 11 8 9 0 ... 0 0 0 0 0 0 \n",
"Damai Zeraim 4 5 6 7 11 12 8 0 0 ... 0 0 0 0 0 0 \n",
"Kilaim Zeraim 9 11 7 9 8 9 8 6 10 ... 0 0 0 0 0 0 \n",
"\n",
" 27 28 29 30 \n",
"Masechet 27 28 29 30 \n",
"Berachot 0 0 0 0 \n",
"Peah 0 0 0 0 \n",
"Damai 0 0 0 0 \n",
"Kilaim 0 0 0 0 \n",
"\n",
"[5 rows x 31 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_trx = df.T \n",
"df_trx.head()"
]
},
{
"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>Masechet</th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>...</th>\n",
" <th>21</th>\n",
" <th>22</th>\n",
" <th>23</th>\n",
" <th>24</th>\n",
" <th>25</th>\n",
" <th>26</th>\n",
" <th>27</th>\n",
" <th>28</th>\n",
" <th>29</th>\n",
" <th>30</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Masechet</td>\n",
" <td>Seder</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>8</td>\n",
" <td>...</td>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>25</td>\n",
" <td>26</td>\n",
" <td>27</td>\n",
" <td>28</td>\n",
" <td>29</td>\n",
" <td>30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Berachot</td>\n",
" <td>Zeraim</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Peah</td>\n",
" <td>Zeraim</td>\n",
" <td>6</td>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Damai</td>\n",
" <td>Zeraim</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Kilaim</td>\n",
" <td>Zeraim</td>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>Machshirin</td>\n",
" <td>Taharot</td>\n",
" <td>6</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>Zavim</td>\n",
" <td>Taharot</td>\n",
" <td>6</td>\n",
" <td>4</td>\n",
" <td>3</td>\n",
" <td>7</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>Tevul Yom</td>\n",
" <td>Taharot</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62</th>\n",
" <td>Yadayim</td>\n",
" <td>Taharot</td>\n",
" <td>5</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63</th>\n",
" <td>Uktzim</td>\n",
" <td>Taharot</td>\n",
" <td>6</td>\n",
" <td>10</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>64 rows × 32 columns</p>\n",
"</div>"
],
"text/plain": [
" Masechet 0 1 2 3 4 5 6 7 8 ... 21 22 23 24 25 \\\n",
"0 Masechet Seder 1 2 3 4 5 6 7 8 ... 21 22 23 24 25 \n",
"1 Berachot Zeraim 5 8 6 7 5 8 5 8 ... 0 0 0 0 0 \n",
"2 Peah Zeraim 6 8 8 11 8 11 8 9 ... 0 0 0 0 0 \n",
"3 Damai Zeraim 4 5 6 7 11 12 8 0 ... 0 0 0 0 0 \n",
"4 Kilaim Zeraim 9 11 7 9 8 9 8 6 ... 0 0 0 0 0 \n",
".. ... ... .. .. .. .. .. .. .. .. ... .. .. .. .. .. \n",
"59 Machshirin Taharot 6 11 8 10 11 8 0 0 ... 0 0 0 0 0 \n",
"60 Zavim Taharot 6 4 3 7 12 0 0 0 ... 0 0 0 0 0 \n",
"61 Tevul Yom Taharot 5 8 6 7 0 0 0 0 ... 0 0 0 0 0 \n",
"62 Yadayim Taharot 5 4 5 8 0 0 0 0 ... 0 0 0 0 0 \n",
"63 Uktzim Taharot 6 10 12 0 0 0 0 0 ... 0 0 0 0 0 \n",
"\n",
" 26 27 28 29 30 \n",
"0 26 27 28 29 30 \n",
"1 0 0 0 0 0 \n",
"2 0 0 0 0 0 \n",
"3 0 0 0 0 0 \n",
"4 0 0 0 0 0 \n",
".. .. .. .. .. .. \n",
"59 0 0 0 0 0 \n",
"60 0 0 0 0 0 \n",
"61 0 0 0 0 0 \n",
"62 0 0 0 0 0 \n",
"63 0 0 0 0 0 \n",
"\n",
"[64 rows x 32 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_trx.reset_index(inplace=True)\n",
"df_trx.rename(columns={'index': 'Masechet'}, inplace=True)\n",
"df_trx"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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>Masechet</th>\n",
" <th>Seder</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>...</th>\n",
" <th>21</th>\n",
" <th>22</th>\n",
" <th>23</th>\n",
" <th>24</th>\n",
" <th>25</th>\n",
" <th>26</th>\n",
" <th>27</th>\n",
" <th>28</th>\n",
" <th>29</th>\n",
" <th>30</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Berachot</td>\n",
" <td>Zeraim</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Peah</td>\n",
" <td>Zeraim</td>\n",
" <td>6</td>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Damai</td>\n",
" <td>Zeraim</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Kilaim</td>\n",
" <td>Zeraim</td>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Sheviit</td>\n",
" <td>Zeraim</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>11</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>58</th>\n",
" <td>Machshirin</td>\n",
" <td>Taharot</td>\n",
" <td>6</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>Zavim</td>\n",
" <td>Taharot</td>\n",
" <td>6</td>\n",
" <td>4</td>\n",
" <td>3</td>\n",
" <td>7</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>Tevul Yom</td>\n",
" <td>Taharot</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>Yadayim</td>\n",
" <td>Taharot</td>\n",
" <td>5</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62</th>\n",
" <td>Uktzim</td>\n",
" <td>Taharot</td>\n",
" <td>6</td>\n",
" <td>10</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>63 rows × 32 columns</p>\n",
"</div>"
],
"text/plain": [
"0 Masechet Seder 1 2 3 4 5 6 7 8 ... 21 22 23 24 25 26 \\\n",
"0 Berachot Zeraim 5 8 6 7 5 8 5 8 ... 0 0 0 0 0 0 \n",
"1 Peah Zeraim 6 8 8 11 8 11 8 9 ... 0 0 0 0 0 0 \n",
"2 Damai Zeraim 4 5 6 7 11 12 8 0 ... 0 0 0 0 0 0 \n",
"3 Kilaim Zeraim 9 11 7 9 8 9 8 6 ... 0 0 0 0 0 0 \n",
"4 Sheviit Zeraim 8 10 10 10 9 6 7 11 ... 0 0 0 0 0 0 \n",
".. ... ... .. .. .. .. .. .. .. .. ... .. .. .. .. .. .. \n",
"58 Machshirin Taharot 6 11 8 10 11 8 0 0 ... 0 0 0 0 0 0 \n",
"59 Zavim Taharot 6 4 3 7 12 0 0 0 ... 0 0 0 0 0 0 \n",
"60 Tevul Yom Taharot 5 8 6 7 0 0 0 0 ... 0 0 0 0 0 0 \n",
"61 Yadayim Taharot 5 4 5 8 0 0 0 0 ... 0 0 0 0 0 0 \n",
"62 Uktzim Taharot 6 10 12 0 0 0 0 0 ... 0 0 0 0 0 0 \n",
"\n",
"0 27 28 29 30 \n",
"0 0 0 0 0 \n",
"1 0 0 0 0 \n",
"2 0 0 0 0 \n",
"3 0 0 0 0 \n",
"4 0 0 0 0 \n",
".. .. .. .. .. \n",
"58 0 0 0 0 \n",
"59 0 0 0 0 \n",
"60 0 0 0 0 \n",
"61 0 0 0 0 \n",
"62 0 0 0 0 \n",
"\n",
"[63 rows x 32 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_trx.columns = df_trx.iloc[0]\n",
"df_trx.iloc[0 ]\n",
"\n",
"#remove first row from DataFrame\n",
"df_trx = df_trx[1:] # df.drop(0)\n",
"df_trx.reset_index(drop=True,inplace=True)\n",
"df_trx"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"executionInfo": {
"elapsed": 22,
"status": "ok",
"timestamp": 1672231180050,
"user": {
"displayName": "Y Katch",
"userId": "14756336665638820357"
},
"user_tz": -120
},
"id": "pX2boUL1eeeH",
"outputId": "b5ac10da-3979-4921-9f67-56962bd7b7ab"
},
"outputs": [],
"source": [
"for perek in df_trx.filter(regex='\\d\\d?', axis=1).columns:\n",
" df_trx.loc[:,perek] = pd.to_numeric(df_trx[perek], errors='raise')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 424
},
"executionInfo": {
"elapsed": 17,
"status": "ok",
"timestamp": 1672231180050,
"user": {
"displayName": "Y Katch",
"userId": "14756336665638820357"
},
"user_tz": -120
},
"id": "D30jvOHVf3Vv",
"outputId": "f3851495-44c0-4ad8-eb97-2630dbfb7f57"
},
"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>Masechet</th>\n",
" <th>Seder</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>...</th>\n",
" <th>24</th>\n",
" <th>25</th>\n",
" <th>26</th>\n",
" <th>27</th>\n",
" <th>28</th>\n",
" <th>29</th>\n",
" <th>30</th>\n",
" <th>Perakim</th>\n",
" <th>Mishnayot</th>\n",
" <th>Mishnayot_per_Perek</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Berachot</td>\n",
" <td>Zeraim</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>57</td>\n",
" <td>6.33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Peah</td>\n",
" <td>Zeraim</td>\n",
" <td>6</td>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>69</td>\n",
" <td>8.62</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Damai</td>\n",
" <td>Zeraim</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7</td>\n",
" <td>53</td>\n",
" <td>7.57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Kilaim</td>\n",
" <td>Zeraim</td>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>77</td>\n",
" <td>8.56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Sheviit</td>\n",
" <td>Zeraim</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>11</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>89</td>\n",
" <td>8.90</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>58</th>\n",
" <td>Machshirin</td>\n",
" <td>Taharot</td>\n",
" <td>6</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" <td>54</td>\n",
" <td>9.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>Zavim</td>\n",
" <td>Taharot</td>\n",
" <td>6</td>\n",
" <td>4</td>\n",
" <td>3</td>\n",
" <td>7</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>32</td>\n",
" <td>6.40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>Tevul Yom</td>\n",
" <td>Taharot</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>26</td>\n",
" <td>6.50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>Yadayim</td>\n",
" <td>Taharot</td>\n",
" <td>5</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>22</td>\n",
" <td>5.50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62</th>\n",
" <td>Uktzim</td>\n",
" <td>Taharot</td>\n",
" <td>6</td>\n",
" <td>10</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>28</td>\n",
" <td>9.33</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>63 rows × 35 columns</p>\n",
"</div>"
],
"text/plain": [
"0 Masechet Seder 1 2 3 4 5 6 7 8 ... 24 25 26 27 28 29 \\\n",
"0 Berachot Zeraim 5 8 6 7 5 8 5 8 ... 0 0 0 0 0 0 \n",
"1 Peah Zeraim 6 8 8 11 8 11 8 9 ... 0 0 0 0 0 0 \n",
"2 Damai Zeraim 4 5 6 7 11 12 8 0 ... 0 0 0 0 0 0 \n",
"3 Kilaim Zeraim 9 11 7 9 8 9 8 6 ... 0 0 0 0 0 0 \n",
"4 Sheviit Zeraim 8 10 10 10 9 6 7 11 ... 0 0 0 0 0 0 \n",
".. ... ... .. .. .. .. .. .. .. .. ... .. .. .. .. .. .. \n",
"58 Machshirin Taharot 6 11 8 10 11 8 0 0 ... 0 0 0 0 0 0 \n",
"59 Zavim Taharot 6 4 3 7 12 0 0 0 ... 0 0 0 0 0 0 \n",
"60 Tevul Yom Taharot 5 8 6 7 0 0 0 0 ... 0 0 0 0 0 0 \n",
"61 Yadayim Taharot 5 4 5 8 0 0 0 0 ... 0 0 0 0 0 0 \n",
"62 Uktzim Taharot 6 10 12 0 0 0 0 0 ... 0 0 0 0 0 0 \n",
"\n",
"0 30 Perakim Mishnayot Mishnayot_per_Perek \n",
"0 0 9 57 6.33 \n",
"1 0 8 69 8.62 \n",
"2 0 7 53 7.57 \n",
"3 0 9 77 8.56 \n",
"4 0 10 89 8.90 \n",
".. .. ... ... ... \n",
"58 0 6 54 9.00 \n",
"59 0 5 32 6.40 \n",
"60 0 4 26 6.50 \n",
"61 0 4 22 5.50 \n",
"62 0 3 28 9.33 \n",
"\n",
"[63 rows x 35 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"df_trx=df_trx.assign(Perakim= df_trx.filter(regex='\\d\\d?', axis=1).ne(0).sum(axis=1)) \n",
"df_trx=df_trx.assign(Mishnayot= df_trx.filter(regex='\\d\\d?', axis=1).astype(int).sum(axis=1, numeric_only=True))\n",
"df_trx=df_trx.assign(Mishnayot_per_Perek= (df_trx['Mishnayot'] / df_trx['Perakim']).round(2))\n",
"\n",
"df_trx.to_csv('Mishna_count_out.csv', index_label=\"RowNum\") \n",
"df_trx.to_json('Mishna_count_out.json' , orient='records', indent=2)\n",
"df_trx"
]
},
{
"cell_type": "code",
"execution_count": 7,
"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>Seder</th>\n",
" <th>Perakim</th>\n",
" <th>Mishnayot</th>\n",
" <th>Masechtot</th>\n",
" <th>order</th>\n",
" <th>Masechtot % total</th>\n",
" <th>Perakim % total</th>\n",
" <th>Mishnayot % total</th>\n",
" <th>Perek_Masechet</th>\n",
" <th>Perek_Masechet_rank</th>\n",
" <th>Mishnah_Masechet</th>\n",
" <th>Mishnah_Masechet_rank</th>\n",
" <th>Mishnah_Perek</th>\n",
" <th>Mishnah_Perek_rank</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Zeraim</td>\n",
" <td>75</td>\n",
" <td>655</td>\n",
" <td>11</td>\n",
" <td>1</td>\n",
" <td>17.46</td>\n",
" <td>14.29</td>\n",
" <td>15.62</td>\n",
" <td>6.82</td>\n",
" <td>1</td>\n",
" <td>59.55</td>\n",
" <td>3</td>\n",
" <td>8.73</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Moed</td>\n",
" <td>88</td>\n",
" <td>681</td>\n",
" <td>12</td>\n",
" <td>2</td>\n",
" <td>19.05</td>\n",
" <td>16.76</td>\n",
" <td>16.25</td>\n",
" <td>7.33</td>\n",
" <td>2</td>\n",
" <td>56.75</td>\n",
" <td>2</td>\n",
" <td>7.74</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Nashim</td>\n",
" <td>71</td>\n",
" <td>578</td>\n",
" <td>7</td>\n",
" <td>3</td>\n",
" <td>11.11</td>\n",
" <td>13.52</td>\n",
" <td>13.79</td>\n",
" <td>10.14</td>\n",
" <td>5</td>\n",
" <td>82.57</td>\n",
" <td>5</td>\n",
" <td>8.14</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Nezikim</td>\n",
" <td>74</td>\n",
" <td>685</td>\n",
" <td>10</td>\n",
" <td>4</td>\n",
" <td>15.87</td>\n",
" <td>14.10</td>\n",
" <td>16.34</td>\n",
" <td>7.40</td>\n",
" <td>3</td>\n",
" <td>68.50</td>\n",
" <td>4</td>\n",
" <td>9.26</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Kodshim</td>\n",
" <td>91</td>\n",
" <td>590</td>\n",
" <td>11</td>\n",
" <td>5</td>\n",
" <td>17.46</td>\n",
" <td>17.33</td>\n",
" <td>14.07</td>\n",
" <td>8.27</td>\n",
" <td>4</td>\n",
" <td>53.64</td>\n",
" <td>1</td>\n",
" <td>6.48</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Taharot</td>\n",
" <td>126</td>\n",
" <td>1003</td>\n",
" <td>12</td>\n",
" <td>6</td>\n",
" <td>19.05</td>\n",
" <td>24.00</td>\n",
" <td>23.93</td>\n",
" <td>10.50</td>\n",
" <td>6</td>\n",
" <td>83.58</td>\n",
" <td>6</td>\n",
" <td>7.96</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"0 Seder Perakim Mishnayot Masechtot order Masechtot % total \\\n",
"5 Zeraim 75 655 11 1 17.46 \n",
"1 Moed 88 681 12 2 19.05 \n",
"2 Nashim 71 578 7 3 11.11 \n",
"3 Nezikim 74 685 10 4 15.87 \n",
"0 Kodshim 91 590 11 5 17.46 \n",
"4 Taharot 126 1003 12 6 19.05 \n",
"\n",
"0 Perakim % total Mishnayot % total Perek_Masechet Perek_Masechet_rank \\\n",
"5 14.29 15.62 6.82 1 \n",
"1 16.76 16.25 7.33 2 \n",
"2 13.52 13.79 10.14 5 \n",
"3 14.10 16.34 7.40 3 \n",
"0 17.33 14.07 8.27 4 \n",
"4 24.00 23.93 10.50 6 \n",
"\n",
"0 Mishnah_Masechet Mishnah_Masechet_rank Mishnah_Perek Mishnah_Perek_rank \n",
"5 59.55 3 8.73 5 \n",
"1 56.75 2 7.74 2 \n",
"2 82.57 5 8.14 4 \n",
"3 68.50 4 9.26 6 \n",
"0 53.64 1 6.48 1 \n",
"4 83.58 6 7.96 3 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"masechtot_order = {\"Zeraim\":1, \"Moed\":2, \"Nashim\":3, \"Nezikim\":4, \"Kodshim\":5,\"Taharot\":6 }\n",
"\n",
"df_sum = df_trx.groupby(by=[\"Seder\"]).agg({\"Perakim\" : \"sum\", \"Mishnayot\" : \"sum\", \"Masechet\": \"count\"}).reset_index()\n",
"\n",
"df_sum = df_sum.rename({'Masechet': 'Masechtot'}, axis=1)\n",
"\n",
"df_sum[\"order\"] = df_sum['Seder'].map(masechtot_order)\n",
"\n",
"df_sum.drop(df_sum.filter(regex='\\d\\d?').columns, axis=1, inplace=True)\n",
"\n",
"df_sum['Masechtot % total'] = (df_sum['Masechtot'] / df_sum['Masechtot'].sum() *100 ).round(2)\n",
"df_sum['Perakim % total'] = (df_sum['Perakim'] / df_sum['Perakim'].sum() *100 ).round(2)\n",
"df_sum['Mishnayot % total'] = (df_sum['Mishnayot'] / df_sum['Mishnayot'].sum() *100 ).round(2)\n",
"\n",
"\n",
"df_sum['Perek_Masechet'] = (df_sum['Perakim'] / df_sum['Masechtot']).round(2)\n",
"df_sum['Perek_Masechet_rank'] = df_sum['Perek_Masechet'].rank().astype(int)\n",
"\n",
"df_sum['Mishnah_Masechet'] = (df_sum['Mishnayot'] / df_sum['Masechtot']).round(2)\n",
"df_sum['Mishnah_Masechet_rank'] = df_sum['Mishnah_Masechet'].rank().astype(int)\n",
"\n",
"df_sum['Mishnah_Perek'] = (df_sum['Mishnayot'] / df_sum['Perakim']).round(2) # need to recompute because of summary \n",
"df_sum['Mishnah_Perek_rank'] = df_sum['Mishnah_Perek'].rank().astype(int)\n",
"\n",
"df_sum= df_sum.sort_values('order', ascending=True)\n",
"\n",
"df_sum.to_csv('Mishna_summary_out.csv', index_label=\"RowNum\") \n",
"df_sum.to_json('Mishna_summary_out.json' , orient='records', indent=2)\n",
"\n",
"df_sum"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0\n",
"Masechtot 63\n",
"Perakim 525\n",
"Mishnayot 4192\n",
"dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sum[[ 'Masechtot', 'Perakim', 'Mishnayot']].sum()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"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>Masechet</th>\n",
" <th>Perek</th>\n",
" <th>Mishnayot</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Berachot</td>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Berachot</td>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Berachot</td>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Berachot</td>\n",
" <td>4</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Berachot</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>520</th>\n",
" <td>Yadayim</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>521</th>\n",
" <td>Yadayim</td>\n",
" <td>4</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>522</th>\n",
" <td>Uktzim</td>\n",
" <td>1</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>523</th>\n",
" <td>Uktzim</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>524</th>\n",
" <td>Uktzim</td>\n",
" <td>3</td>\n",
" <td>12</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>525 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" Masechet Perek Mishnayot\n",
"0 Berachot 1 5\n",
"1 Berachot 2 8\n",
"2 Berachot 3 6\n",
"3 Berachot 4 7\n",
"4 Berachot 5 5\n",
".. ... ... ...\n",
"520 Yadayim 3 5\n",
"521 Yadayim 4 8\n",
"522 Uktzim 1 6\n",
"523 Uktzim 2 10\n",
"524 Uktzim 3 12\n",
"\n",
"[525 rows x 3 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"df_flat = pd.DataFrame(columns=['Masechet', 'Perek', 'Mishnayot'])\n",
"\n",
"for i in range(0,len(df_trx)):\n",
" for perek in df_trx.filter(regex='\\d\\d?', axis=1).columns:\n",
" mas = df_trx[\"Masechet\"][i]\n",
" mishnayot = df_trx.loc[i, perek]\n",
" if (mishnayot != 0 ):\n",
" new_row = pd.Series({\"Masechet\": mas, \"Perek\": int(perek), \"Mishnayot\": int(mishnayot) })\n",
" df_flat = pd.concat([df_flat, new_row.to_frame().T], ignore_index=True)\n",
"df_flat['Perek']= pd.to_numeric(df_flat['Perek'], errors='coerce') \n",
"df_flat['Mishnayot']= pd.to_numeric(df_flat['Mishnayot'], errors='coerce') \n",
" \n",
"df_flat"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"min 2\n",
"max 23\n",
"mean 8\n",
"sum 4192\n",
"count 525\n",
"Name: Mishnayot, dtype: int32"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"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>mode</th>\n",
" <th>nlargest</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>8.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>303</th>\n",
" <td>NaN</td>\n",
" <td>23.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>302</th>\n",
" <td>NaN</td>\n",
" <td>22.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>299</th>\n",
" <td>NaN</td>\n",
" <td>18.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>301</th>\n",
" <td>NaN</td>\n",
" <td>18.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>69</th>\n",
" <td>NaN</td>\n",
" <td>17.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mode nlargest\n",
"0 8.0 NaN\n",
"303 NaN 23.0\n",
"302 NaN 22.0\n",
"299 NaN 18.0\n",
"301 NaN 18.0\n",
"69 NaN 17.0"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"-----------\n",
"Min / Max Mishnayot in a Perek: 2 / 23\n"
]
},
{
"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>Masechet</th>\n",
" <th>Perek</th>\n",
" <th>Mishnayot</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>78</th>\n",
" <td>Shabbat</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>210</th>\n",
" <td>Nazir</td>\n",
" <td>8</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>345</th>\n",
" <td>Chullin</td>\n",
" <td>11</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Masechet Perek Mishnayot\n",
"78 Shabbat 4 2\n",
"210 Nazir 8 2\n",
"345 Chullin 11 2"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"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>Masechet</th>\n",
" <th>Perek</th>\n",
" <th>Mishnayot</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>303</th>\n",
" <td>Avot</td>\n",
" <td>5</td>\n",
" <td>23</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Masechet Perek Mishnayot\n",
"303 Avot 5 23"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(df_flat['Mishnayot'].agg(['min', 'max', 'mean', 'sum', \"count\"]).round(0).astype(int))\n",
"display(df_flat['Mishnayot'].agg(['mode', \"nlargest\"]))\n",
"print('-----------')\n",
"print (\"Min / Max Mishnayot in a Perek: \" + str(df_flat['Mishnayot'].agg(['min'])[0]) +\" / \"+ str(df_flat['Mishnayot'].agg(['max'])[0]))\n",
"\n",
"display(df_flat[df_flat['Mishnayot'] == df_flat['Mishnayot'].agg(['min'])[0]])\n",
"display(df_flat[df_flat['Mishnayot'] == df_flat['Mishnayot'].agg(['max'])[0]])\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"max 30\n",
"mean 6\n",
"Name: Perek, dtype: int32\n"
]
}
],
"source": [
"#Perek Number\n",
"print(df_flat['Perek'].agg([ 'max', 'mean']).round(0).astype(int))\n",
"# i.e the mean number of perakim in a masechet"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mishnayot\n",
"2 3\n",
"3 12\n",
"4 34\n",
"5 50\n",
"6 73\n",
"7 71\n",
"8 78\n",
"9 63\n",
"10 53\n",
"11 38\n",
"12 22\n",
"13 10\n",
"14 4\n",
"15 4\n",
"16 3\n",
"17 3\n",
"18 2\n",
"22 1\n",
"23 1\n",
"dtype: int64\n"
]
}
],
"source": [
"print (df_flat.groupby(['Mishnayot']).size())"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Occurrences')"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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FAAABCK/h5nk5GQZY466z+FwyO12y+12n96mAACAbQTENTMAAAC+IswAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbI8wAAABbq+vvBgCcuv6L7rZ8zqXXPG35nABQG1iZAQAAtkaYAQAAtkaYAQAAtkaYAQAAtkaYAQAAtkaYAQAAtkaYAQAAtkaYAQAAtkaYAQAAtub3MLNz507dfPPNatKkiUJCQnThhRdq9erVnv3GGLndbkVHRys4OFi9evXSxo0b/dgxAAAIJH4NM8XFxerevbvq1aunpUuX6ptvvtHMmTPVqFEjzzEzZszQrFmzlJWVpfz8fLlcLiUlJamsrMx/jQMAgIDh13szPf7444qJidG8efM8Y61atfL8b2OMMjMzNXHiRA0ePFiSlJ2drcjISM2fP1+jRo063S0DAIAA49eVmcWLF6tLly664YYbFBERoc6dO+u5557z7C8oKFBhYaGSk5M9Y06nU4mJicrLyzvqnBUVFSotLfXaAADAmcuvYeaHH37QnDlzFBcXpw8++EB33XWX7rnnHr388suSpMLCQklSZGSk13mRkZGefUfKyMhQeHi4Z4uJiandHwIAAPiVX8NMVVWVLrroIqWnp6tz584aNWqU7rzzTs2ZM8frOIfD4fXYGFNt7JAJEyaopKTEs+3YsaPW+gcAAP7n1zATFRWl888/32usffv22r59uyTJ5XJJUrVVmKKiomqrNYc4nU6FhYV5bQAA4Mzl1zDTvXt3ffvtt15jmzdvVsuWLSVJsbGxcrlcysnJ8eyvrKxUbm6uEhISTmuvAAAgMPn100z33XefEhISlJ6eriFDhuirr77S3LlzNXfuXEkH315KS0tTenq64uLiFBcXp/T0dIWEhGjYsGH+bB0AAAQIv4aZSy65RO+8844mTJigqVOnKjY2VpmZmRo+fLjnmHHjxqm8vFypqakqLi5W165dtXz5coWGhvqxcwAAECj8GmYk6aqrrtJVV111zP0Oh0Nut1tut/v0NQUAAGzD77czAAAAOBWEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGuEGQAAYGt1/d0AAPsYsHCm5XMuGfx3y+cE8OfCygwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1v4YZt9sth8PhtblcLs9+Y4zcbreio6MVHBysXr16aePGjX7sGAAABBq/r8x06NBBu3bt8mwbNmzw7JsxY4ZmzZqlrKws5efny+VyKSkpSWVlZX7sGAAABBK/h5m6devK5XJ5tmbNmkk6uCqTmZmpiRMnavDgwYqPj1d2drb27t2r+fPn+7lrAAAQKPweZrZs2aLo6GjFxsZq6NCh+uGHHyRJBQUFKiwsVHJysudYp9OpxMRE5eXlHXO+iooKlZaWem0AAODM5dcbTXbt2lUvv/yy2rZtq59++knTpk1TQkKCNm7cqMLCQklSZGSk1zmRkZHatm3bMefMyMjQI488Uqt9/xl99PwAy+fsfccSy+cEAPz5+LQys2bNGq9rW959911dc801euihh1RZWVnjefr376/rrrtOF1xwgfr06aMlSw6+uGVnZ3uOcTgcXucYY6qNHW7ChAkqKSnxbDt27KhxPwAAwH58CjOjRo3S5s2bJUk//PCDhg4dqpCQEL355psaN26cz800bNhQF1xwgbZs2eL5VNOhFZpDioqKqq3WHM7pdCosLMxrAwAAZy6fwszmzZt14YUXSpLefPNN9ezZU/Pnz9dLL72kt99+2+dmKioqtGnTJkVFRSk2NlYul0s5OTme/ZWVlcrNzVVCQoLPNQAAwJnFp2tmjDGqqqqSJH344Ye66qqrJEkxMTH65ZdfajzPAw88oIEDB6pFixYqKirStGnTVFpaqpSUFDkcDqWlpSk9PV1xcXGKi4tTenq6QkJCNGzYMF/aBgAAZyCfwkyXLl00bdo09enTR7m5uZozZ46kg59AOt5bQEf673//q5tuukm//PKLmjVrpssuu0xffPGFWrZsKUkaN26cysvLlZqaquLiYnXt2lXLly9XaGioL20DAIAzkE9hJjMzU8OHD9eiRYs0ceJEtWnTRpL01ltvndRbQAsWLDjufofDIbfbLbfb7UubAADgT8CnMNOxY0evTzMd8sQTTygoKOiUmwIAAKgpn7807/fff9fzzz+vCRMm6LfffpMkffPNNyoqKrKsOQAAgBPxaWVm/fr16t27txo1aqStW7fqzjvvVOPGjfXOO+9o27Ztevnll63uEwAA4Kh8Wpm5//77ddttt2nLli1q0KCBZ7x///769NNPLWsOAADgRHwKM/n5+Ro1alS18XPOOafal9wBAADUJp/CTIMGDY56A8dvv/3Wc9drAACA08GnMDNo0CBNnTpV+/btk3TwI9Tbt2/X+PHjdd1111naIAAAwPH4FGaefPJJ/fzzz4qIiFB5ebkSExPVpk0bhYaGavr06Vb3CAAAcEw+fZopLCxMK1eu1Mcff6w1a9aoqqpKF110kfr06WN1fwAAAMflU5g55IorrtAVV1xhVS8AAAAnzae3me655x499dRT1cazsrKUlpZ2qj0BAADUmE9h5u2331b37t2rjSckJOitt9465aYAAABqyqcw8+uvvyo8PLzaeFhYmH755ZdTbgoAAKCmfAozbdq00bJly6qNL126VK1btz7lpgAAAGrKpwuA77//fo0ZM0Y///yz5wLgjz76SDNnzlRmZqaV/QEAAByXT2Fm5MiRqqio0PTp0/Xoo49Kklq1aqU5c+bo1ltvtbRBAACA4/H5o9l/+9vf9Le//U0///yzgoODddZZZ1nZFwAAQI2c0vfMSOJeTAAAwK98ugD4p59+0i233KLo6GjVrVtXQUFBXhsAAMDp4tPKzIgRI7R9+3ZNnjxZUVFRcjgcVvcFAABQIz6FmZUrV+qzzz7ThRdeaHE7AAAAJ8ent5liYmJkjLG6FwAAgJPmU5jJzMzU+PHjtXXrVovbAQAAODk+vc104403au/evTr33HMVEhKievXqee3/7bffLGkOAADgRHwKM3zLLwAACBQ+hZmUlBSr+wAAAPCJT9fMSNL333+vSZMm6aabblJRUZEkadmyZdq4caNlzQEAAJyIT2EmNzdXF1xwgb788kstXLhQu3fvliStX79eU6ZMsbRBAACA4/EpzIwfP17Tpk1TTk6O6tev7xn/y1/+os8//9yy5gAAAE7EpzCzYcMGXXvttdXGmzVrpl9//fWUmwIAAKgpn8JMo0aNtGvXrmrja9eu1TnnnHPK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K40CAAAczUl/aV5sbKyWLl2q4uJibdmyRZLUpk0bNW7c2PLmAAAATsSn2xlIB7/199JLL7WyFwAAgJPm012zrTJnzhx17NhRYWFhCgsLU7du3bR06VLPfmOM3G63oqOjFRwcrF69emnjxo1+7BgAAAQav4aZ5s2b67HHHtOqVau0atUqXXHFFRo0aJAnsMyYMUOzZs1SVlaW8vPz5XK5lJSUpLKyMn+2DQAAAohfw8zAgQN15ZVXqm3btmrbtq2mT5+us846S1988YWMMcrMzNTEiRM1ePBgxcfHKzs7W3v37tX8+fOPOWdFRYVKS0u9NgAAcObya5g53IEDB7RgwQLt2bNH3bp1U0FBgQoLC5WcnOw5xul0KjExUXl5ececJyMjQ+Hh4Z6NT1cBAHBm83uY2bBhg8466yw5nU7dddddeuedd3T++ed7botw5H2gIiMjj3vLhAkTJqikpMSz7dixo1b7BwAA/uXzp5ms0q5dO61bt06///673n77baWkpCg3N9ez3+FweB1vjKk2djin0ymn01lr/QIAgMDi95WZ+vXrq02bNurSpYsyMjLUqVMn/eMf/5DL5ZKkaqswRUVFR71rNwAA+HPye5g5kjFGFRUVio2NlcvlUk5OjmdfZWWlcnNzlZCQ4McOAQBAIPHr20wPPfSQ+vfvr5iYGJWVlWnBggVasWKFli1bJofDobS0NKWnpysuLk5xcXFKT09XSEiIhg0b5s+2AQBAAPFrmPnpp590yy23aNeuXQoPD1fHjh21bNkyJSUlSZLGjRun8vJypaamqri4WF27dtXy5csVGhrqz7YBAEAA8WuYeeGFF4673+FwyO12y+12n56GAACA7QTcNTMAAAAngzADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsra6/GwAAf7rqzbcsn/O9G663fE4Ax8bKDAAAsDXCDAAAsDXCDAAAsDXCDAAAsDXCDAAAsDW/hpmMjAxdcsklCg0NVUREhK655hp9++23XscYY+R2uxUdHa3g4GD16tVLGzdu9FPHAAAg0Pg1zOTm5mr06NH64osvlJOTo/379ys5OVl79uzxHDNjxgzNmjVLWVlZys/Pl8vlUlJSksrKyvzYOQAACBR+/Z6ZZcuWeT2eN2+eIiIitHr1avXs2VPGGGVmZmrixIkaPHiwJCk7O1uRkZGaP3++Ro0aVW3OiooKVVRUeB6XlpbW7g8BAAD8KqCumSkpKZEkNW7cWJJUUFCgwsJCJScne45xOp1KTExUXl7eUefIyMhQeHi4Z4uJian9xgEAgN8ETJgxxuj+++9Xjx49FB8fL0kqLCyUJEVGRnodGxkZ6dl3pAkTJqikpMSz7dixo3YbBwAAfhUwtzMYM2aM1q9fr5UrV1bb53A4vB4bY6qNHeJ0OuV0OmulRwAAEHgCYmXm7rvv1uLFi/XJJ5+oefPmnnGXyyVJ1VZhioqKqq3WAACAPye/hhljjMaMGaOFCxfq448/VmxsrNf+2NhYuVwu5eTkeMYqKyuVm5urhISE090uAAAIQH59m2n06NGaP3++3n33XYWGhnpWYMLDwxUcHCyHw6G0tDSlp6crLi5OcXFxSk9PV0hIiIYNG+bP1gEAQIDwa5iZM2eOJKlXr15e4/PmzdOIESMkSePGjVN5eblSU1NVXFysrl27avny5QoNDT3N3QIAgEDk1zBjjDnhMQ6HQ263W263u/YbAgAAthMQFwADAAD4ijADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsra6/GzhTFc55xPI5XX+bYvmcAADYHSszAADA1ggzAADA1ggzAADA1ggzAADA1vwaZj799FMNHDhQ0dHRcjgcWrRokdd+Y4zcbreio6MVHBysXr16aePGjf5pFgAABCS/hpk9e/aoU6dOysrKOur+GTNmaNasWcrKylJ+fr5cLpeSkpJUVlZ2mjsFAACByq8fze7fv7/69+9/1H3GGGVmZmrixIkaPHiwJCk7O1uRkZGaP3++Ro0adTpbBQAAASpgr5kpKChQYWGhkpOTPWNOp1OJiYnKy8s75nkVFRUqLS312gAAwJkrYL80r7CwUJIUGRnpNR4ZGalt27Yd87yMjAw98oj1X1gHAKfimrc+tHzORdf3sXxOwI4CdmXmEIfD4fXYGFNt7HATJkxQSUmJZ9uxY0dttwgAAPwoYFdmXC6XpIMrNFFRUZ7xoqKiaqs1h3M6nXI6nbXeHwAACAwBuzITGxsrl8ulnJwcz1hlZaVyc3OVkJDgx84AAEAg8evKzO7du/Xdd995HhcUFGjdunVq3LixWrRoobS0NKWnpysuLk5xcXFKT09XSEiIhg0b5seuAQBAIPFrmFm1apX+8pe/eB7ff//9kqSUlBS99NJLGjdunMrLy5Wamqri4mJ17dpVy5cvV2hoqL9aBgAAAcavYaZXr14yxhxzv8PhkNvtltvtPn1NAQAAWwnYa2YAAABqgjADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsjTADAABsra6/GwAAWOeGt9dbPueb13WsNjb9nV2W15l4bZTlc+LPgZUZAABga4QZAABga4QZAABga3+6a2Z+nvOq5XM2+9vNls8JAJAWvfmL5XNec0PTamNfzSuyvM6lt0VYPieOjpUZAABga4QZAABga4QZAABga4QZAABga3+6C4ABAPCX/z5ZaPmczR9wWT6n3bAyAwAAbI0wAwAAbI0wAwAAbI1rZgAAOMP8NHud5XNG3nfhUceLns6xtE7E3UknfY4tVmaeeeYZxcbGqkGDBrr44ov12Wef+bslAAAQIAI+zLz++utKS0vTxIkTtXbtWl1++eXq37+/tm/f7u/WAABAAAj4MDNr1izdfvvtuuOOO9S+fXtlZmYqJiZGc+bM8XdrAAAgAAT0NTOVlZVavXq1xo8f7zWenJysvLy8o55TUVGhiooKz+OSkhJJUmlpqSSprLzc8j6d/zf34crK/7C8TshR6uwu32d5ndKj1NlzmursLd9/WuqU7z09dSpOU539eytPS519e61/Xh+tzsFa1v6uHrvOXkvrHKvWvr17TlOd3aelzh97y2qhTsNqY3trpU79amO7y2ujToNqY2V/1EadkKPUsf55EHyM36Gycmuf2w3+r86h550x5sQnmQC2c+dOI8n8+9//9hqfPn26adu27VHPmTJlipHExsbGxsbGdgZsO3bsOGFeCOiVmUMcDofXY2NMtbFDJkyYoPvvv9/zuKqqSr/99puaNGlyzHOOVFpaqpiYGO3YsUNhYWG+N04d29eiDnWoE/h1Tmct6py+OsYYlZWVKTo6+oTHBnSYadq0qYKCglRY6P31z0VFRYqMjDzqOU6nU06n02usUaNGPtUPCwur9V9A6tijFnWoQ53Ar3M6a1Hn9NQJDw+v0XEBfQFw/fr1dfHFFysnx/sz7Dk5OUpISPBTVwAAIJAE9MqMJN1///265ZZb1KVLF3Xr1k1z587V9u3bddddd/m7NQAAEAACPszceOON+vXXXzV16lTt2rVL8fHxev/999WyZctaq+l0OjVlypRqb1dRJzDqnM5a1KEOdQK/zumsRZ3ArOMwpiafeQIAAAhMAX3NDAAAwIkQZgAAgK0RZgAAgK0RZgAAgK0RZg6TkZGhSy65RKGhoYqIiNA111yjb7/91vI6c+bMUceOHT1fHtStWzctXbrU8jpHysjIkMPhUFpamqXzut1uORwOr83lclla45CdO3fq5ptvVpMmTRQSEqILL7xQq1evtrRGq1atqv08DodDo0ePtrTO/v37NWnSJMXGxio4OFitW7fW1KlTVVVVZWkdSSorK1NaWppatmyp4OBgJSQkKD8//5Tn/fTTTzVw4EBFR0fL4XBo0aJFXvuNMXK73YqOjlZwcLB69eqljRs3Wl5n4cKF6tu3r5o2bSqHw6F169ZZ/vPs27dPDz74oC644AI1bNhQ0dHRuvXWW/Xjjz9a/vO43W6dd955atiwoc4++2z16dNHX375peV1Djdq1Cg5HA5lZmZaXmfEiBHVfp8uu+wyy+tI0qZNm3T11VcrPDxcoaGhuuyyy7R9+3ZL6xzt74PD4dATTzxhaZ3du3drzJgxat68uYKDg9W+fXufbrJ8otc2q57bNXkNteq5fSTCzGFyc3M1evRoffHFF8rJydH+/fuVnJysPXusvYlW8+bN9dhjj2nVqlVatWqVrrjiCg0aNMinP/I1lZ+fr7lz56pjx461Mn+HDh20a9cuz7ZhwwbLaxQXF6t79+6qV6+eli5dqm+++UYzZ870+RuejyU/P9/rZzn0pY033HCDpXUef/xxPfvss8rKytKmTZs0Y8YMPfHEE3r66actrSNJd9xxh3JycvTKK69ow4YNSk5OVp8+fbRz585TmnfPnj3q1KmTsrKyjrp/xowZmjVrlrKyspSfny+Xy6WkpCSVlZ3czfZOVGfPnj3q3r27HnvssZP+GWpaZ+/evVqzZo0mT56sNWvWaOHChdq8ebOuvvpqS+tIUtu2bZWVlaUNGzZo5cqVatWqlZKTk/Xzzz9bWueQRYsW6csvv6zR18b7Wqdfv35ev1fvv/++5XW+//579ejRQ+edd55WrFihr7/+WpMnT1aDBtVv+HgqdQ7/OXbt2qUXX3xRDodD1113naV17rvvPi1btkyvvvqqNm3apPvuu09333233n333ZOqc6LXNque2zV5DbXquV3Nqd4M8kxWVFRkJJnc3Nxar3X22Web559/vlbmLisrM3FxcSYnJ8ckJiaae++919L5p0yZYjp16mTpnEfz4IMPmh49etR6nSPde++95txzzzVVVVWWzjtgwAAzcuRIr7HBgwebm2++2dI6e/fuNUFBQea9997zGu/UqZOZOHGiZXUkmXfeecfzuKqqyrhcLvPYY495xv744w8THh5unn32WcvqHK6goMBIMmvXrvV5/prUOeSrr74yksy2bdtqtU5JSYmRZD788EPL6/z3v/8155xzjvnPf/5jWrZsaWbPnu1zjWPVSUlJMYMGDTqleWtS58Ybb7T896cm//8MGjTIXHHFFZbX6dChg5k6darX2EUXXWQmTZp0SrVq8tpmxXO7JnWseG4bYwwrM8dRUlIiSWrcuHGt1Thw4IAWLFigPXv2qFu3brVSY/To0RowYID69OlTK/NL0pYtWxQdHa3Y2FgNHTpUP/zwg+U1Fi9erC5duuiGG25QRESEOnfurOeee87yOoerrKzUq6++qpEjR9b4RqU11aNHD3300UfavHmzJOnrr7/WypUrdeWVV1paZ//+/Tpw4EC1f50GBwdr5cqVltY6XEFBgQoLC5WcnOwZczqdSkxMVF5eXq3VPZ1KSkrkcDgsXx08XGVlpebOnavw8HB16tTJ0rmrqqp0yy23aOzYserQoYOlcx9pxYoVioiIUNu2bXXnnXeqqKjI0vmrqqq0ZMkStW3bVn379lVERIS6du163LfWrPDTTz9pyZIluv322y2fu0ePHlq8eLF27twpY4w++eQTbd68WX379j2leWvy2mbFc/tEdSx9bp9SFDqDVVVVmYEDB9baSsD69etNw4YNTVBQkAkPDzdLliyplTqvvfaaiY+PN+Xl5cYYUysrM++//7556623zPr16z2rP5GRkeaXX36xtI7T6TROp9NMmDDBrFmzxjz77LOmQYMGJjs729I6h3v99ddNUFCQ2blzp+VzV1VVmfHjxxuHw2Hq1q1rHA6HSU9Pt7yOMcZ069bNJCYmmp07d5r9+/ebV155xTgcDtO2bVvLauiIf1n++9//NpKq/be78847TXJysmV1Dnc6V2bKy8vNxRdfbIYPH14rdf71r3+Zhg0bGofDYaKjo81XX31leZ309HSTlJTkWXWsrZWZBQsWmPfee89s2LDBLF682HTq1Ml06NDB/PHHH5bV2bVrl5FkQkJCzKxZs8zatWtNRkaGcTgcZsWKFZbVOdLjjz9uzj77bM/fWCvrVFRUmFtvvdVIMnXr1jX169c3L7/88inVqclrmxXP7ePVsfq5bYwxhJljSE1NNS1btjQ7duyolfkrKirMli1bTH5+vhk/frxp2rSp2bhxo6U1tm/fbiIiIsy6des8Y7URZo60e/duExkZaWbOnGnpvPXq1TPdunXzGrv77rvNZZddZmmdwyUnJ5urrrqqVuZ+7bXXTPPmzc1rr71m1q9fb15++WXTuHFj89JLL1le67vvvjM9e/Y0kkxQUJC55JJLzPDhw0379u0tq3GsMPPjjz96HXfHHXeYvn37WlbncKcrzFRWVppBgwaZzp07m5KSklqps3v3brNlyxbz+eefm5EjR5pWrVqZn376ybI6q1atMpGRkV5hs7bCzJF+/PFHU69ePfP2229bVmfnzp1Gkrnpppu8jhs4cKAZOnSoZXWO1K5dOzNmzBif5z9enSeeeMK0bdvWLF682Hz99dfm6aefNmeddZbJycnxuc6JXtusem4fr47Vz21jCDNHNWbMGNO8eXPzww8/nLaavXv3Nn/9618tnfOdd97xvHgd2iQZh8NhgoKCzP79+y2td7g+ffqYu+66y9I5W7RoYW6//XavsWeeecZER0dbWueQrVu3mjp16phFixbVyvzNmzc3WVlZXmOPPvqoadeuXa3UM+bgH5FD4WLIkCHmyiuvtGzuI/8Yf//990aSWbNmjddxV199tbn11lst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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from matplotlib.pyplot import xlabel\n",
"import seaborn as sns\n",
"\n",
"ax = sns.countplot(x=\"Mishnayot\", data=df_flat)\n",
"ax.set_xlabel(\"Mishnayot/ Perek\")\n",
"ax.set_ylabel(\"Occurrences\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"Mishna Yomi Calculations"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mishnayot in shas : 4192\n",
"Mishnayot completed / percent of shas : 1128 / 26.91\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## Masechet\n",
"ma = \"Sukkah\" \n",
"## Perek\n",
"per = 4 \n",
"## Mishnah \n",
"mish = 1 \n",
"\n",
"#########\n",
"\n",
"mishnayot_in_perek = df_flat.loc[ (df_flat['Masechet'] == ma ) & (df_flat['Perek'] == per) ]\n",
"ma_seder = df_trx[df_trx['Masechet'] == ma]['Seder']\n",
"df_completed = df_flat.iloc[:list(mishnayot_in_perek.index)[0]]\n",
"completed_mishnayot = df_completed['Mishnayot'].sum() + mish\n",
"completed_mishnayot_pct = completed_mishnayot/ df_sum[[ 'Mishnayot']].sum() * 100 \n",
"print(\"Mishnayot in shas : \" + str(df_sum[[ 'Mishnayot']].sum().astype(int)[0]) )\n",
"print (\"Mishnayot completed / percent of shas : \" + str(completed_mishnayot) + \" / \" + str(completed_mishnayot_pct[0].round(2))) \n",
"\n",
"\n",
"import matplotlib.pyplot as plt\n",
"\n",
"data = [completed_mishnayot, df_sum[[ 'Mishnayot']].sum().astype(int)[0] - completed_mishnayot ]\n",
"keys = ['Completed', 'To learn']\n",
" \n",
"# define Seaborn color palette to use\n",
"palette_color = sns.color_palette('bright')\n",
" \n",
"# plotting data on chart\n",
"plt.pie(data, labels=keys, colors=palette_color,explode=[0.1,0] , autopct='%.0f%%')\n",
" \n",
"# displaying chart\n",
"plt.show()\n",
"\n"
]
}
],
"metadata": {
"colab": {
"authorship_tag": "ABX9TyMtFz0wlR5gtOl3cAS62Qz3",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.11.4"
},
"toc-autonumbering": false,
"toc-showcode": false,
"toc-showmarkdowntxt": false,
"toc-showtags": false,
"vscode": {
"interpreter": {
"hash": "e42af3c2b203a62a876fd635a75d89fc28e39d82e0133a2f98e1d4b7c6be0859"
}
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment