{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" midi_note | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" C-1 | \n",
"
\n",
" \n",
" | 1 | \n",
" C#-1 | \n",
"
\n",
" \n",
" | 2 | \n",
" D-1 | \n",
"
\n",
" \n",
" | 3 | \n",
" D#-1 | \n",
"
\n",
" \n",
" | 4 | \n",
" E-1 | \n",
"
\n",
" \n",
" | ... | \n",
" ... | \n",
"
\n",
" \n",
" | 123 | \n",
" D#9 | \n",
"
\n",
" \n",
" | 124 | \n",
" E9 | \n",
"
\n",
" \n",
" | 125 | \n",
" F9 | \n",
"
\n",
" \n",
" | 126 | \n",
" F#9 | \n",
"
\n",
" \n",
" | 127 | \n",
" G9 | \n",
"
\n",
" \n",
"
\n",
"
128 rows × 1 columns
\n",
"
"
],
"text/plain": [
" midi_note\n",
"0 C-1\n",
"1 C#-1\n",
"2 D-1\n",
"3 D#-1\n",
"4 E-1\n",
".. ...\n",
"123 D#9\n",
"124 E9\n",
"125 F9\n",
"126 F#9\n",
"127 G9\n",
"\n",
"[128 rows x 1 columns]"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import operator\n",
"import pathlib\n",
"import re\n",
"\n",
"import pandas as pd\n",
"\n",
"FORMAT = {'na_values': '', 'keep_default_na': False}\n",
"\n",
"CH = {'country_code': 'CH',\n",
" 'url': 'https://de.wikipedia.org/wiki/Liste_der_gr%C3%B6ssten_Glocken_der_Schweiz',\n",
" 'format': FORMAT | {'index_col': 'Name'},\n",
" 'note_col': 'Schlagton (HT-1/16)'}\n",
"\n",
"DE = {'country_code': 'DE',\n",
" 'url': 'https://de.wikipedia.org/wiki/Liste_von_Glocken_in_Deutschland',\n",
" 'format': FORMAT | {'index_col': 'Name'},\n",
" 'note_col': 'Ton:'}\n",
"\n",
"NOTES = [note\n",
" for c_note in 'CDEFGAB'\n",
" for sign in ('', '#')\n",
" for note in [f'{c_note}{sign}']\n",
" if note not in ('E#', 'B#')]\n",
"\n",
"assert len(NOTES) == 12\n",
"\n",
"MIDI_NOTES = [midi_note\n",
" for octave in range(-1, 10)\n",
" for note in NOTES\n",
" for midi_note in [f'{note}{octave:d}']\n",
" if midi_note not in ('G#9', 'A9', 'A#9', 'B9')]\n",
"\n",
"assert len(MIDI_NOTES) == 128\n",
"assert MIDI_NOTES[60] == 'C4'\n",
"assert MIDI_NOTES[69] == 'A4'\n",
"\n",
"pd.Series(MIDI_NOTES, dtype='string').to_frame('midi_note')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" note | \n",
"
\n",
" \n",
" \n",
" \n",
" | a | \n",
" A | \n",
"
\n",
" \n",
" | b | \n",
" B | \n",
"
\n",
" \n",
" | c | \n",
" C | \n",
"
\n",
" \n",
" | d | \n",
" D | \n",
"
\n",
" \n",
" | e | \n",
" E | \n",
"
\n",
" \n",
" | f | \n",
" F | \n",
"
\n",
" \n",
" | g | \n",
" G | \n",
"
\n",
" \n",
" | h | \n",
" B | \n",
"
\n",
" \n",
" | a_sharp | \n",
" A# | \n",
"
\n",
" \n",
" | b_sharp | \n",
" C | \n",
"
\n",
" \n",
" | c_sharp | \n",
" C# | \n",
"
\n",
" \n",
" | d_sharp | \n",
" D# | \n",
"
\n",
" \n",
" | e_sharp | \n",
" F | \n",
"
\n",
" \n",
" | f_sharp | \n",
" F# | \n",
"
\n",
" \n",
" | g_sharp | \n",
" G# | \n",
"
\n",
" \n",
" | a_flat | \n",
" G# | \n",
"
\n",
" \n",
" | b_flat | \n",
" A# | \n",
"
\n",
" \n",
" | c_flat | \n",
" B | \n",
"
\n",
" \n",
" | d_flat | \n",
" C# | \n",
"
\n",
" \n",
" | e_flat | \n",
" D# | \n",
"
\n",
" \n",
" | f_flat | \n",
" E | \n",
"
\n",
" \n",
" | g_flat | \n",
" F# | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" note\n",
"a A\n",
"b B\n",
"c C\n",
"d D\n",
"e E\n",
"f F\n",
"g G\n",
"h B\n",
"a_sharp A#\n",
"b_sharp C\n",
"c_sharp C#\n",
"d_sharp D#\n",
"e_sharp F\n",
"f_sharp F#\n",
"g_sharp G#\n",
"a_flat G#\n",
"b_flat A#\n",
"c_flat B\n",
"d_flat C#\n",
"e_flat D#\n",
"f_flat E\n",
"g_flat F#"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def iterenharmonic(raw_c_notes='abcdefg'):\n",
" \"\"\"Yield pairs of raw note name and corresponding canonical representation.\"\"\"\n",
" for raw_note in raw_c_notes:\n",
" yield raw_note, raw_note.upper()\n",
"\n",
" yield 'h', 'B'\n",
"\n",
" for raw_note in raw_c_notes:\n",
" sharp = 'C' if raw_note == 'b' else 'F' if raw_note == 'e' else f'{raw_note[0].upper()}#'\n",
" yield f'{raw_note}_sharp', sharp\n",
"\n",
" for raw_note, enh_note in zip(raw_c_notes, raw_c_notes[-1:] + raw_c_notes[:-1]):\n",
" flat = 'B' if raw_note == 'c' else 'E' if raw_note == 'f' else f'{enh_note.upper()}#'\n",
" yield f'{raw_note}_flat', flat\n",
"\n",
"\n",
"CANONICAL = dict(iterenharmonic())\n",
"\n",
"assert set(CANONICAL.values()) == set(NOTES)\n",
"\n",
"pd.Series(CANONICAL, dtype='string').to_frame('note')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Index: 79 entries, Grosse Glocke / Susanne to nan\n",
"Data columns (total 7 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Ort, Kirche 79 non-null string\n",
" 1 Schlagton (HT-1/16) 79 non-null string\n",
" 2 Masse (kg, ca.) 79 non-null string\n",
" 3 Giesser, Gussort 79 non-null string\n",
" 4 Gussjahr 79 non-null string\n",
" 5 Disposition des Gesamtgeläuts 79 non-null string\n",
" 6 Unnamed: 7 0 non-null Int64 \n",
"dtypes: Int64(1), string(6)\n",
"memory usage: 5.0+ KB\n",
"\n",
"Index: 473 entries, Petersglocke (im Volksmund Decke Pitter, Dicker Pitter) to Katharinaglocke\n",
"Data columns (total 13 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Nr. 473 non-null Int64 \n",
" 1 Bild 0 non-null Int64 \n",
" 2 Gebäude 473 non-null string\n",
" 3 Standort 473 non-null string\n",
" 4 Bundesland 473 non-null string\n",
" 5 Ton: 473 non-null string\n",
" 6 Masse (kg) 473 non-null string\n",
" 7 Ø (mm) 459 non-null string\n",
" 8 Jahr 473 non-null string\n",
" 9 Gießer, Gussort 473 non-null string\n",
" 10 Werkstoff 473 non-null string\n",
" 11 Konf. 457 non-null string\n",
" 12 Bemerkungen 55 non-null string\n",
"dtypes: Int64(2), string(11)\n",
"memory usage: 52.7+ KB\n"
]
}
],
"source": [
"HEADERS = {'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11'}\n",
"\n",
"def read_bells_html(country_code: str, url: str, format, *, note_col: str, encoding: str = 'utf-8') -> pd.DataFrame:\n",
" del note_col\n",
" path = pathlib.Path(f'bells_{country_code.lower()}.csv')\n",
" if not path.exists():\n",
" df = pd.concat(pd.read_html(url, storage_options=HEADERS, **format))\n",
" df.convert_dtypes().to_csv(path, encoding=encoding)\n",
" assert path.exists()\n",
" return pd.read_csv(path, encoding=encoding, **format).convert_dtypes()\n",
"\n",
"\n",
"ch = read_bells_html(**CH)\n",
"ch.info()\n",
"\n",
"de = read_bells_html(**DE)\n",
"de.info()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" count | \n",
" base | \n",
" sharp | \n",
" flat | \n",
" primes | \n",
" pos | \n",
" neg | \n",
" delta | \n",
"
\n",
" \n",
" | Schlagton (HT-1/16) | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | as0 | \n",
" 35 | \n",
" a | \n",
" | \n",
" s | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | g0 | \n",
" 16 | \n",
" g | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | ges0 | \n",
" 9 | \n",
" g | \n",
" | \n",
" es | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | gis0 | \n",
" 9 | \n",
" g | \n",
" is | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | f0 | \n",
" 4 | \n",
" f | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | e0 +3 | \n",
" 1 | \n",
" e | \n",
" | \n",
" | \n",
" 0 | \n",
" + | \n",
" | \n",
" 3 | \n",
"
\n",
" \n",
" | g0 −5 | \n",
" 1 | \n",
" g | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" − | \n",
" 5 | \n",
"
\n",
" \n",
" | e0 | \n",
" 1 | \n",
" e | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | g0[3] | \n",
" 1 | \n",
" g | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | fis0 | \n",
" 1 | \n",
" f | \n",
" is | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | b0 | \n",
" 1 | \n",
" b | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" count base sharp flat primes pos neg delta\n",
"Schlagton (HT-1/16) \n",
"as0 35 a s 0 \n",
"g0 16 g 0 \n",
"ges0 9 g es 0 \n",
"gis0 9 g is 0 \n",
"f0 4 f 0 \n",
"e0 +3 1 e 0 + 3\n",
"g0 −5 1 g 0 − 5\n",
"e0 1 e 0 \n",
"g0[3] 1 g 0 \n",
"fis0 1 f is 0 \n",
"b0 1 b 0 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"BELL_NOTE = re.compile(\n",
" r'''\n",
" (?P[a-h]) # a0 = A3\n",
" (?:\n",
" (?Pis)\n",
" |\n",
" (?Pe?s)\n",
" )?\n",
" [ \\N{NO-BREAK SPACE}]?\n",
" (?P[0-7]|['′]{,7}|º)\n",
" (?:\n",
" (?:\n",
" [ \\N{NO-BREAK SPACE}]?\n",
" (?:\n",
" (?P[+])\n",
" |\n",
" (?P[-\\u2013\\u2212])\n",
" )\n",
" (?P1[0-6]|[1-9])\n",
" (?:/16)?\n",
" )?\n",
" )?\n",
" (?:\n",
" (?:\\[\\d\\]) # footnote\n",
" |\n",
" (?:,.*)\n",
" )?\n",
" ''', flags=re.VERBOSE)\n",
"\n",
"\n",
"def value_counts_extract(series: pd.Series, regex) -> pd.DataFrame:\n",
" result = series.value_counts().to_frame().assign(value=lambda x: x.index)\n",
" return result.join(result['value'].str.extract(regex)).drop('value', axis='columns')\n",
"\n",
"\n",
"value_counts_extract(ch[CH['note_col']], BELL_NOTE).fillna('')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" count | \n",
" base | \n",
" sharp | \n",
" flat | \n",
" primes | \n",
" pos | \n",
" neg | \n",
" delta | \n",
"
\n",
" \n",
" | Ton: | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | a0 | \n",
" 159 | \n",
" a | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | g0 | \n",
" 38 | \n",
" g | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | gis0 | \n",
" 33 | \n",
" g | \n",
" is | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | as0 | \n",
" 29 | \n",
" a | \n",
" | \n",
" s | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | fis0 | \n",
" 8 | \n",
" f | \n",
" is | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | b0 | \n",
" 8 | \n",
" b | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | e0 | \n",
" 7 | \n",
" e | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | f0 | \n",
" 7 | \n",
" f | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | h0 | \n",
" 6 | \n",
" h | \n",
" | \n",
" | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" | ges0 | \n",
" 4 | \n",
" g | \n",
" | \n",
" es | \n",
" 0 | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" count base sharp flat primes pos neg delta\n",
"Ton: \n",
"a0 159 a 0 \n",
"g0 38 g 0 \n",
"gis0 33 g is 0 \n",
"as0 29 a s 0 \n",
"fis0 8 f is 0 \n",
"b0 8 b 0 \n",
"e0 7 e 0 \n",
"f0 7 f 0 \n",
"h0 6 h 0 \n",
"ges0 4 g es 0 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"value_counts_extract(de[DE['note_col']], BELL_NOTE).fillna('').head(10)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"MIDI_NOTE_OPTIONAL_DELTA = re.compile(\n",
" r'''\n",
" (?P\n",
" [A-G]\n",
" [#]?\n",
" (?:-1|[0-9])?\n",
" )\n",
" (?:\n",
" (?P\n",
" [+-]\n",
" (?:1[0-6]|[1-9])\n",
" )\n",
" /16\n",
" )?\n",
" ''', flags=re.VERBOSE)\n",
"\n",
"\n",
"def get_note(match: pd.Series, *, as_midi: bool, include_delta: bool) -> str:\n",
" base = match.base\n",
" if not base:\n",
" return None\n",
"\n",
" if match.sharp:\n",
" base += '_sharp'\n",
" elif match.flat:\n",
" base += '_flat'\n",
"\n",
" note = CANONICAL[base]\n",
"\n",
" primes = (int(match.primes) if match.primes.isdigit()\n",
" else len(match.primes) if match.primes.startswith((\"'\", '′'))\n",
" else 0 if match.primes == 'º'\n",
" else 0)\n",
" octave = 3 + primes\n",
"\n",
" if match.delta:\n",
" sign = '+' if match.pos or not match.neg else '-'\n",
" delta = int(sign + match.delta)\n",
" else:\n",
" delta = 0\n",
"\n",
" if delta < -7:\n",
" index = NOTES.index(note) - 1\n",
" if index < 0:\n",
" octave -= 1\n",
" note = NOTES[index % len(NOTES)]\n",
" delta += 16\n",
" elif delta > 8:\n",
" index = NOTES.index(note) + 1\n",
" if index >= len(NOTES):\n",
" octave += 1\n",
" note = NOTES[index % len(NOTES)]\n",
" delta -= 16\n",
"\n",
" if as_midi:\n",
" note += str(octave)\n",
" if include_delta and delta:\n",
" note += f'{delta:+d}/16'\n",
"\n",
" assert MIDI_NOTE_OPTIONAL_DELTA.fullmatch(note)\n",
" return note\n",
"\n",
"\n",
"def to_notes(series: pd.Series, *, as_midi=False, include_delta=False, verbose=False):\n",
" if verbose:\n",
" print(*sorted(series), sep='|')\n",
"\n",
" missed = series[~series.str.fullmatch(BELL_NOTE.pattern, flags=BELL_NOTE.flags)]\n",
" if not missed.empty:\n",
" print(f'missed: {missed.tolist()}')\n",
"\n",
" matches = series.str.extract(BELL_NOTE).fillna('')\n",
" return matches.apply(get_note, axis='columns', as_midi=as_midi, include_delta=include_delta)\n",
"\n",
"\n",
"assert pd.Series(['gis0+2', 'a0+1/16']).pipe(to_notes).equals(pd.Series(['G#', 'A']))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"FIGSIZE = (6 * 72 / 100, 4 * 72 / 100)\n",
"\n",
"\n",
"def note_stats(bell_notes):\n",
" (bell_notes.value_counts().to_frame('n_bells')\n",
" .assign(note=lambda x: x.index.to_series().pipe(to_notes))\n",
" .groupby('note')['n_bells'].sum().to_frame('n_bells')\n",
" .plot.bar(figsize=FIGSIZE))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"missed: ['h⁰', 'aa+3', 'h0/c1']\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAElCAYAAADgCEWlAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAHu9JREFUeJzt3QlwlOUdx/F/QrgEksgZwIDc96GAIRUVBOQ+ChWwjEANoFxWaKFiOdUOSmmlRA4d5bJcwigKUpSG4ZIQOUQUUwoYrkIShYZTwvV2/s90d/JAwpHskd18PzPvJLvvu9e7776/9zne5w1xHMcRAAD+L9T1DwAABAMA4BaUGAAAFoIBAGAhGAAAFoIBAGAhGAAAljAJQDdu3JCTJ09KqVKlJCQkxN9vBwACgp62dv78ealUqZKEhoYGVzBoKERHR/v7bQBAQDp+/Lg88MADwRUMWlJwfbjw8HB/vx0ACAjnzp0zB9WufWhQBYOr+khDgWAAgHtzpyr4e2p8njZtmrRo0cKkTfny5aVnz55y4MABa5nLly/LiBEjpEyZMlKyZEnp3bu3pKWlWcscO3ZMunTpIvfdd595nrFjx8q1a9fu5a0AALzknoJh8+bNZqe/Y8cO2bBhg1y9elWeeuopuXjxonuZ0aNHy5o1a2TlypVmeW0P6NWrl3v+9evXTShcuXJFtm/fLosWLZKFCxfKpEmTPPvJAAC54+RBenq6jszqbN682dzOyMhwChcu7KxcudK9THJyslkmMTHR3F63bp0TGhrqpKamupeZO3euEx4e7mRmZt7V6549e9Y8p/4FADge3XfmqY3h7Nmz5m/p0qXN3927d5tSRLt27dzL1K1bV6pUqSKJiYnSsmVL87dRo0ZSoUIF9zIdOnSQYcOGyf79++Whhx665XUyMzPNlLUBBUD+pTUDui+AbxUuXFgKFSqU5+cJy8u5BC+99JI8+uij0rBhQ3NfamqqFClSRCIjI61lNQR0nmuZrKHgmu+al1PbxtSpU3P7VgH4sJ+8/o4zMjJY536i+9+oqKg8neOV62DQtobvvvtOtm3bJt42fvx4GTNmzC1drgDkL65Q0E4l2rmEE1B9G8qXLl2S9PR0c7tixYq+DYaRI0fK2rVrZcuWLdZJEppS2qisG0bWUoP2StJ5rmW++uor6/lcvZZcy9ysaNGiZgKQv6uPXKGgvRLhe8WLFzd/NRz0e8httVLovSaShsLHH38sGzdulGrVqlnzmzVrZuq4EhIS3Pdpd1btnhobG2tu699vv/3WnWpKezjp+Qj169fP1YcA4H+uNgUtKcB/XOs/L208YfdafbR06VL55JNPzLkMrjaBiIgIk1T6Ny4uzlT7aIO07uxHjRplwkAbnpV2b9UAePbZZ2X69OnmOSZMmGCe21Olggdf/ixXjzvyRhePvD5QkFF9FPjr/56CYe7cueZv69atrfsXLFgggwYNMv+/9dZbZnAmPbFNexJpj6M5c+a4l9WijVZDaS8kDYwSJUrIwIED5dVXX83zhwEAiG+DQauS7qRYsWIye/ZsM+WkatWqsm7dunt5aQCAjwTkWEkAAktuq3cDoUo4JCTEtLvqEEG5pTUu2nC/evVqd61M06ZNZebMmeIPXKgHAGAhGAAAFoIBQIGnVTcvvviijBs3zvSo1HOqpkyZctfr5dSpU9KpUyfTO7N69eqyatUqa75eO6ZPnz7m/C59/h49esiRI0fu+vm1A0+tWrVMG66OFPGrX/3Kq98ZwQAAImakZ+0lmZSUZLrSa09JPcfqbkycONH0xPzmm2+kf//+0q9fP0lOTnafT6C9M7WL/9atW+XLL780lyTo2LGjOSH4Tnbt2mVCS9+Pnhe2fv16efzxx736ndH4DAAi0rhxY5k8ebJZF3p0/vbbb5uTddu3b3/H9fP000/L4MGDzf+vvfaaCZT4+HhzpL9ixQozttx7773nPsdAu/hr6WHTpk3m3K7b0ROENbC6du1qwkV7dWY32KgnUWIAgP8HQ1YVK1a0Rmi4HdfIDllvu0oMWoo4dOiQ2alrSUEnrU7Si5odPnz4js+twaRhoFVUemLwkiVLzJhI3kSJAQD+P2R1ViEhIeZIP68uXLhghgvSHfrNypUrd8fHa6Ds2bPHlC6++OILc1Ezbf/YuXPnLSNZewolBgDIox07dtxyu169eub/hx9+WA4ePGgGtatZs6Y16TBCdyMsLMxc50bbPvbt22carnW8Om8hGAAgj1auXCnz58+Xf//736adQkeQ1gFHlTZGly1b1vRE0sbnlJQUc/SvDconTpy443PrEEKzZs2SvXv3ytGjR2Xx4sWmJFOnTh2vfW9UJQHwumAfoHLq1KmyfPlyGT58uGmbWLZsmXu0aB3tVC9R8Ic//EF69eol58+fl8qVK0vbtm3NQKN3otVFH330kak+0nYJbRjX52/QoIHXPk+IXt9TAoxeqEeLYHpp0exWLKOrAr6nOy09Gtbh+LW/PfLf93CnfacLVUkAAAvBAAA5WLJkibuL6c2TN6ty/I02BgDIQffu3SUmJuauurcGE4IBAG5zDkGpUqUK3PqhKgmARwVgf5ag4nhg/RMMADzCVbXi7eEacHuu9Z+Xqi6qkgB4hF7PXfvcu8YX0v77nrgwPe6+pKChoOtfvwf9PnKLYADgMXodA3W3g8/B8zQUXN9DbhEMADxGSwh65q+OC6TXIYBvafVRXkoKLgQDAI/TnZMndlDwDxqfAQAWggEAYCEYAAAWggEAYCEYAAAWggEAYCEYAAAWggEAYCEYAAAWggEAYCEYAAAWggEAYCEYAAAWggEAYCEYAAAWggEAYCEYAAAWggEAYCEYAAAWggEAYCEYAAB5C4YtW7ZIt27dpFKlShISEiKrV6+25g8aNMjcn3Xq2LGjtcyZM2ekf//+Eh4eLpGRkRIXFycXLly417cCAMgPwXDx4kVp0qSJzJ49O8dlNAhOnTrlnpYtW2bN11DYv3+/bNiwQdauXWvCZujQobn7BAAAjwq71wd06tTJTLdTtGhRiYqKynZecnKyrF+/Xnbu3CnNmzc398XHx0vnzp1lxowZpiQCAAiyNoZNmzZJ+fLlpU6dOjJs2DA5ffq0e15iYqKpPnKFgmrXrp2EhoZKUlJSts+XmZkp586dsyYAQIAEg1YjLV68WBISEuTNN9+UzZs3mxLG9evXzfzU1FQTGlmFhYVJ6dKlzbzsTJs2TSIiItxTdHS0p982ACC3VUl30q9fP/f/jRo1ksaNG0uNGjVMKaJt27a5es7x48fLmDFj3Le1xEA4AECAdletXr26lC1bVg4dOmRua9tDenq6tcy1a9dMT6Wc2iW0zUJ7MGWdAAABGgwnTpwwbQwVK1Y0t2NjYyUjI0N2797tXmbjxo1y48YNiYmJ8fbbAQB4uipJzzdwHf2rlJQU2bt3r2kj0Gnq1KnSu3dvc/R/+PBhGTdunNSsWVM6dOhglq9Xr55phxgyZIjMmzdPrl69KiNHjjRVUPRIAoAALDHs2rVLHnroITMprfvX/ydNmiSFChWSffv2Sffu3aV27drmxLVmzZrJ1q1bTXWQy5IlS6Ru3bqmzUG7qbZq1Ureffddz34yAIBvSgytW7cWx3FynP/555/f8Tm0ZLF06dJ7fWkAgA8wVhIAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwEIwAAAsBAMAwBJm3wQA5BcPvvxZrh535I0ueXpdSgwAAAvBAACwEAwAgLwFw5YtW6Rbt25SqVIlCQkJkdWrV1vzHceRSZMmScWKFaV48eLSrl07OXjwoLXMmTNnpH///hIeHi6RkZESFxcnFy5cuNe3AgDID8Fw8eJFadKkicyePTvb+dOnT5dZs2bJvHnzJCkpSUqUKCEdOnSQy5cvu5fRUNi/f79s2LBB1q5da8Jm6NChefskAAD/9Erq1KmTmbKjpYWZM2fKhAkTpEePHua+xYsXS4UKFUzJol+/fpKcnCzr16+XnTt3SvPmzc0y8fHx0rlzZ5kxY4YpidwsMzPTTC7nzp2717cNAPBHG0NKSoqkpqaa6iOXiIgIiYmJkcTERHNb/2r1kSsUlC4fGhpqShjZmTZtmnke1xQdHe3Jtw0A8FYwaCgoLSFkpbdd8/Rv+fLlrflhYWFSunRp9zI3Gz9+vJw9e9Y9HT9+3JNvGwAQaCe4FS1a1EwAgAArMURFRZm/aWlp1v162zVP/6anp1vzr127ZnoquZYBAARJMFSrVs3s3BMSEqyGYm07iI2NNbf1b0ZGhuzevdu9zMaNG+XGjRumLQIAEGBVSXq+waFDh6wG571795o2gipVqshLL70kr7/+utSqVcsExcSJE01Po549e5rl69WrJx07dpQhQ4aYLq1Xr16VkSNHmh5L2fVIAgDk82DYtWuXtGnTxn17zJgx5u/AgQNl4cKFMm7cOHOug56XoCWDVq1ame6pxYoVcz9myZIlJgzatm1reiP17t3bnPsAAPC/EEdPPggwWj2l3Va1h5KePZ1fRiQEAE/y9L7sTvtOF8ZKAgBYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgCXMvgkAyMmDL3+Wq5Vz5I0uAbVSKTEAACwEAwDAQjAAACwEAwDAQjAAALwbDFOmTJGQkBBrqlu3rnv+5cuXZcSIEVKmTBkpWbKk9O7dW9LS0jz9NgAA+anE0KBBAzl16pR72rZtm3ve6NGjZc2aNbJy5UrZvHmznDx5Unr16uWNtwEAyC/nMYSFhUlUVNQt9589e1bef/99Wbp0qTz55JPmvgULFki9evVkx44d0rJlS2+8HQCAv0sMBw8elEqVKkn16tWlf//+cuzYMXP/7t275erVq9KuXTv3slrNVKVKFUlMTMzx+TIzM+XcuXPWBAAIkGCIiYmRhQsXyvr162Xu3LmSkpIijz32mJw/f15SU1OlSJEiEhkZaT2mQoUKZl5Opk2bJhEREe4pOjra028bAOCtqqROnTq5/2/cuLEJiqpVq8qHH34oxYsXz9Vzjh8/XsaMGeO+rSUGwgEAArS7qpYOateuLYcOHTLtDleuXJGMjAxrGe2VlF2bhEvRokUlPDzcmgAAARoMFy5ckMOHD0vFihWlWbNmUrhwYUlISHDPP3DggGmDiI2N9fZbAQD4oyrp97//vXTr1s1UH2lX1MmTJ0uhQoXkmWeeMe0DcXFxplqodOnS5sh/1KhRJhTokQQAQRoMJ06cMCFw+vRpKVeunLRq1cp0RdX/1VtvvSWhoaHmxDbtbdShQweZM2eOp98GACC/BMPy5ctvO79YsWIye/ZsMwEA8h/GSgIAWAgGAICFYAAAWAgGAICFYAAAWAgGAICFYAAAWAgGAICFYAAAWAgGAID3L+0J73rw5c9y9bgjb3Tx+HsBEHwoMQAALAQDAMBCMAAALAQDAMBCMAAALAQDAMBCMAAALAQDAMBCMAAALAQDAMBCMAAALAQDAMBCMAAALIyuCiBgMdKwd1BiAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYCAYAgIVgAABYOPMZCGK+PjOYM5GDAyUGAICFEgPuiKNAoGChxAAAsBAMAAALwQAAsNDGAPgQ7TUIBAQD8h12noB/UZUEAMgfJYbZs2fLn//8Z0lNTZUmTZpIfHy8PPLII/56OyjAKKEA+aDEsGLFChkzZoxMnjxZ9uzZY4KhQ4cOkp6e7o+3AwDwd4nhr3/9qwwZMkR+85vfmNvz5s2Tzz77TObPny8vv/yyBBqOOAEEE58Hw5UrV2T37t0yfvx4932hoaHSrl07SUxMzPYxmZmZZnI5e/as+Xvu3Llsl7+ReSlX7y2n57sTXo/1ybbCbyEQ9i2u+x3Huf0TOD72n//8R9+Rs337duv+sWPHOo888ki2j5k8ebJ5DBPrgG2AbYBtQPK8Do4fP37b/XRAdFfV0oW2SbjcuHFDzpw5I2XKlJGQkJC7fh5Ny+joaDl+/LiEh4d76d3yeqxPthV+C96V232ZlhTOnz8vlSpVuu1yPg+GsmXLSqFChSQtLc26X29HRUVl+5iiRYuaKavIyMhcvwddkb4IBl6P9cm2wm/Bm3KzL4uIiMh/vZKKFCkizZo1k4SEBKsEoLdjY2N9/XYAADfxS1WSVgsNHDhQmjdvbs5dmDlzply8eNHdSwkAUMCCoW/fvvLjjz/KpEmTzAluTZs2lfXr10uFChW8+rpaHaXnTtxcLcXrsT79vb2wbbI+89P2EqIt0F55ZgBAQGKsJACAhWAAAFgIBgCAhWAAAFgKbDB89913/n4LAJAvFahg0FPB3333XXPuhA71jbuzceNGqV+/frYDc+mAhg0aNJCtW7eyOuH2ww8/3HmgtgD1888/y9q1a28Zssc1jR07Vi5fviyBrEAEw5YtW8wJdRUrVpQZM2bIk08+KTt27PDKa504ccKcye0rp0+fdv+v46bouSG6YXpyR60nIOow6dmdeq+n1z///PNmKHVvWL58uVy6lLsRJu+Vfm869HvXrl2lYcOG0qhRI+nevbssXrw44HdynTt3do9KrN544w3JyMiwtiMNf0+pVauWOVcp67lLNw+DE6gWLVok77zzjvv222+/Ldu3b5evv/7aTH//+99l7ty5gf17cILUqVOnnGnTpjk1a9Z0ypcv74wcOdIJCwtz9u/f79XXvf/++52jR4+a/5cuXepcuHDBK6+zb98+p2rVqk5oaKhTp04d5+uvv3YqVKjglCxZ0gkPD3cKFSrkfPzxxx55rSpVqjjff/99jvOTk5Od6Ohox9vrc9iwYc6PP/7olde5ceOG06VLFyckJMRp2rSp069fP6dv375O48aNzX09evRwvGXZsmXOxYsXHW/S7SQtLc19u1SpUs7hw4fdt1NTU80ynqLrLOvr6XaZ9fW8acSIEc7p06e99vytWrVyPv300xw/2wcffOC0bNkyoH8PQRkMXbt2NTvHZ555xlm7dq1z7do1c7+3giEuLs5ZsGCBc+DAAScyMtI5duxYtj8+T+rYsaP5nNu2bXOef/55p3Llys5zzz3nXL9+3UzDhw93YmJiPPJaRYsWdQ4ePJjjfJ1XrFgxx1OqV6/uDBgwwHnnnXfMOvTF+pw/f755/o0bN94yLyEhwcxbtGhRwP7Y77SjDvRgyDqMdNb12bBhQ/f24ylRUVFOSkqK+3bZsmWt27of0P1PIP8egrIq6R//+IfExcXJ1KlTpUuXLmY0V2+qUaOGfPjhhxITE2Pq4UePHi1Lly41VRP3Miz4vdi5c6f86U9/kkcffdRUj508eVKGDx9uLnqk06hRo+Rf//qXR16rcuXKt22s37dvn6mm85QPPvjAtFtoPa4Wm3VwxaFDh8rVq1flv//9r3jDsmXL5JVXXpE2bdrcMk+rHvXKgkuWLPHoNqPVm9rmde3aNfd2otUQub2oS36in+fmbd9bvwVVt25dqVq1qvz617829ftaraqOHDlithtPysjIsC4cplVmDz74oPu2/u6zzg/E30NQlhgSExOdwYMHm0TVi//Ex8ebozBvVyXpkXpERITzyiuvOO3bt3dX87zwwgumWilQjwC1Gk6PvH7++edb5l26dMnMGzVqlOMNWgLTYvvrr7/uFC5c2ClSpIhTt25dZ+jQoR59Ha2G0+q4nOzZs8cs4ylffvml8+abbzrdunUz1X5a4hsyZIgpee3atcvxNN0W0tPTre3lhx9+8GqJoXPnzs4vf/lLM+lv76mnnnLfdk2ecvXqVScpKcmZMWOGKeHqEXutWrXMNjNnzhzz+TylZs2azqpVq3Kcv2LFCqdGjRpOIP8egnqsJB2xdcWKFaZB8auvvpLr16+bRtLnnntOSpUq5bHXmTBhgrRq1cokuR45fPPNN1KlShXzGnPmzDFHLdoAvmHDBo+9ppYKtDGvXLly5ra+lh65V6tWzdzWeXoxDv3MeaXP9fDDD5uS18iRI6VOnTrmfi2RzJ4927zGnj17PDYIopaCHnvsMfnFL34hzz77rCmt6EVJ9DMmJSXJTz/9ZNanrndPDgd/9OjRHEs+WiLTdevJI0GX+++/3zRw6/enpVw9sq5evbo8/vjjViNnXreXTp06uQddW7NmjSkJlShRwtzWz6UDWXpie1F3O1LyggULPNZTqHjx4u71qZcPPnXqlLlksHYk2L9/v9mGDhw4kOfX+u1vfyv//Oc/zWsUK1bslveho0br6/7tb3+TQP09BHUwZKUbxPvvv2+KZVoUbN++vXz66aceeW7dWer1qvUL02qBwYMHS58+faRnz57WztqTfP1D153msGHD5PPPP3f30NEdWIcOHUw4ePIzrlq1yqxP7emhga7F6B49eshf/vIXE7ra48XTNPR0pF9X0N7Mk0Hrjx+7r3fUvqa/Ax2lWderhqlru9H1qduMVodq9asewOVVWlqaeS09mNDffu3atd37GO2hpPsA7Z3kqQMlf/weCkwwuOgPW3eiWorwVDBkLaHozkNDQb9EPaLWH74ePTzxxBPSunVrj72Wv37oWqd56NAhEw66QerRmTfp82sbipZItD6+cOHCpi1Hj6b16NpbQXszTwetP37swUyD1LU+tVZAD1patGhh1q22DWm3Y92Re0pKSoo5UNJagKwHSnrAqbUEWuIL5N9DgQsGb9MvLmtVkn5ZBw8elM2bN8v333/v77cX8OtTd87asKjr05N9xf15RO2rH3tBoetTS1vJyckyYMAAc8lgPcrXE1t1u/GkM2fOmAMlVbNmTSldurQEw+8hKBuf/Um7ibr6UPuy73aw0kZ7Vx//YF2f2qDo6l6pn1G7IOu5DdppAXlfn7rN6HlNy5cvD/jVudRHvwdKDF6kXVa1ekDr/bUOWRvBkHt6ZKR1xVrtE0y0q6xuJ/fdd5+7TtxbVREFbTvR35x2X9f2m2Bz3Iu/B4LBy2Mz6Y/+vffeMz0YPFU/XRDGZtJGPR225OZhOHRYB223mTdvnmm8DTbBGn6+GJtJO0B481wJf9GeTgkJCWaoFtfYTFl7x2nHiddee+2WHlJ5wdYX4GMzBSN/js3kS9mNzTRixAhzkhtNf/eGsZnmenbj9EoFVQHkr7GZgpE/x2byFX+OzRSM/Dk2k7f5Y2wmSgwe0K1bN3PSl56zoEe7ejJUfHy8J566QNIeJNozJydhYWHWyJ2BaOHChaZkqVUE2uddqxx15ExtX9CTp7Q6TU96Aw4dOmRKky5aZZS1qlF7W3m6xyPBEIBjMwU7X4/N5A++Hpsp2Pl6bCZf8vXYTCrMo89WQG3bts2cVd2sWTOpV6+eOZO1X79+/n5bAX3tgIkTJ0rHjh2zHXJg8uTJ7oa4QKXhNn369Bzn68l2s2bN8ul7CmTaJjNo0CD3CYo6kN4LL7zgHgnA5aOPPpJA88ADD5gDJddQNNltS7qMJ9ErKQDHZgp2vh6byR/8OTZTMArmIT9+6+OxmRTBEIBjMxUEvhybyR98PTYTAleaj8dmUgRDAI/NVBD4emwmX/H12EwIbCk+HpuJYAD8IJirPuA9vhqbiWAAAFjorgoAsBAMAAALwQAAsBAMAAALwQAAsBAMgJdMmTLFnJgEBBqCAQBgIRiAHLRu3VpefPFFGTdunDmRSC8qr6UAl2PHjplLcpYsWdJcVKhPnz5m+ALXsNo62q4Oo+0a+VPvUzpEyuDBg81wGPo4HU1VlwPyC4IBuI1FixaZETqTkpLMaKivvvqqGZZAhzrWUNAzUTdv3mzu08tL9u3b1zxO//7ud7+TBg0ayKlTp8zkmvf0009Lenq6Ga5dB0bTAQPbtm1rngvIDxh2G7iNxo0bm2G+lY7VpIOW6cV11LfffmvGsHFdaF4vrKNBsHPnTmnRooUpSehFhbSkkXWIdh15V4PBNU6SXv519erVsmrVKhk6dCjfB/yOYADuEAxZ6TDZulNPTk42geAKBVW/fn2JjIw08zQYsqNVRhcuXJAyZcrcMnzy4cOH+S6QLxAMwG3cfIlRbSvQaqTc0lDQcNm0adMt8zRUgPyAYAByQa/Ud/z4cTO5Sg163V1tWNaSg9Lx828eNlvbE/Q6DFrFlPXyjEB+QuMzkAt6xSy9QHv//v3N1eS03WDAgAHyxBNPmCtqKd3xaxvE3r175aeffjLXWNDHxcbGSs+ePeWLL76QI0eOyPbt2+WPf/yj7Nq1i+8C+QLBAOSCVil98skn5sJBjz/+uNnh68VS9NKuLr179zbXrW7Tpo3pmrps2TLzuHXr1pnH6DUZ9Gpcen1wvWJdIF+qFMGF6zEAACyUGAAAFoIBAGAhGAAAFoIBAGAhGAAAFoIBAGAhGAAAFoIBAGAhGAAAFoIBAGAhGAAAktX/ABzq4AqG4rBFAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"note_stats(de[DE['note_col']])"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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aQtvoDcCAOA/DNIGAJYh+AHAMgQ/AFiG4AcAyxD8AGCZgA/ZADTUv/71L+nSpYtfhvKAb3333XfmIs677rrLM1RL7cEZ9Wr/Z5991szfgeZnbYn/m2++8dzWsTT0moMnnnhCPvroI3Gqn//8557RTVVeXp6UlZV57bMOk+1U3bp1M9eH1L5epO7QIAhOS5culddee81z/5VXXpEdO3bIp59+apY//elPsmjRIgkFK1eulG+/9e9IwY3mssyBAwdc119/vSs8PNzVvXt316effupKSEhwRUVFuaKjo10tWrRwrV271uVEuk+lpaWe++3bt3cdPXrUc7+kpMQ8x6nCwsK89k+PWe39CyUTJ050ffPNN65QMWjQINdf/vKXyx67t956y5WWluYKBR06dHAdP37c3J4wYYLrzJkzrmBjXYl/+vTp8sMf/lC2b98uGRkZ5tRz2LBhpqT83//+V371q1+ZkrIT1b0Wj2vznOWrr77y3F6+fLmcO3fO3Na/Vz0rdbIjR46Y/XDTKh2dp8NNh3b54osvxKluvPFGM0zNH/7wB/n+++891ZF6JuPveR8awro6/l27dsmWLVukb9++ZkpIPVCPPfaY549w8uTJkpaWFujNRD30P1Pd+v1Qqu/v0aOHGY584MCBUlVVZcI+JSVFioqK5MKFC+JkWuVYu06/dpWdeyDH2uud5q233pKPP/5YNmzYYKp5dEBKrXrV46YFymBjXfDrWP/u4aGjoqKkXbt20qFDB896va1jWjtRqAejnsGMGzfOM/aJhuOjjz5qjmFt77zzjjg1HHWOam1n0n3Q4NDxrTQQN23aJCNHjgzK8a4aIikpST777DPp3r17vesPHDhgnuNUP/nJT8yiNQqaIdpeoftUU1NjHr/hhhtk8ODBXu0cgWTdWD1astcGwY4dO5r77du3NwdIe4soXacTGegBc+K+DR061BOM69evl8zMTE8waoDoYHlO3DfV0NFdFy9eLE7t+dKmTRtzW8NDpzA9deqUmba0T58+8vnnn5uJPQ4fPixOM2XKFPnrX/9q9qluzx3dbx3JV/fzpZdeEicaOHCg/PSnPzUh/+CDD5ofOT1Wmi+FhYXy9ddfm+rlp556SoKBlcEfquEY6sEY6vRvUkey1RDRkuHOnTuld+/eJjz2798v1113namqHDRokDiNFqh033S+jkmTJskPfvAD87j+iGkPH60X1949Tj2jWbNmjZlTXHsquY/b8OHD5Xe/+505dtojLZhYF/yEI4KVlgrd4fHiiy+aarr+/fubIHn77bfl7rvvNsHpVMeOHZMJEybI5s2bPR0PdB+HDBkiCxcuNNUhoaBDhw7ywgsvmGo7bUOMiIiQAQMGmKqeWbNmSTCwLvgBp4SHVg0cOnRIxowZY9qltNSsvV+2bdsmTm9n014+qmvXrhIXFyehduz2799vGub1bE1rELShXo9bsFyrQPADDggPvd22bVsTHnrhGoLXihUrTDWPHi/3sQu2sxmCHwhCWkLUOn1tk9KG3Q8++MA0FsK5xzGYEPxAkGAsIuf6zmFjEQXXzxBgMcYicq6lDhuLiOAHgkTdfhbvv/++VFZWBmx70HDa6+qRRx7xekyH3fjb3/5mlueff17+/Oc/S7Ag+AHAsrGIrBuyAQhWoT7kRigrc9hYRAQ/ECRCfSyiUJbksLGI6NUDBAmuKneuKQ4bi4jgBwDLxiIi+AHAsrGICH4AsGwsIoIfACxDP34AsAzBDwCWIfgBwDIEPwBYhuAHAMsQ/EATPPPMM+aCHcCJCH4AsAzBDytlZGTI448/LtOnTzcX2Ohk5lqKdztx4oSZNzUqKkqio6PlvvvuM5flqyVLlsisWbPMXKruETX1MfcojQ8//LB07NjRvC4zM9M8DwgmBD+snjVJR74sLCyUuXPnyuzZs83l9jqEroa+XoGpk5vrYzotonuSc/3317/+tfTu3VtOnTplFve6e++9V06fPm3myNUBu2655Ra5/fbbzXsBwYJhmWGtvn37ysyZMz3THupgWjpvqjp48KAZe8U9wfmyZctM0O/atUv69+9vzgRatmxpzhTcPv74Y9m5c6cJfvfQyi+88IKsW7dO1qxZc8kMTUCgEPywOvhr69SpkwntQ4cOmcB3h77q1auXxMbGmnUa/PXRKp1z585JfHz8JcPyHj16tJn2Amg8gh/WioiI8LqvdfVazdNUGvr647F169ZL1umPBhAsCH6gjp49e0pxcbFZ3KV+nS9VG2615K903PWamhqv12l9fklJiakCSk1N5XtF0KJxF6hDZ0rSibMfeOAB2bt3r6m3HzNmjPzsZz8zMykpDXZtA9i3b598/fXXZj5VfV16erqMGDFCPvzwQykqKpIdO3bIb3/7W9m9ezffM4IGwQ/UoVU+7777rnTo0EEGDx5sAl0n0Vi1apXnOaNGjZI777xTbrvtNtN1c8WKFeZ177//vnmNTqOoszCNHj1ajh8/HjQzLwGK8fgBwDKU+AHAMgQ/AFiG4AcAyxD8AGAZgh8ALEPwA4BlCH4AsAzBDwCWIfgBwDIEPwBYhuAHALHL/wB2HjHiH9wf6AAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"note_stats(ch[CH['note_col']])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"def get_frequency(midi_note_optional_delta: str, *, pitch_reference: int = 440) -> float:\n",
" midi_note, delta = MIDI_NOTE_OPTIONAL_DELTA.fullmatch(midi_note_optional_delta).groups()\n",
" midi_number = MIDI_NOTES.index(midi_note)\n",
" if delta:\n",
" midi_number += int(delta) / 16\n",
" \n",
" frequency = 2 ** ((midi_number - 69) / 12) * pitch_reference\n",
" return round(frequency, 3)\n",
"\n",
"\n",
"assert get_frequency('A4') == 440\n",
"assert get_frequency('G#3') == 207.652\n",
"\n",
"assert get_frequency('G#3-8/16') == 201.741\n",
"\n",
"assert round(get_frequency('E4+6/16', pitch_reference=435), 1) == 333\n",
"\n",
"\n",
"def frequency_stats(bell_notes, *, plot='bar', include_deltas=False, pitch_reference: int = 440):\n",
" df = (bell_notes.value_counts().to_frame('n_bells')\n",
" .assign(midi_note=lambda x: x.index.to_series().pipe(to_notes, as_midi=True,\n",
" include_delta=include_deltas))\n",
" .dropna()\n",
" .assign(frequency=lambda x: x['midi_note'].apply(get_frequency, pitch_reference=pitch_reference)))\n",
"\n",
" operator.methodcaller(plot, figsize=FIGSIZE)(df.groupby('frequency')['n_bells'].sum().to_frame('n_bells').plot)\n",
"\n",
" return (df.groupby(['midi_note', 'frequency'])['n_bells'].sum().to_frame('n_bells')\n",
" .reset_index('frequency').sort_values(by='frequency', ascending=False))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"missed: ['h⁰', 'aa+3', 'h0/c1']\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" frequency | \n",
" n_bells | \n",
"
\n",
" \n",
" | midi_note | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | C5 | \n",
" 523.251 | \n",
" 1 | \n",
"
\n",
" \n",
" | G4 | \n",
" 391.995 | \n",
" 1 | \n",
"
\n",
" \n",
" | F4 | \n",
" 349.228 | \n",
" 1 | \n",
"
\n",
" \n",
" | E4 | \n",
" 329.628 | \n",
" 1 | \n",
"
\n",
" \n",
" | D#4 | \n",
" 311.127 | \n",
" 4 | \n",
"
\n",
" \n",
" | D4 | \n",
" 293.665 | \n",
" 3 | \n",
"
\n",
" \n",
" | C#4 | \n",
" 277.183 | \n",
" 5 | \n",
"
\n",
" \n",
" | C4 | \n",
" 261.626 | \n",
" 8 | \n",
"
\n",
" \n",
" | B3 | \n",
" 246.942 | \n",
" 35 | \n",
"
\n",
" \n",
" | A#3 | \n",
" 233.082 | \n",
" 2 | \n",
"
\n",
" \n",
" | A3 | \n",
" 220.000 | \n",
" 196 | \n",
"
\n",
" \n",
" | G#3 | \n",
" 207.652 | \n",
" 107 | \n",
"
\n",
" \n",
" | G3 | \n",
" 195.998 | \n",
" 59 | \n",
"
\n",
" \n",
" | F#3 | \n",
" 184.997 | \n",
" 22 | \n",
"
\n",
" \n",
" | F3 | \n",
" 174.614 | \n",
" 11 | \n",
"
\n",
" \n",
" | E3 | \n",
" 164.814 | \n",
" 11 | \n",
"
\n",
" \n",
" | D#3 | \n",
" 155.563 | \n",
" 3 | \n",
"
\n",
" \n",
" | D3 | \n",
" 146.832 | \n",
" 1 | \n",
"
\n",
" \n",
" | C#3 | \n",
" 138.591 | \n",
" 1 | \n",
"
\n",
" \n",
" | C3 | \n",
" 130.813 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" frequency n_bells\n",
"midi_note \n",
"C5 523.251 1\n",
"G4 391.995 1\n",
"F4 349.228 1\n",
"E4 329.628 1\n",
"D#4 311.127 4\n",
"D4 293.665 3\n",
"C#4 277.183 5\n",
"C4 261.626 8\n",
"B3 246.942 35\n",
"A#3 233.082 2\n",
"A3 220.000 196\n",
"G#3 207.652 107\n",
"G3 195.998 59\n",
"F#3 184.997 22\n",
"F3 174.614 11\n",
"E3 164.814 11\n",
"D#3 155.563 3\n",
"D3 146.832 1\n",
"C#3 138.591 1\n",
"C3 130.813 1"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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m/qpIpaRD3XIlzLyoQ75UkY+1CFfysiHOuRTGVCEBTqrEoQQQhQUSqInhBDChwSDEEIIHxIMQgghfEgwCCGE8CHBIIQQwocEgxBCCB/lIleSEJnw0UcfmZdeesnUrl3bXHDBBTYdizenzHXXXWdTvYdBrM2CBQvsXyB1C/uIpErhkqt6RMXOnTvNm2++ab7++mtz0EEHmdNOO82mqckEvN3JXJDp52HHjh1mjz32yPjzIgfECpi1a9fGvvrqq0jK2rFjR2RllZRdu3bFdu7cmVUZl156qc1smw233XZb7Ntvvw29btGiRbEoWLduXWzmzJmxjRs3xn/Pu+66KzZixIjYxx9/HPjZ119/PValSpVYixYtYo0aNYrtu+++sVmzZsXPU1ZxcXFgGVu3bo316dMnVqlSpVjlypVjderUsQf/895vfvOb2A8//JDzesArr7wS69evn81CvGTJEt+5DRs2xE477bSUnx0wYEDspZdesv+TVbNZs2a2/nXr1rV/jzrqqNjq1atD2/8f//jH2CmnnBIbOnSofW/kyJGxPffc097fb3/729i2bdsCy5gyZYrvmjFjxthnwv3zXIYPHx76HNJpf+mQ2J8WLFgQmzdvXuznn3/OuEx+yzVr1mT8+e3bt8e++OKLeHvPlmXLlgW2iyAKQjBs3rzZdmAamWugV111VayoqMg2Ohrzpk2bsvqODz/8MK0OPHbs2FiHDh1ivXr1iv3973/frVEfcsghOe18H330UdJjjz32iD333HPx10HwrBIPGitl0IHce6nguR966KGxP//5zxkLozfffDO211572bLq1atnn/+BBx4Ya9q0aezwww+PVa1a1Q66qWjXrl3sv//7v+OCFYGy9957x1577bW0B2QGYr5v+vTpvoGE//nuww47LHb55ZcHlhFFPSZPnmwH8G7dusXat28fq1atWuyJJ56Inw8rAwHwySef2P8vuOCCWMeOHeMD7Pfffx8766yzYueff35gHW655RZbzqBBg2JHHHFE7A9/+EOsYcOGth6PPfZY7IADDrD3FgR1RNjDo48+au+Ddo7Qu+OOO+zv/b//+7+hZZx++un2mWQyiK9cuTLWunVr+zw7d+5s2zHPg3bG0bhx49jSpUsDy+CZ9ezZ094/z4H2QFtx4w2/+TfffBNYBs/qxx9/tP/z+f/6r/+yfZzPM/G4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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"frequency_stats(de[DE['note_col']])"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" frequency | \n",
" n_bells | \n",
"
\n",
" \n",
" | midi_note | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | B3 | \n",
" 246.942 | \n",
" 1 | \n",
"
\n",
" \n",
" | G#3 | \n",
" 207.652 | \n",
" 44 | \n",
"
\n",
" \n",
" | G3 | \n",
" 195.998 | \n",
" 18 | \n",
"
\n",
" \n",
" | F#3 | \n",
" 184.997 | \n",
" 10 | \n",
"
\n",
" \n",
" | F3 | \n",
" 174.614 | \n",
" 4 | \n",
"
\n",
" \n",
" | E3 | \n",
" 164.814 | \n",
" 2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" frequency n_bells\n",
"midi_note \n",
"B3 246.942 1\n",
"G#3 207.652 44\n",
"G3 195.998 18\n",
"F#3 184.997 10\n",
"F3 174.614 4\n",
"E3 164.814 2"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"frequency_stats(ch[CH['note_col']])"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"missed: ['h⁰', 'aa+3', 'h0/c1']\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" frequency | \n",
" n_bells | \n",
"
\n",
" \n",
" | midi_note | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | C5-6/16 | \n",
" 512.039 | \n",
" 1 | \n",
"
\n",
" \n",
" | G4 | \n",
" 391.995 | \n",
" 1 | \n",
"
\n",
" \n",
" | F4+7/16 | \n",
" 358.166 | \n",
" 1 | \n",
"
\n",
" \n",
" | E4+3/16 | \n",
" 333.217 | \n",
" 1 | \n",
"
\n",
" \n",
" | D#4+5/16 | \n",
" 316.794 | \n",
" 1 | \n",
"
\n",
" \n",
" | D#4 | \n",
" 311.127 | \n",
" 1 | \n",
"
\n",
" \n",
" | D#4-1/16 | \n",
" 310.006 | \n",
" 1 | \n",
"
\n",
" \n",
" | D#4-2/16 | \n",
" 308.889 | \n",
" 1 | \n",
"
\n",
" \n",
" | D4 | \n",
" 293.665 | \n",
" 2 | \n",
"
\n",
" \n",
" | D4-1/16 | \n",
" 292.607 | \n",
" 1 | \n",
"
\n",
" \n",
" | C#4+6/16 | \n",
" 283.252 | \n",
" 1 | \n",
"
\n",
" \n",
" | C#4+4/16 | \n",
" 281.214 | \n",
" 1 | \n",
"
\n",
" \n",
" | C#4+2/16 | \n",
" 279.191 | \n",
" 1 | \n",
"
\n",
" \n",
" | C#4-2/16 | \n",
" 275.189 | \n",
" 1 | \n",
"
\n",
" \n",
" | C#4-4/16 | \n",
" 273.209 | \n",
" 1 | \n",
"
\n",
" \n",
" | C4+7/16 | \n",
" 268.321 | \n",
" 1 | \n",
"
\n",
" \n",
" | C4+4/16 | \n",
" 265.431 | \n",
" 1 | \n",
"
\n",
" \n",
" | C4+2/16 | \n",
" 263.521 | \n",
" 1 | \n",
"
\n",
" \n",
" | C4 | \n",
" 261.626 | \n",
" 3 | \n",
"
\n",
" \n",
" | C4-4/16 | \n",
" 257.875 | \n",
" 1 | \n",
"
\n",
" \n",
" | C4-7/16 | \n",
" 255.097 | \n",
" 1 | \n",
"
\n",
" \n",
" | B3+8/16 | \n",
" 254.178 | \n",
" 1 | \n",
"
\n",
" \n",
" | B3+7/16 | \n",
" 253.262 | \n",
" 1 | \n",
"
\n",
" \n",
" | B3+5/16 | \n",
" 251.440 | \n",
" 3 | \n",
"
\n",
" \n",
" | B3+4/16 | \n",
" 250.533 | \n",
" 1 | \n",
"
\n",
" \n",
" | B3+3/16 | \n",
" 249.631 | \n",
" 2 | \n",
"
\n",
" \n",
" | B3+1/16 | \n",
" 247.835 | \n",
" 1 | \n",
"
\n",
" \n",
" | B3 | \n",
" 246.942 | \n",
" 17 | \n",
"
\n",
" \n",
" | B3-2/16 | \n",
" 245.165 | \n",
" 2 | \n",
"
\n",
" \n",
" | B3-4/16 | \n",
" 243.401 | \n",
" 3 | \n",
"
\n",
" \n",
" | B3-5/16 | \n",
" 242.524 | \n",
" 2 | \n",
"
\n",
" \n",
" | B3-6/16 | \n",
" 241.650 | \n",
" 1 | \n",
"
\n",
" \n",
" | B3-7/16 | \n",
" 240.779 | \n",
" 1 | \n",
"
\n",
" \n",
" | A#3+5/16 | \n",
" 237.327 | \n",
" 2 | \n",
"
\n",
" \n",
" | A3+8/16 | \n",
" 226.446 | \n",
" 1 | \n",
"
\n",
" \n",
" | A3+7/16 | \n",
" 225.630 | \n",
" 2 | \n",
"
\n",
" \n",
" | A3+6/16 | \n",
" 224.817 | \n",
" 2 | \n",
"
\n",
" \n",
" | A3+5/16 | \n",
" 224.007 | \n",
" 3 | \n",
"
\n",
" \n",
" | A3+4/16 | \n",
" 223.200 | \n",
" 2 | \n",
"
\n",
" \n",
" | A3+3/16 | \n",
" 222.396 | \n",
" 4 | \n",
"
\n",
" \n",
" | A3+2/16 | \n",
" 221.594 | \n",
" 4 | \n",
"
\n",
" \n",
" | A3+1/16 | \n",
" 220.796 | \n",
" 4 | \n",
"
\n",
" \n",
" | A3 | \n",
" 220.000 | \n",
" 160 | \n",
"
\n",
" \n",
" | A3-1/16 | \n",
" 219.207 | \n",
" 2 | \n",
"
\n",
" \n",
" | A3-2/16 | \n",
" 218.417 | \n",
" 3 | \n",
"
\n",
" \n",
" | A3-3/16 | \n",
" 217.630 | \n",
" 1 | \n",
"
\n",
" \n",
" | A3-4/16 | \n",
" 216.846 | \n",
" 3 | \n",
"
\n",
" \n",
" | A3-5/16 | \n",
" 216.064 | \n",
" 2 | \n",
"
\n",
" \n",
" | A3-6/16 | \n",
" 215.286 | \n",
" 2 | \n",
"
\n",
" \n",
" | A3-7/16 | \n",
" 214.510 | \n",
" 1 | \n",
"
\n",
" \n",
" | G#3+8/16 | \n",
" 213.737 | \n",
" 3 | \n",
"
\n",
" \n",
" | G#3+7/16 | \n",
" 212.967 | \n",
" 1 | \n",
"
\n",
" \n",
" | G#3+6/16 | \n",
" 212.199 | \n",
" 2 | \n",
"
\n",
" \n",
" | G#3+5/16 | \n",
" 211.435 | \n",
" 4 | \n",
"
\n",
" \n",
" | G#3+4/16 | \n",
" 210.673 | \n",
" 3 | \n",
"
\n",
" \n",
" | G#3+3/16 | \n",
" 209.914 | \n",
" 2 | \n",
"
\n",
" \n",
" | G#3+2/16 | \n",
" 209.157 | \n",
" 3 | \n",
"
\n",
" \n",
" | G#3+1/16 | \n",
" 208.403 | \n",
" 2 | \n",
"
\n",
" \n",
" | G#3 | \n",
" 207.652 | \n",
" 62 | \n",
"
\n",
" \n",
" | G#3-1/16 | \n",
" 206.904 | \n",
" 4 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" frequency n_bells\n",
"midi_note \n",
"C5-6/16 512.039 1\n",
"G4 391.995 1\n",
"F4+7/16 358.166 1\n",
"E4+3/16 333.217 1\n",
"D#4+5/16 316.794 1\n",
"D#4 311.127 1\n",
"D#4-1/16 310.006 1\n",
"D#4-2/16 308.889 1\n",
"D4 293.665 2\n",
"D4-1/16 292.607 1\n",
"C#4+6/16 283.252 1\n",
"C#4+4/16 281.214 1\n",
"C#4+2/16 279.191 1\n",
"C#4-2/16 275.189 1\n",
"C#4-4/16 273.209 1\n",
"C4+7/16 268.321 1\n",
"C4+4/16 265.431 1\n",
"C4+2/16 263.521 1\n",
"C4 261.626 3\n",
"C4-4/16 257.875 1\n",
"C4-7/16 255.097 1\n",
"B3+8/16 254.178 1\n",
"B3+7/16 253.262 1\n",
"B3+5/16 251.440 3\n",
"B3+4/16 250.533 1\n",
"B3+3/16 249.631 2\n",
"B3+1/16 247.835 1\n",
"B3 246.942 17\n",
"B3-2/16 245.165 2\n",
"B3-4/16 243.401 3\n",
"B3-5/16 242.524 2\n",
"B3-6/16 241.650 1\n",
"B3-7/16 240.779 1\n",
"A#3+5/16 237.327 2\n",
"A3+8/16 226.446 1\n",
"A3+7/16 225.630 2\n",
"A3+6/16 224.817 2\n",
"A3+5/16 224.007 3\n",
"A3+4/16 223.200 2\n",
"A3+3/16 222.396 4\n",
"A3+2/16 221.594 4\n",
"A3+1/16 220.796 4\n",
"A3 220.000 160\n",
"A3-1/16 219.207 2\n",
"A3-2/16 218.417 3\n",
"A3-3/16 217.630 1\n",
"A3-4/16 216.846 3\n",
"A3-5/16 216.064 2\n",
"A3-6/16 215.286 2\n",
"A3-7/16 214.510 1\n",
"G#3+8/16 213.737 3\n",
"G#3+7/16 212.967 1\n",
"G#3+6/16 212.199 2\n",
"G#3+5/16 211.435 4\n",
"G#3+4/16 210.673 3\n",
"G#3+3/16 209.914 2\n",
"G#3+2/16 209.157 3\n",
"G#3+1/16 208.403 2\n",
"G#3 207.652 62\n",
"G#3-1/16 206.904 4"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"frequency_stats(de[DE['note_col']], include_deltas=True, plot='area').head(60)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" frequency | \n",
" n_bells | \n",
"
\n",
" \n",
" | midi_note | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | B3 | \n",
" 246.942 | \n",
" 1 | \n",
"
\n",
" \n",
" | G#3 | \n",
" 207.652 | \n",
" 44 | \n",
"
\n",
" \n",
" | G3 | \n",
" 195.998 | \n",
" 17 | \n",
"
\n",
" \n",
" | G3-5/16 | \n",
" 192.492 | \n",
" 1 | \n",
"
\n",
" \n",
" | F#3 | \n",
" 184.997 | \n",
" 10 | \n",
"
\n",
" \n",
" | F3 | \n",
" 174.614 | \n",
" 4 | \n",
"
\n",
" \n",
" | E3+3/16 | \n",
" 166.608 | \n",
" 1 | \n",
"
\n",
" \n",
" | E3 | \n",
" 164.814 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" frequency n_bells\n",
"midi_note \n",
"B3 246.942 1\n",
"G#3 207.652 44\n",
"G3 195.998 17\n",
"G3-5/16 192.492 1\n",
"F#3 184.997 10\n",
"F3 174.614 4\n",
"E3+3/16 166.608 1\n",
"E3 164.814 1"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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C9ObvwwZMsiDgA+Vmz9YNraTx9PNvPD+9EIbH0Q7IyIinJncTZkypZQuXVqWLFkSrxeP76OiogL944iI6C49kKEeDN20aNFCnnjiCSlTpowMGzZMzp8/r6t8iIgoBAN/kyZN5MSJE/Luu+/K0aNHpVSpUrJgwQKJjIwUJ2AoCXsKEg4puQ3byePpZl54f3qhjW5oZxLM8Dryk4mIyBFM0kZEZBgGfiIiwzDwExEZhoGfiMgwDPxERIZh4CciMgwDPxF51tatW6V///4yZswYOXny5A25r1q3bu1Y29zMqMCPncOHDx8WN0FxmqVLl/rSUSOn0eDBg2XgwIGybds2cbP333//hg+bU5AKnMx6by5atEgzA0ydOlUGDRokRYoUkZ9++sn3+D///COTJ08WN5g3b560bdtWevXqJX/88Ue8x06fPi2VK1cOboOsELR169ZEbylSpLBmzpzp+95pP/30k5UmTRorSZIkVrZs2awtW7ZYuXLlsgoVKmQVLlzYCgsLsxYuXOh0M63Y2NgbbmfOnNHjuXbtWt99TsIxLFCggPXhhx9qanA3Gz16tFWlShWrUaNG1o8//hjvsRMnTlj58+e3nOaF92ZUVJT11ltv6dfXr1+3Bg0aZKVNm9aaP3++3nf06FEradKkltO+/vprK1myZFbt2rWtChUqWOHh4dZ///tf3+NOtDMkAz/erDiQ+Dfhzb7fDW8IvAk6dOhgxcXFWUOGDLFy5syp39t69OhhlS9f3nIajlViNzcdT7ShXbt2VtasWa3kyZPrhwwn+atXr1puMnz4cCt16tT6d37llVeslClTWv/5z398j7slWHnhvZk+fXpr9+7dNwRZnLDmzJnjmmNZqlQp/bvbpk2bpm384osv9HsG/gApWbKkfvB37Nhh7du3T2979+7VgLB48WLffU7zf+NeuXJF27d582bf43/++acVERFhOQ0fehzPpUuXWsuWLdMbeoToxUycONF3n9OB/9ixY3ocv/vuO+vZZ5/V9kVGRlq9evWydu7cablBsWLFNDjZVq1aZWXJksXq06ePfu+WYOWF9yaO24YNG264/5tvvtGT69ixY11xLNOkSWP99ddf8e7DZwlXJ2gjA3+AXLp0yerSpYt+yDZt2uS7H2/e3377zXKLzJkzW9u3b9evz58/r2/SNWvW+B7HcBSe47S///7bqlevnvXMM89YBw8edOXxtAO/P7S1X79+1sMPP6zH9t///rfltFSpUmknxN+2bdv0BPXmm2+6JvB74b1ZrVo1vRpJzJQpU3Qo0g3HMnv27PGOnQ2dJQT/t99+m0M9gTRv3jwdl8Sl9LVr11wVqKBu3brWc889Z/38889W+/btrSeeeEJ71ufOndMPW8OGDa2aNWtabjFmzBgrR44c+qECNx1PfMATBn5/GEt/6aWXLKflzp3bWrFixQ334zgi+Ddv3twVwcoL780ZM2ZYXbt2venjuLKqVKmS5YZj+e67795yLoVj/AGGHlStWrW0t+emQGVfLmOyDL3VokWLag+1Tp062k7ccCm7ceNGy01w/DCU9uKLL7q+x+9GOG43C1boYeNv7obA78X3plstW7Ys3jxOQhj2admyZVDbZExa5hEjRuhSr5EjR0quXLnETf7++2+tMWxDtTIsRUPFMv/73eLy5cvy5ptv6vGcMWOG5M+f3+kmyfLly+Wpp56S5MkdLyN9S7/++qsuPb1ZUaLt27fL999/r7na3cBr7024cuWKpEiRwulmuJoxgZ+IQsu3334r9erV03KvMGrUKBkyZIgcPHhQHnroIencubMWg3KrVq1ayYcffnhHxdEDzcjAjw0Tc+bMkebNm7ui9zxr1ixZs2aNVisDFKUvX7681K1b1/emdjOU1UQvtmLFik43RTcc/fzzz3LkyBFJmjSpPPzww1KnTh0pVKiQuMlff/11QzurVavmugLhbj6eyZIl03ZlzZpVJk6cKG+88YZukCpbtqxs3rxZBgwYoGVfsXHK6au8xKA0LU5eOKZQokQJCRrLQNiM4oZx1F27dumKE2zoePrpp63GjRvrDV/jvoIFC+pz3M4NxxPj+2XKlNF2YAwa/5YuXVo3H2FZZ8+ePS03wOQoJkb995XYbcQKj1GjRllu4IXj6T+vg7YOHjz4hsUIjz32mOW0JC7cV+TuAdF7hBwdtxIXFydu8Prrr8ujjz6qvZOEPT38Drgi6dChgyxcuNCxNnoFLutxyYyrOdQx7dGjhx7DDRs2aK+1cePGkjNnTunSpYuj7ezevbv2UtELDA8Pl+joaO3xYUwfqQc6deqkwxQvvfSSo+30yvFMkiSJ7wqqevXq8R7D97179xanlShRQucVP/roI0mVKpXeh4EWXDXNnz/fmaunoJ5mgsQ+g95ux6kb1nRjDffN/Prrr/ocpz300EO3vGGzj9PHE22w153bPWus47ZTSXz11VeaasBpWPvuv+no1KlTenWHJZKAHj92ejrNC8cTn+Mvv/zSmj17ti7bXr16dbzH0X78Hk675MJ9RSHZ40+XLp28/fbbOtaXmF27dsmrr74qTsuQIYPs27dPihcvnujjeAzPcdqlS5d8VyeJ2b9/vyZscxJ6pXbvDzAefe3aNbl69ap+jzkTHE+noT3+V3dp06bV+zBPkjp1au2lonftNK8czxYtWvi+xpUIVhvZfvnlFylQoIA4LWXKlDrXgN495kcwF+H0lUhIBv7HH39c/3366acTfRzB1A1z2ph0wnBOnz59pEqVKhIZGenLgohlc0g3i0t/p5UqVUpy584d70OWMDWu04G/QoUKuoID2RjxQXvrrbd0CCVjxoz6+IkTJ3QIxWlPPvmkDB8+XFegAL7OkiWL3uDcuXN6MnCaF47n9evXb/k4Pk+Y4HWLWrVq6VAZVvPgJOCkkAz8GB/FWuObwaoZN6yT7tevn6RJk0aXoP3f//2fr4eFkxLaiF4BVik4rXbt2nLmzJmbPo5g4PQKKYyforeMkzqOI47r9OnTfY/v2LFDWrZsKU5DSmOs3sFafQRUrOTyTx28evVqefbZZ8VpXjmet/Lcc8+J20RGRmqKZuwrwj4Ip1ZxGbmc04327t0bbzmnGzZFec2FCxd06SGWyJYrV04yZ84sboTJ3blz5+oQGvKwFytWTNzIK8fThs4JTk4HDhyQvHnzSqNGjSQiIsLpZrkSAz8ReVL9+vX16r5hw4by22+/SaVKlfTqBENSmH/A1xj3L1q0qLhxT0SBAgXk+eefd2RVT8gGfvSo1q1bJzVq1NCt/DjouHzFuCDeMO3bt3e6ibJp0yYdJ7V791999ZWMGzfO12Pp2LGjNG3a1Olmas8Ub1R7G/yePXtkwoQJvna2adPGFVcoGN775ptvbthwhN2dmENxM7QTy3bdsDHKK8cTQ4wYGkPlLQyP4bOEjVwYQkPaBixIiImJcXw59PHjxzXAY3wfxxAx6LHHHpNDhw7pXAmW+KKyWVBZIWjcuHG6VAobTrCcC0vP0qVLZ7Vt29Z69dVXdYnksGHDnG6mVaJECa0PAJ9//rm2q3PnzpqjG4m8sKFn/PjxTjdTN5RNnz5dv0a2RlRfQtubNGmiG2SQ+zzhUrpgw0a3vHnzaiEWZMDEUj9kkyxbtqxuOEK1K+SVdxoKciR2Qxujo6N93zvNC8cTnxe7ZgBSH/svlQTUYHC6ZgDgc4K05lgKe/HiRatjx46ahRWWLFliZcqUKejxKCQDP9bLfvbZZ77Md1gnjXJ3NhQPQcZBp+GNaxeEQQC12+yfVha/i9Nw8kS2Rvsk0K1bt3iPv/POO9ZTTz1lOQkZWHFSRwk+GDhwoN4HaHu+fPmsvn37Wk5DAMWac7TH/4b7UfAGX7uh9KIXjidOQvZnBp8fVFzzt2jRIt1p7LT0LtwTEZKBHwF1//79vu9xkP03SqEQBnqpTsOZ3t7Mg54VUh/4Q2/GDRu4kC8c1cwAOeMTayeuTpyEv6d9crI3zeDvfvLkSf1+1qxZGqychmCKDVq///57vPvdlOLaK8dz7ty5VsaMGbUjhxvag3KGqGo2YcIEvVJxQ2qJLFmyxPvbXrhwQTc8osAR7NmzR6+igymphCAsk8KmIjh8+LBuOsF4tA2P2euRnV7XO3bsWN+eg++++y7e40jgVLBgQXEaNsIhqR1gQgrr9v1t2bLF8eOJZYf+qTiwIgV/dzvJHbbNY5zaaZjDwfp4zD3Za/ndyAvHE8uMP/vsM90Hg3kmfK7btWunexCwSapBgwauWMdf4f/vicAmPcw9uGJPhBWCUBQaRST69++vyZtatGhhFSlSxJo/f761YMEC69FHH7Vat27tdDOtQ4cOaS+lYsWKVvfu3bV3jyLXKBqO+1CI+4cffnC6mTp+j7FSXNqPHDlS0w5geAdDUagslCFDBmvQoEGOthF/YwxD4coE9U3t+Qf/YhjoAboFCptUrlxZq1gdOXLEdT1+Lx3Pq1evWuvWrbOmTp2q1eFQ1ers2bOWW+zZs8cqUKCA/o1x1YTPiz23B7haQdnNYArJwI8xNATP4sWLa9k4XKaiNicCKcZSUY7NLdWaTp8+bfXu3VvH8jEXgTZiUg1lAtevX2+5BYJ/uXLlbsguiHFpN0yU4+9ptw+X0TiG/pN9mJweMWKE5SYYP0dlJjvjpZsCvxePp5udP39e5xzmzJljnThxwunmmFOBCy5evKiXWsjlQ/cGl6XIhIgladmzZ5d8+fK56lAiDxOWn2KJn9urcdlQywBLJrH72ek0CKFwPG0YisLnPU+ePE43xXWMCvxEZA5s3Przzz81uZybbdiwQedQglnIyMjAP3v2bImNjXU8v8ztjBkzRk6ePOnq8nFOvXFD9W/OdgbO+vXr9X15s2SNJp+gjAz8uGzFJazbewLYHYkcPhhacTMv9Ky88jdnO81z+PBhHZLCLvhgMTLwk/ffuES4GnZ74ji3YuAnIk9CsXUkZsMafqzZR/EYL7h69ar89NNPvlxXzzzzjP4uwRSSG7huBilw7Y1dboDVEugp25D8DJXDmjVrJu+8844O87gZCkqgt+9mbvub366ICO7332zoJng/Ll68WLZv3y5ugMEKbCjD+xArzFC0CJsJ3aZTp06aNBIOHjyoleyweROf9Zo1a/oStgVTSPb4//e//yV6P7JyouIRqkkByqA5Cb0VZOBEWtlVq1bpmH7hwoV9Y+Y7d+6UH3/8MV45OSegMHhinnjiCd1djF2I9m5Op3jlb46C5ai8hp3QKMKBEqAoCmT3+FB9DUXOnZ6LwM5XZIxENTBk6URnZObMmRpske4YE6Y45k5WC0OmS9SwwL8oZoOMsX/88YdWjMMxfvnllx0rdOIP9TXwOUaJ1SZNmsipU6c06ymGqfA1KtuFh4fHK3TzwFkhyN50knCzkf/N6eLgXkl+drvj6Zbi9V75myP76r/+9S/dAIWMrNgYhayX2GQIR48e1bY6DcfK3uSIrKFILIeEh9iIhAyt2Ika7N2mCeE4JdyIiY2G2JWPbLzIN9SsWTPLaeHh4br7GXAc165dG+9x5BHDbvhgCsnAj23w+DAlfFO4bVu8F5KfQcmSJfV4oq3IJoobEt3heGLruX2fk7zyN8+TJ4+mFLBhFyfSilSvXl1T9iLwu+EE5R9UsQMeqRD8zZ49W09gbjk5JbZ7HwnbypcvbzmtRIkSmk4CkBXYP12DfbJCsrlgCskxfhQyxrAJhiLssTU38kLyM0BBGySLwwQaLk0xIWXv2MWwBL53ekWPV/7m2Pnsf6xwuY9hACREQzERrDt3C7sGNIZTEg7jlSxZUoucOOlWo9SoEYxJXwyhOq1bt27So0cPWbZsmURHR0vnzp1lyZIlOj+GSV4M92FIMqisELZ582bNgYN8PbhEdVvvzwvJz/zNmzdPL1WRX+batWuuO55e+Jsj73piiffi4uKsqKgovbpyS48fKaQx/IiU4cgz42/jxo1BH55IaNKkSXqV5AUff/yxDj0hESPyceFvbN9QpAV//2AKycldf5iYwhkXpRexEQoTlW4qbr1mzRotvbZ27dp496Mn3bNnT+nSpYu4CSYfsYri3Llz2nZcpbjpeLr9b47eHnLIJDaRh15/tWrVdMep05O7dv1aGyZKMWFq69+/v16poBdLd14MHqui/HNdoSwsa+4+QFiBgMsqXGplzZpV3Mbtyc8SGjFihB7PkSNHSq5cucSN3Pg3P336tF7iP/LII4k+juCPWsxuTzOA9yqWUrrhb4+hSHRCMCRlr6LBSrgyZco43TTXCvkePxGFJhQxx7wTxvGRgTMyMtJ3VYq9EOhNf//996456Se2xwTF4Z2YH/NWntU7hE0SWBdrb+deuXKlVj6yd8p16NDB8bXxXmrnxx9/rHsNnJ7AvR1M6qL3h+pW+NBjqOejjz7SqyhMnrVv317cMhSFddxIxYxhH6xDx16IevXq6QS1W7i9ndhrgCGxHTt26P4Xf9gD07p1a/0MBXV9/F3sMVmxYoW+Zx3ZY2KFICyPQ8EDuzYoJlDq1KmjBU9eeOEFrYJjP8523tlEHwqFVK1aVZel2WvO3WTcuHE6kVu6dGndH4EC1ljL3bZtW52kxKSaGwrG7Nq1S9fuY8IUFaxwbLEMFYXDcYwbNWpkXblyxelmeqKdWOrsXxwmIdSzdsNy6CQu3GMSkoEf6+PtDRN4ow4cODDe41hB419GzileaSfemCgPV7duXT1pokh8ly5d4hWwdxpW8nz22Wf6NTYaYdPM6NGjfY+j/VhD7bRatWrpiQjVtwB/c9wH2MyHUpxY5eU0L7QT70OUgLwZ7JfAc5xW04V7TEIy8GOJ5NatW/Vr9Fjsr/03RmFpldO80k7/zTz4F0tMUcMYvZQnn3xSA67TNU7Ro9+/f7/ve5yg/E9M2HDmhmOJNti7tQFXT2jryZMnfVeoCKpO80I733jjDb0qmTFjhhUbG+u7H1/jPrSvY8eOlht88skneuXkP9LgZOAPyQ1cWBGBsUlAAqSES86w0iNnzpziNK+00x8mynr16qXjqmgvlkli6SRWIjkpU6ZMvmRsWDWDDIj+yc7wmBs2w2XIkEFX7tiwYQttxQoZwEYpjKc7zQvt/OSTTzTZWdOmTbVkZapUqfSGr3EfHsMcjxt069ZNx/p79+6tG7Yc36hnhaDff/9dL/GaN29uffDBBzrO98orr1gffvih3hcWFqaX/k7zSjtvtTXe7mHZwyxO6dChg1WoUCGrf//+OsfTokULvSqZP3++tWDBAuvRRx/VHC5OQ7uQlwnpLzDM16RJk3jDeRi6QM/QaV5pp/3+w/Ae0krghq/9rwDc5MKFCzqEhvcq5ko41BNgGCZp2rSpTvDZEyi4VEXujpkzZ1pu4YV2JpYMy22Qm6Vdu3aaVwa7djE0MWTIEN0lifZXqlTJFb8D2lCuXDnfhB6GKvwnKJG8bcSIEZbTvNJOr5o9e7bVtWtXx96TIb+OH78e1vtiSR+WTaZIkULcyCvt9JqLFy9qzYN06dKJm6AMJOoxoNRi8uTuXVXt9nZiyenGjRt1GC/h7mz87ZE23O11lh1hGejAgQNWq1atLLdjO3ks3coN782dO3fqlYh9VVKxYkXr0KFDvsfdkunUHuJZuXJlokM7//zzjzV58mQrmIwM/Eh/7JY3xK2wnTyWbuWG9yaSm2GZJFJbY98Bvs6fP79vdZdbAv/ORE5Qhw8f9j3uRDvdd+32AHfK+ecZcQO2k8cyIb4379zq1as1URyGRnFDinPs5v33v/+tK+KQmtkNevfurdW3NmzYoInaunbtqjvLsSoOqSacEJJj/NhajsyCt/rV8LjTGRDZTh7LxPC9eWdQVhFZbVGq1B/Kmc6ePVumTJmiWUad/pxHRkbqCQq1dgFxCSeoefPm+U5QwS63GZLr+LGmfMaMGTpRmtgN2Q/dgO3kseR7895hwhm96IRGjRoldevWdby+sv8EtP/EOE7sY8eOleeff1738qC+drCFZOAvXbq0zvTfzO2uBoKF7eSxTIjvzTv3wgsv+DZAJhb8X3zxRVd8zou48QRlhaAVK1boxp1brfm+VY6PYGE7eSwT4nsz9KBinZ3nKDGvv/66TvwGU0iO8RMRkWFDPUREdHMM/EREhmHgJyIyDAM/EZFhGPjJM7AOAXVzkZALyx63bNnidJOIPImresgz5s+fr+uesdUdRb+xTd+NGSOJ3I6fGvKMPXv26G7n8uXLJ/r45cuXfRWiiOjmONRDntCyZUvp1KmTllPEME++fPk0DwvysiDpFXr/NWrU0Odu375dy+6lTZtW86Q0a9ZMTp486Xut8+fPa452PI4Tyccff6yvhdex4WfMmjXrhnKEkyZN8n0fExMjjRs31vsx/ISrkX379sVrc7169bT8H34OykN26NBB6wPYkOseSbxy584tYWFhUrBgQRk/frwOa+HrhKUDMbyFtu3evTvAR5hMwsBPnjB8+HDp16+f5MqVS2u9rl+/Xu+fPHmy9vJXrVol48aN0+yHlStX1hrG2Ca/YMECOXbsmAZoW8+ePWX58uWayGvRokU6dHS3+ZsQvHGiQYGXlStX6s/HiaRmzZp65WFDEi5cqeBftBUnDv+TB05ASDswYsQIrWP86aef6usguLdu3VomTpwY7+fi+4oVK+pJgeieBXWfMNF9GDp0qOY1t6EmrH8dWEDt4urVq8e7LyYmBrvTNS96XFyclmP89ttvfY///fffVqpUqawuXbr47sPzE5a+jIiI8NVA/uqrr6zChQtb169f9z2Oco94nYULF/rq1qK9V69e9T2nUaNGWr8W0B78nMWLFyf6+6KoCOqyrl27Vr+/fPmylTlzZmvSpEl3ddyIEuIYP3kaEt3527p1q/au0WtOCD1vZEpEj7xs2bK++zFMU7hw4bv6ufg5GG5JWNIR5f7wc2yPPPKIJEuWzPc9hny2bdvmG7bBY8jQmBik6q1du7ZMmDBBypQpo/nmMTTUqFGju2orUUIM/ORpCYttnDt3TtPdDho06IbnIuje6dh4Ylky/cfm8XNw0vn6669v+L9ZsmTxfZ2wdjJeF6mYIVWqVLdtR9u2bXWOYujQoTrM06RJE0mdOvUd/Q5EN8PATyHl8ccfl++//14nfxNb6lmgQAENxijgYVc/On36tOZE9+95I3hjLsG/6PiFCxfi/Zxp06ZJ1qxZtSDIvUBhDpwEMN9QtWrVRJ/z7LPP6skN+dsxX7FixYp7+llE/ji5SyEFq2ZOnTqludgxAYxhl4ULF0qrVq20whGGgNq0aaMTvEuXLtUVQFh9g2po/jBBjHzpmzdv1kni1157LV7v/eWXX9aVRFjJg8ndvXv36iRx586d5eDBg3fUVpycWrRooZO4WEFkv8a3337rew6GgtC+6OhoKVSokERFRQXwaJGpGPgppGBcHCtsEOSrV6+uvWos08SSSzu4DxkyROuyYkgIPe0KFSrcMFeAJZ5YYonnvfTSS9KjR494Qyz4Gr1vXDXUr19fy//hhIIx/ru5AkBPvmHDhlqKDwU72rVrp8tN/eF1MS+BkxdRIHDnLpGIruMvVaqUDBs2zHXHA1cUVapU0X0D2JdAdL84xk/kUljBc+LECXnvvfd0JQ+DPgUKh3qIXAobu/Lmzaub0gYPHux0cyiEcKiHiMgw7PETERmGgZ+IyDAM/EREhmHgJyIyDAM/EZFhGPiJiAzDwE9EZBgGfiIiMcv/A0Sy2H3cZhOeAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"frequency_stats(ch[CH['note_col']], include_deltas=True).head(40)"
]
}
],
"metadata": {
"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.14.0"
}
},
"nbformat": 4,
"nbformat_minor": 4
}