File size: 103,755 Bytes
f5e88ed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "id": "0N_aoZZc8idM",
    "outputId": "707308cb-1c0f-4563-97ec-82a1b7e5f47c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: transformers in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (4.49.0)\n",
      "Requirement already satisfied: seaborn in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (0.13.2)\n",
      "Requirement already satisfied: accelerate in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (1.4.0)\n",
      "Requirement already satisfied: datasets in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (3.3.2)\n",
      "Requirement already satisfied: filelock in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (3.17.0)\n",
      "Requirement already satisfied: huggingface-hub<1.0,>=0.26.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (0.29.1)\n",
      "Requirement already satisfied: numpy>=1.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (1.26.4)\n",
      "Requirement already satisfied: packaging>=20.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (24.2)\n",
      "Requirement already satisfied: pyyaml>=5.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (6.0.2)\n",
      "Requirement already satisfied: regex!=2019.12.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (2024.11.6)\n",
      "Requirement already satisfied: requests in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (2.32.3)\n",
      "Requirement already satisfied: tokenizers<0.22,>=0.21 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (0.21.0)\n",
      "Requirement already satisfied: safetensors>=0.4.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (0.5.3)\n",
      "Requirement already satisfied: tqdm>=4.27 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (4.67.1)\n",
      "Requirement already satisfied: pandas>=1.2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from seaborn) (2.1.4)\n",
      "Requirement already satisfied: matplotlib!=3.6.1,>=3.4 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from seaborn) (3.8.2)\n",
      "Requirement already satisfied: psutil in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from accelerate) (7.0.0)\n",
      "Requirement already satisfied: torch>=2.0.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from accelerate) (2.2.1+cu121)\n",
      "Requirement already satisfied: pyarrow>=15.0.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from datasets) (19.0.1)\n",
      "Requirement already satisfied: dill<0.3.9,>=0.3.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from datasets) (0.3.8)\n",
      "Requirement already satisfied: xxhash in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from datasets) (3.5.0)\n",
      "Requirement already satisfied: multiprocess<0.70.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from datasets) (0.70.16)\n",
      "Requirement already satisfied: fsspec<=2024.12.0,>=2023.1.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from fsspec[http]<=2024.12.0,>=2023.1.0->datasets) (2024.12.0)\n",
      "Requirement already satisfied: aiohttp in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from datasets) (3.11.13)\n",
      "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (2.4.6)\n",
      "Requirement already satisfied: aiosignal>=1.1.2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (1.3.2)\n",
      "Requirement already satisfied: async-timeout<6.0,>=4.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (5.0.1)\n",
      "Requirement already satisfied: attrs>=17.3.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (25.1.0)\n",
      "Requirement already satisfied: frozenlist>=1.1.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (1.5.0)\n",
      "Requirement already satisfied: multidict<7.0,>=4.5 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (6.1.0)\n",
      "Requirement already satisfied: propcache>=0.2.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (0.3.0)\n",
      "Requirement already satisfied: yarl<2.0,>=1.17.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (1.18.3)\n",
      "Requirement already satisfied: typing-extensions>=3.7.4.3 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from huggingface-hub<1.0,>=0.26.0->transformers) (4.12.2)\n",
      "Requirement already satisfied: contourpy>=1.0.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (1.3.1)\n",
      "Requirement already satisfied: cycler>=0.10 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (0.12.1)\n",
      "Requirement already satisfied: fonttools>=4.22.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (4.56.0)\n",
      "Requirement already satisfied: kiwisolver>=1.3.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (1.4.8)\n",
      "Requirement already satisfied: pillow>=8 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (11.1.0)\n",
      "Requirement already satisfied: pyparsing>=2.3.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (3.2.1)\n",
      "Requirement already satisfied: python-dateutil>=2.7 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (2.9.0.post0)\n",
      "Requirement already satisfied: pytz>=2020.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from pandas>=1.2->seaborn) (2025.1)\n",
      "Requirement already satisfied: tzdata>=2022.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from pandas>=1.2->seaborn) (2025.1)\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->transformers) (3.4.1)\n",
      "Requirement already satisfied: idna<4,>=2.5 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->transformers) (3.10)\n",
      "Requirement already satisfied: urllib3<3,>=1.21.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->transformers) (2.3.0)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->transformers) (2025.1.31)\n",
      "Requirement already satisfied: sympy in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (1.13.3)\n",
      "Requirement already satisfied: networkx in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (3.4.2)\n",
      "Requirement already satisfied: jinja2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (3.1.5)\n",
      "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (12.1.105)\n",
      "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (12.1.105)\n",
      "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (12.1.105)\n",
      "Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (8.9.2.26)\n",
      "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (12.1.3.1)\n",
      "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (11.0.2.54)\n",
      "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (10.3.2.106)\n",
      "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (11.4.5.107)\n",
      "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (12.1.0.106)\n",
      "Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (2.19.3)\n",
      "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (12.1.105)\n",
      "Requirement already satisfied: triton==2.2.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch>=2.0.0->accelerate) (2.2.0)\n",
      "Requirement already satisfied: nvidia-nvjitlink-cu12 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=2.0.0->accelerate) (12.8.61)\n",
      "Requirement already satisfied: six>=1.5 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib!=3.6.1,>=3.4->seaborn) (1.17.0)\n",
      "Requirement already satisfied: MarkupSafe>=2.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from jinja2->torch>=2.0.0->accelerate) (3.0.2)\n",
      "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from sympy->torch>=2.0.0->accelerate) (1.3.0)\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "pip install transformers seaborn accelerate datasets "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "id": "cw0_yg1N8idU"
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "from transformers import DistilBertTokenizer, DistilBertForSequenceClassification, Trainer, TrainingArguments\n",
    "import torch\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "id": "TZsG_m5A8idW",
    "outputId": "058be4b2-4846-4bb5-803a-908991d3406c"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>label</th>\n",
       "      <th>text</th>\n",
       "      <th>label_text</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>I got 'new' tires from them and within two wee...</td>\n",
       "      <td>1 star</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>Don't waste your time.  We had two different p...</td>\n",
       "      <td>1 star</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>All I can say is the worst! We were the only 2...</td>\n",
       "      <td>1 star</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>I have been to this restaurant twice and was d...</td>\n",
       "      <td>1 star</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>Food was NOT GOOD at all! My husband &amp; I ate h...</td>\n",
       "      <td>1 star</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   label                                               text label_text\n",
       "0      0  I got 'new' tires from them and within two wee...     1 star\n",
       "1      0  Don't waste your time.  We had two different p...     1 star\n",
       "2      0  All I can say is the worst! We were the only 2...     1 star\n",
       "3      0  I have been to this restaurant twice and was d...     1 star\n",
       "4      0  Food was NOT GOOD at all! My husband & I ate h...     1 star"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "splits = {'train': 'train.jsonl', 'test': 'test.jsonl'}\n",
    "# df= pd.read_json(\"hf://datasets/SetFit/yelp_review_full/\"+ splits[\"train\"],lines=True)\n",
    "df= pd.read_json(\"hf://datasets/SetFit/yelp_review_full/\"+ splits[\"test\"],lines=True)\n",
    "# df = pd.concat([train, test])\n",
    "# Display the first few rows of the dataset\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "id": "wSPmd46I8idX"
   },
   "outputs": [],
   "source": [
    "df['count'] = df['text'].apply(lambda x: len(x.split()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "id": "trUolmbT8idY",
    "outputId": "250e9be2-1235-4cb6-dc33-193aba44f8ce"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x1000 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfsAAAILCAYAAADv8TVWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUw0lEQVR4nO3deVhU5eIH8O8wwDCI7DKIAeKSIq6JC+4LgaS26C01UyvTq2E3s2tmuWdZVraS3jaXm6ZZ2uKOuBuaoqioWRY2uIApsiiIMLy/P/ydc2eYGdaBgcP38zzzPMw57znnPWeG+Z7lPe9RCSEEiIiISLEc7F0BIiIiql4MeyIiIoVj2BMRESkcw56IiEjhGPZEREQKx7AnIiJSOIY9ERGRwjHsiYiIFI5hT0REpHAMextYsWIFVCoVmjZtau+q1GsXLlyASqWCSqXChQsX7F0duzp16hQee+wxNG7cGI6OjlCpVOjYsaO9q1WrNG3aFCqVCitWrLB3VSps3rx5UKlU6Nevn72rYtGePXvk/8WS6srvZb9+/aBSqTBv3jx7V8Um6n3YS1/Iyrzqyo+E9KOmUqnw8MMPl1pW+hGp7f+IZF1qaip69uyJ9evXIz09HR4eHtDpdPD19S1z2n/84x9QqVRo27ZtqeW6d+8uf6f27NljtdzatWvlcufOnavoqiiKFB7GL0dHR3h5eaFp06aIiorCjBkzcODAgRqv2549ezBv3rw685tWFd9//z3mzZuH77//3t5VqVH1Pux1Op3FV4MGDcoso9Vq7Vjzyvnhhx+QmJho72pQNfrPf/6D3NxctGjRAhcvXsT169eRnp6OnTt3ljlt//79AQBnzpzB33//bbFMbm4ukpKS5Pelhf3u3bsBAAEBAWjVqlUF1kK5nJyc5N8QX19f3LlzB3/99Rfi4+OxePFi9O7dG23atMHevXutzsPX1xetWrVCUFCQTeq0Z88ezJ8/32Zh7+rqilatWtXKz/z777/H/Pnzywz7oKAgtGrVqlw7yXWBo70rYG/p6ekWh8+bNw/z588vtUxdNWPGDOzbt8/e1aBqcurUKQDAQw89hCZNmlRoWinshRDYu3cv/vGPf5iVOXDgAIqKiuDv74/09PRSw14aJ82XgB49ephts/z8fBw/fhzfffcdPv/8c5w9exb9+/fHJ598gkmTJpnNY8qUKZgyZUoN1bjiunbtil9//dXe1aiSVatW2bsKNlXvj+zrk8GDB0OlUmH//v3YtGmTvatD1SQvLw8A4ObmVuFp27RpA51OB+B/R+UlSUEVGxuLBg0a4NChQ7h9+7ZZucuXL+O3334DwLAvi1arRY8ePfDuu+/i5MmTaN++PYQQmDJlCvbv32/v6pECMOyrQVJSktw4SqPRoFmzZpg2bRpu3LhR6nS5ubl48803ERERAW9vb2g0GgQGBmLkyJE2OfUeHh4uH6m98sorKC4urtD05WkUVFrDnJLT//jjjxg4cCB8fHzg7u6OHj16mJ1a++9//4uePXvCy8sLbm5u6NOnDxISEspV399//x1PPvkk7rnnHmg0GgQFBWHSpEm4fPlyqdMVFxdj9erVeOCBB6DT6eDs7IxGjRohKioKX3/9Naw9Fdq4wdfNmzcxZ84ctGvXDg0bNqxUo8E//vgDkydPRsuWLaHVauHu7o777rsPCxYsQE5OjtXlS2E8f/58k+vDpR2BG5M+H2vlpeGRkZHo0aMHCgoKLH4/jacvGfa3b9/G+++/jx49esDLywsuLi4IDg7G2LFjkZycbLVuFdnG+fn5WLhwIdq0aQOtVgs/Pz888MAD5fr+3LhxA3PmzMF9990Hd3d3ODs7w9/fH+3bt8ekSZPK/R2sjODgYPzwww9o0KABDAYDXnnlFbMyZf0vbt++HcOGDcM999wDZ2dnuLu7o1mzZoiKisI777yDzMxMAP9r1Cqdxdy7d2+pbZOMG60VFhbi3XffRXh4ODw9PU2+Y6X9DpQUHx+PmJgYNGrUCFqtFmFhYVi4cKHFHUgAePLJJ6FSqfDkk09anaelRoBSnVauXAkAWLlypdm6Gn9ny9NAb8OGDRgyZIj8O6HT6TBkyBBs3LjR6jQl6//tt9+iX79+8Pb2hqurKzp27IgPPvigwr/PZRJk0dy5cwUAUZ5NtHz5cgFABAcHi9WrVwsnJycBQHh4eAgHBwd5PmFhYSI3N9fiPI4fPy7uueceuaxarRYNGzaU36tUKvHGG29Ual2Cg4MFADF37lzx22+/CUdHRwFArFy50up6BwcHWx3Xt29fq8vavXu31e1mPP2cOXMEAOHg4CA8PDzkaQCIZcuWieLiYjFu3DgBQDg6OppsC7VaLTZt2mQ2/9TUVLnM2rVr5Wnc3NyEVquVx3l7e4ukpCSL9b9+/bro06ePSX1K1u/BBx8UBQUFVrfzO++8I+69914BQDg7OwtPT08BQKSmplrdbiWtW7dOaDQaeZkNGzY0eR8YGCjOnDljMk14eLjQ6XTy969BgwZCp9PJr4MHD5Zr2cuWLZOXk5GRYTIuJydHODo6igYNGojCwkKxcOFCAUDMmTPHbD4TJkwQAERQUJDJ8IsXL4q2bdvKy3BycjLZxg4ODuLDDz+0WLfybuPr16+LTp06yfN0dHSUy6hUKvHJJ5/I81q+fLnJMtLS0kRQUJBJfby8vIRarZaHlfY/YE3fvn0rNG1sbKy8vD/++MNkXGn/i/Pnzzf5vrq6ugo3NzeTYbt37xZCCKHX64VOpxMNGjSQPwvj74xOpxNr1641W4cZM2aIHj16yNvWy8tLqFQqeb6l/Q4Y/17GxcUJlUolAAhPT0/5twmA6NSpk8jMzDSbXvpdGDdunNVtZ7wMycGDB4VOpxMuLi4CgHBxcTFbV+P/EWld586dazb/goICMWLECLPviPHv/ahRo8SdO3dKrb/0GTs4OMjfT+k1duxYq+tXGQx7KyoT9q6urkKj0YhnnnlG6PV6IYQQt27dEh9//LH8Azx79myz6S9fviz8/PwEADFs2DBx9OhR+UuSkZEhZs+eLf8TbNy4scLrYhz2QggxadIk+R/h9u3bFte7OsPew8NDqNVq8frrr4usrCwhxN0AiI6OloNtzpw5QqvVimXLlolbt24JIYT47bffRHh4uBwgBoPBZP7GYe/h4SHat28vDh8+LIQQori4WGzfvl3+EQ8KChI5OTkm0xcVFcn/4B07dhQ//fSTvOybN2+KlStXyp/T1KlTrW5nNzc34e/vLzZu3Ch/jmlpafK8ypKUlCR/X3r27ClOnjwphBDCYDCIH3/8UTRu3FgAEM2bN7e481jaj1R5nDt3Tt6O69atMxm3ZcsWAUBERUUJIYTYv3+/ACB69+5tNp8WLVqY/SgXFRWJbt26yZ/RV199Je84/fHHH2LIkCFyIG/ZssVsnuXdxo888ogAIDQajVi2bJnIz88XQghx4cIF8cgjjwgnJyfh6upqMezHjx8vAIimTZuKnTt3iqKiIrnuFy5cEEuXLhUzZsyo8HataNhL2xqA+PLLL03GWftfvHDhghw406ZNE5cuXZLHZWVlif3794tnn31WHD16tFzzs7YObm5uws3NTSxfvlzk5eUJIYS4du2auH79uhCifGHv6uoqnJycxKOPPir/Xubl5YmlS5fKO7aPPPKI2fSVDfuKTG+8rpb+j1588UX5ezp79mxx48YNIYQQmZmZ4pVXXpHX3dL3RFq+l5eXcHZ2FkuWLBHZ2dlCiLvb8JlnnpGnT0hIKLWOFcGwt6IyYV/aF2jatGkCgGjRooXZuKeffloAEI8//rjVZSxZskQAEB06dCjvKshKhv2VK1fkH7olS5aYlK2JsAcgFi5caDY+OztbPsIAIL766iuzMufPn5fH79+/32Sccdj7+PiYHZUKIcSZM2eEs7OzACAWL15sMm7VqlUCgGjdurW8E1LS0aNHhUqlEs7Ozmbzl7azWq0Wx44dszh9eQwaNEj+rljaQTh27Ji88/f222+bja9q2AshREBAgAAgJk+ebDL8pZdeEgDE66+/LoS4e4Sj1WqFs7Oz/KMvxN2dN+mzWLFihTx87dq18vDt27ebLbewsFDeGWjbtq3Z+PJs48OHD8vL+OKLL8zGFxUViV69esllSoZ9aGioACDWrFljfQNVQkXD/tKlS3IdX331VZNx1v4X161bJwCIe++9t0J1q2jYAxA//vij1XLlCXtpeSV32oUQ4vPPP5fL/PLLLybj7B32Fy9elP//Zs6caXFa6ffeyclJXL582eLyLX33JJ07dxYAxDPPPFNqHSuC1+xtbNasWRaHP/TQQwCA8+fPyw2ogLvXLtesWQPgbit5a8aOHQsAOHHiBDIyMqpUR39/f7zwwgsAgDfeeMPi9d/q5OLigqlTp5oNd3d3R0REBIC7t708/vjjZmWaN2+OFi1aAABOnjxpdRmTJk2Cn5+f2fDQ0FC53cLatWtNxn3xxRcAgMmTJ8PDw8PifDt37oywsDDcuXPHagO2QYMGoVOnTlbrVpqsrCxs374dADB9+nS4urqalenUqROGDRsGAPj6668rtZyySNfYS66j9F66Vuzs7Izu3bvjzp07+Pnnn83KGc8LANatWwcAiIiIQFRUlNlyHR0dMXfuXABASkqKfGdBSaVtY+lzDQwMxFNPPWU2Xq1WY/bs2RanBQBPT08AwJUrV6yWqQne3t7y39I19rJIdc/NzcWtW7eqo1oAgLCwMAwdOrTK85k1axYcHMxj6KmnnsI999wDwPz/1N6+++47FBUVwcXFBS+//LLFMrNmzYJGo0FhYSG+/fZbi2UCAwMxbtw4i+MefPBBAKX/xlUUw96GvL295SAqKSAgQP7buKFeUlKS3BAlKioK/v7+Fl9hYWHyNH/99VeV6zp9+nT4+Pjg2rVrePvtt6s8v4po06aNST8GxqSW4OHh4VYb90hlSmvwOGDAgDLHnTx5EoWFhQAAg8GAQ4cOAbjb+Mna5+Dv7y93DmPtc+jZs6fVZZfl2LFjcgPAyMhIq+Xuv/9+s3WwJSnMf/31V3nnMjc3F8eOHYOrqyu6dOkil+3bty8A0wZ50t/NmjUzuRf86NGjAEpft/79+0OtVpuUL6m0bSxNIzWwsqRPnz5wdLR85/GQIUMAAC+//DImTpyIbdu21fgOcWV17doVvr6+uHLlCrp164aPP/4Yv/76q9VGpZVVle+4xNHREb1797Y4zsHBQf4OWvsO2ItUny5dusDd3d1iGS8vL4SHh5uUL6lLly5Wv59SXpR3J688GPY21LBhQ6vjjH9YjH+cjVuGZ2RklPqSGJ8ZqCwPDw+5le97771Xo30JlGc7ladMaSFX2v3l0riioiL5nykzMxMFBQUA7u5ElPY5SMu19jlYOqNQXlevXi3XOkhHPcbrYEvGR+NScO/fvx8GgwE9evSAk5OTPL60sC+50yWtX2nr5uLiIndkYrw9jJW2jcu7DB8fH4vjpk+fjsceewyFhYX47LPPEBMTA09PT7Rr1w7Tp0+vsZ4AjT9Xa3UtydPTE19//TUaNWqE06dP47nnnkNoaCi8vLzw4IMP4quvvrLJzmFVvuMSX19faDQaq+Olz8/ad8BeyvP9Av73P2qt/lX9jasohr2dGQwG+e/8/HyIu+0oSn3Zqj/s2NhYBAUF4datW1iwYIFN5llXGX8OW7duLdfnYO2WHOmotC5r3rw5AgMDAfzvlLwU4FK4S7p37w6NRoNffvkFeXl5SEtLwx9//AGg+u6vr85t7OTkhHXr1iE5ORlz5szBgAED4OrqipSUFLzzzjsICwvDu+++W23Ll5w4cUL+u3nz5uWeLjIyEqmpqVi1ahXGjRuHli1bIjs7Gz/99BPGjBmDTp064dKlS1WqmxK+4/UNw97O/P395b9tcXq+IjQajRzyn3/+Oc6fP19qeWlv09r9rwCQnZ1tuwpWQWk/ZtI4R0dH+bqoj4+PvH41/TkYMz5iunjxotVy0jjjdbA1KaiN750GYLaz6eLigq5du8rX7Uu7v15av9LW7fbt27h+/bpJ+YqQpintO1BQUCAvw5oOHTpg/vz5SEhIQFZWFnbu3Ik+ffrAYDBg+vTpJmFcHTZv3iz/XdEd/AYNGmDMmDFYsWIFfvvtN1y8eBFvvfUWXFxc5CN+e7t27Rru3Lljdbz0+ZX8Dtj7d6g832Hj8bY4C2ILDHs769KlC5ydnQEAP/30U40vf8yYMWjbti0KCwvx6quvllrWy8sLAJCWlma1zOHDh21av8qy1njOeFz79u3l09FOTk7o2rUrAPt8DpL77rtPbrBUWsctUj/3HTp0MDmlbktSUJ87dw7nzp3DsWPHoNVq5e1kTDra3717t7x9W7VqhcaNG5uUk65jlrZue/bsQVFREQCYtA0oL2kZe/futXqtet++ffIyysPR0REDBw7E5s2bodFoIIQo17MGKuuvv/6SO7Pp27dvlR9M1aRJE7z00kt48cUXAdztyMaY9J2z9bX90hQVFVntHVD8f3fNwP8+T0lVf4equq7G1+Kt7VRkZWWZXNuvDRj2dtagQQO51flbb70FvV5fanlbX591cHDAG2+8AQBYv369yQNOSurQoQOAu+0MLP0zXb16FZ999plN61dZy5Ytw7Vr18yGnzt3Tm4dO2LECJNxEydOBABs2bIFW7ZsKXX+1XGdHLh7zTU6OhoA8Pbbb1tsF3DixAl89913AIBRo0ZVSz0A06PyhQsXwmAwICIiQt45NWZ83b60/vBHjhwJAEhMTMSOHTvMxhcVFclnm9q2bVvm0/cskT5XvV4v95ZmrLi4GAsXLrQ6vdR2wxKNRiOfwrbUitwW9Ho9HnzwQdy6dQtqtRqvv/56uactre4A5Id3lay71NAsKyurYpWtotdff91iT3ErV66Uw7zk/6n0O3TkyBGLgX/27Fls2LDB6jKruq7Dhw+Ho6Mjbt++jbfeestimTfeeAMFBQVwcnLC8OHDK7UcW2PY1wJvvPEGAgICcO3aNUREROC///0vcnNz5fF///03vvvuOzzyyCPV8uM+dOhQ9OrVC0KIUvvM79GjB4KDgwEA48aNw9GjRyGEQHFxMfbs2YN+/frZvovHSiosLMT999+PI0eOAIB8JBYdHY2CggIEBgaaPWDkiSeeQGRkJIQQeOSRR7Bw4UKTBpS3bt3C7t27ERsbi2bNmlVb3RcuXAgnJyecP38e0dHR8u1nxcXF2LJlCx544AEUFRWhefPm+Oc//1lt9QgODkZISAiA/93iV/J6vURqtHf48GGkpqYCsBz2w4cPR7du3QAAjz32GNasWSM3QkpNTcXw4cPlrncXL15cqXp369ZNvnVp8uTJ+Oyzz+QQ1Ov1GDFiBBITEy3e1iit98yZM3Ho0CGT8Dx//jxGjx6NvLw8ODg4yDtltnD79m0kJiZi+vTpaN++PU6ePAkHBwcsXbq0Qi3f33rrLcTExOC///2vyWnmgoICfPPNN/KdN4MHDzaZTtqpOn36tMktlNXJ1dUVBw4cwOOPPy7X9fbt2/j0008xefJkAHdvWS55Jmno0KFwc3NDYWEhHnvsMbnBZGFhIX744QdERkZavdsH+N+67t+/v1IP62nSpAmef/55AMCbb76JuXPnyjsOWVlZmD17trydp02bZnZ2y25sdse+wlS2u1xrjDt8sdRt6pkzZ+TuP4G73Sd6e3ubdDIDQERGRlZ4XUp2qmPJgQMHTJZjbV22bdsm9+6G/+8FS+p+smXLluLrr78us1Od0jruKE+HF9Y6uyitu1ypEyHgbrecR44csTjv7OxsuRc36eXu7i48PT3lbj2Bu12ElmSt+9XKWLt2rdz5j1QHaTsDlrvLldiiUx2J1OGT9Nq7d6/VshERESZlLXVqJMTdTknCwsLkcsbd3Urf/Q8++MDitOXdxteuXRMdOnSQ5+nk5GTSXW5cXJzVeRmvg9QNqvG2V6lU4r333it1+ZZIn0vJLmlLdmUL3O1ae9++fVbnZe1/yfh3C4DQarXC29vb5LsbGhoqrly5YjJdYWGhaNWqlVzGy8tLBAcHi+DgYLF+/XqzdSjru1Xe7nI//vhjuW5eXl4mvy0dOnQQ165dszj/zz//3GSdGjZsKP+/dO/eXXz88cdWf8cyMzNFo0aN5Gl9fX3ldU1MTCzXuhYUFIjHHnvM7HtS0e5yrSlPplQUj+xridDQUJw8eRL/+c9/EBUVBV9fX+Tk5EAIgRYtWuDRRx/Fp59+im+++aZalt+zZ0/5aKg00dHR2L9/P4YMGQIvLy8YDAYEBgbi5ZdfRlJSkkmDQ3vq1q0bjh49irFjx8LDwwNFRUVo0qQJJkyYgFOnTpldB5S4u7vjp59+wpYtWzBixAgEBQWhoKAAeXl5aNKkCaKiorBo0aJqv/1qxIgROH36NP75z3+iefPmKCgogKOjIzp27Ij58+cjJSUFoaGh1VoHwPTo3MXFRT4qt8T4qD8sLMxqw6QmTZrg6NGjWLJkCbp37w6tVou8vDwEBgZizJgxSEpKwr/+9a8q1dvHxwc///wz5s+fj9atW8PBwQGOjo4YNGgQ4uPj8eyzz1qddseOHZg5cyZ69+6NwMBA5OfnAwBatGiBp556CkeOHLHYKVR5FRYWyrdxXrt2DWq1GsHBwYiMjMRLL72EAwcOICUlxeo96KWZOHEiPv30U4waNQpt27aFq6srcnJy4OXlhd69e+P999/HsWPHzP5PHR0dkZCQgGeeeQYhISG4desW/vrrL/z111+4efNmpde1LLGxsdi+fTsGDRoEBwcHODg4oHXr1liwYAESExOt3nI4fvx4bN68GQMGDIC7uzuKiopw77334s0338TevXtLPbL38vLCvn37MHLkSDRp0gTZ2dnyupbW6M+Ys7Mz1q1bh2+//RYxMTHw8fFBbm4ufHx8EBMTgw0bNmDNmjXV1p6mMlRC1GCLDCIiIqpxPLInIiJSOIY9ERGRwjHsiYiIFI5hT0REpHAMeyIiIoVj2BMRESkcw74chBDyPe9ERER1DcO+HHJzc+Hh4WHShS0REVFdwbAnIiJSOIY9ERGRwjHsiYiIFI5hT0REpHAMeyIiIoVj2BMRESkcw56IiEjhGPZEREQKx7AnIiJSOIY9ERGRwjHsiYiIFI5hT0REpHAMeyIiIoVj2BMRESkcw56IiEjhGPZEREQKx7AnIiJSOIY9ERGRwjnauwL1kcFggF6vBwAEBQVBrVbbuUZERKRkPLK3A71ej/FxWzE+bqsc+kRERNWFR/Z24uqts3cViIionuCRPRERkcIx7ImIiBSOYU9ERKRwDHsiIiKFY9gTEREpHMOeiIhI4Rj2RERECsewJyIiUjiGPRERkcIx7ImIiBSOYU9ERKRwDHsiIiKFY9gTEREpHMOeiIhI4Rj2RERECsewJyIiUjiGPRERkcIx7ImIiBSOYU9ERKRwDHsiIiKFY9gTEREpHMOeiIhI4Rj2RERECudo7woomcFggF6vl98HBQVBrVbbsUZERFQfMeyrkV6vx/i4rXD11iEvMwNfxMYgJCTE3tUiIqJ6hmFfzVy9dXDzDbB3NYiIqB7jNXsiIiKFY9gTEREpHMOeiIhI4Rj2RERECsewJyIiUjiGPRERkcIx7ImIiBSO99nbkSg2IC0tTX7PHvaIiKg6MOztKD/rGl759jI8/f9mD3tERFRtGPZ2pvXyYw97RERUrXjNnoiISOEY9kRERArH0/jVQHq0bVpaGoSwd22IiKi+Y9hXA+nRtvnZ1+AW0MLe1SEionrOrqfxFy1ahC5duqBhw4bw8/PDww8/jHPnzpmUuX37NmJjY+Hj4wM3NzcMHz4cGRkZJmX0ej0GDx4MV1dX+Pn5Yfr06SgqKjIps2fPHtx3333QaDRo0aIFVqxYUa3r5uqtg9bDt1qXQUREVB52Dfu9e/ciNjYWhw4dQnx8PAoLCxEVFYVbt27JZV544QX89NNPWL9+Pfbu3YvLly9j2LBh8niDwYDBgwfjzp07+Pnnn7Fy5UqsWLECc+bMkcukpqZi8ODB6N+/P5KTkzF16lQ888wz2L59e42uLxERkT3Y9TT+tm3bTN6vWLECfn5+SEpKQp8+fZCdnY0vvvgCa9aswYABAwAAy5cvR2hoKA4dOoTu3btjx44dOHPmDHbu3AmdToeOHTvitddew4wZMzBv3jw4Oztj2bJlCAkJwbvvvgsACA0NxYEDB/Dee+8hOjq6xtebiIioJtWq1vjZ2dkAAG9vbwBAUlISCgsLERkZKZdp3bo1goKCkJiYCABITExEu3btoNPp5DLR0dHIycnB6dOn5TLG85DKSPMoqaCgADk5OSYvIiKiuqrWhH1xcTGmTp2Knj17om3btgCA9PR0ODs7w9PT06SsTqdDenq6XMY46KXx0rjSyuTk5CA/P9+sLosWLYKHh4f8CgwMtMk6EhER2UOtCfvY2FikpKRg7dq19q4KZs6ciezsbPll3H99TTAYDEhNTZVfBoOhRpdPRETKUituvZsyZQo2bdqEffv24Z577pGH+/v7486dO8jKyjI5us/IyIC/v79c5pdffjGZn9Ra37hMyRb8GRkZcHd3h1arNauPRqOBRqOxybpVhnTrnqu3jn3mExFRldn1yF4IgSlTpmDjxo3YtWuXWaB17twZTk5OSEhIkIedO3cOer0eERERAICIiAicOnUKV69elcvEx8fD3d0dbdq0kcsYz0MqI82jNnL11sHNNwCu3rqyCxMREZXCrkf2sbGxWLNmDX744Qc0bNhQvsbu4eEBrVYLDw8PjB8/HtOmTYO3tzfc3d3x3HPPISIiAt27dwcAREVFoU2bNhgzZgwWL16M9PR0zJo1C7GxsfLR+aRJk/Dxxx/jpZdewtNPP41du3bhm2++webNm+227kRERDXFrkf2S5cuRXZ2Nvr164fGjRvLr3Xr1sll3nvvPQwZMgTDhw9Hnz594O/vjw0bNsjj1Wo1Nm3aBLVajYiICDzxxBMYO3YsFixYIJcJCQnB5s2bER8fjw4dOuDdd9/F559/ztvuiIioXrDrkb0oR8fxLi4uiIuLQ1xcnNUywcHB2LJlS6nz6devH44fP17hOhIREdV1taY1PhEREVUPhj0REZHCMeyJiIgUjmFPRESkcAx7IiIihWPYExERKRzDnoiISOEY9kRERArHsCciIlI4hj0REZHCMeyJiIgUjmFPRESkcAx7IiIihWPYExERKRzDnoiISOEY9kRERArHsCciIlI4hj0REZHCMeyJiIgUjmFPRESkcI72rgCVThQbkJaWBgAICgqCWq22c42IiKiu4ZF9LZefdQ2vfHsM4+O2Qq/X27s6RERUB/HIvg7QevlBo9HYuxpERFRH8cieiIhI4XhkX0OMr72npaVBCDtXiIiI6g2GfQ25e+39Mjz9/8b11NNwC2hh7yoREVE9wdP4NUjr5Qc33wBoPXztXRUiIqpHGPZEREQKx7AnIiJSOIY9ERGRwjHsiYiIFI5hT0REpHAMeyIiIoVj2BMRESkcw56IiEjhGPZEREQKx7AnIiJSOIY9ERGRwjHsiYiIFI5Pvasl+AhcIiKqLgz7WoKPwCUiourC0/i1CB+BS0RE1YFH9nWQwWCAXq+X3wcFBUGtVtuxRkREVJsx7OsgvV6P8XFb4eqtQ15mBr6IjUFISIi9q0VERLUUw74K7HmE7eqtg5tvQI0si4iI6jaGfRXwCJuIiOoChn0V8QibiIhqO7bGJyIiUjiGPRERkcIx7ImIiBSOYU9ERKRwDHsiIiKFY9gTEREpHG+9sxE+tY6IiGorhr2N8Kl1RERUW/E0vg3xqXVERFQbMeyJiIgUjmFPRESkcAx7IiIihWPYExERKRzDnoiISOEY9kRERArH++zrOOPOfIKCgqBWq+1cIyIiqm14ZF/H3e3M5xjGx22FXq+3d3WIiKgW4pG9Ami9/KDRaOxdDSIiqqV4ZE9ERKRwDHsiIiKFY9gTEREpHMOeiIhI4Rj2RERECsewJyIiUjiGPRERkcIx7ImIiBSOYU9ERKRwDHsiIiKFY9gTEREpHMOeiIhI4Rj2RERECsewJyIiUji7hv2+ffswdOhQBAQEQKVS4fvvvzcZ/+STT0KlUpm8Bg0aZFImMzMTo0ePhru7Ozw9PTF+/HjcvHnTpMzJkyfRu3dvuLi4IDAwEIsXL67uVSMiIqo17Br2t27dQocOHRAXF2e1zKBBg3DlyhX59fXXX5uMHz16NE6fPo34+Hhs2rQJ+/btw8SJE+XxOTk5iIqKQnBwMJKSkvD2229j3rx5+PTTT6ttvYiIiGoTR3suPCYmBjExMaWW0Wg08Pf3tzju7Nmz2LZtG44cOYLw8HAAwEcffYQHHngA77zzDgICArB69WrcuXMHX375JZydnREWFobk5GQsWbLEZKeAiIhIqWr9Nfs9e/bAz88PrVq1wuTJk3H9+nV5XGJiIjw9PeWgB4DIyEg4ODjg8OHDcpk+ffrA2dlZLhMdHY1z587hxo0bFpdZUFCAnJwckxcREVFdVavDftCgQVi1ahUSEhLw1ltvYe/evYiJiYHBYAAApKenw8/Pz2QaR0dHeHt7Iz09XS6j0+lMykjvpTIlLVq0CB4eHvIrMDDQ1qtGRERUY+x6Gr8sI0eOlP9u164d2rdvj+bNm2PPnj0YOHBgtS135syZmDZtmvw+JyeHgU9ERHVWrT6yL6lZs2bw9fXF+fPnAQD+/v64evWqSZmioiJkZmbK1/n9/f2RkZFhUkZ6b60tgEajgbu7u8mLiIiorqpTYX/x4kVcv34djRs3BgBEREQgKysLSUlJcpldu3ahuLgY3bp1k8vs27cPhYWFcpn4+Hi0atUKXl5eNbsCREREdmDXsL958yaSk5ORnJwMAEhNTUVycjL0ej1u3ryJ6dOn49ChQ7hw4QISEhLw0EMPoUWLFoiOjgYAhIaGYtCgQZgwYQJ++eUXHDx4EFOmTMHIkSMREBAAAHj88cfh7OyM8ePH4/Tp01i3bh0++OADk9P0RERESmbXa/ZHjx5F//795fdSAI8bNw5Lly7FyZMnsXLlSmRlZSEgIABRUVF47bXXoNFo5GlWr16NKVOmYODAgXBwcMDw4cPx4YcfyuM9PDywY8cOxMbGonPnzvD19cWcOXPq3G13otiAtLQ0AEBaWhqEsHOFiIiozrBr2Pfr1w+ilNTavn17mfPw9vbGmjVrSi3Tvn177N+/v8L1q03ys67hlW8vw9P/b1xPPQ23gBb2rhIREdURtbo1PpnSevnBzTcAeZkZpZYzGAzQ6/Xy+6CgIKjV6uquHhER1VIMewXS6/UYH7cVrt465GVm4IvYGISEhNi7WkREZCcMe4Vy9dbBzTfA3tUgIqJaoE7dekdEREQVx7AnIiJSOIY9ERGRwjHsiYiIFI5hT0REpHAMeyIiIoVj2BMRESkcw56IiEjhGPZEREQKx7AnIiJSOIY9ERGRwjHsiYiIFI5hT0REpHAMeyIiIoVj2BMRESkcw56IiEjhGPZEREQKx7AnIiJSOIY9ERGRwjHsiYiIFI5hT0REpHAMeyIiIoVj2BMRESkcw56IiEjhGPZEREQK52jvCpBtiGID0tLSAABpaWkQwnw4AAQFBUGtVtujikREZCcMe4XIz7qGV769DE//v3E99TTcAlqYDc/LzMAXsTEICQmxc22JiKgmMewVROvlBzffAORlZlgcTkRE9ROv2RMRESlcpcK+WbNmuH79utnwrKwsNGvWrMqVIiIiItupVNhfuHABBoPBbHhBQQEuXbpU5UoRERGR7VTomv2PP/4o/719+3Z4eHjI7w0GAxISEtC0aVObVY6IiIiqrkJh//DDDwMAVCoVxo0bZzLOyckJTZs2xbvvvmuzyhEREVHVVSjsi4uLAQAhISE4cuQIfH19q6VSREREZDuVuvUuNTXV1vUgIiKialLp++wTEhKQkJCAq1evykf8ki+//LLKFSMiIiLbqFTYz58/HwsWLEB4eDgaN24MlUpl63oRERGRjVQq7JctW4YVK1ZgzJgxtq4PERER2Vil7rO/c+cOevToYeu6EBERUTWoVNg/88wzWLNmja3rQkRERNWgUqfxb9++jU8//RQ7d+5E+/bt4eTkZDJ+yZIlNqkcERERVV2lwv7kyZPo2LEjACAlJcVkHBvrERER1S6VCvvdu3fbuh5UgwwGA/R6vfw+KCgIarXajjUiIqLqxOfZ10N6vR7j47bC1VuHvMwMfBEbg5CQEHtXi4iIqkmlwr5///6lnq7ftWtXpStENcPVWwc33wB7V4OIiGpApcJeul4vKSwsRHJyMlJSUswekENERET2Vamwf++99ywOnzdvHm7evFmlChEREZFtVeo+e2ueeOIJ9otPRERUy9g07BMTE+Hi4mLLWRIREVEVVeo0/rBhw0zeCyFw5coVHD16FLNnz7ZJxYiIiMg2KhX2Hh4eJu8dHBzQqlUrLFiwAFFRUTapGBEREdlGpcJ++fLltq4HERERVZMqdaqTlJSEs2fPAgDCwsLQqVMnm1SKiIiIbKdSYX/16lWMHDkSe/bsgaenJwAgKysL/fv3x9q1a9GoUSNb1pGIiIiqoFKt8Z977jnk5ubi9OnTyMzMRGZmJlJSUpCTk4N//etftq4jERERVUGljuy3bduGnTt3IjQ0VB7Wpk0bxMXFsYEeERFRLVOpI/vi4mKzZ9gDgJOTE4qLi6tcKSIiIrKdSoX9gAED8Pzzz+Py5cvysEuXLuGFF17AwIEDbVY5qn6i2IC0tDSkpqYiNTUVBoPB3lUiIiIbq9Rp/I8//hgPPvggmjZtisDAQABAWloa2rZti6+++sqmFaTqlZ91Da98exme/n/zcbdERApVqbAPDAzEsWPHsHPnTvz6668AgNDQUERGRtq0clQztF5+fNwtEZGCVeg0/q5du9CmTRvk5ORApVLh/vvvx3PPPYfnnnsOXbp0QVhYGPbv319ddSUiIqJKqFDYv//++5gwYQLc3d3Nxnl4eOCf//wnlixZYrPKERERUdVVKOxPnDiBQYMGWR0fFRWFpKSkKleKiIiIbKdCYZ+RkWHxljuJo6Mj/v777ypXioiIiGynQmHfpEkTpKSkWB1/8uRJNG7cuMqVIiIiItupUNg/8MADmD17Nm7fvm02Lj8/H3PnzsWQIUNsVjkiIiKqugrdejdr1ixs2LAB9957L6ZMmYJWrVoBAH799VfExcXBYDDg1VdfrZaKEhERUeVUKOx1Oh1+/vlnTJ48GTNnzoQQAgCgUqkQHR2NuLg46HS6aqkoERERVU6FO9UJDg7Gli1bcOPGDZw/fx5CCLRs2RJeXl7VUT8iIiKqokr1oAcAXl5e6NKliy3rQkRERNWgUg/CISIiorqDYU9ERKRwDHsiIiKFq/Q1e6p7pGfXA8D/30hBRET1AMO+HpGeXW/Iz4FbQAt7V4eIiGoIw76e0Xr5weDsbO9qEBFRDbLrNft9+/Zh6NChCAgIgEqlwvfff28yXgiBOXPmoHHjxtBqtYiMjMTvv/9uUiYzMxOjR4+Gu7s7PD09MX78eNy8edOkzMmTJ9G7d2+4uLggMDAQixcvru5VIyIiqjXsGva3bt1Chw4dEBcXZ3H84sWL8eGHH2LZsmU4fPgwGjRogOjoaJO++UePHo3Tp08jPj4emzZtwr59+zBx4kR5fE5ODqKiohAcHIykpCS8/fbbmDdvHj799NNqXz8iIqLawK6n8WNiYhATE2NxnBAC77//PmbNmoWHHnoIALBq1SrodDp8//33GDlyJM6ePYtt27bhyJEjCA8PBwB89NFHeOCBB/DOO+8gICAAq1evxp07d/Dll1/C2dkZYWFhSE5OxpIlS0x2CoiIiJSq1t56l5qaivT0dERGRsrDPDw80K1bNyQmJgIAEhMT4enpKQc9AERGRsLBwQGHDx+Wy/Tp0wfORtepo6Ojce7cOdy4ccPisgsKCpCTk2PyIiIiqqtqbdinp6cDgNmDdXQ6nTwuPT0dfn5+JuMdHR3h7e1tUsbSPIyXUdKiRYvg4eEhvwIDA6u+QkRERHZSa8PenmbOnIns7Gz5Jd2bXl8YDAakpqbKL4PBYO8qERFRFdTaW+/8/f0BABkZGWjcuLE8PCMjAx07dpTLXL161WS6oqIiZGZmytP7+/sjIyPDpIz0XipTkkajgUajscl61EV6vR7j47bC1VuHvMwMfBEbg5CQEHtXi4iIKqnWHtmHhITA398fCQkJ8rCcnBwcPnwYERERAICIiAhkZWUhKSlJLrNr1y4UFxejW7ducpl9+/ahsLBQLhMfH49WrVrxsbylcPXWwc03AK7eurILExFRrWbXsL958yaSk5ORnJwM4G6jvOTkZOj1eqhUKkydOhULFy7Ejz/+iFOnTmHs2LEICAjAww8/DAAIDQ3FoEGDMGHCBPzyyy84ePAgpkyZgpEjRyIgIAAA8Pjjj8PZ2Rnjx4/H6dOnsW7dOnzwwQeYNm2andaaiIioZtn1NP7Ro0fRv39/+b0UwOPGjcOKFSvw0ksv4datW5g4cSKysrLQq1cvbNu2DS4uLvI0q1evxpQpUzBw4EA4ODhg+PDh+PDDD+XxHh4e2LFjB2JjY9G5c2f4+vpizpw5vO2OiIjqDbuGfb9+/SBKeSKLSqXCggULsGDBAqtlvL29sWbNmlKX0759e+zfv7/S9SzJYDBAr9cjLS2ND5QhIqJar9Y20KvNpAZs+dnXFP9AGeMn5QFAUFAQ1Gq1HWtEREQVxbCvpPrScE16Up6n/99smU9EVEcx7KlMWi8/uPkG2LsaRERUSbX21jsiIiKyDYY9ERGRwjHsiYiIFI5hT0REpHAMeyIiIoVj2BMRESkcw56IiEjheJ89yYx7y2M3wEREysGwJ5nUW54hP0fx3QATEdUnDHsyofXyg8HZ2d7VICIiG+I1eyIiIoVj2BMRESkcw56IiEjhGPZEREQKx7AnIiJSOIY9ERGRwjHsiYiIFI5hT0REpHAMeyIiIoVj2BMRESkcu8ulCjMYDNDr9fL7oKAgqNVqO9aIiIhKw7CnCtPr9RgftxWu3jrkZWbgi9gYhISE2LtaRERkBcOeKsXVWwc33wB7V4OIiMqB1+yJiIgUjmFPRESkcAx7IiIihWPYExERKRzDnoiISOEY9kRERArHsCciIlI4hj0REZHCMeyJiIgUjmFPRESkcOwul8pNFBuQlpZ2929h58oQEVG5Meyp3PKzruGVby/DkJ8Dt4AW9q4OERGVE8OeKkTr5QeDs7O9q0FERBXAsKcqMT61D/DZ9kREtRHDnqpEOrXv6f83n21PRFRLMeypyrRefny2PRFRLcZb74iIiBSOYU9ERKRwDHsiIiKFY9gTEREpHMOeiIhI4Rj2RERECsdb76haGAwG6PV6AOxoh4jI3nhkT9VCr9djfNxWjI/bKoc+ERHZB4/sqdq4euvsXQUiIgKP7ImIiBSPYU9ERKRwDHsiIiKFY9gTEREpHMOeiIhI4Rj2RERECsewJyIiUjjeZ0/VShQbkJaWJr9nb3pERDWPYU/VKj/rGl759jI8/f9GXmYGvoiNQUhIiL2rRURUrzDsqdppvfzg5htg72oQEdVbvGZPRESkcAx7IiIihWPYExERKRyv2ZPNGLe8T0tLgxB2rhAREQFg2JMNGbe8v556Gm4BLexdJSIiAk/jk41JLe+1Hr72rgoREf0/hj0REZHCMeyJiIgUjmFPRESkcAx7IiIihWPYExERKRxvvauACxcuoGHDhryHnIiI6hSGfQVM+Swe7o2b8h5yIiKqU3gavwJ4DzkREdVFPLKnGmPcna7BYAAAqNVqBAUFQa1W27NqRESKxrCnGlOyO1211h3Ozs74IjYGISEh9q4eEZFiMeypRkmXQvIyM6Bu4AmNRmPvKhERKR6v2RMRESlcrQ77efPmQaVSmbxat24tj799+zZiY2Ph4+MDNzc3DB8+HBkZGSbz0Ov1GDx4MFxdXeHn54fp06ejqKiopleFiIjIbmr9afywsDDs3LlTfu/o+L8qv/DCC9i8eTPWr18PDw8PTJkyBcOGDcPBgwcB3G0ENnjwYPj7++Pnn3/GlStXMHbsWDg5OeGNN96o8XUhIiKyh1of9o6OjvD39zcbnp2djS+++AJr1qzBgAEDAADLly9HaGgoDh06hO7du2PHjh04c+YMdu7cCZ1Oh44dO+K1117DjBkzMG/ePDg7O9f06lAJxi30AbBlPhFRNajVp/EB4Pfff0dAQACaNWuG0aNHQ6/XAwCSkpJQWFiIyMhIuWzr1q0RFBSExMREAEBiYiLatWsHnU4nl4mOjkZOTg5Onz5tdZkFBQXIyckxeVH1uNtC/xie+/oYxsdtlT9fIiKynVod9t26dcOKFSuwbds2LF26FKmpqejduzdyc3ORnp4OZ2dneHp6mkyj0+mQnp4OAEhPTzcJemm8NM6aRYsWwcPDQ34FBgbadsXIhNRC39VbV3ZhIiKqsFp9Gj8mJkb+u3379ujWrRuCg4PxzTffQKvVVttyZ86ciWnTpsnvc3JyGPhERFRn1eoj+5I8PT1x77334vz58/D398edO3eQlZVlUiYjI0O+xu/v72/WOl96b6kdgESj0cDd3d3kRTXLYDAgNTVVfkk97hERUcXVqbC/efMm/vjjDzRu3BidO3eGk5MTEhIS5PHnzp2DXq9HREQEACAiIgKnTp3C1atX5TLx8fFwd3dHmzZtarz+VH56vR7j47byWj4RkQ3U6tP4//73vzF06FAEBwfj8uXLmDt3LtRqNUaNGgUPDw+MHz8e06ZNg7e3N9zd3fHcc88hIiIC3bt3BwBERUWhTZs2GDNmDBYvXoz09HTMmjULsbGx7LmtDnD11sHNN8De1SAiqvNqddhfvHgRo0aNwvXr19GoUSP06tULhw4dQqNGjQAA7733HhwcHDB8+HAUFBQgOjoan3zyiTy9Wq3Gpk2bMHnyZERERKBBgwYYN24cFixYYK9VIiIiqnG1OuzXrl1b6ngXFxfExcUhLi7Oapng4GBs2bLF1lUjIiKqM+rUNXsiIiKqOIY9ERGRwjHsiYiIFI5hT0REpHAMeyIiIoVj2BMRESlcrb71jggwfQwuH4FLRFRxPLKnWk96DC67zSUiqhwe2VOdoPXyYxfHRESVxLCnWsP4dH1aWhqEsHOFiIgUgmFPtcbd0/WX4en/N66nnoZbQAt7V4mISBF4zZ5qFa2XH9x8A6D18LV3VYiIFINhT0REpHA8jU91ksFgMGmZz1vyiIisY9hTnaTX6zE+bitcvXXIy8zAF7ExCAkJsXe1iIhqJYY91RklW+trvXRw8w2wc62IiGo/hj3VGWytT0RUOWygR3UKW+sTEVUcw56IiEjhGPZEREQKx2v2VOfxqXhERKXjkT3VeXwqHhFR6XhkT4rAp+IREVnHI3siIiKFY9gTEREpHMOeiIhI4XjNnhTDuFU+wJb5REQShj0phnF3unw4DhHR/zDsSVGk7nStMX40Lo/8iai+YNiT4hkHfFpaGub9mAIAPPInonqDYU+Kp9frMT5uK1y9dfLT8nhPPhHVJ2yNT/WCq7eOT8sjonqLYU9ERKRwDHsiIiKFY9gTEREpHBvoUb1n3Fof4C15RKQ8DHtSJOPe9NLS0iCE9bLGrfXZGQ8RKRHDnhTJuDc96Xa70kit9YmIlIhhT4ol9aaXl5lhNq4iR/5ERHUdw57qpYoe+RMR1WUMe6q3LB35Gx/xs6EeESkFb70jMnL3iP8YxsdtNWmhT0RUl/HInqgErZcf+84nIkXhkT0REZHC8cieyALja/cAr98TUd3GsCeywLi1PjvaIaK6jmFPZIXUWr+so3x2t0tEtR3DnqgMZR3ls7tdIqrtGPZE5SAd5VvD7naJqDZja3wiIiKF45E9UQWwhz0iqot4ZE9UAexhj4jqIh7ZE1WQ1ssPzk6OfGoeEdUZDHuiSuBT84ioLuFpfKJKklroaz187V0VIqJS8cieqJqx0x0isjeGPZENWeptj53uEJG9MeyJbMhSb3sAO90hIvti2BPZWFm97RER1TSGPVEN4qNzicgeGPZE1cQ42KX78C2d5peu60u4A0BEtsawJ6omUrAb8nNM7sMveZrfuAHfrWtXMP/h9ggMDATA4Cci22DYE1UjrZcfDM7OZZaTGvDlZWbglW+PWX2cLhFRZTDsiWoZNvAjIltjD3pEREQKxyN7olqKLfeJyFYY9kR2Yqm1vjHjlvtSw72AgLun96XQ5w4AEZUHw57ITqy11jcmXb+XGu4Z8vdArXWHp3+gxQZ87IefiCxh2BPZUXlb6xuXVTfwNGvAJ4V8Wloa5v2YYtYPP3cCiOo3hj2RAkj36udnX4NbQAuznQE+jIeofmPYE9VRxtf809LSoPXSlTneeCfA2tG+8XCeASBSBoY9UR1l3IDveupps+v+1sZLOwHGp/yNe+6ThgPgGQAihWDYE9Vhxg34yju+ZMPAkj33STsGzk6OvPWPSCEY9kT1kKWGgSV3DCzd+meLPvvZWJCo5jHsiciqkrf+VfSef0vX/9lYkKjmMeyJqFzKe8+/ccBbu/4vPfiHiGoGw56IKqy0e/6Nj9yl6/8ajcbifIzvGODpfKLqw7AnoiqzdpuftYaDEqldgLNzSrk7AOI1f6KKY9gTUZWVdRtgyZ0B42cBaL38TFr+W+sFUGJ85sC44aDBYDBZptRngPQ3UHM7DtwhodqGYU9ENlHabYCV6RPAzTfAZCdBCu7Lly+bnDkwvmVQrXWHIT9HbksgDTNuVxAUFGTWpsBa98LWdhbK6niorEaI3Bmgmlavwj4uLg5vv/020tPT0aFDB3z00Ufo2rWrvatFVC9UpU+AkmFuvLNgPJ26gadJWwJpmPGOg3HAW9uxkMrkZ1+TdxYq2vFQyUaIlhouVvSOBPZuSJVVb8J+3bp1mDZtGpYtW4Zu3brh/fffR3R0NM6dOwc/Pz97V4+IrLAU5pVhrTOhkuONzy5oAZMdh9I6HjI+C2B8qaK8OxnlOYtQ1k5GVc9IWDrjAEAeZmm+xuOtLct4Okvjy5pXRVjaBtb+rk87TPUm7JcsWYIJEybgqaeeAgAsW7YMmzdvxpdffomXX37ZzrUjoppQ1lMGK3r2wdKZB+nygXT2obw7Gca3Mlo6i2C8k1DaTkZ5zkiI4mKztg7G0xu3hwBgsvyS8zUeX1q91Vp3ODk6Whxf1rzK2lkoaxuU/GxK1qWsHQNJecYDtfOsS70I+zt37iApKQkzZ86Uhzk4OCAyMhKJiYlm5QsKClBQUCC/z87OBgDkZtz9YuX+fRHqmzl3rw3ezIGDMMjDjP+u6vjaOq+6Wm9uA26DalmW1h2Ft/NQdOc2hNpZ/js3Q/+/slp3GEoOM57X/4+Xpr95/TL+9ckFNPTxQ9blP9FA1xROrg3l+Rryc/CvlDvyeLXGzaRsWfMy5OeYDCs5vZNrQ3k6Q8FNk+WXnK/x+NLqLdTOKMjOsTi+PPNSa9zg6OSE1x7vgyZNmuDSpUuYvWYftO5eZW6Dkp+NpboYT1/yb0PBzXKPz8+5IdexLE2bNkXDhg2hUqmqGnNlE/XApUuXBADx888/mwyfPn266Nq1q1n5uXPnCgB88cUXX3zxVa2vq1ev1kgO1osj+4qaOXMmpk2bJr/PyspCcHAw9Ho9PDw87Fizui0nJ0c+fefu7m7v6tRJ3IZVx21YddyGVSdtQ+dKtkGpqHoR9r6+vlCr1cjIML0Ol5GRAX9/f7PyGo3GYo9fHh4e/GLbgLu7O7djFXEbVh23YdVxG1ZdjZzCB+BQI0uxM2dnZ3Tu3BkJCQnysOLiYiQkJCAiIsKONSMiIqp+9eLIHgCmTZuGcePGITw8HF27dsX777+PW7duya3ziYiIlKrehP2IESPw999/Y86cOUhPT0fHjh2xbds26HS6MqfVaDSYO3eu1Yd5UPlwO1Ydt2HVcRtWHbdh1dX0NlQJYdxLNRERESlNvbhmT0REVJ8x7ImIiBSOYU9ERKRwDHsiIiKFY9iXQ1xcHJo2bQoXFxd069YNv/zyi72rVCssWrQIXbp0QcOGDeHn54eHH34Y586dMylz+/ZtxMbGwsfHB25ubhg+fLhZ50Z6vR6DBw+Gq6sr/Pz8MH36dBQVFdXkqtQab775JlQqFaZOnSoP4zYsn0uXLuGJJ56Aj48PtFot2rVrh6NHj8rjhRCYM2cOGjduDK1Wi8jISPz+++8m88jMzMTo0aPh7u4OT09PjB8/Hjdv3qzpVbELg8GA2bNnIyQkBFqtFs2bN8drr70G4zbc3Iam9u3bh6FDhyIgIAAqlQrff/+9yXhbba+TJ0+id+/ecHFxQWBgIBYvXlzxytZIp7x12Nq1a4Wzs7P48ssvxenTp8WECROEp6enyMjIsHfV7C46OlosX75cpKSkiOTkZPHAAw+IoKAgcfPmTbnMpEmTRGBgoEhISBBHjx4V3bt3Fz169JDHFxUVibZt24rIyEhx/PhxsWXLFuHr6ytmzpxpj1Wyq19++UU0bdpUtG/fXjz//PPycG7DsmVmZorg4GDx5JNPisOHD4s///xTbN++XZw/f14u8+abbwoPDw/x/fffixMnTogHH3xQhISEiPz8fLnMoEGDRIcOHcShQ4fE/v37RYsWLcSoUaPssUo17vXXXxc+Pj5i06ZNIjU1Vaxfv164ubmJDz74QC7DbWhqy5Yt4tVXXxUbNmwQAMTGjRtNxttie2VnZwudTidGjx4tUlJSxNdffy20Wq34z3/+U6G6MuzL0LVrVxEbGyu/NxgMIiAgQCxatMiOtaqdrl69KgCIvXv3CiGEyMrKEk5OTmL9+vVymbNnzwoAIjExUQhx95/FwcFBpKeny2WWLl0q3N3dRUFBQc2ugB3l5uaKli1bivj4eNG3b1857LkNy2fGjBmiV69eVscXFxcLf39/8fbbb8vDsrKyhEajEV9//bUQQogzZ84IAOLIkSNyma1btwqVSiUuXbpUfZWvJQYPHiyefvppk2HDhg0To0ePFkJwG5alZNjbant98sknwsvLy+R/ecaMGaJVq1YVqh9P45dCejRuZGSkPKy0R+PWd9KjgL29vQEASUlJKCwsNNl+rVu3RlBQkLz9EhMT0a5dO5POjaKjo5GTk4PTp0/XYO3tKzY2FoMHDzbZVgC3YXn9+OOPCA8Px6OPPgo/Pz906tQJn332mTw+NTUV6enpJtvRw8MD3bp1M9mOnp6eCA8Pl8tERkbCwcEBhw8frrmVsZMePXogISEBv/32GwDgxIkTOHDgAGJiYgBwG1aUrbZXYmIi+vTpY/LAnOjoaJw7dw43btwod33qTQ96lXHt2jUYDAazXvZ0Oh1+/fVXO9WqdiouLsbUqVPRs2dPtG3bFgCQnp4OZ2dneHp6mpTV6XRIT0+Xy1javtK4+mDt2rU4duwYjhw5YjaO27B8/vzzTyxduhTTpk3DK6+8giNHjuBf//oXnJ2dMW7cOHk7WNpOxtvRz8/PZLyjoyO8vb3rxXZ8+eWXkZOTg9atW0OtVsNgMOD111/H6NGjAYDbsIJstb3S09MREhJiNg9pnJeXV7nqw7Anm4iNjUVKSgoOHDhg76rUKWlpaXj++ecRHx8PFxcXe1enziouLkZ4eDjeeOMNAECnTp2QkpKCZcuWYdy4cXauXd3wzTffYPXq1VizZg3CwsKQnJyMqVOnIiAggNtQAXgavxQVfTRufTVlyhRs2rQJu3fvxj333CMP9/f3x507d5CVlWVS3nj7+fv7W9y+0jilS0pKwtWrV3HffffB0dERjo6O2Lt3Lz788EM4OjpCp9NxG5ZD48aN0aZNG5NhoaGh0Ov1AP63HUr7X/b398fVq1dNxhcVFSEzM7NebMfp06fj5ZdfxsiRI9GuXTuMGTMGL7zwAhYtWgSA27CibLW9bPX/zbAvBR+NWzohBKZMmYKNGzdi165dZqeaOnfuDCcnJ5Ptd+7cOej1enn7RURE4NSpUyZf+Pj4eLi7u5v9eCvRwIEDcerUKSQnJ8uv8PBwjB49Wv6b27BsPXv2NLvt87fffkNwcDAAICQkBP7+/ibbMScnB4cPHzbZjllZWUhKSpLL7Nq1C8XFxejWrVsNrIV95eXlwcHBNBLUajWKi4sBcBtWlK22V0REBPbt24fCwkK5THx8PFq1alXuU/gAeOtdWdauXSs0Go1YsWKFOHPmjJg4caLw9PQ0aflcX02ePFl4eHiIPXv2iCtXrsivvLw8ucykSZNEUFCQ2LVrlzh69KiIiIgQERER8njptrGoqCiRnJwstm3bJho1alSvbhsrybg1vhDchuXxyy+/CEdHR/H666+L33//XaxevVq4urqKr776Si7z5ptvCk9PT/HDDz+IkydPioceesjibVCdOnUShw8fFgcOHBAtW7ZU7G1jJY0bN040adJEvvVuw4YNwtfXV7z00ktyGW5DU7m5ueL48ePi+PHjAoBYsmSJOH78uPjrr7+EELbZXllZWUKn04kxY8aIlJQUsXbtWuHq6spb76rDRx99JIKCgoSzs7Po2rWrOHTokL2rVCsAsPhavny5XCY/P188++yzwsvLS7i6uopHHnlEXLlyxWQ+Fy5cEDExMUKr1QpfX1/x4osvisLCwhpem9qjZNhzG5bPTz/9JNq2bSs0Go1o3bq1+PTTT03GFxcXi9mzZwudTic0Go0YOHCgOHfunEmZ69evi1GjRgk3Nzfh7u4unnrqKZGbm1uTq2E3OTk54vnnnxdBQUHCxcVFNGvWTLz66qsmt3xxG5ravXu3xd/AcePGCSFst71OnDghevXqJTQajWjSpIl48803K1xXPuKWiIhI4XjNnoiISOEY9kRERArHsCciIlI4hj0REZHCMeyJiIgUjmFPRESkcAx7IiIihWPYU52jUqkq/OrXrx8AYM+ePSbvqfY6c+YMHn74Yfj5+UGtVkOlUmHevHn2rlaNaNq0KVQqFS5cuGDvqpBC8Kl3VOdYegJXeno6tm/fbnV869atq71eZDu3bt3C4MGDceHCBYSHhyM6OhpqtRodO3a0d9WI6iSGPdU5K1asMBu2Z88eOewtjae65ciRI7hw4QJ69OiBgwcP2rs6RHUeT+MTUa0jPZq2ZcuWdq4JkTIw7KneKiwsxFtvvYWwsDBotVr4+Phg2LBhOHv2rNVpbty4gblz56Jjx45o2LAhXF1d0a5dOyxcuBB5eXkVWv6KFSugUqnw5JNP4tatW5g5cyZatGgBjUYDf39/jBs3DpcuXSp1OksuXLgAlUqFpk2bWh1eXFyMDz/8EO3bt4erqysaN26MSZMmITMzEwBQUFCA1157Da1bt4ZWq0VAQACef/553Lp1q0LrKNm+fTuGDBkCPz8/ODs7IyAgACNGjMDRo0dNykltKqRLMStXrjRpe1GWYcOGQaVSYcOGDSbDi4qK4OHhAZVKhccee8xsuqeffhoqlQpffvml2bi1a9di4MCB8Pb2hkajQXBwMJ5++mn89ttvFutgfL39hx9+wIABA+Dt7Q2VSoU9e/bI5c6cOYNHH30Uvr6+0Gq1aNu2Ld555x0YDAar63flyhU8//zzuPfee+Hi4gJXV1cEBgZi4MCBeOedd8rcPlSPVfJhP0S1ivHTp8pTrkePHiIyMlK4urqKQYMGieHDh4vAwEABQHh6eorU1FSzaU+fPi2Xady4sRg0aJAYOnSo0Ol0AoDo2LGjyMrKKnedly9fLgCIhx9+WLRv3154enqKoUOHioceekj4+fkJACI4ONhsntJ00pO1SkpNTZWntTZ81KhRQqvVikGDBomHH35YXl6nTp3EzZs3Ra9evYS7u7t48MEHxZAhQ4SHh4cAIGJiYsq9fpJZs2YJAEKlUomePXuKUaNGiY4dOwoAQq1Wiy+++EIue/bsWTFu3DjRs2dPAUA0b95cjBs3Tn6VJS4uTgAQkydPNhl+8OBB+fvh4+MjiouLTcYHBQUJAPKjSYW4+8SysWPHCgDC0dFRDBgwQIwcOVLce++9AoBwdXUVW7duNatDcHCwACCmTJkiAIjw8HAxatQo0bdvX7Fv3z4hhBD79+8XDRo0EABEs2bNxMiRI0VkZKRwcnISw4cPl+dh/D28cuWKCAgIEABEUFCQeOihh8SIESNE7969hbe3t/Dw8CjHp0H1FcOeFKGiYS8Fm/GjYvPz80V0dLQAICZOnGgyXV5enmjevLkAIGbNmmXy2M9bt26JUaNGCQDiqaeeKnedpdAGIKKjo0V2drY8LjMzUw7EN954w+J0lQ17KUQvXLggj7t27Zpo2bKlACDatWsnunbtKq5duyaP//PPP4WXl5cAIA4cOFDuddy6dasAIFxcXMSOHTtMxn3++ecCgHBychIpKSkVWkdrzp07JwCIli1bmgyfP3++ACDat28vAIikpKQyp1m6dKkAIHx9fcXx48fl4cXFxWLu3LnyjuHVq1dNppOCWq1Wix9++MGsjvn5+fJO49SpU0VRUZE87sSJE8LX11f+nIzDXlqHiRMnmu2s3LlzR+zcubPc24nqH4Y9KUJFw16lUonk5GSz8YcOHZKPtoxJP/xDhgyxON/c3Fzh5+cnHB0dRWZmZrnqLAVagwYNxOXLl83Gr127VgAQAwYMsDhdVcJ+8+bNZtMtWbJE3janTp0yG//cc88JAGL+/PnlWj8hhBg4cKAAIKZNm2Zx/JAhQwQAMWHCBJPhlQ17IYQcpMZH6b179xYuLi7iu+++EwBMngdu7WyAtHP34Ycfmi2juLhY3nF4/fXXTcZJYf/0009brN9XX30lAIjAwEBx584ds/HvvfeexbB/9tlnBQCxYcOGcm0HImO8Zk/1UlBQEDp06GA2PDQ0FADMrpVv3rwZADBixAiL83Nzc0N4eDiKiopw5MiRCtUlPDwcjRs3LnddqsrR0RFRUVFmw6XGcEFBQWjbtq3V8ZcvXy7XcoqKiuSW9NbaF4wfPx4AsHv37nLNszwiIyMBAPHx8QDu3sZ36NAh9OrVC9HR0XBycsLOnTvl8tLf0nQAcPHiRfzxxx8ALN/KqVKp8NRTT5Va93/84x8Wh0vX7R977DE4OTmZjbe0PADo2rUrAODll1/Ghg0bcPPmTYvliCxh2FO9FBQUZHG4u7s7gLsN1Iz9+eefAIAxY8ZY7bhny5YtAIC///7bpnW5fft2heZXlsaNG8PR0fyuWzc3t1Lr07BhwwrV5/r163LZkJAQi2WaN28OwLY7NFJoSyG+d+9eFBYW4v7770eDBg3QvXt3HDhwALdv30ZxcTF2794NBwcHDBgwQJ6HVB8fHx/5c6ho3Us2kJRcvHgRgPVt4uXlBQ8PD7PhY8aMwejRo/Hbb79h+PDh8PT0RPv27fHss89i165dFudFJOF99lQvOThUbD+3uLgYADBo0CDodLpSywYHB1drXcoi1bWyy7N1fWrawIEDoVKpkJCQACGEHPr3338/gLs7A/v378eBAwfg7u6OrKwsdOnSBZ6enjath1arten8HBwc8NVXX+GVV17B5s2bcfDgQRw8eBBLly7F0qVLMXToUGzcuBFqtdqmyyVlYNgTlUNgYCB+/fVXjB8/3urp2Zri7OwMAMjNzbU4/q+//qrJ6ljl4+MDjUaDgoIC/Pnnn2jfvr1ZGemMSZMmTWy2XJ1Oh7Zt2+LUqVM4ceIEdu7cCV9fX7n3vcjISMydOxc7d+6Uj9qNT+Eb1+f69evIycmxeHRf2bpL5a11hZuVlYXs7Gyr07dp0wZt2rTB9OnTIYTArl278Pjjj+Onn37CqlWr5MsLRMbq9i48UQ2JiYkBAHzzzTd2rsn/wuLXX3+1OF5qX2Bvjo6O6NWrFwDrvRpK97X379/fpsuWwnv16tVISUmRj/aBu9e+3d3dER8fb/F6PQDcc8898ml6S3UXQsjDK1r3vn37Arj7XSosLDQbv2rVqnLPS6VSYeDAgXj88ccBAMnJyRWqC9UfDHuicpg4cSKCg4Oxfv16zJgxw+JRdXp6Oj777LNqr4sUVmfOnMF///tfk3Hr16/Hhx9+WO11KK8XX3wRALB06VIkJCSYjFuxYgV+/PFHODk54fnnn7fpcqXw/vjjjyGEkE/hA3d3Qvr27Yvk5GQcPHgQWq0WPXv2NJvHv//9bwDAa6+9hhMnTsjDhRBYuHAhkpOT4enpiQkTJlSobv/4xz/QpEkT6PV6zJw50+SyS0pKChYuXGhxulWrViEpKclseG5urtzor6KXkKj+YNgTlUODBg2wefNmNG3aFIsXL0ZQUBD69u2L0aNH45FHHkFYWBgCAgIwe/bsaq+LVqvF/PnzAQBjx45Fjx498Oijj6Jt27YYMWIEXn755WqvQ3nFxMRg1qxZuH37Nu6//3707t0bo0ePRufOnfHUU09BrVZj2bJlCAsLs+ly+/btCycnJ7mBoHHYA3d3BoqLi3Hnzh306tULGo3GbB7//Oc/MWbMGFy7dg3h4eGIjIzE448/jtDQUMyZMwdarRZr1qxBo0aNKlQ3rVaL1atXw9XVFe+++y7uvfdejBo1ClFRUbjvvvvQu3dvi6G9YcMGhIeHo0mTJhg8eDCeeOIJDB48GIGBgUhOTkbbtm0rvONB9QfDnqicwsLCcPLkSSxevBihoaE4efIk1q9fj8OHD6NBgwb497//jY0bN9ZIXaZOnYqVK1fivvvuw/Hjx7Fjxw7odDrs2LEDTz/9dI3Uobxee+01bN26FTExMTh79iy++eYbXL58GY8++ih+/vnnaqmv1OoeuHvLYMk7DIxP25c8hS9RqVRYtWoV1qxZg169eiEpKQnffvst8vLy8OSTT+L48ePy5Z2K6tu3Lw4fPoxhw4bhxo0b2LhxIy5evIgFCxZg3bp1Fqd58cUXMXXqVNxzzz04duwY1q9fj2PHjqFNmzb46KOPcOjQIfmOCaKSVEIIYe9KEBERUfXhkT0REZHCMeyJiIgUjmFPRESkcAx7IiIihWPYExERKRzDnoiISOEY9kRERArHsCciIlI4hj0REZHCMeyJiIgUjmFPRESkcAx7IiIihWPYExERKdz/ATN+XUyhgn2lAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize= (10, 10))\n",
    "\n",
    "sns.displot(df['count'])\n",
    "\n",
    "plt.xlim(0, 1000)\n",
    "\n",
    "plt.xlabel('The num of words ', fontsize = 16)\n",
    "plt.title(\"The Number of Words Distribution\", fontsize = 18)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "id": "J3Tr-pGx8idZ",
    "outputId": "16b18bcb-36ab-4030-89f0-0716633707b9"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['1 star', '3 stars', '2 star', '4 stars', '5 stars'], dtype='object', name='label_text')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "category_count = df['label_text'].value_counts()\n",
    "\n",
    "categories = category_count.index\n",
    "\n",
    "categories"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "id": "4S9kNlRo8ida",
    "outputId": "1601494d-73a8-417b-d187-7938747e26f5"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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8aXNk3nz5kmSOnXqpI4dOxYY5+rqqjFjxhS537zrwL333qsmTZoUaPfy8tLYsWMlSb/99luha1xI0sMPP6ywsLAij1OUmJgYLVu2TE5OThZPurlU3vn/+eefFr9/eXl98uTJKz42APtAUQAAyom/v7/q1atXaFtISIj5//MvOLhlyxalp6dLkrp166bg4OBCvxo3bmwec+TIEavia9OmTaHbnZycVK1aNUkq9YJrRfH391fdunULbQsKCpIkNWrUSB4eHsX2KW6xxltuueWybWfPnlV0dLR5+5o1ayRdLA4U9doHBwfrzz//lFT0a9++ffsij3050dHR5tc9MjKyyH633nproedQll5++WU5Oztr7969JVq0sLT53LRpUwUEBBT5pj+vKCBJy5YtM7fn/X/+Re4k6aabblJAQIBOnjypNm3aaPr06dq3b1+hi+RZo0aNGkX+znt7e6tVq1aSpM2bN1u03Xrrrapbt64yMjIKPK5u/vz5SkxMlKenp7koUx7Onz+vN998UxEREQoMDJSzs7N5gT13d3dzv2PHjl3xvkubJ3kLCUZERBR5jKIW98vMzDQXF0vy+5abm2s+3qWs/b3Pu+7k5uaqUaNGRZ5/jx49JEmpqanmgo/07xNCBg4cqNGjR2vlypUWxWYAcCrvAADAXnl5eRXZ5uT07+U5KyvL/P8nTpww/39JZwBY+8dfSeLLH5stleTYpY0vNDS0RG2nTp1SeHi4pH9f/+TkZCUnJxc5Pk9Rr31gYOBlxxbl1KlThcZ5qfyfSOY/h7IUHh6uJ554Qh988IEmTZqkBx98UK6urkX2L20+563UPn/+fC1btkz33XefDh8+rCNHjqhhw4YKDg42F3jyFwXyigaXFgV8fX317bff6oEHHtDu3bv19NNPS5J8fHzUqVMn3XffferXr5+qVKlSolgvVdzPK397/p9x3nkOGTJE48aN06effqpRo0aZ2z755BNJ0gMPPHDFj5isWrWqJCkxMVG5ublWzxY4cOCAunbtavGG393d3WIGQt7P15oZGKXNk7xZJPmLrZcq6meTkJBg/tT9Sn7fCmPt733e+efm5lp1/lOnTtXBgwe1fPlyvfPOO3rnnXfk6OioFi1aqGfPnhoyZMhlcxNA5cZMAQC4huSfEpqWlibj4towxX4V93grXJm813/mzJkleu2L+rTc0dHxKkZ9dU2YMEFeXl46duyY3n///WL72iKfL33Tn/ffvO21a9dWeHi49u/frxMnTujgwYOKjY2VVLAoIF38NDg6OlpffvmlBg4cqPr16yspKUkLFy7Uww8/rBtuuEHHjx+37sUphccee0wuLi7at2+fVq1aJUnat2+fVq9eLUkaMmTIFe8z75P1jIwM7d271+rYHn30UR07dky1a9fWvHnzdPbsWaWmpurUqVOKi4uzeL2smXVhq+te/sf/lQdrf+/zzj8oKKhE524YhsVjYX19fbVs2TL99ddfGjt2rNq3by8nJydt2bJFkydPVv369fXtt9/a4hQBXKMoCgDANST//ePW3hZQlvI+oc+b6luYou63vdqKe2OXvy3/p3t5r395vvb54yluKnb+ttLMTLhSgYGBGj16tCTpjTfeUGJiYpF9bZHPeW/s//nnHx07dqxAUSB/n2XLlpnbr7vuuiI/HfXw8NDDDz+sOXPm6MCBAzp27JimTJkiV1dXixkEV+pyxYS89sJ+XgEBAerTp48k6dNPP7X4b6tWrcy3HlyJvPU5pIvrFVgjNjZWa9eulSR9++23uvfee+Xv72/Rx5p1BPIrbZ7k3e6Uf8bBpYr62fj7+5vfzJfX71ve+Z85c6ZUa1106NBBU6ZM0erVq5WYmKhff/1VTZs2VVpamh577DGr158BcO2jKAAA15Abb7zRvMjfwoULyzmagvz8/CRdnD6bkZFRaJ8NGzZczZCKlP8e9KLa/P39Labd590TvGjRorINrhjh4eHmN11Lly4tsl/eugZVq1a9KrcO5Dd69GgFBgbq3Llzev3114vsZ4t8btCggapXry7p4pv+FStWyMHBweKT4vyzCYq6daA4oaGhGjt2rLnYERUVZVWssbGxOnToUKFt58+f15YtWyRJrVu3LrRP3oKD8+fPV1xcnHl9AWtmCUgXX/+bbrpJkjR9+vQCixgWJTc31/z/ebMuJOmGG24otH9eLhYm/y0LRc0iKG2etGzZUpK0YsWKIvsU1ebs7KxmzZpJKtnvm4ODg/l4tpJ33cnJydFvv/1mk326urrqzjvv1E8//STpYiE3b9YJAPtDUQAAriEeHh7mxcSmTJmio0ePFtu/rBYCLErz5s0lXfzjvrBPHtPS0vTuu+9e1ZiKMm/ePO3fv7/A9jNnzujjjz+WJPXr18+iLe/N165duzRz5sxi95+amqrMzEwbRfsvk8lkjuvjjz8u9FPYEydOmM/h/vvvt3kMl+Pp6Wl+ssYHH3xQ5KewtsrnvDf4H374oU6ePKnmzZtbfFqdf6ZA3pu/wooCRRWy8uQ9jaM0K/W//PLLhW5/++23lZaWJicnJ/OMgEt16NBBTZo0UXp6uvr166czZ86UeoHBt956S46OjoqPj1efPn0uO5Pn2LFjuuuuu8zf+/j4mP//77//LtD//PnzeuWVV4rcn7e3t/n/i5pVUto8uffeeyVJq1atMi/al19GRobeeuutIvfXv39/SReLMbt27SrQnpKSoqlTp0qSbr/9dovXxBbq169vLnK98MILl/0Z5T//7OxsiyLOpfI/YaYsn0ABoGLjtx8ArjGvvfaaQkJCdObMGbVr105fffWVzp8/b24/ffq0fvzxR919991X/Q1hWFiYOnToIEkaNWqUxaOxtmzZosjIyCIX4braXF1d1aNHD/3555/mTyg3bdqkyMhInTlzRl5eXgUeixgREaFHH31UkjRs2DCNHDlShw8fNrdnZGRo/fr1Gjt2rGrVqlVm5/r888/L19dXCQkJioyMNE/fli6uVB4ZGanExET5+/sX+mjHq2Ho0KGqU6eO0tLSiv2k2Bb5nPcGP28WyqVPlggJCdH111+vI0eOmIsohd1zPmXKFN1222366quvLKaDZ2Rk6IcfftCbb74p6d9H7F0pHx8fffHFF3r22WfNn8qfP39er732miZPnizpYl4VtyBe3mMH89YVsGaBwfw6duyo9957TyaTSatWrVKzZs304YcfWpx/VlaW1q5dqxEjRui6664zH1uSGjZsqJo1a0q6uO5B3mwHSVq3bp06d+5c7FNArrvuOvMsgM8++6zI2QKlyZN+/fqpcePGMgxD99xzj3799VfzdWn//v264447ir3F4cknn1R4eLiysrJ022236bfffjO/0d65c6e6d++u6Ohoubi4FFsAKY0PPvhAnp6eOnDggNq2batff/3V4jat48eP66uvvlLXrl0tHtt47Ngx1a9fX6+88oq2bdum7Oxsc9uOHTv00EMPSbpYeCnu6QwAKjkDAFBqL730kiHJKMlldfbs2YYko1atWkX2iY6ONu8vOjq6QPuePXuM6667ztzHwcHB8Pf3Nzw8PMzbJBmRkZFXdB6XO26eWrVqGZKM2bNn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fYZh6Pz58woJCblsX4oClxEQECBHR0fFx8dbbI+Pj1dwcHCB/i4uLnJxcbHY5uvrW5Yhogje3t5cdFDpkeewB+Q57AF5DntAnl9dPj4+JerHQoOX4ezsrFatWmnp0qXmbbm5uVq6dKnF7QQAAAAAAFxrmClQAqNGjdLAgQPVunVr3XTTTZo2bZpSU1P16KOPlndoAAAAAABYjaJACfTr10+nT5/WxIkTFRcXpxYtWmjJkiUKCgoq79BQCBcXF7300ksFbuMAKhPyHPaAPIc9IM9hD8jzio2nDwAAAAAAYKdYUwAAAAAAADtFUQAAAAAAADtFUQAAAAAAADtFUQAAAAAAADtFUQDlJiUlRS+99JJ69Oghf39/mUwmzZkzx6bH+PDDD22+T6A4u3fvVt++fVWnTh25u7srICBAnTp10sKFC212DPIaFc2mTZs0fPhwNW7cWB4eHqpZs6buu+8+HThwwGbHIO9R3l599VWZTCY1adLEZvt87bXX9Msvv9hsf8CVWrFihUwmU6Ff69evt8kxyPOKj6cPoNzExMQoPDxcNWvWVJ06dbRixQrNnj1bjzzyiM2O0aRJEwUEBGjFihU22ydQnP/97396//331a5dO4WEhOjChQv68ccf9ddff+njjz/WkCFDSn0M8hoVzb333qs1a9aob9++atasmeLi4jR9+nSlpKRo/fr1NnkTRd6jPB07dkzXX3+9TCaTateurV27dtlkv56enrr33nspeKHcrFixQl26dNEzzzyjG2+80aKtR48eCggIKPUxyPOKz6m8A4D9ql69uk6ePKng4GBt3ry5wIWookpPT5ezs7McHJhog4Juv/123X777Rbbhg8frlatWumdd96xSVGgLJDXKI1Ro0bpm2++kbOzs3lbv3791LRpU73xxhv6+uuvyzG6opH3KKn//Oc/atu2rXJycnTmzJnyDqdYqamp8vDwKO8wcI3p2LGj7r333vIOo8TIc9viX0GUGxcXFwUHB1s9Pi4uTo8++qjCwsLk4uKi6tWrq3fv3oqJiZEk1a5dW7t379bKlSvN06A6d+4sSUpISNB//vMfNW3aVJ6envL29tZtt92mv//+2+IYeVOqvvvuO02YMEGhoaFyd3dXcnKy1XHD/jg6OqpGjRpKTEy8bN/yzuusrCz997//Vf369eXq6qqqVauqQ4cOioqKsvGrgsrk5ptvtigISFL9+vXVuHFj7d2797LjyzvvgeKsWrVK8+fP17Rp065o3D///KM+ffooODhYrq6uCgsLU//+/ZWUlCRJMplMSk1N1RdffGHO67zZkkeOHNFTTz2l66+/Xm5ubqpatar69u1r/p3IM2fOHJlMJq1cuVJPPfWUAgMDFRYWJkk6f/68RowYodq1a8vFxUWBgYG69dZbtXXr1tK+JKikzp8/r+zs7CsaQ55XDswUwDWrT58+2r17t55++mnVrl1bp06dUlRUlI4eParatWtr2rRpevrpp+Xp6akXXnhBkhQUFCRJOnz4sH755Rf17dtX4eHhio+P18cff6yIiAjt2bNHISEhFsd6+eWX5ezsrP/85z/KyMgo8McvcKnU1FSlpaUpKSlJCxYs0G+//aZ+/fpddlx55/WkSZP0+uuva/DgwbrpppuUnJyszZs3a+vWrbr11ltt/0Kh0jIMQ/Hx8WrcuPFl+5Z33gNFycnJ0dNPP63BgweradOmJR6XmZmp7t27KyMjQ08//bSCg4N1/PhxLVq0SImJifLx8dFXX31lvtbmzSKrW7eupIvrdKxdu1b9+/dXWFiYYmJiNHPmTHXu3Fl79uyRu7u7xfGeeuopVatWTRMnTlRqaqokaejQoZo/f76GDx+uRo0a6ezZs1q9erX27t2rli1b2ugVQmXx6KOPKiUlRY6OjurYsaPefPNNtW7dutgx5HklYgAVwKZNmwxJxuzZs0vU/9y5c4Yk48033yy2X+PGjY2IiIgC29PT042cnByLbdHR0YaLi4sxefJk87bly5cbkow6deoYFy5cKFFsgGEYxhNPPGFIMiQZDg4Oxr333mskJCQUO6Yi5HXz5s2Nnj17XubsgMv76quvDEnGrFmziu1XEfIeKMr06dMNHx8f49SpU4ZhGEZERITRuHHjy47btm2bIcmYN29esf08PDyMgQMHFtheWI6uW7fOkGR8+eWX5m2zZ882JBkdOnQwsrOzLfr7+PgYw4YNu2yssG9r1qwx+vTpY8yaNcv49ddfjddff92oWrWq4erqamzdurXYseR55cHtA7gmubm5ydnZWStWrNC5c+eueLyLi4v5HtKcnBydPXtWnp6euv766wudbjRw4EC5ubmVOm7YjxEjRigqKkpffPGFbrvtNuXk5CgzM7PYMRUhr319fbV79279888/V3x8IM++ffs0bNgwtWvXTgMHDiy2b0XIe6AwZ8+e1cSJE/Xiiy+qWrVqVzTWx8dHkvT777/rwoULV3zs/DmalZWls2fPql69evL19S00rx9//HE5OjpabPP19dWGDRt04sSJKz4+7MfNN9+s+fPn67HHHtOdd96p5557TuvXr5fJZNL48eOLHUueVx4UBXBNcnFx0ZQpU/Tbb78pKChInTp10tSpUxUXF1ei8bm5uXr33XdVv359ubi4KCAgQNWqVdOOHTvM90DlFx4ebutTQCXXoEEDRUZGasCAAVq0aJFSUlLUq1cvGcU88KUi5PXkyZOVmJio6667Tk2bNtWYMWO0Y8eOkp847F5cXJx69uwpHx8fzZ8/v8AfcJeqCHkPFGbChAny9/fX008/fcVjw8PDNWrUKH322WcKCAhQ9+7dNWPGjEJzsjBpaWmaOHGiatSoYZHXiYmJJc7rqVOnateuXapRo4ZuuukmTZo0SYcPH77ic4H9qVevnnr37q3ly5crJyenyH7keeVBUQDXrBEjRujAgQN6/fXX5erqqhdffFENGzbUtm3bLjv2tdde06hRo9SpUyd9/fXX+v333xUVFaXGjRsrNze3QH8+VUJp3Xvvvdq0adNln9te3nndqVMnHTp0SJ9//rmaNGmizz77TC1bttRnn31W8pOF3UpKStJtt92mxMRELVmypMD9/EUp77wHLvXPP//ok08+0TPPPKMTJ04oJiZGMTExSk9PV1ZWlmJiYpSQkFDsPt5++23t2LFDzz//vNLS0vTMM8+ocePGOnbs2GWP//TTT+vVV1/Vfffdpx9++EF//PGHoqKiVLVq1RLn9X333afDhw/rgw8+UEhIiN588001btxYv/32W8lfCNitGjVqKDMz03zvflHI80qivO9fAAzjytcUKMyBAwcMd3d348EHHzRva9KkSaH3oDZv3tzo0qVLge2hoaEW/fPuQb3cvVLA5UybNs2QZGzYsOGKxpV3Xp8/f9644YYbjNDQ0CuKG/YnLS3N6Nixo+Hu7m6sXbu2VPsq77wH8vKluK9nn332iva5Zs0aQ5LxwgsvmLd5enoWeq+1j4+P8eijj1psS0tLMxwdHS36591rvWnTpssePz4+3ggNDTXat29/RXHDPvXp08dwdXUtsGbL5ZDn1yaePoBr0oULF+Tg4CBXV1fztrp168rLy0sZGRnmbR4eHoU+Bs7R0bHANO558+bp+PHjqlevXpnFjcrv1KlTCgwMtNiWlZWlL7/8Um5ubmrUqFGRYytCXp89e1ZVq1Y1f+/p6al69eopNja2RONhn3JyctSvXz+tW7dOv/76q9q1a1fisRUh74FLNWnSRD///HOB7RMmTND58+f13nvvmVdQL0xycrLc3d3l5PTvn9pNmzaVg4OD1Xn9wQcfFDuVO7+cnBylpKSY7/mWpMDAQIWEhFgcHzh9+nSBNTP+/vtvLViwQLfddpt5zZbCkOeVB0UBlKvp06crMTHRvDjIwoULzdONnn76aYtf8vwOHDigrl276r777lOjRo3k5OSkn3/+WfHx8erfv7+5X6tWrTRz5ky98sorqlevngIDA3XLLbfojjvu0OTJk/Xoo4/q5ptv1s6dOzV37lzVqVOn7E8aldoTTzyh5ORkderUSaGhoYqLi9PcuXO1b98+vf322/L09CxybEXI60aNGqlz585q1aqV/P39tXnzZvOjfoCijB49WgsWLFCvXr2UkJCgr7/+2qL9oYceKnJsRch74FIBAQG66667CmyfNm2aJBXalt+yZcs0fPhw9e3bV9ddd52ys7P11VdfydHRUX369DH3a9Wqlf7880+98847CgkJUXh4uNq0aaM77rhDX331lXx8fNSoUSOtW7dOf/75p0XRtjjnz59XWFiY7r33XjVv3lyenp76888/tWnTJr399tslfRlgB/r16yc3NzfdfPPNCgwM1J49e/TJJ5/I3d1db7zxRrFjyfNKpFznKcDu1apVq8hpedHR0UWOO3PmjDFs2DCjQYMGhoeHh+Hj42O0adPG+OGHHyz6xcXFGT179jS8vLwMSeappOnp6cbo0aON6tWrG25ubkb79u2NdevWGREREUw3Ral8++23RmRkpBEUFGQ4OTkZfn5+RmRkpPHrr79edmxFyOtXXnnFuOmmmwxfX1/Dzc3NaNCggfHqq68amZmZpXpdULlFREQUO826OBUh74GSKukjCQ8fPmw89thjRt26dQ1XV1fD39/f6NKli/Hnn39a9Nu3b5/RqVMnw83NzZBknjJ97tw549FHHzUCAgIMT09Po3v37sa+ffuMWrVqlWhadUZGhjFmzBijefPmhpeXl+Hh4WE0b97c+PDDD0v9GqByee+994ybbrrJ8Pf3N5ycnIzq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",
      "text/plain": [
       "<Figure size 1200x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize= (12, 5))\n",
    "\n",
    "ax = fig.add_subplot(111)\n",
    "\n",
    "sns.barplot(x = category_count.index, y = category_count )\n",
    "\n",
    "for a, p in enumerate(ax.patches):\n",
    "    ax.annotate(f'{categories[a]}\\n' + format(p.get_height(), '.0f'), xy = (p.get_x() + p.get_width() / 2.0, p.get_height()), xytext = (0,-25), size = 13, color = 'white' , ha = 'center', va = 'center', textcoords = 'offset points', bbox = dict(boxstyle = 'round', facecolor='none',edgecolor='white', alpha = 0.5) )\n",
    "\n",
    "plt.xlabel('Categories', size = 15)\n",
    "\n",
    "plt.ylabel('The Number of News', size= 15)\n",
    "\n",
    "plt.xticks(size = 12)\n",
    "\n",
    "plt.title(\"The number of News by Categories\" , size = 18)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "id": "4CWRtdBt8idb",
    "outputId": "339ca4c6-7173-4faa-d000-a7d4aeaf4828"
   },
   "outputs": [],
   "source": [
    "# df['encoded_text'] = df['category'].astype('category').cat.codes\n",
    "# df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "id": "iyiAqS1V8idd"
   },
   "outputs": [],
   "source": [
    "data_texts = df['text'].to_list()\n",
    "\n",
    "data_labels = df['label'].to_list()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "id": "pyztie9N8ide"
   },
   "outputs": [],
   "source": [
    "train_texts, val_texts, train_labels, val_labels = train_test_split(data_texts, data_labels, test_size = 0.2, random_state = 0 )\n",
    "\n",
    "\n",
    "# train_texts, test_texts, train_labels, test_labels = train_test_split(train_texts, train_labels, test_size = 0.01, random_state = 0 )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "7MzASRka8ide"
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "id": "A6aNnkjG8idf"
   },
   "outputs": [],
   "source": [
    "tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')\n",
    "\n",
    "train_encodings = tokenizer(train_texts, truncation = True, padding = True ,  max_length=512)\n",
    "\n",
    "val_encodings = tokenizer(val_texts, truncation = True, padding = True , max_length=512)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "id": "qBBAOkac8idf"
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "\n",
    "class CustomDataset(torch.utils.data.Dataset):\n",
    "    def __init__(self, encodings, labels):\n",
    "        self.encodings = encodings  # Dictionary of tokenized inputs\n",
    "        self.labels = labels        # Corresponding labels\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.labels)\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "        # Retrieve input encodings for a given index\n",
    "        item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}\n",
    "        item[\"labels\"] = torch.tensor(self.labels[idx])  # Add labels\n",
    "        return item\n",
    "\n",
    "# Creating datasets\n",
    "train_dataset = CustomDataset(train_encodings, train_labels)\n",
    "val_dataset = CustomDataset(val_encodings, val_labels)\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "id": "zXcM9rRV8idg",
    "outputId": "85a693cb-a40e-47e8-cfd5-1298ec3cb74c"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of DistilBertForSequenceClassification were not initialized from the model checkpoint at distilbert-base-uncased and are newly initialized: ['classifier.bias', 'classifier.weight', 'pre_classifier.bias', 'pre_classifier.weight']\n",
      "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n",
      "/home/zeus/miniconda3/envs/cloudspace/lib/python3.10/site-packages/transformers/training_args.py:1594: FutureWarning: `evaluation_strategy` is deprecated and will be removed in version 4.46 of 🤗 Transformers. Use `eval_strategy` instead\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "      \n",
       "      <progress value='5000' max='5000' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      [5000/5000 30:46, Epoch 1/1]\n",
       "    </div>\n",
       "    <table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       " <tr style=\"text-align: left;\">\n",
       "      <th>Epoch</th>\n",
       "      <th>Training Loss</th>\n",
       "      <th>Validation Loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>0.902400</td>\n",
       "      <td>0.830126</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table><p>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "TrainOutput(global_step=5000, training_loss=0.952101842880249, metrics={'train_runtime': 1846.9106, 'train_samples_per_second': 21.658, 'train_steps_per_second': 2.707, 'total_flos': 5298979430400000.0, 'train_loss': 0.952101842880249, 'epoch': 1.0})"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load model\n",
    "model = DistilBertForSequenceClassification.from_pretrained('distilbert-base-uncased', num_labels=5)\n",
    "\n",
    "# Set up training arguments\n",
    "training_args = TrainingArguments(\n",
    "    output_dir='./results',\n",
    "    num_train_epochs=1,\n",
    "    per_device_train_batch_size=8,\n",
    "    per_device_eval_batch_size=8,\n",
    "    warmup_steps=500,\n",
    "    weight_decay=0.01,\n",
    "    logging_dir='./logs',\n",
    "    logging_steps=10,\n",
    "    evaluation_strategy=\"epoch\"\n",
    ")\n",
    "\n",
    "# Initialize Trainer\n",
    "trainer = Trainer(\n",
    "    model=model,\n",
    "    args=training_args,\n",
    "    train_dataset=train_dataset,\n",
    "    eval_dataset=val_dataset\n",
    ")\n",
    "\n",
    "# Train the model\n",
    "trainer.train()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "id": "sENWw7PL8idh",
    "outputId": "7a45c4fe-7252-4f9e-c189-a176248b7a38"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "      \n",
       "      <progress value='1250' max='1250' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      [1250/1250 02:02]\n",
       "    </div>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "{'eval_loss': 0.830126166343689,\n",
       " 'eval_runtime': 123.0163,\n",
       " 'eval_samples_per_second': 81.29,\n",
       " 'eval_steps_per_second': 10.161,\n",
       " 'epoch': 1.0}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainer.evaluate()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "id": "_BJ2qyEg8idh",
    "outputId": "60c46065-7b7c-4b9d-9be9-57c04eeafef6"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('./distlbert_fine_tuned_model/tokenizer_config.json',\n",
       " './distlbert_fine_tuned_model/special_tokens_map.json',\n",
       " './distlbert_fine_tuned_model/vocab.txt',\n",
       " './distlbert_fine_tuned_model/added_tokens.json')"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "save_directory = \"./distlbert_fine_tuned_model\"\n",
    "\n",
    "model.save_pretrained(save_directory)\n",
    "\n",
    "tokenizer.save_pretrained(save_directory)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'I got \\'new\\' tires from them and within two weeks got a flat. I took my car to a local mechanic to see if i could get the hole patched, but they said the reason I had a flat was because the previous patch had blown - WAIT, WHAT? I just got the tire and never needed to have it patched? This was supposed to be a new tire. \\\\nI took the tire over to Flynn\\'s and they told me that someone punctured my tire, then tried to patch it. So there are resentful tire slashers? I find that very unlikely. After arguing with the guy and telling him that his logic was far fetched he said he\\'d give me a new tire \\\\\"this time\\\\\". \\\\nI will never go back to Flynn\\'s b/c of the way this guy treated me and the simple fact that they gave me a used tire!'"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['text'][110]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['label'][1100]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "id": "KG1FaZ6B8idh",
    "outputId": "00562409-91da-4c4c-e917-97a6de141297"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Predicted Category: 0\n"
     ]
    }
   ],
   "source": [
    "def predict_class(text):\n",
    "    inputs = tokenizer(text, return_tensors=\"pt\", truncation=True, padding=True, max_length=512).to(\"cuda\")\n",
    "\n",
    "    with torch.no_grad():\n",
    "        outputs = model(**inputs)\n",
    "\n",
    "    prediction_value = torch.argmax(outputs.logits, dim=1).item()\n",
    "\n",
    "    \n",
    "    return f\"Predicted Category: {prediction_value}\"\n",
    "\n",
    "# Example usage (do not run)the browser's clipboard. Please make sure you have granted access for this website to\n",
    "print(predict_class(df['text'][0]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "IaHrvFXe8idi",
    "outputId": "fe7af587-33f4-4e4f-9ab4-59a2218f9c24"
   },
   "outputs": [],
   "source": [
    "import shutil\n",
    "\n",
    "# Specify the folder to be zipped\n",
    "folder_path = \"distilbert_fine_tuned_model\"  # Replace with your actual folder name\n",
    "zip_name = \"distilbert_fine_tuned_model.zip\"  # Desired zip file name\n",
    "\n",
    "# Create a zip archive\n",
    "shutil.make_archive(zip_name.replace('.zip', ''), 'zip', folder_path)\n",
    "\n",
    "print(f\"Folder '{folder_path}' has been zipped as '{zip_name}'.\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "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.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}