lab05-checkpoint.ipynb 69.9 KB
Newer Older
root's avatar
root committed
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
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "previous-account",
   "metadata": {},
   "source": [
    "3) [P] Create a dataframe named df_uniform that contains 2000 observations. It should have two variables,\n",
    "named x and y. For each observation, x should be generated from a uniform distribution between 10 and 90,\n",
    "and y should be generated from a uniform between 20 and 80. Show the head() of the dataframe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "id": "injured-draft",
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'seaborn'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-231-4f0c48e66770>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mmpl\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mseaborn\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'seaborn'"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib as mpl\n",
    "import seaborn as sb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "id": "periodic-connecticut",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>12.510277</td>\n",
       "      <td>49.881929</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15.916051</td>\n",
       "      <td>58.341666</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>58.151018</td>\n",
       "      <td>23.257982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>63.515185</td>\n",
       "      <td>75.280604</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>37.709749</td>\n",
       "      <td>78.300269</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           x          y\n",
       "0  12.510277  49.881929\n",
       "1  15.916051  58.341666\n",
       "2  58.151018  23.257982\n",
       "3  63.515185  75.280604\n",
       "4  37.709749  78.300269"
      ]
     },
     "execution_count": 194,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = pd.Series(np.random.uniform(10,90,2000),name=\"x\")\n",
    "y = pd.Series(np.random.uniform(20,80,2000),name=\"y\")\n",
    "df_uniform = pd.DataFrame()\n",
    "df_uniform['x'] = x\n",
    "df_uniform['y'] = y\n",
    "df_uniform.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "suspended-provision",
   "metadata": {},
   "source": [
    "8) [P] Generate a single figure that contains two axes that are adjacent to each other. You should have:\n",
    "a. at least one shared axis\n",
    "b. appropriate axis labels\n",
    "c. make the range of the axis on both plots the same\n",
    "d. display a legend on each to be sure both are labeled correctly as \"normal\" or \"uniform\"\n",
    "e. One title at the top"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "stretch-amount",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8f3b4647c0>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(0, 100, 100)\n",
    "\n",
    "figure, (ax1, ax2) = plt.subplots(2,1, sharex=True)\n",
    "ax2.set(xlabel='x-label',ylabel='y-label')\n",
    "ax1.set(ylabel='y-label')\n",
    "ax1.set_xlim(0,100)\n",
    "ax1.set_ylim(0,100)\n",
    "ax2.set_ylim(0,100)\n",
    "ax1.plot(x,x,color='m')\n",
    "ax2.plot(x,x**2,color = 'g')\n",
    "ax1.legend(['linear'])\n",
    "ax2.legend(['quadratic'])\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "surface-complex",
   "metadata": {},
   "source": [
    "6) [P] Generate a data frame called df_normal with 2000 observations, two variables names x and y again. This\n",
    "time, x should be generated from a normal distribution with mean 50 and standard deviation 15, and y with\n",
    "mean 50 and standard deviation 5. Again, show the head() of df_normal.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "id": "monetary-density",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>59.302496</td>\n",
       "      <td>50.536145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>88.681450</td>\n",
       "      <td>54.174814</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>41.239203</td>\n",
       "      <td>53.814369</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>39.576584</td>\n",
       "      <td>53.013839</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>45.169744</td>\n",
       "      <td>44.523717</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           x          y\n",
       "0  59.302496  50.536145\n",
       "1  88.681450  54.174814\n",
       "2  41.239203  53.814369\n",
       "3  39.576584  53.013839\n",
       "4  45.169744  44.523717"
      ]
     },
     "execution_count": 191,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = pd.Series(np.random.normal(50,15,2000),name=\"x\")\n",
    "y = pd.Series(np.random.normal(50,5,2000),name=\"y\")\n",
    "df_normal = pd.DataFrame()\n",
    "df_normal = pd.DataFrame()\n",
    "df_normal['x'] = x\n",
    "df_normal['y'] = y\n",
    "df_normal.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "broken-massage",
   "metadata": {},
   "source": [
    "7) [P] Repeat your scatterplot above with df_normal . Use a different color point, and title your plot\n",
    "accordingly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "id": "settled-modern",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x,y,s=5, c='m')\n",
    "plt.title(\"Scatter of normally distributed data\")\n",
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"y\")\n",
    "plt.xlim(0,100)\n",
    "plt.ylim(0,100)\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "collect-river",
   "metadata": {},
   "source": [
    "11) [P] Using pandas, generate a histogram of both the x and y variables for df_uniform. Use 30 bins, and set\n",
    "the range of both variables to be 0 – 100. Repeat this exercise on df_normal. (HINT:Use the hist()\n",
    "method of DataFrame.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "id": "disciplinary-hobby",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = pd.Series(np.random.uniform(10,90,2000),name=\"x\")\n",
    "y = pd.Series(np.random.uniform(20,80,2000),name=\"y\")\n",
    "df_uniform = pd.DataFrame(data=[x,y])\n",
    "\n",
    "#df_uniform.hist(bins=30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "id": "actual-rating",
   "metadata": {},
   "outputs": [],
   "source": [
    "#hist = df_normal.hist(bins=30)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "affected-holder",
   "metadata": {},
   "source": [
    "12) [M] What is a quantile?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "institutional-battery",
   "metadata": {},
   "source": [
    "A quantile is the dataset divided into equal sized parts\n",
    "\n",
    "A quartile is a dataset divided into 4 equal quantiles.\n",
    "A percentile is a dataset divided into 100 equal quantiles.\n",
    "Inter-Quantile Range is the used to find the range of where the majority of values lie. To calculate this it is the Lower Quartile(Q1 = 25th percentile) subtracted from the Upper Quantile (Q3 = 75th percentile) "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "atlantic-indiana",
   "metadata": {},
   "source": [
    "16) [P] Write a function called IQR_outlier_limits that takes a dataframe as input, and computes the\n",
    "minimum and maximum outlier thresholds for each variable (column) in the dataframe. The result that is\n",
    "returned will be stored in a data frame."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "id": "useful-avatar",
   "metadata": {},
   "outputs": [],
   "source": [
    "def IQR_outlier_limits(df):\n",
    "    Q1_x = df.iloc[0].quantile(0.25)\n",
    "    Q3_x = df.iloc[0].quantile(0.75)\n",
    "    IQR_x = Q3_x - Q1_x\n",
    "    \n",
    "    Q1_y = df.iloc[1].quantile(0.25)\n",
    "    Q3_y = df.iloc[1].quantile(0.75)\n",
    "    IQR_y = Q3_y - Q1_y\n",
    "    \n",
    "    mins = pd.Series([Q1_x-1.5*IQR_x, Q1_y-1.5*IQR_y], name='min_out',index=['x','y'])\n",
    "    maxs = pd.Series([Q3_x+1.5*IQR_x, Q3_y+1.5*IQR_y], name='max_out',index=['x','y'])\n",
    "\n",
    "    return pd.DataFrame([mins,maxs])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "id": "median-professional",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>min_out</th>\n",
       "      <td>58.929681</td>\n",
       "      <td>34.004876</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max_out</th>\n",
       "      <td>63.722579</td>\n",
       "      <td>100.045765</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 x           y\n",
       "min_out  58.929681   34.004876\n",
       "max_out  63.722579  100.045765"
      ]
     },
     "execution_count": 184,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_n_out = IQR_outlier_limits(df_normal)\n",
    "IQR_outlier_limits(df_normal)\n",
    "#df_n_out.loc['min_out']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "id": "medium-april",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>min_out</th>\n",
       "      <td>-33.291623</td>\n",
       "      <td>-12.425326</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max_out</th>\n",
       "      <td>129.443593</td>\n",
       "      <td>110.787578</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  x           y\n",
       "min_out  -33.291623  -12.425326\n",
       "max_out  129.443593  110.787578"
      ]
     },
     "execution_count": 185,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_u_out = IQR_outlier_limits(df_uniform)\n",
    "IQR_outlier_limits(df_uniform)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "complicated-square",
   "metadata": {},
   "source": [
    "18) [P] Use your function you defined above to print a subset of each dataframe that contains the outliers for\n",
    "df_normal and df_uniform. (HINT: You should get at many outliers for df_normal. However, your\n",
    "uniform data should not have outliers.). Print the number of outliers found for each dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aggressive-cloud",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "id": "abroad-letters",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       12.510277\n",
       "1       15.916051\n",
       "2       58.151018\n",
       "3       63.515185\n",
       "4       37.709749\n",
       "          ...    \n",
       "1995    80.028291\n",
       "1996    44.933357\n",
       "1997    45.899881\n",
       "1998    49.355362\n",
       "1999    71.159112\n",
       "Name: x, Length: 2000, dtype: float64"
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_uniform['x']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "handmade-liechtenstein",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "statistical-baghdad",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "id": "talented-start",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "58.92968144844742"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_n_out['x'].at['min_out']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "id": "scheduled-tradition",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       62.524355\n",
       "1       83.535542\n",
       "2       60.542603\n",
       "3       46.199159\n",
       "4       24.321404\n",
       "          ...    \n",
       "1995    64.033786\n",
       "1996    30.942559\n",
       "1997    45.232002\n",
       "1998    29.178811\n",
       "1999    50.107078\n",
       "Name: x, Length: 2000, dtype: float64"
      ]
     },
     "execution_count": 181,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_normal['x']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "id": "sunset-ethics",
   "metadata": {},
   "outputs": [],
   "source": [
    "normal_outlier_count = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "id": "empirical-institute",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Normal x_min outliers\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2       41.239203\n",
       "3       39.576584\n",
       "4       45.169744\n",
       "6       51.091611\n",
       "9       31.531753\n",
       "          ...    \n",
       "1995    57.275319\n",
       "1996    52.556659\n",
       "1997    55.142745\n",
       "1998    58.533367\n",
       "1999    44.572860\n",
       "Name: x, Length: 1448, dtype: float64"
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Normal x_min outliers\")\n",
    "normal_outlier_count += df_normal['x'].where( df_normal['x'] < df_n_out['x'].at['min_out']).dropna().count()\n",
    "df_normal['x'].where( df_normal['x'] < df_n_out['x'].at['min_out']).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "id": "removable-receptor",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Normal x_max outliers\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "1       88.681450\n",
       "7       63.997489\n",
       "11      64.074406\n",
       "15      76.331955\n",
       "24      83.670373\n",
       "          ...    \n",
       "1969    67.809678\n",
       "1977    73.758429\n",
       "1980    67.048967\n",
       "1984    70.353898\n",
       "1989    72.889026\n",
       "Name: x, Length: 359, dtype: float64"
      ]
     },
     "execution_count": 198,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Normal x_max outliers\")\n",
    "normal_outlier_count += df_normal['x'].where( df_normal['x'] > df_n_out['x'].at['max_out']).dropna().count()\n",
    "df_normal['x'].where( df_normal['x'] > df_n_out['x'].at['max_out']).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "id": "arctic-criterion",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Normal y_min outliers\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "26    32.827048\n",
       "Name: y, dtype: float64"
      ]
     },
     "execution_count": 199,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Normal y_min outliers\")\n",
    "normal_outlier_count += df_normal['y'].where( df_normal['y'] < df_n_out['y'].at['min_out']).dropna().count()\n",
    "df_normal['y'].where( df_normal['y'] < df_n_out['y'].at['min_out']).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "id": "impossible-collection",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Normal y_max outliers\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Series([], Name: y, dtype: float64)"
      ]
     },
     "execution_count": 200,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Normal y_max outliers\")\n",
    "normal_outlier_count += df_normal['y'].where( df_normal['y'] > df_n_out['y'].at['max_out']).dropna().count()\n",
    "df_normal['y'].where( df_normal['y'] > df_n_out['y'].at['max_out']).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "id": "unauthorized-strip",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1808\n"
     ]
    }
   ],
   "source": [
    "print(normal_outlier_count)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "id": "useful-basketball",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Normal x_min outliers\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Series([], Name: x, dtype: float64)"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Normal x_min outliers\")\n",
    "df_uniform['x'].where( df_uniform['x'] < df_u_out['x'].at['min_out']).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "id": "oriental-class",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Normal x_max outliers\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Series([], Name: x, dtype: float64)"
      ]
     },
     "execution_count": 204,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Normal x_max outliers\")\n",
    "df_uniform['x'].where( df_uniform['x'] > df_u_out['x'].at['max_out']).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "id": "isolated-charity",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Normal y_min outliers\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Series([], Name: y, dtype: float64)"
      ]
     },
     "execution_count": 205,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Normal y_min outliers\")\n",
    "df_uniform['y'].where( df_uniform['y'] < df_u_out['y'].at['min_out']).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "id": "suspected-letter",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Normal y_max outliers\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Series([], Name: y, dtype: float64)"
      ]
     },
     "execution_count": 206,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Normal y_max outliers\")\n",
    "df_uniform['y'].where( df_uniform['y'] > df_u_out['y'].at['max_out']).dropna()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "prostate-young",
   "metadata": {},
   "source": [
    "30) [P] Generally, seaborn works best when all of your data to be plotted is in one dataframe. So, create a new\n",
    "dataframe that contains both df_uniform and df_normal, with a new categorical variable (hint = set it to\n",
    "pd.Categorical!) called \"type\", with levels \"uniform\" and \"normal\" respectively.\n",
    "Show the output of value_counts() on the \"type\" variable. It should look like:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 230,
   "id": "recovered-canadian",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              x          y\n",
      "0     12.510277  49.881929\n",
      "1     15.916051  58.341666\n",
      "2     58.151018  23.257982\n",
      "3     63.515185  75.280604\n",
      "4     37.709749  78.300269\n",
      "...         ...        ...\n",
      "1995  57.275319  58.264935\n",
      "1996  52.556659  56.325289\n",
      "1997  55.142745  50.267213\n",
      "1998  58.533367  53.824896\n",
      "1999  44.572860  54.769032\n",
      "\n",
      "[4000 rows x 2 columns]\n"
     ]
    }
   ],
   "source": [
    "combined = pd.DataFrame()\n",
    "uniform = pd.Categorical(df_uniform, categories=[\"uniform\"])\n",
    "normal = pd.Categorical(df_normal, categories=[\"normal\"])\n",
    "combined = combined.append(df_uniform)\n",
    "combined = combined.append(df_normal)\n",
    "\n",
    "print(combined)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "casual-healing",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",