{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import re\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "pattern = r'^\\[(\\d{2}\\/\\d{2}\\/\\d{2}, \\d{1,2}:\\d{2}:\\d{2} [AP]M)\\] (.+)$'\n", "\n", "# Read the contents of the text document with the appropriate encoding\n", "with open('chats text\\mine.txt', 'r', encoding='utf-8') as file:\n", " lines = file.readlines()\n", "\n", "message = []\n", "timestamp = []\n", "\n", "for line in lines:\n", " line = line.strip() # Remove leading/trailing whitespace if necessary\n", " m = re.match(pattern, line)\n", " if m:\n", " timestamp.append(m.group(1))\n", " message.append(m.group(2))\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "df = pd.DataFrame({'user_messages': message, 'message_date': timestamp})\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "df['message_date'] = pd.to_datetime(timestamp, format='%d/%m/%y, %I:%M:%S %p')\n", "df.rename(columns={'message_date':'date'}, inplace=True)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
user_messagesdate
0MINE ❤️: ‎Messages and calls are end-to-end en...2023-01-27 16:14:02
1saqqu: Hie2023-01-27 16:14:02
2MINE ❤️: Call2023-01-27 17:10:13
3saqqu: 6 bje sweetheart abhi sb hai2023-01-27 17:10:31
4saqqu: bataye the na2023-01-27 17:10:33
\n", "
" ], "text/plain": [ " user_messages date\n", "0 MINE ❤️: ‎Messages and calls are end-to-end en... 2023-01-27 16:14:02\n", "1 saqqu: Hie 2023-01-27 16:14:02\n", "2 MINE ❤️: Call 2023-01-27 17:10:13\n", "3 saqqu: 6 bje sweetheart abhi sb hai 2023-01-27 17:10:31\n", "4 saqqu: bataye the na 2023-01-27 17:10:33" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(41246, 2)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "df[['user', 'message']] = df['user_messages'].str.split(': ', n=1, expand=True)\n", "df.drop('user_messages', axis=1, inplace=True)\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateusermessage
02023-01-27 16:14:02MINE ❤️‎Messages and calls are end-to-end encrypted. ...
12023-01-27 16:14:02saqquHie
22023-01-27 17:10:13MINE ❤️Call
32023-01-27 17:10:31saqqu6 bje sweetheart abhi sb hai
42023-01-27 17:10:33saqqubataye the na
\n", "
" ], "text/plain": [ " date user \n", "0 2023-01-27 16:14:02 MINE ❤️ \\\n", "1 2023-01-27 16:14:02 saqqu \n", "2 2023-01-27 17:10:13 MINE ❤️ \n", "3 2023-01-27 17:10:31 saqqu \n", "4 2023-01-27 17:10:33 saqqu \n", "\n", " message \n", "0 ‎Messages and calls are end-to-end encrypted. ... \n", "1 Hie \n", "2 Call \n", "3 6 bje sweetheart abhi sb hai \n", "4 bataye the na " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "df['year'] = df['date'].dt.year\n", "df['month'] = df['date'].dt.month_name()\n", "df['day'] = df['date'].dt.day\n", "df['hour'] = df['date'].dt.hour\n", "df['minute'] = df['date'].dt.minute" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateusermessageyearmonthdayhourminute
172702023-03-14 22:10:57MINE ❤️3 bje2023March142210
4112023-02-02 19:35:52saqqubaat toh bht karni hai babe2023February21935
325852023-04-16 19:47:48saqqushru shru me love log zyda express krte hai2023April161947
1142023-02-01 22:19:55saqquor jo saman khareed ne me paisa gaya tmhra woh...2023February12219
331122023-04-18 20:50:58saqqu😬2023April182050
54012023-02-13 00:40:20MINE ❤️Ooe2023February13040
130512023-03-07 23:54:48saqquhehehe2023March72354
86192023-02-23 00:26:14saqqusmile kr plz2023February23026
66362023-02-16 17:05:48MINE ❤️Accha2023February16175
400742023-06-06 15:06:15MINE ❤️Oye2023June6156
276942023-04-08 01:08:54MINE ❤️302023April818
151312023-03-09 18:09:27MINE ❤️Lo2023March9189
131102023-03-08 00:05:00saqqusojao😘😘2023March805
79062023-02-20 16:06:47MINE ❤️Ok2023February20166
261762023-04-05 00:00:52MINE ❤️Ok2023April500
\n", "
" ], "text/plain": [ " date user \n", "17270 2023-03-14 22:10:57 MINE ❤️ \\\n", "411 2023-02-02 19:35:52 saqqu \n", "32585 2023-04-16 19:47:48 saqqu \n", "114 2023-02-01 22:19:55 saqqu \n", "33112 2023-04-18 20:50:58 saqqu \n", "5401 2023-02-13 00:40:20 MINE ❤️ \n", "13051 2023-03-07 23:54:48 saqqu \n", "8619 2023-02-23 00:26:14 saqqu \n", "6636 2023-02-16 17:05:48 MINE ❤️ \n", "40074 2023-06-06 15:06:15 MINE ❤️ \n", "27694 2023-04-08 01:08:54 MINE ❤️ \n", "15131 2023-03-09 18:09:27 MINE ❤️ \n", "13110 2023-03-08 00:05:00 saqqu \n", "7906 2023-02-20 16:06:47 MINE ❤️ \n", "26176 2023-04-05 00:00:52 MINE ❤️ \n", "\n", " message year month day \n", "17270 3 bje 2023 March 14 \\\n", "411 baat toh bht karni hai babe 2023 February 2 \n", "32585 shru shru me love log zyda express krte hai 2023 April 16 \n", "114 or jo saman khareed ne me paisa gaya tmhra woh... 2023 February 1 \n", "33112 😬 2023 April 18 \n", "5401 Ooe 2023 February 13 \n", "13051 hehehe 2023 March 7 \n", "8619 smile kr plz 2023 February 23 \n", "6636 Accha 2023 February 16 \n", "40074 Oye 2023 June 6 \n", "27694 30 2023 April 8 \n", "15131 Lo 2023 March 9 \n", "13110 sojao😘😘 2023 March 8 \n", "7906 Ok 2023 February 20 \n", "26176 Ok 2023 April 5 \n", "\n", " hour minute \n", "17270 22 10 \n", "411 19 35 \n", "32585 19 47 \n", "114 22 19 \n", "33112 20 50 \n", "5401 0 40 \n", "13051 23 54 \n", "8619 0 26 \n", "6636 17 5 \n", "40074 15 6 \n", "27694 1 8 \n", "15131 18 9 \n", "13110 0 5 \n", "7906 16 6 \n", "26176 0 0 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sample(15)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "words = []\n", "for i in df['message']:\n", " words.extend(i.split())" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "105802" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(words)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateusermessageyearmonthdayhourminute
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [date, user, message, year, month, day, hour, minute]\n", "Index: []" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['message']== '']" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "from urlextract import URLExtract\n", "extractor = URLExtract()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "8" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "links = []\n", "\n", "for i in df['message']:\n", " links.extend(extractor.find_urls(i))\n", "len(links)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "x = df['user'].value_counts()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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/vprZWVlqbS0VD179lRubu4hByMDAICT0y+6Tk5Tx3VyAPdwnRwAx+q4XCcHAADgREXkAAAAk4gcAABgEpEDAABMInIAAIBJRA4AADCJyAEAACYROQAAwKRj+gOdAIDvceFP4Mjcvugne3IAAIBJRA4AADCJyAEAACYROQAAwCQiBwAAmETkAAAAk4gcAABgEpEDAABMInIAAIBJRA4AADCJyAEAACYROQAAwCQiBwAAmETkAAAAk4gcAABgEpEDAABMInIAAIBJRA4AADCJyAEAACYROQAAwCQiBwAAmETkAAAAk4gcAABgEpEDAABMInIAAIBJRA4AADCJyAEAACYROQAAwCQiBwAAmETkAAAAk4gcAABgEpEDAABMInIAAIBJRA4AADCJyAEAACYROQAAwCQiBwAAmETkAAAAk4gcAABgEpEDAABMInIAAIBJRA4AADCJyAEAACYROQAAwCQiBwAAmETkAAAAk4gcAABgEpEDAABMInIAAIBJRA4AADCJyAEAACYROQAAwCQiBwAAmETkAAAAk4gcAABgEpEDAABMInIAAIBJRA4AADCJyAEAACbVO3KWL1+uyy67THFxcfJ4PFqwYEHI9uuuu04ejyfkNmjQoJA1u3fv1siRI+Xz+RQVFaX09HRVVlaGrFm3bp369eunyMhIxcfHa8qUKYfM8uqrr6pz586KjIxUt27dtGTJkvq+HAAAYFS9I6eqqko9evTQjBkzjrhm0KBB+uqrr5zb3LlzQ7aPHDlSGzduVF5enhYtWqTly5dr7NixzvZAIKCBAweqffv2Kioq0iOPPKLJkyfrmWeecdasWLFCV199tdLT07V27VoNHTpUQ4cO1YYNG+r7kgAAgEHN6vuAwYMHa/DgwT+5JiIiQrGxsYfd9sknnyg3N1cffvihLrjgAknSk08+qSFDhujRRx9VXFycXnrpJdXU1Gj27NkKDw/Xeeedp+LiYj3++ONODE2bNk2DBg3SXXfdJUl66KGHlJeXp6eeekqzZs2q78sCAADGNMoxOe+++66io6PVqVMnjRs3Tt98842zrbCwUFFRUU7gSFJKSoq8Xq9WrVrlrOnfv7/Cw8OdNampqdq8ebO+/fZbZ01KSkrI901NTVVhYeER56qurlYgEAi5AQAAmxo8cgYNGqQXXnhB+fn5evjhh1VQUKDBgwfr4MGDkqTS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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "name = x.index\n", "count = x.values\n", "\n", "plt.bar(name,count)\n", "plt.xticks(rotation = 'vertical')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namemessages
0MINE ❤️53.78
1saqqu46.22
\n", "
" ], "text/plain": [ " name messages\n", "0 MINE ❤️ 53.78\n", "1 saqqu 46.22" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "round((df['user'].value_counts()/df.shape[0])*100,2).reset_index().rename(columns = {'user':'name','count':'messages'})" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "temp = df[df['message'] != 'group_notification']\n", "temp = temp[temp['message'] != '\\n']" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateusermessageyearmonthdayhourminute
02023-01-27 16:14:02MINE ❤️‎Messages and calls are end-to-end encrypted. ...2023January271614
12023-01-27 16:14:02saqquHie2023January271614
22023-01-27 17:10:13MINE ❤️Call2023January271710
32023-01-27 17:10:31saqqu6 bje sweetheart abhi sb hai2023January271710
42023-01-27 17:10:33saqqubataye the na2023January271710
...........................
412412023-06-08 02:10:28MINE ❤️Good night returns2023June8210
412422023-06-08 02:10:31MINE ❤️😂😂2023June8210
412432023-06-08 02:10:39saqqugoodnight finale😂2023June8210
412442023-06-08 02:11:12MINE ❤️Insta prr2023June8211
412452023-06-08 02:11:18MINE ❤️Message krna2023June8211
\n", "

41246 rows × 8 columns

\n", "
" ], "text/plain": [ " date user \n", "0 2023-01-27 16:14:02 MINE ❤️ \\\n", "1 2023-01-27 16:14:02 saqqu \n", "2 2023-01-27 17:10:13 MINE ❤️ \n", "3 2023-01-27 17:10:31 saqqu \n", "4 2023-01-27 17:10:33 saqqu \n", "... ... ... \n", "41241 2023-06-08 02:10:28 MINE ❤️ \n", "41242 2023-06-08 02:10:31 MINE ❤️ \n", "41243 2023-06-08 02:10:39 saqqu \n", "41244 2023-06-08 02:11:12 MINE ❤️ \n", "41245 2023-06-08 02:11:18 MINE ❤️ \n", "\n", " message year month day \n", "0 ‎Messages and calls are end-to-end encrypted. ... 2023 January 27 \\\n", "1 Hie 2023 January 27 \n", "2 Call 2023 January 27 \n", "3 6 bje sweetheart abhi sb hai 2023 January 27 \n", "4 bataye the na 2023 January 27 \n", "... ... ... ... ... \n", "41241 Good night returns 2023 June 8 \n", "41242 😂😂 2023 June 8 \n", "41243 goodnight finale😂 2023 June 8 \n", "41244 Insta prr 2023 June 8 \n", "41245 Message krna 2023 June 8 \n", "\n", " hour minute \n", "0 16 14 \n", "1 16 14 \n", "2 17 10 \n", "3 17 10 \n", "4 17 10 \n", "... ... ... \n", "41241 2 10 \n", "41242 2 10 \n", "41243 2 10 \n", "41244 2 11 \n", "41245 2 11 \n", "\n", "[41246 rows x 8 columns]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "f = open('stop_hinglish.txt','r')\n", "stop_words = f.read()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "words = []\n", "\n", "for i in temp['message']:\n", " for word in i.lower().split():\n", " if word not in stop_words: \n", " words.append(word)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
wordtimes
0😅637
1😅😅540
2😂😂521
3call401
4love358
5😘329
6suun293
\n", "
" ], "text/plain": [ " word times\n", "0 😅 637\n", "1 😅😅 540\n", "2 😂😂 521\n", "3 call 401\n", "4 love 358\n", "5 😘 329\n", "6 suun 293" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from collections import Counter\n", "\n", "pd.DataFrame(Counter(words).most_common(10)).rename(columns={0:'word',1:'times'}).head(7)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "import emoji" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "emojis = []\n", "for message in df['message']:\n", " emojis.extend([c for c in message if c in emoji.UNICODE_EMOJI['en']])" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
01
0😂4376
1😅3436
2😘1421
3🥺1201
4🤣769
5😔454
6454
7😁320
8288
9😒279
\n", "
" ], "text/plain": [ " 0 1\n", "0 😂 4376\n", "1 😅 3436\n", "2 😘 1421\n", "3 🥺 1201\n", "4 🤣 769\n", "5 😔 454\n", "6 ❤ 454\n", "7 😁 320\n", "8 ☺ 288\n", "9 😒 279" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(Counter(emojis).most_common(len(Counter(emojis)))).head(10)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "df['month_num'] = df['date'].dt.month" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "timeline = df.groupby(['year','month_num','month']).count()['message'].reset_index()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "time = []\n", "for i in range(timeline.shape[0]):\n", " time.append(timeline['month'][i]+' - '+str(timeline['year'][i]))" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "timeline['time'] = time" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yearmonth_nummonthmessagetime
020231January28January - 2023
120232February11002February - 2023
220233March11961March - 2023
320234April11129April - 2023
420235May4429May - 2023
520236June2697June - 2023
\n", "
" ], "text/plain": [ " year month_num month message time\n", "0 2023 1 January 28 January - 2023\n", "1 2023 2 February 11002 February - 2023\n", "2 2023 3 March 11961 March - 2023\n", "3 2023 4 April 11129 April - 2023\n", "4 2023 5 May 4429 May - 2023\n", "5 2023 6 June 2697 June - 2023" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "timeline" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yearmonthmessagetime
02023January28January - 2023
12023February11002February - 2023
22023March11961March - 2023
32023April11129April - 2023
42023May4429May - 2023
52023June2697June - 2023
\n", "
" ], "text/plain": [ " year month message time\n", "0 2023 January 28 January - 2023\n", "1 2023 February 11002 February - 2023\n", "2 2023 March 11961 March - 2023\n", "3 2023 April 11129 April - 2023\n", "4 2023 May 4429 May - 2023\n", "5 2023 June 2697 June - 2023" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "timeline.drop(columns=['month_num'],axis=1)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([0, 1, 2, 3, 4, 5],\n", " [Text(0, 0, ''),\n", " Text(0, 0, ''),\n", " Text(0, 0, ''),\n", " Text(0, 0, ''),\n", " Text(0, 0, ''),\n", " Text(0, 0, '')])" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjkAAAH9CAYAAAD4em1SAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABraUlEQVR4nO3deXSTVf4G8CdJ23RP95ZCKV2gUNn3shQKlSqLIvpTFAVZRARURAWZUVR0BoVxYxDQAQVHQdTBDRTFtlChlaXsW6ELtFC6L+lCt+T9/VEaiYAWmuQmb5/POTlnkvc2fXIHyZf3bgpJkiQQERERyYxSdAAiIiIic2CRQ0RERLLEIoeIiIhkiUUOERERyRKLHCIiIpIlFjlEREQkSyxyiIiISJbsRAcQSa/XIzc3F25ublAoFKLjEBERUTNIkoSKigoEBgZCqbzx/ZpWXeTk5uYiKChIdAwiIiK6BTk5OWjXrt0Nr7fqIsfNzQ1AYye5u7sLTkNERETNodVqERQUZPgev5FWXeQ0DVG5u7uzyCEiIrIxfzXVhBOPiYiISJZY5BAREZEsscghIiIiWWKRQ0RERLLEIoeIiIhkiUUOERERyRKLHCIiIpIlFjlEREQkSyxyiIiISJZuushJSkrCuHHjEBgYCIVCgW+++cZwrb6+HgsXLkS3bt3g4uKCwMBATJ48Gbm5uUbvUVJSgkmTJsHd3R0eHh6YPn06KisrjdocPXoUQ4cOhaOjI4KCgrBs2bJrsnz55Zfo3LkzHB0d0a1bN/zwww83+3GIiIhIpm66yKmqqkKPHj3w/vvvX3OturoaBw8exEsvvYSDBw9iy5YtSEtLw1133WXUbtKkSThx4gR27NiBrVu3IikpCTNnzjRc12q1GDVqFIKDg5Gamorly5fjlVdewYcffmhok5ycjAcffBDTp0/HoUOHMH78eIwfPx7Hjx+/2Y9EREREMqSQJEm65R9WKPD1119j/PjxN2yzf/9+9O/fH+fPn0f79u1x6tQpREZGYv/+/ejbty8AYPv27Rg9ejQuXLiAwMBArF69Gn//+9+Rl5cHBwcHAMALL7yAb775BqdPnwYAPPDAA6iqqsLWrVsNv2vgwIHo2bMn1qxZ06z8Wq0WGo0G5eXlPLuKiIjIRjT3+9vsc3LKy8uhUCjg4eEBAEhJSYGHh4ehwAGA2NhYKJVK7N2719AmOjraUOAAQFxcHNLS0lBaWmpoExsba/S74uLikJKScsMstbW10Gq1Rg8iIiKSJ7OeQl5TU4OFCxfiwQcfNFRaeXl58PPzMw5hZwcvLy/k5eUZ2oSEhBi18ff3N1zz9PREXl6e4bWr2zS9x/UsXboUr776aos/F1FrUFBRg8TTBfjlVAGOXShHpwA3DArzxuAwH0QGukOl/PPTf4mIRDNbkVNfX4/7778fkiRh9erV5vo1N2XRokWYP3++4blWq0VQUJDARETWQ5IknLykRfypAsSfyseRC+VG1/O0NUg6UwgA0DjZY2CoFwaF+WBwuDfCfF2hULDoISLrYpYip6nAOX/+PBISEozGywICAlBQUGDUvqGhASUlJQgICDC0yc/PN2rT9Pyv2jRdvx61Wg21Wn3rH4xIZmrqdUjJKMYvp/KRcLoAl8prjK73aKfBiM7+6BfiiVOXKpCSUYS9mSUov1yPn07k46cTjf8N+rmpMSjMG4PCfDAo3BvtPJ1FfBwiIiMmL3KaCpyzZ88iMTER3t7eRtejoqJQVlaG1NRU9OnTBwCQkJAAvV6PAQMGGNr8/e9/R319Pezt7QEAO3bsQEREBDw9PQ1t4uPjMW/ePMN779ixA1FRUab+SESyUqCtQfzpAsSfKsCe9CJcrtcZrjnZqzCkow9GdvbDiM5+8HN3NFwbFOaD6UNC0KDT49jFciRnFCM5owgHzpWioKIW3xzOxTeHG7eLaO/ljMHh3ogK88GgMG/4uPIfF0RkeTe9uqqyshLp6ekAgF69euHtt99GTEwMvLy80KZNG9x33304ePAgtm7dajRnxsvLyzCR+M4770R+fj7WrFmD+vp6TJ06FX379sXGjRsBNE5WjoiIwKhRo7Bw4UIcP34c06ZNwzvvvGNYap6cnIxhw4bhjTfewJgxY/D555/jn//8Jw4ePIiuXbs267NwdRW1BpIk4USu1nC35ugfhqHaaBwxsosfRnbxR1SoNxztVTf1/jX1OhzMLkVyemPRc+RCOXR6479WIvzdMCi88U7PgFAvuDvat/hzEVHr1dzv75sucnbu3ImYmJhrXp8yZQpeeeWVayYMN0lMTMTw4cMBNG4GOHfuXHz//fdQKpW49957sWLFCri6uhraHz16FHPmzMH+/fvh4+ODJ598EgsXLjR6zy+//BIvvvgizp07h44dO2LZsmUYPXp0sz8LixySq5p6HfakF+GXUwVIOJ2PfG2t0fUeQR6I7dxY2HRp42bS+TQVNfXYf64EyenF2JNRjFOXjFcxKhVAt3YeGHxleKtvB8+bLqyIqHUzW5EjJyxySE7ytTWGScN7MopQU683XHN2UGFIuA9iu/hjeGdf+Lk5/sk7mVZJVR1SMoqxJ6MIKRnFyCqqMrruoFKid7AHBl+Zz9O9nQfsVTxxhohujEVOM7DIIVum1/8+DBV/Oh/HLxrfMQnUOGJkF3+M7OKHgbcwDGUuuWWXDfN5ktOLkac1nuzs4qBC/xAvDA73QVSYN7oEuEPJ5epEdBUWOc3AIodszeW6xmGo+NP5iD9VgIKK34ehFAqgZ5AHRl4ZhuocYNphKHOQJAlZRVXYk1GM5PQipGQWo6y63qiNp7M9oppWboV5I8THxeo/FxGZF4ucZmCRQ7bgUvllJFy1Gqq24fdhKBcHFYZ29MWILn6IifCDr5ttr2LS6xv36km5cqdnb1YJqut0Rm3aaBwRdWVTwkHh3mijcRKUlohEYZHTDCxyyBrp9RKOXSy/ssw7HydyjYeh2no4IfbKaqgBoV5Q21nHMJQ51Ov0OJJThuSMYuxJL8Kh7DLU6fRGbUJ9XBqLnnAfDAz1hpeLww3ejYjkgkVOM7DIIWtRXdeA3WeLGu/YnC5A4R+GoXoFeWBkF3/EdvFHJ//Wu7vw5TodDpwvuTKnpxjHLpThD6vVEdnGvfH4iXAf9AvxgqvarKfXEJEALHKagUUOiZRbdhnxpwuQcCofezKKUfeHYajoTr4Y2cUfMRG+8OZmetdVfrkeezOLDROZz+RXGl23UyrQI8jDsBtzr/YeVjMBm4huHYucZmCRQ5ak10s4erEc8acaJw2f/MP+Me08nRB7ZTVU/xB5D0OZS2FFLZKvLFVPzihGdkm10XW1nRL9OngZhre6BrrDjsvViWwOi5xmYJFD5lZV24Dd6UWIP5WPhNOFKKr8fRhKqQB6t/fEiC5+iO3ij45+rXcYylxySqobl6pfKXquHgYEADdHOwwI8TYMb7XmoUAiW8IipxlY5JA5XCy7jIRT+fjlVAFSMo2HoVzVdhjWyRcjOvshprMfJ8lakCRJSC+oxJ70xqLnt8xiaGsajNr4uDoYztsaHOaD9t48aJTIGrHIaQYWOWQKer2EwxfKkHCqAL+cysfpvAqj6+29nDHyyt2afh284GDH4RFroNNLOJFbjj1Xztzaf67EaJdooHEIcdBVe/RcfWApEYnDIqcZWOTQraqqbcCvZwsRf6oAiWkFKKqsM1xTKoA+wZ5XVkP5IcyXQyC2oLZBh8PZZdiTUYyUjMbl6g1/WLoV7ueKwWGNp6tHhXpD48yDRolEYJHTDCxy6GZcKK1uPBvqdAF+yyg22q/FTW2H6AhfxHbxw/BOfvDkMJTNq6ptaDxo9MrKrRO5Wlz9t6VCAXQN1BhOV+/XwRPODlyuTmQJLHKagUUO/RmdXsLhnLIrk4YLrhmGCvZ2xsjOjXdr+oV48VBJmSutqsPerGLD8FZGofFBo/YqBXoFeRqKnp5BHhyaJDITFjnNwCKH/qiytgG/ninEL6cKsDOtAMVVxsNQfTt4Gc6GCvPlGUqtWb62BskZRY1FT3oRcsuNDxp1slehX4gXBl+Z0xMZ6A4VDxolMgkWOc3AIoeAxmXG8afyG4ehMotRr/v9Pwk3RzsMj/DDyM5+GB7hCw9nDkPRtSRJwvniasPQVkpGsVGBDAAaJ3sMDG08XX1QmDfnahG1AIucZmCR0zo1DkOV4pdTjWdD/XGX3BAfF8Pdmr4dPDkMRTdNr5eQll/RWPSkNx40WllrvFzdz03duHLrStHTzpPL1Ymai0VOM7DIaT0qaurx69ki/HIqHzvTClFy1b+yVUoF+gZ7GnYbDvV1FZiU5KhBp8fRi+WG09X3nys12j8JaJzjNSjMG3NHdERbD56sTvRnWOQ0A4scecsurkb86cYjFPZmGQ9DuTcNQ11ZDcWlwGRJNfU6HDxf2ni6ekYRjl4oh+7KcvUIfzf8+PRQKDl/h+iGmvv9zfWOJBs6vYSD2aWNy7xP5eNsgfEwVKjvVcNQwZ48s4iEcbRXNQ5ThfvgOUSgoqYe+7JK8PTnh5GWX4H40wW4PdJfdEwim8cih2yatqYeSWcaN+XbmVaA0up6wzWVUoH+HbwwsktjYRPi4yIwKdGNuTnaY2QXfzwSFYzVOzOwMjEdsV38ODGZqIVY5JDNWr8nC69vO2W0K63GyR4xEb4Y0cUfwzr5QuPEYSiyHdOHhOCj3Vk4klOG5IxiDA73ER2JyKaxyCGbJEkS/vNrFhr0EkJ9XHB7pD9GdPZDHw5DkQ3zcVXjwf7tsT75HN5PTGeRQ9RCLHLIJp3Jr8TFsstQ2ymx7amhcHJQiY5EZBKPRYfi09/OIzmjGAezS9G7vafoSEQ2i//kJZuUcLoAADAozJsFDslKWw8nTOjdFgCwKjFdcBoi28Yih2xSYlpjkRPT2U9wEiLTmzUsDAoF8MupApy6pBUdh8hmscghm1NeXY/U86UAgJgIFjkkP6G+rhjdrQ0AYNXODMFpiGwXixyyOUlnC6HTS+jo54ogL26FT/I0Z3g4AGDb0VxkFVX9RWsiuh4WOWRzOFRFrUFkoDtGdPaDXgLW8G4O0S1hkUM2Ra+XsCutEACHqkj+5sQ03s3ZcugCcssuC05DZHtY5JBNOXKhDMVVdXBztEPfDlxaS/LWJ9gTA0O9UK+T8J9fM0XHIbI5LHLIpiReWToe3dEX9tz0j1qBprs5m/Zlo6iyVnAaItvCbwmyKYlXhqqGR/gKTkJkGUPCfdCjnQY19Xp8vCdLdBwim8Iih2xGgbYGxy6WAwCGcz4OtRIKhQKzr9zN+ST5PLQ19X/xE0TUhEUO2YydV+7i9Ginga+bWnAaIsu5vYs/Ovm7oqK2Af9NOS86DpHNYJFDNqNp6Tjv4lBro1QqMPvKvjnrdmfhcp1OcCIi28Aih2xCXYMev54tAgCM4P441AqN7d4G7b2cUVJVh037skXHIbIJLHLIJhw4V4LK2gb4uKrRra1GdBwii7NTKTFrWBgA4MOkTNQ16AUnIrJ+LHLIJjSdOj48whdKpUJwGiIx7u3TFn5uauRpa/D1oQui4xBZPRY5ZBMMRzlwPg61Ymo7FWZGhwIAVu/MQIOOd3OI/gyLHLJ62cXVyCisgp1SgaGdfETHIRLqwf7t4elsj3PF1fjheJ7oOERWjUUOWb2E0/kAgL4dPOHuaC84DZFYLmo7TB0cAgBYlZgOSZIEJyKyXixyyOol8kBOIiNTojrAVW2H03kViD9VIDoOkdVikUNWrbquASmZxQC4dJyoicbZHg8PDAYArOTdHKIbYpFDVi05vRh1DXq083RCuJ+r6DhEVmP6kBCo7ZQ4nFOGlIxi0XGIrBKLHLJqCVdWVY3o7AeFgkvHiZr4uqkxsV8QAOD9nemC0xBZJxY5ZLUkScLO01w6TnQjj0WHwk6pwJ70YhzKLhUdh8jq3HSRk5SUhHHjxiEwMBAKhQLffPON0XVJkrB48WK0adMGTk5OiI2NxdmzZ43alJSUYNKkSXB3d4eHhwemT5+OyspKozZHjx7F0KFD4ejoiKCgICxbtuyaLF9++SU6d+4MR0dHdOvWDT/88MPNfhyyYmn5Fcgtr4GjvRJRYd6i4xBZnXaezhjfqy0A4P3EDMFpiKzPTRc5VVVV6NGjB95///3rXl+2bBlWrFiBNWvWYO/evXBxcUFcXBxqamoMbSZNmoQTJ05gx44d2Lp1K5KSkjBz5kzDda1Wi1GjRiE4OBipqalYvnw5XnnlFXz44YeGNsnJyXjwwQcxffp0HDp0COPHj8f48eNx/Pjxm/1IZKWadjkeFOYDR3uV4DRE1umJ4WFQKIBfTuXjdJ5WdBwi6yK1AADp66+/NjzX6/VSQECAtHz5csNrZWVlklqtljZt2iRJkiSdPHlSAiDt37/f0ObHH3+UFAqFdPHiRUmSJGnVqlWSp6enVFtba2izcOFCKSIiwvD8/vvvl8aMGWOUZ8CAAdLjjz9+w7w1NTVSeXm54ZGTkyMBkMrLy2+tA8is/m91shS8cKv0SXKW6ChEVm32p6lS8MKt0lObDoqOQmQR5eXlzfr+NumcnKysLOTl5SE2NtbwmkajwYABA5CSkgIASElJgYeHB/r27WtoExsbC6VSib179xraREdHw8HBwdAmLi4OaWlpKC0tNbS5+vc0tWn6PdezdOlSaDQawyMoKKjlH5rMory6HqlX5hjEcOk40Z96YnjjwZ3fH8nFuaIqwWmIrIdJi5y8vMYtxv39/Y1e9/f3N1zLy8uDn5/xl5adnR28vLyM2lzvPa7+HTdq03T9ehYtWoTy8nLDIycn52Y/IlnIrrOF0OkldPJ3RTtPZ9FxiKxa17YaxET4Qi8BHyRxbg5Rk1a1ukqtVsPd3d3oQdYpsWlVFe/iEDXLnJhwAMBXqRdwqfyy4DRE1sGkRU5AQAAAID8/3+j1/Px8w7WAgAAUFBhvQ97Q0ICSkhKjNtd7j6t/x43aNF0n26XTS9h1hkc5EN2Mvh28MCDEC/U6Cf9JyhIdh8gqmLTICQkJQUBAAOLj4w2vabVa7N27F1FRUQCAqKgolJWVITU11dAmISEBer0eAwYMMLRJSkpCfX29oc2OHTsQEREBT09PQ5urf09Tm6bfQ7bryIUylFTVwc3RDn2CPUXHIbIZTXdzNu3LRnFlreA0ROLddJFTWVmJw4cP4/DhwwAaJxsfPnwY2dnZUCgUmDdvHl5//XV89913OHbsGCZPnozAwECMHz8eANClSxfccccdeOyxx7Bv3z7s2bMHc+fOxcSJExEYGAgAeOihh+Dg4IDp06fjxIkT2Lx5M9577z3Mnz/fkOPpp5/G9u3b8dZbb+H06dN45ZVXcODAAcydO7flvUJCNQ1VRXfyhb2qVY2oErXI0I4+6NZWg8v1Ony855zoOETi3eyyrcTERAnANY8pU6ZIktS4jPyll16S/P39JbVaLY0cOVJKS0szeo/i4mLpwQcflFxdXSV3d3dp6tSpUkVFhVGbI0eOSEOGDJHUarXUtm1b6Y033rgmyxdffCF16tRJcnBwkG677TZp27ZtN/VZmrsEjSxrzIokKXjhVunLAzmioxDZnB+PXZKCF26Vur68XSq/XCc6DpFZNPf7WyFJrff4Wq1WC41Gg/Lyck5CthIF2hr0/2c8FApg/99j4eOqFh2JyKbo9RJGvZuE9IJKLLgjArOHh4uORGRyzf3+5lgAWZXEKwdydm/nwQKH6BYolQrMvrJvzrpfs3C5Tic4EZE4LHLIqjQd5TCCq6qIbtldPQLRztMJxVV12Lw/W3QcImFY5JDVqGvQY/fZIgBATGdfwWmIbJedSolZwxrv5nyQlIm6Br3gRERisMghq7H/XAmq6nTwcVWja6BGdBwim3Zfn3bwc1PjUnkNvjl0UXQcIiFY5JDVaBqqionwhVKpEJyGyLY52qvw2NBQAMDqXRnQ6VvtGhNqxVjkkNVomnTMoxyITOOhAe3h4WyPrKIq/HDskug4RBbHIoeswvniKmQWVsFOqcCQjj6i4xDJgovaDlMHhQAA3k9MRyveMYRaKRY5ZBWahqr6dfCCu6O94DRE8jFlUDBcHFQ4nVdhuFtK1FqwyCGrYFg6zqEqIpPycHbAwwODAQArE3g3h1oXFjkkXHVdA/ZmlgDg0nEic5g+NAQOdkoczC7Db1f+WyNqDVjkkHB70otRp9MjyMsJYb6uouMQyY6fmyMe6BsEoHFuDlFrwSKHhLt6l2OFgkvHiczh8WGhsFMqsDu9CIdzykTHIbIIFjkklCRJ2HllMuRwzschMpt2ns64u2dbAMAq3s2hVoJFDgl1Oq8Cl8pr4GivRFSot+g4RLL2xPAwKBTAzyfzkZZXIToOkdmxyCGhmoaqBof5wNFeJTgNkbyF+7nizq4BAIDVO3k3h+SPRQ4JlXiaQ1VEljR7eDgA4Lsjucgurhachsi8WOSQMGXVdTiYXQqA++MQWUrXthoM6+QLvdR4phWRnLHIIWF2nSmEXgIi/N3Q1sNJdByiVmPuiMa7Of9LvYC88hrBaYjMh0UOCdM0VMUDOYksq18HL/Tv4IU6nR7/+TVTdBwis2GRQ0Lo9BJ2nSkEAMREcJdjIkubHRMGANi4NxslVXWC0xCZB4scEuJwThlKq+vh7miHPsGeouMQtTrDOvmia1t3XK7XYf2eLNFxiMyCRQ4J0TRUFd3JF3Yq/jEksjSFQoE5V1ZarU8+h4qaesGJiEyP3y4kRNP+ODERnI9DJErcbQEI83WBtqYBn/6WLToOkcmxyCGLyyuvwclLWigUwHDOxyESRqlUGPbNWbc7EzX1OsGJiEyLRQ5ZXNNZVT3aecDbVS04DVHrdlfPQLTzdEJRZR02788RHYfIpFjkkMUZTh3n0nEi4exVSjw+rHGl1Qe7MlDXoBeciMh0WOSQRdU26LAnvQgA5+MQWYv/69MOPq5q5JbX4JvDF0XHITIZFjlkUfuzSlFVp4Ovmxq3BbqLjkNEABztVXhsaAgAYM3ODOj0kuBERKbBIocs6vdVVb5QKhWC0xBRk0kDg6FxskdmURW2H88THYfIJFjkkEUlpnHpOJE1clXb4dFBHQAAKxPTIUm8m0O2j0UOWUxWURWyiqpgr1JgSEcf0XGI6A+mDu4AZwcVTl3SYmdaoeg4RC3GIocspmmX434dvODmaC84DRH9kYezAx4eGAyAd3NIHljkkMU0DVVx6TiR9ZoxJAQOdkqkni/F3qwS0XGIWoRFDllEVW0D9mY2/oU5nPNxiKyWn7sj7u/bDgDwfmK64DRELcMihyxiT3oR6nR6tPdyRpivi+g4RPQnHo8Og0qpwK9ni3Akp0x0HKJbxiKHLOLqoSqFgkvHiaxZkJcz7u4RCABYtZN3c8h2scghs5MkCYmnG1dq8EBOItswOyYMCgXw04l8nM2vEB2H6JawyCGzO3WpAnnaGjjZqzAw1Ft0HCJqhnA/N8RFBgAAVu3MEJyG6NawyCGzaxqqGhzuDUd7leA0RNRcc2LCAQDfHclFdnG14DREN49FDpmd4SgHLh0nsind2mkQ3ckXOr2ED5J4N4dsD4scMqvSqjocyi4FwKXjRLZozvAwAMCXBy4gX1sjOA3RzWGRQ2aVdLYQegnoHOCGth5OouMQ0U0aEOqNfh08UafTY+2vmaLjEN0UFjlkVhyqIrJ9s6/MzflsbzZKq+oEpyFqPhY5ZDY6vYRdZxqXjvPUcSLbNbyTL24LdEd1nQ4fJ58THYeo2VjkkNkczilFWXU9NE726N3eQ3QcIrpFCoXCsNJq/Z4sVNY2CE5E1DwmL3J0Oh1eeuklhISEwMnJCWFhYXjttdeMTrOVJAmLFy9GmzZt4OTkhNjYWJw9e9bofUpKSjBp0iS4u7vDw8MD06dPR2VlpVGbo0ePYujQoXB0dERQUBCWLVtm6o9DLdA0VBXdyRd2KtbTRLYs7rYAhPq6QFvTgE9/Oy86DlGzmPyb580338Tq1auxcuVKnDp1Cm+++SaWLVuGf//734Y2y5Ytw4oVK7BmzRrs3bsXLi4uiIuLQ03N7zP3J02ahBMnTmDHjh3YunUrkpKSMHPmTMN1rVaLUaNGITg4GKmpqVi+fDleeeUVfPjhh6b+SHSLEq7scjyiM3c5JrJ1KqUCs4c33s1Z+2sWaup1ghMRNYNkYmPGjJGmTZtm9NqECROkSZMmSZIkSXq9XgoICJCWL19uuF5WViap1Wpp06ZNkiRJ0smTJyUA0v79+w1tfvzxR0mhUEgXL16UJEmSVq1aJXl6ekq1tbWGNgsXLpQiIiKanbW8vFwCIJWXl9/8B6U/dansshS8cKvU4YWtUlFFjeg4RGQCdQ06adDSeCl44Vbpk+Qs0XGoFWvu97fJ7+QMGjQI8fHxOHPmDADgyJEj2L17N+68804AQFZWFvLy8hAbG2v4GY1GgwEDBiAlJQUAkJKSAg8PD/Tt29fQJjY2FkqlEnv37jW0iY6OhoODg6FNXFwc0tLSUFpaet1stbW10Gq1Rg8yj6ZdjnsGecDbVS04DRGZgr1KiceHhQIA1uzKRL1OLzgR0Z8zeZHzwgsvYOLEiejcuTPs7e3Rq1cvzJs3D5MmTQIA5OXlAQD8/f2Nfs7f399wLS8vD35+xqtx7Ozs4OXlZdTmeu9x9e/4o6VLl0Kj0RgeQUFBLfy0dCNN83FGcFUVkazc3zcIPq5qXCy7jG8P54qOQ/SnTF7kfPHFF/jss8+wceNGHDx4EBs2bMC//vUvbNiwwdS/6qYtWrQI5eXlhkdOTo7oSLJU26DDnvQiANwfh0huHO1VmDE0BACwamc6dHrpL36CSByTFznPP/+84W5Ot27d8Mgjj+CZZ57B0qVLAQABAY2n2ubn5xv9XH5+vuFaQEAACgoKjK43NDSgpKTEqM313uPq3/FHarUa7u7uRg8yvX1ZJaiu08HPTY3bAtnHRHIzaUB7uDvaIbOwCj+duP6dcyJrYPIip7q6Gkql8duqVCro9Y1jtyEhIQgICEB8fLzhularxd69exEVFQUAiIqKQllZGVJTUw1tEhISoNfrMWDAAEObpKQk1NfXG9rs2LEDERER8PT0NPXHoptg2OU4wg8KhUJwGiIyNTdHezw6uPFuzvuJ6UZbhBBZE5MXOePGjcM//vEPbNu2DefOncPXX3+Nt99+G/fccw+Axk2l5s2bh9dffx3fffcdjh07hsmTJyMwMBDjx48HAHTp0gV33HEHHnvsMezbtw979uzB3LlzMXHiRAQGBgIAHnroITg4OGD69Ok4ceIENm/ejPfeew/z58839Ueim5TIoxyIZG/qoA5wdlDhRK4WO6/sbE5kbexM/Yb//ve/8dJLL2H27NkoKChAYGAgHn/8cSxevNjQZsGCBaiqqsLMmTNRVlaGIUOGYPv27XB0dDS0+eyzzzB37lyMHDkSSqUS9957L1asWGG4rtFo8PPPP2POnDno06cPfHx8sHjxYqO9dMjysoqqcK64GvYqBYZ09BEdh4jMxNPFAZMGtMd/fs3CqsR0Ht1CVkkhteL7jFqtFhqNBuXl5ZyfYyLrdmfhta0nMTjcG5/NGCg6DhGZUb62BkPfTESdTo8vHo9C/xAv0ZGolWju9zf32ieTSrxqPg4RyZu/uyPu69sOALAyMV1wGqJrscghk6msbcDerGIAnI9D1FrMig6DSqlA0plCHLtQLjoOkREWOWQye9KLUK+TEOztjFAfF9FxiMgC2ns7464ejQtC3ufdHLIyLHLIZBK5dJyoVXpieBgAYPuJPJzNrxCchuh3LHLIJCRJMpxXNYJDVUStSid/N8Td1niszupdGYLTEP2ORQ6ZxMlLWuRra+Fkr+IKC6JWaE5MOADg28O5yCmpFpyGqBGLHDKJpqGqweE+cLRXCU5DRJbWvZ0Hhnb0gU4v4YMk3s0h68Aih0zCcOo4h6qIWq2muzlfHLiAAm2N4DRELHLIBEqq6nAopwwAMDzCV2wYIhJmQIgX+gR7oq5Bj7W7s0THIWKRQy2XdKYQkgR0DnBDoIeT6DhEJIhCocDcK3dzPv3tPMqq6wQnotaORQ61GIeqiKjJ8AhfdGnjjuo6HT7ec050HGrlWORQizTo9Nh15QRiFjlEpFAoMCemcd+c9cnnUFnbIDgRtWYscqhFDueUofxyPTRO9ugZ5CE6DhFZgTu7tkGojwvKL9dj497zouNQK8Yih1qkaahqWCdf2Kn4x4mIAJVSgVlXdkH+z69ZqKnXCU5ErRW/lahFOB+HiK7nnl5t0dbDCYUVtfgy9YLoONRKscihW5Zbdhmn8yqgUADRnbh0nIh+Z69SYmZ0KADgg10ZqNfpBSei1ohFDt2ynWmNE457BXnAy8VBcBoisjYP9AuCj6sDLpRexneHc0XHoVaIRQ7dMg5VEdGfcbRXYfqQxrs5q3amQ6+XBCei1oZFDt2Smnod9qQXAQBiWOQQ0Q08PLA93BztkFFYhZ9O5ImOQ60Mixy6JfuySnC5Xgd/dzUi27iLjkNEVsrN0R6PDuoAAHh/ZzokiXdzyHJY5NAtaRqqionwg0KhEJyGiKzZ1MEhcLJX4fhFLZLOFomOQ60Iixy6aZIkITHtSpHDoSoi+gteLg54aEB7AMD7CemC01BrwiKHblpWURXOF1fDXqXA4HAf0XGIyAY8NjQUDiol9p0rwb6sEtFxqJVgkUM3rWmoakCIN1zVdoLTEJEtCNA44t4+7QA0rrQisgQWOXTTOFRFRLdi1rBQKBWNe2wdv1guOg61Aixy6KZU1jYYbjVzfxwiuhnB3i64q0cgAN7NIctgkUM3ZffZItTrJHTwdkaIj4voOERkY54YHg4A+PF4HtILKgSnIbljkUM3JfE0h6qI6NZFBLjh9kh/SBKwemem6DgkcyxyqNmuXjrOoSoiulVzYhrv5nxz+CJySqoFpyE5Y5FDzXYiV4uCilo4O6jQP8RLdBwislE9gzwwJNwHOr2ED5N4N4fMh0UONVvTUNXgcB+o7VSC0xCRLWu6m7P5QA4KKmoEpyG5YpFDzZbAoSoiMpGBoV7o3d4DdQ16rNudJToOyRSLHGqW4spaHM4pA9B4XhURUUsoFArD3ZxPU86jrLpOcCKSIxY51CxJZwshSUCXNu4I0DiKjkNEMjCisx86B7ihqk6HDcnnRcchGWKRQ82ScLoQADCis6/gJEQkF1ffzfk4OQtVtQ2CE5HcsMihv9Sg02MX5+MQkRmM7tYGIT4uKKuux8a92aLjkMywyKG/dCinDNqaBng426NnkKfoOEQkIyqlAk8MCwMA/OfXTNTU6wQnIjlhkUN/qenU8WGdfKFSKgSnISK5Gd+rLQI1jiioqMVXqRdExyEZYZFDf6lpfxwOVRGROTjYKTEzOhQAsGZXBhp0esGJSC5Y5NCfulh2GafzKqBUANEdOemYiMzjgX7t4e3igAull/H90VzRcUgmWOTQn9p5ZcJxr/ae8HRxEJyGiOTKyUGFaUNCAACrEjOg10uCE5EcsMihP8WhKiKylEeiguHmaIezBZX4+WS+6DgkAyxy6IZq6nXYk14MgLscE5H5uTvaY0pUBwDA+4npkCTezaGWYZFDN7Q3qwSX63UIcHdElzZuouMQUSswdXAHONmrcOxiOX49WyQ6Dtk4Fjl0Q01DVTGdfaFQcOk4EZmft6saD/ZvD6Dxbg5RS5ilyLl48SIefvhheHt7w8nJCd26dcOBAwcM1yVJwuLFi9GmTRs4OTkhNjYWZ8+eNXqPkpISTJo0Ce7u7vDw8MD06dNRWVlp1Obo0aMYOnQoHB0dERQUhGXLlpnj47RKkiQZ9sfhUBURWdJj0SGwVymwN6sEB86ViI5DNszkRU5paSkGDx4Me3t7/Pjjjzh58iTeeusteHr+vlPusmXLsGLFCqxZswZ79+6Fi4sL4uLiUFNTY2gzadIknDhxAjt27MDWrVuRlJSEmTNnGq5rtVqMGjUKwcHBSE1NxfLly/HKK6/gww8/NPVHapUyCquQXVINB5USg8N9RMcholakjcYJ9/VpB4B3c6iFJBNbuHChNGTIkBte1+v1UkBAgLR8+XLDa2VlZZJarZY2bdokSZIknTx5UgIg7d+/39Dmxx9/lBQKhXTx4kVJkiRp1apVkqenp1RbW2v0uyMiIpqdtby8XAIglZeXN/tnWov/JGVIwQu3Sg+v/U10FCJqhbIKK6WQF7ZKwQu3SscvlomOQ1amud/fJr+T891336Fv3774v//7P/j5+aFXr174z3/+Y7ielZWFvLw8xMbGGl7TaDQYMGAAUlJSAAApKSnw8PBA3759DW1iY2OhVCqxd+9eQ5vo6Gg4OPy+d0tcXBzS0tJQWlp63Wy1tbXQarVGD7o+DlURkUgdfFwwtnsggMZ9c4huhcmLnMzMTKxevRodO3bETz/9hCeeeAJPPfUUNmzYAADIy8sDAPj7+xv9nL+/v+FaXl4e/PyMv1zt7Ozg5eVl1OZ673H17/ijpUuXQqPRGB5BQUEt/LTyVFFTj31ZjePg3B+HiESZHdN4cOcPxy8ho7DyL1oTXcvkRY5er0fv3r3xz3/+E7169cLMmTPx2GOPYc2aNab+VTdt0aJFKC8vNzxycnJER7JKe9KL0KCXEOLjgg4+LqLjEFEr1TnAHbFd/CFJwOqdvJtDN8/kRU6bNm0QGRlp9FqXLl2QnZ0NAAgICAAA5Ocb72aZn59vuBYQEICCggKj6w0NDSgpKTFqc733uPp3/JFarYa7u7vRg67FoSoishZzrtzN+ebQRVworRachmyNyYucwYMHIy0tzei1M2fOIDg4GAAQEhKCgIAAxMfHG65rtVrs3bsXUVFRAICoqCiUlZUhNTXV0CYhIQF6vR4DBgwwtElKSkJ9fb2hzY4dOxAREWG0kotujl4vITGtEACHqohIvF7tPTE43BsNegn/ScoUHYdsjMmLnGeeeQa//fYb/vnPfyI9PR0bN27Ehx9+iDlz5gAAFAoF5s2bh9dffx3fffcdjh07hsmTJyMwMBDjx48H0Hjn54477sBjjz2Gffv2Yc+ePZg7dy4mTpyIwMDGiWgPPfQQHBwcMH36dJw4cQKbN2/Ge++9h/nz55v6I7UqJ3K1KKyohbODCv1CWCwSkXhzhocDAD7fn4PCilrBaciWmLzI6devH77++mts2rQJXbt2xWuvvYZ3330XkyZNMrRZsGABnnzyScycORP9+vVDZWUltm/fDkdHR0Obzz77DJ07d8bIkSMxevRoDBkyxGgPHI1Gg59//hlZWVno06cPnn32WSxevNhoLx26eYlXTh0fEu4DtZ1KcBoiIiAqzBs9gzxQ26DHut1ZouOQDVFIUus9AU2r1UKj0aC8vJzzc64Y//4eHM4pwxsTumHila3ViYhE++VkPmZ8cgCuajvsWTgCGmd70ZFIoOZ+f/PsKjIorqzFkQtlAIAYzschIisyorMfOge4obK2ARtSzomOQzaCRQ4Z7DpTCEkCItu4w9/d8a9/gIjIQpRKBWbHNM7N+WhPFqpqGwQnIlvAIocMmpaOc1UVEVmjMd3aoIO3M8qq67FpX7boOGQDWOQQAKBBp0fSmcal4xyqIiJrpFIqMGtY4745HyZlorZBJzgRWTsWOQQASD1fCm1NAzyd7dEzyEN0HCKi65rQux3aaBxRUFGL/6VeFB2HrByLHAIAwwaAwzr5QqVUCE5DRHR9DnZKPDY0FACwZlcGGnR6wYnImrHIIQBAYtNRDhyqIiIrN7F/ELxcHJBdUo2tRy+JjkNWjEUO4WLZZaTlV0CpaLyTQ0RkzZwd7DB9SAgAYNXOdOj1rXa7N/oLLHLIcBend3tPeDg7CE5DRPTXHh4YDDe1Hc7kV2LHqfy//gFqlVjkEIeqiMjmaJzsMXlQ48HPqxLT0Yo376c/wSKnlaup12FPRhEA7o9DRLZl6uAQONorceRCOXanF4mOQ1aIRU4rl5JZjJp6PdpoHNE5wE10HCKiZvNxVWNiv8Yz9t5PTBechqwRi5xWbueVoarhEX5QKLh0nIhsy8zoUNirFPgtswSp50tExyErwyKnFZMkCQlpPMqBiGxXoIcTJvRqBwB4PzFDcBqyNixyWrGMwkrklFyGg0qJweHeouMQEd2SWcPDoFQ0nr93IrdcdByyIixyWrHE0427HA8I9YKzg53gNEREtybExwVjugcCAFbv5N0c+h2LnFaMp44TkVzMHt54cOe2Y5eQWVgpOA1ZCxY5rZS2ph77zzVO0ouJYJFDRLatSxt3xHbxgyQ1nmlFBLDIabV2ny1Cg15CqI8LOvi4iI5DRNRis2PCAQBbDl7ExbLLgtOQNWCR00pxl2Mikpve7T0RFeqNBr2E/yRlio5DVoBFTiuk10tITGucdMz5OEQkJ3NHNN7N2bQvG0WVtYLTkGgsclqh47nlKKqshYuDCv06eImOQ0RkMoPCvNEjyAO1DXqs250lOg4JxiKnFWpaOj6kow8c7PhHgIjkQ6FQYM6VlVb/TTmP8sv1ghORSPyGa4W4yzERyVlsF39E+LuhsrYB/005JzoOCcQip5UpqqzF0QtlABrPqyIikhulUoHZMY13c9btzkJ1XYPgRCQKi5xWZmdaISQJuC3QHf7ujqLjEBGZxZhubRDs7YzS6nps2pcjOg4JwiKnlUnkUBURtQJ2KiVmDWu8m/NhUgZqG3SCE5EILHJakXqdHklnGicdc38cIpK7Cb3bIsDdEfnaWmw5eFF0HBKARU4rknq+FBU1DfBycUCPdh6i4xARmZXaToXHokMBNB710KDTC05ElsYipxVpGqoa1skXKqVCcBoiIvN7sH8QPJ3tcb64GtuOXRIdhyyMRU4rwqMciKi1cXaww7TBIQCAVYkZ0OslwYnIkljktBIXSqtxJr8SSgUwrKOv6DhERBYzeVAHuKrtkJZfgfgr/9ij1oFFTivRdBenT7AnNM72gtMQEVmOxskej0QFAwBWJqZDkng3p7VgkdNKNB3IyaEqImqNpg8JgdpOiSM5ZUjOKBYdhyyERU4rUFOvQ3JGEQDuj0NErZOPqxoP9m8PAFiZkC44DVkKi5xWICWjGDX1egRqHBHh7yY6DhGREI9Fh8JOqUBKZjFSz5eKjkMWwCKnFWhaOj68sx8UCi4dJ6LWqa2HEyb0bgsAeG3rSZwrqhKciMyNRY7MSZKEhCuTjkfwQE4iauWeGB4OR3slDueUIfbtXVj87XEUVtSKjkVmwiJH5tILKnGh9DIc7JQYFO4tOg4RkVAhPi74ds4QxET4okEv4ZOU8xi+PBHv/nIGlbU8rVxuWOTIXNNdnIGh3nB2sBOchohIvIgAN3w8tT82PTYQPYI8UFWnw7u/nMXw5Yn4b8o51PP4B9lgkSNzhlPHI7gBIBHR1aLCvPHN7EFYNak3QnxcUFRZh5e+PYHb396FrUdzuZ+ODLDIkTFtTT0OnGtcQTCis7/gNERE1kehUGB0tzb4+ZlovDa+K3xc1ThXXI25Gw9h/Pt7DNtvkG1ikSNjv54pQoNeQpivC9p7O4uOQ0RktexVSjwyMBi7nh+OZ2I7wcVBhSMXyvHQf/Ziykf7cOqSVnREugUscmSsaagqhquqiIiaxUVth6djO2LXghhMiQqGnVKBXWcKMXrFr5i/+TAulFaLjkg3gUWOTOn1EnY2zcfhLsdERDfFx1WNV+/uivhnh2Fs9zaQJGDLoYsY8a9deH3rSZRW1YmOSM1g9iLnjTfegEKhwLx58wyv1dTUYM6cOfD29oarqyvuvfde5OfnG/1cdnY2xowZA2dnZ/j5+eH5559HQ4Px8r6dO3eid+/eUKvVCA8Px/r16839cWzGsYvlKKqsg6vaDn07eImOQ0Rkk4K9XbDyod74bu5gDArzRp1Oj7W7sxC9PBGrdqajpl4nOiL9CbMWOfv378cHH3yA7t27G73+zDPP4Pvvv8eXX36JXbt2ITc3FxMmTDBc1+l0GDNmDOrq6pCcnIwNGzZg/fr1WLx4saFNVlYWxowZg5iYGBw+fBjz5s3DjBkz8NNPP5nzI9mMpqXjQ8J94GDHG3ZERC3RvZ0HPpsxABum9UeXNu6oqGnAsu1pGL58Jzbvz0YDl51bJYVkpjVylZWV6N27N1atWoXXX38dPXv2xLvvvovy8nL4+vpi48aNuO+++wAAp0+fRpcuXZCSkoKBAwfixx9/xNixY5Gbmwt//8ZVQWvWrMHChQtRWFgIBwcHLFy4ENu2bcPx48cNv3PixIkoKyvD9u3bm5VRq9VCo9GgvLwc7u7upu8Ege5euRtHLpRj2b3dcX+/INFxiIhkQ6+X8O2Ri/jXT2dwsewyAKCjnysW3NEZsV14fI4lNPf722z/xJ8zZw7GjBmD2NhYo9dTU1NRX19v9Hrnzp3Rvn17pKSkAABSUlLQrVs3Q4EDAHFxcdBqtThx4oShzR/fOy4uzvAe11NbWwutVmv0kKPCilocuVAOABjemfvjEBGZklKpwD292iHhuWF4cUwXeDjb42xBJR775ADu/yAFqedLREekK8xS5Hz++ec4ePAgli5des21vLw8ODg4wMPDw+h1f39/5OXlGdpcXeA0XW+69mdttFotLl++fN1cS5cuhUajMTyCguR5h6NpwnG3thr4uTkKTkNEJE9qOxVmDA1F0oIYzB4eBkd7JfafK8W9q1Mw85MDSC+oFB2x1TN5kZOTk4Onn34an332GRwdresLdtGiRSgvLzc8cnJyREcyi51phQCAGO5yTERkdu6O9lhwR2fsfC4GE/sFQakAfj6Zj1Hv7MKiLUeRr60RHbHVMnmRk5qaioKCAvTu3Rt2dnaws7PDrl27sGLFCtjZ2cHf3x91dXUoKysz+rn8/HwEBAQAAAICAq5ZbdX0/K/auLu7w8nJ6brZ1Go13N3djR5yU6/TI+nMlSKHS8eJiCwmQOOIN+7tjp+ficbtkf7QS8CmfTkYtjwRy386DW1NveiIrY7Ji5yRI0fi2LFjOHz4sOHRt29fTJo0yfC/7e3tER8fb/iZtLQ0ZGdnIyoqCgAQFRWFY8eOoaCgwNBmx44dcHd3R2RkpKHN1e/R1KbpPVqrA+dKUVHbAG8XB/Ro5yE6DhFRqxPu54b/TO6Lr2ZFoU+wJ2rq9Xg/MQPDliVi3e4s1DZw2bmlmPxYajc3N3Tt2tXoNRcXF3h7extenz59OubPnw8vLy+4u7vjySefRFRUFAYOHAgAGDVqFCIjI/HII49g2bJlyMvLw4svvog5c+ZArVYDAGbNmoWVK1diwYIFmDZtGhISEvDFF19g27Ztpv5INqVpl+NhnXyhVHKGPxGRKH07eOGrWVHYcTIfb24/jYzCKry29SQ+3pOF50ZF4K4egfx72syEbKDyzjvvYOzYsbj33nsRHR2NgIAAbNmyxXBdpVJh69atUKlUiIqKwsMPP4zJkydjyZIlhjYhISHYtm0bduzYgR49euCtt97C2rVrERcXJ+IjWY3EK/vjcKiKiEg8hUKBUbcF4Kd50XhjQjf4u6txofQy5m0+jLH/3o2kM4U87dyMzLZPji2Q2z45OSXVGLosESqlAgdfuh0aJ3vRkYiI6CqX63T4ODkLqxMzUFHbuIv/4HBvvHBHF3RrpxGcznYI3yeHLK9pqKpPsCcLHCIiK+TkoMLs4eFIWhCD6UNC4KBSYk96Mcat3I0nNx3C+eIq0RFlhUWOjBiGqnjqOBGRVfN0ccBLYyMR/+wwTOjVFgoF8P2RXMS+vQuvfHcCRZW1oiPKAoscmbhcp0NyRjEAnjpORGQrgryc8fYDPbHtyaEY1skX9ToJ65PPYdiyRKyIP4uq2oa/fhO6IRY5MpGSWYTaBj3aejihk7+r6DhERHQTIgPdsWFaf2ycMQDd2mpQVafD2zvOYNjynfj0t/Oo5wGgt4RFjkw0nTo+PMKXh8MREdmoQeE++HbOYPz7wV4I9nZGUWUtXvzmOEa9k4Qfjl3iSqybxCJHBiRJQuLpxl2OOVRFRGTblEoFxvUIxI5nhmHJ3bfB28UBWUVVmP3ZQYxflYzfMotFR7QZLHJk4GxBJS6WXYaDnRKDwnxExyEiIhNwsFNiclQH7FoQg6dHdoSzgwpHcsow8cPfMG39fpzO04qOaPVY5MhA01BVVKg3nBxUgtMQEZEpuart8MztnbDz+eF4ZGAw7JQKJJwuwJ3v/YrnvjyCi2WXRUe0WixyZKBp6TiHqoiI5MvPzRGvje+KHfOHYUy3NpAk4KvUC4j5104s/eEUyqrrREe0OixybFz55XocOF8KgEUOEVFrEOLjgvcn9cY3cwZjQIgX6hr0+CApE9HLErFmVwZq6nkAaBMWOTbu17OF0OklhPu5IsjLWXQcIiKykJ5BHvh85kB8PLUfOge4QVvTgDd+PI2Yf+3EFwdyoNNzJRaLHBvXtKoqJsJXcBIiIrI0hUKBmAg/bHtqKN76vx4I1DjiUnkNFnx1FHe+l4T4U/mtetk5ixwbptdL2HWGp44TEbV2KqUC9/Zph4TnhuPvo7tA42SPM/mVmL7hAB748DcczC4VHVEIFjk27OjFchRV1sFVbYd+HbxExyEiIsEc7VV4LDoUSc/HYNawMKjtlNiXVYIJq5LxxKepyCisFB3Roljk2LCmpeNDO/rAXsX/K4mIqJHG2R4v3NkZic8Nx/1920GpAH48nodR7yThb18fQ4G2RnREi+A3ow3bmcahKiIiurFADycsu68Hts+LRmwXP+j0Ejbuzcaw5Tvx1s9pqKipFx3RrFjk2KiCihocvVAOoPG8KiIiohvp5O+GtVP64YvHo9CrvQcu1+vw74R0DFu+Ex/vyUJdgzwPAGWRY6N2pjWuqureTgM/N0fBaYiIyBb0D/HClicGYc3DfRDq64KSqjq8+v1JjHx7J749fBF6mS07Z5Fjo5qGqoZHcKiKiIiaT6FQ4I6uAfh5XjT+eU83+LqpkVNyGU9/fhh3vb8bu88WiY5oMixybFC9To9fzzT+IeQux0REdCvsVEo8NKA9dj0/HM+N6gRXtR2OX9Ti4XV78ci6vTh+sVx0xBZjkWOD9p8rQUVtA7xdHNC9rUZ0HCIismHODnaYO6Ijdj0/HFMHd4C9SoFfzxZh7L934+nPDyGnpFp0xFvGIscGNR3IOSzCF0qlQnAaIiKSA29XNV4edxsSnh2Ou3sGAgC+PZyLEW/txKvfn0BxZa3ghDePRY4NSrwy6ZhDVUREZGpBXs54b2IvbH1yCIZ29EG9TsLHe85h2PKdWJlwFtV1DaIjNhuLHBuTU1KN9IJKqJQKDO3IpeNERGQeXdtq8N/pA/Dp9AG4LdAdlbUN+NfPZzBs+U58tvc8GnTWv+ycRY6NadrluG+wJzRO9oLTEBGR3A3p6IPv5w7BexN7IsjLCYUVtfj718cx6t0kbD+eZ9UHgLLIsTGJ3OWYiIgsTKlU4O6ebfHL/GF4eVwkvFwckFlYhVmfpmLC6mTsyyoRHfG6WOTYkMt1OqRkFAPgfBwiIrI8tZ0KUweHYNfzw/HkiHA42atwKLsM93+Qghkb9uNMfoXoiEZY5NiQ5Iwi1Dbo0dbDCR39XEXHISKiVsrN0R7PjorArueH46EB7aFSKvDLqQLc8W4SFnx1BJfKL4uOCIBFjk1pmo8T09kXCgWXjhMRkVh+7o745z3d8PMz0bizawD0EvDFgQsYvnwnlv54CuXVYg8AZZFjIyRJMpxXxaEqIiKyJmG+rlj9cB9smT0I/Tt4obZBjw92ZSJ6eSIOZpcKy8Uix0acya/ExbLLUNspERXqIzoOERHRNXq398Tmxwdi3ZS+6OTvCrWdEp0D3ITlsRP2m+mmNA1VDQrzhpODSnAaIiKi61MoFBjZxR/DI/xwvrgKzg7iSg3eybERXDpORES2RKVUINRX7CIZFjk2oLy6HqnnG8c0YyJY5BARETUHixwbkHS2EDq9hI5+rgjychYdh4iIyCawyLEBiac5VEVERHSzWORYOb1ews4zjUvHOVRFRETUfCxyrNyRC2UoqaqDm6Md+nbwFB2HiIjIZrDIsXJNQ1XRHX1hr+L/XURERM3Fb00rl3hll+PhEb6CkxAREdkWFjlWrEBbg2MXywEAwzkfh4iI6KawyLFiTWdV9Winga+bWnAaIiIi28Iix4o1HeXAuzhEREQ3j0WOlapr0GN3ehEAnjpORER0K1jkWKkD50pQWdsAH1c1urXViI5DRERkc1jkWKnfh6p8oVQqBKchIiKyPSYvcpYuXYp+/frBzc0Nfn5+GD9+PNLS0oza1NTUYM6cOfD29oarqyvuvfde5OfnG7XJzs7GmDFj4OzsDD8/Pzz//PNoaGgwarNz50707t0barUa4eHhWL9+vak/jjCGU8c5H4eIiOiWmLzI2bVrF+bMmYPffvsNO3bsQH19PUaNGoWqqipDm2eeeQbff/89vvzyS+zatQu5ubmYMGGC4bpOp8OYMWNQV1eH5ORkbNiwAevXr8fixYsNbbKysjBmzBjExMTg8OHDmDdvHmbMmIGffvrJ1B/J4rKLq5FRWAU7pQJDO/mIjkNERGSTFJIkSeb8BYWFhfDz88OuXbsQHR2N8vJy+Pr6YuPGjbjvvvsAAKdPn0aXLl2QkpKCgQMH4scff8TYsWORm5sLf39/AMCaNWuwcOFCFBYWwsHBAQsXLsS2bdtw/Phxw++aOHEiysrKsH379mZl02q10Gg0KC8vh7u7u+k//C1avycLr3x/EgNDvfD5zCjRcYiIiKxKc7+/zT4np7y8cTM7Ly8vAEBqairq6+sRGxtraNO5c2e0b98eKSkpAICUlBR069bNUOAAQFxcHLRaLU6cOGFoc/V7NLVpeo/rqa2thVarNXpYo4Q0HshJRETUUmYtcvR6PebNm4fBgweja9euAIC8vDw4ODjAw8PDqK2/vz/y8vIMba4ucJquN137szZarRaXL1++bp6lS5dCo9EYHkFBQS3+jKZWXdeA3zKLAXDpOBERUUuYtciZM2cOjh8/js8//9ycv6bZFi1ahPLycsMjJydHdKRrJKcXo65Bj3aeTgj3cxUdh4iIyGbZmeuN586di61btyIpKQnt2rUzvB4QEIC6ujqUlZUZ3c3Jz89HQECAoc2+ffuM3q9p9dXVbf64Iis/Px/u7u5wcnK6bia1Wg212rqPR0i4sqpqRGc/KBRcOk5ERHSrTH4nR5IkzJ07F19//TUSEhIQEhJidL1Pnz6wt7dHfHy84bW0tDRkZ2cjKqpxkm1UVBSOHTuGgoICQ5sdO3bA3d0dkZGRhjZXv0dTm6b3sEWSJGHnaS4dJyIiMgWT38mZM2cONm7ciG+//RZubm6GOTQajQZOTk7QaDSYPn065s+fDy8vL7i7u+PJJ59EVFQUBg4cCAAYNWoUIiMj8cgjj2DZsmXIy8vDiy++iDlz5hjuxMyaNQsrV67EggULMG3aNCQkJOCLL77Atm3bTP2RLCYtvwK55TVwtFciKsxbdBwiIiKbZvI7OatXr0Z5eTmGDx+ONm3aGB6bN282tHnnnXcwduxY3HvvvYiOjkZAQAC2bNliuK5SqbB161aoVCpERUXh4YcfxuTJk7FkyRJDm5CQEGzbtg07duxAjx498NZbb2Ht2rWIi4sz9UeymKZdjgeF+cDRXiU4DRERkW0z+z451sza9sn5vzXJ2H+uFK/dfRseieogOg4REZFVspp9cqh5yqvrkXq+FAAQw6XjRERELcYix0rsOlsIvQR08ndFO09n0XGIiIhsHoscK5HYtKqKd3GIiIhMgkWOFdDpJew6w6MciIiITIlFjhU4cqEMJVV1cHO0Q59gT9FxiIiIZIFFjhVoGqqK7uQLexX/LyEiIjIFfqNagQTuckxERGRyLHIEy9fW4ESuFgoFMDzCV3QcIiIi2WCRI9jOKwdydm/nAR9X6z48lIiIyJawyBGsaahqBIeqiIiITIpFjkB1DXrsPlsEAIjpzKEqIiIiU2KRI9D+cyWoqtPBx1WNroEa0XGIiIhkhUWOQL+vqvKFUqkQnIaIiEheWOQIxKMciIiIzIdFjiDniqqQWVQFO6UCQzr6iI5DREQkOyxyBEm8snS8XwcvuDvaC05DREQkPyxyBDEsHedQFRERkVmwyBGguq4BezNLAHDpOBERkbmwyBFgT3ox6nR6BHk5IczXVXQcIiIiWWKRI8DVuxwrFFw6TkREZA4scixMkiTDeVXDOR+HiIjIbFjkWNjpvApcKq+Bo70SUaHeouMQERHJFoscC2saqhoc5gNHe5XgNERERPLFIsfCmnY55lAVERGRebHIsaCy6joczC4FwP1xiIiIzI1FjgXtOlMIvQRE+LuhrYeT6DhERESyxiLHgnggJxERkeWwyLEQnV7CrjOFAICYCO5yTEREZG4scizkcE4ZSqvr4e5ohz7BnqLjEBERyR6LHAtpGqqK7uQLOxW7nYiIyNz4bWshTfvjxERwPg4REZElsMixgLzyGpy8pIVCAQznfBwiIiKLYJFjAU1nVfVo5wFvV7XgNERERK0DixwLMJw6zqXjREREFsMix8xqG3TYnV4EgPNxiIiILIlFjpntzypFdZ0Ovm5q3BboLjoOERFRq8Eix8x+X1XlC6VSITgNERFR68Eix8wS07h0nIiISAQWOWaUVVSFrKIq2KsUGNLRR3QcIiKiVoVFjhk17XLcr4MX3BztBachIiJqXVjkmFHTUBWXjhMREVkeixwzqaptwN7MEgDAcM7HISIisjgWOWayJ70IdTo92ns5I8zXRXQcIiKiVodFjplcPVSlUHDpOBERkaWxyDEDSZKQeLoQAA/kJCIiEsXmi5z3338fHTp0gKOjIwYMGIB9+/aJjoRTlyqQp62Bk70KA0O9RcchIiJqlWy6yNm8eTPmz5+Pl19+GQcPHkSPHj0QFxeHgoICobmahqoGh3vD0V4lNAsREVFrZdNFzttvv43HHnsMU6dORWRkJNasWQNnZ2d89NFHQnMZjnLg0nEiIiJhbLbIqaurQ2pqKmJjYw2vKZVKxMbGIiUl5bo/U1tbC61Wa/Qwteq6Bpy61Pi+XDpOREQkjs0WOUVFRdDpdPD39zd63d/fH3l5edf9maVLl0Kj0RgeQUFBJs/l7GCH1Bdvx8bHBqCth5PJ35+IiIiax2aLnFuxaNEilJeXGx45OTlm+T1ODioMCuNZVURERCLZiQ5wq3x8fKBSqZCfn2/0en5+PgICAq77M2q1Gmq12hLxiIiISDCbvZPj4OCAPn36ID4+3vCaXq9HfHw8oqKiBCYjIiIia2Czd3IAYP78+ZgyZQr69u2L/v37491330VVVRWmTp0qOhoREREJZtNFzgMPPIDCwkIsXrwYeXl56NmzJ7Zv337NZGQiIiJqfRSSJEmiQ4ii1Wqh0WhQXl4Od3d30XGIiIioGZr7/W2zc3KIiIiI/gyLHCIiIpIlFjlEREQkSyxyiIiISJZY5BAREZEsscghIiIiWWKRQ0RERLLEIoeIiIhkyaZ3PG6ppn0QtVqt4CRERETUXE3f23+1n3GrLnIqKioAAEFBQYKTEBER0c2qqKiARqO54fVWfayDXq9Hbm4u3NzcoFAoTPa+Wq0WQUFByMnJ4XERZsR+thz2tWWwny2D/WwZ5uxnSZJQUVGBwMBAKJU3nnnTqu/kKJVKtGvXzmzv7+7uzv+ALID9bDnsa8tgP1sG+9kyzNXPf3YHpwknHhMREZEsscghIiIiWWKRYwZqtRovv/wy1Gq16Ciyxn62HPa1ZbCfLYP9bBnW0M+teuIxERERyRfv5BAREZEsscghIiIiWWKRQ0RERLLEIoeIiIhkiUUOEf0lSZKg0+lExyAiuiksclroj3/x7927F0lJSaivrxeUSL7Y1+bX0NCAF198EcOGDcPLL78MAFi+fDlcXV3h7OyMKVOmoK6uTnBKeZAkCVlZWWhoaAAA1NXVYfPmzfjkk09QVFQkOJ18sJ/Nr7i4GImJiSgpKQEAFBUV4c0338SSJUtw6tQpseEkuiW5ubnS4MGDJZVKJUVHR0slJSXSmDFjJIVCISkUCqlTp05Sbm6u6JiywL62nBdffFHy9/eX5s+fL0VGRkqzZs2SgoKCpE8//VTasGGD1LZtW+nNN98UHdPmnT59WgoODpaUSqUUHh4uZWZmSn369JFcXFwkZ2dnycfHRzpz5ozomDaP/Wx+e/fulTQajaRQKCRPT0/pwIEDUkhIiNSxY0cpLCxMcnJyklJTU4Xl452cW7Rw4UJIkoSvv/4abdq0wdixY6HVapGTk4Nz587B19cX//jHP0THlAX2teVs3LgRa9euxVtvvYVvv/0WH374IZYvX45JkyZh8uTJePvtt/Hf//5XdEybt3DhQvTo0QOHDx/G2LFjMWbMGLRr1w6lpaUoKSlBVFQUlixZIjqmzWM/m9/f//53/N///R/Ky8vxt7/9DePHj8fIkSNx5swZpKenY+LEiXjttdfEBRRWXtm4Nm3aSCkpKZIkSVJxcbGkUCikX375xXA9Pj5eCg0NFRVPVtjXluPo6ChlZ2cbPT916pTheWZmpuTm5iYimqz4+vpKhw4dkiRJkiorKyWFQiH9+uuvhut79uyR2rdvLyidfLCfzc/T01M6efKkJEmSVFdXJymVSmnv3r2G66mpqVLbtm1FxeOdnFtVWlqKtm3bAgC8vLzg7OyM4OBgw/Xw8HBcunRJVDxZYV9bjkajQVlZmeF579694ebmZnheW1sLhUIhIJm8VFZWwsvLCwDg4uICFxcXtGnTxnA9KCgI+fn5ouLJBvvZ/Orq6uDk5AQAsLe3h7OzM3x8fAzXfXx8UFxcLCoeJx7fKj8/P6Mv1rlz5xr+YwIav5hdXFxERJMd9rXlREZG4uDBg4bne/bsMRSYAHDs2DF07NhRRDRZCQwMRHZ2tuH5smXL4OfnZ3heWFgIT09PEdFkhf1sfkFBQcjMzDQ8//zzz40KyUuXLhkVPZbGIucW9ezZEykpKYbnb7zxhtEX7+7du9G9e3cR0WSHfW05a9asQXR09A2v19fXY8GCBRZMJE+xsbE4ffq04fkTTzxhdMfs559/Ru/evUVEkxX2s/lNnDgRBQUFhudjxowx3NkBgO+++w79+/cXEQ0AD+g0m3379sHZ2Rldu3YVHUX22NckN1lZWXB0dDT6FzGZHvvZ/Kqrq6FSqYSdRM4ih4iIiGSJw1UtdOHCBVRWVl7zen19PZKSkgQkki/2tfk1DUeFh4ejf//++Oijj4yu5+fnQ6VSCUonL5cvX8bu3btx8uTJa67V1NTgk08+EZBKftjP5nfp0iV8+umn+OGHH67ZLLSqqkrsMn1h67psXG5urtSvXz9JqVRKKpVKeuSRR6SKigrD9by8PEmpVApMKB/sa8t5+eWXJX9/f2n58uXS3//+d0mj0UgzZ840XM/Ly5MUCoXAhPKQlpYmBQcHSwqFQlIqlVJ0dLTRhpb8M20a7Gfz27dvn+Th4SG5u7tLTk5OUnh4uHT8+HHDddF9zDs5t+iFF16AUqnE3r17sX37dpw8eRIxMTEoLS01tJE4EmgS7GvL+eyzz7B27Vo899xzeP3113HgwAEkJCRg6tSphj7mEvKWW7hwIbp27YqCggKkpaXBzc0NgwcPNloJRC3Hfja/v/3tb7jnnntQWlqK/Px83H777Rg2bBgOHTokOlojYeWVjQsMDDTa8KimpkYaN26c1LNnT6m4uFh49Son7GvLcXJykrKysoxeu3DhgtSpUydp0qRJ0sWLF9nXJuDn5ycdPXrU8Fyv10uzZs2S2rdvL2VkZPDPtImwn83P09NTSktLM3pt6dKlkqenp7Rv3z7hfcw7ObeovLzcaH8FtVqNLVu2oEOHDoiJiTFaUkctw762nICAAGRkZBi91rZtWyQmJmL//v149NFHxQSTmcuXL8POzs7wXKFQYPXq1Rg3bhyGDRuGM2fOCEwnH+xny6ipqTF6/sILL+Bvf/sbRo0aheTkZEGpGrHIuUWhoaE4evSo0Wt2dnb48ssvERoairFjxwpKJj/sa8sZMWIENm7ceM3rgYGBSEhIQFZWloBU8tO5c2ccOHDgmtdXrlyJu+++G3fddZeAVPLDfja/rl27XreQee6557Bo0SI8+OCDAlL9jkXOLbrzzjvx4YcfXvN605dvz549LR9KptjXlvPSSy/h/vvvv+61tm3bYteuXdesuKKbd88992DTpk3XvbZy5Uo8+OCDnGdmAuxn85s8eTL27Nlz3WsLFizAq6++ivbt21s41e+4T84tamhoQHV1Ndzd3W94/eLFi0ZnLNGtYV8TEdGtYJFDREbq6urwzTffICUlBXl5eQAa5+oMGjQId999NxwcHAQnlJ/a2loAELYrbGvBfjav8vJyo78zNBqN4EQcrmqRkydPYvbs2ejVqxfatGmDNm3aoFevXpg9e/Z1N56iW8e+toz09HR06dIFU6ZMwaFDh6DX66HX63Ho0CFMnjwZt912G9LT00XHlIUdO3Zg9OjR8PT0hLOzM5ydneHp6YnRo0fjl19+ER1PNtjP5rd27VpERkbCy8sLkZGRRv973bp1QrPxTs4t+vHHHzF+/Hj07t0bcXFx8Pf3B9C4I+yOHTuQmpqKb7/9FnFxcYKT2j72teXcfvvtcHFxwSeffHLN8KBWq8XkyZNx+fJl/PTTT4ISysOGDRswY8YM3Hfffdf8mf7555/x1VdfYd26dXjkkUcEJ7Vt7GfzW758OV555RU89dRT1+3jFStW4JVXXsFzzz0nJqCwxes2rnv37tJLL710w+svv/yy1K1bNwsmki/2teU4OTlJx44du+H1o0ePSk5OThZMJE8dO3aUVq5cecPr77//vhQeHm7BRPLEfja/9u3bS5s3b77h9c8//1wKCgqyYCJjHK66RWfOnMGkSZNueP3BBx/E2bNnLZhIvtjXluPh4YFz587d8Pq5c+fg4eFhsTxylZ2djdjY2BteHzlyJC5cuGDBRPLEfja/goICdOvW7YbXu3XrhqKiIgsmMsYi5xZ16NAB27Ztu+H1bdu2cbWPibCvLWfGjBmYPHky3nnnHRw9ehT5+fnIz8/H0aNH8c477+DRRx/FzJkzRce0ebfddtufzlX46KOPEBkZacFE8sR+Nr9+/frhjTfeQENDwzXXdDod3nzzTfTr109Askack3OLvvzySzz00EO48847ERsbazQOGR8fj+3bt2Pjxo249957BSe1fexry3rzzTfx3nvvIS8vz3BOlSRJCAgIwLx587BgwQLBCW3fzp07MXbsWISGhl73z3RmZia2bduG6OhowUltG/vZ/I4ePYq4uDjU19cjOjraqI+TkpLg4OCAn3/+GV27dhWSj0VOCyQnJ2PFihXXLLWNiorC008/jaioKMEJ5YN9bXlZWVlGfR0SEiI4kbycO3cOq1evxm+//XbNn+lZs2ahQ4cOYgPKBPvZ/CoqKvDpp59et48feuihG+5xZgkscoiIiEiWOCeHiIxcunQJn376KX744QfU1dUZXauqqsKSJUsEJSMiujksclrghx9+wIwZM7BgwQKcOnXK6FppaSlGjBghKJn8sK8tY//+/YiMjMScOXNw33334bbbbsOJEycM1ysrK/Hqq68KTCgfq1atQmxsLO6//37Ex8cbXSsqKkJoaKigZPLCfjav+vp6LFiwAOHh4ejfv/81Z9vl5+dDpVIJSsci55Zt3LgRd911F/Ly8pCSkoLevXvjs88+M1yvq6vDrl27BCaUD/a15fztb3/DPffcg9LSUuTn5+P222/HsGHDcOjQIdHRZGXFihV4/vnn0blzZ6jVaowePRpLly41XNfpdDh//rzAhPLAfja/f/zjH/jkk08wa9YsjBo1CvPnz8fjjz9u1EborBhhO/TYuJ49e0rvvfee4fnmzZslFxcXae3atZIkSVJeXp6kVCpFxZMV9rXleHp6SmlpaUavLV26VPL09JT27dvHvjaRyMhI6bPPPjM837Nnj+Tr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2hVHjhxBSEgIBgwYgGXLlsHBwQEffvghQkNDRceTrZqaGjg6OoqOQUREVox3clroxRdfhF6vBwC8+uqryMrKwtChQ/HDDz/gvffeE5xOXnQ6HV577TW0bdsWrq6uyMzMBAC89NJLWLduneB0RERkbTgnxwxKSkrg6enJE5tNbMmSJdiwYQOWLFmCxx57DMePH0doaCg2b96Md999FykpKaIjEhGRFWGRc4smTJjwl23s7OwQEBCA22+/HePGjbNAKnkLDw/HBx98gJEjR8LNzQ1HjhxBaGgoTp8+jaioKJSWloqOSEREVoTDVbdIo9H85cPJyQlnz57FAw88gMWLF4uObPMuXrx43dPe9Xo96uvrBSQiIiJrxonHt+hmtrXfunUrZs+efc1xBHRzIiMj8euvv15zHthXX32FXr16CUpFRETWikWOBQwZMgR9+/YVHcPmLV68GFOmTMHFixeh1+uxZcsWpKWl4ZNPPsHWrVtFxyMiIivDOTlkU3799VcsWbIER44cQWVlJXr37o3Fixdj1KhRoqMREZGVYZFDVi8zMxMhISFcrUZERDeFE4/J6nXs2BGFhYWG5w888ADy8/MFJiIiIlvAIoes3h9vNv7www+oqqoSlIaIiGwFixwiIiKSJRY5ZPUUCsU183E4P4eIiP4Kl5CT1ZMkCY8++ijUajWAxsM5Z82aBRcXF6N2W7ZsERGPiIisFIscsnpTpkwxev7www8LSkJERLaES8iJiIhIljgnh4iIiGSJRQ4RERHJEoscIiIikiUWOURERCRLLHKIiIhIlljkEBERkSyxyCEiIiJZYpFDREREsvT/vgwdO8idYIQAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(timeline['time'],timeline['message'])\n", "plt.xticks(rotation = 'vertical')" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "df['only_date'] = df['date'].dt.date" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "daily_timeline = df.groupby(['only_date']).count()['message'].reset_index()" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
only_datemessage
362023-03-091744
652023-04-081602
592023-04-021216
122023-02-121192
582023-04-01963
\n", "
" ], "text/plain": [ " only_date message\n", "36 2023-03-09 1744\n", "65 2023-04-08 1602\n", "59 2023-04-02 1216\n", "12 2023-02-12 1192\n", "58 2023-04-01 963" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "top_5_days = daily_timeline.nlargest(5, 'message')\n", "top_5_days" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "def upper(text):\n", " return text.upper()\n" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "text = input()\n", "print(upper(text))" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
usermessageyearmonthdayhourminuteonly_date
1saqquHie2023January2716142023-01-27
2MINE ❤️Call2023January2717102023-01-27
3saqqu6 bje sweetheart abhi sb hai2023January2717102023-01-27
4saqqubataye the na2023January2717102023-01-27
5MINE ❤️Mtt kr then2023January2717102023-01-27
...........................
41241MINE ❤️Good night returns2023June82102023-06-08
41242MINE ❤️😂😂2023June82102023-06-08
41243saqqugoodnight finale😂2023June82102023-06-08
41244MINE ❤️Insta prr2023June82112023-06-08
41245MINE ❤️Message krna2023June82112023-06-08
\n", "

41245 rows × 8 columns

\n", "
" ], "text/plain": [ " user message year month day hour \n", "1 saqqu Hie 2023 January 27 16 \\\n", "2 MINE ❤️ Call 2023 January 27 17 \n", "3 saqqu 6 bje sweetheart abhi sb hai 2023 January 27 17 \n", "4 saqqu bataye the na 2023 January 27 17 \n", "5 MINE ❤️ Mtt kr then 2023 January 27 17 \n", "... ... ... ... ... ... ... \n", "41241 MINE ❤️ Good night returns 2023 June 8 2 \n", "41242 MINE ❤️ 😂😂 2023 June 8 2 \n", "41243 saqqu goodnight finale😂 2023 June 8 2 \n", "41244 MINE ❤️ Insta prr 2023 June 8 2 \n", "41245 MINE ❤️ Message krna 2023 June 8 2 \n", "\n", " minute only_date \n", "1 14 2023-01-27 \n", "2 10 2023-01-27 \n", "3 10 2023-01-27 \n", "4 10 2023-01-27 \n", "5 10 2023-01-27 \n", "... ... ... \n", "41241 10 2023-06-08 \n", "41242 10 2023-06-08 \n", "41243 10 2023-06-08 \n", "41244 11 2023-06-08 \n", "41245 11 2023-06-08 \n", "\n", "[41245 rows x 8 columns]" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_df" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SendermessageDate
1saqquHie2023-01-27
\n", "
" ], "text/plain": [ " Sender message Date\n", "1 saqqu Hie 2023-01-27" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "first_last_msg = df.drop(columns=['date','month_num'], axis=1)[1:]\n", "first_last_msg[['user','message','only_date']].head(1).rename(columns={'user':'Sender','only_date':'Date'})" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['user', 'message', 'year', 'month', 'day', 'hour', 'minute',\n", " 'only_date'],\n", " dtype='object')" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "first_last_msg.columns" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SenderDate
41245MINE ❤️2023-06-08
\n", "
" ], "text/plain": [ " Sender Date\n", "41245 MINE ❤️ 2023-06-08" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "first_last_msg[['user','only_date']].tail(1).rename(columns={'user':'Sender','only_date':'Date'})" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }