-
Notifications
You must be signed in to change notification settings - Fork 0
/
SQLiteMagic
656 lines (656 loc) · 55.8 KB
/
SQLiteMagic
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
{
"cells": [
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The sql extension is already loaded. To reload it, use:\n",
" %reload_ext sql\n"
]
}
],
"source": [
"%load_ext sql"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# Import libraries\n",
"import csv, sqlite3"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"# Create a db\n",
"conn=sqlite3.connect('SQLiteMagic.db')\n",
"\n",
"# Using cursor API\n",
"cursor_obj=conn.cursor()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The sql extension is already loaded. To reload it, use:\n",
" %reload_ext sql\n"
]
}
],
"source": [
"# Load SQL extention\n",
"%load_ext sql"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# Connect sqlite to our db\n",
"%sql sqlite:///SQLiteMagic.db"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### To write SQL here use '%%sql'"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" * sqlite:///SQLiteMagic.db\n",
"(sqlite3.OperationalError) table INTERNATIONAL_STUDENT_TEST_SCORES already exists\n",
"[SQL: CREATE TABLE INTERNATIONAL_STUDENT_TEST_SCORES(country VARCHAR(50),\n",
"\t\t\t\t\t\t\t\t\t\t\t \tfirst_name VARCHAR(50),\n",
"\t\t\t\t\t\t\t\t\t\t\t \tlast_name VARCHAR(50),\n",
"\t\t\t\t\t\t\t\t\t\t\t \ttest_score INT);]\n",
"(Background on this error at: https://sqlalche.me/e/20/e3q8)\n"
]
}
],
"source": [
"%%sql\n",
"\n",
"CREATE TABLE INTERNATIONAL_STUDENT_TEST_SCORES(country VARCHAR(50),\n",
"\t\t\t\t\t\t\t\t\t\t\t \tfirst_name VARCHAR(50),\n",
"\t\t\t\t\t\t\t\t\t\t\t \tlast_name VARCHAR(50),\n",
"\t\t\t\t\t\t\t\t\t\t\t \ttest_score INT);\n",
"\n",
"INSERT INTO INTERNATIONAL_STUDENT_TEST_SCORES(country,first_name,last_name,test_score)\n",
"VALUES\n",
"('United States', 'Marshall', 'Bernadot', 54),\n",
"('Ghana', 'Celinda', 'Malkin', 51),\n",
"('Ukraine', 'Guillermo', 'Furze', 53),\n",
"('Greece', 'Aharon', 'Tunnow', 48),\n",
"('Russia', 'Bail', 'Goodwin', 46),\n",
"('Poland', 'Cole', 'Winteringham', 49),\n",
"('Sweden', 'Emlyn', 'Erricker', 55),\n",
"('Russia', 'Cathee', 'Sivewright', 49),\n",
"('China', 'Barny', 'Ingerson', 57),\n",
"('Uganda', 'Sharla', 'Papaccio', 55),\n",
"('China', 'Stella', 'Youens', 51),\n",
"('Poland', 'Julio', 'Buesden', 48),\n",
"('United States', 'Tiffie', 'Cosely', 58),\n",
"('Poland', 'Auroora', 'Stiffell', 45),\n",
"('China', 'Clarita', 'Huet', 52),\n",
"('Poland', 'Shannon', 'Goulden', 45),\n",
"('Philippines', 'Emylee', 'Privost', 50),\n",
"('France', 'Madelina', 'Burk', 49),\n",
"('China', 'Saunderson', 'Root', 58),\n",
"('Indonesia', 'Bo', 'Waring', 55),\n",
"('China', 'Hollis', 'Domotor', 45),\n",
"('Russia', 'Robbie', 'Collip', 46),\n",
"('Philippines', 'Davon', 'Donisi', 46),\n",
"('China', 'Cristabel', 'Radeliffe', 48),\n",
"('China', 'Wallis', 'Bartleet', 58),\n",
"('Moldova', 'Arleen', 'Stailey', 38),\n",
"('Ireland', 'Mendel', 'Grumble', 58),\n",
"('China', 'Sallyann', 'Exley', 51),\n",
"('Mexico', 'Kain', 'Swaite', 46),\n",
"('Indonesia', 'Alonso', 'Bulteel', 45),\n",
"('Armenia', 'Anatol', 'Tankus', 51),\n",
"('Indonesia', 'Coralyn', 'Dawkins', 48),\n",
"('China', 'Deanne', 'Edwinson', 45),\n",
"('China', 'Georgiana', 'Epple', 51),\n",
"('Portugal', 'Bartlet', 'Breese', 56),\n",
"('Azerbaijan', 'Idalina', 'Lukash', 50),\n",
"('France', 'Livvie', 'Flory', 54),\n",
"('Malaysia', 'Nonie', 'Borit', 48),\n",
"('Indonesia', 'Clio', 'Mugg', 47),\n",
"('Brazil', 'Westley', 'Measor', 48),\n",
"('Philippines', 'Katrinka', 'Sibbert', 51),\n",
"('Poland', 'Valentia', 'Mounch', 50),\n",
"('Norway', 'Sheilah', 'Hedditch', 53),\n",
"('Papua New Guinea', 'Itch', 'Jubb', 50),\n",
"('Latvia', 'Stesha', 'Garnson', 53),\n",
"('Canada', 'Cristionna', 'Wadmore', 46),\n",
"('China', 'Lianna', 'Gatward', 43),\n",
"('Guatemala', 'Tanney', 'Vials', 48),\n",
"('France', 'Alma', 'Zavittieri', 44),\n",
"('China', 'Alvira', 'Tamas', 50),\n",
"('United States', 'Shanon', 'Peres', 45),\n",
"('Sweden', 'Maisey', 'Lynas', 53),\n",
"('Indonesia', 'Kip', 'Hothersall', 46),\n",
"('China', 'Cash', 'Landis', 48),\n",
"('Panama', 'Kennith', 'Digance', 45),\n",
"('China', 'Ulberto', 'Riggeard', 48),\n",
"('Switzerland', 'Judy', 'Gilligan', 49),\n",
"('Philippines', 'Tod', 'Trevaskus', 52),\n",
"('Brazil', 'Herold', 'Heggs', 44),\n",
"('Latvia', 'Verney', 'Note', 50),\n",
"('Poland', 'Temp', 'Ribey', 50),\n",
"('China', 'Conroy', 'Egdal', 48),\n",
"('Japan', 'Gabie', 'Alessandone', 47),\n",
"('Ukraine', 'Devlen', 'Chaperlin', 54),\n",
"('France', 'Babbette', 'Turner', 51),\n",
"('Czech Republic', 'Virgil', 'Scotney', 52),\n",
"('Tajikistan', 'Zorina', 'Bedow', 49),\n",
"('China', 'Aidan', 'Rudeyeard', 50),\n",
"('Ireland', 'Saunder', 'MacLice', 48),\n",
"('France', 'Waly', 'Brunstan', 53),\n",
"('China', 'Gisele', 'Enns', 52),\n",
"('Peru', 'Mina', 'Winchester', 48),\n",
"('Japan', 'Torie', 'MacShirrie', 50),\n",
"('Russia', 'Benjamen', 'Kenford', 51),\n",
"('China', 'Etan', 'Burn', 53),\n",
"('Russia', 'Merralee', 'Chaperlin', 38),\n",
"('Indonesia', 'Lanny', 'Malam', 49),\n",
"('Canada', 'Wilhelm', 'Deeprose', 54),\n",
"('Czech Republic', 'Lari', 'Hillhouse', 48),\n",
"('China', 'Ossie', 'Woodley', 52),\n",
"('Macedonia', 'April', 'Tyer', 50),\n",
"('Vietnam', 'Madelon', 'Dansey', 53),\n",
"('Ukraine', 'Korella', 'McNamee', 52),\n",
"('Jamaica', 'Linnea', 'Cannam', 43),\n",
"('China', 'Mart', 'Coling', 52),\n",
"('Indonesia', 'Marna', 'Causbey', 47),\n",
"('China', 'Berni', 'Daintier', 55),\n",
"('Poland', 'Cynthia', 'Hassell', 49),\n",
"('Canada', 'Carma', 'Schule', 49),\n",
"('Indonesia', 'Malia', 'Blight', 48),\n",
"('China', 'Paulo', 'Seivertsen', 47),\n",
"('Niger', 'Kaylee', 'Hearley', 54),\n",
"('Japan', 'Maure', 'Jandak', 46),\n",
"('Argentina', 'Foss', 'Feavers', 45),\n",
"('Venezuela', 'Ron', 'Leggitt', 60),\n",
"('Russia', 'Flint', 'Gokes', 40),\n",
"('China', 'Linet', 'Conelly', 52),\n",
"('Philippines', 'Nikolas', 'Birtwell', 57),\n",
"('Australia', 'Eduard', 'Leipelt', 53)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### First way to call"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" * sqlite:///SQLiteMagic.db\n",
"Done.\n"
]
},
{
"data": {
"text/html": [
"<table>\n",
" <thead>\n",
" <tr>\n",
" <th>country</th>\n",
" <th>first_name</th>\n",
" <th>last_name</th>\n",
" <th>test_score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>Canada</td>\n",
" <td>Cristionna</td>\n",
" <td>Wadmore</td>\n",
" <td>46</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Canada</td>\n",
" <td>Wilhelm</td>\n",
" <td>Deeprose</td>\n",
" <td>54</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Canada</td>\n",
" <td>Carma</td>\n",
" <td>Schule</td>\n",
" <td>49</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>"
],
"text/plain": [
"[('Canada', 'Cristionna', 'Wadmore', 46),\n",
" ('Canada', 'Wilhelm', 'Deeprose', 54),\n",
" ('Canada', 'Carma', 'Schule', 49)]"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"country = \"Canada\"\n",
"%sql select * from INTERNATIONAL_STUDENT_TEST_SCORES where country = :country"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Second way to call"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" * sqlite:///SQLiteMagic.db\n",
"Done.\n"
]
},
{
"data": {
"text/html": [
"<table>\n",
" <thead>\n",
" <tr>\n",
" <th>country</th>\n",
" <th>first_name</th>\n",
" <th>last_name</th>\n",
" <th>test_score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>Russia</td>\n",
" <td>Bail</td>\n",
" <td>Goodwin</td>\n",
" <td>46</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Russia</td>\n",
" <td>Cathee</td>\n",
" <td>Sivewright</td>\n",
" <td>49</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Russia</td>\n",
" <td>Robbie</td>\n",
" <td>Collip</td>\n",
" <td>46</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Russia</td>\n",
" <td>Benjamen</td>\n",
" <td>Kenford</td>\n",
" <td>51</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Russia</td>\n",
" <td>Merralee</td>\n",
" <td>Chaperlin</td>\n",
" <td>38</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Russia</td>\n",
" <td>Flint</td>\n",
" <td>Gokes</td>\n",
" <td>40</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>"
],
"text/plain": [
"[('Russia', 'Bail', 'Goodwin', 46),\n",
" ('Russia', 'Cathee', 'Sivewright', 49),\n",
" ('Russia', 'Robbie', 'Collip', 46),\n",
" ('Russia', 'Benjamen', 'Kenford', 51),\n",
" ('Russia', 'Merralee', 'Chaperlin', 38),\n",
" ('Russia', 'Flint', 'Gokes', 40)]"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%sql select * from INTERNATIONAL_STUDENT_TEST_SCORES where country= 'Russia'"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" * sqlite:///SQLiteMagic.db\n",
"Done.\n"
]
},
{
"data": {
"text/html": [
"<table>\n",
" <thead>\n",
" <tr>\n",
" <th>Test_Score</th>\n",
" <th>Frequency</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>38</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <td>40</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>43</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <td>44</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <td>45</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <td>46</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <td>47</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <td>48</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <td>49</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <td>50</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <td>51</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <td>52</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <td>53</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <td>54</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <td>55</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <td>56</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>57</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <td>58</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <td>60</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>"
],
"text/plain": [
"[(38, 2),\n",
" (40, 1),\n",
" (43, 2),\n",
" (44, 2),\n",
" (45, 8),\n",
" (46, 7),\n",
" (47, 4),\n",
" (48, 14),\n",
" (49, 8),\n",
" (50, 10),\n",
" (51, 8),\n",
" (52, 8),\n",
" (53, 8),\n",
" (54, 5),\n",
" (55, 4),\n",
" (56, 1),\n",
" (57, 2),\n",
" (58, 4),\n",
" (60, 1)]"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_score_distribution = %sql SELECT test_score as \"Test_Score\", count(*) as \"Frequency\" from INTERNATIONAL_STUDENT_TEST_SCORES GROUP BY test_score;\n",
"test_score_distribution"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAGwCAYAAACzXI8XAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAu+ElEQVR4nO3de5yN9d7/8fcyh2VMM8NghskMU44h5ZBbSsTtUFviLvZOSHZq55gSswtJGilSd3KqRkrIXaR2yKmUpMYx7XJKiBGPjRkzsmjm+/ujn/UwzHHNNbPWt17Px+N61HX8fK5lre+851rXmuUyxhgBAABYqJy/GwAAAPAVQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFrB/m6gtOXk5OjIkSOKiIiQy+XydzsAAKAIjDE6ffq04uLiVK5c/tdd/vBB5siRI4qPj/d3GwAAwAeHDh1SjRo18l3/hw8yERERkn5/ICIjI/3cDQAAKIqMjAzFx8d7f47n5w8fZC68nRQZGUmQAQDAMoXdFsLNvgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwll+DzPr169W1a1fFxcXJ5XJp6dKl+W770EMPyeVyadq0aWXWHwAACGx+DTJZWVlq0qSJpk+fXuB2S5Ys0VdffaW4uLgy6gwAANjAr99+3aVLF3Xp0qXAbQ4fPqwhQ4Zo5cqVuv3228uoMwAAYAO/BpnC5OTkqE+fPho5cqQaNmxYpH08Ho88Ho93PiMjo7TaAwAAfhbQQea5555TcHCwhg4dWuR9kpOTNX78+FLsCgg8zUbOc/yYm5/v6/gxAcBpAfuppc2bN+ull17S3Llz5XK5irxfUlKS0tPTvdOhQ4dKsUsAAOBPARtkPv/8cx07dkwJCQkKDg5WcHCwDhw4oEcffVS1atXKdz+3263IyMhcEwAA+GMK2LeW+vTpow4dOuRa1qlTJ/Xp00f9+/f3U1cAACCQ+DXIZGZmau/evd75/fv3a9u2bYqOjlZCQoIqV66ca/uQkBBVq1ZN9erVK+tWAQBAAPJrkElNTVW7du288yNGjJAk9evXT3PnzvVTVwAAwBZ+DTJt27aVMabI2//000+l1wwAALBOwN7sCwAAUBiCDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1/Bpk1q9fr65duyouLk4ul0tLly71rjt//rxGjRqlxo0bKzw8XHFxcerbt6+OHDniv4YBAEBA8WuQycrKUpMmTTR9+vTL1p05c0ZbtmzRmDFjtGXLFr3//vvatWuX7rjjDj90CgAAAlGwP4t36dJFXbp0yXNdVFSUVq1alWvZK6+8ohtuuEEHDx5UQkJCWbQIAAACmF+DTHGlp6fL5XKpYsWK+W7j8Xjk8Xi88xkZGWXQGQAA8AdrbvY9e/asRo0apb/97W+KjIzMd7vk5GRFRUV5p/j4+DLsEgAAlCUrgsz58+fVs2dPGWM0Y8aMArdNSkpSenq6dzp06FAZdQkAAMpawL+1dCHEHDhwQGvXri3waowkud1uud3uMuoOAAD4U0AHmQshZs+ePVq3bp0qV67s75YAAEAA8WuQyczM1N69e73z+/fv17Zt2xQdHa3q1avrrrvu0pYtW/TRRx8pOztbR48elSRFR0crNDTUX20DAIAA4dcgk5qaqnbt2nnnR4wYIUnq16+fnnrqKS1btkySdN111+Xab926dWrbtm1ZtQkAAAKUX4NM27ZtZYzJd31B6wAAAKz41BIAAEBeCDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAa/k1yKxfv15du3ZVXFycXC6Xli5dmmu9MUZjx45V9erVFRYWpg4dOmjPnj3+aRYAAAQcvwaZrKwsNWnSRNOnT89z/eTJk/Xyyy9r5syZ2rRpk8LDw9WpUyedPXu2jDsFAACBKNifxbt06aIuXbrkuc4Yo2nTpunJJ59Ut27dJEnz5s1TbGysli5dqr/+9a957ufxeOTxeLzzGRkZzjcOAAACgl+DTEH279+vo0ePqkOHDt5lUVFRatmypTZu3JhvkElOTtb48ePLqk0ApaDZyHmOH3Pz830dPyYA/wvYm32PHj0qSYqNjc21PDY21rsuL0lJSUpPT/dOhw4dKtU+AQCA/wTsFRlfud1uud1uf7cBAADKQMBekalWrZok6Zdffsm1/JdffvGuAwAAf24BG2QSExNVrVo1rVmzxrssIyNDmzZtUqtWrfzYGQAACBR+fWspMzNTe/fu9c7v379f27ZtU3R0tBISEjR8+HA988wzqlOnjhITEzVmzBjFxcXpzjvv9F/TAAAgYPg1yKSmpqpdu3be+REjRkiS+vXrp7lz5+rxxx9XVlaWBg4cqFOnTummm27SihUrVL58eX+1DAAAAohfg0zbtm1ljMl3vcvl0tNPP62nn366DLsCAAC2CNh7ZAAAAApDkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGv5FGR+/PFHp/sAAAAoNp+CTO3atdWuXTu9/fbbOnv2rNM9AQAAFIlPQWbLli269tprNWLECFWrVk0PPvigvv76a6d7AwAAKJBPQea6667TSy+9pCNHjuiNN95QWlqabrrpJjVq1EhTp07V8ePHne4TAADgMiW62Tc4OFg9evTQ4sWL9dxzz2nv3r167LHHFB8fr759+yotLc2pPgEAAC5ToiCTmpqqhx9+WNWrV9fUqVP12GOPad++fVq1apWOHDmibt26OdUnAADAZYJ92Wnq1KlKSUnRrl27dNttt2nevHm67bbbVK7c77koMTFRc+fOVa1atZzsFQAAIBefgsyMGTN0//3367777lP16tXz3CYmJkavv/56iZoDAAAoiE9BZs+ePYVuExoaqn79+vlyeAAAgCLx6R6ZlJQULV68+LLlixcv1ptvvlnipgAAAIrCpyCTnJysKlWqXLY8JiZGzz77bImbAgAAKAqfgszBgweVmJh42fKaNWvq4MGDJW4KAACgKHwKMjExMdqxY8dly7dv367KlSuXuKkLsrOzNWbMGCUmJiosLExXX321JkyYIGOMYzUAAIC9fLrZ929/+5uGDh2qiIgItWnTRpL02WefadiwYfrrX//qWHPPPfecZsyYoTfffFMNGzZUamqq+vfvr6ioKA0dOtSxOgAAwE4+BZkJEybop59+Uvv27RUc/PshcnJy1LdvX0fvkfnyyy/VrVs33X777ZKkWrVqacGCBXyvEwAAkORjkAkNDdWiRYs0YcIEbd++XWFhYWrcuLFq1qzpaHM33nijZs+erd27d6tu3bravn27vvjiC02dOjXffTwejzwej3c+IyPD0Z4AAEDg8CnIXFC3bl3VrVvXqV4uM3r0aGVkZKh+/foKCgpSdna2Jk6cqN69e+e7T3JyssaPH19qPaF0NRs5z/Fjbn6+r+PH/LP6I/77OH1O+Z1PWT12f8R/I6AgPgWZ7OxszZ07V2vWrNGxY8eUk5OTa/3atWsdae7dd9/V/Pnz9c4776hhw4batm2bhg8frri4uHz/2F5SUpJGjBjhnc/IyFB8fLwj/QAAgMDiU5AZNmyY5s6dq9tvv12NGjWSy+Vyui9J0siRIzV69GjvDcSNGzfWgQMHlJycnG+QcbvdcrvdpdIPAAAILD4FmYULF+rdd9/Vbbfd5nQ/uZw5c8b7RZQXBAUFXXYFCAAA/Dn5fLNv7dq1ne7lMl27dtXEiROVkJCghg0bauvWrZo6daruv//+Uq8NAAACn09/EO/RRx/VSy+9VOp/mO5///d/ddddd+nhhx9WgwYN9Nhjj+nBBx/UhAkTSrUuAACwg09XZL744gutW7dOy5cvV8OGDRUSEpJr/fvvv+9IcxEREZo2bZqmTZvmyPEAAMAfi09BpmLFiurevbvTvQAAABSLT0EmJSXF6T4AAACKzad7ZCTpt99+0+rVqzVr1iydPn1aknTkyBFlZmY61hwAAEBBfLoic+DAAXXu3FkHDx6Ux+PRf//3fysiIkLPPfecPB6PZs6c6XSfAAAAl/HpisywYcPUvHlznTx5UmFhYd7l3bt315o1axxrDgAAoCA+XZH5/PPP9eWXXyo0NDTX8lq1aunw4cOONAYAAFAYn67I5OTkKDs7+7LlP//8syIiIkrcFAAAQFH4FGQ6duyY62+7uFwuZWZmaty4caX+tQUAAAAX+PTW0pQpU9SpUyddc801Onv2rO655x7t2bNHVapU0YIFC5zuEQAAIE8+BZkaNWpo+/btWrhwoXbs2KHMzEwNGDBAvXv3znXzLwAAQGnyKchIUnBwsO69914newEAACgWn4LMvHnzClzft29fn5oBAAAoDp+CzLBhw3LNnz9/XmfOnFFoaKgqVKhAkAEAAGXCp08tnTx5MteUmZmpXbt26aabbuJmXwAAUGZ8/q6lS9WpU0eTJk267GoNAABAaXEsyEi/3wB85MgRJw8JAACQL5/ukVm2bFmueWOM0tLS9Morr6h169aONAYAAFAYn4LMnXfemWve5XKpatWquvXWWzVlyhQn+gIAACiUT0EmJyfH6T6AMtVsZMF/QsAXm5/n03oAUNYcvUcGAACgLPl0RWbEiBFF3nbq1Km+lAAAACiUT0Fm69at2rp1q86fP6969epJknbv3q2goCA1bdrUu53L5XKmSwAAgDz4FGS6du2qiIgIvfnmm6pUqZKk3/9IXv/+/XXzzTfr0UcfdbRJAACAvPh0j8yUKVOUnJzsDTGSVKlSJT3zzDN8agkAAJQZn4JMRkaGjh8/ftny48eP6/Tp0yVuCgAAoCh8CjLdu3dX//799f777+vnn3/Wzz//rPfee08DBgxQjx49nO4RAAAgTz7dIzNz5kw99thjuueee3T+/PnfDxQcrAEDBuj55593tEEAAID8+BRkKlSooFdffVXPP/+89u3bJ0m6+uqrFR4e7mhzAAAABSnRH8RLS0tTWlqa6tSpo/DwcBljnOoLAACgUD4Fmf/85z9q37696tatq9tuu01paWmSpAEDBvDRawAAUGZ8CjKPPPKIQkJCdPDgQVWoUMG7vFevXlqxYoVjzQEAABTEp3tkPvnkE61cuVI1atTItbxOnTo6cOCAI40BAAAUxqcrMllZWbmuxFxw4sQJud3uEjcFAABQFD4FmZtvvlnz5s3zzrtcLuXk5Gjy5Mlq166dY80BAAAUxKe3liZPnqz27dsrNTVV586d0+OPP67vvvtOJ06c0IYNG5zuEQAAIE8+XZFp1KiRdu/erZtuukndunVTVlaWevTooa1bt+rqq692ukcAAIA8FfuKzPnz59W5c2fNnDlTTzzxRGn0BAAAUCTFviITEhKiHTt2lEYvAAAAxeLTW0v33nuvXn/9dad7AQAAKBafbvb97bff9MYbb2j16tVq1qzZZd+xNHXqVEeak6TDhw9r1KhRWr58uc6cOaPatWsrJSVFzZs3d6wGAACwU7GCzI8//qhatWpp586datq0qSRp9+7dubZxuVyONXfy5Em1bt1a7dq10/Lly1W1alXt2bNHlSpVcqwGAACwV7GCTJ06dZSWlqZ169ZJ+v0rCV5++WXFxsaWSnPPPfec4uPjlZKS4l2WmJhYKrUAAIB9inWPzKXfbr18+XJlZWU52tDFli1bpubNm+vuu+9WTEyMrr/+es2ZM6fAfTwejzIyMnJNAADgj8mnm30vuDTYOO3HH3/UjBkzVKdOHa1cuVL/+Mc/NHToUL355pv57pOcnKyoqCjvFB8fX6o9AgAA/ylWkHG5XJfdA+PkPTGXysnJUdOmTfXss8/q+uuv18CBA/XAAw9o5syZ+e6TlJSk9PR073To0KFS6w8AAPhXse6RMcbovvvu834x5NmzZ/XQQw9d9qml999/35HmqlevrmuuuSbXsgYNGui9997Ldx+3280XVwIA8CdRrCDTr1+/XPP33nuvo81cqnXr1tq1a1euZbt371bNmjVLtS4AALBDsYLMxZ8eKguPPPKIbrzxRj377LPq2bOnvv76a82ePVuzZ88u0z4AAEBgKtHNvqWtRYsWWrJkiRYsWKBGjRppwoQJmjZtmnr37u3v1gAAQADw6S/7lqW//OUv+stf/uLvNgAAQAAK6CsyAAAABSHIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsF+7sBAIB9mo2c5/gxNz/f1/Fj4o+PKzIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsZVWQmTRpklwul4YPH+7vVgAAQACwJsh88803mjVrlq699lp/twIAAAKEFUEmMzNTvXv31pw5c1SpUqUCt/V4PMrIyMg1AQCAP6ZgfzdQFIMGDdLtt9+uDh066Jlnnilw2+TkZI0fP76MOgMK1mzkPMePufn5vo4fEwhUvIZ882d63AL+iszChQu1ZcsWJScnF2n7pKQkpaene6dDhw6VcocAAMBfAvqKzKFDhzRs2DCtWrVK5cuXL9I+brdbbre7lDsDAACBIKCDzObNm3Xs2DE1bdrUuyw7O1vr16/XK6+8Io/Ho6CgID92CAAA/Cmgg0z79u317bff5lrWv39/1a9fX6NGjSLEAADwJxfQQSYiIkKNGjXKtSw8PFyVK1e+bDkAAPjzCfibfQEAAPIT0Fdk8vLpp5/6uwUAABAguCIDAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsFZAB5nk5GS1aNFCERERiomJ0Z133qldu3b5uy0AABAgAjrIfPbZZxo0aJC++uorrVq1SufPn1fHjh2VlZXl79YAAEAACPZ3AwVZsWJFrvm5c+cqJiZGmzdvVps2bfLcx+PxyOPxeOczMjJKtUcAAOA/AR1kLpWeni5Jio6Ozneb5ORkjR8/Pt/1zUbOc7Snzc/3dfR4xeX0+Uh5n1NZ1QGAPzLGUucF9FtLF8vJydHw4cPVunVrNWrUKN/tkpKSlJ6e7p0OHTpUhl0CAICyZM0VmUGDBmnnzp364osvCtzO7XbL7XaXUVcAAMCfrAgygwcP1kcffaT169erRo0a/m4HAAAEiIAOMsYYDRkyREuWLNGnn36qxMREf7cEAAACSEAHmUGDBumdd97RBx98oIiICB09elSSFBUVpbCwMD93BwAA/C2gb/adMWOG0tPT1bZtW1WvXt07LVq0yN+tAQCAABDQV2SMMf5uAQAABLCAviIDAABQEIIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsFawvxv4o2o2cp7jx9z8fF/HjwkAYMz2VSA8blyRAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFpWBJnp06erVq1aKl++vFq2bKmvv/7a3y0BAIAAEPBBZtGiRRoxYoTGjRunLVu2qEmTJurUqZOOHTvm79YAAICfBXyQmTp1qh544AH1799f11xzjWbOnKkKFSrojTfe8HdrAADAz4L93UBBzp07p82bNyspKcm7rFy5curQoYM2btyY5z4ej0cej8c7n56eLknKyMiQJGV7fnW0xwvHvZTTdfKrRR3qUMf3OqVRizGBOtRxps6F/xpjCt7BBLDDhw8bSebLL7/MtXzkyJHmhhtuyHOfcePGGUlMTExMTExMf4Dp0KFDBWaFgL4i44ukpCSNGDHCO5+Tk6MTJ06ocuXKcrlcRTpGRkaG4uPjdejQIUVGRpZWq9ShTpnXog51qGNHLepIxhidPn1acXFxBW4X0EGmSpUqCgoK0i+//JJr+S+//KJq1arluY/b7Zbb7c61rGLFij7Vj4yMLPUXBXWo449a1KEOdeyo9WevExUVVeg2AX2zb2hoqJo1a6Y1a9Z4l+Xk5GjNmjVq1aqVHzsDAACBIKCvyEjSiBEj1K9fPzVv3lw33HCDpk2bpqysLPXv39/frQEAAD8L+CDTq1cvHT9+XGPHjtXRo0d13XXXacWKFYqNjS21mm63W+PGjbvsLSrqUMf2WtShDnXsqEWdonMZU9jnmgAAAAJTQN8jAwAAUBCCDAAAsBZBBgAAWIsgAwAArPWnDTIzZszQtdde6/3jPK1atdLy5cu9648ePao+ffqoWrVqCg8PV9OmTfXee++VuO6kSZPkcrk0fPhw77KzZ89q0KBBqly5sq644gr9z//8z2V/BNCJOg8++KCuvvpqhYWFqWrVqurWrZt++OEHx+tcYIxRly5d5HK5tHTpUsfrtG3bVi6XK9f00EMPOV5HkjZu3Khbb71V4eHhioyMVJs2bfTrryX7jpFLa/3000+Xnc+FafHixY7VkUrn+Z1XnX379ql79+6qWrWqIiMj1bNnz2I/t5966qnLHo/69et71zv1+imszuzZs9W2bVtFRkbK5XLp1KlTxa5RWJ0TJ05oyJAhqlevnsLCwpSQkKChQ4d6vzPO6XNyakworM4FJR0TCqvj1JhQlPNxYkwoqI6T40Fh5+PkeHD48GHde++9qly5ssLCwtS4cWOlpqZ61xtjNHbsWFWvXl1hYWHq0KGD9uzZ41OtC/60QaZGjRqaNGmSNm/erNTUVN16663q1q2bvvvuO0lS3759tWvXLi1btkzffvutevTooZ49e2rr1q0+1/zmm280a9YsXXvttbmWP/LII/rwww+1ePFiffbZZzpy5Ih69OjheJ1mzZopJSVF33//vVauXCljjDp27Kjs7GxH61wwbdq0In8thK91HnjgAaWlpXmnyZMnO15n48aN6ty5szp27Kivv/5a33zzjQYPHqxy5Xx/+eRVKz4+Pte5pKWlafz48briiivUpUsXR8/J6ed3XnWysrLUsWNHuVwurV27Vhs2bNC5c+fUtWtX5eTkFOv4DRs2zPW4fPHFF951Tr5+Cqpz5swZde7cWf/85z99OnZR6hw5ckRHjhzRCy+8oJ07d2ru3LlasWKFBgwY4HgtydkxoaA6FzgxJhRWx6kxoaA6To4J+dVxejwo6HycGg9Onjyp1q1bKyQkRMuXL9e///1vTZkyRZUqVfJuM3nyZL388suaOXOmNm3apPDwcHXq1Elnz54t9jl5lfibHf9AKlWqZF577TVjjDHh4eFm3rx5udZHR0ebOXPm+HTs06dPmzp16phVq1aZW265xQwbNswYY8ypU6dMSEiIWbx4sXfb77//3kgyGzdudKxOXrZv324kmb179zpeZ+vWrebKK680aWlpRpJZsmRJsWsUVqew83OqTsuWLc2TTz7pSJ3Cal3quuuuM/fff7/jdZx8fudXZ+XKlaZcuXImPT3du+2pU6eMy+Uyq1atKvLxx40bZ5o0aZLnOidfPwXVudi6deuMJHPy5MliHb+4dS549913TWhoqDl//nyp1/J1TChKHSfGhMLqODUmFFbHqTGhuP8+vo4HhdVxajwYNWqUuemmm/Jdn5OTY6pVq2aef/5577JTp04Zt9ttFixYUKxaF/vTXpG5WHZ2thYuXKisrCzvVx/ceOONWrRokU6cOKGcnBwtXLhQZ8+eVdu2bX2qMWjQIN1+++3q0KFDruWbN2/W+fPncy2vX7++EhIStHHjRsfqXCorK0spKSlKTExUfHy8o3XOnDmje+65R9OnT8/3O7GcqCNJ8+fPV5UqVdSoUSMlJSXpzJkzjtY5duyYNm3apJiYGN14442KjY3VLbfckudvmyWtdanNmzdr27ZtPv82XlAdJ5/f+dXxeDxyuVy5/gBW+fLlVa5cuWI/fnv27FFcXJyuuuoq9e7dWwcPHpTk/OsnvzpOK06d9PR0RUZGKjjYt79fWtRaJR0TCqrj5JhQ2Pk4NSbkV8fpMaGo/z4lHQ8KquPUeLBs2TI1b95cd999t2JiYnT99ddrzpw53vX79+/X0aNHc71eo6Ki1LJlS59er14+R6A/gB07dpjw8HATFBRkoqKizL/+9S/vupMnT5qOHTsaSSY4ONhERkaalStX+lRnwYIFplGjRubXX381xuT+rWH+/PkmNDT0sn1atGhhHn/8ccfqXDB9+nQTHh5uJJl69er5dDWmsDoDBw40AwYM8M7Lx9++Cqsza9Yss2LFCrNjxw7z9ttvmyuvvNJ0797d0TobN240kkx0dLR54403zJYtW8zw4cNNaGio2b17t+PndLF//OMfpkGDBsWuUZQ6Tj2/C6pz7NgxExkZaYYNG2aysrJMZmamGTx4sJFkBg4cWOQaH3/8sXn33XfN9u3bzYoVK0yrVq1MQkKCycjIcPT1U1Cdi5X0ikxR6xhjzPHjx01CQoL55z//WWq1nBgTCqvj1JhQWB2nxoSC6jg5JhTnuVCS8aCwOk6NB26327jdbpOUlGS2bNliZs2aZcqXL2/mzp1rjDFmw4YNRpI5cuRIrv3uvvtu07NnT5/OzRhj/tRBxuPxmD179pjU1FQzevRoU6VKFfPdd98ZY4wZPHiwueGGG8zq1avNtm3bzFNPPWWioqLMjh07ilXj4MGDJiYmxmzfvt27rDSCTGF1Ljh16pTZvXu3+eyzz0zXrl1N06ZNvT+EnKjzwQcfmNq1a5vTp0971/syaBX1fC62Zs2aYl8WL6zOhRdeUlJSrv0aN25sRo8eXeQ6Ral1sTNnzpioqCjzwgsvFKtGUes48fwuSp2VK1eaq666yrhcLhMUFGTuvfde07RpU/PQQw8V+7wuOHnypImMjDSvvfaao0GmoDoXK2mQKWqd9PR0c8MNN5jOnTubc+fOlVqtko4JhdVxakworE5efBkTCqvj5JhQUJ2LlWQ8KEodp37ehYSEmFatWuVaNmTIEPNf//VfxhiCTJlo3769GThwoNm7d6+RZHbu3HnZ+gcffLBYx1yyZImRZIKCgryTJO/Avnr16jwHxYSEBDN16lTH6vz222+X7ePxeEyFChXMO++841idwYMHe///4vXlypUzt9xyS6meT2ZmppFkVqxY4VidC8+Ft956K9d+PXv2NPfcc0+R6xT3nObNm2dCQkLMsWPHilWjOOdU0ud3cc7n+PHj3ud4bGysmTx5crHP62LNmzc3o0eP9v6gKunrp7A6F3M6yORVJyMjw7Rq1cq0b9++xKGisFoX82VMKKzOsGHDHBkTCquTF1/GhMLq/Pjjj46NCQXVuVhJxoPC6jj58y4hISHXlTdjjHn11VdNXFycMcaYffv2GUlm69atubZp06aNGTp0aPFP4v/jHpmL5OTkyOPxeN9TvfQO9KCgoGJ/2qJ9+/b69ttvtW3bNu/UvHlz9e7d2/v/ISEhWrNmjXefXbt26eDBg977dZyoExQUdNk+5vcgK4/H41idJ554Qjt27Mi1XpJefPFFpaSklOr5XKhVvXp1x+pcddVViouL065du3Ltt3v3btWsWbPIdYp7Tq+//rruuOMOVa1atVg1ilLHqed3cc6nSpUqqlixotauXatjx47pjjvuKPZ5XZCZmal9+/apevXqatasmSOvn8LqlKZL62RkZKhjx44KDQ3VsmXLVL58+VKrdSlfxoTC6owePdqRMaGwOnnxZUworE6tWrUcGxMKqnOxkowHhdVx8udd69atC3xcEhMTVa1atVyv14yMDG3atKlkr1efI5DlRo8ebT777DOzf/9+s2PHDjN69GjjcrnMJ598Ys6dO2dq165tbr75ZrNp0yazd+9e88ILLxiXy5XrPhpfXXr5/aGHHjIJCQlm7dq1JjU11bRq1eqyy3MlrbNv3z7z7LPPmtTUVHPgwAGzYcMG07VrVxMdHW1++eUXx+rkRQ5dRr64zt69e83TTz9tUlNTzf79+80H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RUm/f3JpzZo1Onr0aJE+Qn3XXXfpxRdf1KZNm3TgwAF9+umnGjRokOrWrav69eurfPnyGjVqlB5//HHNmzdP+/bt01dffaXXX39dktS7d2+VL19e/fr1086dO7Vu3ToNGTJEffr08d4QnJfevXurSpUq6tatmz7//HPt379fn376qYYOHaqff/655A8kgGIhyABwxN///ne99tprSklJUePGjXXLLbdo7ty5SkxMlCRFRERo8uTJat68uVq0aKGffvpJH3/8scqV+30YmjJlilatWqX4+Hhdf/31hdbr1KmTPvzwQ3Xt2lV169ZVv379VL9+fX3yyScKDv79YvOYMWP06KOPauzYsWrQoIF69eqlY8eOSZIqVKiglStX6sSJE2rRooXuuusutW/fXq+88kqBdStUqKD169crISFBPXr0UIMGDTRgwACdPXuWKzSAH7iMMcbfTQAAAPiCKzIAAMBaBBkAAalhw4a5Psp98ZTXJ4YA/Dnx1hKAgHTgwAGdP38+z3WxsbGKiIgo444ABCKCDAAAsBZvLQEAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArPX/APoC2mcoBZA/AAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dataframe = test_score_distribution.DataFrame()\n",
"\n",
"%matplotlib inline\n",
"# uncomment the following line if you get an module error saying seaborn not found\n",
"# !pip install seaborn==0.9.0\n",
"import seaborn\n",
"\n",
"plot = seaborn.barplot(x='Test_Score',y='Frequency', data=dataframe)"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" * sqlite:///SQLiteMagic.db\n",
"Done.\n"
]
},
{
"data": {
"text/html": [
"<table>\n",
" <thead>\n",
" <tr>\n",
" <th>Country</th>\n",
" <th>Num</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>China</td>\n",
" <td>23</td>\n",
" </tr>\n",
" <tr>\n",
" <td>France</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Indonesia</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Philippines</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Poland</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <td>Russia</td>\n",
" <td>6</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>"
],
"text/plain": [
"[('China', 23),\n",
" ('France', 5),\n",
" ('Indonesia', 8),\n",
" ('Philippines', 5),\n",
" ('Poland', 7),\n",
" ('Russia', 6)]"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"country_distribution=%sql SELECT country AS \"Country\",COUNT(country) AS \"Num\" FROM INTERNATIONAL_STUDENT_TEST_SCORES GROUP BY country HAVING COUNT(country)>3\n",
"country_distribution"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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2mw2hzFGfD7TZbTDunXr9KOPPtLhw4fr9u3b9c8//9TU1FQrzPTv3996TVpamkMPN9JltOWN02Coph+PateuraGhobps2TJVVd22bZv26dNHq1evToi5g4c6yHz66afq7u5+x19eSUlJevr0aZ0zZ476+Phwn5g7iI6O1ueee07tdrvGxsaqqmrXrl21Xbt21mDfNm3aqM1m00ceeUSTk5M5UGRi69at2qxZM61Tp47Dr9mNGzdqp06dtHr16vrVV185sUKzbN68Wd9++21duHChtezIkSParVs3rVevnnWl15EjR3Tw4MGMe7uN6Oho9fLy0vr162vp0qU1X758Onz4cD1+/LimpKRoRESEFipUSF955RVnl+pSMjuurF69Wtu2basbN250WL5r1y4tX7681qtXT1euXKmq6QGHGcHv7KEOMmvXrlVPT887HhSmTZtm3dmTX72Obrx3zoEDB7RChQr68ccfW+Hk6tWrWrduXZ0+fbq13auvvqrfffednjx58oHXa4qlS5dqvXr1NE+ePNYAwAybNm3SsLAwDQ4Otk4z4fa2bdumNptNbTabfvTRR6r6v1/EJ06c0CJFiuiECRNued3DPO1AZgfe/fv3a5EiRTQyMtL6UTJlyhStVKmSjhw5UlNSUvTChQs6ZcoUDQoKynQW+4dRRlseO3ZM58yZo7Nnz9bNmzfrvn37tGDBgtqxY0f97bffHF6zZs0azZ07t9avX99hxnDc3kM9y1nx4sXF29tb5s+fL0ePHrWW6w3zaMbFxUmVKlXEbrdLvnz5nFGmS9qyZYtUrlxZrly5Ijt27JCoqCh57LHH5KWXXpK0tDQREcmZM6fky5dPZs6cKb/88ou8/vrr8v3330vFihWlcOHCTv4fuK4WLVrImDFjpFq1ajJhwgRZvXq1ta5GjRrSs2dPadiwoZQvX96JVZqhSpUqsmDBAvHw8JBNmzbJlStXrHUBAQFSp04d2b9/v8M+LyLi7u7+oEt1CRmTX544cUK++OILWbhwoezatUs8PDzE3d1dqlatKtmzZxcRkTfeeEM6d+4sERERcuTIEcmXL590795dfvvtt4dv0sJMZLTlzp07pUGDBjJ79mwZNmyYtG/fXi5evCgrVqyQjRs3ypQpU2TLli0Or6tRo4Z4enpKcHCwE/8HBnF2knK2RYsWqYeHh3bp0sUa6Kea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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"dataframe = country_distribution.DataFrame()\n",
"# Assuming your data is already loaded into the 'dataframe'\n",
"\n",
"# Create the bar plot\n",
"plot = sns.barplot(x='Country', y='Num', data=dataframe)\n",
"\n",
"# Rotate x-axis labels for better readability\n",
"plt.xticks(rotation=45, ha='right') # Adjust the rotation angle as needed\n",
"\n",
"# Show the plot\n",
"plt.show()\n"
]
}
],
"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.11.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}