diff --git a/1.)filerunfirstpython/myfile.py b/1.)filerunfirstpython/myfile.py new file mode 100644 index 00000000..705afeb5 --- /dev/null +++ b/1.)filerunfirstpython/myfile.py @@ -0,0 +1,4 @@ +print("Hello from file") +print("I am inside python file") +#this is just for learning purpose +#pip install jupyter diff --git a/2.)PYTHON_BASICS/.ipynb_checkpoints/Matplotlib-checkpoint.ipynb b/2.)PYTHON_BASICS/.ipynb_checkpoints/Matplotlib-checkpoint.ipynb new file mode 100644 index 00000000..c128d77b --- /dev/null +++ b/2.)PYTHON_BASICS/.ipynb_checkpoints/Matplotlib-checkpoint.ipynb @@ -0,0 +1,1155 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#pip install matplotlib" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt #this is subpackage for ploting( pyplot)\n", + "import numpy as np\n", + "#in mat" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "arr=np.arange(10) #np.array(range())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "arrsq=arr**2" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81], dtype=int32)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arrsq" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Line Graph" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot([1,4,9,5],[2,5,3,7]) #[xpts cordinate,ypts coordinate]\n", + "plt.show() \n", + "#esc+l show u line number" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(arr,arr,marker='o',c=\"red\") #[xpts cordinate,ypts coordinate]\n", + "plt.show() " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(arr,arr,marker=\"^\",color=\"red\",label=\"y=x\") #try start *,o\n", + "#you can check line sytle\n", + "\n", + "#plt.show() #will make two different graph\n", + "#basically we got graph at pt where we do plt.show()\n", + "\n", + "\n", + "\n", + "plt.plot(arr,arrsq,marker=\"*\",c=\"black\",label=\"y=x**2\")\n", + "#arr should be on x axis and arrsq on y axis\n", + "plt.legend() #for label a box appear \n", + "plt.xlabel(\"Numbers(0-10)\")\n", + "plt.ylabel(\"range of function\")\n", + "\n", + "\n", + "plt.title(\"Comparison function\")\n", + "plt.xlim(1,20)\n", + "#plt.ylim\n", + "#plt.axis([0,10,0,200])\n", + "\n", + "plt.xticks(np.arange(0,20,step=1))\n", + "#plt.\n", + "\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# scatter plot" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x=[1,7,2,9]\n", + "y=[5,9,2,6]\n", + "#dot is customiseable\n", + "plt.plot(x,y) #this is for line\n", + "plt.show()\n", + "plt.scatter(x,y) #this is for marking points given\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data1 = np.random.randn(100, 2)\n", + "data2 = 5*np.random.randn(100, 2) + 10\n", + "data1_x = data1[:,0]\n", + "data1_y = data1[:,1]\n", + "\n", + "data2_x = data2[:,0]\n", + "data2_y = data2[:,1]\n", + "\n", + "plt.scatter(data1_x, data1_y, label= \"small range\", marker=\"^\")\n", + "plt.scatter(data2_x, data2_y, label= \"big range\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.09107366, -0.97149027],\n", + " [-1.2951707 , -0.51397985],\n", + " [-0.45361719, -0.37472576],\n", + " [-0.53198665, 0.39857528],\n", + " [ 0.0768648 , 1.44504683],\n", + " [ 0.24587281, 1.01900015],\n", + " [-0.05829084, 0.83530687],\n", + " [-0.11801209, -0.36718575],\n", + " [ 0.51678881, 0.97417936],\n", + " [ 1.8552904 , -0.79310193],\n", + " [-0.19181311, -0.02750482],\n", + " [-0.97182056, 0.4923356 ],\n", + " [-0.2645021 , 1.54456214],\n", + " [-0.17215174, -0.01674594],\n", + " [-1.36121677, -0.00447224],\n", + " [ 0.49987116, 0.54886737],\n", + " [-0.82631644, 0.39241209],\n", + " [ 1.80022346, -0.28510364],\n", + " [-0.9457579 , -0.76545291],\n", + " [-1.02915029, -1.08392204],\n", + " [ 0.77672848, -0.4409655 ],\n", + " [ 1.24907764, 0.38397121],\n", + " [-1.11998781, -1.61373114],\n", + " [-1.137611 , 0.82812192],\n", + " [-0.41351326, -0.29780963],\n", + " [ 2.27310343, 0.67312094],\n", + " [ 0.68530284, -0.0271165 ],\n", + " [ 0.91479348, -2.97549945],\n", + " [-0.08085249, 0.12314965],\n", + " [-0.47284965, -0.782296 ],\n", + " [-0.50328927, -0.1527048 ],\n", + " [-0.05009726, -0.77974388],\n", + " [ 2.01853806, -1.71185996],\n", + " [ 1.12984133, -0.14061063],\n", + " [-0.6302038 , -0.65153455],\n", + " [ 0.66472922, -0.52883247],\n", + " [ 0.81888661, -1.25052703],\n", + " [-0.0589121 , 0.64069226],\n", + " [ 0.37228218, -1.7891959 ],\n", + " [ 1.04631385, 1.86149483],\n", + " [-1.87863241, 0.59418527],\n", + " [ 0.64088585, -0.32562025],\n", + " [-0.99568381, -0.22432453],\n", + " [-0.4148371 , 0.58703195],\n", + " [-0.17261777, -0.29647089],\n", + " [ 1.26204898, 0.21259783],\n", + " [-0.14313505, -0.62248794],\n", + " [-1.43666909, 1.73210002],\n", + " [-0.39766108, 0.24303767],\n", + " [ 0.21624468, 0.30000636],\n", + " [ 0.34715449, -0.21565297],\n", + " [-1.17570018, 1.2057132 ],\n", + " [-0.58856125, -0.48254719],\n", + " [ 0.08428315, 3.31059584],\n", + " [ 0.27262939, -1.1104249 ],\n", + " [ 1.01626304, 0.9573308 ],\n", + " [ 0.34660385, -1.09077288],\n", + " [ 0.13986455, 0.59844038],\n", + " [-0.57955221, 0.06310919],\n", + " [ 1.3448436 , 0.01490358],\n", + " [-0.66407799, -0.14579072],\n", + " [ 2.64227072, 0.0498324 ],\n", + " [-0.11505571, -0.76807033],\n", + " [ 0.27514608, -0.46989124],\n", + " [-2.62462298, 0.49075613],\n", + " [ 0.56276888, 0.5095775 ],\n", + " [-1.3063711 , -0.44751488],\n", + " [-0.49188913, 0.04187227],\n", + " [ 0.29336661, -0.5947769 ],\n", + " [-0.64638275, 1.30418626],\n", + " [-0.72042252, -0.99533715],\n", + " [ 0.70108575, -0.67365528],\n", + " [ 0.05951092, -0.28585797],\n", + " [ 0.58748971, 0.49892371],\n", + " [-0.24869697, 0.00638312],\n", + " [ 1.80809856, 0.31942412],\n", + " [ 0.9082766 , -0.28915165],\n", + " [-0.08659986, 1.53564595],\n", + " [ 0.89020744, 0.12425924],\n", + " [ 0.03722459, 0.34342103],\n", + " [ 0.0752078 , -0.38949662],\n", + " [ 1.24614062, -1.48934836],\n", + " [ 1.86690808, -1.37413865],\n", + " [ 2.67024389, -1.09845247],\n", + " [ 2.90196068, 1.67136307],\n", + " [-0.54819372, -0.71371451],\n", + " [ 1.59907164, -0.84395762],\n", + " [-1.85075641, 1.1249948 ],\n", + " [-1.04963478, -0.36455608],\n", + " [-0.02924861, -0.00899797],\n", + " [ 0.15387213, 0.42421414],\n", + " [ 1.13300102, 0.72712105],\n", + " [-2.41675623, -0.47421928],\n", + " [-0.5094076 , 0.34791321],\n", + " [-0.23653175, -0.91692753],\n", + " [-0.90700313, -0.01471973],\n", + " [-1.64523947, -0.45545769],\n", + " [-0.90686876, 1.01058112],\n", + " [ 2.26344918, 0.29572536],\n", + " [-1.29580465, -2.41431908]])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data1" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[19.81031964, 4.42804365],\n", + " [ 5.20320282, 12.65439206],\n", + " [ 9.72658438, 9.4320966 ],\n", + " [ 4.24628779, 7.66789232],\n", + " [ 4.29513471, 13.26548665],\n", + " [17.65289671, 13.19719959],\n", + " [11.01696388, 19.85796536],\n", + " [ 7.45900252, 13.21496067],\n", + " [ 2.90218934, 7.38957053],\n", + " [ 7.88353532, -1.32910359],\n", + " [10.09761955, 13.10874777],\n", + " [ 9.58855103, 4.62855946],\n", + " [11.20401535, 8.29128643],\n", + " [ 2.60486134, 11.19784295],\n", + " [ 6.86335344, 4.35944312],\n", + " [11.21413871, 10.21072142],\n", + " [-0.92004977, 11.73116682],\n", + " [ 7.390113 , 6.72072462],\n", + " [12.50831503, 5.33764354],\n", + " [18.89435248, 12.77819163],\n", + " [15.88197857, 10.39166923],\n", + " [ 7.78386691, 0.18494676],\n", + " [ 5.46349678, 6.67455479],\n", + " [ 8.94925585, 9.08543739],\n", + " [12.78670297, 6.0063234 ],\n", + " [ 8.7966454 , 9.65501514],\n", + " [10.30086998, 11.30695565],\n", + " [ 2.55539494, 12.61618662],\n", + " [ 1.63054592, 12.09156951],\n", + " [ 3.20534953, 17.27738641],\n", + " [10.74313582, 4.51274903],\n", + " [15.91580238, 13.27264494],\n", + " [16.94927334, 20.46069281],\n", + " [ 6.38059828, 4.9267144 ],\n", + " [ 9.13044071, 12.56393637],\n", + " [ 5.63126989, 6.09877594],\n", + " [ 7.59658314, 0.25386619],\n", + " [ 9.55722079, 7.8032482 ],\n", + " [ 4.11909228, 15.91286477],\n", + " [ 4.64378969, 10.77306413],\n", + " [ 6.22393437, 17.64868978],\n", + " [ 2.52430321, 9.8283433 ],\n", + " [14.05738261, 8.77567313],\n", + " [ 9.28624072, -3.76222201],\n", + " [ 9.7116777 , 5.26067082],\n", + " [13.46146413, 10.43179909],\n", + " [15.63841037, 6.63812923],\n", + " [20.86856885, 7.24084132],\n", + " [13.35124255, 14.46572766],\n", + " [ 8.10123119, -3.25529061],\n", + " [ 9.35619073, 14.55060509],\n", + " [17.42539966, 11.76485463],\n", + " [ 2.16429608, 11.27860625],\n", + " [ 1.6656722 , 9.70774896],\n", + " [11.56083534, 13.79558101],\n", + " [15.36521878, 9.7490113 ],\n", + " [ 4.29496456, 12.51359551],\n", + " [15.28142997, 8.02639209],\n", + " [16.69946898, 10.4136001 ],\n", + " [ 8.28043466, 16.53079837],\n", + " [14.8084707 , 11.82271491],\n", + " [ 2.56418112, 7.35913386],\n", + " [ 7.74142291, 8.34105786],\n", + " [ 1.16632166, 13.66194477],\n", + " [ 8.02546692, 5.07063218],\n", + " [ 7.97964317, 7.97765019],\n", + " [14.52942541, 3.16913916],\n", + " [ 5.54747046, -0.26360857],\n", + " [ 5.24018751, 8.78404101],\n", + " [ 2.47050616, 18.93919615],\n", + " [15.24897874, 9.87119695],\n", + " [ 4.2205488 , 6.70012195],\n", + " [ 5.02487135, 6.63678259],\n", + " [ 8.09354478, 25.13236703],\n", + " [11.36809264, 15.5176744 ],\n", + " [14.76675625, 8.87257472],\n", + " [ 7.83251891, 5.05211451],\n", + " [13.6053451 , 10.30442951],\n", + " [11.0819205 , 11.43822422],\n", + " [ 4.02797324, 14.74260995],\n", + " [ 6.28357521, 4.38253724],\n", + " [11.69741423, 7.19185162],\n", + " [12.63479358, 11.21856661],\n", + " [ 3.09792063, 6.52247731],\n", + " [11.79478987, 9.88527193],\n", + " [10.26174464, 8.60951832],\n", + " [10.30618506, 5.21636723],\n", + " [ 5.48155652, 5.42355 ],\n", + " [12.16996058, 23.7542834 ],\n", + " [ 5.83231834, 4.63747079],\n", + " [14.10094628, 12.76575982],\n", + " [ 8.43551947, 11.23958857],\n", + " [13.32852246, 12.46546086],\n", + " [-0.60647986, 17.63359378],\n", + " [13.45186381, 9.51883845],\n", + " [10.64256519, 15.63500683],\n", + " [11.86547064, 8.12048081],\n", + " [17.62271843, 3.50465174],\n", + " [16.84597516, 10.150159 ],\n", + " [13.23200194, 18.4998946 ]])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.3099016395083265" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#some more example have to try\n", + "np.random.randn()\n", + "#most of dataset exhibit this things\n", + "#Return a sample (or samples) from the \"standard normal\" distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.06611967654627199" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data1[:,0].mean()\n", + "#very close to 0" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0167077112318226" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data1[:,].std()\n", + "#very close to 1" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9.36804075569829" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2[:, 0].mean()\n", + "#approx =10" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.911173811428746" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2[:, 0].std()\n", + "#approx=5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(data1[:,0],bins=5) #here mean is 0 and SD is 1 \n", + "plt.show()\n", + "#see mean and SD of data1 and data2" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(data2[:,0],bins=100) #if we increase bins then size of box of histogram will decrease\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Bar plot" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "x=[\"car1\",\"car2\",\"car3\"]\n", + "sales2020=[20,5,13]\n", + "sale2019=[29,6,18]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.bar(x,sales2020,width=-0.3,align=\"edge\")\n", + "plt.bar(x,sale2019,width=0.2)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "x = np.array([1,2,3]) #if we make this a numpy arry then we can shift \n", + "sales_2019 = [20,5,13]\n", + "sales_2020 = [12, 10, 21]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.bar(x, sales_2019, width=0.2, align='edge')\n", + "plt.bar(x+0.2, sales_2020, width=0.2, align='edge')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Piechart" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "#plt.pie()??" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Images" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "#!pip install pillow" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "img=plt.imread(\"img.jpg\")\n", + "#this needs pil that is include in pillow package" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "numpy.ndarray" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(img)\n", + "#its a numpy array object" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[ 57, 214, 255],\n", + " [ 58, 214, 255],\n", + " [ 58, 215, 255],\n", + " ...,\n", + " [ 4, 167, 255],\n", + " [ 3, 167, 255],\n", + " [ 4, 168, 255]],\n", + "\n", + " [[ 57, 214, 255],\n", + " [ 58, 215, 255],\n", + " [ 57, 214, 255],\n", + " ...,\n", + " [ 4, 167, 255],\n", + " [ 3, 167, 255],\n", + " [ 3, 167, 254]],\n", + "\n", + " [[ 55, 214, 254],\n", + " [ 56, 213, 254],\n", + " [ 56, 213, 254],\n", + " ...,\n", + " [ 3, 166, 255],\n", + " [ 4, 168, 255],\n", + " [ 4, 168, 255]],\n", + "\n", + " ...,\n", + "\n", + " [[ 27, 189, 253],\n", + " [ 27, 189, 254],\n", + " [ 27, 188, 255],\n", + " ...,\n", + " [ 3, 167, 254],\n", + " [ 1, 167, 253],\n", + " [ 3, 169, 255]],\n", + "\n", + " [[ 27, 189, 254],\n", + " [ 27, 189, 254],\n", + " [ 27, 188, 255],\n", + " ...,\n", + " [ 3, 167, 255],\n", + " [ 2, 168, 254],\n", + " [ 2, 168, 254]],\n", + "\n", + " [[ 27, 189, 254],\n", + " [ 27, 188, 255],\n", + " [ 27, 188, 255],\n", + " ...,\n", + " [ 3, 167, 255],\n", + " [ 3, 167, 255],\n", + " [ 3, 169, 255]]], dtype=uint8)" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "img #numpy array" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1254, 2277, 3)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "img.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "img.ndim" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(img)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "cropped_img = img[ 40:1200 , 450:1800 , 0:3 ]\n", + "plt.imshow(cropped_img)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cropped_img.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [ + "gray_img = np.mean(cropped_img, axis=-1)\n", + "#np.mean taking 1 color at a time!! form 3 channels" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1160, 1350)" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gray_img.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(gray_img, cmap=\"gray\")" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 125, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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sgLEJRXumtzf/DSWeljaY6lLLI0LwOvevTsefPBBeL1eFBcX44UXXggeC96K8ID/bkPHQSAQgMfjwcWLF1FYWIgNGzZgz549KCsrg8vlEt0VQktfwuHmFwO3BdA999yDJ554QjIUQQtqa2tx9913Y+vWrbK2KymE3lfUk5Uam5HUvYUOVu63XAwWa5pSryG3EDkxMREdO3bEkiVLWu1UKuB0OlFfX49AIBB8l0LPnEv3+/2orq7G6dOnUVxcjN27d+P48eNBFY+/SydfahAijtBxxOqqF0tTA24r5379+uFXv/oVhg0bFvHg4Q8//BBz5sxBZWWlYolT6L6j+vh4tcZtOW+gVF4pKMnL0jalFG63Gz6fD4899lgrUakApRQ1NTXBuCYhBAIB1NfXo6SkBEeOHEFxcTGOHTuG0tJS1NXVwefzwev1itqh+JNKiFy4NCnikSondF8sJMbtRJGeno77778fs2fPDu74GmncfvvteOedd4K2q0g5F6KCrMTIQeneVazXpPKwSF5K6wSurWzPz8/HsGHDFNXXimsg5H9bLVNK4fP54HA4UFlZifLychw7dix4wjZHTl6vF16vt9m2ZxECXzJjmfRmsxnx8fEYPXo05s2bh549ezZpAHF8fDxmzpyJffv2weVyKSIqJXmjgqyEwCoxqamPg9I4LSV182EwGHDXXXf94HZOaErU1dUFpaVTp06hrq4Op06dQllZGerr6+HxeOD3+1UdHtsUCJVIWCYxd/pNly5dMG/evIgY0Flx++23Y+nSpdizZ09YdmQQQlSQldzAYlH3lBjgWdrUYkPj2z70ej0yMjIwevRoyTZbIY3MzEz07t0b+fn5CAQCsFgs2LBhA377298q2tNcjZofDrBsTMfliYmJgd1ux9133425c+dGzIDOiqSkJNx777347rvvUFVVJZiHrx4qVRdb/GIzpaqYUnVQ6bawWvNwbYYaaU0mE0aMGKE5SO/HDrPZjNTUVNhsNiQkJMBsNmPQoEHIzs5WZGRWKrU3FbFxqm58fDxuuukmLF++HIsXL252ouIwadIkdOrUSXRrpNAxL+VpF0OLJ6tQ8L074apTTR7WvXmk6qCUBmNhJk6c2LpQOQyIi4trMFmSkpJwyy23MKlHasdW6CSMFAghiImJQbt27fDrX/8aH3zwAW699dYWtU1QWloapk2bhtjY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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#img[rows,col,channels]\n", + "plt.imshow(img[40:1200 , 450:1800 ,0],cmap='gray')" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'sin' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0msin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'sin' is not defined" + ] + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/Matplotlib.ipynb b/2.)PYTHON_BASICS/Matplotlib.ipynb new file mode 100644 index 00000000..326abda2 --- /dev/null +++ b/2.)PYTHON_BASICS/Matplotlib.ipynb @@ -0,0 +1,1154 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#pip install matplotlib" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt #this is subpackage for ploting( pyplot)\n", + "import numpy as np\n", + "#in mat" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "arr=np.arange(10) #np.array(range())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "arrsq=arr**2" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81], dtype=int32)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arrsq" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Line Graph" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot([1,4,9,5],[2,5,3,7]) #[xpts cordinate,ypts coordinate]\n", + "plt.show() \n", + "#esc+l show u line number" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(arr,arr,marker='o',c=\"red\") #[xpts cordinate,ypts coordinate]\n", + "plt.show() " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(arr,arr,marker=\"^\",color=\"red\",label=\"y=x\") #try start *,o\n", + "#you can check line sytle\n", + "\n", + "#plt.show() #will make two different graph\n", + "#basically we got graph at pt where we do plt.show()\n", + "\n", + "\n", + "\n", + "plt.plot(arr,arrsq,marker=\"*\",c=\"black\",label=\"y=x**2\")\n", + "#arr should be on x axis and arrsq on y axis\n", + "plt.legend() #for label a box appear \n", + "plt.xlabel(\"Numbers(0-10)\")\n", + "plt.ylabel(\"range of function\")\n", + "\n", + "\n", + "plt.title(\"Comparison function\")\n", + "plt.xlim(1,20)\n", + "#plt.ylim\n", + "#plt.axis([0,10,0,200])\n", + "\n", + "plt.xticks(np.arange(0,20,step=1))\n", + "#plt.\n", + "\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# scatter plot" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x=[1,7,2,9]\n", + "y=[5,9,2,6]\n", + "#dot is customiseable\n", + "plt.plot(x,y) #this is for line\n", + "plt.show()\n", + "plt.scatter(x,y) #this is for marking points given\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data1 = np.random.randn(100, 2)\n", + "data2 = 5*np.random.randn(100, 2) + 10\n", + "data1_x = data1[:,0]\n", + "data1_y = data1[:,1]\n", + "\n", + "data2_x = data2[:,0]\n", + "data2_y = data2[:,1]\n", + "\n", + "plt.scatter(data1_x, data1_y, label= \"small range\", marker=\"^\")\n", + "plt.scatter(data2_x, data2_y, label= \"big range\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.09107366, -0.97149027],\n", + " [-1.2951707 , -0.51397985],\n", + " [-0.45361719, -0.37472576],\n", + " [-0.53198665, 0.39857528],\n", + " [ 0.0768648 , 1.44504683],\n", + " [ 0.24587281, 1.01900015],\n", + " [-0.05829084, 0.83530687],\n", + " [-0.11801209, -0.36718575],\n", + " [ 0.51678881, 0.97417936],\n", + " [ 1.8552904 , -0.79310193],\n", + " [-0.19181311, -0.02750482],\n", + " [-0.97182056, 0.4923356 ],\n", + " [-0.2645021 , 1.54456214],\n", + " [-0.17215174, -0.01674594],\n", + " [-1.36121677, -0.00447224],\n", + " [ 0.49987116, 0.54886737],\n", + " [-0.82631644, 0.39241209],\n", + " [ 1.80022346, -0.28510364],\n", + " [-0.9457579 , -0.76545291],\n", + " [-1.02915029, -1.08392204],\n", + " [ 0.77672848, -0.4409655 ],\n", + " [ 1.24907764, 0.38397121],\n", + " [-1.11998781, -1.61373114],\n", + " [-1.137611 , 0.82812192],\n", + " [-0.41351326, -0.29780963],\n", + " [ 2.27310343, 0.67312094],\n", + " [ 0.68530284, -0.0271165 ],\n", + " [ 0.91479348, -2.97549945],\n", + " [-0.08085249, 0.12314965],\n", + " [-0.47284965, -0.782296 ],\n", + " [-0.50328927, -0.1527048 ],\n", + " [-0.05009726, -0.77974388],\n", + " [ 2.01853806, -1.71185996],\n", + " [ 1.12984133, -0.14061063],\n", + " [-0.6302038 , -0.65153455],\n", + " [ 0.66472922, -0.52883247],\n", + " [ 0.81888661, -1.25052703],\n", + " [-0.0589121 , 0.64069226],\n", + " [ 0.37228218, -1.7891959 ],\n", + " [ 1.04631385, 1.86149483],\n", + " [-1.87863241, 0.59418527],\n", + " [ 0.64088585, -0.32562025],\n", + " [-0.99568381, -0.22432453],\n", + " [-0.4148371 , 0.58703195],\n", + " [-0.17261777, -0.29647089],\n", + " [ 1.26204898, 0.21259783],\n", + " [-0.14313505, -0.62248794],\n", + " [-1.43666909, 1.73210002],\n", + " [-0.39766108, 0.24303767],\n", + " [ 0.21624468, 0.30000636],\n", + " [ 0.34715449, -0.21565297],\n", + " [-1.17570018, 1.2057132 ],\n", + " [-0.58856125, -0.48254719],\n", + " [ 0.08428315, 3.31059584],\n", + " [ 0.27262939, -1.1104249 ],\n", + " [ 1.01626304, 0.9573308 ],\n", + " [ 0.34660385, -1.09077288],\n", + " [ 0.13986455, 0.59844038],\n", + " [-0.57955221, 0.06310919],\n", + " [ 1.3448436 , 0.01490358],\n", + " [-0.66407799, -0.14579072],\n", + " [ 2.64227072, 0.0498324 ],\n", + " [-0.11505571, -0.76807033],\n", + " [ 0.27514608, -0.46989124],\n", + " [-2.62462298, 0.49075613],\n", + " [ 0.56276888, 0.5095775 ],\n", + " [-1.3063711 , -0.44751488],\n", + " [-0.49188913, 0.04187227],\n", + " [ 0.29336661, -0.5947769 ],\n", + " [-0.64638275, 1.30418626],\n", + " [-0.72042252, -0.99533715],\n", + " [ 0.70108575, -0.67365528],\n", + " [ 0.05951092, -0.28585797],\n", + " [ 0.58748971, 0.49892371],\n", + " [-0.24869697, 0.00638312],\n", + " [ 1.80809856, 0.31942412],\n", + " [ 0.9082766 , -0.28915165],\n", + " [-0.08659986, 1.53564595],\n", + " [ 0.89020744, 0.12425924],\n", + " [ 0.03722459, 0.34342103],\n", + " [ 0.0752078 , -0.38949662],\n", + " [ 1.24614062, -1.48934836],\n", + " [ 1.86690808, -1.37413865],\n", + " [ 2.67024389, -1.09845247],\n", + " [ 2.90196068, 1.67136307],\n", + " [-0.54819372, -0.71371451],\n", + " [ 1.59907164, -0.84395762],\n", + " [-1.85075641, 1.1249948 ],\n", + " [-1.04963478, -0.36455608],\n", + " [-0.02924861, -0.00899797],\n", + " [ 0.15387213, 0.42421414],\n", + " [ 1.13300102, 0.72712105],\n", + " [-2.41675623, -0.47421928],\n", + " [-0.5094076 , 0.34791321],\n", + " [-0.23653175, -0.91692753],\n", + " [-0.90700313, -0.01471973],\n", + " [-1.64523947, -0.45545769],\n", + " [-0.90686876, 1.01058112],\n", + " [ 2.26344918, 0.29572536],\n", + " [-1.29580465, -2.41431908]])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data1" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[19.81031964, 4.42804365],\n", + " [ 5.20320282, 12.65439206],\n", + " [ 9.72658438, 9.4320966 ],\n", + " [ 4.24628779, 7.66789232],\n", + " [ 4.29513471, 13.26548665],\n", + " [17.65289671, 13.19719959],\n", + " [11.01696388, 19.85796536],\n", + " [ 7.45900252, 13.21496067],\n", + " [ 2.90218934, 7.38957053],\n", + " [ 7.88353532, -1.32910359],\n", + " [10.09761955, 13.10874777],\n", + " [ 9.58855103, 4.62855946],\n", + " [11.20401535, 8.29128643],\n", + " [ 2.60486134, 11.19784295],\n", + " [ 6.86335344, 4.35944312],\n", + " [11.21413871, 10.21072142],\n", + " [-0.92004977, 11.73116682],\n", + " [ 7.390113 , 6.72072462],\n", + " [12.50831503, 5.33764354],\n", + " [18.89435248, 12.77819163],\n", + " [15.88197857, 10.39166923],\n", + " [ 7.78386691, 0.18494676],\n", + " [ 5.46349678, 6.67455479],\n", + " [ 8.94925585, 9.08543739],\n", + " [12.78670297, 6.0063234 ],\n", + " [ 8.7966454 , 9.65501514],\n", + " [10.30086998, 11.30695565],\n", + " [ 2.55539494, 12.61618662],\n", + " [ 1.63054592, 12.09156951],\n", + " [ 3.20534953, 17.27738641],\n", + " [10.74313582, 4.51274903],\n", + " [15.91580238, 13.27264494],\n", + " [16.94927334, 20.46069281],\n", + " [ 6.38059828, 4.9267144 ],\n", + " [ 9.13044071, 12.56393637],\n", + " [ 5.63126989, 6.09877594],\n", + " [ 7.59658314, 0.25386619],\n", + " [ 9.55722079, 7.8032482 ],\n", + " [ 4.11909228, 15.91286477],\n", + " [ 4.64378969, 10.77306413],\n", + " [ 6.22393437, 17.64868978],\n", + " [ 2.52430321, 9.8283433 ],\n", + " [14.05738261, 8.77567313],\n", + " [ 9.28624072, -3.76222201],\n", + " [ 9.7116777 , 5.26067082],\n", + " [13.46146413, 10.43179909],\n", + " [15.63841037, 6.63812923],\n", + " [20.86856885, 7.24084132],\n", + " [13.35124255, 14.46572766],\n", + " [ 8.10123119, -3.25529061],\n", + " [ 9.35619073, 14.55060509],\n", + " [17.42539966, 11.76485463],\n", + " [ 2.16429608, 11.27860625],\n", + " [ 1.6656722 , 9.70774896],\n", + " [11.56083534, 13.79558101],\n", + " [15.36521878, 9.7490113 ],\n", + " [ 4.29496456, 12.51359551],\n", + " [15.28142997, 8.02639209],\n", + " [16.69946898, 10.4136001 ],\n", + " [ 8.28043466, 16.53079837],\n", + " [14.8084707 , 11.82271491],\n", + " [ 2.56418112, 7.35913386],\n", + " [ 7.74142291, 8.34105786],\n", + " [ 1.16632166, 13.66194477],\n", + " [ 8.02546692, 5.07063218],\n", + " [ 7.97964317, 7.97765019],\n", + " [14.52942541, 3.16913916],\n", + " [ 5.54747046, -0.26360857],\n", + " [ 5.24018751, 8.78404101],\n", + " [ 2.47050616, 18.93919615],\n", + " [15.24897874, 9.87119695],\n", + " [ 4.2205488 , 6.70012195],\n", + " [ 5.02487135, 6.63678259],\n", + " [ 8.09354478, 25.13236703],\n", + " [11.36809264, 15.5176744 ],\n", + " [14.76675625, 8.87257472],\n", + " [ 7.83251891, 5.05211451],\n", + " [13.6053451 , 10.30442951],\n", + " [11.0819205 , 11.43822422],\n", + " [ 4.02797324, 14.74260995],\n", + " [ 6.28357521, 4.38253724],\n", + " [11.69741423, 7.19185162],\n", + " [12.63479358, 11.21856661],\n", + " [ 3.09792063, 6.52247731],\n", + " [11.79478987, 9.88527193],\n", + " [10.26174464, 8.60951832],\n", + " [10.30618506, 5.21636723],\n", + " [ 5.48155652, 5.42355 ],\n", + " [12.16996058, 23.7542834 ],\n", + " [ 5.83231834, 4.63747079],\n", + " [14.10094628, 12.76575982],\n", + " [ 8.43551947, 11.23958857],\n", + " [13.32852246, 12.46546086],\n", + " [-0.60647986, 17.63359378],\n", + " [13.45186381, 9.51883845],\n", + " [10.64256519, 15.63500683],\n", + " [11.86547064, 8.12048081],\n", + " [17.62271843, 3.50465174],\n", + " [16.84597516, 10.150159 ],\n", + " [13.23200194, 18.4998946 ]])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.3099016395083265" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#some more example have to try\n", + "np.random.randn()\n", + "#most of dataset exhibit this things\n", + "#Return a sample (or samples) from the \"standard normal\" distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.06611967654627199" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data1[:,0].mean()\n", + "#very close to 0" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0167077112318226" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data1[:,].std()\n", + "#very close to 1" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9.36804075569829" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2[:, 0].mean()\n", + "#approx =10" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.911173811428746" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2[:, 0].std()\n", + "#approx=5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(data1[:,0],bins=5) #here mean is 0 and SD is 1 \n", + "plt.show()\n", + "#see mean and SD of data1 and data2" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(data2[:,0],bins=100) #if we increase bins then size of box of histogram will decrease\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Bar plot" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "x=[\"car1\",\"car2\",\"car3\"]\n", + "sales2020=[20,5,13]\n", + "sale2019=[29,6,18]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD5CAYAAAA+0W6bAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAMaElEQVR4nO3cf6ydhV3H8fdHCtRsk8G4kA7oSjayjEEselOXsJg5HGH7B9BsEQ3rH5iSOBKWYLROl9U/TDBx2x/OLHaBrH/MOdxGIIJOQlCCmcTbreOHdWHOZgJNezuUgVEn8PWPPo3N7b09p/ecc8u3fb+Sm3POc55zn2/zhHee+5znIVWFJKmfnzjZA0iSVseAS1JTBlySmjLgktSUAZekpgy4JDW1btQKSdYDjwJnD+t/tao+leQ84CvAJmAf8JGq+vfj/a7zzz+/Nm3aNOHIknR62b1796Gqmlu6PKOuA08S4A1V9XKSM4HHgNuBXwJeqKo7k2wHzq2q3z7e75qfn6+FhYVV/yMk6XSUZHdVzS9dPvIUSh328vDyzOGngOuBXcPyXcANU5pVkjSGsc6BJzkjyR7gIPBQVT0OXFhV+wGGxwtmN6YkaamxAl5Vr1bVZuBiYEuSK8bdQJJtSRaSLCwuLq52TknSEid0FUpV/Qfwt8B1wIEkGwCGx4MrfGZnVc1X1fzc3DHn4CVJqzQy4Enmkrx5eP6TwC8C/wzcD2wdVtsK3DerISVJxxp5GSGwAdiV5AwOB/+eqvrLJN8E7klyC/AD4MMznFOStMTIgFfVE8BVyyz/IXDNLIaSJI3mnZiS1JQBl6SmxjkHfnrZcc4abOPF2W9D0inPI3BJasqAS1JTBlySmjLgktSUAZekpgy4JDVlwCWpKQMuSU0ZcElqyoBLUlMGXJKaMuCS1JQBl6SmDLgkNWXAJakpAy5JTRlwSWrKgEtSUwZckpoy4JLUlAGXpKYMuCQ1ZcAlqSkDLklNjQx4kkuSPJJkb5Knk9w+LN+R5Lkke4afD81+XEnSEevGWOcV4I6q+laSNwG7kzw0vPfZqvqj2Y0nSVrJyIBX1X5g//D8pSR7gYtmPZgk6fhO6Bx4kk3AVcDjw6LbkjyR5O4k567wmW1JFpIsLC4uTjSsJOn/jR3wJG8EvgZ8vKp+BHweeDuwmcNH6J9e7nNVtbOq5qtqfm5ubgojS5JgzIAnOZPD8f5SVX0doKoOVNWrVfUa8AVgy+zGlCQtNc5VKAHuAvZW1WeOWr7hqNVuBJ6a/niSpJWMcxXK1cDNwJNJ9gzLPgHclGQzUMA+4NaZTChJWtY4V6E8BmSZtx6c/jiSpHF5J6YkNWXAJakpAy5JTRlwSWrKgEtSUwZckpoy4JLUlAGXpKYMuCQ1ZcAlqSkDLklNGXBJasqAS1JTBlySmjLgktSUAZekpgy4JDVlwCWpKQMuSU0ZcElqyoBLUlMGXJKaMuCS1JQBl6SmDLgkNWXAJakpAy5JTY0MeJJLkjySZG+Sp5PcPiw/L8lDSZ4ZHs+d/biSpCPGOQJ/Bbijqt4FvAf4WJLLge3Aw1V1GfDw8FqStEZGBryq9lfVt4bnLwF7gYuA64Fdw2q7gBtmNaQk6VjrTmTlJJuAq4DHgQuraj8cjnySC1b4zDZgG8DGjRtXPeim7Q+s+rMnYt/6NdmMJE1s7C8xk7wR+Brw8ar60bifq6qdVTVfVfNzc3OrmVGStIyxAp7kTA7H+0tV9fVh8YEkG4b3NwAHZzOiJGk541yFEuAuYG9Vfeaot+4Htg7PtwL3TX88SdJKxjkHfjVwM/Bkkj3Dsk8AdwL3JLkF+AHw4dmMKElazsiAV9VjQFZ4+5rpjiNJGpd3YkpSUwZckpoy4JLUlAGXpKYMuCQ1ZcAlqSkDLklNGXBJauqE/m+EknTK2XHOGm3nxan/So/AJakpAy5JTRlwSWrKgEtSUwZckpoy4JLUlAGXpKYMuCQ1ZcAlqSkDLklNGXBJasqAS1JTBlySmjLgktSUAZekpgy4JDVlwCWpqZEBT3J3koNJnjpq2Y4kzyXZM/x8aLZjSpKWGucI/IvAdcss/2xVbR5+HpzuWJKkUUYGvKoeBV5Yg1kkSSdgknPgtyV5YjjFcu7UJpIkjWW1Af888HZgM7Af+PRKKybZlmQhycLi4uIqNydJWmpVAa+qA1X1alW9BnwB2HKcdXdW1XxVzc/Nza12TknSEqsKeJINR728EXhqpXUlSbOxbtQKSb4MvA84P8mzwKeA9yXZDBSwD7h1hjNKkpYxMuBVddMyi++awSySpBPgnZiS1JQBl6SmDLgkNWXAJakpAy5JTRlwSWrKgEtSUwZckpoy4JLU1Mg7MSXpZNm0/YGZb2Pf+plvYmY8Apekpgy4JDVlwCWpKQMuSU0ZcElqyoBLUlMGXJKaMuCS1JQBl6SmDLgkNWXAJakpAy5JTRlwSWrKgEtSUwZckpoy4JLUlAGXpKZGBjzJ3UkOJnnqqGXnJXkoyTPD47mzHVOStNQ4R+BfBK5bsmw78HBVXQY8PLyWJK2hkQGvqkeBF5Ysvh7YNTzfBdww5bkkSSOs9hz4hVW1H2B4vGClFZNsS7KQZGFxcXGVm5MkLTXzLzGramdVzVfV/Nzc3Kw3J0mnjdUG/ECSDQDD48HpjSRJGsdqA34/sHV4vhW4bzrjSJLGNc5lhF8Gvgm8M8mzSW4B7gQ+kOQZ4APDa0nSGlo3aoWqummFt66Z8iySpBPgnZiS1JQBl6SmDLgkNWXAJakpAy5JTRlwSWrKgEtSUwZckpoy4JLUlAGXpKYMuCQ1ZcAlqSkDLklNGXBJasqAS1JTBlySmjLgktSUAZekpgy4JDVlwCWpKQMuSU0ZcElqyoBLUlPrTvYA0uvCjnPWaDsvrs12dFrwCFySmjLgktSUAZekpiY6B55kH/AS8CrwSlXNT2MoSdJo0/gS8xeq6tAUfo8k6QR4CkWSmpr0CLyAv0lSwJ9W1c6lKyTZBmwD2Lhx44Sb0+lo0/YHZr6Nfetnvglp6iY9Ar+6qn4G+CDwsSQ/v3SFqtpZVfNVNT83Nzfh5iRJR0wU8Kp6fng8CNwLbJnGUJKk0VYd8CRvSPKmI8+Ba4GnpjWYJOn4JjkHfiFwb5Ijv+fPquqvpzKVJGmkVQe8qr4P/PQUZ5EknQAvI5Skpgy4JDVlwCWpKQMuSU0ZcElqyoBLUlMGXJKaMuCS1JQBl6SmDLgkNWXAJakpAy5JTRlwSWrKgEtSUwZckpoy4JLUlAGXpKYMuCQ1ZcAlqSkDLklNGXBJasqAS1JTBlySmjLgktSUAZekpgy4JDU1UcCTXJfku0m+l2T7tIaSJI226oAnOQP4E+CDwOXATUkun9ZgkqTjm+QIfAvwvar6flX9GPhz4PrpjCVJGmWSgF8E/NtRr58dlkmS1sC6CT6bZZbVMSsl24Btw8uXk3x3gm3O3HL/qBHOBw6d0Cd+fxVb0Uytco+4708BTfb925ZbOEnAnwUuOer1xcDzS1eqqp3Azgm287qWZKGq5k/2HFp77vvT1+tl309yCuUfgcuSXJrkLOBXgPunM5YkaZRVH4FX1StJbgO+AZwB3F1VT09tMknScU1yCoWqehB4cEqzdHXKnh7SSO7709frYt+n6pjvHSVJDXgrvSQ1ZcBnIMlbkjyS5OUknzvZ82htJPlAkt1Jnhwe33+yZ9LaSLIlyZ7h5ztJblyT7XoKZbqSrAPOBq4CrgCuqKrbTu5UmrVhv18JHKiq55NcAXyjqry57RQ37PuzgB8PF3dsAL4DvLWqXpnltif6EvNUl+SjwG9y+AalJ4B7gN/j8M76IfBrVXUgyQ7grcAm4FBV/SrwWJJ3nIy5NZkJ9/sRTwPrk5xdVf+zhuNrAlPa9+tZ5qbGWTDgK0jybuB3gaur6lCS8zi8U95TVZXk14HfAu4YPvKzwHur6r9OzsSahinu918Gvm28+5h03yf5OeBuDt81efOsj77BgB/P+4GvVtUhgKp6IcmVwFeGP5HOAv71qPXvN96nhIn3+xCCPwSuXaOZNR0T7fuqehx4d5J3AbuS/FVV/fcsB/ZLzJWFY/8M+mPgc1V1JXArh/9UOuI/12owzdRE+z3JxcC9wEer6l9mOaimbir/zVfV3uG9K2Yx5NEM+MoeBj6S5C0Aw59T5wDPDe9vPVmDaaZWvd+TvBl4APidqvr7WQ+qqZtk3186fJlJkrcB7wT2zXRaPIWyoqp6OskfAH+X5FXg28AO4C+SPAf8A3DpSp9Psg/4KeCsJDcA11bVP818cE1kwv1+G/AO4JNJPjksu7aqDs54bE3BhPv+vcD2JP8LvAb8xpFTMbPkZYSS1JSnUCSpKQMuSU0ZcElqyoBLUlMGXJKaMuCS1JQBl6SmDLgkNfV/brQ97f/zk/MAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.bar(x,sales2020,width=-0.3,align=\"edge\")\n", + "plt.bar(x,sale2019,width=0.2)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "x = np.array([1,2,3]) #if we make this a numpy arry then we can shift \n", + "sales_2019 = [20,5,13]\n", + "sales_2020 = [12, 10, 21]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.bar(x, sales_2019, width=0.2, align='edge')\n", + "plt.bar(x+0.2, sales_2020, width=0.2, align='edge')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Piechart" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "#plt.pie()??" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Images" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "#!pip install pillow" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "img=plt.imread(\"img.jpg\")\n", + "#this needs pil that is include in pillow package" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "numpy.ndarray" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(img)\n", + "#its a numpy array object" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[ 57, 214, 255],\n", + " [ 58, 214, 255],\n", + " [ 58, 215, 255],\n", + " ...,\n", + " [ 4, 167, 255],\n", + " [ 3, 167, 255],\n", + " [ 4, 168, 255]],\n", + "\n", + " [[ 57, 214, 255],\n", + " [ 58, 215, 255],\n", + " [ 57, 214, 255],\n", + " ...,\n", + " [ 4, 167, 255],\n", + " [ 3, 167, 255],\n", + " [ 3, 167, 254]],\n", + "\n", + " [[ 55, 214, 254],\n", + " [ 56, 213, 254],\n", + " [ 56, 213, 254],\n", + " ...,\n", + " [ 3, 166, 255],\n", + " [ 4, 168, 255],\n", + " [ 4, 168, 255]],\n", + "\n", + " ...,\n", + "\n", + " [[ 27, 189, 253],\n", + " [ 27, 189, 254],\n", + " [ 27, 188, 255],\n", + " ...,\n", + " [ 3, 167, 254],\n", + " [ 1, 167, 253],\n", + " [ 3, 169, 255]],\n", + "\n", + " [[ 27, 189, 254],\n", + " [ 27, 189, 254],\n", + " [ 27, 188, 255],\n", + " ...,\n", + " [ 3, 167, 255],\n", + " [ 2, 168, 254],\n", + " [ 2, 168, 254]],\n", + "\n", + " [[ 27, 189, 254],\n", + " [ 27, 188, 255],\n", + " [ 27, 188, 255],\n", + " ...,\n", + " [ 3, 167, 255],\n", + " [ 3, 167, 255],\n", + " [ 3, 169, 255]]], dtype=uint8)" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "img #numpy array" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1254, 2277, 3)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "img.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "img.ndim" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(img)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "cropped_img = img[ 40:1200 , 450:1800 , 0:3 ]\n", + "plt.imshow(cropped_img)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1160, 1350, 3)" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cropped_img.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "gray_img = np.mean(cropped_img, axis=-1)\n", + "#np.mean taking 1 color at a time!! form 3 channels" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1160, 1350)" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gray_img.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(gray_img, cmap=\"gray\")" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#img[rows,col,channels]\n", + "plt.imshow(img[40:1200 , 450:1800 ,0],cmap='gray')" + ] + }, + { + "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": { + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/OOPS Example by me-checkpoint.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/OOPS Example by me-checkpoint.ipynb new file mode 100644 index 00000000..d629367e --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/OOPS Example by me-checkpoint.ipynb @@ -0,0 +1,275 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "def Height(h):\n", + " h=input()\n", + " return \"my height is \"+h\n", + "\n", + "def weight(w):\n", + " w=input()\n", + " return \"my weight is \"+w" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "class Animal:\n", + " #class variable\n", + " \n", + " pop=0\n", + " animals=[]\n", + " \n", + " \n", + " #constructor\n", + " def __init__(self,name,color,age):\n", + " self.name=name\n", + " self.age=age\n", + " self.color=color\n", + " self.alive=True\n", + " Animal.pop+=1\n", + " self.h=0\n", + " self.w=0\n", + " Animal.animals.append(self)\n", + " \n", + " def recording(self):\n", + " a= Height(self.h)\n", + " b= weight(self.w)\n", + " return (str(a+b))\n", + " \n", + " \n", + " def __repr__(self):\n", + " return f\"my name is {self.name}, My color is {self.color},my age is {self.age} ,iam alive is {self.alive},record: {self.h},{self.w}\"\n", + " #print(f\"iam alive is {self.alive}\")\n", + " #return self.recording()\n", + " \n", + " \n", + " \n", + " \n", + " #def Predator(self,Animal): " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "crow=Animal(\"crow\",\"black\",10)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "'my height is my weight is '" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crow.recording()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is crow, My color is black,my age is 10 ,iam alive is True,record: 0,0\n" + ] + } + ], + "source": [ + "print(crow)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "cat=Animal(\"kitty\",\"white\",4)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "my name is kitty, My color is white,my age is 4 ,iam alive is True,record: 0,0" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cat" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Animal.pop" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[my name is crow, My color is black,my age is 10 ,iam alive is True,record: 0,0,\n", + " my name is kitty, My color is white,my age is 4 ,iam alive is True,record: 0,0]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Animal.animals" + ] + }, + { + "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": [] + }, + { + "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": { + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/OOPS example by me2-checkpoint.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/OOPS example by me2-checkpoint.ipynb new file mode 100644 index 00000000..8509578f --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/OOPS example by me2-checkpoint.ipynb @@ -0,0 +1,306 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "class Circle(object):\n", + " \n", + " #constructor\n", + " def __init__(self,radius=3,color=\"blue\"):\n", + " self.radius =radius\n", + " self.color=color\n", + " #Method\n", + " def add_radius(self,r):\n", + " self.radius+=r\n", + " return self.radius\n", + " #method\n", + " def drawcircle(self):\n", + " #Create true circle at center\n", + " plt.gca().add_patch(plt.Circle((0,0),radius=self.radius,fc=self.color))\n", + " plt.axis('scaled') #'scaled' Set equal scaling \n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "redcircle=Circle(10,\"red\")" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "## Find out the methods can be used on the object RedCircle\n", + "\n", + "# dir(RedCircle)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(10, 'red')" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "redcircle.radius,redcircle.color" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "redcircle.drawcircle()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "BlueCircle = Circle(radius=100)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'blue'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "BlueCircle.color" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "BlueCircle.drawcircle()" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAPaklEQVR4nO3df4xlZX3H8fdnWY3OKgXDaCkLrDaKfxDjj6lRSdWCNLQS8Y82kQxmtaSTmNai/aHoJhL/2IRYYzUxsZnACsbpGotYjWlVotatiaKziAVcFGPZdQTdIdvWH5tKqd/+ce/WZbqzd+69Z+bOPvt+JZtzz3Oemed7QvbD2ec+55xUFZKkU9+WSRcgSeqGgS5JjTDQJakRBrokNcJAl6RGGOiS1IiBgZ7k/CRfSnIgyX1Jruu3Py3JHUke6G/PXv9yJUmryaB16EnOBc6tqruSPBXYD7wWeANwpKpuTHI9cHZVvX29C5YkndjAK/Sqeriq7up//ilwADgPuAq4td/tVnohL0makIFX6I/rnOwA9gEXA4eq6qzjjv17Vf2/aZckc8AcwLZt21703Oc+d8ySJen0sn///keqanpQv61r/YVJngJ8AnhLVf0kyZp+rqrmgXmAmZmZWlxcXOuQkiQgycG19FvTKpckT6AX5gtVdXu/+cf9+fVj8+yHRylUktSNtaxyCXAzcKCq3nfcoU8DO/ufdwKf6r48SdJarWXK5RLg9cA9Se7ut70TuBH4eJJrgUPAH65PiZKktRgY6FX1FWC1CfPLui1HkjQq7xSVpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEWt5Y9GeJIeT3Htc2/OTfC3J3UkWk7x4fcuUJA2yliv0W4ArVrS9B3h3VT0feFd/X5I0QQMDvar2AUdWNgNn9j//GvBQx3VJkoa0lneKnshbgM8leS+9/ym8rLuSJEmjGPVL0TcBb62q84G3Ajev1jHJXH+efXF5eXnE4SRJg4wa6DuB2/uf/x5Y9UvRqpqvqpmqmpmenh5xOEnSIKMG+kPAK/qfLwUe6KYcSdKoBs6hJ9kLvBI4J8kScAPwx8AHkmwF/guYW88iJUmDDQz0qrp6lUMv6rgWSdIYvFNUkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktSIgYGeZE+Sw0nuXdH+5iTfSXJfkvesX4mSRrawADt2wJYtve3CwqQr0joa+MYi4Bbgg8BHjjUk+R3gKuB5VfWLJE9fn/IkjWxhAebm4OjR3v7Bg719gNnZydWldTPwCr2q9gFHVjS/Cbixqn7R73N4HWqTNI5du34V5sccPdprV5NGnUN/DvDbSe5M8uUkv7VaxyRzSRaTLC4vL484nKShHTo0XLtOeaMG+lbgbOAlwF8BH0+SE3Wsqvmqmqmqmenp6RGHkzS0Cy4Yrl2nvFEDfQm4vXq+DvwSOKe7siSNbfdumJp6fNvUVK9dTRo10P8BuBQgyXOAJwKPdFWUpA7MzsL8PFx4ISS97fy8X4g2bOAqlyR7gVcC5yRZAm4A9gB7+ksZHwV2VlWtZ6GSRjA7a4CfRgYGelVdvcqhazquRZI0Bu8UlaRGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREDAz3JniSH+y+zWHnsL5NUEl8/J0kTtpYr9FuAK1Y2JjkfuBzwFeKStAkMDPSq2gccOcGhvwHeBvjqOUnaBEaaQ0/yGuCHVfWtNfSdS7KYZHF5eXmU4SRJazB0oCeZAnYB71pL/6qar6qZqpqZnp4edjhJ0hqNcoX+m8AzgW8leRDYDtyV5Ne7LEySNJytw/5AVd0DPP3Yfj/UZ6rqkQ7rkiQNaS3LFvcCXwUuSrKU5Nr1L0uSNKyBV+hVdfWA4zs6q0aSNDLvFJWkRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRa3nBxZ4kh5Pce1zbXye5P8m/JvlkkrPWt0xJ0iBruUK/BbhiRdsdwMVV9Tzgu8A7Oq5LkjSkgYFeVfuAIyvaPl9Vj/V3v0bvRdGSpAnqYg79j4B/Wu1gkrkki0kWl5eXOxhOknQiYwV6kl3AY8DCan2qar6qZqpqZnp6epzhJEknMfAl0atJshO4Erisqqq7kiRJoxgp0JNcAbwdeEVVHe22JEnSKNaybHEv8FXgoiRLSa4FPgg8Fbgjyd1J/nad65QkDTDwCr2qrj5B883rUIskaQzeKSpJjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1Ij1vKCiz1JDie597i2pyW5I8kD/e3Z61umJGmQtVyh3wJcsaLteuALVfVs4Av9fUnSBA0M9KraBxxZ0XwVcGv/863AazuuS5I0pFHn0J9RVQ8D9LdPX61jkrkki0kWl5eXRxxOkjTIun8pWlXzVTVTVTPT09PrPZwknbZGDfQfJzkXoL893F1JkqRRjBronwZ29j/vBD7VTTmSpFGtZdniXuCrwEVJlpJcC9wIXJ7kAeDy/r4kaYK2DupQVVevcuiyjmuRJI3BO0UlqREGuiQ1wkCXpEYY6Dq9LSzAjh2wZUtvu7Aw6YqkkQ38UlRq1sICzM3B0aO9/YMHe/sAs7OTq0sakVfoOn3t2vWrMD/m6NFeu3QKMtB1+jp0aLh2aZMz0HX6uuCC4dqlTc5A1+lr926Ymnp829RUr106BRnoOn3NzsL8PFx4ISS97fy8X4jqlOUqF53eZmcNcDXDK3RJaoSBLkmNMNAlqREGuiQ1YqxAT/LWJPcluTfJ3iRP6qowSdJwRg70JOcBfwbMVNXFwBnA67oqTJI0nHGnXLYCT06yFZgCHhq/JEnSKEYO9Kr6IfBe4BDwMPCfVfX5lf2SzCVZTLK4vLw8eqWSpJMaZ8rlbOAq4JnAbwDbklyzsl9VzVfVTFXNTE9Pj16pJOmkxplyeRXwb1W1XFX/DdwOvKybsiRJwxon0A8BL0kylSTAZcCBbsqSJA1rnDn0O4HbgLuAe/q/a76juiRJQxrr4VxVdQNwQ0e1SJLG4J2iktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNWKsQE9yVpLbktyf5ECSl3ZVmCRpOGO94AL4APDZqvqDJE8EpjqoSZI0gpEDPcmZwMuBNwBU1aPAo92UJUka1jhTLs8CloEPJ/lmkpuSbFvZKclcksUki8vLy2MMJ0k6mXECfSvwQuBDVfUC4OfA9Ss7VdV8Vc1U1cz09PQYw0mSTmacQF8Clqrqzv7+bfQCXpI0ASMHelX9CPhBkov6TZcB3+6kKknS0MZd5fJmYKG/wuX7wBvHL0mSNIqxAr2q7gZmOqpFkjQG7xSVpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEWMHepIz+i+J/kwXBUmSRtPFFfp1wIEOfo82q4UF2LEDtmzpbRcWJl2RpBMYK9CTbAdeDdzUTTnadBYWYG4ODh6Eqt52bs5Qlzahca/Q3w+8DfhlB7VoM9q1C44efXzb0aO9dkmbysiBnuRK4HBV7R/Qby7JYpLF5eXlUYfTpBw6NFy7pIkZ5wr9EuA1SR4EPgZcmuSjKztV1XxVzVTVzPT09BjDaSIuuGC4dkkTM3KgV9U7qmp7Ve0AXgd8saqu6awybQ67d8PU1OPbpqZ67ZI2Fdeh6+RmZ2F+Hi68EJLedn6+1y5pU0lVbdhgMzMztbi4uGHjSVILkuyvqplB/bxCl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1YpyXRJ+f5EtJDiS5L8l1XRYmSRrO1jF+9jHgL6rqriRPBfYnuaOqvt1RbZKkIYzzkuiHq+qu/uefAgeA87oqTJI0nHGu0P9Pkh3AC4A7T3BsDpjr7/4iyb1djLlJnQM8Muki1lHL59fyuYHnd6q7aC2dxn5JdJKnAF8GdlfV7QP6Lq7lRaenKs/v1NXyuYHnd6pb6/mNtcolyROATwALg8JckrS+xlnlEuBm4EBVva+7kiRJoxjnCv0S4PXApUnu7v/5/QE/Mz/GeKcCz+/U1fK5ged3qlvT+Y09hy5J2hy8U1SSGmGgS1IjNiTQk1yR5DtJvpfk+o0YcyMl2ZPkcItr7Ft/xEOSJyX5epJv9c/v3ZOuqWtJzkjyzSSfmXQt6yHJg0nu6X+PtzjperqU5KwktyW5v/938KUn7b/ec+hJzgC+C1wOLAHfAK5u6REBSV4O/Az4SFVdPOl6upTkXODc4x/xALy2lf9+/dVa26rqZ/1luF8Brquqr024tM4k+XNgBjizqq6cdD1dS/IgMFNVzd1YlORW4F+q6qYkTwSmquo/Vuu/EVfoLwa+V1Xfr6pHgY8BV23AuBumqvYBRyZdx3po/REP1fOz/u4T+n+aWSmQZDvwauCmSdei4SQ5E3g5veXhVNWjJwtz2JhAPw/4wXH7SzQUCKeTkz3i4VTWn5K4GzgM3FFVLZ3f+4G3Ab+cdCHrqIDPJ9nff9RIK54FLAMf7k+Z3ZRk28l+YCMCPSdoa+YK6HTRf8TDJ4C3VNVPJl1Pl6rqf6rq+cB24MVJmpg2S3IlcLiq9k+6lnV2SVW9EPg94E/6U6At2Aq8EPhQVb0A+Dlw0u8gNyLQl4Dzj9vfDjy0AeOqI6fLIx76/5z9Z+CKCZfSlUuA1/TnmD9G7ybAj062pO5V1UP97WHgk/SmeVuwBCwd9y/G2+gF/Ko2ItC/ATw7yTP7k/qvAz69AeOqA60/4iHJdJKz+p+fDLwKuH+yVXWjqt5RVdurage9v3dfrKprJlxWp5Js639ZT3864neBJlabVdWPgB8kOfakxcuAky5G6OTxuQOKeizJnwKfA84A9lTVfes97kZKshd4JXBOkiXghqq6ebJVdebYIx7u6c8zA7yzqv5xgjV16Vzg1v5qrC3Ax6uqyeV9jXoG8MnedQdbgb+rqs9OtqROvRlY6F8Mfx9448k6e+u/JDXCO0UlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWrE/wLcHuUR0/MvVgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')\n", + "plt.axis()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "class Rectangle(object):\n", + " \n", + " # Constructor\n", + " def __init__(self, width=2, height=3, color='r'):\n", + " self.height = height \n", + " self.width = width\n", + " self.color = color\n", + " \n", + " # Method\n", + " def drawRectangle(self):\n", + " plt.gca().add_patch(plt.Rectangle((0, 0), self.width, self.height ,fc=self.color))\n", + " plt.axis('scaled')\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "SkinnyBlueRectangle = Rectangle(2, 10, 'blue')" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(10, 2, 'blue')" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SkinnyBlueRectangle.height ,SkinnyBlueRectangle.width,SkinnyBlueRectangle.color" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAE4AAAD4CAYAAABCOdB1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAGuklEQVR4nO3dX4hcdxnG8e9jYqitFSuJUpOu20IpBG8aFv/jhbVQo1gvvLCgVBH2Sq0iSMWL3nohohcihFotWOpFLVikqKVaRJDibozaGLV/tO220WwRVLyJxdeLmUiY3U1mn9/p2XO6zweWnZ0Z9rx8mdmZ2fmdM6oqYvtesdMDjFXCmRLOlHCmhDPt7XNj+/fvr8XFxT43aVtdXX2hqg5sdXmv4RYXF1lZWelzkzZJT1/o8txVTQlnSjhTwpkSznTRcJLuknRG0mPnnfc6SQ9Jenz6/YqXdszhmecW9x3gppnzbgcerqprgYenP+8qFw1XVT8H/j5z9s3A3dPTdwMf6niuwXOfAL+hqk4DVNVpSa/f6oqSloFlgIWFhel55lZ7MO+/J1/yB4eqOlZVS1W1dODAlq9gRscN9zdJVwJMv5/pbqRxcMM9ANw6PX0r8INuxhmPeZ6O3Av8ErhO0pqkTwJfBm6U9Dhw4/TnXeWiDw5VdcsWF93Q8SyjklcOpoQzJZwp4UwJZ0o4U8KZEs6UcKaEMyWcKeFMCWdKOFPCmRLOlHCmhDMlnCnhTAlnSjhTwpkSzpRwpoQzJZwp4UwJZ0o4U8KZmsJJ+pykk5Iek3SvpEu6Gmzo7HCSDgKfAZaq6s3AHuAjXQ02dK131b3AqyTtBS4Fnm8faRzscFX1HPAV4BngNPCPqvrJ7PUkLUtakbSyvr7uTzowLXfVK5jsYXM18EbgMkkfnb1e9nPY6L3An6tqvar+A9wPvKObsYavJdwzwNskXSpJTFahn+pmrOFr+Rv3KHAfcBz43fR3HetorsFrOgpEVd0B3NHRLKOSVw6mhDMlnCnhTAlnSjhTwpkSzpRwpoQzJZwp4UwJZ0o4U8KZEs6UcKaEMyWcKeFMCWdKOFPCmRLOlHCmhDMlnCnhTAlnSjhT63L910q6T9IfJJ2S9PauBhu61k9J+jrwo6r6sKR9TFae7wp2OEmvAd4NfBygqs4CZ7sZa/ha7qrXAOvAtyX9WtKdki6bvVKW62+0FzgCfLOqrgf+zSafJJLl+hutAWvTRdQwWUh9pH2kcWhZdf5X4FlJ103PugH4fSdTjUDro+qngXumj6hPAZ9oH2kcWpfrnwCWOpplVPLKwZRwpoQzJZwp4UwJZ0o4U8KZEs6UcKaEMyWcKeFMCWdKOFPCmRLOlHCmhDMlnCnhTAlnSjhTwpkSzpRwpoQzJZwp4UwJZ0o4U3M4SXumi6d/2MVAY9HFLe42dtERp89p3bPmEPB+4M5uxhmP1lvc14AvAP/d6grZz2GGpA8AZ6pq9ULXy34OG70T+KCkvwDfA94j6budTDUCLfs5fLGqDlXVIpPPqvlpVW34IIyXqzyPM7XuIAJAVT0CPNLF7xqL3OJMCWdKOFPCmRLOlHCmhDMlnCnhTAlnSjhTwpkSzpRwpoQzJZwp4UwJZ0o4U8KZEs6UcKaEMyWcKeFMCWdKOFPCmRLOlHCmlqWsV0n62fTjCE5Kuq3LwYauZX3ci8Dnq+q4pMuBVUkPVdWuOPp0y1LW01V1fHr6X0z2dTjY1WBD18nfOEmLwPXAo5tcluX6m5H0auD7wGer6p+zl2e5/iYkvZJJtHuq6v5uRhqHlkdVAd8CTlXVV7sbaRxadxD5GJMdQ05Mv452NNfg2U9HquoXgDqcZVTyysGUcKaEMyWcKeFMCWdKOFPCmRLOlHCmhDMlnCnhTAlnSjhTwpkSzpRwpoQzJZwp4UwJZ0o4U8KZEs6UcKaEMyWcKeFMCWdKOFPrUtabJP1R0hOSbu9qqDFoWcq6B/gG8D7gMHCLpMNdDTZ0Lbe4twBPVNVTVXWWyfHOb+5mrOFr2bPmIPDseT+vAW+dvZKkZWAZYGFhAYCqhq0ORMstbrP1vxuSZD+HjdaAq877+RDwfNs449ES7lfAtZKulrSPyUcTPNDNWMPXslz/RUmfAn4M7AHuqqqTnU02cE0fS1BVDwIPdjTLqOSVgynhTAlnSjiTqsen8ZLWgaeB/cALvW14e87N9qaq2vIZe6/h/r9RaaWqlnrf8BzmnS13VVPCmXYq3LEd2u485pptR/7GvRzkrmpKOFOv4Yb85s62D7JVVb18MfnX05PANcA+4DfA4b62P8d8VwJHpqcvB/50ofn6vMUN+s2d7R5kq89wm725M8ijf13oIFvn9Blurjd3dtrFDrJ1Tp/hBv/mznYOstVnuEG/ubPtg2z1/Mh1lMmj1ZPAl3b6kXRmtncx+dPxW+DE9OvoVtfPSy5TXjmYEs6UcKaEMyWcKeFMCWf6HwezQ1Yzc3TpAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "SkinnyBlueRectangle.drawRectangle()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "FatYellowRectangle = Rectangle(20, 5, 'yellow')" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "FatYellowRectangle.drawRectangle()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_1-checkpoint.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_1-checkpoint.ipynb new file mode 100644 index 00000000..6cafa80f --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_1-checkpoint.ipynb @@ -0,0 +1,756 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "Xu9FNy7sb2KQ", + "outputId": "ea1ac106-a342-414c-e380-400433ec697b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello world \n" + ] + } + ], + "source": [ + "# SHift +Enter\n", + "print(\"hello world \")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "uyQetya5cH8L", + "outputId": "7a594e00-817b-4b51-c234-0d209ae2f4a7" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n" + ] + } + ], + "source": [ + "a=9\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "ZgzHKq0EcoAP", + "outputId": "744f0146-a242-495e-c1d6-c28c5f3a05f3" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "int" + ] + }, + "execution_count": 3, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "type(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "hgBfpaFEimpO", + "outputId": "6aea740e-d7ac-4914-9665-900fb4b79b34" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Hello \n" + ] + } + ], + "source": [ + "a=\" Hello \"\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "Hfu7hXnCiwus", + "outputId": "c0df828b-70ac-4ff3-da32-a8fccf198d17" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "str" + ] + }, + "execution_count": 5, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "type(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "colab_type": "code", + "id": "-QiP-kJfiyck", + "outputId": "83f7c615-bf8f-443c-b480-92f97c847189" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " num is smaller than 5\n", + "endofelse\n" + ] + } + ], + "source": [ + "#if coditions\n", + "n=3 \n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "elif n<5:\n", + " print(\" num is smaller than 5\") \n", + "else:\n", + " print(\"num is smaller than 10\") #indentation level 1\n", + "print(\"endofelse\") #indentation level 0" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "_-tg9WVwjR8T" + }, + "outputs": [], + "source": [ + "#keywords identifiers\n", + "#packages module or different source of code \n", + "import keyword" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "colab_type": "code", + "id": "TiLJMY6ElLpV", + "outputId": "a6a2a15a-0762-4512-f5d1-7d880f0a85bb" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']\n" + ] + } + ], + "source": [ + "print(keyword.kwlist) #that cant be use !!" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 119 + }, + "colab_type": "code", + "id": "mGEtwo5tlOmE", + "outputId": "dff7a96d-249e-490e-cbf2-a7b9ef644979" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18\n", + "-2\n", + "80\n", + "0.8\n", + "0\n", + "1073741824\n" + ] + } + ], + "source": [ + "a=8 \n", + "b=10\n", + "print(a+b)\n", + "print(a-b)\n", + "print(a*b)\n", + "print(a/b) #float division\n", + "print(a//b) #int divison\n", + "print(a**b) #a^b" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "D9CKva_UmIVT" + }, + "outputs": [], + "source": [ + "var1=\"Hello\"\n", + "var2=\"World\"" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "_Tr0OzU5mdJg", + "outputId": "33270f75-68ac-4a30-d16e-803efee2527c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Hello World'" + ] + }, + "execution_count": 16, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "var1 +\" \"+var2" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "FJaY_lCMmm4g", + "outputId": "7a46aaa8-ca48-42c6-9b56-6ad52f46d88c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'HelloHelloHello'" + ] + }, + "execution_count": 17, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "var1*3" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 163 + }, + "colab_type": "code", + "id": "sv-KPvEsmtIE", + "outputId": "7e35d39d-96a1-418b-a234-f8378bd93fc1" + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "ignored", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mvar1\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: must be str, not int" + ] + } + ], + "source": [ + "var1+3 # it cant concatenate when we dont have same type of var" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "XBezuXBJmvSf", + "outputId": "ea47a937-6216-4dd3-dbea-f9018c03630a" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Hello3'" + ] + }, + "execution_count": 19, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "var1 +str(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "ReHe-_SpnHIZ" + }, + "outputs": [], + "source": [ + "#notebook based ide give intermiadiate result (its of last statement always!!)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "vPrj6kXnnsqu", + "outputId": "80769e78-ea0d-4e49-9498-1dbb21950aad" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "int" + ] + }, + "execution_count": 21, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "type(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "cjucjgzjnwbA" + }, + "outputs": [], + "source": [ + " # are called magic function only work in jupyter notebbok" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "colab_type": "code", + "id": "-Jj3TzgsoatU", + "outputId": "11d33ceb-f72a-4b96-dc51-13ba56a8f1a3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "print(\"hello world\")\n", + "a=9\n", + "print(a)\n", + "type(a)\n", + "a=\" Hello \"\n", + "print(a)\n", + "type(a)\n", + "#if coditions\n", + "n=9\n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "else:\n", + " print(\"num is smaller than 10\")\n", + "#if coditions\n", + "n=9\n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "else:\n", + " print(\"num is smaller than 10\") \n", + "print(\"endofelse\")\n", + "#if coditions\n", + "n=9\n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "else:\n", + " print(\"num is smaller than 10\") #indentation level 1\n", + "print(\"endofelse\") #indentation level 0\n", + "#if coditions\n", + "n=3\n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "elif:\n", + " print(\" num is smaller than 5\") \n", + "else:\n", + " print(\"num is smaller than 10\") #indentation level 1\n", + "print(\"endofelse\") #indentation level 0\n", + "#if coditions\n", + "n=3 \n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "elif n<5:\n", + " print(\" num is smaller than 5\") \n", + "else:\n", + " print(\"num is smaller than 10\") #indentation level 1\n", + "print(\"endofelse\") #indentation level 0\n", + "#packages \n", + "import keyword\n", + "keyword.kwlist\n", + "print(keyword.kwlist) #that cant be use !!\n", + "a=8 \n", + "b=10\n", + "print(a+b)\n", + "print(a-b)\n", + "print(a*b)\n", + "print(a/b) #float division\n", + "print(a//b) #int divison\n", + "print(a**b) #a^b\n", + "var1=\"Hello\"\n", + "var2=\"World\"\n", + "var1 +\" \"+var2\n", + "var1*3\n", + "var1+3\n", + "var1 +str(3)\n", + "#notebook based ide give intermiadiate result (its of last statement always!!)\n", + "type(a)\n", + "%history # are called magic function\n", + "%history # are called magic function only work in jupyter notebbok\n", + "%history\n" + ] + } + ], + "source": [ + "%history\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "tSzmCYgLonjt", + "outputId": "5be5e74a-ee58-4d1b-8bb7-fabaa7987626" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello aryan, your age is20\n" + ] + } + ], + "source": [ + "name=\"aryan\"\n", + "age=20\n", + "\n", + "print(\"hello \"+name+\", your age is\"+str(age))" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "Id2pZFL1pAh7", + "outputId": "1a79fef0-802b-40d8-8bf5-175bab9e1370" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2 1 1 3\n" + ] + } + ], + "source": [ + "#multiple variable in single print statement\n", + "a=2\n", + "b=1\n", + "print(a,b,a-b,a+b)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "08Xi-ynIpUS2", + "outputId": "567d7210-a38c-4912-db3c-4e26b51eee05" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello aryan , your age is 20\n" + ] + } + ], + "source": [ + "print(\"hello \",name,\", your age is\",age) # we cant give \",\" after name" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "mx1OPZLhpf9b", + "outputId": "c4554006-a995-49c3-819c-c9f7f9f4cad6" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Hello aryan, your age is 20'" + ] + }, + "execution_count": 29, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "#format func\n", + "\"Hello {}, your age is {}\".format(name,age)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "kRXnCSj0pzmW", + "outputId": "e8709ccb-8331-4d21-9292-e43d2da7f3ad" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Hello aryan, your age is 20.000'" + ] + }, + "execution_count": 30, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "# % or c++ method\n", + "\"Hello %s, your age is %0.3f\"%(name,age)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "5N77P1pSqU9F" + }, + "source": [ + "# notebook see here\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello\n" + ] + } + ], + "source": [ + "a=\"hello\"\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a=int(input())\n", + "\n", + "if a>5:\n", + " print(\"hello ritvik\")\n", + "else:\n", + " print(\"not hello\")\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "PYTHON BASICS", + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_2-checkpoint.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_2-checkpoint.ipynb new file mode 100644 index 00000000..93d4450f --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_2-checkpoint.ipynb @@ -0,0 +1,2434 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3ways of running python\n", + "bold Tag\n", + "- notebook\n", + "- CMD\n", + "- Making a python file.py" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'my name is Aryan,I am 20 yr old'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#f-string\n", + "name=\"Aryan\"\n", + "age=20\n", + "\n", + "f\"my name is {name},I am {age} yr old\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# starting loop\n", + " - while loop \n", + " - for loop " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 1 2 3 4 5 6 7 8 9 " + ] + } + ], + "source": [ + "#while loop\n", + "i=0\n", + "\n", + "while(i<10):\n", + " print(i,end=\" \") # parameter \" \", \",\"\n", + " i+=1" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3,5,7,9,11,13,15,17,19," + ] + } + ], + "source": [ + "# for in loop\n", + "\n", + "for ele in range(3,21): #parameter in range is exclusive so if u want 10 so u have to pass 11\n", + " if ele%2!=0:\n", + " print(ele,end=\",\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3,5,7,9,11,13,15,17,19," + ] + } + ], + "source": [ + "# for in loop\n", + "#jump parameter\n", + "for ele in range(3,21,2): #parameter in range is exclusive so if u want 10 so u have to pass 11\n", + " print(ele,end=\",\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "********************" + ] + } + ], + "source": [ + "for _ in range(10):\n", + " print(\"*\",end=\"*\")\n", + " #don't need to use the iterator." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "#map is a function which takes an interable( list in this case) and convert it into one new\n", + "#list with each entry being the result of corresponding entry from the input list based on the given key function.\n", + "#list=map (int, input().split())?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Strings" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "My name is aryan .\n", + "\n", + "i am from delhi \n" + ] + } + ], + "source": [ + "# ''\n", + "# \" \"\n", + "# \"\"\" \"\"\"\n", + "st=\"My name is aryan . i am from delhi\"\n", + "type(st)\n", + "\n", + "#Multiline string \n", + "\n", + "s1=\"\"\"My name is aryan .\n", + "\n", + "i am from delhi \"\"\"\n", + "print(s1)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'My name is aryan .\\n\\ni am from delhi '" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'MY NAME IS ARYAN . I AM FROM DELHI'" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.upper()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'my name is aryan . i am from delhi'" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.lower()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.isalpha() # after . +tab " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "st.format_map?\n", + "st.format_map\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "S.format_map(mapping) -> str\n", + "\n", + "Return a formatted version of S, using substitutions from mapping.\n", + "The substitutions are identified by braces ('{' and '}').\n", + "Type: builtin_function_or_method" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'My name is aryan . i am from delhi'" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.strip() # shift +tab give better documentation" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "' codinglots of fun.'" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\" codinglots of fun. \".rstrip() # rstrip right left lstrip both strip" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"Aryan\".istitle() #tell title" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(\"ram is our lord and we all chant for ram \".count(\"ram\")) #count words\n", + "st.count(\"mumbai\")" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#find func\n", + "st.find(\"name\")\n", + "st.find(\"tell\")" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['My', 'name', 'is', 'aryan', '.', 'i', 'am', 'from', 'delhi']" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.split(\" \") #it return list and break string !!" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['My name is aryan ', ' i am from delhi']" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.split(\".\") #it split from \" .\" character" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'M'" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "34" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(st)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'i'" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st[len(st)-1] #this will give us last charcter" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'h'" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st[len(st)-2] #this will give us second last charcter" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'h'" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#backward/negative indexing \n", + "st[-1]\n", + "st[-2]" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'aryan'" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#slicing \n", + "#st[start_idx:end_idx+1] #last wala prt in python is exclusive\n", + "st[11:16]" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "My name is aryan . i am from delhi\n", + "aryan . i am from delhi\n", + "aryan . i am from delh\n" + ] + } + ], + "source": [ + "print(st[:])\n", + "print(st[11:])\n", + "print(st[11:-1])" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ihled morf ma i . nayra si eman yM\n", + "si eman\n", + "M aei ra \n" + ] + } + ], + "source": [ + "#step size hai third one after 2nd colon\n", + "print(st[::-1])\n", + "print(st[9:2:-1]) # step size here use to reverse the string\n", + "print(st[:21:2])" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ihled morf ma i . nayra si eman yM\n", + "My name is aryan . i am from delhi\n" + ] + } + ], + "source": [ + "print(\"\".join(reversed(st)))\n", + "print(st)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "st=\"changed\" # here refernce are changed so string are immutable \n", + "# also indexedable \n", + "#those thing are immutable they are also hashable" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'changed'" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'type' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mstr\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"r\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m: 'type' object does not support item assignment" + ] + } + ], + "source": [ + "str[0]=\"r\"\n", + "#as string are immutable" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Operator\n", + "- arithmetic\n", + "- logical\n", + "- boolean \n", + "- bitwise" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(2>7) and (5>7) \n", + "#to fullfill \"and\" operaator\n", + "#all the coditions should be true" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(7>=7 ) or (7>10)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "not True\n" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "not( 3>5)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "10 & 4" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "14" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "10|4" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0b1010'" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bin(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "0b1010" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "functions are resuable pieces of programs.They allow you to give a name to block of statements ,allowing you to run that the block using the specified name anywhere in your program and any number of times. this is known as calling the function . for eg built in function are len,range\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello from fun function\n", + "function\n", + "after func()\n" + ] + } + ], + "source": [ + "# def function name(argument(s)):\n", + "# function inside code\n", + "\n", + "def fun():\n", + " print(\"hello from fun function\")\n", + " print(\"function\")\n", + " return \n", + "\n", + "\n", + "\n", + "\n", + "fun()\n", + "print(\"after func()\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n" + ] + } + ], + "source": [ + "for i in range(10):\n", + " print(\"hello aryan\")" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "def hellofunc(name,num=3): #default parameters\n", + " for i in range(num):\n", + " print(f\"hello my name is :\",name)\n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello my name is : aryan\n", + "hello my name is : aryan\n", + "hello my name is : aryan\n", + "hello my name is : aryan\n", + "hello my name is : aryan\n" + ] + } + ], + "source": [ + "hellofunc(\"aryan\",5)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello my name is : aryan\n", + "hello my name is : aryan\n", + "hello my name is : aryan\n" + ] + } + ], + "source": [ + "hellofunc(\"aryan\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "#in python we dont pass type of parameter which just pass parameter\n", + "\n", + "def hello():\n", + " print(\"hello from function\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def div(a,b):\n", + " try:\n", + " return a/b\n", + " except:\n", + " print(\"Error\")\n", + " finally:\n", + " print(\"This will print everytime as its finally block\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# local And global variable " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "x=10\n", + "def show():\n", + " x=5\n", + " print(x)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "10\n" + ] + } + ], + "source": [ + "show() #local variable \n", + "print(x) #global variable" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "x=10\n", + "def show():\n", + " # No assignment to x and we are updating it \n", + " x+=5\n", + " print(x)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "ename": "UnboundLocalError", + "evalue": "local variable 'x' referenced before assignment", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mUnboundLocalError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m#local variable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m#global variable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m\u001b[0m in \u001b[0;36mshow\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mx\u001b[0m\u001b[1;33m+=\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mUnboundLocalError\u001b[0m: local variable 'x' referenced before assignment" + ] + } + ], + "source": [ + "show() #local variable \n", + "print(x) #global variable" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "x=10\n", + "def show():\n", + " global x\n", + " # No assignment to x and we are updating it \n", + " x+=5\n", + " print(x)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "15\n", + "15\n" + ] + } + ], + "source": [ + "show()\n", + "print(x) #so both are updated" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "x=10\n", + "def show():\n", + " y=\"local\"\n", + " print(x)\n", + " print(y)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10\n", + "local\n", + "10\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'y' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'y' is not defined" + ] + } + ], + "source": [ + "show()\n", + "print(x)\n", + "print(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#enclosures\n", + "def outer():\n", + " x=\"local\"\n", + " def inner():\n", + " print(x)\n", + " \n", + " \n", + " inner()\n", + " print(x)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "local\n", + "local\n" + ] + } + ], + "source": [ + "outer()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "x=10\n", + "def show():\n", + " y=\"local\"\n", + " print(x)\n", + " print(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "del x #delelting earlier global X" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "# enclosures \n", + "def outer():\n", + " x=10\n", + " \n", + " def inner():\n", + " global x\n", + " x+=5\n", + " print(x)\n", + " \n", + " inner()\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'x' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mouter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m\u001b[0m in \u001b[0;36mouter\u001b[1;34m()\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 10\u001b[1;33m \u001b[0minner\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 11\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m\u001b[0m in \u001b[0;36minner\u001b[1;34m()\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0minner\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;32mglobal\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mx\u001b[0m\u001b[1;33m+=\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'x' is not defined" + ] + } + ], + "source": [ + "outer()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# nonlocal " + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "# enclosures \n", + "def outer():\n", + " x=10\n", + " \n", + " def inner():\n", + " nonlocal x\n", + " x+=5\n", + " print(x)\n", + " \n", + " inner()\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "15\n", + "15\n" + ] + } + ], + "source": [ + "outer()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This will print everytime as its finally block\n" + ] + }, + { + "data": { + "text/plain": [ + "10.0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "div(10,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This will print everytime as its finally block\n" + ] + }, + { + "data": { + "text/plain": [ + "1.8" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "div(9,5)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error\n", + "This will print everytime as its finally block\n" + ] + } + ], + "source": [ + "div(1,0)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "def div(a,b):\n", + " try:\n", + " return a/b\n", + " except:\n", + " print(\"Error\")\n", + " finally:\n", + " print(\"This will print everytime as its finally block\")\n", + " return 10" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This will print everytime as its finally block\n", + "Error\n", + "This will print everytime as its finally block\n" + ] + }, + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "div(10,1)\n", + "div(1,0)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hello #hello is now afunction" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "def func_name(a,b,c): #we cant place docstring at bottom it should be at top\n", + " \"\"\"Docstring-\n", + " \n", + " this is my custom function.I really love python\n", + " \"\"\"\n", + " print(\"hello from \\t custom function\")\n", + " \n", + " res =a+b\n", + " c() #we can pass string ,float ,int ,any func in parameters\n", + " #print(c) #its shows that its afunction \n", + " #as a parameter we have to pass a function\n", + " return res" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "func_name # which file is it in? main`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.replace\n", + "#out means intermiadiate result" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello from \t custom function\n", + "hello from function\n" + ] + } + ], + "source": [ + "res=func_name(5,9,hello) #if we add doc string at end of func we dont get it" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "14\n" + ] + } + ], + "source": [ + "print(res)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "#def authentication(user,passw,login) for a page\n", + "def authentication (user,passw,login):\n", + " if user==\"aryan\" and passw==\"no\":\n", + " login()\n", + " else:\n", + " print(\"incorrect function\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "keyword arguments\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if you some functions with many parameters and you want to specify only some of them ,then you can give values for such parameters by naming them-this " + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "def check(cars,name,age):\n", + " print(f\"my name is {name},my age is {age},i have cars={cars}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is 20,my age is 2,i have cars=aryan\n" + ] + } + ], + "source": [ + "check(\"aryan\",20,2) #so it creates a problem\n", + "#earlier postional arguement \n", + "#so here comes keyword arguement to resolve problrm" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "positional argument follows keyword argument (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m check(name=\"aryan\",2,age=20) #we also can give cars not but\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m positional argument follows keyword argument\n" + ] + } + ], + "source": [ + "check(2,name=\"aryan\",age=20) #we also can give cars not but \n", + "#postional arguement should always be in front" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### args and kwargs\n", + "
\n",
+    "*args\n",
+    "**kwargs\n",
+    "
" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "def test_func(*args): #multiple aruements\n", + " print(args) \n", + " print(args[0])\n", + " print(args[-1])" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1, 2, 3, 4, 5, 6, 7, 8, 9)\n", + "1\n", + "9\n" + ] + } + ], + "source": [ + "test_func(1,2,3,4,5,6,7,8,9)#can pass many arguements\n", + "#they are going in the form of tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "def test_func1(**kwargs): #keyword arguement\n", + " print(kwargs)\n", + " print(kwargs['name']) #we have to pass keyword\n", + " #as its a keyworded arguement" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'name': 'aryan', 'age': 20, 'cars': 4}\n", + "aryan\n" + ] + } + ], + "source": [ + "test_func1(name=\"aryan\",age=20,cars=4)\n", + "#so here they come in format of\n", + "#keyword:value <==dictonary\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "def final_fuc(n1,n2,n3,*args,**kwargs):\n", + " print(n1)\n", + " print(n2)\n", + " print(n3)\n", + " print(args)\n", + " print(kwargs)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n", + "4\n", + "7\n", + "(90, 'hello', True, 100)\n", + "{'name': 'Mohit', 'age': 20}\n" + ] + } + ], + "source": [ + "#positional argument follows keyword argument\n", + "\n", + "final_fuc(3,4,7,90,\"hello\",True,100,name=\"Mohit\",age=20) # we cant write args after kwargs \n", + "#means no keyworded argument can be place before positional one!\n", + "#at least minimum no. of required==> postional\n", + "#optional==>args and kwargs(keyword argue...)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n",
+    "n=5\n",
+    "*\n",
+    "**\n",
+    "***\n",
+    "****\n",
+    "*****\n",
+    "
" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "*\n", + "**\n", + "***\n", + "****\n", + "*****\n" + ] + } + ], + "source": [ + "\n", + "n=int(input())\n", + "for i in range(1,n+1):\n", + " for y in range(1,i+1):\n", + " print(\"*\",end=\"\")\n", + " print() # means print(end='\\n') \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "*\n", + "**\n", + "***\n", + "****\n", + "*****\n" + ] + } + ], + "source": [ + "for i in range(1,n+1):\n", + " print('*'*i) #multiplying at every iteration\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data Structures\n", + "- list\n", + "- tuple\n", + "- set\n", + "- dictionary" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## list\n", + "- indexing\n", + "- mutable\n", + "- heterogeneous element\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "li=[]" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "list" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(li)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 4, 5, 67]\n" + ] + } + ], + "source": [ + "li2 =list() #its a constructor ==>list()\n", + "a=list([1,4,5,67])\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "list" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(li2)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "li=[4,5,6,7,88,9]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[4, 5, 6, 7, 88, 9]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4\n", + "9\n", + "[6, 7, 88]\n" + ] + } + ], + "source": [ + "print(li[0])\n", + "print(li[-1])\n", + "\n", + "#slicing\n", + "print(li[2:-1])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "li[0]=100 #means it is mutable\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 5, 6, 7, 88, 9]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "li2=[2,3,45,\"hello\",\"world\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[2, 3, 45, 'hello', 'world']" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li2" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'o'" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li2[3][4]" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "#nested list\n", + "li_new=[[1,2,3],[\"aryan\",\"gulati\"],[\"bmw\",\"audi\"],[10,20,30,[\"pogo\"]]]" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(li_new)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pogo\n", + "['pogo']\n" + ] + } + ], + "source": [ + "print(li_new[-1][3][0])\n", + "print(li_new[-1][3])" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "mat=[[9,8,7],[1,2,3],[7,8,9],[3,4,5]]" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(mat)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "li.append(899)\n", + "#extend u need to see" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 5, 333, 6, 7, 88, 9, 899]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "li.insert(2,333)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "li.remove(899)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 5, 333, 333, 6, 7, 88, 9]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "li.reverse()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[9, 88, 7, 6, 333, 333, 5, 100]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 5, 333, 333, 6, 7, 88, 9]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li[::-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "li.sort()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[5, 6, 7, 9, 88, 100, 333, 333]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "li=[1,2,3,4,5]\n", + "li2=li\n", + "li2[0]=100" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 2, 3, 4, 5]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li2" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 2, 3, 4, 5]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li #so li and li2 objects have same reference " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "l1=[1,2,3,4,5]\n", + "l2=l1.copy()\n", + "l2[0]=100" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 2, 3, 4, 5]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l2" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2, 3, 4, 5]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l1" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"n\" in \"aryan\"" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1 in [1,2,3,4]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "9 in [[9,8,7],[1,2,3],[7,8,9],[3,4,5]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_3-checkpoint.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_3-checkpoint.ipynb new file mode 100644 index 00000000..2d22843c --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_3-checkpoint.ipynb @@ -0,0 +1,1487 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data Structures" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## List" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1=[1,6,3,8,10]\n", + "l2=[9,8,7]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1+l2 #extending" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1.append(l2) #it add ele as list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1.extend(l2)#it add unpack ele in it reverse of what append do" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## list comprehension" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "l1=[4,6,2,8,10]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[4, 6, 2, 8, 10, 4, 6, 2, 8, 10]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l1*2" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[8, 12, 4, 16, 20]\n" + ] + } + ], + "source": [ + "l2=[]\n", + "for i in l1:\n", + " l2.append(i*2) #storing it in another list\n", + "print(l2) " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n", + "12\n", + "4\n", + "16\n", + "20\n" + ] + } + ], + "source": [ + "for i in range(len(l1)):\n", + " print(l1[i]*2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "ll_sq=[ele*2 for ele in l1]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[8, 12, 4, 16, 20]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ll_sq" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[8, 12, 4, 16, 20]\n" + ] + } + ], + "source": [ + "# square of only even no\n", + "l2=[] #making another list for storing\n", + "for i in l1:\n", + " if i%2==0:\n", + " l2.append(i*2) #storing it in another list\n", + "print(l2) " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[16, 36, 4, 64, 100]\n" + ] + } + ], + "source": [ + "#using list comprehension\n", + "ll_sq=[i**2 for i in l1 if i%2==0]\n", + "#ll_sq=[i**2 else yahan likhan hota hai for i in l1 if (i%2==0) and kuch statement ]\n", + "print(ll_sq)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "#another example\n", + "l2=[\"hello\",\"world\",\"are\",\"you\",\"?\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Hello', 'World', 'Are', 'You']" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[ele.title() for ele in l2 if len(ele)>1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Input" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "aryan\n" + ] + } + ], + "source": [ + "n=input()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "aryan\n" + ] + } + ], + "source": [ + "print(n)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n", + "3\n" + ] + } + ], + "source": [ + "#typecasting and input\n", + "no1=float(input())\n", + "no2=float(input())" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "float" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(no2)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5.0" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "no1+no2" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 2 3 4\n" + ] + } + ], + "source": [ + "all_numbers=input()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['1', '2', '3', '4']" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_numbers.split()\n", + "#we can do list comprehension" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2, 3, 4]" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[int(ele) for ele in all_numbers.split()] #int(ele)#it is return statement" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2, 3, 4]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[int(ele) for ele in all_numbers.strip().split()] #int(ele)#it is return statement\n", + "#we can strip if we have spaces in front" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 \n", + "1\n", + "2\n", + "2\n", + "3\n", + "3\n", + "-88\n" + ] + } + ], + "source": [ + "#cumlative sum>0\n", + "\n", + "cum=0\n", + "\n", + "while cum >=0:\n", + " a=int(input())\n", + " cum+=a\n", + " if cum>=0:\n", + " print(a)\n", + " else:\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 \n", + "2\n", + "-88\n" + ] + } + ], + "source": [ + "#cumlative sum>0\n", + "\n", + "cum=0\n", + "l=[]\n", + "while cum >=0:\n", + " a=int(input())\n", + " cum+=a\n", + " if cum>0:\n", + " l.append(a)\n", + " else:\n", + " break\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tuple\n", + "- immutable\n", + "- indexedable\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "tup=(1,2,3,4,5,6)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tuple" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(tup)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tup[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tup[-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'tuple' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mtup\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;31m#'tuple' object does not support item assignment\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;31m#basically string and tuple are immutable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" + ] + } + ], + "source": [ + "tup[0]=100\n", + "#'tuple' object does not support item assignment\n", + "#basically string and tuple are immutable\n" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [], + "source": [ + "l=[1,2,3]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "tup1=(4,5,6,l)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(4, 5, 6, [1, 2, 3])" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tup1" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [], + "source": [ + "tup1[3].append(4) #here we areappending in list not tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(4, 5, 6, [1, 2, 3, 4])" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tup1 #list is mutable" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "tup=(5,3,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "PI=(3.14,) #creating constant val use case of tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "def four_fun(a,b):\n", + " return a+b,a-b,a/b,a*b #use case of tuple\n", + "#we also do list but most of timein tuple format\n", + "#return (a+b,a-b,a/b,a*b) is same as above " + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(8, 2, 1.6666666666666667, 15)" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "four_fun(5,3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#tuple has only two more func so\n", + "t=[1,2,3]\n", + "#t.count(),t.index()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Set\n", + "- unordered\n", + "- unique\n", + "- mutable" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "s={5,6,11,1,10,1,1,11}" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1, 5, 6, 10, 11}" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "5\n", + "6\n", + "10\n", + "11\n" + ] + } + ], + "source": [ + "for e in s:\n", + " print(e) #so we can iterate over it" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "s.add(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1, 5, 6, 10, 11, 100}" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.add(100)\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "141938393" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hash(\"Aryan\")" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "141938393" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hash(\"Aryan\")" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "350574217" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hash(\"aryan\") # value stored " + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [], + "source": [ + "s1={1,4,6,2,4,3}\n", + "s2={1,5,8,3,4,9}" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1, 2, 3, 4, 5, 6, 8, 9}" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1.union(s2) #s1 |s2" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1, 3, 4}" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1.intersection(s2) #s1&s2" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{2, 6}" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1.difference(s2)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{2, 5, 6, 8, 9}" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(s1-s2) | (s2-s1) #just for fun we can see using venn diagram\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s={1,2,2,3,4,5,6,7,7,1,3,3,4,(1,4,5),\"wtwt\",[1,2,3]} \n", + "#so list is mutable so we can only store immutable elements in set\n", + "#error: unhashable type: 'list' \n", + "#whereas we can store tuple and string" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [], + "source": [ + "l=[1,2,3,4,5,6,7,1,2,3,4,5,6,7,8,9,6,7,8,9]" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2, 3, 4, 5, 6, 7, 8, 9]\n" + ] + } + ], + "source": [ + "ab=list(set(l))\n", + "print(ab)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dictionary" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [], + "source": [ + "#store data in key:val format\n", + "canteen_menu={\n", + " \"samosa\":10,\n", + " \"pizza\":100,\n", + " \"burger\":50\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(canteen_menu)" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys" + ] + }, + "execution_count": 130, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(canteen_menu.keys())" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": {}, + "outputs": [], + "source": [ + "k=canteen_menu.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['samosa', 'pizza', 'burger']" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(k)" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": {}, + "outputs": [], + "source": [ + "v=canteen_menu.values()" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_values" + ] + }, + "execution_count": 134, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(canteen_menu.values())" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[10, 100, 50]" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(v)" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_items([('samosa', 10), ('pizza', 100), ('burger', 50)])" + ] + }, + "execution_count": 136, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "canteen_menu.items() #it return us in form of tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "samosa 10\n", + "pizza 100\n", + "burger 50\n" + ] + } + ], + "source": [ + "#we can iteration too\n", + "for e in canteen_menu.items():\n", + " print(e[0],e[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('samosa', 10)\n", + "('pizza', 100)\n", + "('burger', 50)\n" + ] + } + ], + "source": [ + "#we can iteration too\n", + "for e in canteen_menu.items():\n", + " print(e) #so here u can see all are tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "samosa 10\n", + "pizza 100\n", + "burger 50\n" + ] + } + ], + "source": [ + "for keys,values in canteen_menu.items():\n", + " print(keys,values)" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "juice is not present\n" + ] + } + ], + "source": [ + "#if something is not present we get error to remove error we can use get it return none\n", + "key='juice'\n", + "\n", + "if canteen_menu.get(key)==None:\n", + " print(key,\"is not present\")\n", + "else:\n", + " print(canteen_menu[key])" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100\n", + "None\n" + ] + } + ], + "source": [ + "#get in Dictonary\n", + "\n", + "print(canteen_menu.get(\"pizza\"))\n", + "print(canteen_menu.get(\"juice\")) #if not present\n", + "#it return an object type of none" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "metadata": {}, + "outputs": [], + "source": [ + "canteen_menu[\"juice\"]=30" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": {}, + "outputs": [], + "source": [ + "canteen_menu[\"fruits\"] = [10,20,30]" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'samosa': 10, 'pizza': 100, 'burger': 50, 'juice': 30, 'fruits': [10, 20, 30]}" + ] + }, + "execution_count": 144, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "canteen_menu" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "30" + ] + }, + "execution_count": 145, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "canteen_menu[\"fruits\"][-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": {}, + "outputs": [], + "source": [ + "canteen_menu.update()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": {}, + "outputs": [], + "source": [ + "canteen_menu[\"fruits\"]={\n", + " 'grapes':10,\n", + " 'orange':25,\n", + " 'mango':30\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'samosa': 10,\n", + " 'pizza': 100,\n", + " 'burger': 50,\n", + " 'juice': 30,\n", + " 'fruits': {'grapes': 10, 'orange': 25, 'mango': 30}}" + ] + }, + "execution_count": 148, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "canteen_menu" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "metadata": {}, + "outputs": [], + "source": [ + "l=[\"a\",\"b\",\"c\",\"d\",\"e\"]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'a+b+c+d+e'" + ] + }, + "execution_count": 150, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#it will join string with \"_\"\n", + "\"+\".join(l)" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['h', 'e', 'l', 'l', 'o']" + ] + }, + "execution_count": 151, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(\"hello\") #similarly \n", + "#constructor" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_6(Iterator in python)-checkpoint.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_6(Iterator in python)-checkpoint.ipynb new file mode 100644 index 00000000..2d889052 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_6(Iterator in python)-checkpoint.ipynb @@ -0,0 +1,185 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "x=[1,2,3]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "x_iter=iter(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_iter #type of object " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "next(x_iter)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "next(x_iter)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "next(x_iter)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "ename": "StopIteration", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mStopIteration\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mnext\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx_iter\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;31m#when we reached the end of list it will meet the stop iteration error\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mStopIteration\u001b[0m: " + ] + } + ], + "source": [ + "next(x_iter) \n", + "#when we reached the end of list it will meet the stop iteration error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Iteration Protocol in Python\n", + "### the iteration protocol is a fancy term meaning \"how iterables actually work in python\"\n", + "- for a class object to be the iterable:\n", + " Can be passed to the iter function to get an iterator for them.\n", + "- for any iterator:\n", + " can be passed to the next function which gives their next item or raises StopIteration\n", + " Return themselves when passed to their iter function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class yrange:\n", + " #n is the number upto which we want the range \n", + " def __init__(self,n):\n", + " self.i=0\n", + " self.n=n\n", + " \n", + " #this method makes our class iterable\n", + " def __iter__(self):\n", + " return self\n", + " \n", + " \n", + " #this method should be implemented by the ITERATOR\n", + " def __next__ (self):\n", + " if self.ilist: \n", + " - ordered\n", + " - Mutable(Changeable)\n", + " - Heterogeneous\n", + " \n", + "- tuple:\n", + " - ordered\n", + " - IMMutable(Unchangeable)\n", + " \n", + "- dictionary:\n", + " - Unordered\n", + " - Mutable\n", + " - Indexed\n", + " \n", + "- set:\n", + " - Unordered \n", + " - Unindexed\n", + " - IMMutable" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Math module " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n", + "6\n", + "1.0\n", + "3.141592653589793\n", + "inf\n", + "-inf\n", + "6\n", + "4\n", + "1\n" + ] + } + ], + "source": [ + "import math\n", + "print(math.floor(15/2))\n", + "print(math.gcd(12,6))\n", + "print(math.log(math.e))\n", + "print(math.pi)\n", + "print(math.inf)\n", + "print(-math.inf)\n", + "print(sum([1,2,3]))\n", + "print(max([1,2,3,4]))\n", + "print(min([1,2,3,4]))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\ipykernel_launcher.py', '-f', 'C:\\\\Users\\\\ARYAN GULATI\\\\AppData\\\\Roaming\\\\jupyter\\\\runtime\\\\kernel-3f361801-1af5-4ab1-9e1d-f59d204f18f7.json']\n" + ] + } + ], + "source": [ + "#Argv gives list of command line outcome\n", + "import sys\n", + "def printdata():\n", + " print(sys.argv)\n", + " \n", + "printdata() #0th argument if i give hello then it will become argv[1]\n", + "# basically its a list of arguements that we supply" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\ipykernel_launcher.py', '-f', 'C:\\\\Users\\\\ARYAN GULATI\\\\AppData\\\\Roaming\\\\jupyter\\\\runtime\\\\kernel-3f361801-1af5-4ab1-9e1d-f59d204f18f7.json']\n" + ] + } + ], + "source": [ + "import sys\n", + "def printdata():\n", + " print(sys.argv)\n", + " \n", + "def printsum():\n", + " print(int(sys.argv[1]) + int(sys.argv[2]))\n", + " \n", + "printdata() " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.8.3 (default, Jul 2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)]\n" + ] + } + ], + "source": [ + "print(sys.version) #this tell us about its version" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['C:\\\\Users\\\\ARYAN GULATI\\\\Desktop\\\\Python_Code\\\\2.)PYTHON_BASICS\\\\PYTHON Basics', 'C:\\\\ProgramData\\\\Anaconda3\\\\python38.zip', 'C:\\\\ProgramData\\\\Anaconda3\\\\DLLs', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib', 'C:\\\\ProgramData\\\\Anaconda3', '', 'C:\\\\Users\\\\ARYAN GULATI\\\\AppData\\\\Roaming\\\\Python\\\\Python38\\\\site-packages', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\win32', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\win32\\\\lib', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\Pythonwin', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\IPython\\\\extensions', 'C:\\\\Users\\\\ARYAN GULATI\\\\.ipython']\n" + ] + } + ], + "source": [ + "print(sys.path) #this tell the path in ehich python will look up for packages" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1114111\n", + "9223372036854775807\n", + "\n", + "\n" + ] + } + ], + "source": [ + "#https://docs.python.org/3/library/sys.html\n", + "print(sys.maxunicode)\n", + "print(sys.maxsize) #max size of Data Structure you can have in your system \n", + "print(type(sys.stdin))\n", + "print(sys.stdout)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "__name__==\"__main__\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Everything is object" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "s=\"kklfsfwlk\" #string is also is object" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(s))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# class with keyword class and then its name \n", + "#and its prefered to keep class name as title case\n", + "class Prson:\n", + " pass #empty class\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "#creating object for class\n", + "a=Prson()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "__main__.Prson" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(a) # main module has person class" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<__main__.Prson at 0x23a8154e820>" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a#also telling location" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "#constructor is also normal func\n", + "class Persn:\n", + " # def then constructor\n", + " #constructor start with __init__\n", + " #constructor in python always start with self\n", + " #if it has parameter then also it start with self\n", + " def __init__(self):\n", + " #self here will refer to obj whenever u call\n", + " print(\"constructor is called\")\n", + " #this func will call everytime we make an obj\n", + " #this is no need to execute explicitly\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "constructor is called\n" + ] + } + ], + "source": [ + "o=Persn()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "constructor is called\n" + ] + } + ], + "source": [ + "o1=Persn()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "#as happy is Global function\n", + "def happy(name):\n", + " return name+ \" is happy doing code !\"" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "class Person:\n", + " #class variable -common to all the obj of class\n", + " #no self.jdjs is not required\n", + " nationality=\"Indian\"\n", + " \n", + " \n", + " def __init__(self,your_name,age):\n", + " print(\"constructor is called\")\n", + " # we can create constructor\n", + " self.name=your_name\n", + " self.age=age\n", + " self.hobbies=[] #empty list\n", + " \n", + " \n", + "\n", + "\n", + " def hobby_added(self):\n", + " print(f\"your hobbies is added ,your like to play{self.hobbies}\")\n", + " #this function is used in the class so see it\n", + " \n", + " \n", + " #we can create function\n", + " def introduce(self):\n", + " #this func is calling global func\n", + " print(f\"my name is {self.name},my age is {self.age},I am {self.nationality}, \",happy(self.name))\n", + " #where nationaliy u can also write Person in place of self\n", + " \n", + " \n", + " \n", + " \n", + " #so u can add hobbies\n", + " #happy is a global func that has parameter name given \n", + " def add_hobbies(self,hobbi_name):\n", + " self.hobbies.append(hobbi_name)\n", + " #this func will append haobbi_name in lst hobbies\n", + " #hobbi_name will work as a pointer\n", + " self.hobby_added()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "__init__() missing 2 required positional arguments: 'your_name' and 'age'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mp\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mPerson\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;31m# __init__()\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;31m#missing 1 required positional\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m#argument: 'your_name'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: __init__() missing 2 required positional arguments: 'your_name' and 'age'" + ] + } + ], + "source": [ + "p=Person()\n", + "# __init__() \n", + "#missing 1 required positional \n", + "#argument: 'your_name'" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "constructor is called\n" + ] + } + ], + "source": [ + "p=Person(\"aryan\",20)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<__main__.Person at 0x23a81568550>" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('aryan', 20)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.name,p.age #in tuple format " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Indian'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.nationality" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "constructor is called\n" + ] + } + ], + "source": [ + "p1=Person(\"amit\",21)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('amit', 21, 'Indian')" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p1.name,p1.age,p.nationality" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is aryan,my age is 20,I am Indian, aryan is happy doing code !\n" + ] + } + ], + "source": [ + "p.introduce() #objects function " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is amit,my age is 21,I am Indian, amit is happy doing code !\n" + ] + } + ], + "source": [ + "p1.introduce()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Indian'" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Person.nationality" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "your hobbies is added ,your like to play['Criket']\n" + ] + } + ], + "source": [ + "p.add_hobbies(\"Criket\")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "your hobbies is added ,your like to play['Criket', 'Chess']\n" + ] + } + ], + "source": [ + "p.add_hobbies(\"Chess\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Criket', 'Chess']" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.hobbies" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "p.nationality=\"Canadian\"" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is aryan,my age is 20,I am Canadian, aryan is happy doing code\n" + ] + } + ], + "source": [ + "#instance variable is created not effected class var\n", + "p.introduce()\n", + "#if we change nationality to other\n", + "#so it created a new instance variable" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is amit,my age is 21,I am Indian, amit is happy doing code\n" + ] + } + ], + "source": [ + "p1.introduce()" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [], + "source": [ + "#but if i changed class nationality \n", + "Person.nationality=\"American\"" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'American'" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p1.nationality" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Canadian'" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.nationality\n", + "#bcz its have created its instance variable" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'American'" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Person.nationality" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#india is removed as person itself changed its nationality" + ] + } + ], + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_7(OOPS HITMan ex)-checkpoint.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_7(OOPS HITMan ex)-checkpoint.ipynb new file mode 100644 index 00000000..59dcb62b --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/.ipynb_checkpoints/PYTHON_BASICS_7(OOPS HITMan ex)-checkpoint.ipynb @@ -0,0 +1,543 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class Human:\n", + " #class Variable\n", + " aadhar_no=0\n", + " pop=0 #population \n", + " aadhar=[] #also maintaining list or database \n", + " \n", + " #constructor\n", + " def __init__(self,name=\"unnamed\"): #we are just intiallising it to \n", + " #unmaed later it will change with name given to it\n", + " self.name=name\n", + " self.id=Human.aadhar_no#tab dabane se aabhi raha hai\n", + " #we cant write self here bcz it will create particular aadhar no \n", + " #for constructor tht we dont want\n", + " self.alive=True\n", + " \n", + " \n", + " Human.aadhar_no+=1\n", + " Human.pop+=1\n", + " Human.aadhar.append(self) #we can do here self.name \n", + " #but we are doing self so whole obj will comes under it\n", + " \n", + " \n", + " \n", + " #display func-representation obj \n", + " def __repr__(self):#it just return string of obj of class\n", + " return f\" name {self.name} id {self.id} alive {self.alive}\"\n", + " #magic function like __repr__ we have __add__\n", + " #it will add __add__ so it will combine name and info\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " def die(self):\n", + " \n", + " if self.alive==True:\n", + " self.alive=False\n", + " Human.pop-=1\n", + " print(self.name,\" is dead\")\n", + " #aadhar.remove(self)\n", + " #Human.aadhar.remove(self)\n", + " else :\n", + " print(self.name,\" is already died\")\n", + " \n", + " \n", + "#Hitman (INHERTANCE) \n", + "class Hitman(Human): #(derived class)this is inherted from Human class(base class)\n", + " def __init__(self,name):# no need of writng name as unnmaed it draw from parent class\n", + " super().__init__(name)#super() is inhertiance it inhert __init__ constructor from base class\n", + "\n", + "\n", + " self.kills =0 \n", + " #u can also make list how many human he killed\n", + " \n", + "\n", + "\n", + "\n", + "\n", + " def kill(self,person): \n", + "#if we pass self instead of perso then\n", + " if self is person:#( is check obj while== check val)\n", + " print(\"sucide is no option\")\n", + " elif not self.alive:\n", + " print(\"Hitman is already Dead\")\n", + " else:\n", + " if person.alive==True:\n", + " person.die()\n", + " self.kills+=1\n", + " #kills.append(person) it will tell and who all die\n", + " else: \n", + " person.die()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "aryan =Human(\"Aryan\")\n", + "p1=Human(\"person1\")\n", + "p2=Human(\"person2\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.pop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "aryan.name #obj.name\n", + "print(p1.name)\n", + "print(p2.name)\n", + "aryan.name " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.aadhar[0].name #where we have stored in list \n", + "#gives same output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.aadhar[0].id\n", + "aryan.id" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bhargav= Human(\"Bhargav\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.pop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(aryan.id)\n", + "print(bhargav.id)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.aadhar[0].alive" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.aadhar_no #this is ongoing aadhar no" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#Delete any obj var value\n", + "# del Human\n", + "#del Human.adhar[0]\n", + "# del aryan\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "type(Human)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(aryan)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(Human.aadhar) #save info in list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ritvik=Human(\"ritvik\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(ritvik.id)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bhargav.die()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#bhargav.die()\n", + "Human.pop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(bhargav)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "aryan is aryan" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "aryan is bhargav\n", + "# is -->it consider obj\n", + "#== -->it consider val" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "james=Hitman(\"james\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rko=Hitman(\"rko\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.pop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rko.kill(p2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.pop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rko.kills" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "james.kills" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rko.kill(james)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rko.kills" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rko.kill(rko)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "james.kill(aryan)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "type(james)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# print(ritvik)\n", + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "james.kill(bhargav)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "james.kills" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A*BCBBD\n", + "A*BCBBD\n" + ] + } + ], + "source": [ + "n=input()\n", + "print(n)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'a*bcbbd'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n.lower()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/FileHandling/File handling.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/FileHandling/File handling.ipynb new file mode 100644 index 00000000..bb3ed0e9 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/FileHandling/File handling.ipynb @@ -0,0 +1,540 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "#f=open()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "#file handling from basic python\n", + "f=open(\"file1.txt\",'rt')#shift+tab #open the file\n", + "#rt means read text" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.closed #its open ? so showing closed as false " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "14" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.tell()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'ve python\\n'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.read(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'I lo'" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.read(4) #how many char you want to print as parameter" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.tell()#Return current stream position." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'ve python\\nI love AI'" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.read()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "55" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.tell() #it tell current position of pointer" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "''" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.read() #if u dont pass anything it will read all\n", + "#after that it will read after that if anything is present" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.seek(0)#pointer ko iss index pe phucha dega\n", + "#it makes pointer at particular index" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.tell()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "mydata=f.read()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'I love python\\nI love AI\\nI love my parents\\nMy age is 100'" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mydata" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "f.close() #close the file" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.closed# check file is close or not " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<_io.TextIOWrapper name='file1.txt' mode='rt' encoding='cp1252'>" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f #type of file" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# With open\n", + " sometimes we forgot to read file \n", + " so we can use this new method" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I love python\n", + "I love AI\n", + "I love my parents\n", + "My age is 100\n", + "False\n" + ] + } + ], + "source": [ + "#context manager\n", + "with open(\"file1.txt\",'rt') as fi:\n", + " text =fi.read()\n", + " print(text)\n", + " print(fi.closed) #u here have acces of file" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fi.closed #here it is closed \n", + "#after that file here is colesd but not above" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I\n", + " \n", + "l\n", + "o\n", + "v\n", + "e\n", + " \n", + "p\n", + "y\n", + "t\n", + "h\n", + "o\n", + "n\n", + "\n", + "\n" + ] + } + ], + "source": [ + "with open(\"file1.txt\",'rt') as fi:\n", + " for line in fi.readline():# it is reading line by line\n", + " #fi.readlines() #read first line\n", + " print(line)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I love python\n", + "\n", + "I love AI\n", + "\n", + "I love my parents\n", + "\n", + "My age is 100\n" + ] + } + ], + "source": [ + "with open(\"file1.txt\",'rt') as fi:\n", + " for line in fi.readlines():# it is reading line by line\n", + " #fi.readlines()\n", + " print(line)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I love python\n", + "\n" + ] + } + ], + "source": [ + "with open(\"file1.txt\",'rt') as f:\n", + " t=f.readline()\n", + " print(t)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I love python\n", + "\n", + "I love AI\n", + "\n", + "I love my parents\n", + "\n" + ] + } + ], + "source": [ + "with open(\"file1.txt\",'rt') as f:\n", + " t=f.readline()\n", + " print(t)\n", + " t2=next(f)\n", + " print(t2)\n", + " t3=next(f)\n", + " print(t3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# how to write files " + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "with open(\"newfile.txt\",'wt') as f:\n", + " f.write(\"I have created a previous file.\\n i love data science\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Some Important Function\n", + "- enumerate\n", + "- map\n", + "- filter\n", + "- reduce" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "unexpected character after line continuation character (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m dir(\\..)\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m unexpected character after line continuation character\n" + ] + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/FileHandling/file1.txt b/2.)PYTHON_BASICS/PYTHON Basics/FileHandling/file1.txt new file mode 100644 index 00000000..58fd445c --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/FileHandling/file1.txt @@ -0,0 +1,4 @@ +I love python +I love AI +I love my parents +My age is 100 \ No newline at end of file diff --git a/2.)PYTHON_BASICS/PYTHON Basics/FileHandling/newfile.txt b/2.)PYTHON_BASICS/PYTHON Basics/FileHandling/newfile.txt new file mode 100644 index 00000000..67b252e2 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/FileHandling/newfile.txt @@ -0,0 +1,2 @@ +I have created a previous file. + i love data science \ No newline at end of file diff --git a/2.)PYTHON_BASICS/PYTHON Basics/Module.pdf b/2.)PYTHON_BASICS/PYTHON Basics/Module.pdf new file mode 100644 index 00000000..35b0e247 Binary files /dev/null and b/2.)PYTHON_BASICS/PYTHON Basics/Module.pdf differ diff --git a/2.)PYTHON_BASICS/PYTHON Basics/OOPS Example by me.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/OOPS Example by me.ipynb new file mode 100644 index 00000000..d629367e --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/OOPS Example by me.ipynb @@ -0,0 +1,275 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "def Height(h):\n", + " h=input()\n", + " return \"my height is \"+h\n", + "\n", + "def weight(w):\n", + " w=input()\n", + " return \"my weight is \"+w" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "class Animal:\n", + " #class variable\n", + " \n", + " pop=0\n", + " animals=[]\n", + " \n", + " \n", + " #constructor\n", + " def __init__(self,name,color,age):\n", + " self.name=name\n", + " self.age=age\n", + " self.color=color\n", + " self.alive=True\n", + " Animal.pop+=1\n", + " self.h=0\n", + " self.w=0\n", + " Animal.animals.append(self)\n", + " \n", + " def recording(self):\n", + " a= Height(self.h)\n", + " b= weight(self.w)\n", + " return (str(a+b))\n", + " \n", + " \n", + " def __repr__(self):\n", + " return f\"my name is {self.name}, My color is {self.color},my age is {self.age} ,iam alive is {self.alive},record: {self.h},{self.w}\"\n", + " #print(f\"iam alive is {self.alive}\")\n", + " #return self.recording()\n", + " \n", + " \n", + " \n", + " \n", + " #def Predator(self,Animal): " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "crow=Animal(\"crow\",\"black\",10)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "'my height is my weight is '" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crow.recording()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is crow, My color is black,my age is 10 ,iam alive is True,record: 0,0\n" + ] + } + ], + "source": [ + "print(crow)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "cat=Animal(\"kitty\",\"white\",4)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "my name is kitty, My color is white,my age is 4 ,iam alive is True,record: 0,0" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cat" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Animal.pop" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[my name is crow, My color is black,my age is 10 ,iam alive is True,record: 0,0,\n", + " my name is kitty, My color is white,my age is 4 ,iam alive is True,record: 0,0]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Animal.animals" + ] + }, + { + "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": [] + }, + { + "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": { + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/OOPS example by me2.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/OOPS example by me2.ipynb new file mode 100644 index 00000000..8509578f --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/OOPS example by me2.ipynb @@ -0,0 +1,306 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "class Circle(object):\n", + " \n", + " #constructor\n", + " def __init__(self,radius=3,color=\"blue\"):\n", + " self.radius =radius\n", + " self.color=color\n", + " #Method\n", + " def add_radius(self,r):\n", + " self.radius+=r\n", + " return self.radius\n", + " #method\n", + " def drawcircle(self):\n", + " #Create true circle at center\n", + " plt.gca().add_patch(plt.Circle((0,0),radius=self.radius,fc=self.color))\n", + " plt.axis('scaled') #'scaled' Set equal scaling \n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "redcircle=Circle(10,\"red\")" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "## Find out the methods can be used on the object RedCircle\n", + "\n", + "# dir(RedCircle)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(10, 'red')" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "redcircle.radius,redcircle.color" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "redcircle.drawcircle()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "BlueCircle = Circle(radius=100)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'blue'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "BlueCircle.color" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "BlueCircle.drawcircle()" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')\n", + "plt.axis()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "class Rectangle(object):\n", + " \n", + " # Constructor\n", + " def __init__(self, width=2, height=3, color='r'):\n", + " self.height = height \n", + " self.width = width\n", + " self.color = color\n", + " \n", + " # Method\n", + " def drawRectangle(self):\n", + " plt.gca().add_patch(plt.Rectangle((0, 0), self.width, self.height ,fc=self.color))\n", + " plt.axis('scaled')\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "SkinnyBlueRectangle = Rectangle(2, 10, 'blue')" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(10, 2, 'blue')" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SkinnyBlueRectangle.height ,SkinnyBlueRectangle.width,SkinnyBlueRectangle.color" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "SkinnyBlueRectangle.drawRectangle()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "FatYellowRectangle = Rectangle(20, 5, 'yellow')" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAABzCAYAAACxdkgEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAIaklEQVR4nO3dX4gdZx3G8ecxSS+0wdruqrFJXCsixAttWEo1WkoVqbEk6oWk+CegEAoGElA0Uii9rWIRRZRog1WDLdJWQ2mxRVvEi4Turps0catJJMXYNdkqNBUvNPbnxczi6cnMnjnJeWdes98PLDs78549P34z59k5c8551xEhAEC+XtN1AQCApRHUAJA5ghoAMkdQA0DmCGoAyBxBDQCZW5nil46NjcXExESKXw0Al6Xp6ekXI2K8aluSoJ6YmNDU1FSKXw0AlyXbz9dt49IHAGSOoAaAzCW59HFp3HUBAHCR0kzJwRk1AGSOoAaAzBHUAJA5ghoAMkdQA0DmCGoAyBxBDQCZI6gBIHMENQBkjqAGgMw1DmrbK2z/zvajKQsCALzaMGfUuyTNpSoEAFCtUVDbXivpo5J+kLYcAEC/pmfU35T0ZUmvJKwFAFBhYFDbvk3S2YiYHjBuh+0p21MLCwsjKxAAlrsmZ9SbJG2xfUrSA5Jusf2T/kERsTciJiNicny88t9+AQAuwsCgjoivRsTaiJiQtE3SryPi08krAwBI4n3UAJC9of4VV0Q8LenpJJUAACpxRg0AmSOoASBzBDUAZI6gBoDMEdQAkDmCGgAyR1ADQOYIagDIHEENAJkjqAEgcwQ1AGSOoAaAzBHUAJA5ghoAMkdQA0DmCGoAyBxBDQCZI6gBIHMENQBkjqAGgMwR1ACQOYIaADI3MKhtr7P9lO0528ds72qjMABAYWWDMeclfTEiZmyvljRt+8mI+H3i2gAAanBGHRHzETFTLr8saU7StakLAwAUhrpGbXtC0vWSDqUoBgBwocZBbftKSQ9J2h0R5yq277A9ZXtqYWFhlDUCwLLWKKhtr1IR0vsj4uGqMRGxNyImI2JyfHx8lDUCwLLW5F0flnSfpLmIuDd9SQCAXk3OqDdJ+oykW2zPll+bE9cFACgNfHteRPxWkluoBQBQgU8mAkDmCGoAyBxBDQCZI6gBIHMENQBkjqAGgMwR1ACQOYIaADJHUANA5ghqAMgcQQ0AmSOoASBzBDUAZI6gBoDMEdQAkDmCGgAyR1ADQOYIagDIHEENAJkjqAEgcwQ1AGSuUVDbvtX2H2yfsL0ndVEAgP8ZGNS2V0j6jqSPSNog6XbbG1IXBgAoNDmjvkHSiYj4U0T8S9IDkramLQsAsKhJUF8r6c89P58u1wEAWrCywRhXrIsLBtk7JO2QpPXr119CSRf8agBY1pqcUZ+WtK7n57WSXugfFBF7I2IyIibHx8dHVR8ALHtNgvoZSe+w/TbbV0jaJulA2rIAAIsGXvqIiPO2d0r6paQVkvZFxLHklQEAJEmOGP01YdsLkp6/yJuPSXpxhOWMCnUNh7qGQ13DuRzremtEVF43ThLUl8L2VERMdl1HP+oaDnUNh7qGs9zq4iPkAJA5ghoAMpdjUO/tuoAa1DUc6hoOdQ1nWdWV3TVqAMCr5XhGDQDo0UlQD5o21YVvlduP2N7YUl3rbD9le872Mdu7KsbcbPsl27Pl110t1XbK9rPlfU5VbG+9Z7bf2dOHWdvnbO/uG9NKv2zvs33W9tGedVfbftL28fL7G2pum2wa35q6vm77uXI/PWL7qprbLrnPE9R1t+2/9OyrzTW3bbtfD/bUdMr2bM1tU/arMhtaO8YiotUvFR+aOSnpOklXSDosaUPfmM2SHlcxz8iNkg61VNsaSRvL5dWS/lhR282SHu2gb6ckjS2xvZOe9e3Xv6p4L2jr/ZJ0k6SNko72rPuapD3l8h5J91zM8Zigrg9LWlku31NVV5N9nqCuuyV9qcF+brVffdu/IemuDvpVmQ1tHWNdnFE3mTZ1q6QfReGgpKtsr0ldWETMR8RMufyypDn9/8wU2EnPenxQ0smIuNgPOl2SiPiNpL/3rd4q6f5y+X5JH6u4adJpfKvqiognIuJ8+eNBFfPntKqmX0203q9Fti3pk5J+Oqr7a2qJbGjlGOsiqJtMm9r51Kq2JyRdL+lQxeb32j5s+3Hb72qppJD0hO1pFzMV9uu6Z9tU/wDqol+S9KaImJeKB5qkN1aM6bpvn1PxTKjKoH2ews7yksy+mqfxXfbrA5LORMTxmu2t9KsvG1o5xroI6ibTpjaaWjUV21dKekjS7og417d5RsXT+3dL+rakn7dU1qaI2KjiP+18wfZNfds765mLybq2SPpZxeau+tVUl327U9J5Sftrhgza56P2XUlvl/QeSfMqLjP06/KxebuWPptO3q8B2VB7s4p1Q/Wsi6BuMm1qo6lVU7C9SsWO2B8RD/dvj4hzEfGPcvkxSatsj6WuKyJeKL+flfSIiqdTvTrrmYoHxkxEnOnf0FW/SmcWL/+U389WjOmkb7a3S7pN0qeivJDZr8E+H6mIOBMR/4mIVyR9v+b+uurXSkmfkPRg3ZjU/arJhlaOsS6Cusm0qQckfbZ8J8ONkl5afHqRUnkN7D5JcxFxb82YN5fjZPsGFT38W+K6Xmd79eKyihejjvYN66RnpdoznS761eOApO3l8nZJv6gY0/o0vrZvlfQVSVsi4p81Y5rs81HX1fuaxsdr7q+raY8/JOm5iDhdtTF1v5bIhnaOsRSvkDZ4BXWzildNT0q6s1x3h6Q7ymWr+Ie6JyU9K2mypbrer+IpyRFJs+XX5r7adko6puKV24OS3tdCXdeV93e4vO+cevZaFcH7+p51rfdLxR+KeUn/VnEG83lJ10j6laTj5fery7FvkfTYUsdj4rpOqLhmuXiMfa+/rrp9nriuH5fHzhEVQbImh36V63+4eEz1jG2zX3XZ0MoxxicTASBzfDIRADJHUANA5ghqAMgcQQ0AmSOoASBzBDUAZI6gBoDMEdQAkLn/AoCPDaTKyc7EAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "FatYellowRectangle.drawRectangle()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_1.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_1.ipynb new file mode 100644 index 00000000..6cafa80f --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_1.ipynb @@ -0,0 +1,756 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "Xu9FNy7sb2KQ", + "outputId": "ea1ac106-a342-414c-e380-400433ec697b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello world \n" + ] + } + ], + "source": [ + "# SHift +Enter\n", + "print(\"hello world \")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "uyQetya5cH8L", + "outputId": "7a594e00-817b-4b51-c234-0d209ae2f4a7" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n" + ] + } + ], + "source": [ + "a=9\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "ZgzHKq0EcoAP", + "outputId": "744f0146-a242-495e-c1d6-c28c5f3a05f3" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "int" + ] + }, + "execution_count": 3, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "type(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "hgBfpaFEimpO", + "outputId": "6aea740e-d7ac-4914-9665-900fb4b79b34" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Hello \n" + ] + } + ], + "source": [ + "a=\" Hello \"\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "Hfu7hXnCiwus", + "outputId": "c0df828b-70ac-4ff3-da32-a8fccf198d17" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "str" + ] + }, + "execution_count": 5, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "type(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "colab_type": "code", + "id": "-QiP-kJfiyck", + "outputId": "83f7c615-bf8f-443c-b480-92f97c847189" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " num is smaller than 5\n", + "endofelse\n" + ] + } + ], + "source": [ + "#if coditions\n", + "n=3 \n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "elif n<5:\n", + " print(\" num is smaller than 5\") \n", + "else:\n", + " print(\"num is smaller than 10\") #indentation level 1\n", + "print(\"endofelse\") #indentation level 0" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "_-tg9WVwjR8T" + }, + "outputs": [], + "source": [ + "#keywords identifiers\n", + "#packages module or different source of code \n", + "import keyword" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "colab_type": "code", + "id": "TiLJMY6ElLpV", + "outputId": "a6a2a15a-0762-4512-f5d1-7d880f0a85bb" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']\n" + ] + } + ], + "source": [ + "print(keyword.kwlist) #that cant be use !!" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 119 + }, + "colab_type": "code", + "id": "mGEtwo5tlOmE", + "outputId": "dff7a96d-249e-490e-cbf2-a7b9ef644979" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18\n", + "-2\n", + "80\n", + "0.8\n", + "0\n", + "1073741824\n" + ] + } + ], + "source": [ + "a=8 \n", + "b=10\n", + "print(a+b)\n", + "print(a-b)\n", + "print(a*b)\n", + "print(a/b) #float division\n", + "print(a//b) #int divison\n", + "print(a**b) #a^b" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "D9CKva_UmIVT" + }, + "outputs": [], + "source": [ + "var1=\"Hello\"\n", + "var2=\"World\"" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "_Tr0OzU5mdJg", + "outputId": "33270f75-68ac-4a30-d16e-803efee2527c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Hello World'" + ] + }, + "execution_count": 16, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "var1 +\" \"+var2" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "FJaY_lCMmm4g", + "outputId": "7a46aaa8-ca48-42c6-9b56-6ad52f46d88c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'HelloHelloHello'" + ] + }, + "execution_count": 17, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "var1*3" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 163 + }, + "colab_type": "code", + "id": "sv-KPvEsmtIE", + "outputId": "7e35d39d-96a1-418b-a234-f8378bd93fc1" + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "ignored", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mvar1\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: must be str, not int" + ] + } + ], + "source": [ + "var1+3 # it cant concatenate when we dont have same type of var" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "XBezuXBJmvSf", + "outputId": "ea47a937-6216-4dd3-dbea-f9018c03630a" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Hello3'" + ] + }, + "execution_count": 19, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "var1 +str(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "ReHe-_SpnHIZ" + }, + "outputs": [], + "source": [ + "#notebook based ide give intermiadiate result (its of last statement always!!)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "vPrj6kXnnsqu", + "outputId": "80769e78-ea0d-4e49-9498-1dbb21950aad" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "int" + ] + }, + "execution_count": 21, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "type(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "cjucjgzjnwbA" + }, + "outputs": [], + "source": [ + " # are called magic function only work in jupyter notebbok" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "colab_type": "code", + "id": "-Jj3TzgsoatU", + "outputId": "11d33ceb-f72a-4b96-dc51-13ba56a8f1a3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "print(\"hello world\")\n", + "a=9\n", + "print(a)\n", + "type(a)\n", + "a=\" Hello \"\n", + "print(a)\n", + "type(a)\n", + "#if coditions\n", + "n=9\n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "else:\n", + " print(\"num is smaller than 10\")\n", + "#if coditions\n", + "n=9\n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "else:\n", + " print(\"num is smaller than 10\") \n", + "print(\"endofelse\")\n", + "#if coditions\n", + "n=9\n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "else:\n", + " print(\"num is smaller than 10\") #indentation level 1\n", + "print(\"endofelse\") #indentation level 0\n", + "#if coditions\n", + "n=3\n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "elif:\n", + " print(\" num is smaller than 5\") \n", + "else:\n", + " print(\"num is smaller than 10\") #indentation level 1\n", + "print(\"endofelse\") #indentation level 0\n", + "#if coditions\n", + "n=3 \n", + "if n>10:\n", + " print(\"num is greater than 10\")\n", + "elif n<5:\n", + " print(\" num is smaller than 5\") \n", + "else:\n", + " print(\"num is smaller than 10\") #indentation level 1\n", + "print(\"endofelse\") #indentation level 0\n", + "#packages \n", + "import keyword\n", + "keyword.kwlist\n", + "print(keyword.kwlist) #that cant be use !!\n", + "a=8 \n", + "b=10\n", + "print(a+b)\n", + "print(a-b)\n", + "print(a*b)\n", + "print(a/b) #float division\n", + "print(a//b) #int divison\n", + "print(a**b) #a^b\n", + "var1=\"Hello\"\n", + "var2=\"World\"\n", + "var1 +\" \"+var2\n", + "var1*3\n", + "var1+3\n", + "var1 +str(3)\n", + "#notebook based ide give intermiadiate result (its of last statement always!!)\n", + "type(a)\n", + "%history # are called magic function\n", + "%history # are called magic function only work in jupyter notebbok\n", + "%history\n" + ] + } + ], + "source": [ + "%history\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "tSzmCYgLonjt", + "outputId": "5be5e74a-ee58-4d1b-8bb7-fabaa7987626" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello aryan, your age is20\n" + ] + } + ], + "source": [ + "name=\"aryan\"\n", + "age=20\n", + "\n", + "print(\"hello \"+name+\", your age is\"+str(age))" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "Id2pZFL1pAh7", + "outputId": "1a79fef0-802b-40d8-8bf5-175bab9e1370" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2 1 1 3\n" + ] + } + ], + "source": [ + "#multiple variable in single print statement\n", + "a=2\n", + "b=1\n", + "print(a,b,a-b,a+b)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "08Xi-ynIpUS2", + "outputId": "567d7210-a38c-4912-db3c-4e26b51eee05" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello aryan , your age is 20\n" + ] + } + ], + "source": [ + "print(\"hello \",name,\", your age is\",age) # we cant give \",\" after name" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "mx1OPZLhpf9b", + "outputId": "c4554006-a995-49c3-819c-c9f7f9f4cad6" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Hello aryan, your age is 20'" + ] + }, + "execution_count": 29, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "#format func\n", + "\"Hello {}, your age is {}\".format(name,age)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "kRXnCSj0pzmW", + "outputId": "e8709ccb-8331-4d21-9292-e43d2da7f3ad" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Hello aryan, your age is 20.000'" + ] + }, + "execution_count": 30, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "# % or c++ method\n", + "\"Hello %s, your age is %0.3f\"%(name,age)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "5N77P1pSqU9F" + }, + "source": [ + "# notebook see here\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello\n" + ] + } + ], + "source": [ + "a=\"hello\"\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a=int(input())\n", + "\n", + "if a>5:\n", + " print(\"hello ritvik\")\n", + "else:\n", + " print(\"not hello\")\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "PYTHON BASICS", + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_2.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_2.ipynb new file mode 100644 index 00000000..691f4e78 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_2.ipynb @@ -0,0 +1,2977 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3ways of running python\n", + "bold Tag\n", + "- notebook\n", + "- CMD\n", + "- Making a python file.py" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'my name is Aryan,I am 20 yr old'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#f-string\n", + "name=\"Aryan\"\n", + "age=20\n", + "\n", + "f\"my name is {name},I am {age} yr old\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# starting loop\n", + " - while loop \n", + " - for loop " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 1 2 3 4 5 6 7 8 9 " + ] + } + ], + "source": [ + "#while loop\n", + "i=0\n", + "\n", + "while(i<10):\n", + " print(i,end=\" \") # parameter \" \", \",\"\n", + " i+=1" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3,5,7,9,11,13,15,17,19," + ] + } + ], + "source": [ + "# for in loop\n", + "\n", + "for ele in range(3,21): #parameter in range is exclusive so if u want 10 so u have to pass 11\n", + " if ele%2!=0:\n", + " print(ele,end=\",\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3,5,7,9,11,13,15,17,19," + ] + } + ], + "source": [ + "# for in loop\n", + "#jump parameter\n", + "for ele in range(3,21,2): #parameter in range is exclusive so if u want 10 so u have to pass 11\n", + " print(ele,end=\",\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "********************" + ] + } + ], + "source": [ + "for _ in range(10):\n", + " print(\"*\",end=\"*\")\n", + " #don't need to use the iterator." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "#map is a function which takes an interable( list in this case) and convert it into one new\n", + "#list with each entry being the result of corresponding entry from the input list based on the given key function.\n", + "#list=map (int, input().split())?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Strings" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "My name is aryan .\n", + "\n", + "i am from delhi \n" + ] + } + ], + "source": [ + "# ''\n", + "# \" \"\n", + "# \"\"\" \"\"\"\n", + "st=\"My name is aryan . i am from delhi\"\n", + "type(st)\n", + "\n", + "#Multiline string \n", + "\n", + "s1=\"\"\"My name is aryan .\n", + "\n", + "i am from delhi \"\"\"\n", + "print(s1)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'My name is aryan .\\n\\ni am from delhi '" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'MY NAME IS ARYAN . I AM FROM DELHI'" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.upper()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'my name is aryan . i am from delhi'" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.lower()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.isalpha() # after . +tab " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "st.format_map?\n", + "st.format_map\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "S.format_map(mapping) -> str\n", + "\n", + "Return a formatted version of S, using substitutions from mapping.\n", + "The substitutions are identified by braces ('{' and '}').\n", + "Type: builtin_function_or_method" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'My name is aryan . i am from delhi'" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.strip() # shift +tab give better documentation" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "' codinglots of fun.'" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\" codinglots of fun. \".rstrip() # rstrip right left lstrip both strip" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"Aryan\".istitle() #tell title" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(\"ram is our lord and we all chant for ram \".count(\"ram\")) #count words\n", + "st.count(\"mumbai\")" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#find func\n", + "st.find(\"name\")\n", + "st.find(\"tell\")" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['My', 'name', 'is', 'aryan', '.', 'i', 'am', 'from', 'delhi']" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.split(\" \") #it return list and break string !!" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['My name is aryan ', ' i am from delhi']" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.split(\".\") #it split from \" .\" character" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'M'" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "34" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(st)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'i'" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st[len(st)-1] #this will give us last charcter" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'h'" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st[len(st)-2] #this will give us second last charcter" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'h'" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#backward/negative indexing \n", + "st[-1]\n", + "st[-2]" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'aryan'" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#slicing \n", + "#st[start_idx:end_idx+1] #last wala prt in python is exclusive\n", + "st[11:16]" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "My name is aryan . i am from delhi\n", + "aryan . i am from delhi\n", + "aryan . i am from delh\n" + ] + } + ], + "source": [ + "print(st[:])\n", + "print(st[11:])\n", + "print(st[11:-1])" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ihled morf ma i . nayra si eman yM\n", + "si eman\n", + "M aei ra \n" + ] + } + ], + "source": [ + "#step size hai third one after 2nd colon\n", + "print(st[::-1])\n", + "print(st[9:2:-1]) # step size here use to reverse the string\n", + "print(st[:21:2])" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ihled morf ma i . nayra si eman yM\n", + "My name is aryan . i am from delhi\n" + ] + } + ], + "source": [ + "print(\"\".join(reversed(st)))\n", + "print(st)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "st=\"changed\" # here refernce are changed so string are immutable \n", + "# also indexedable \n", + "#those thing are immutable they are also hashable" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'changed'" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'type' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mstr\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"r\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m: 'type' object does not support item assignment" + ] + } + ], + "source": [ + "str[0]=\"r\"\n", + "#as string are immutable" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Operator\n", + "- arithmetic\n", + "- logical\n", + "- boolean \n", + "- bitwise" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(2>7) and (5>7) \n", + "#to fullfill \"and\" operaator\n", + "#all the coditions should be true" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(7>=7 ) or (7>10)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "not True\n" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "not( 3>5)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "10 & 4" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "14" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "10|4" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0b1010'" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bin(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "0b1010" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "functions are resuable pieces of programs.They allow you to give a name to block of statements ,allowing you to run that the block using the specified name anywhere in your program and any number of times. this is known as calling the function . for eg built in function are len,range\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello from fun function\n", + "function\n", + "after func()\n" + ] + } + ], + "source": [ + "# def function name(argument(s)):\n", + "# function inside code\n", + "\n", + "def fun():\n", + " print(\"hello from fun function\")\n", + " print(\"function\")\n", + " return \n", + "\n", + "\n", + "\n", + "\n", + "fun()\n", + "print(\"after func()\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n", + "hello aryan\n" + ] + } + ], + "source": [ + "for i in range(10):\n", + " print(\"hello aryan\")" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "def hellofunc(name,num=3): #default parameters\n", + " for i in range(num):\n", + " print(f\"hello my name is :\",name)\n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello my name is : aryan\n", + "hello my name is : aryan\n", + "hello my name is : aryan\n", + "hello my name is : aryan\n", + "hello my name is : aryan\n" + ] + } + ], + "source": [ + "hellofunc(\"aryan\",5)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello my name is : aryan\n", + "hello my name is : aryan\n", + "hello my name is : aryan\n" + ] + } + ], + "source": [ + "hellofunc(\"aryan\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "#in python we dont pass type of parameter which just pass parameter\n", + "\n", + "def hello():\n", + " print(\"hello from function\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def div(a,b):\n", + " try:\n", + " return a/b\n", + " except:\n", + " print(\"Error\")\n", + " finally:\n", + " print(\"This will print everytime as its finally block\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# local And global variable " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "x=10\n", + "def show():\n", + " x=5\n", + " print(x)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "10\n" + ] + } + ], + "source": [ + "show() #local variable \n", + "print(x) #global variable" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "x=10\n", + "def show():\n", + " # No assignment to x and we are updating it \n", + " x+=5\n", + " print(x)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "ename": "UnboundLocalError", + "evalue": "local variable 'x' referenced before assignment", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mUnboundLocalError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m#local variable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m#global variable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m\u001b[0m in \u001b[0;36mshow\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;31m# No assignment to x and we are updating it\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mx\u001b[0m\u001b[1;33m+=\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mUnboundLocalError\u001b[0m: local variable 'x' referenced before assignment" + ] + } + ], + "source": [ + "show() #local variable \n", + "print(x) #global variable" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "x=10 #this ix defined in global scope\n", + "def show():\n", + " global x\n", + " # No assignment to x and we are updating it \n", + " x+=5\n", + " print(x)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "15\n", + "15\n" + ] + } + ], + "source": [ + "show()\n", + "print(x) #so both are updated" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "x=10\n", + "def show():\n", + " y=\"local\"\n", + " print(x)\n", + " print(y)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10\n", + "local\n", + "10\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'y' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'y' is not defined" + ] + } + ], + "source": [ + "show()\n", + "print(x)\n", + "print(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "#enclosures\n", + "def outer():\n", + " x=\"local\"\n", + " def inner():\n", + " print(x)\n", + " \n", + " \n", + " inner()\n", + " print(x)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "local\n", + "local\n" + ] + } + ], + "source": [ + "outer()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "x=10\n", + "def show():\n", + " y=\"local\"\n", + " print(x)\n", + " print(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10\n", + "local\n" + ] + } + ], + "source": [ + "show()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "del x #delelting earlier global X" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# enclosures \n", + "def outer():\n", + " x=10\n", + " \n", + " def inner():\n", + " global x\n", + " x+=5\n", + " print(x)\n", + " \n", + " inner()\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'x' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mouter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m\u001b[0m in \u001b[0;36mouter\u001b[1;34m()\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 10\u001b[1;33m \u001b[0minner\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 11\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m\u001b[0m in \u001b[0;36minner\u001b[1;34m()\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0minner\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;32mglobal\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mx\u001b[0m\u001b[1;33m+=\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'x' is not defined" + ] + } + ], + "source": [ + "outer()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# nonlocal " + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "# enclosures \n", + "def outer():\n", + " x=10 #this x is in enclosures / non local scope\n", + " \n", + " def inner():\n", + " nonlocal x\n", + " x+=5\n", + " print(x)\n", + " \n", + " inner()\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "15\n", + "15\n" + ] + } + ], + "source": [ + "outer()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This will print everytime as its finally block\n" + ] + }, + { + "data": { + "text/plain": [ + "10.0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "div(10,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This will print everytime as its finally block\n" + ] + }, + { + "data": { + "text/plain": [ + "1.8" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "div(9,5)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error\n", + "This will print everytime as its finally block\n" + ] + } + ], + "source": [ + "div(1,0)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "def div(a,b):\n", + " try:\n", + " return a/b\n", + " except:\n", + " print(\"Error\")\n", + " finally:\n", + " print(\"This will print everytime as its finally block\")\n", + " return 10" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This will print everytime as its finally block\n", + "Error\n", + "This will print everytime as its finally block\n" + ] + }, + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "div(10,1)\n", + "div(1,0)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hello #hello is now afunction" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "def func_name(a,b,c): #we cant place docstring at bottom it should be at top\n", + " \"\"\"Docstring-\n", + " \n", + " this is my custom function.I really love python\n", + " \"\"\"\n", + " print(\"hello from \\t custom function\")\n", + " \n", + " res =a+b\n", + " c() #we can pass string ,float ,int ,any func in parameters\n", + " #print(c) #its shows that its afunction \n", + " #as a parameter we have to pass a function\n", + " return res" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "func_name # which file is it in? main`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.replace\n", + "#out means intermiadiate result" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello from \t custom function\n", + "hello from function\n" + ] + } + ], + "source": [ + "res=func_name(5,9,hello) #if we add doc string at end of func we dont get it" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "14\n" + ] + } + ], + "source": [ + "print(res)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "#def authentication(user,passw,login) for a page\n", + "def authentication (user,passw,login):\n", + " if user==\"aryan\" and passw==\"no\":\n", + " login()\n", + " else:\n", + " print(\"incorrect function\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "keyword arguments\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "if you some functions with many parameters and you want to specify only some of them ,then you can give values for such parameters by naming them-keyword arguments
\n", + "we use the name (keyword) instead of the postion to specify arguments to function" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "def check(cars,name,age):\n", + " print(f\"my name is {name},my age is {age},i have cars={cars}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is 20,my age is 2,i have cars=aryan\n" + ] + } + ], + "source": [ + "check(\"aryan\",20,2) #so it creates a problem\n", + "#earlier postional arguement \n", + "#so here comes keyword arguement to resolve problrm" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is aryan,my age is 20,i have cars=2\n" + ] + } + ], + "source": [ + "check(2,name=\"aryan\",age=20) #we also can give cars not but \n", + "#postional arguement should always be in front" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### args and kwargs\n", + "
\n",
+    "*args\n",
+    "**kwargs\n",
+    "
" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "def test_func(*args): #multiple aruements\n", + " print(args) \n", + " print(args[0])\n", + " print(args[-1])" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1, 2, 3, 4, 5, 6, 7, 8, 9)\n", + "1\n", + "9\n" + ] + } + ], + "source": [ + "test_func(1,2,3,4,5,6,7,8,9)#can pass many arguements\n", + "#they are going in the form of tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "def test_func1(**kwargs): #keyword arguement\n", + " print(kwargs)\n", + " print(kwargs['name']) #we have to pass keyword\n", + " #as its a keyworded arguement" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'name': 'aryan', 'age': 20, 'cars': 4}\n", + "aryan\n" + ] + } + ], + "source": [ + "test_func1(name=\"aryan\",age=20,cars=4)\n", + "#so here they come in format of\n", + "#keyword:value <==dictonary\n" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "def final_fuc(n1,n2,n3,*args,n4=10,**kwargs):\n", + " print(n1)\n", + " print(n2)\n", + " print(n3)\n", + " print(n4)\n", + " print(args)\n", + " print(kwargs)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n", + "4\n", + "7\n", + "20\n", + "(90, 'hello', True, 100)\n", + "{'name': 'Mohit', 'age': 20}\n" + ] + } + ], + "source": [ + "#positional argument follows keyword argument\n", + "\n", + "final_fuc(3,4,7,90,\"hello\",True,100,n4=20,name=\"Mohit\",age=20) # we cant write args after kwargs \n", + "#means no keyworded argument can be place before positional one!\n", + "#at least minimum no. of required==> postional\n", + "#optional==>args and kwargs(keyword argue...)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n",
+    "n=5\n",
+    "*\n",
+    "**\n",
+    "***\n",
+    "****\n",
+    "*****\n",
+    "
" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "*\n", + "**\n", + "***\n", + "****\n", + "*****\n" + ] + } + ], + "source": [ + "\n", + "n=int(input())\n", + "for i in range(1,n+1):\n", + " for y in range(1,i+1):\n", + " print(\"*\",end=\"\")\n", + " print() # means print(end='\\n') \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "*\n", + "**\n", + "***\n", + "****\n", + "*****\n" + ] + } + ], + "source": [ + "for i in range(1,n+1):\n", + " print('*'*i) #multiplying at every iteration\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## lambda function\n", + "\n", + "one liner function" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "def add():\n", + " return 10+10" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "20" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "add()" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(add)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "add=10" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10\n" + ] + } + ], + "source": [ + "print(add)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "def multi(a,b):\n", + " return a+b" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "add=lambda a,b:a+b #one line function" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "add(2,3)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "multi(4,5)" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [], + "source": [ + "a=[3,4,5,6,7,8,10,9]" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[3, 4, 5, 6, 7, 8, 9, 10]" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sorted(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [], + "source": [ + "a=[(\"BMW\",10),(\"AUDI\",20),(\"MUSTANG\",30),(\"PORSCHE\",40)]" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('AUDI', 20), ('BMW', 10), ('MUSTANG', 30), ('PORSCHE', 40)]" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sorted(a,key=None)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted?" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('BMW', 10), ('AUDI', 20), ('MUSTANG', 30), ('PORSCHE', 40)]" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sorted(a,key= lambda x:x[1]) \n", + "#takes parameter of object as the list and return the object which is to compared" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Decoraters " + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [], + "source": [ + "users={\n", + " \"aryan\":\"password\",\n", + " \"ram\":\"pass\",\n", + " \"krishna\":\"hello\"\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [], + "source": [ + "def show(username,password):\n", + " if username in users and users[username] == password:\n", + " print(\"hello World\")\n", + " else:\n", + " print(\"nOt authenticated\")" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nOt authenticated\n" + ] + } + ], + "source": [ + "show(\"aryan\",\"passs\")" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello World\n" + ] + } + ], + "source": [ + "show(\"ram\",\"pass\")" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [], + "source": [ + "def add(username,password,a,b):\n", + " if username in users and users[username] == password:\n", + " print(a+b)\n", + " else:\n", + " print(\"Not authenticated\")" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + } + ], + "source": [ + "add(\"aryan\",\"password\",1,2)\n", + "#so we can see their is reductancy in function" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": {}, + "outputs": [], + "source": [ + "#so function are also an obj\n", + "def login_required(func):\n", + " def wrapper(username,password,*args,**kwargs):\n", + " if username in users and users[username] == password:\n", + " print(func(*args,**kwargs))\n", + " else:\n", + " print(\"Not authenticated\")\n", + " return wrapper \n", + "\n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 159, + "metadata": {}, + "outputs": [], + "source": [ + "add= lambda a,b:a+b\n", + "add=login_required(add)\n", + "#both of the blocks above and below are same \n", + "#they have same functioning\n", + "#creates the function add \n", + "#then pass it the function login required\n", + "#change sthe variable of add function \n", + "#modified the var with the new func return" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@login_required\n", + "\n", + "def add(a,b):\n", + " print(a+b)" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 153, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "add(1,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 154, + "metadata": {}, + "outputs": [], + "source": [ + "protected_add= login_required(add)\n", + "#generic function and we are just passing a function as parameter" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ".wrapper at 0x000001A5395E9A60>\n" + ] + } + ], + "source": [ + "print(protected_add) #so now are function is password protected" + ] + }, + { + "cell_type": "code", + "execution_count": 156, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "() missing 2 required positional arguments: 'a' and 'b'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mprotected_add\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"ram\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m\"pass\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(username, password, *args, **kwargs)\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0musername\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mpassword\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0musername\u001b[0m \u001b[1;32min\u001b[0m \u001b[0musers\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0musers\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0musername\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m==\u001b[0m \u001b[0mpassword\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Not authenticated\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: () missing 2 required positional arguments: 'a' and 'b'" + ] + } + ], + "source": [ + "protected_add(\"ram\",\"pass\")" + ] + }, + { + "cell_type": "code", + "execution_count": 157, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n" + ] + } + ], + "source": [ + "protected_add(\"ram\",\"pass\",2,3)" + ] + }, + { + "cell_type": "code", + "execution_count": 158, + "metadata": {}, + "outputs": [], + "source": [ + "add=login_required(add) #see above" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [], + "source": [ + "def temp(*args,**kwargs):\n", + " print(args)\n", + " print(kwargs)" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "({1, 2, 3},)\n", + "{}\n", + "None\n", + "(1, 2, 3)\n", + "{}\n", + "None\n" + ] + } + ], + "source": [ + "a={1,2,3}\n", + "print(temp(a))\n", + "print(temp(*a))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data Structures\n", + "- list\n", + "- tuple\n", + "- set\n", + "- dictionary" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## list\n", + "- indexing\n", + "- mutable\n", + "- heterogeneous element\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "li=[]" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "list" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(li)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 4, 5, 67]\n" + ] + } + ], + "source": [ + "li2 =list() #its a constructor ==>list()\n", + "a=list([1,4,5,67])\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "list" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(li2)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "li=[4,5,6,7,88,9]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[4, 5, 6, 7, 88, 9]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4\n", + "9\n", + "[6, 7, 88]\n" + ] + } + ], + "source": [ + "print(li[0])\n", + "print(li[-1])\n", + "\n", + "#slicing\n", + "print(li[2:-1])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "li[0]=100 #means it is mutable\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 5, 6, 7, 88, 9]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "li2=[2,3,45,\"hello\",\"world\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[2, 3, 45, 'hello', 'world']" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li2" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'o'" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li2[3][4]" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "#nested list\n", + "li_new=[[1,2,3],[\"aryan\",\"gulati\"],[\"bmw\",\"audi\"],[10,20,30,[\"pogo\"]]]" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(li_new)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pogo\n", + "['pogo']\n" + ] + } + ], + "source": [ + "print(li_new[-1][3][0])\n", + "print(li_new[-1][3])" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "mat=[[9,8,7],[1,2,3],[7,8,9],[3,4,5]]" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(mat)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "li.append(899)\n", + "#extend u need to see" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 5, 333, 6, 7, 88, 9, 899]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "li.insert(2,333)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "li.remove(899)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 5, 333, 333, 6, 7, 88, 9]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "li.reverse()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[9, 88, 7, 6, 333, 333, 5, 100]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 5, 333, 333, 6, 7, 88, 9]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li[::-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "li.sort()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[5, 6, 7, 9, 88, 100, 333, 333]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "li=[1,2,3,4,5]\n", + "li2=li\n", + "li2[0]=100" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 2, 3, 4, 5]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li2" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 2, 3, 4, 5]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "li #so li and li2 objects have same reference " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "l1=[1,2,3,4,5]\n", + "l2=l1.copy()\n", + "l2[0]=100" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[100, 2, 3, 4, 5]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l2" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2, 3, 4, 5]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l1" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"n\" in \"aryan\"" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1 in [1,2,3,4]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "9 in [[9,8,7],[1,2,3],[7,8,9],[3,4,5]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_3.ipynb b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_3.ipynb new file mode 100644 index 00000000..d79169b8 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_3.ipynb @@ -0,0 +1,1508 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data Structures" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## List" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1=[1,6,3,8,10]\n", + "l2=[9,8,7]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1+l2 #extending" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1.append(l2) #it add ele as list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1.extend(l2)#it add unpack ele in it reverse of what append do" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## list comprehension" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "l1=[4,6,2,8,10]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[4, 6, 2, 8, 10, 4, 6, 2, 8, 10]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l1*2" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[8, 12, 4, 16, 20]\n" + ] + } + ], + "source": [ + "l2=[]\n", + "for i in l1:\n", + " l2.append(i*2) #storing it in another list\n", + "print(l2) " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n", + "12\n", + "4\n", + "16\n", + "20\n" + ] + } + ], + "source": [ + "for i in range(len(l1)):\n", + " print(l1[i]*2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "ll_sq=[ele*2 for ele in l1]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[8, 12, 4, 16, 20]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ll_sq" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[8, 12, 4, 16, 20]\n" + ] + } + ], + "source": [ + "# square of only even no\n", + "l2=[] #making another list for storing\n", + "for i in l1:\n", + " if i%2==0:\n", + " l2.append(i*2) #storing it in another list\n", + "print(l2) " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[16, 36, 4, 64, 100]\n" + ] + } + ], + "source": [ + "#using list comprehension\n", + "ll_sq=[i**2 for i in l1 if i%2==0]\n", + "#ll_sq=[i**2 else yahan likhan hota hai for i in l1 if (i%2==0) and kuch statement ]\n", + "print(ll_sq)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "#another example\n", + "l2=[\"hello\",\"world\",\"are\",\"you\",\"?\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Hello', 'World', 'Are', 'You']" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[ele.title() for ele in l2 if len(ele)>1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Input" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "aryan\n" + ] + } + ], + "source": [ + "n=input()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "aryan\n" + ] + } + ], + "source": [ + "print(n)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n", + "3\n" + ] + } + ], + "source": [ + "#typecasting and input\n", + "no1=float(input())\n", + "no2=float(input())" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "float" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(no2)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5.0" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "no1+no2" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 2 3 4\n" + ] + } + ], + "source": [ + "all_numbers=input()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['1', '2', '3', '4']" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_numbers.split()\n", + "#we can do list comprehension" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2, 3, 4]" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[int(ele) for ele in all_numbers.split()] #int(ele)#it is return statement" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2, 3, 4]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[int(ele) for ele in all_numbers.strip().split()] #int(ele)#it is return statement\n", + "#we can strip if we have spaces in front" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 \n", + "1\n", + "2\n", + "2\n", + "3\n", + "3\n", + "-88\n" + ] + } + ], + "source": [ + "#cumlative sum>0\n", + "\n", + "cum=0\n", + "\n", + "while cum >=0:\n", + " a=int(input())\n", + " cum+=a\n", + " if cum>=0:\n", + " print(a)\n", + " else:\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 \n", + "2\n", + "-88\n" + ] + } + ], + "source": [ + "#cumlative sum>0\n", + "\n", + "cum=0\n", + "l=[]\n", + "while cum >=0:\n", + " a=int(input())\n", + " cum+=a\n", + " if cum>0:\n", + " l.append(a)\n", + " else:\n", + " break\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tuple\n", + "- immutable\n", + "- indexedable\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "tup=(1,2,3,4,5,6)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tuple" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(tup)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tup[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tup[-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'tuple' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mtup\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;31m#'tuple' object does not support item assignment\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;31m#basically string and tuple are immutable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" + ] + } + ], + "source": [ + "tup[0]=100\n", + "#'tuple' object does not support item assignment\n", + "#basically string and tuple are immutable\n" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [], + "source": [ + "l=[1,2,3]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "tup1=(4,5,6,l)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(4, 5, 6, [1, 2, 3])" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tup1" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [], + "source": [ + "tup1[3].append(4) #here we areappending in list not tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(4, 5, 6, [1, 2, 3, 4])" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tup1 #list is mutable" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "tup=(5,3,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "PI=(3.14,) #creating constant val use case of tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "def four_fun(a,b):\n", + " return a+b,a-b,a/b,a*b #use case of tuple\n", + "#we also do list but most of timein tuple format\n", + "#return (a+b,a-b,a/b,a*b) is same as above " + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(8, 2, 1.6666666666666667, 15)" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "four_fun(5,3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#tuple has only two more func so\n", + "t=[1,2,3]\n", + "#t.count(),t.index()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Set\n", + "- unordered\n", + "- unique\n", + "- mutable" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "s={5,6,11,1,10,1,1,11}" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1, 5, 6, 10, 11}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'set' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ms\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m8\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m: 'set' object does not support item assignment" + ] + } + ], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "5\n", + "6\n", + "10\n", + "11\n" + ] + } + ], + "source": [ + "for e in s:\n", + " print(e) #so we can iterate over it" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "s.add(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1, 5, 6, 10, 11, 100}" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.add(100)\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "141938393" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hash(\"Aryan\")" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "141938393" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hash(\"Aryan\")" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "350574217" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hash(\"aryan\") # value stored " + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [], + "source": [ + "s1={1,4,6,2,4,3}\n", + "s2={1,5,8,3,4,9}" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1, 2, 3, 4, 5, 6, 8, 9}" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1.union(s2) #s1 |s2" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1, 3, 4}" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1.intersection(s2) #s1&s2" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{2, 6}" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1.difference(s2)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{2, 5, 6, 8, 9}" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(s1-s2) | (s2-s1) #just for fun we can see using venn diagram\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s={1,2,2,3,4,5,6,7,7,1,3,3,4,(1,4,5),\"wtwt\",[1,2,3]} \n", + "#so list is mutable so we can only store immutable elements in set\n", + "#error: unhashable type: 'list' \n", + "#whereas we can store tuple and string" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [], + "source": [ + "l=[1,2,3,4,5,6,7,1,2,3,4,5,6,7,8,9,6,7,8,9]" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2, 3, 4, 5, 6, 7, 8, 9]\n" + ] + } + ], + "source": [ + "ab=list(set(l))\n", + "print(ab)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dictionary" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [], + "source": [ + "#store data in key:val format\n", + "canteen_menu={\n", + " \"samosa\":10,\n", + " \"pizza\":100,\n", + " \"burger\":50\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(canteen_menu)" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys" + ] + }, + "execution_count": 130, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(canteen_menu.keys())" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": {}, + "outputs": [], + "source": [ + "k=canteen_menu.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['samosa', 'pizza', 'burger']" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(k)" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": {}, + "outputs": [], + "source": [ + "v=canteen_menu.values()" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_values" + ] + }, + "execution_count": 134, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(canteen_menu.values())" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[10, 100, 50]" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(v)" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_items([('samosa', 10), ('pizza', 100), ('burger', 50)])" + ] + }, + "execution_count": 136, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "canteen_menu.items() #it return us in form of tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "samosa 10\n", + "pizza 100\n", + "burger 50\n" + ] + } + ], + "source": [ + "#we can iteration too\n", + "for e in canteen_menu.items():\n", + " print(e[0],e[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('samosa', 10)\n", + "('pizza', 100)\n", + "('burger', 50)\n" + ] + } + ], + "source": [ + "#we can iteration too\n", + "for e in canteen_menu.items():\n", + " print(e) #so here u can see all are tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "samosa 10\n", + "pizza 100\n", + "burger 50\n" + ] + } + ], + "source": [ + "for keys,values in canteen_menu.items():\n", + " print(keys,values)" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "juice is not present\n" + ] + } + ], + "source": [ + "#if something is not present we get error to remove error we can use get it return none\n", + "key='juice'\n", + "\n", + "if canteen_menu.get(key)==None:\n", + " print(key,\"is not present\")\n", + "else:\n", + " print(canteen_menu[key])" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100\n", + "None\n" + ] + } + ], + "source": [ + "#get in Dictonary\n", + "\n", + "print(canteen_menu.get(\"pizza\"))\n", + "print(canteen_menu.get(\"juice\")) #if not present\n", + "#it return an object type of none" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "metadata": {}, + "outputs": [], + "source": [ + "canteen_menu[\"juice\"]=30" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": {}, + "outputs": [], + "source": [ + "canteen_menu[\"fruits\"] = [10,20,30]" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'samosa': 10, 'pizza': 100, 'burger': 50, 'juice': 30, 'fruits': [10, 20, 30]}" + ] + }, + "execution_count": 144, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "canteen_menu" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "30" + ] + }, + "execution_count": 145, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "canteen_menu[\"fruits\"][-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": {}, + "outputs": [], + "source": [ + "canteen_menu.update()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": {}, + "outputs": [], + "source": [ + "canteen_menu[\"fruits\"]={\n", + " 'grapes':10,\n", + " 'orange':25,\n", + " 'mango':30\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'samosa': 10,\n", + " 'pizza': 100,\n", + " 'burger': 50,\n", + " 'juice': 30,\n", + " 'fruits': {'grapes': 10, 'orange': 25, 'mango': 30}}" + ] + }, + "execution_count": 148, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "canteen_menu" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "metadata": {}, + "outputs": [], + "source": [ + "l=[\"a\",\"b\",\"c\",\"d\",\"e\"]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'a+b+c+d+e'" + ] + }, + "execution_count": 150, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#it will join string with \"_\"\n", + "\"+\".join(l)" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['h', 'e', 'l', 'l', 'o']" + ] + }, + "execution_count": 151, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(\"hello\") #similarly \n", + "#constructor" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_4(python module and expection handling).ipynb b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_4(python module and expection handling).ipynb new file mode 100644 index 00000000..32e2caa3 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_4(python module and expection handling).ipynb @@ -0,0 +1,730 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os #its for operating system\n", + "#we can interact with operating sys" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['.ipynb_checkpoints',\n", + " 'customname.py',\n", + " 'mosule and package.ipynb',\n", + " 'PYTHON_BASICS_1.ipynb',\n", + " 'PYTHON_BASICS_2.ipynb',\n", + " 'PYTHON_BASICS_3.ipynb',\n", + " '__pycache__']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.listdir() #that will give u all the python folder \n", + "#inside your current directories" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['.git', '.gitignore', 'filerunfirstpython', 'PYTHON_BASICS', 'README.md']" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.listdir(\"../\") #this will give you one dir backword" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'C:\\\\Users\\\\lenovo\\\\Desktop\\\\Python_Master\\\\PYTHON_BASICS'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.getcwd() #where we are (give current dir)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import random \n", + "# genetare random no" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "12.855749652553357" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "5*random.random()+10 #see this func doc " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random.randint(1,10) # intrandom val\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'name2'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mname2\u001b[0m \u001b[1;31m#not found\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'name2'" + ] + } + ], + "source": [ + "import name2 #not found" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import customname \n", + "#we can also import our file on Pypi " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "aryan says hello to all\n" + ] + } + ], + "source": [ + "customname.hello_to_all(\"aryan\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ar say bye to all\n" + ] + } + ], + "source": [ + "customname.bye(\"ar\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['__builtins__',\n", + " '__cached__',\n", + " '__doc__',\n", + " '__file__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__spec__',\n", + " 'add',\n", + " 'bye',\n", + " 'hello_to_all',\n", + " 'print_name']" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(customname) #list of all func in module\n", + "#all other are hidden things" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'customname' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mcustomname\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m9\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'customname' is not defined" + ] + } + ], + "source": [ + "customname.add(9,10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#sometimes we are imporing only one func\n", + "#from customname import hello_to _all\n", + "#sometimes we are imporing all\n", + "#from customname import *\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "customname\n" + ] + } + ], + "source": [ + "customname.print_name()\n", + "#" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'customname'" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customname.__name__" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "import math" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exception handling" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "a=10\n", + "b=0" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "ZeroDivisionError", + "evalue": "division by zero", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0mb\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mZeroDivisionError\u001b[0m: division by zero" + ] + } + ], + "source": [ + "a/b" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "zero error\n", + "yeahhh exepted\n" + ] + } + ], + "source": [ + "try:\n", + " a/b\n", + "except ZeroDivisionError:\n", + " print(\"zero error\")\n", + "except:\n", + " print(\"general errror\")\n", + "print(\"yeahhh exepted\") \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "l=[1,2,3]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'list' object has no attribute 'split'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ml\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mAttributeError\u001b[0m: 'list' object has no attribute 'split'" + ] + } + ], + "source": [ + "l.split()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "custom attribute error\n", + "yeahhh exepted\n" + ] + } + ], + "source": [ + "try:\n", + " l.split()\n", + "except ZeroDivisionError:\n", + " print(\"zero error\")\n", + " \n", + "except AttributeError:\n", + " print(\"custom attribute error\")\n", + "except:\n", + " print(\"general errror\")\n", + "else:\n", + " print(\"no error int he code\")\n", + "print(\"yeahhh exepted\") \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "no error in the code\n", + "yeahhh exepted\n" + ] + } + ], + "source": [ + "try:\n", + " l.sort()\n", + "except ZeroDivisionError:\n", + " print(\"aero error\")\n", + "except:\n", + " print(\"general errror\")\n", + "else:\n", + " print(\"no error in the code\")\n", + "print(\"yeahhh exepted\") \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['ArithmeticError',\n", + " 'AssertionError',\n", + " 'AttributeError',\n", + " 'BaseException',\n", + " 'BlockingIOError',\n", + " 'BrokenPipeError',\n", + " 'BufferError',\n", + " 'BytesWarning',\n", + " 'ChildProcessError',\n", + " 'ConnectionAbortedError',\n", + " 'ConnectionError',\n", + " 'ConnectionRefusedError',\n", + " 'ConnectionResetError',\n", + " 'DeprecationWarning',\n", + " 'EOFError',\n", + " 'Ellipsis',\n", + " 'EnvironmentError',\n", + " 'Exception',\n", + " 'False',\n", + " 'FileExistsError',\n", + " 'FileNotFoundError',\n", + " 'FloatingPointError',\n", + " 'FutureWarning',\n", + " 'GeneratorExit',\n", + " 'IOError',\n", + " 'ImportError',\n", + " 'ImportWarning',\n", + " 'IndentationError',\n", + " 'IndexError',\n", + " 'InterruptedError',\n", + " 'IsADirectoryError',\n", + " 'KeyError',\n", + " 'KeyboardInterrupt',\n", + " 'LookupError',\n", + " 'MemoryError',\n", + " 'ModuleNotFoundError',\n", + " 'NameError',\n", + " 'None',\n", + " 'NotADirectoryError',\n", + " 'NotImplemented',\n", + " 'NotImplementedError',\n", + " 'OSError',\n", + " 'OverflowError',\n", + " 'PendingDeprecationWarning',\n", + " 'PermissionError',\n", + " 'ProcessLookupError',\n", + " 'RecursionError',\n", + " 'ReferenceError',\n", + " 'ResourceWarning',\n", + " 'RuntimeError',\n", + " 'RuntimeWarning',\n", + " 'StopAsyncIteration',\n", + " 'StopIteration',\n", + " 'SyntaxError',\n", + " 'SyntaxWarning',\n", + " 'SystemError',\n", + " 'SystemExit',\n", + " 'TabError',\n", + " 'TimeoutError',\n", + " 'True',\n", + " 'TypeError',\n", + " 'UnboundLocalError',\n", + " 'UnicodeDecodeError',\n", + " 'UnicodeEncodeError',\n", + " 'UnicodeError',\n", + " 'UnicodeTranslateError',\n", + " 'UnicodeWarning',\n", + " 'UserWarning',\n", + " 'ValueError',\n", + " 'Warning',\n", + " 'WindowsError',\n", + " 'ZeroDivisionError',\n", + " '__IPYTHON__',\n", + " '__build_class__',\n", + " '__debug__',\n", + " '__doc__',\n", + " '__import__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__spec__',\n", + " 'abs',\n", + " 'all',\n", + " 'any',\n", + " 'ascii',\n", + " 'bin',\n", + " 'bool',\n", + " 'breakpoint',\n", + " 'bytearray',\n", + " 'bytes',\n", + " 'callable',\n", + " 'chr',\n", + " 'classmethod',\n", + " 'compile',\n", + " 'complex',\n", + " 'copyright',\n", + " 'credits',\n", + " 'delattr',\n", + " 'dict',\n", + " 'dir',\n", + " 'display',\n", + " 'divmod',\n", + " 'enumerate',\n", + " 'eval',\n", + " 'exec',\n", + " 'filter',\n", + " 'float',\n", + " 'format',\n", + " 'frozenset',\n", + " 'get_ipython',\n", + " 'getattr',\n", + " 'globals',\n", + " 'hasattr',\n", + " 'hash',\n", + " 'help',\n", + " 'hex',\n", + " 'id',\n", + " 'input',\n", + " 'int',\n", + " 'isinstance',\n", + " 'issubclass',\n", + " 'iter',\n", + " 'len',\n", + " 'license',\n", + " 'list',\n", + " 'locals',\n", + " 'map',\n", + " 'max',\n", + " 'memoryview',\n", + " 'min',\n", + " 'next',\n", + " 'object',\n", + " 'oct',\n", + " 'open',\n", + " 'ord',\n", + " 'pow',\n", + " 'print',\n", + " 'property',\n", + " 'range',\n", + " 'repr',\n", + " 'reversed',\n", + " 'round',\n", + " 'set',\n", + " 'setattr',\n", + " 'slice',\n", + " 'sorted',\n", + " 'staticmethod',\n", + " 'str',\n", + " 'sum',\n", + " 'super',\n", + " 'tuple',\n", + " 'type',\n", + " 'vars',\n", + " 'zip']" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(__builtins__) #Built-in functions, exceptions, and other objects.\n", + "#type of errors " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "general errror\n", + "i will always excute after all except\n", + "yeahhh exepted 10000 line of code\n" + ] + } + ], + "source": [ + "try:\n", + " l.split()\n", + "except ZeroDivisionError:\n", + " print(\"aero error\")\n", + "except:\n", + " print(\"general errror\")\n", + "else:\n", + " print(\"no error int he code\")\n", + "finally:\n", + " #always have this block executed \n", + " #you have error or not\n", + " print(\"i will always excute after all except\")\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "print(\"yeahhh exepted 10000 line of code\") \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "input ur name :mo\n", + "name shouldnt be less than 3\n" + ] + } + ], + "source": [ + "name=input(\"input ur name :\")\n", + "\n", + "try:\n", + " if(len(name)<3):\n", + " raise Exception\n", + "# name+lastmname\n", + "# email(name)#why would i send email to that person who has given wrong email\n", + "except:\n", + " print(\"name shouldnt be less than 3\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#https://docs.python.org/3/tutorial/errors.html" + ] + } + ], + "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.8.1" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_6(Iterator in python).ipynb b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_6(Iterator in python).ipynb new file mode 100644 index 00000000..2d889052 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_6(Iterator in python).ipynb @@ -0,0 +1,185 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "x=[1,2,3]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "x_iter=iter(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_iter #type of object " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "next(x_iter)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "next(x_iter)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "next(x_iter)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "ename": "StopIteration", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mStopIteration\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mnext\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx_iter\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;31m#when we reached the end of list it will meet the stop iteration error\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mStopIteration\u001b[0m: " + ] + } + ], + "source": [ + "next(x_iter) \n", + "#when we reached the end of list it will meet the stop iteration error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Iteration Protocol in Python\n", + "### the iteration protocol is a fancy term meaning \"how iterables actually work in python\"\n", + "- for a class object to be the iterable:\n", + " Can be passed to the iter function to get an iterator for them.\n", + "- for any iterator:\n", + " can be passed to the next function which gives their next item or raises StopIteration\n", + " Return themselves when passed to their iter function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class yrange:\n", + " #n is the number upto which we want the range \n", + " def __init__(self,n):\n", + " self.i=0\n", + " self.n=n\n", + " \n", + " #this method makes our class iterable\n", + " def __iter__(self):\n", + " return self\n", + " \n", + " \n", + " #this method should be implemented by the ITERATOR\n", + " def __next__ (self):\n", + " if self.ilist: \n", + " - ordered\n", + " - Mutable(Changeable)\n", + " - Heterogeneous\n", + " \n", + "- tuple:\n", + " - ordered\n", + " - IMMutable(Unchangeable)\n", + " \n", + "- dictionary:\n", + " - Unordered\n", + " - Mutable\n", + " - Indexed\n", + " \n", + "- set:\n", + " - Unordered \n", + " - Unindexed\n", + " - IMMutable" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Math module " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n", + "6\n", + "1.0\n", + "3.141592653589793\n", + "inf\n", + "-inf\n", + "6\n", + "4\n", + "1\n" + ] + } + ], + "source": [ + "import math\n", + "print(math.floor(15/2))\n", + "print(math.gcd(12,6))\n", + "print(math.log(math.e))\n", + "print(math.pi)\n", + "print(math.inf)\n", + "print(-math.inf)\n", + "print(sum([1,2,3]))\n", + "print(max([1,2,3,4]))\n", + "print(min([1,2,3,4]))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\ipykernel_launcher.py', '-f', 'C:\\\\Users\\\\ARYAN GULATI\\\\AppData\\\\Roaming\\\\jupyter\\\\runtime\\\\kernel-3f361801-1af5-4ab1-9e1d-f59d204f18f7.json']\n" + ] + } + ], + "source": [ + "#Argv gives list of command line outcome\n", + "import sys\n", + "def printdata():\n", + " print(sys.argv)\n", + " \n", + "printdata() #0th argument if i give hello then it will become argv[1]\n", + "# basically its a list of arguements that we supply" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\ipykernel_launcher.py', '-f', 'C:\\\\Users\\\\ARYAN GULATI\\\\AppData\\\\Roaming\\\\jupyter\\\\runtime\\\\kernel-3f361801-1af5-4ab1-9e1d-f59d204f18f7.json']\n" + ] + } + ], + "source": [ + "import sys\n", + "def printdata():\n", + " print(sys.argv)\n", + " \n", + "def printsum():\n", + " print(int(sys.argv[1]) + int(sys.argv[2]))\n", + " \n", + "printdata() " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.8.3 (default, Jul 2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)]\n" + ] + } + ], + "source": [ + "print(sys.version) #this tell us about its version" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['C:\\\\Users\\\\ARYAN GULATI\\\\Desktop\\\\Python_Code\\\\2.)PYTHON_BASICS\\\\PYTHON Basics', 'C:\\\\ProgramData\\\\Anaconda3\\\\python38.zip', 'C:\\\\ProgramData\\\\Anaconda3\\\\DLLs', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib', 'C:\\\\ProgramData\\\\Anaconda3', '', 'C:\\\\Users\\\\ARYAN GULATI\\\\AppData\\\\Roaming\\\\Python\\\\Python38\\\\site-packages', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\win32', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\win32\\\\lib', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\Pythonwin', 'C:\\\\ProgramData\\\\Anaconda3\\\\lib\\\\site-packages\\\\IPython\\\\extensions', 'C:\\\\Users\\\\ARYAN GULATI\\\\.ipython']\n" + ] + } + ], + "source": [ + "print(sys.path) #this tell the path in ehich python will look up for packages" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1114111\n", + "9223372036854775807\n", + "\n", + "\n" + ] + } + ], + "source": [ + "#https://docs.python.org/3/library/sys.html\n", + "print(sys.maxunicode)\n", + "print(sys.maxsize) #max size of Data Structure you can have in your system \n", + "print(type(sys.stdin))\n", + "print(sys.stdout)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "__name__==\"__main__\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Everything is object" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "s=\"kklfsfwlk\" #string is also is object" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(s))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# class with keyword class and then its name \n", + "#and its prefered to keep class name as title case\n", + "class Prson:\n", + " pass #empty class\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "#creating object for class\n", + "a=Prson()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "__main__.Prson" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(a) # main module has person class" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<__main__.Prson at 0x23a8154e820>" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a#also telling location" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "#constructor is also normal func\n", + "class Persn:\n", + " # def then constructor\n", + " #constructor start with __init__\n", + " #constructor in python always start with self\n", + " #if it has parameter then also it start with self\n", + " def __init__(self):\n", + " #self here will refer to obj whenever u call\n", + " print(\"constructor is called\")\n", + " #this func will call everytime we make an obj\n", + " #this is no need to execute explicitly\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "constructor is called\n" + ] + } + ], + "source": [ + "o=Persn()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "constructor is called\n" + ] + } + ], + "source": [ + "o1=Persn()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "#as happy is Global function\n", + "def happy(name):\n", + " return name+ \" is happy doing code !\"" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "class Person:\n", + " #class variable -common to all the obj of class\n", + " #no self.jdjs is not required\n", + " nationality=\"Indian\"\n", + " \n", + " \n", + " def __init__(self,your_name,age):\n", + " print(\"constructor is called\")\n", + " # we can create constructor\n", + " self.name=your_name\n", + " self.age=age\n", + " self.hobbies=[] #empty list\n", + " \n", + " \n", + "\n", + "\n", + " def hobby_added(self):\n", + " print(f\"your hobbies is added ,your like to play{self.hobbies}\")\n", + " #this function is used in the class so see it\n", + " \n", + " \n", + " #we can create function\n", + " def introduce(self):\n", + " #this func is calling global func\n", + " print(f\"my name is {self.name},my age is {self.age},I am {self.nationality}, \",happy(self.name))\n", + " #where nationaliy u can also write Person in place of self\n", + " \n", + " \n", + " \n", + " \n", + " #so u can add hobbies\n", + " #happy is a global func that has parameter name given \n", + " def add_hobbies(self,hobbi_name):\n", + " self.hobbies.append(hobbi_name)\n", + " #this func will append haobbi_name in lst hobbies\n", + " #hobbi_name will work as a pointer\n", + " self.hobby_added()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "__init__() missing 2 required positional arguments: 'your_name' and 'age'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mp\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mPerson\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;31m# __init__()\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;31m#missing 1 required positional\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m#argument: 'your_name'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: __init__() missing 2 required positional arguments: 'your_name' and 'age'" + ] + } + ], + "source": [ + "p=Person()\n", + "# __init__() \n", + "#missing 1 required positional \n", + "#argument: 'your_name'" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "constructor is called\n" + ] + } + ], + "source": [ + "p=Person(\"aryan\",20)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<__main__.Person at 0x23a81568550>" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('aryan', 20)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.name,p.age #in tuple format " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Indian'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.nationality" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "constructor is called\n" + ] + } + ], + "source": [ + "p1=Person(\"amit\",21)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('amit', 21, 'Indian')" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p1.name,p1.age,p.nationality" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is aryan,my age is 20,I am Indian, aryan is happy doing code !\n" + ] + } + ], + "source": [ + "p.introduce() #objects function " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is amit,my age is 21,I am Indian, amit is happy doing code !\n" + ] + } + ], + "source": [ + "p1.introduce()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Indian'" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Person.nationality" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "your hobbies is added ,your like to play['Criket']\n" + ] + } + ], + "source": [ + "p.add_hobbies(\"Criket\")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "your hobbies is added ,your like to play['Criket', 'Chess']\n" + ] + } + ], + "source": [ + "p.add_hobbies(\"Chess\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Criket', 'Chess']" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.hobbies" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "p.nationality=\"Canadian\"" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is aryan,my age is 20,I am Canadian, aryan is happy doing code\n" + ] + } + ], + "source": [ + "#instance variable is created not effected class var\n", + "p.introduce()\n", + "#if we change nationality to other\n", + "#so it created a new instance variable" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my name is amit,my age is 21,I am Indian, amit is happy doing code\n" + ] + } + ], + "source": [ + "p1.introduce()" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [], + "source": [ + "#but if i changed class nationality \n", + "Person.nationality=\"American\"" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'American'" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p1.nationality" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Canadian'" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.nationality\n", + "#bcz its have created its instance variable" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'American'" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Person.nationality" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#india is removed as person itself changed its nationality" + ] + } + ], + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_7(OOPS HITMan ex).ipynb b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_7(OOPS HITMan ex).ipynb new file mode 100644 index 00000000..30715348 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/PYTHON_BASICS_7(OOPS HITMan ex).ipynb @@ -0,0 +1,920 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "class Human:\n", + " #class Variable\n", + " aadhar_no=0\n", + " pop=0 #population \n", + " aadhar=[] #also maintaining list or database\n", + " \n", + " #constructor\n", + " def __init__(self,name=\"unnamed\"): #we are just intiallising it to \n", + " #unmaed later it will change with name given to it\n", + " self.name=name\n", + " self.id=Human.aadhar_no#tab dabane se aabhi raha hai\n", + " #we cant write self here bcz it will create particular aadhar no \n", + " #for constructor tht we dont want\n", + " self.alive=True\n", + " \n", + " \n", + " Human.aadhar_no+=1\n", + " Human.pop+=1\n", + " Human.aadhar.append(self) #we can do here self.name \n", + " #but we are doing self so whole obj will comes under it\n", + " \n", + " \n", + " \n", + " #display func-representation obj \n", + " def __repr__(self):#it just return string of obj of class\n", + " return f\" name {self.name} id {self.id} alive {self.alive}\"\n", + " #magic function like __repr__ we have __add__\n", + " #it will add __add__ so it will combine name and info\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " def die(self):\n", + " \n", + " if self.alive==True:\n", + " self.alive=False\n", + " Human.pop-=1\n", + " print(self.name,\" is dead\")\n", + " #aadhar.remove(self)\n", + " #Human.aadhar.remove(self)\n", + " else :\n", + " print(self.name,\" is already died\")\n", + " \n", + " \n", + "#Hitman (INHERTANCE) \n", + "class Hitman(Human): #(derived class)this is inherted from Human class(base class)\n", + " def __init__(self,name):# no need of writng name as unnmaed it draw from parent class\n", + " super().__init__(name)#super() is inhertiance it inhert __init__ constructor from base class\n", + "\n", + "\n", + " self.kills =0 \n", + " #u can also make list how many human he killed\n", + " \n", + "\n", + "\n", + "\n", + "\n", + " def kill(self,person): \n", + "#if we pass self instead of perso then\n", + " if self is person:#( is check obj while== check val)\n", + " print(\"sucide is no option\")\n", + " elif not self.alive:\n", + " print(\"Hitman is already Dead\")\n", + " else:\n", + " if person.alive==True:\n", + " person.die()\n", + " self.kills+=1\n", + " #kills.append(person) it will tell and who all die\n", + " else: \n", + " person.die()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "aryan =Human(\"Aryan\")\n", + "p1=Human(\"person1\")\n", + "p2=Human(\"person2\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.pop" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "person1\n", + "person2\n" + ] + }, + { + "data": { + "text/plain": [ + "'Aryan'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aryan.name #obj.name\n", + "print(p1.name)\n", + "print(p2.name)\n", + "aryan.name " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Aryan'" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.aadhar[0].name #where we have stored in list \n", + "#gives same output" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.aadhar[0].id\n", + "aryan.id" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "bhargav= Human(\"Bhargav\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.pop" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "3\n" + ] + } + ], + "source": [ + "print(aryan.id)\n", + "print(bhargav.id)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.aadhar[0].alive" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.aadhar_no #this is ongoing aadhar no" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "#Delete any obj var value\n", + "# del Human\n", + "#del Human.adhar[0]\n", + "# del aryan\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "type" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(Human)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " name Aryan id 0 alive True\n" + ] + } + ], + "source": [ + "print(aryan)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ name Aryan id 0 alive True, name person1 id 1 alive True, name person2 id 2 alive True, name Bhargav id 3 alive True]\n" + ] + } + ], + "source": [ + "print(Human.aadhar) #save info in list" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "ritvik=Human(\"ritvik\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4\n" + ] + } + ], + "source": [ + "print(ritvik.id)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[ name Aryan id 0 alive True,\n", + " name person1 id 1 alive True,\n", + " name person2 id 2 alive True,\n", + " name Bhargav id 3 alive True,\n", + " name ritvik id 4 alive True]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bhargav is dead\n" + ] + } + ], + "source": [ + "bhargav.die()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[ name Aryan id 0 alive True,\n", + " name person1 id 1 alive True,\n", + " name person2 id 2 alive True,\n", + " name Bhargav id 3 alive False,\n", + " name ritvik id 4 alive True]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#bhargav.die()\n", + "Human.pop" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " name Bhargav id 3 alive False\n" + ] + } + ], + "source": [ + "print(bhargav)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aryan is aryan" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aryan is bhargav\n", + "# is -->it consider obj\n", + "#== -->it consider val" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "james=Hitman(\"james\")" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "rko=Hitman(\"rko\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.pop" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[ name Aryan id 0 alive True,\n", + " name person1 id 1 alive True,\n", + " name person2 id 2 alive True,\n", + " name Bhargav id 3 alive False,\n", + " name ritvik id 4 alive True,\n", + " name james id 5 alive True,\n", + " name rko id 6 alive True]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "person2 is dead\n" + ] + } + ], + "source": [ + "rko.kill(p2)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.pop" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[ name Aryan id 0 alive True,\n", + " name person1 id 1 alive True,\n", + " name person2 id 2 alive False,\n", + " name Bhargav id 3 alive False,\n", + " name ritvik id 4 alive True,\n", + " name james id 5 alive True,\n", + " name rko id 6 alive True]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rko.kills" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "james.kills" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "james is dead\n" + ] + } + ], + "source": [ + "rko.kill(james)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rko.kills" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sucide is no option\n" + ] + } + ], + "source": [ + "rko.kill(rko)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hitman is already Dead\n" + ] + } + ], + "source": [ + "james.kill(aryan)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "__main__.Hitman" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(james)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[ name Aryan id 0 alive True,\n", + " name person1 id 1 alive True,\n", + " name person2 id 2 alive False,\n", + " name Bhargav id 3 alive False,\n", + " name ritvik id 4 alive True,\n", + " name james id 5 alive False,\n", + " name rko id 6 alive True]" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[ name Aryan id 0 alive True,\n", + " name person1 id 1 alive True,\n", + " name person2 id 2 alive False,\n", + " name Bhargav id 3 alive False,\n", + " name ritvik id 4 alive True,\n", + " name james id 5 alive False,\n", + " name rko id 6 alive True]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# print(ritvik)\n", + "Human.aadhar" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hitman is already Dead\n" + ] + } + ], + "source": [ + "james.kill(bhargav)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "james.kills" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sWAp Case\n", + "SwaP cASE\n" + ] + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Basics/__pycache__/m1.cpython-38.pyc b/2.)PYTHON_BASICS/PYTHON Basics/__pycache__/m1.cpython-38.pyc new file mode 100644 index 00000000..04289271 Binary files /dev/null and b/2.)PYTHON_BASICS/PYTHON Basics/__pycache__/m1.cpython-38.pyc differ diff --git a/2.)PYTHON_BASICS/PYTHON Basics/customname.py b/2.)PYTHON_BASICS/PYTHON Basics/customname.py new file mode 100644 index 00000000..bb604ba5 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/customname.py @@ -0,0 +1,17 @@ +def hello_to_all(name): + """ + this function return greeting + """ + print(f"{name} says hello to all") + + +def bye(name): + print(f"{name} say bye to all") + +def add(a,b): + return(a+b) + +def print_name(): + print(__name__) #this will give __customname__ bcz callong through some func + +#print(__name__) this will give __main__ calling from func \ No newline at end of file diff --git a/2.)PYTHON_BASICS/PYTHON Basics/m1.py b/2.)PYTHON_BASICS/PYTHON Basics/m1.py new file mode 100644 index 00000000..85fd5db2 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/m1.py @@ -0,0 +1,9 @@ + + +if __name__=="__main__": + # what to do when this module run directly + print("M1 Module %s",(__name__)) + +else: + #specify what to do when this module is imported + print("I am in M1,else block") \ No newline at end of file diff --git a/2.)PYTHON_BASICS/PYTHON Basics/m2.py b/2.)PYTHON_BASICS/PYTHON Basics/m2.py new file mode 100644 index 00000000..2e0e9dc6 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Basics/m2.py @@ -0,0 +1,3 @@ +import m1 + +print("M2 Module %s",(__name__)) \ No newline at end of file diff --git a/2.)PYTHON_BASICS/PYTHON Numpy/.ipynb_checkpoints/NUMPY_1-checkpoint.ipynb b/2.)PYTHON_BASICS/PYTHON Numpy/.ipynb_checkpoints/NUMPY_1-checkpoint.ipynb new file mode 100644 index 00000000..2167c491 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Numpy/.ipynb_checkpoints/NUMPY_1-checkpoint.ipynb @@ -0,0 +1,2402 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Numpy - for mathematical operations" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# pip-Run the pip package manager within the current kernel." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: numpy in c:\\programdata\\anaconda3\\lib\\site-packages (1.18.5)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install numpy" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Package Version\n", + "---------------------------------- -------------------\n", + "- ipy\n", + "-.ipy 1.5.0\n", + "-0ipy 1.5.0\n", + "-cipy 1.5.0\n", + "-ipy 1.5.0\n", + "absl-py 0.10.0\n", + "alabaster 0.7.12\n", + "anaconda-client 1.7.2\n", + "anaconda-navigator 1.9.12\n", + "anaconda-project 0.8.3\n", + "argh 0.26.2\n", + "asn1crypto 1.3.0\n", + "astroid 2.4.2\n", + "astropy 4.0.1.post1\n", + "astunparse 1.6.3\n", + "atomicwrites 1.4.0\n", + "attrs 19.3.0\n", + "autopep8 1.5.3\n", + "Babel 2.8.0\n", + "backcall 0.2.0\n", + "backports.functools-lru-cache 1.6.1\n", + "backports.shutil-get-terminal-size 1.0.0\n", + "backports.tempfile 1.0\n", + "backports.weakref 1.0.post1\n", + "bcrypt 3.1.7\n", + "beautifulsoup4 4.9.1\n", + "bitarray 1.4.0\n", + "bkcharts 0.2\n", + "bleach 3.1.5\n", + "bokeh 2.1.1\n", + "boto 2.49.0\n", + "Bottleneck 1.3.2\n", + "branca 0.4.1\n", + "brotlipy 0.7.0\n", + "cachetools 4.1.1\n", + "certifi 2020.6.20\n", + "cffi 1.14.0\n", + "chardet 3.0.4\n", + "click 7.1.2\n", + "cloudpickle 1.5.0\n", + "clyent 1.2.2\n", + "colorama 0.4.3\n", + "comtypes 1.1.7\n", + "conda 4.8.3\n", + "conda-build 3.18.11\n", + "conda-package-handling 1.7.0\n", + "conda-verify 3.4.2\n", + "contextlib2 0.6.0.post1\n", + "cryptography 2.9.2\n", + "cycler 0.10.0\n", + "Cython 0.29.21\n", + "cytoolz 0.10.1\n", + "dask 2.20.0\n", + "decorator 4.4.2\n", + "defusedxml 0.6.0\n", + "diff-match-patch 20200713\n", + "distributed 2.20.0\n", + "docopt 0.6.2\n", + "docutils 0.16\n", + "entrypoints 0.3\n", + "et-xmlfile 1.0.1\n", + "fastcache 1.1.0\n", + "filelock 3.0.12\n", + "flake8 3.8.3\n", + "Flask 1.1.2\n", + "flatbuffers 1.12\n", + "folium 0.11.0\n", + "fsspec 0.7.4\n", + "future 0.18.2\n", + "gast 0.3.3\n", + "gevent 20.6.2\n", + "glob2 0.7\n", + "gmpy2 2.0.8\n", + "google-auth 1.20.1\n", + "google-auth-oauthlib 0.4.1\n", + "google-pasta 0.2.0\n", + "greenlet 0.4.16\n", + "grpcio 1.31.0\n", + "gTTS 2.1.1\n", + "gTTS-token 1.1.3\n", + "h5py 2.10.0\n", + "HeapDict 1.0.1\n", + "html5lib 1.1\n", + "idna 2.10\n", + "imageio 2.9.0\n", + "imagesize 1.2.0\n", + "importlib-metadata 1.7.0\n", + "intervaltree 3.0.2\n", + "ipykernel 5.3.2\n", + "ipython 7.16.1\n", + "ipython-genutils 0.2.0\n", + "ipywidgets 7.5.1\n", + "isort 4.3.21\n", + "itsdangerous 1.1.0\n", + "jdcal 1.4.1\n", + "jedi 0.17.1\n", + "Jinja2 2.11.2\n", + "joblib 0.16.0\n", + "Js2Py 0.70\n", + "json5 0.9.5\n", + "jsonschema 3.2.0\n", + "jupyter 1.0.0\n", + "jupyter-client 6.1.6\n", + "jupyter-console 6.1.0\n", + "jupyter-core 4.6.3\n", + "jupyterlab 2.1.5\n", + "jupyterlab-server 1.2.0\n", + "Keras 2.4.3\n", + "Keras-Preprocessing 1.1.2\n", + "keyring 21.2.1\n", + "kiwisolver 1.2.0\n", + "lazy-object-proxy 1.4.3\n", + "libarchive-c 2.9\n", + "llvmlite 0.33.0+1.g022ab0f\n", + "locket 0.2.0\n", + "lxml 4.5.2\n", + "Markdown 3.2.2\n", + "MarkupSafe 1.1.1\n", + "matplotlib 3.2.2\n", + "mccabe 0.6.1\n", + "menuinst 1.4.16\n", + "mistune 0.8.4\n", + "mkl-fft 1.1.0\n", + "mkl-random 1.1.1\n", + "mkl-service 2.3.0\n", + "mock 4.0.2\n", + "more-itertools 8.4.0\n", + "mpmath 1.1.0\n", + "msgpack 1.0.0Note: you may need to restart the kernel to use updated packages.\n", + "multipledispatch 0.6.0\n", + "navigator-updater 0.2.1\n", + "nbconvert 5.6.1\n", + "nbformat 5.0.7\n", + "networkx 2.4\n", + "nltk 3.5\n", + "nose 1.3.7\n", + "notebook 6.0.3\n", + "numba 0.50.1\n", + "numexpr 2.7.1\n", + "numpy 1.18.5\n", + "numpydoc 1.1.0\n", + "oauthlib 3.1.0\n", + "olefile 0.46\n", + "opencv-python 3.4.8.29\n", + "openpyxl 3.0.4\n", + "opt-einsum 3.3.0\n", + "packaging 20.4\n", + "\n", + "pandas 1.0.5\n", + "pandocfilters 1.4.2\n", + "paramiko 2.7.1\n", + "parso 0.7.0\n", + "partd 1.1.0\n", + "path 13.1.0\n", + "pathlib2 2.3.5\n", + "pathtools 0.1.2\n", + "patsy 0.5.1\n", + "pep8 1.7.1\n", + "pexpect 4.8.0\n", + "pickleshare 0.7.5\n", + "Pillow 7.2.0\n", + "pip 20.2.3\n", + "pipwin 0.5.0\n", + "pkginfo 1.5.0.1\n", + "pluggy 0.13.1\n", + "ply 3.11\n", + "prometheus-client 0.8.0\n", + "prompt-toolkit 3.0.5\n", + "protobuf 3.13.0\n", + "psutil 5.7.0\n", + "py 1.9.0\n", + "pyasn1 0.4.8\n", + "pyasn1-modules 0.2.8\n", + "PyAudio 0.2.11\n", + "pycodestyle 2.6.0\n", + "pycosat 0.6.3\n", + "pycparser 2.20\n", + "pycurl 7.43.0.5\n", + "pydocstyle 5.0.2\n", + "pyflakes 2.2.0\n", + "pygame 1.9.6\n", + "Pygments 2.6.1\n", + "pyjsparser 2.7.1\n", + "pylint 2.5.3\n", + "PyNaCl 1.4.0\n", + "pyodbc 4.0.0-unsupported\n", + "pyOpenSSL 19.1.0\n", + "pyparsing 2.4.7\n", + "PyPrind 2.11.2\n", + "pyreadline 2.1\n", + "pyrsistent 0.16.0\n", + "pySmartDL 1.3.3\n", + "PySocks 1.7.1\n", + "pytest 5.4.3\n", + "python-dateutil 2.8.1\n", + "python-jsonrpc-server 0.3.4\n", + "python-language-server 0.34.1\n", + "pytz 2020.1\n", + "PyWavelets 1.1.1\n", + "pywin32 227\n", + "pywin32-ctypes 0.2.0\n", + "pywinpty 0.5.7\n", + "PyYAML 5.3.1\n", + "pyzmq 19.0.1\n", + "QDarkStyle 2.8.1\n", + "QtAwesome 0.7.2\n", + "qtconsole 4.7.5\n", + "QtPy 1.9.0\n", + "regex 2020.6.8\n", + "requests 2.24.0\n", + "requests-oauthlib 1.3.0\n", + "rope 0.17.0\n", + "rsa 4.6\n", + "Rtree 0.9.4\n", + "ruamel-yaml 0.15.87\n", + "scikit-image 0.16.2\n", + "scikit-learn 0.23.1\n", + "scipy 1.5.0\n", + "seaborn 0.10.1\n", + "Send2Trash 1.5.0\n", + "setuptools 49.2.0.post20200714\n", + "simplegeneric 0.8.1\n", + "singledispatch 3.4.0.3\n", + "sip 4.19.13\n", + "six 1.15.0\n", + "sklearn 0.0\n", + "snowballstemmer 2.0.0\n", + "sortedcollections 1.2.1\n", + "sortedcontainers 2.2.2\n", + "soupsieve 2.0.1\n", + "SpeechRecognition 3.8.1\n", + "Sphinx 3.1.2\n", + "sphinxcontrib-applehelp 1.0.2\n", + "sphinxcontrib-devhelp 1.0.2\n", + "sphinxcontrib-htmlhelp 1.0.3\n", + "sphinxcontrib-jsmath 1.0.1\n", + "sphinxcontrib-qthelp 1.0.3\n", + "sphinxcontrib-serializinghtml 1.1.4\n", + "sphinxcontrib-websupport 1.2.3\n", + "spyder 4.1.4\n", + "spyder-kernels 1.9.2\n", + "SQLAlchemy 1.3.18\n", + "statsmodels 0.11.1\n", + "sympy 1.6.1\n", + "tables 3.6.1\n", + "tb-nightly 2.4.0a20200823\n", + "tblib 1.6.0\n", + "tensorboard 2.3.0\n", + "tensorboard-plugin-wit 1.7.0\n", + "tensorflow 2.3.0\n", + "tensorflow-estimator 2.3.0\n", + "tensorflow-gpu 2.3.0\n", + "tensorflow-gpu-estimator 2.3.0\n", + "termcolor 1.1.0\n", + "terminado 0.8.3\n", + "testpath 0.4.4\n", + "tf-estimator-nightly 2.4.0.dev2020082301\n", + "tf-nightly 2.4.0.dev20200823\n", + "threadpoolctl 2.1.0\n", + "toml 0.10.1\n", + "toolz 0.10.0\n", + "tornado 6.0.4\n", + "tqdm 4.47.0\n", + "traitlets 4.3.3\n", + "typing-extensions 3.7.4.2\n", + "tzlocal 2.1\n", + "ujson 1.35\n", + "unicodecsv 0.14.1\n", + "urllib3 1.25.9\n", + "watchdog 0.10.3\n", + "wcwidth 0.2.5\n", + "webencodings 0.5.1\n", + "Werkzeug 1.0.1\n", + "wget 3.2\n", + "wheel 0.34.2\n", + "widgetsnbextension 3.5.1\n", + "win-inet-pton 1.1.0\n", + "win-unicode-console 0.5\n", + "wincertstore 0.2\n", + "wrapt 1.11.2\n", + "xlrd 1.2.0\n", + "XlsxWriter 1.2.9\n", + "xlwings 0.19.5\n", + "xlwt 1.3.0\n", + "xmltodict 0.12.0\n", + "yapf 0.30.0\n", + "zict 2.0.0\n", + "zipp 3.1.0\n", + "zope.event 4.4\n", + "zope.interface 4.7.1\n" + ] + } + ], + "source": [ + "pip list #what all libraries you have?" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "l1=[1,2,3,4]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "list" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(l1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### creating arrays \n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "#we always have numpy array in NUMPY\n", + "arr=np.array(l1)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "numpy.ndarray" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(arr) #ndarray ==> n dimensional arrays" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3, 4])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(4,)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.shape #its a property not function\n", + "#it tells about how many elements are their\n", + "#(4,) is linear while (4,1) is a 2D array " + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.ndim # so 1D array" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 1 2 3]\n", + " [ 4 5 6]\n", + " [ 8 9 10]]\n" + ] + } + ], + "source": [ + "arr2=np.array([[1,2.2,3],\n", + " [4,5,6],\n", + " [8,9,\"10\"]],dtype=int)\n", + "# all the val will be converted to float when u change dtype of one!\n", + "print(arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2.ndim #its a 2D array" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "arr2=np.array([[1,2.3,3],\n", + " [4,5,6],\n", + " [7,8,9]],dtype=float) #use shift+tab" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1. , 2.3, 3. ],\n", + " [4. , 5. , 6. ],\n", + " [7. , 8. , 9. ]])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2.ndim" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3, 3)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9.0" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2[2][2]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "#you can see below example of 3D array\n", + "arr3=np.random.randint(1,20,size=(1,3,3)) " + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[ 6, 3, 19],\n", + " [18, 11, 6],\n", + " [19, 9, 13]]])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr3" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "arr3=np.random.randint(1,20,size=(2,3,3))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[12, 19, 8],\n", + " [15, 15, 7],\n", + " [14, 8, 10]],\n", + "\n", + " [[ 2, 15, 15],\n", + " [ 9, 10, 3],\n", + " [10, 18, 10]]])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Datatypes" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dtype('float64')" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "arr2.dtype #data type \n", + "#how many bit it takes to store integer" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "range(0, 10)\n" + ] + } + ], + "source": [ + "l=range(10)\n", + "print(l)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[ i**2 for i in list(l)] #list comprehension" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81], dtype=int32)" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.array(l)**2" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "import timeit\n", + "#we will get less time for numpy array" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.29 µs ± 107 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n" + ] + } + ], + "source": [ + "%timeit [ i**2 for i in list(l)]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.19 µs ± 356 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n" + ] + } + ], + "source": [ + "%timeit np.array(l)**2 #%timeit it only works in jupyter notebook" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3, 4])" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr\n" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([5, 6, 7, 8])" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#all the elements are adde by 4\n", + "arr+4\n", + "#but in list we cant do operation like this " + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 4, 8, 12, 16])" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr*4" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-3, -2, -1, 0])" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr-4" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [], + "source": [ + "arr1=np.array([2,3,4,5])" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2, 3, 4, 5])" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 7, 9, 11, 13])" + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1+arr2 #element wise addition" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [ + "arr2=np.array([[1,2,3],\n", + " [4,5,6],\n", + " [7,8,9]],dtype=float) #use shift+tab" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 3., 4., 5.],\n", + " [ 6., 7., 8.],\n", + " [ 9., 10., 11.]])" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2+2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Random\n", + "(sub package)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "21" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.randint(1,100)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "arr1=np.random.randint(10,100,size=(5,5))\n", + "#size is basically size of array" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "arr2=np.random.randint(10,100,size=(5,5))" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[47, 67, 10, 39, 11],\n", + " [48, 22, 47, 48, 58],\n", + " [14, 31, 28, 34, 93],\n", + " [80, 78, 52, 61, 94],\n", + " [26, 74, 85, 39, 35]])" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[57, 76, 68, 64, 84],\n", + " [26, 56, 72, 66, 94],\n", + " [57, 24, 51, 56, 76],\n", + " [22, 31, 17, 75, 32],\n", + " [98, 33, 20, 33, 18]])" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "52\n", + "52\n" + ] + } + ], + "source": [ + "print(arr1[3,2]) #but we prefer this more\n", + "print(arr1[3][2])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Numpy Random Module\n", + "- rand : Random values in a given shape.\n", + "- randn : Return a sample (or samples) from the “standard normal” distribution.\n", + "- randint : Return random integers from low (inclusive) to high (exclusive).\n", + "- random : Return random floats in the half-open interval [0.0, 1.0)\n", + "- choice : Generates a random sample from a given 1-D array\n", + "- Shuffle : Shuffles the contents of a sequence" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 5 6 7 8 9 10 11 12 13 14]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "a = np.arange(10) + 5\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[10 8 9 7 13 5 11 14 6 12]\n" + ] + } + ], + "source": [ + "np.random.shuffle(a)\n", + "print(a)\n", + "#all the element of a are randomly shuffled #everytime" + ] + }, + { + "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": "markdown", + "metadata": {}, + "source": [ + "# Operation on matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[104, 143, 78, 103, 95],\n", + " [ 74, 78, 119, 114, 152],\n", + " [ 71, 55, 79, 90, 169],\n", + " [102, 109, 69, 136, 126],\n", + " [124, 107, 105, 72, 53]])" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1+arr2" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[104, 143, 78, 103, 95],\n", + " [ 74, 78, 119, 114, 152],\n", + " [ 71, 55, 79, 90, 169],\n", + " [102, 109, 69, 136, 126],\n", + " [124, 107, 105, 72, 53]])" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.add(arr1,arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2679, 5092, 680, 2496, 924],\n", + " [1248, 1232, 3384, 3168, 5452],\n", + " [ 798, 744, 1428, 1904, 7068],\n", + " [1760, 2418, 884, 4575, 3008],\n", + " [2548, 2442, 1700, 1287, 630]])" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#element wise multiplication\n", + "#not matrix multiplication\n", + "arr1*arr2" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2679, 5092, 680, 2496, 924],\n", + " [1248, 1232, 3384, 3168, 5452],\n", + " [ 798, 744, 1428, 1904, 7068],\n", + " [1760, 2418, 884, 4575, 3008],\n", + " [2548, 2442, 1700, 1287, 630]])" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.multiply(arr1,arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.8245614 0.88157895 0.14705882 0.609375 0.13095238]\n", + " [1.84615385 0.39285714 0.65277778 0.72727273 0.61702128]\n", + " [0.24561404 1.29166667 0.54901961 0.60714286 1.22368421]\n", + " [3.63636364 2.51612903 3.05882353 0.81333333 2.9375 ]\n", + " [0.26530612 2.24242424 4.25 1.18181818 1.94444444]]\n", + "-----------------------------------------------------------\n", + "[[0.8245614 0.88157895 0.14705882 0.609375 0.13095238]\n", + " [1.84615385 0.39285714 0.65277778 0.72727273 0.61702128]\n", + " [0.24561404 1.29166667 0.54901961 0.60714286 1.22368421]\n", + " [3.63636364 2.51612903 3.05882353 0.81333333 2.9375 ]\n", + " [0.26530612 2.24242424 4.25 1.18181818 1.94444444]]\n" + ] + } + ], + "source": [ + "print(np.divide(arr1,arr2))\n", + "print(\"-----------------------------------------------------------\")\n", + "print(arr1/arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[6.8556546 , 8.18535277, 3.16227766, 6.244998 , 3.31662479],\n", + " [6.92820323, 4.69041576, 6.8556546 , 6.92820323, 7.61577311],\n", + " [3.74165739, 5.56776436, 5.29150262, 5.83095189, 9.64365076],\n", + " [8.94427191, 8.83176087, 7.21110255, 7.81024968, 9.69535971],\n", + " [5.09901951, 8.60232527, 9.21954446, 6.244998 , 5.91607978]])" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sqrt(arr1)" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2209, 4489, 100, 1521, 121],\n", + " [2304, 484, 2209, 2304, 3364],\n", + " [ 196, 961, 784, 1156, 8649],\n", + " [6400, 6084, 2704, 3721, 8836],\n", + " [ 676, 5476, 7225, 1521, 1225]], dtype=int32)" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1**2" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 627453615, -1631139343, 0, 1448128001, 321008369],\n", + " [ 0, 0, -1605546367, 0, 0],\n", + " [ 0, -2077209343, 0, 0, -232775823],\n", + " [ 0, -2147483648, 0, 56577477, 0],\n", + " [ 0, 0, 1743204721, 857325863, -81531895]],\n", + " dtype=int32)" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1**arr2" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 6927, 9136, 9413, 11278, 12452],\n", + " [12727, 9410, 9221, 12670, 12252],\n", + " [13062, 7595, 7050, 10129, 8980],\n", + " [20106, 16689, 16625, 20857, 21648],\n", + " [12539, 10524, 12794, 15388, 17478]])" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#matrix multiplication / DOT PRODUCT\n", + "\n", + "np.dot(arr1,arr2)\n", + "#is same as\n", + "#arr1.dot(arr2) ==np.dot(arr1,arr2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dot product along axis" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30\n", + "10\n", + "10\n" + ] + }, + { + "data": { + "text/plain": [ + "' axis =1\\n^\\n|\\n|\\n|\\n\\n'" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# multiplication of vectors will give you a scalar\n", + "\n", + "a=np.array([1,2,3,4])\n", + "b=np.array([1,2,3,4])\n", + "print(a.dot(b))\n", + "print(sum(a))\n", + "print(np.sum(a,axis=0)) #sum along column \n", + "#=====> axis=0\n", + "\n", + "\"\"\" axis =1 sum along rows \n", + "^\n", + "|\n", + "|\n", + "|\n", + "\n", + "\"\"\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 6927, 9136, 9413, 11278, 12452],\n", + " [12727, 9410, 9221, 12670, 12252],\n", + " [13062, 7595, 7050, 10129, 8980],\n", + " [20106, 16689, 16625, 20857, 21648],\n", + " [12539, 10524, 12794, 15388, 17478]])" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1.dot(arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1303052305, 1254456601, 1093881801, 1183375433, 1201609076],\n", + " [1726599257, 1660878556, 1444479231, 1566813663, 1587093642],\n", + " [1534599560, 1469415883, 1283667819, 1390951166, 1409385767],\n", + " [1426104935, 1368621384, 1205083436, 1299603134, 1318345833],\n", + " [1345210034, 1308432982, 1130599231, 1229092908, 1240023033]])" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1.dot(arr2).dot(arr1).dot(arr2)\n", + "#you can try this also" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": {}, + "outputs": [], + "source": [ + "#trying doing maatrix mul of three matrix\n", + "#we can first find dot b/w two then find dot b/w next two\n", + "#np.dot(np.dot(arr1,arr2),arr3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Array Slicing" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[36, 19, 77, 52, 73],\n", + " [51, 57, 50, 96, 82],\n", + " [26, 92, 22, 84, 65],\n", + " [62, 92, 18, 31, 35],\n", + " [85, 41, 29, 72, 22]])" + ] + }, + "execution_count": 136, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "18" + ] + }, + "execution_count": 137, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1[3,2]" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "18" + ] + }, + "execution_count": 138, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1[3][2]" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[57, 50, 96, 82],\n", + " [92, 22, 84, 65],\n", + " [92, 18, 31, 35]])" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#arr[rows:cols]\n", + "arr1[1:4, 1:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[19, 77],\n", + " [57, 50],\n", + " [92, 22],\n", + " [92, 18],\n", + " [41, 29]])" + ] + }, + "execution_count": 141, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "arr1[:,1:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [], + "source": [ + "#imaages are just numpy array" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[10, 48, 35, 32],\n", + " [14, 82, 51, 73],\n", + " [86, 95, 13, 17]])" + ] + }, + "execution_count": 125, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#we can also Pass list of indexes\n", + "arr1[[1,3,4],:4]#if we want discontinoius things in ele\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Stacking of arrays" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[69 46 95 80]\n", + "[14 71 34 82]\n" + ] + } + ], + "source": [ + "a=np.random.randint(10,100,size=(4,))\n", + "b=np.random.randint(10,100,size=(4,))\n", + "print(a)\n", + "print(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[69, 14],\n", + " [46, 71],\n", + " [95, 34],\n", + " [80, 82]])" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.stack((a,b),axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[69],\n", + " [46],\n", + " [95],\n", + " [80]])" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.vstack(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[96 62]\n", + " [57 80]]\n", + "another numpy array:\n", + "[[39 76]\n", + " [61 90]]\n" + ] + } + ], + "source": [ + "c=np.random.randint(10,100,size=(2,2))\n", + "d=np.random.randint(10,100,size=(2,2))\n", + "print(c)\n", + "print(\"another numpy array:\")\n", + "print(d)" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[96, 62],\n", + " [57, 80]],\n", + "\n", + " [[39, 76],\n", + " [61, 90]]])" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.stack((c,d),axis=0) #along columns" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[96, 62],\n", + " [39, 76]],\n", + "\n", + " [[57, 80],\n", + " [61, 90]]])" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.stack((c,d),axis=1) #along rows " + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 2 3 4]\n", + "[ 1 4 9 16]\n" + ] + } + ], + "source": [ + "a=np.array([1,2,3,4])\n", + "b=np.array([1,2,3,4])\n", + "\n", + "print(a)\n", + "b=b**2\n", + "print(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1, 2, 3, 4],\n", + " [ 1, 4, 9, 16]])" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#it can only stack along column \n", + "np.stack((a,b),axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Brodcasting" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-15, -38, 27, -44],\n", + " [ 0, 0, 0, 0],\n", + " [-25, 35, -28, -12],\n", + " [ 11, 35, -32, -65],\n", + " [ 34, -16, -21, -24]])" + ] + }, + "execution_count": 143, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#broadcasting\n", + "arr1[:, :4]-arr1[1, :4] \n", + "#so as we know we subtracted a 4,1 array from 5,4\n", + "#so it happens because of 4 is same in b/w " + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(5, 4)\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[36, 19, 77, 52],\n", + " [51, 57, 50, 96],\n", + " [26, 92, 22, 84],\n", + " [62, 92, 18, 31],\n", + " [85, 41, 29, 72]])" + ] + }, + "execution_count": 150, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "print(arr1[:, :4].shape)\n", + "arr1[:, :4]" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(4,)\n" + ] + }, + { + "data": { + "text/plain": [ + "array([51, 57, 50, 96])" + ] + }, + "execution_count": 151, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " \n", + "print(arr1[1, :4].shape)\n", + "arr1[1, :4]" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2, 4, 6],\n", + " [ 5, 7, 9],\n", + " [ 8, 10, 12]])" + ] + }, + "execution_count": 130, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.array([[1,2,3],\n", + " [4,5,6],\n", + " [7,8,9]])+ np.array([1,2,3])" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2, 4, 6],\n", + " [ 5, 7, 9],\n", + " [ 8, 10, 12]])" + ] + }, + "execution_count": 131, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.array([[1,2,3],[4,5,6],[7,8,9]])+ np.array([1,2,3])" + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "operands could not be broadcast together with shapes (3,3) (4,) ", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m6\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m7\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m8\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m9\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m+\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mValueError\u001b[0m: operands could not be broadcast together with shapes (3,3) (4,) " + ] + } + ], + "source": [ + "np.array([[1,2,3],[4,5,6],[7,8,9]])+ np.array([1,2,3,4])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create Zeros , Ones ,Custom array" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0. 0. 0.]\n", + " [0. 0. 0.]\n", + " [0. 0. 0.]]\n" + ] + } + ], + "source": [ + "a=np.zeros((3,3))\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 0., 0., 0., 0.])" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.zeros((5,))" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 1., 1., 1., 1.],\n", + " [1., 1., 1., 1., 1.],\n", + " [1., 1., 1., 1., 1.],\n", + " [1., 1., 1., 1., 1.]])" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.ones((4,5))" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2 2 2 2 2]\n", + " [2 2 2 2 2]\n", + " [2 2 2 2 2]\n", + " [2 2 2 2 2]]\n" + ] + } + ], + "source": [ + "#array of some constant \n", + "c= np.full((4,5),2)\n", + "print(c)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 0., 0., 0., 0.],\n", + " [0., 1., 0., 0., 0.],\n", + " [0., 0., 1., 0., 0.],\n", + " [0., 0., 0., 1., 0.],\n", + " [0., 0., 0., 0., 1.]])" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Identiy Matrix-Size/Square matrix\n", + "np.eye(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.24593359 0.12350462 0.27235353]\n", + " [0.93650972 1. 1. ]]\n" + ] + } + ], + "source": [ + "#how to add specific elements to random matrix\n", + "rm=np.random.random((2,3))\n", + "rm[1,1:3]=1\n", + "print(rm)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0. 0. 0.]\n", + " [0. 0. 0.]\n", + " [0. 0. 0.]]\n", + "changed:\n", + "[[0. 0. 7.]\n", + " [5. 5. 7.]\n", + " [0. 0. 7.]]\n" + ] + } + ], + "source": [ + "#set some rows and columns with any values\n", + "#slicing\n", + "z=np.zeros((3,3))\n", + "print(z)\n", + "print(\"changed:\")\n", + "z[1,:]=5\n", + "z[:,-1]=7\n", + "print(z)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[99, 99, 99, 99],\n", + " [99, 99, 99, 99],\n", + " [99, 99, 99, 99],\n", + " [99, 99, 99, 99],\n", + " [99, 99, 99, 99]])" + ] + }, + "execution_count": 155, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.full((5,4), fill_value=99) #it will fillvalues " + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4, 0],\n", + " [0, 4]])" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.diag((4,4),)\n", + "#read documentation and see examples" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(range(10))" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65,\n", + " 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99])" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.array(range(33,100,2))" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65,\n", + " 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99])" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#in numpy we have func called \n", + "#arange\n", + "np.arange(33,100,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1. , 1.01010101, 1.02020202, 1.03030303, 1.04040404,\n", + " 1.05050505, 1.06060606, 1.07070707, 1.08080808, 1.09090909,\n", + " 1.1010101 , 1.11111111, 1.12121212, 1.13131313, 1.14141414,\n", + " 1.15151515, 1.16161616, 1.17171717, 1.18181818, 1.19191919,\n", + " 1.2020202 , 1.21212121, 1.22222222, 1.23232323, 1.24242424,\n", + " 1.25252525, 1.26262626, 1.27272727, 1.28282828, 1.29292929,\n", + " 1.3030303 , 1.31313131, 1.32323232, 1.33333333, 1.34343434,\n", + " 1.35353535, 1.36363636, 1.37373737, 1.38383838, 1.39393939,\n", + " 1.4040404 , 1.41414141, 1.42424242, 1.43434343, 1.44444444,\n", + " 1.45454545, 1.46464646, 1.47474747, 1.48484848, 1.49494949,\n", + " 1.50505051, 1.51515152, 1.52525253, 1.53535354, 1.54545455,\n", + " 1.55555556, 1.56565657, 1.57575758, 1.58585859, 1.5959596 ,\n", + " 1.60606061, 1.61616162, 1.62626263, 1.63636364, 1.64646465,\n", + " 1.65656566, 1.66666667, 1.67676768, 1.68686869, 1.6969697 ,\n", + " 1.70707071, 1.71717172, 1.72727273, 1.73737374, 1.74747475,\n", + " 1.75757576, 1.76767677, 1.77777778, 1.78787879, 1.7979798 ,\n", + " 1.80808081, 1.81818182, 1.82828283, 1.83838384, 1.84848485,\n", + " 1.85858586, 1.86868687, 1.87878788, 1.88888889, 1.8989899 ,\n", + " 1.90909091, 1.91919192, 1.92929293, 1.93939394, 1.94949495,\n", + " 1.95959596, 1.96969697, 1.97979798, 1.98989899, 2. ])" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Return evenly spaced numbers over a specified interval.\n", + "np.linspace(start=1,stop=2,num=100)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### read Documentation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Numpy/.ipynb_checkpoints/NUMPY_2-checkpoint.ipynb b/2.)PYTHON_BASICS/PYTHON Numpy/.ipynb_checkpoints/NUMPY_2-checkpoint.ipynb new file mode 100644 index 00000000..b5cf99c4 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Numpy/.ipynb_checkpoints/NUMPY_2-checkpoint.ipynb @@ -0,0 +1,1925 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Functions in Numpy" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "arr=np.random.randint(10,100,size=(5,4))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[37, 48, 21, 94],\n", + " [58, 12, 27, 54],\n", + " [64, 64, 77, 55],\n", + " [78, 49, 82, 83],\n", + " [86, 78, 99, 17]])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1183" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "59.15" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.mean(arr)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "323" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr[:,:1])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([323, 251, 306, 303])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr,axis=0)#axis 0 means row\n", + "#colwise sum\n", + "# --->\n", + "# --->\n", + "# --->" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n^ ^ ^\\n| | |\\n| | |\\n| | |\\n\\n'" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr,axis=1)#axis 1 means col\n", + "#row wise sum\n", + "\"\"\"\n", + "^ ^ ^\n", + "| | |\n", + "| | |\n", + "| | |\n", + "\n", + "\"\"\"\n", + "\n", + "#if u take sum across a 4 ele or 1 axis then u get 5 or 0 axis no of ele" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "arr1=np.random.randint(1,100,size=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([12, 15, 38, 50, 15, 87, 38, 86, 13, 23, 64, 42, 45, 48, 81, 31, 95,\n", + " 9, 43, 92, 73, 58, 25, 32, 55, 17, 43, 83, 32, 85])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(30,)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "arr_3d=np.random.randint(1,10,size=(3,2,4))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[7, 9, 2, 3],\n", + " [7, 4, 4, 5]],\n", + "\n", + " [[4, 7, 6, 8],\n", + " [9, 8, 6, 8]],\n", + "\n", + " [[1, 9, 3, 5],\n", + " [2, 4, 8, 9]]])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr_3d" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3, 2, 4)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr_3d.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[12, 25, 11, 16],\n", + " [18, 16, 18, 22]])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr_3d,axis=0)\n", + "#0 here is 3 so ans would come in(2,4)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[14, 13, 6, 8],\n", + " [13, 15, 12, 16],\n", + " [ 3, 13, 11, 14]])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr_3d,axis=1)\n", + "#1 here is 2 so ans would come in(3,4)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[21, 20],\n", + " [25, 31],\n", + " [18, 23]])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr_3d,axis=-1)\n", + "#-1 or 2 here is 4 so ans would come in(3,2)\n", + "#here we can too place 2 instead of -1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Masking" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[False, False, False, True],\n", + " [ True, False, False, True],\n", + " [ True, True, True, True],\n", + " [ True, False, True, True],\n", + " [ True, True, True, False]])" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr>50\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr[0,0]>50" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "new_arr=np.random.randint(1,100,size=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 77, 66, 26, 21, 1, 16, 34, 13, 55, 33, 71, 75, 23, 35, 40, 41,\n", + " 67, 38, 53, 27, 38, 89, 74, 88, 88, 8, 51, 92, 17])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ True, True, True, False, False, False, False, False, False,\n", + " True, False, True, True, False, False, False, False, True,\n", + " False, True, False, False, True, True, True, True, False,\n", + " True, True, False])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Masking\n", + "new_arr>50" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 77, 17])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr[[0,1,-1]]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ True, True, True, False, False, False, False, False, False,\n", + " True, False, True, True, False, False, False, False, True,\n", + " False, True, False, False, True, True, True, True, False,\n", + " True, True, False])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mask=new_arr>50\n", + "mask" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 77, 66, 55, 71, 75, 67, 53, 89, 74, 88, 88, 51, 92])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr[mask]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 77, 66, 55, 71, 75, 67, 53, 89, 74, 88, 88, 51, 92])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr[new_arr>50]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 66, 26, 16, 34, 40, 38, 38, 74, 88, 88, 8, 92])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr[new_arr%2==0]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "arr[:2,:2]=999" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 21, 94],\n", + " [999, 999, 27, 54],\n", + " [ 64, 64, 77, 55],\n", + " [ 78, 49, 82, 83],\n", + " [ 86, 78, 99, 17]])" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.min(arr1)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "95" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(arr1)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "arr1=np.random.randint(1,10,size=(3,3))" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4, 7, 5],\n", + " [2, 4, 5],\n", + " [9, 3, 8]])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# np.max(arr1,axis=0) #check for 2d array\n", + "arr1" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 77, 66, 26, 21, 1, 16, 34, 13, 55, 33, 71, 75, 23, 35, 40, 41,\n", + " 67, 38, 53, 27, 38, 89, 74, 88, 88, 8, 51, 92, 17])" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2, 3, 5])" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#2D and 3D aray not work \n", + "#it will just work on simple vector\n", + "#for more thean one dimension we can find mi/max\n", + "#of one then min/max of them\n", + "np.min(arr1,axis=0)\n", + "#colwise min val\n", + "#first axis" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([7, 5, 9])" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(arr1,axis=1)\n", + "#row wise max val\n", + "#second axis" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr.min()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "92" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "51\n" + ] + }, + { + "data": { + "text/plain": [ + "28" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(new_arr[27]) #u can put val and check\n", + "new_arr.argmax()\n", + "#it will give index of max ele\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n" + ] + }, + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(new_arr[26])\n", + "new_arr.argmin()\n", + "#it will give index of min ele" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Reshape" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 21, 94],\n", + " [999, 999, 27, 54],\n", + " [ 64, 64, 77, 55],\n", + " [ 78, 49, 82, 83],\n", + " [ 86, 78, 99, 17]])" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5, 4)" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#reshape\n", + "arr.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999],\n", + " [ 21, 94],\n", + " [999, 999],\n", + " [ 27, 54],\n", + " [ 64, 64],\n", + " [ 77, 55],\n", + " [ 78, 49],\n", + " [ 82, 83],\n", + " [ 86, 78],\n", + " [ 99, 17]])" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.reshape((10,2))" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 21, 94, 999, 999, 27, 54, 64, 64, 77, 55, 78,\n", + " 49, 82, 83, 86, 78, 99, 17]])" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.reshape((-1,20))" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 21, 94, 999, 999, 27, 54, 64, 64],\n", + " [ 77, 55, 78, 49, 82, 83, 86, 78, 99, 17]])" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.reshape(arr,newshape=(2,10))\n", + "#see in DoC newshape take tuple or int(vector)\n", + "#but array can variate b/w vector only (20,) and (,20)\n", + "# as 5x4= 20 total no. of ele is same throughout" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 21, 94, 999, 999, 27, 54, 64, 64],\n", + " [ 77, 55, 78, 49, 82, 83, 86, 78, 99, 17]])" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.reshape(arr,newshape=(-1,10))\n", + "#so -1 here automatically intialize itself it can be any side" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [], + "source": [ + "a=np.arange(1,10)" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [], + "source": [ + "b=a" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [], + "source": [ + "a[:5]=999" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([999, 999, 999, 999, 999, 6, 7, 8, 9])" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([999, 999, 999, 999, 999, 6, 7, 8, 9])" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b#this happens dur to referncing" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [], + "source": [ + "b=a.copy() # now changes arenot reflected" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vectorization" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "a=np.array([2,3])\n", + "b=np.array([5,4])" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 120, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": {}, + "outputs": [], + "source": [ + "def distance(a,b):\n", + " dx=b[0]-a[0]\n", + " dy=b[1]-a[1]\n", + " \n", + " return np.sqrt(dx**2+dy**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1622776601683795" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "distance(a,b)" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.7782794100389228" + ] + }, + "execution_count": 123, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sqrt(10**0.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1622776601683795" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum((b-a)**2)**0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[39, 25, 59, 79, 71],\n", + " [36, 12, 85, 31, 14],\n", + " [42, 18, 72, 80, 28],\n", + " [54, 44, 30, 30, 74]])" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#ranspose of array\n", + "np.transpose(arr)" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 29, 22, 72],\n", + " [999, 999, 21, 85, 39],\n", + " [ 46, 91, 96, 32, 16],\n", + " [ 38, 40, 30, 53, 47]])" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#or \n", + "arr.T" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#np.linalg.inv(arr)\n", + "#to invrese" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['ALLOW_THREADS',\n", + " 'AxisError',\n", + " 'BUFSIZE',\n", + " 'CLIP',\n", + " 'ComplexWarning',\n", + " 'DataSource',\n", + " 'ERR_CALL',\n", + " 'ERR_DEFAULT',\n", + " 'ERR_IGNORE',\n", + " 'ERR_LOG',\n", + " 'ERR_PRINT',\n", + " 'ERR_RAISE',\n", + " 'ERR_WARN',\n", + " 'FLOATING_POINT_SUPPORT',\n", + " 'FPE_DIVIDEBYZERO',\n", + " 'FPE_INVALID',\n", + " 'FPE_OVERFLOW',\n", + " 'FPE_UNDERFLOW',\n", + " 'False_',\n", + " 'Inf',\n", + " 'Infinity',\n", + " 'MAXDIMS',\n", + " 'MAY_SHARE_BOUNDS',\n", + " 'MAY_SHARE_EXACT',\n", + " 'MachAr',\n", + " 'ModuleDeprecationWarning',\n", + " 'NAN',\n", + " 'NINF',\n", + " 'NZERO',\n", + " 'NaN',\n", + " 'PINF',\n", + " 'PZERO',\n", + " 'RAISE',\n", + " 'RankWarning',\n", + " 'SHIFT_DIVIDEBYZERO',\n", + " 'SHIFT_INVALID',\n", + " 'SHIFT_OVERFLOW',\n", + " 'SHIFT_UNDERFLOW',\n", + " 'ScalarType',\n", + " 'Tester',\n", + " 'TooHardError',\n", + " 'True_',\n", + " 'UFUNC_BUFSIZE_DEFAULT',\n", + " 'UFUNC_PYVALS_NAME',\n", + " 'VisibleDeprecationWarning',\n", + " 'WRAP',\n", + " '_NoValue',\n", + " '_UFUNC_API',\n", + " '__NUMPY_SETUP__',\n", + " '__all__',\n", + " '__builtins__',\n", + " '__cached__',\n", + " '__config__',\n", + " '__dir__',\n", + " '__doc__',\n", + " '__file__',\n", + " '__getattr__',\n", + " '__git_revision__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__path__',\n", + " '__spec__',\n", + " '__version__',\n", + " '_add_newdoc_ufunc',\n", + " '_distributor_init',\n", + " '_globals',\n", + " '_mat',\n", + " '_pytesttester',\n", + " 'abs',\n", + " 'absolute',\n", + " 'absolute_import',\n", + " 'add',\n", + " 'add_docstring',\n", + " 'add_newdoc',\n", + " 'add_newdoc_ufunc',\n", + " 'alen',\n", + " 'all',\n", + " 'allclose',\n", + " 'alltrue',\n", + " 'amax',\n", + " 'amin',\n", + " 'angle',\n", + " 'any',\n", + " 'append',\n", + " 'apply_along_axis',\n", + " 'apply_over_axes',\n", + " 'arange',\n", + " 'arccos',\n", + " 'arccosh',\n", + " 'arcsin',\n", + " 'arcsinh',\n", + " 'arctan',\n", + " 'arctan2',\n", + " 'arctanh',\n", + " 'argmax',\n", + " 'argmin',\n", + " 'argpartition',\n", + " 'argsort',\n", + " 'argwhere',\n", + " 'around',\n", + " 'array',\n", + " 'array2string',\n", + " 'array_equal',\n", + " 'array_equiv',\n", + " 'array_repr',\n", + " 'array_split',\n", + " 'array_str',\n", + " 'asanyarray',\n", + " 'asarray',\n", + " 'asarray_chkfinite',\n", + " 'ascontiguousarray',\n", + " 'asfarray',\n", + " 'asfortranarray',\n", + " 'asmatrix',\n", + " 'asscalar',\n", + " 'atleast_1d',\n", + " 'atleast_2d',\n", + " 'atleast_3d',\n", + " 'average',\n", + " 'bartlett',\n", + " 'base_repr',\n", + " 'binary_repr',\n", + " 'bincount',\n", + " 'bitwise_and',\n", + " 'bitwise_not',\n", + " 'bitwise_or',\n", + " 'bitwise_xor',\n", + " 'blackman',\n", + " 'block',\n", + " 'bmat',\n", + " 'bool',\n", + " 'bool8',\n", + " 'bool_',\n", + " 'broadcast',\n", + " 'broadcast_arrays',\n", + " 'broadcast_to',\n", + " 'busday_count',\n", + " 'busday_offset',\n", + " 'busdaycalendar',\n", + " 'byte',\n", + " 'byte_bounds',\n", + " 'bytes0',\n", + " 'bytes_',\n", + " 'c_',\n", + " 'can_cast',\n", + " 'cast',\n", + " 'cbrt',\n", + " 'cdouble',\n", + " 'ceil',\n", + " 'cfloat',\n", + " 'char',\n", + " 'character',\n", + " 'chararray',\n", + " 'choose',\n", + " 'clip',\n", + " 'clongdouble',\n", + " 'clongfloat',\n", + " 'column_stack',\n", + " 'common_type',\n", + " 'compare_chararrays',\n", + " 'compat',\n", + " 'complex',\n", + " 'complex128',\n", + " 'complex64',\n", + " 'complex_',\n", + " 'complexfloating',\n", + " 'compress',\n", + " 'concatenate',\n", + " 'conj',\n", + " 'conjugate',\n", + " 'convolve',\n", + " 'copy',\n", + " 'copysign',\n", + " 'copyto',\n", + " 'core',\n", + " 'corrcoef',\n", + " 'correlate',\n", + " 'cos',\n", + " 'cosh',\n", + " 'count_nonzero',\n", + " 'cov',\n", + " 'cross',\n", + " 'csingle',\n", + " 'ctypeslib',\n", + " 'cumprod',\n", + " 'cumproduct',\n", + " 'cumsum',\n", + " 'datetime64',\n", + " 'datetime_as_string',\n", + " 'datetime_data',\n", + " 'deg2rad',\n", + " 'degrees',\n", + " 'delete',\n", + " 'deprecate',\n", + " 'deprecate_with_doc',\n", + " 'diag',\n", + " 'diag_indices',\n", + " 'diag_indices_from',\n", + " 'diagflat',\n", + " 'diagonal',\n", + " 'diff',\n", + " 'digitize',\n", + " 'disp',\n", + " 'divide',\n", + " 'division',\n", + " 'divmod',\n", + " 'dot',\n", + " 'double',\n", + " 'dsplit',\n", + " 'dstack',\n", + " 'dtype',\n", + " 'e',\n", + " 'ediff1d',\n", + " 'einsum',\n", + " 'einsum_path',\n", + " 'emath',\n", + " 'empty',\n", + " 'empty_like',\n", + " 'equal',\n", + " 'errstate',\n", + " 'euler_gamma',\n", + " 'exp',\n", + " 'exp2',\n", + " 'expand_dims',\n", + " 'expm1',\n", + " 'extract',\n", + " 'eye',\n", + " 'fabs',\n", + " 'fastCopyAndTranspose',\n", + " 'fft',\n", + " 'fill_diagonal',\n", + " 'find_common_type',\n", + " 'finfo',\n", + " 'fix',\n", + " 'flatiter',\n", + " 'flatnonzero',\n", + " 'flexible',\n", + " 'flip',\n", + " 'fliplr',\n", + " 'flipud',\n", + " 'float',\n", + " 'float16',\n", + " 'float32',\n", + " 'float64',\n", + " 'float_',\n", + " 'float_power',\n", + " 'floating',\n", + " 'floor',\n", + " 'floor_divide',\n", + " 'fmax',\n", + " 'fmin',\n", + " 'fmod',\n", + " 'format_float_positional',\n", + " 'format_float_scientific',\n", + " 'format_parser',\n", + " 'frexp',\n", + " 'frombuffer',\n", + " 'fromfile',\n", + " 'fromfunction',\n", + " 'fromiter',\n", + " 'frompyfunc',\n", + " 'fromregex',\n", + " 'fromstring',\n", + " 'full',\n", + " 'full_like',\n", + " 'fv',\n", + " 'gcd',\n", + " 'generic',\n", + " 'genfromtxt',\n", + " 'geomspace',\n", + " 'get_array_wrap',\n", + " 'get_include',\n", + " 'get_printoptions',\n", + " 'getbufsize',\n", + " 'geterr',\n", + " 'geterrcall',\n", + " 'geterrobj',\n", + " 'gradient',\n", + " 'greater',\n", + " 'greater_equal',\n", + " 'half',\n", + " 'hamming',\n", + " 'hanning',\n", + " 'heaviside',\n", + " 'histogram',\n", + " 'histogram2d',\n", + " 'histogram_bin_edges',\n", + " 'histogramdd',\n", + " 'hsplit',\n", + " 'hstack',\n", + " 'hypot',\n", + " 'i0',\n", + " 'identity',\n", + " 'iinfo',\n", + " 'imag',\n", + " 'in1d',\n", + " 'index_exp',\n", + " 'indices',\n", + " 'inexact',\n", + " 'inf',\n", + " 'info',\n", + " 'infty',\n", + " 'inner',\n", + " 'insert',\n", + " 'int',\n", + " 'int0',\n", + " 'int16',\n", + " 'int32',\n", + " 'int64',\n", + " 'int8',\n", + " 'int_',\n", + " 'int_asbuffer',\n", + " 'intc',\n", + " 'integer',\n", + " 'interp',\n", + " 'intersect1d',\n", + " 'intp',\n", + " 'invert',\n", + " 'ipmt',\n", + " 'irr',\n", + " 'is_busday',\n", + " 'isclose',\n", + " 'iscomplex',\n", + " 'iscomplexobj',\n", + " 'isfinite',\n", + " 'isfortran',\n", + " 'isin',\n", + " 'isinf',\n", + " 'isnan',\n", + " 'isnat',\n", + " 'isneginf',\n", + " 'isposinf',\n", + " 'isreal',\n", + " 'isrealobj',\n", + " 'isscalar',\n", + " 'issctype',\n", + " 'issubclass_',\n", + " 'issubdtype',\n", + " 'issubsctype',\n", + " 'iterable',\n", + " 'ix_',\n", + " 'kaiser',\n", + " 'kron',\n", + " 'lcm',\n", + " 'ldexp',\n", + " 'left_shift',\n", + " 'less',\n", + " 'less_equal',\n", + " 'lexsort',\n", + " 'lib',\n", + " 'linalg',\n", + " 'linspace',\n", + " 'little_endian',\n", + " 'load',\n", + " 'loads',\n", + " 'loadtxt',\n", + " 'log',\n", + " 'log10',\n", + " 'log1p',\n", + " 'log2',\n", + " 'logaddexp',\n", + " 'logaddexp2',\n", + " 'logical_and',\n", + " 'logical_not',\n", + " 'logical_or',\n", + " 'logical_xor',\n", + " 'logspace',\n", + " 'long',\n", + " 'longcomplex',\n", + " 'longdouble',\n", + " 'longfloat',\n", + " 'longlong',\n", + " 'lookfor',\n", + " 'ma',\n", + " 'mafromtxt',\n", + " 'mask_indices',\n", + " 'mat',\n", + " 'math',\n", + " 'matmul',\n", + " 'matrix',\n", + " 'matrixlib',\n", + " 'max',\n", + " 'maximum',\n", + " 'maximum_sctype',\n", + " 'may_share_memory',\n", + " 'mean',\n", + " 'median',\n", + " 'memmap',\n", + " 'meshgrid',\n", + " 'mgrid',\n", + " 'min',\n", + " 'min_scalar_type',\n", + " 'minimum',\n", + " 'mintypecode',\n", + " 'mirr',\n", + " 'mod',\n", + " 'modf',\n", + " 'moveaxis',\n", + " 'msort',\n", + " 'multiply',\n", + " 'nan',\n", + " 'nan_to_num',\n", + " 'nanargmax',\n", + " 'nanargmin',\n", + " 'nancumprod',\n", + " 'nancumsum',\n", + " 'nanmax',\n", + " 'nanmean',\n", + " 'nanmedian',\n", + " 'nanmin',\n", + " 'nanpercentile',\n", + " 'nanprod',\n", + " 'nanquantile',\n", + " 'nanstd',\n", + " 'nansum',\n", + " 'nanvar',\n", + " 'nbytes',\n", + " 'ndarray',\n", + " 'ndenumerate',\n", + " 'ndfromtxt',\n", + " 'ndim',\n", + " 'ndindex',\n", + " 'nditer',\n", + " 'negative',\n", + " 'nested_iters',\n", + " 'newaxis',\n", + " 'nextafter',\n", + " 'nonzero',\n", + " 'not_equal',\n", + " 'nper',\n", + " 'npv',\n", + " 'numarray',\n", + " 'number',\n", + " 'obj2sctype',\n", + " 'object',\n", + " 'object0',\n", + " 'object_',\n", + " 'ogrid',\n", + " 'oldnumeric',\n", + " 'ones',\n", + " 'ones_like',\n", + " 'outer',\n", + " 'packbits',\n", + " 'pad',\n", + " 'partition',\n", + " 'percentile',\n", + " 'pi',\n", + " 'piecewise',\n", + " 'place',\n", + " 'pmt',\n", + " 'poly',\n", + " 'poly1d',\n", + " 'polyadd',\n", + " 'polyder',\n", + " 'polydiv',\n", + " 'polyfit',\n", + " 'polyint',\n", + " 'polymul',\n", + " 'polynomial',\n", + " 'polysub',\n", + " 'polyval',\n", + " 'positive',\n", + " 'power',\n", + " 'ppmt',\n", + " 'print_function',\n", + " 'printoptions',\n", + " 'prod',\n", + " 'product',\n", + " 'promote_types',\n", + " 'ptp',\n", + " 'put',\n", + " 'put_along_axis',\n", + " 'putmask',\n", + " 'pv',\n", + " 'quantile',\n", + " 'r_',\n", + " 'rad2deg',\n", + " 'radians',\n", + " 'random',\n", + " 'rate',\n", + " 'ravel',\n", + " 'ravel_multi_index',\n", + " 'real',\n", + " 'real_if_close',\n", + " 'rec',\n", + " 'recarray',\n", + " 'recfromcsv',\n", + " 'recfromtxt',\n", + " 'reciprocal',\n", + " 'record',\n", + " 'remainder',\n", + " 'repeat',\n", + " 'require',\n", + " 'reshape',\n", + " 'resize',\n", + " 'result_type',\n", + " 'right_shift',\n", + " 'rint',\n", + " 'roll',\n", + " 'rollaxis',\n", + " 'roots',\n", + " 'rot90',\n", + " 'round',\n", + " 'round_',\n", + " 'row_stack',\n", + " 's_',\n", + " 'safe_eval',\n", + " 'save',\n", + " 'savetxt',\n", + " 'savez',\n", + " 'savez_compressed',\n", + " 'sctype2char',\n", + " 'sctypeDict',\n", + " 'sctypeNA',\n", + " 'sctypes',\n", + " 'searchsorted',\n", + " 'select',\n", + " 'set_numeric_ops',\n", + " 'set_printoptions',\n", + " 'set_string_function',\n", + " 'setbufsize',\n", + " 'setdiff1d',\n", + " 'seterr',\n", + " 'seterrcall',\n", + " 'seterrobj',\n", + " 'setxor1d',\n", + " 'shape',\n", + " 'shares_memory',\n", + " 'short',\n", + " 'show_config',\n", + " 'sign',\n", + " 'signbit',\n", + " 'signedinteger',\n", + " 'sin',\n", + " 'sinc',\n", + " 'single',\n", + " 'singlecomplex',\n", + " 'sinh',\n", + " 'size',\n", + " 'sometrue',\n", + " 'sort',\n", + " 'sort_complex',\n", + " 'source',\n", + " 'spacing',\n", + " 'split',\n", + " 'sqrt',\n", + " 'square',\n", + " 'squeeze',\n", + " 'stack',\n", + " 'std',\n", + " 'str',\n", + " 'str0',\n", + " 'str_',\n", + " 'string_',\n", + " 'subtract',\n", + " 'sum',\n", + " 'swapaxes',\n", + " 'sys',\n", + " 'take',\n", + " 'take_along_axis',\n", + " 'tan',\n", + " 'tanh',\n", + " 'tensordot',\n", + " 'test',\n", + " 'testing',\n", + " 'tile',\n", + " 'timedelta64',\n", + " 'trace',\n", + " 'tracemalloc_domain',\n", + " 'transpose',\n", + " 'trapz',\n", + " 'tri',\n", + " 'tril',\n", + " 'tril_indices',\n", + " 'tril_indices_from',\n", + " 'trim_zeros',\n", + " 'triu',\n", + " 'triu_indices',\n", + " 'triu_indices_from',\n", + " 'true_divide',\n", + " 'trunc',\n", + " 'typeDict',\n", + " 'typeNA',\n", + " 'typecodes',\n", + " 'typename',\n", + " 'ubyte',\n", + " 'ufunc',\n", + " 'uint',\n", + " 'uint0',\n", + " 'uint16',\n", + " 'uint32',\n", + " 'uint64',\n", + " 'uint8',\n", + " 'uintc',\n", + " 'uintp',\n", + " 'ulonglong',\n", + " 'unicode',\n", + " 'unicode_',\n", + " 'union1d',\n", + " 'unique',\n", + " 'unpackbits',\n", + " 'unravel_index',\n", + " 'unsignedinteger',\n", + " 'unwrap',\n", + " 'ushort',\n", + " 'vander',\n", + " 'var',\n", + " 'vdot',\n", + " 'vectorize',\n", + " 'version',\n", + " 'void',\n", + " 'void0',\n", + " 'vsplit',\n", + " 'vstack',\n", + " 'warnings',\n", + " 'where',\n", + " 'who',\n", + " 'zeros',\n", + " 'zeros_like']" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(np) #np. +shift+tab" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8939966636005579" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sin(90)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Numpy/NUMPY_1.ipynb b/2.)PYTHON_BASICS/PYTHON Numpy/NUMPY_1.ipynb new file mode 100644 index 00000000..faf81b6b --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Numpy/NUMPY_1.ipynb @@ -0,0 +1,2436 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Numpy - for mathematical operations" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# pip-Run the pip package manager within the current kernel." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: numpy in c:\\programdata\\anaconda3\\lib\\site-packages (1.18.5)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install numpy" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Package Version\n", + "---------------------------------- -------------------\n", + "- ipy\n", + "-.ipy 1.5.0\n", + "-0ipy 1.5.0\n", + "-cipy 1.5.0\n", + "-ipy 1.5.0\n", + "absl-py 0.10.0\n", + "alabaster 0.7.12\n", + "anaconda-client 1.7.2\n", + "anaconda-navigator 1.9.12\n", + "anaconda-project 0.8.3\n", + "argh 0.26.2\n", + "asn1crypto 1.3.0\n", + "astroid 2.4.2\n", + "astropy 4.0.1.post1\n", + "astunparse 1.6.3\n", + "atomicwrites 1.4.0\n", + "attrs 19.3.0\n", + "autopep8 1.5.3\n", + "Babel 2.8.0\n", + "backcall 0.2.0\n", + "backports.functools-lru-cache 1.6.1\n", + "backports.shutil-get-terminal-size 1.0.0\n", + "backports.tempfile 1.0\n", + "backports.weakref 1.0.post1\n", + "bcrypt 3.1.7\n", + "beautifulsoup4 4.9.1\n", + "bitarray 1.4.0\n", + "bkcharts 0.2\n", + "bleach 3.1.5\n", + "bokeh 2.1.1\n", + "boto 2.49.0\n", + "Bottleneck 1.3.2\n", + "branca 0.4.1\n", + "brotlipy 0.7.0\n", + "cachetools 4.1.1\n", + "certifi 2020.6.20\n", + "cffi 1.14.0\n", + "chardet 3.0.4\n", + "click 7.1.2\n", + "cloudpickle 1.5.0\n", + "clyent 1.2.2\n", + "colorama 0.4.3\n", + "comtypes 1.1.7\n", + "conda 4.8.3\n", + "conda-build 3.18.11\n", + "conda-package-handling 1.7.0\n", + "conda-verify 3.4.2\n", + "contextlib2 0.6.0.post1\n", + "cryptography 2.9.2\n", + "cycler 0.10.0\n", + "Cython 0.29.21\n", + "cytoolz 0.10.1\n", + "dask 2.20.0\n", + "decorator 4.4.2\n", + "defusedxml 0.6.0\n", + "diff-match-patch 20200713\n", + "distributed 2.20.0\n", + "docopt 0.6.2\n", + "docutils 0.16\n", + "entrypoints 0.3\n", + "et-xmlfile 1.0.1\n", + "fastcache 1.1.0\n", + "filelock 3.0.12\n", + "flake8 3.8.3\n", + "Flask 1.1.2\n", + "flatbuffers 1.12\n", + "folium 0.11.0\n", + "fsspec 0.7.4\n", + "future 0.18.2\n", + "gast 0.3.3\n", + "gevent 20.6.2\n", + "glob2 0.7\n", + "gmpy2 2.0.8\n", + "google-auth 1.20.1\n", + "google-auth-oauthlib 0.4.1\n", + "google-pasta 0.2.0\n", + "greenlet 0.4.16\n", + "grpcio 1.31.0\n", + "gTTS 2.1.1\n", + "gTTS-token 1.1.3\n", + "h5py 2.10.0\n", + "HeapDict 1.0.1\n", + "html5lib 1.1\n", + "idna 2.10\n", + "imageio 2.9.0\n", + "imagesize 1.2.0\n", + "importlib-metadata 1.7.0\n", + "intervaltree 3.0.2\n", + "ipykernel 5.3.2\n", + "ipython 7.16.1\n", + "ipython-genutils 0.2.0\n", + "ipywidgets 7.5.1\n", + "isort 4.3.21\n", + "itsdangerous 1.1.0\n", + "jdcal 1.4.1\n", + "jedi 0.17.1\n", + "Jinja2 2.11.2\n", + "joblib 0.16.0\n", + "Js2Py 0.70\n", + "json5 0.9.5\n", + "jsonschema 3.2.0\n", + "jupyter 1.0.0\n", + "jupyter-client 6.1.6\n", + "jupyter-console 6.1.0\n", + "jupyter-core 4.6.3\n", + "jupyterlab 2.1.5\n", + "jupyterlab-server 1.2.0\n", + "Keras 2.4.3\n", + "Keras-Preprocessing 1.1.2\n", + "keyring 21.2.1\n", + "kiwisolver 1.2.0\n", + "lazy-object-proxy 1.4.3\n", + "libarchive-c 2.9\n", + "llvmlite 0.33.0+1.g022ab0f\n", + "locket 0.2.0\n", + "lxml 4.5.2\n", + "Markdown 3.2.2\n", + "MarkupSafe 1.1.1\n", + "matplotlib 3.2.2\n", + "mccabe 0.6.1\n", + "menuinst 1.4.16\n", + "mistune 0.8.4\n", + "mkl-fft 1.1.0\n", + "mkl-random 1.1.1\n", + "mkl-service 2.3.0\n", + "mock 4.0.2\n", + "more-itertools 8.4.0\n", + "mpmath 1.1.0\n", + "msgpack 1.0.0Note: you may need to restart the kernel to use updated packages.\n", + "multipledispatch 0.6.0\n", + "navigator-updater 0.2.1\n", + "nbconvert 5.6.1\n", + "nbformat 5.0.7\n", + "networkx 2.4\n", + "nltk 3.5\n", + "nose 1.3.7\n", + "notebook 6.0.3\n", + "numba 0.50.1\n", + "numexpr 2.7.1\n", + "numpy 1.18.5\n", + "numpydoc 1.1.0\n", + "oauthlib 3.1.0\n", + "olefile 0.46\n", + "opencv-python 3.4.8.29\n", + "openpyxl 3.0.4\n", + "opt-einsum 3.3.0\n", + "packaging 20.4\n", + "\n", + "pandas 1.0.5\n", + "pandocfilters 1.4.2\n", + "paramiko 2.7.1\n", + "parso 0.7.0\n", + "partd 1.1.0\n", + "path 13.1.0\n", + "pathlib2 2.3.5\n", + "pathtools 0.1.2\n", + "patsy 0.5.1\n", + "pep8 1.7.1\n", + "pexpect 4.8.0\n", + "pickleshare 0.7.5\n", + "Pillow 7.2.0\n", + "pip 20.2.3\n", + "pipwin 0.5.0\n", + "pkginfo 1.5.0.1\n", + "pluggy 0.13.1\n", + "ply 3.11\n", + "prometheus-client 0.8.0\n", + "prompt-toolkit 3.0.5\n", + "protobuf 3.13.0\n", + "psutil 5.7.0\n", + "py 1.9.0\n", + "pyasn1 0.4.8\n", + "pyasn1-modules 0.2.8\n", + "PyAudio 0.2.11\n", + "pycodestyle 2.6.0\n", + "pycosat 0.6.3\n", + "pycparser 2.20\n", + "pycurl 7.43.0.5\n", + "pydocstyle 5.0.2\n", + "pyflakes 2.2.0\n", + "pygame 1.9.6\n", + "Pygments 2.6.1\n", + "pyjsparser 2.7.1\n", + "pylint 2.5.3\n", + "PyNaCl 1.4.0\n", + "pyodbc 4.0.0-unsupported\n", + "pyOpenSSL 19.1.0\n", + "pyparsing 2.4.7\n", + "PyPrind 2.11.2\n", + "pyreadline 2.1\n", + "pyrsistent 0.16.0\n", + "pySmartDL 1.3.3\n", + "PySocks 1.7.1\n", + "pytest 5.4.3\n", + "python-dateutil 2.8.1\n", + "python-jsonrpc-server 0.3.4\n", + "python-language-server 0.34.1\n", + "pytz 2020.1\n", + "PyWavelets 1.1.1\n", + "pywin32 227\n", + "pywin32-ctypes 0.2.0\n", + "pywinpty 0.5.7\n", + "PyYAML 5.3.1\n", + "pyzmq 19.0.1\n", + "QDarkStyle 2.8.1\n", + "QtAwesome 0.7.2\n", + "qtconsole 4.7.5\n", + "QtPy 1.9.0\n", + "regex 2020.6.8\n", + "requests 2.24.0\n", + "requests-oauthlib 1.3.0\n", + "rope 0.17.0\n", + "rsa 4.6\n", + "Rtree 0.9.4\n", + "ruamel-yaml 0.15.87\n", + "scikit-image 0.16.2\n", + "scikit-learn 0.23.1\n", + "scipy 1.5.0\n", + "seaborn 0.10.1\n", + "Send2Trash 1.5.0\n", + "setuptools 49.2.0.post20200714\n", + "simplegeneric 0.8.1\n", + "singledispatch 3.4.0.3\n", + "sip 4.19.13\n", + "six 1.15.0\n", + "sklearn 0.0\n", + "snowballstemmer 2.0.0\n", + "sortedcollections 1.2.1\n", + "sortedcontainers 2.2.2\n", + "soupsieve 2.0.1\n", + "SpeechRecognition 3.8.1\n", + "Sphinx 3.1.2\n", + "sphinxcontrib-applehelp 1.0.2\n", + "sphinxcontrib-devhelp 1.0.2\n", + "sphinxcontrib-htmlhelp 1.0.3\n", + "sphinxcontrib-jsmath 1.0.1\n", + "sphinxcontrib-qthelp 1.0.3\n", + "sphinxcontrib-serializinghtml 1.1.4\n", + "sphinxcontrib-websupport 1.2.3\n", + "spyder 4.1.4\n", + "spyder-kernels 1.9.2\n", + "SQLAlchemy 1.3.18\n", + "statsmodels 0.11.1\n", + "sympy 1.6.1\n", + "tables 3.6.1\n", + "tb-nightly 2.4.0a20200823\n", + "tblib 1.6.0\n", + "tensorboard 2.3.0\n", + "tensorboard-plugin-wit 1.7.0\n", + "tensorflow 2.3.0\n", + "tensorflow-estimator 2.3.0\n", + "tensorflow-gpu 2.3.0\n", + "tensorflow-gpu-estimator 2.3.0\n", + "termcolor 1.1.0\n", + "terminado 0.8.3\n", + "testpath 0.4.4\n", + "tf-estimator-nightly 2.4.0.dev2020082301\n", + "tf-nightly 2.4.0.dev20200823\n", + "threadpoolctl 2.1.0\n", + "toml 0.10.1\n", + "toolz 0.10.0\n", + "tornado 6.0.4\n", + "tqdm 4.47.0\n", + "traitlets 4.3.3\n", + "typing-extensions 3.7.4.2\n", + "tzlocal 2.1\n", + "ujson 1.35\n", + "unicodecsv 0.14.1\n", + "urllib3 1.25.9\n", + "watchdog 0.10.3\n", + "wcwidth 0.2.5\n", + "webencodings 0.5.1\n", + "Werkzeug 1.0.1\n", + "wget 3.2\n", + "wheel 0.34.2\n", + "widgetsnbextension 3.5.1\n", + "win-inet-pton 1.1.0\n", + "win-unicode-console 0.5\n", + "wincertstore 0.2\n", + "wrapt 1.11.2\n", + "xlrd 1.2.0\n", + "XlsxWriter 1.2.9\n", + "xlwings 0.19.5\n", + "xlwt 1.3.0\n", + "xmltodict 0.12.0\n", + "yapf 0.30.0\n", + "zict 2.0.0\n", + "zipp 3.1.0\n", + "zope.event 4.4\n", + "zope.interface 4.7.1\n" + ] + } + ], + "source": [ + "pip list #what all libraries you have?" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "l1=[1,2,3,4]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "list" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(l1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### creating arrays \n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "#we always have numpy array in NUMPY\n", + "arr=np.array(l1)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "numpy.ndarray" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(arr) #ndarray ==> n dimensional arrays" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3, 4])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(4,)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.shape #its a property not function\n", + "#it tells about how many elements are their\n", + "#(4,) is linear while (4,1) is a 2D array " + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.ndim # so 1D array" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 1 2 3]\n", + " [ 4 5 6]\n", + " [ 8 9 10]]\n" + ] + } + ], + "source": [ + "arr2=np.array([[1,2.2,3],\n", + " [4,5,6],\n", + " [8,9,\"10\"]],dtype=int)\n", + "# all the val will be converted to float when u change dtype of one!\n", + "print(arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2.ndim #its a 2D array" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "arr2=np.array([[1,2.3,3],\n", + " [4,5,6],\n", + " [7,8,9]],dtype=float) #use shift+tab" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1. , 2.3, 3. ],\n", + " [4. , 5. , 6. ],\n", + " [7. , 8. , 9. ]])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2.ndim" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3, 3)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9.0" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2[2][2]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "#you can see below example of 3D array\n", + "arr3=np.random.randint(1,20,size=(1,3,3)) " + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[ 6, 3, 19],\n", + " [18, 11, 6],\n", + " [19, 9, 13]]])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr3" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "arr3=np.random.randint(1,20,size=(2,3,3))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[12, 19, 8],\n", + " [15, 15, 7],\n", + " [14, 8, 10]],\n", + "\n", + " [[ 2, 15, 15],\n", + " [ 9, 10, 3],\n", + " [10, 18, 10]]])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Datatypes" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dtype('float64')" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "arr2.dtype #data type \n", + "#how many bit it takes to store integer" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "range(0, 10)\n" + ] + } + ], + "source": [ + "l=range(10)\n", + "print(l)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[ i**2 for i in list(l)] #list comprehension" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81], dtype=int32)" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.array(l)**2" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "import timeit\n", + "#we will get less time for numpy array" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.29 µs ± 107 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n" + ] + } + ], + "source": [ + "%timeit [ i**2 for i in list(l)]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.19 µs ± 356 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n" + ] + } + ], + "source": [ + "%timeit np.array(l)**2 #%timeit it only works in jupyter notebook" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3, 4])" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr\n" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([5, 6, 7, 8])" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#all the elements are adde by 4\n", + "arr+4\n", + "#but in list we cant do operation like this " + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 4, 8, 12, 16])" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr*4" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-3, -2, -1, 0])" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr-4" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [], + "source": [ + "arr1=np.array([2,3,4,5])" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2, 3, 4, 5])" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 7, 9, 11, 13])" + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1+arr2 #element wise addition" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [ + "arr2=np.array([[1,2,3],\n", + " [4,5,6],\n", + " [7,8,9]],dtype=float) #use shift+tab" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 3., 4., 5.],\n", + " [ 6., 7., 8.],\n", + " [ 9., 10., 11.]])" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2+2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Random\n", + "(sub package)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "21" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.randint(1,100)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "arr1=np.random.randint(10,100,size=(5,5))\n", + "#size is basically size of array" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "arr2=np.random.randint(10,100,size=(5,5))" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[47, 67, 10, 39, 11],\n", + " [48, 22, 47, 48, 58],\n", + " [14, 31, 28, 34, 93],\n", + " [80, 78, 52, 61, 94],\n", + " [26, 74, 85, 39, 35]])" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[57, 76, 68, 64, 84],\n", + " [26, 56, 72, 66, 94],\n", + " [57, 24, 51, 56, 76],\n", + " [22, 31, 17, 75, 32],\n", + " [98, 33, 20, 33, 18]])" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "52\n", + "52\n" + ] + } + ], + "source": [ + "print(arr1[3,2]) #but we prefer this more\n", + "print(arr1[3][2])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Numpy Random Module\n", + "- rand : Random values in a given shape.\n", + "- randn : Return a sample (or samples) from the “standard normal” distribution.\n", + "- randint : Return random integers from low (inclusive) to high (exclusive).\n", + "- random : Return random floats in the half-open interval [0.0, 1.0)\n", + "- choice : Generates a random sample from a given 1-D array\n", + "- Shuffle : Shuffles the contents of a sequence" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 5 6 7 8 9 10 11 12 13 14]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "a = np.arange(10) + 5\n", + "# Return evenly spaced values within a given interval.\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[7 8 6]\n" + ] + } + ], + "source": [ + "np.random.shuffle(a)\n", + "print(a)\n", + "#all the element of a are randomly shuffled #everytime" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.90068143 0.80358463 0.55563024]\n", + " [0.59029825 0.5992269 0.95534435]]\n" + ] + } + ], + "source": [ + "#Return values from Standard Normal Ditributions\n", + "a=np.random.rand(2,3)\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[8 9 5]\n" + ] + } + ], + "source": [ + "np.random.seed(1) #everytime you want random no. to be genrated same you have set aseed value\n", + "# if you dont want to use Pseudo random no. generation\n", + "# you can replicate result by using seed(store the state of random number)\n", + "a=np.random.randint(5,10,3)\n", + "print(a)\n", + "# three no. which are from these range" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Operation on matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[104, 143, 78, 103, 95],\n", + " [ 74, 78, 119, 114, 152],\n", + " [ 71, 55, 79, 90, 169],\n", + " [102, 109, 69, 136, 126],\n", + " [124, 107, 105, 72, 53]])" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1+arr2" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[104, 143, 78, 103, 95],\n", + " [ 74, 78, 119, 114, 152],\n", + " [ 71, 55, 79, 90, 169],\n", + " [102, 109, 69, 136, 126],\n", + " [124, 107, 105, 72, 53]])" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.add(arr1,arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2679, 5092, 680, 2496, 924],\n", + " [1248, 1232, 3384, 3168, 5452],\n", + " [ 798, 744, 1428, 1904, 7068],\n", + " [1760, 2418, 884, 4575, 3008],\n", + " [2548, 2442, 1700, 1287, 630]])" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#element wise multiplication\n", + "#not matrix multiplication\n", + "arr1*arr2" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2679, 5092, 680, 2496, 924],\n", + " [1248, 1232, 3384, 3168, 5452],\n", + " [ 798, 744, 1428, 1904, 7068],\n", + " [1760, 2418, 884, 4575, 3008],\n", + " [2548, 2442, 1700, 1287, 630]])" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.multiply(arr1,arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.8245614 0.88157895 0.14705882 0.609375 0.13095238]\n", + " [1.84615385 0.39285714 0.65277778 0.72727273 0.61702128]\n", + " [0.24561404 1.29166667 0.54901961 0.60714286 1.22368421]\n", + " [3.63636364 2.51612903 3.05882353 0.81333333 2.9375 ]\n", + " [0.26530612 2.24242424 4.25 1.18181818 1.94444444]]\n", + "-----------------------------------------------------------\n", + "[[0.8245614 0.88157895 0.14705882 0.609375 0.13095238]\n", + " [1.84615385 0.39285714 0.65277778 0.72727273 0.61702128]\n", + " [0.24561404 1.29166667 0.54901961 0.60714286 1.22368421]\n", + " [3.63636364 2.51612903 3.05882353 0.81333333 2.9375 ]\n", + " [0.26530612 2.24242424 4.25 1.18181818 1.94444444]]\n" + ] + } + ], + "source": [ + "print(np.divide(arr1,arr2))\n", + "print(\"-----------------------------------------------------------\")\n", + "print(arr1/arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[6.8556546 , 8.18535277, 3.16227766, 6.244998 , 3.31662479],\n", + " [6.92820323, 4.69041576, 6.8556546 , 6.92820323, 7.61577311],\n", + " [3.74165739, 5.56776436, 5.29150262, 5.83095189, 9.64365076],\n", + " [8.94427191, 8.83176087, 7.21110255, 7.81024968, 9.69535971],\n", + " [5.09901951, 8.60232527, 9.21954446, 6.244998 , 5.91607978]])" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sqrt(arr1)" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2209, 4489, 100, 1521, 121],\n", + " [2304, 484, 2209, 2304, 3364],\n", + " [ 196, 961, 784, 1156, 8649],\n", + " [6400, 6084, 2704, 3721, 8836],\n", + " [ 676, 5476, 7225, 1521, 1225]], dtype=int32)" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1**2" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 627453615, -1631139343, 0, 1448128001, 321008369],\n", + " [ 0, 0, -1605546367, 0, 0],\n", + " [ 0, -2077209343, 0, 0, -232775823],\n", + " [ 0, -2147483648, 0, 56577477, 0],\n", + " [ 0, 0, 1743204721, 857325863, -81531895]],\n", + " dtype=int32)" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1**arr2" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 6927, 9136, 9413, 11278, 12452],\n", + " [12727, 9410, 9221, 12670, 12252],\n", + " [13062, 7595, 7050, 10129, 8980],\n", + " [20106, 16689, 16625, 20857, 21648],\n", + " [12539, 10524, 12794, 15388, 17478]])" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#matrix multiplication / DOT PRODUCT\n", + "\n", + "np.dot(arr1,arr2)\n", + "#is same as\n", + "#arr1.dot(arr2) ==np.dot(arr1,arr2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dot product along axis" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30\n", + "10\n", + "10\n" + ] + }, + { + "data": { + "text/plain": [ + "' axis =1\\n^\\n|\\n|\\n|\\n\\n'" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# multiplication of vectors will give you a scalar\n", + "\n", + "a=np.array([1,2,3,4])\n", + "b=np.array([1,2,3,4])\n", + "print(a.dot(b))\n", + "print(sum(a))\n", + "print(np.sum(a,axis=0)) #sum along column \n", + "#=====> axis=0\n", + "\n", + "\"\"\" axis =1 sum along rows \n", + "^\n", + "|\n", + "|\n", + "|\n", + "\n", + "\"\"\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 6927, 9136, 9413, 11278, 12452],\n", + " [12727, 9410, 9221, 12670, 12252],\n", + " [13062, 7595, 7050, 10129, 8980],\n", + " [20106, 16689, 16625, 20857, 21648],\n", + " [12539, 10524, 12794, 15388, 17478]])" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1.dot(arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1303052305, 1254456601, 1093881801, 1183375433, 1201609076],\n", + " [1726599257, 1660878556, 1444479231, 1566813663, 1587093642],\n", + " [1534599560, 1469415883, 1283667819, 1390951166, 1409385767],\n", + " [1426104935, 1368621384, 1205083436, 1299603134, 1318345833],\n", + " [1345210034, 1308432982, 1130599231, 1229092908, 1240023033]])" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1.dot(arr2).dot(arr1).dot(arr2)\n", + "#you can try this also" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": {}, + "outputs": [], + "source": [ + "#trying doing maatrix mul of three matrix\n", + "#we can first find dot b/w two then find dot b/w next two\n", + "#np.dot(np.dot(arr1,arr2),arr3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Array Slicing" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[36, 19, 77, 52, 73],\n", + " [51, 57, 50, 96, 82],\n", + " [26, 92, 22, 84, 65],\n", + " [62, 92, 18, 31, 35],\n", + " [85, 41, 29, 72, 22]])" + ] + }, + "execution_count": 136, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "18" + ] + }, + "execution_count": 137, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1[3,2]" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "18" + ] + }, + "execution_count": 138, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1[3][2]" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[57, 50, 96, 82],\n", + " [92, 22, 84, 65],\n", + " [92, 18, 31, 35]])" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#arr[rows:cols]\n", + "arr1[1:4, 1:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[19, 77],\n", + " [57, 50],\n", + " [92, 22],\n", + " [92, 18],\n", + " [41, 29]])" + ] + }, + "execution_count": 141, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "arr1[:,1:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [], + "source": [ + "#imaages are just numpy array" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[10, 48, 35, 32],\n", + " [14, 82, 51, 73],\n", + " [86, 95, 13, 17]])" + ] + }, + "execution_count": 125, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#we can also Pass list of indexes\n", + "arr1[[1,3,4],:4]#if we want discontinoius things in ele\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Stacking of arrays" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[69 46 95 80]\n", + "[14 71 34 82]\n" + ] + } + ], + "source": [ + "a=np.random.randint(10,100,size=(4,))\n", + "b=np.random.randint(10,100,size=(4,))\n", + "print(a)\n", + "print(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[69, 14],\n", + " [46, 71],\n", + " [95, 34],\n", + " [80, 82]])" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.stack((a,b),axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[69],\n", + " [46],\n", + " [95],\n", + " [80]])" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.vstack(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[96 62]\n", + " [57 80]]\n", + "another numpy array:\n", + "[[39 76]\n", + " [61 90]]\n" + ] + } + ], + "source": [ + "c=np.random.randint(10,100,size=(2,2))\n", + "d=np.random.randint(10,100,size=(2,2))\n", + "print(c)\n", + "print(\"another numpy array:\")\n", + "print(d)" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[96, 62],\n", + " [57, 80]],\n", + "\n", + " [[39, 76],\n", + " [61, 90]]])" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.stack((c,d),axis=0) #along columns" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[96, 62],\n", + " [39, 76]],\n", + "\n", + " [[57, 80],\n", + " [61, 90]]])" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.stack((c,d),axis=1) #along rows " + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 2 3 4]\n", + "[ 1 4 9 16]\n" + ] + } + ], + "source": [ + "a=np.array([1,2,3,4])\n", + "b=np.array([1,2,3,4])\n", + "\n", + "print(a)\n", + "b=b**2\n", + "print(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1, 2, 3, 4],\n", + " [ 1, 4, 9, 16]])" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#it can only stack along column \n", + "np.stack((a,b),axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Brodcasting" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-15, -38, 27, -44],\n", + " [ 0, 0, 0, 0],\n", + " [-25, 35, -28, -12],\n", + " [ 11, 35, -32, -65],\n", + " [ 34, -16, -21, -24]])" + ] + }, + "execution_count": 143, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#broadcasting\n", + "arr1[:, :4]-arr1[1, :4] \n", + "#so as we know we subtracted a 4,1 array from 5,4\n", + "#so it happens because of 4 is same in b/w " + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(5, 4)\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[36, 19, 77, 52],\n", + " [51, 57, 50, 96],\n", + " [26, 92, 22, 84],\n", + " [62, 92, 18, 31],\n", + " [85, 41, 29, 72]])" + ] + }, + "execution_count": 150, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "print(arr1[:, :4].shape)\n", + "arr1[:, :4]" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(4,)\n" + ] + }, + { + "data": { + "text/plain": [ + "array([51, 57, 50, 96])" + ] + }, + "execution_count": 151, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " \n", + "print(arr1[1, :4].shape)\n", + "arr1[1, :4]" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2, 4, 6],\n", + " [ 5, 7, 9],\n", + " [ 8, 10, 12]])" + ] + }, + "execution_count": 130, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.array([[1,2,3],\n", + " [4,5,6],\n", + " [7,8,9]])+ np.array([1,2,3])" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2, 4, 6],\n", + " [ 5, 7, 9],\n", + " [ 8, 10, 12]])" + ] + }, + "execution_count": 131, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.array([[1,2,3],[4,5,6],[7,8,9]])+ np.array([1,2,3])" + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "operands could not be broadcast together with shapes (3,3) (4,) ", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m6\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m7\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m8\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m9\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m+\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mValueError\u001b[0m: operands could not be broadcast together with shapes (3,3) (4,) " + ] + } + ], + "source": [ + "np.array([[1,2,3],[4,5,6],[7,8,9]])+ np.array([1,2,3,4])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create Zeros , Ones ,Custom array" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0. 0. 0.]\n", + " [0. 0. 0.]\n", + " [0. 0. 0.]]\n" + ] + } + ], + "source": [ + "a=np.zeros((3,3))\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 0., 0., 0., 0.])" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.zeros((5,))" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 1., 1., 1., 1.],\n", + " [1., 1., 1., 1., 1.],\n", + " [1., 1., 1., 1., 1.],\n", + " [1., 1., 1., 1., 1.]])" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.ones((4,5))" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2 2 2 2 2]\n", + " [2 2 2 2 2]\n", + " [2 2 2 2 2]\n", + " [2 2 2 2 2]]\n" + ] + } + ], + "source": [ + "#array of some constant \n", + "c= np.full((4,5),2)\n", + "print(c)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 0., 0., 0., 0.],\n", + " [0., 1., 0., 0., 0.],\n", + " [0., 0., 1., 0., 0.],\n", + " [0., 0., 0., 1., 0.],\n", + " [0., 0., 0., 0., 1.]])" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Identiy Matrix-Size/Square matrix\n", + "np.eye(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.24593359 0.12350462 0.27235353]\n", + " [0.93650972 1. 1. ]]\n" + ] + } + ], + "source": [ + "#how to add specific elements to random matrix\n", + "rm=np.random.random((2,3))\n", + "rm[1,1:3]=1\n", + "print(rm)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0. 0. 0.]\n", + " [0. 0. 0.]\n", + " [0. 0. 0.]]\n", + "changed:\n", + "[[0. 0. 7.]\n", + " [5. 5. 7.]\n", + " [0. 0. 7.]]\n" + ] + } + ], + "source": [ + "#set some rows and columns with any values\n", + "#slicing\n", + "z=np.zeros((3,3))\n", + "print(z)\n", + "print(\"changed:\")\n", + "z[1,:]=5\n", + "z[:,-1]=7\n", + "print(z)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[99, 99, 99, 99],\n", + " [99, 99, 99, 99],\n", + " [99, 99, 99, 99],\n", + " [99, 99, 99, 99],\n", + " [99, 99, 99, 99]])" + ] + }, + "execution_count": 155, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.full((5,4), fill_value=99) #it will fillvalues " + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4, 0],\n", + " [0, 4]])" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.diag((4,4),)\n", + "#read documentation and see examples" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(range(10))" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65,\n", + " 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99])" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.array(range(33,100,2))" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65,\n", + " 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99])" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#in numpy we have func called \n", + "#arange\n", + "np.arange(33,100,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1. , 1.01010101, 1.02020202, 1.03030303, 1.04040404,\n", + " 1.05050505, 1.06060606, 1.07070707, 1.08080808, 1.09090909,\n", + " 1.1010101 , 1.11111111, 1.12121212, 1.13131313, 1.14141414,\n", + " 1.15151515, 1.16161616, 1.17171717, 1.18181818, 1.19191919,\n", + " 1.2020202 , 1.21212121, 1.22222222, 1.23232323, 1.24242424,\n", + " 1.25252525, 1.26262626, 1.27272727, 1.28282828, 1.29292929,\n", + " 1.3030303 , 1.31313131, 1.32323232, 1.33333333, 1.34343434,\n", + " 1.35353535, 1.36363636, 1.37373737, 1.38383838, 1.39393939,\n", + " 1.4040404 , 1.41414141, 1.42424242, 1.43434343, 1.44444444,\n", + " 1.45454545, 1.46464646, 1.47474747, 1.48484848, 1.49494949,\n", + " 1.50505051, 1.51515152, 1.52525253, 1.53535354, 1.54545455,\n", + " 1.55555556, 1.56565657, 1.57575758, 1.58585859, 1.5959596 ,\n", + " 1.60606061, 1.61616162, 1.62626263, 1.63636364, 1.64646465,\n", + " 1.65656566, 1.66666667, 1.67676768, 1.68686869, 1.6969697 ,\n", + " 1.70707071, 1.71717172, 1.72727273, 1.73737374, 1.74747475,\n", + " 1.75757576, 1.76767677, 1.77777778, 1.78787879, 1.7979798 ,\n", + " 1.80808081, 1.81818182, 1.82828283, 1.83838384, 1.84848485,\n", + " 1.85858586, 1.86868687, 1.87878788, 1.88888889, 1.8989899 ,\n", + " 1.90909091, 1.91919192, 1.92929293, 1.93939394, 1.94949495,\n", + " 1.95959596, 1.96969697, 1.97979798, 1.98989899, 2. ])" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Return evenly spaced numbers over a specified interval.\n", + "np.linspace(start=1,stop=2,num=100)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### read Documentation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Numpy/NUMPY_2.ipynb b/2.)PYTHON_BASICS/PYTHON Numpy/NUMPY_2.ipynb new file mode 100644 index 00000000..b5cf99c4 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Numpy/NUMPY_2.ipynb @@ -0,0 +1,1925 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Functions in Numpy" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "arr=np.random.randint(10,100,size=(5,4))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[37, 48, 21, 94],\n", + " [58, 12, 27, 54],\n", + " [64, 64, 77, 55],\n", + " [78, 49, 82, 83],\n", + " [86, 78, 99, 17]])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1183" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "59.15" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.mean(arr)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "323" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr[:,:1])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([323, 251, 306, 303])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr,axis=0)#axis 0 means row\n", + "#colwise sum\n", + "# --->\n", + "# --->\n", + "# --->" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n^ ^ ^\\n| | |\\n| | |\\n| | |\\n\\n'" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr,axis=1)#axis 1 means col\n", + "#row wise sum\n", + "\"\"\"\n", + "^ ^ ^\n", + "| | |\n", + "| | |\n", + "| | |\n", + "\n", + "\"\"\"\n", + "\n", + "#if u take sum across a 4 ele or 1 axis then u get 5 or 0 axis no of ele" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "arr1=np.random.randint(1,100,size=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([12, 15, 38, 50, 15, 87, 38, 86, 13, 23, 64, 42, 45, 48, 81, 31, 95,\n", + " 9, 43, 92, 73, 58, 25, 32, 55, 17, 43, 83, 32, 85])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(30,)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "arr_3d=np.random.randint(1,10,size=(3,2,4))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[7, 9, 2, 3],\n", + " [7, 4, 4, 5]],\n", + "\n", + " [[4, 7, 6, 8],\n", + " [9, 8, 6, 8]],\n", + "\n", + " [[1, 9, 3, 5],\n", + " [2, 4, 8, 9]]])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr_3d" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3, 2, 4)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr_3d.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[12, 25, 11, 16],\n", + " [18, 16, 18, 22]])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr_3d,axis=0)\n", + "#0 here is 3 so ans would come in(2,4)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[14, 13, 6, 8],\n", + " [13, 15, 12, 16],\n", + " [ 3, 13, 11, 14]])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr_3d,axis=1)\n", + "#1 here is 2 so ans would come in(3,4)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[21, 20],\n", + " [25, 31],\n", + " [18, 23]])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(arr_3d,axis=-1)\n", + "#-1 or 2 here is 4 so ans would come in(3,2)\n", + "#here we can too place 2 instead of -1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Masking" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[False, False, False, True],\n", + " [ True, False, False, True],\n", + " [ True, True, True, True],\n", + " [ True, False, True, True],\n", + " [ True, True, True, False]])" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr>50\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr[0,0]>50" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "new_arr=np.random.randint(1,100,size=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 77, 66, 26, 21, 1, 16, 34, 13, 55, 33, 71, 75, 23, 35, 40, 41,\n", + " 67, 38, 53, 27, 38, 89, 74, 88, 88, 8, 51, 92, 17])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ True, True, True, False, False, False, False, False, False,\n", + " True, False, True, True, False, False, False, False, True,\n", + " False, True, False, False, True, True, True, True, False,\n", + " True, True, False])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Masking\n", + "new_arr>50" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 77, 17])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr[[0,1,-1]]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ True, True, True, False, False, False, False, False, False,\n", + " True, False, True, True, False, False, False, False, True,\n", + " False, True, False, False, True, True, True, True, False,\n", + " True, True, False])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mask=new_arr>50\n", + "mask" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 77, 66, 55, 71, 75, 67, 53, 89, 74, 88, 88, 51, 92])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr[mask]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 77, 66, 55, 71, 75, 67, 53, 89, 74, 88, 88, 51, 92])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr[new_arr>50]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 66, 26, 16, 34, 40, 38, 38, 74, 88, 88, 8, 92])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr[new_arr%2==0]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "arr[:2,:2]=999" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 21, 94],\n", + " [999, 999, 27, 54],\n", + " [ 64, 64, 77, 55],\n", + " [ 78, 49, 82, 83],\n", + " [ 86, 78, 99, 17]])" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.min(arr1)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "95" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(arr1)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "arr1=np.random.randint(1,10,size=(3,3))" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4, 7, 5],\n", + " [2, 4, 5],\n", + " [9, 3, 8]])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# np.max(arr1,axis=0) #check for 2d array\n", + "arr1" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([54, 77, 66, 26, 21, 1, 16, 34, 13, 55, 33, 71, 75, 23, 35, 40, 41,\n", + " 67, 38, 53, 27, 38, 89, 74, 88, 88, 8, 51, 92, 17])" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2, 3, 5])" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#2D and 3D aray not work \n", + "#it will just work on simple vector\n", + "#for more thean one dimension we can find mi/max\n", + "#of one then min/max of them\n", + "np.min(arr1,axis=0)\n", + "#colwise min val\n", + "#first axis" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([7, 5, 9])" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(arr1,axis=1)\n", + "#row wise max val\n", + "#second axis" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr.min()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "92" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_arr.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "51\n" + ] + }, + { + "data": { + "text/plain": [ + "28" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(new_arr[27]) #u can put val and check\n", + "new_arr.argmax()\n", + "#it will give index of max ele\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n" + ] + }, + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(new_arr[26])\n", + "new_arr.argmin()\n", + "#it will give index of min ele" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Reshape" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 21, 94],\n", + " [999, 999, 27, 54],\n", + " [ 64, 64, 77, 55],\n", + " [ 78, 49, 82, 83],\n", + " [ 86, 78, 99, 17]])" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5, 4)" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#reshape\n", + "arr.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999],\n", + " [ 21, 94],\n", + " [999, 999],\n", + " [ 27, 54],\n", + " [ 64, 64],\n", + " [ 77, 55],\n", + " [ 78, 49],\n", + " [ 82, 83],\n", + " [ 86, 78],\n", + " [ 99, 17]])" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.reshape((10,2))" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 21, 94, 999, 999, 27, 54, 64, 64, 77, 55, 78,\n", + " 49, 82, 83, 86, 78, 99, 17]])" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.reshape((-1,20))" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 21, 94, 999, 999, 27, 54, 64, 64],\n", + " [ 77, 55, 78, 49, 82, 83, 86, 78, 99, 17]])" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.reshape(arr,newshape=(2,10))\n", + "#see in DoC newshape take tuple or int(vector)\n", + "#but array can variate b/w vector only (20,) and (,20)\n", + "# as 5x4= 20 total no. of ele is same throughout" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 21, 94, 999, 999, 27, 54, 64, 64],\n", + " [ 77, 55, 78, 49, 82, 83, 86, 78, 99, 17]])" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.reshape(arr,newshape=(-1,10))\n", + "#so -1 here automatically intialize itself it can be any side" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [], + "source": [ + "a=np.arange(1,10)" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [], + "source": [ + "b=a" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [], + "source": [ + "a[:5]=999" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([999, 999, 999, 999, 999, 6, 7, 8, 9])" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([999, 999, 999, 999, 999, 6, 7, 8, 9])" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b#this happens dur to referncing" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [], + "source": [ + "b=a.copy() # now changes arenot reflected" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vectorization" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "a=np.array([2,3])\n", + "b=np.array([5,4])" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 120, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": {}, + "outputs": [], + "source": [ + "def distance(a,b):\n", + " dx=b[0]-a[0]\n", + " dy=b[1]-a[1]\n", + " \n", + " return np.sqrt(dx**2+dy**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1622776601683795" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "distance(a,b)" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.7782794100389228" + ] + }, + "execution_count": 123, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sqrt(10**0.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1622776601683795" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum((b-a)**2)**0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[39, 25, 59, 79, 71],\n", + " [36, 12, 85, 31, 14],\n", + " [42, 18, 72, 80, 28],\n", + " [54, 44, 30, 30, 74]])" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#ranspose of array\n", + "np.transpose(arr)" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[999, 999, 29, 22, 72],\n", + " [999, 999, 21, 85, 39],\n", + " [ 46, 91, 96, 32, 16],\n", + " [ 38, 40, 30, 53, 47]])" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#or \n", + "arr.T" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#np.linalg.inv(arr)\n", + "#to invrese" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['ALLOW_THREADS',\n", + " 'AxisError',\n", + " 'BUFSIZE',\n", + " 'CLIP',\n", + " 'ComplexWarning',\n", + " 'DataSource',\n", + " 'ERR_CALL',\n", + " 'ERR_DEFAULT',\n", + " 'ERR_IGNORE',\n", + " 'ERR_LOG',\n", + " 'ERR_PRINT',\n", + " 'ERR_RAISE',\n", + " 'ERR_WARN',\n", + " 'FLOATING_POINT_SUPPORT',\n", + " 'FPE_DIVIDEBYZERO',\n", + " 'FPE_INVALID',\n", + " 'FPE_OVERFLOW',\n", + " 'FPE_UNDERFLOW',\n", + " 'False_',\n", + " 'Inf',\n", + " 'Infinity',\n", + " 'MAXDIMS',\n", + " 'MAY_SHARE_BOUNDS',\n", + " 'MAY_SHARE_EXACT',\n", + " 'MachAr',\n", + " 'ModuleDeprecationWarning',\n", + " 'NAN',\n", + " 'NINF',\n", + " 'NZERO',\n", + " 'NaN',\n", + " 'PINF',\n", + " 'PZERO',\n", + " 'RAISE',\n", + " 'RankWarning',\n", + " 'SHIFT_DIVIDEBYZERO',\n", + " 'SHIFT_INVALID',\n", + " 'SHIFT_OVERFLOW',\n", + " 'SHIFT_UNDERFLOW',\n", + " 'ScalarType',\n", + " 'Tester',\n", + " 'TooHardError',\n", + " 'True_',\n", + " 'UFUNC_BUFSIZE_DEFAULT',\n", + " 'UFUNC_PYVALS_NAME',\n", + " 'VisibleDeprecationWarning',\n", + " 'WRAP',\n", + " '_NoValue',\n", + " '_UFUNC_API',\n", + " '__NUMPY_SETUP__',\n", + " '__all__',\n", + " '__builtins__',\n", + " '__cached__',\n", + " '__config__',\n", + " '__dir__',\n", + " '__doc__',\n", + " '__file__',\n", + " '__getattr__',\n", + " '__git_revision__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__path__',\n", + " '__spec__',\n", + " '__version__',\n", + " '_add_newdoc_ufunc',\n", + " '_distributor_init',\n", + " '_globals',\n", + " '_mat',\n", + " '_pytesttester',\n", + " 'abs',\n", + " 'absolute',\n", + " 'absolute_import',\n", + " 'add',\n", + " 'add_docstring',\n", + " 'add_newdoc',\n", + " 'add_newdoc_ufunc',\n", + " 'alen',\n", + " 'all',\n", + " 'allclose',\n", + " 'alltrue',\n", + " 'amax',\n", + " 'amin',\n", + " 'angle',\n", + " 'any',\n", + " 'append',\n", + " 'apply_along_axis',\n", + " 'apply_over_axes',\n", + " 'arange',\n", + " 'arccos',\n", + " 'arccosh',\n", + " 'arcsin',\n", + " 'arcsinh',\n", + " 'arctan',\n", + " 'arctan2',\n", + " 'arctanh',\n", + " 'argmax',\n", + " 'argmin',\n", + " 'argpartition',\n", + " 'argsort',\n", + " 'argwhere',\n", + " 'around',\n", + " 'array',\n", + " 'array2string',\n", + " 'array_equal',\n", + " 'array_equiv',\n", + " 'array_repr',\n", + " 'array_split',\n", + " 'array_str',\n", + " 'asanyarray',\n", + " 'asarray',\n", + " 'asarray_chkfinite',\n", + " 'ascontiguousarray',\n", + " 'asfarray',\n", + " 'asfortranarray',\n", + " 'asmatrix',\n", + " 'asscalar',\n", + " 'atleast_1d',\n", + " 'atleast_2d',\n", + " 'atleast_3d',\n", + " 'average',\n", + " 'bartlett',\n", + " 'base_repr',\n", + " 'binary_repr',\n", + " 'bincount',\n", + " 'bitwise_and',\n", + " 'bitwise_not',\n", + " 'bitwise_or',\n", + " 'bitwise_xor',\n", + " 'blackman',\n", + " 'block',\n", + " 'bmat',\n", + " 'bool',\n", + " 'bool8',\n", + " 'bool_',\n", + " 'broadcast',\n", + " 'broadcast_arrays',\n", + " 'broadcast_to',\n", + " 'busday_count',\n", + " 'busday_offset',\n", + " 'busdaycalendar',\n", + " 'byte',\n", + " 'byte_bounds',\n", + " 'bytes0',\n", + " 'bytes_',\n", + " 'c_',\n", + " 'can_cast',\n", + " 'cast',\n", + " 'cbrt',\n", + " 'cdouble',\n", + " 'ceil',\n", + " 'cfloat',\n", + " 'char',\n", + " 'character',\n", + " 'chararray',\n", + " 'choose',\n", + " 'clip',\n", + " 'clongdouble',\n", + " 'clongfloat',\n", + " 'column_stack',\n", + " 'common_type',\n", + " 'compare_chararrays',\n", + " 'compat',\n", + " 'complex',\n", + " 'complex128',\n", + " 'complex64',\n", + " 'complex_',\n", + " 'complexfloating',\n", + " 'compress',\n", + " 'concatenate',\n", + " 'conj',\n", + " 'conjugate',\n", + " 'convolve',\n", + " 'copy',\n", + " 'copysign',\n", + " 'copyto',\n", + " 'core',\n", + " 'corrcoef',\n", + " 'correlate',\n", + " 'cos',\n", + " 'cosh',\n", + " 'count_nonzero',\n", + " 'cov',\n", + " 'cross',\n", + " 'csingle',\n", + " 'ctypeslib',\n", + " 'cumprod',\n", + " 'cumproduct',\n", + " 'cumsum',\n", + " 'datetime64',\n", + " 'datetime_as_string',\n", + " 'datetime_data',\n", + " 'deg2rad',\n", + " 'degrees',\n", + " 'delete',\n", + " 'deprecate',\n", + " 'deprecate_with_doc',\n", + " 'diag',\n", + " 'diag_indices',\n", + " 'diag_indices_from',\n", + " 'diagflat',\n", + " 'diagonal',\n", + " 'diff',\n", + " 'digitize',\n", + " 'disp',\n", + " 'divide',\n", + " 'division',\n", + " 'divmod',\n", + " 'dot',\n", + " 'double',\n", + " 'dsplit',\n", + " 'dstack',\n", + " 'dtype',\n", + " 'e',\n", + " 'ediff1d',\n", + " 'einsum',\n", + " 'einsum_path',\n", + " 'emath',\n", + " 'empty',\n", + " 'empty_like',\n", + " 'equal',\n", + " 'errstate',\n", + " 'euler_gamma',\n", + " 'exp',\n", + " 'exp2',\n", + " 'expand_dims',\n", + " 'expm1',\n", + " 'extract',\n", + " 'eye',\n", + " 'fabs',\n", + " 'fastCopyAndTranspose',\n", + " 'fft',\n", + " 'fill_diagonal',\n", + " 'find_common_type',\n", + " 'finfo',\n", + " 'fix',\n", + " 'flatiter',\n", + " 'flatnonzero',\n", + " 'flexible',\n", + " 'flip',\n", + " 'fliplr',\n", + " 'flipud',\n", + " 'float',\n", + " 'float16',\n", + " 'float32',\n", + " 'float64',\n", + " 'float_',\n", + " 'float_power',\n", + " 'floating',\n", + " 'floor',\n", + " 'floor_divide',\n", + " 'fmax',\n", + " 'fmin',\n", + " 'fmod',\n", + " 'format_float_positional',\n", + " 'format_float_scientific',\n", + " 'format_parser',\n", + " 'frexp',\n", + " 'frombuffer',\n", + " 'fromfile',\n", + " 'fromfunction',\n", + " 'fromiter',\n", + " 'frompyfunc',\n", + " 'fromregex',\n", + " 'fromstring',\n", + " 'full',\n", + " 'full_like',\n", + " 'fv',\n", + " 'gcd',\n", + " 'generic',\n", + " 'genfromtxt',\n", + " 'geomspace',\n", + " 'get_array_wrap',\n", + " 'get_include',\n", + " 'get_printoptions',\n", + " 'getbufsize',\n", + " 'geterr',\n", + " 'geterrcall',\n", + " 'geterrobj',\n", + " 'gradient',\n", + " 'greater',\n", + " 'greater_equal',\n", + " 'half',\n", + " 'hamming',\n", + " 'hanning',\n", + " 'heaviside',\n", + " 'histogram',\n", + " 'histogram2d',\n", + " 'histogram_bin_edges',\n", + " 'histogramdd',\n", + " 'hsplit',\n", + " 'hstack',\n", + " 'hypot',\n", + " 'i0',\n", + " 'identity',\n", + " 'iinfo',\n", + " 'imag',\n", + " 'in1d',\n", + " 'index_exp',\n", + " 'indices',\n", + " 'inexact',\n", + " 'inf',\n", + " 'info',\n", + " 'infty',\n", + " 'inner',\n", + " 'insert',\n", + " 'int',\n", + " 'int0',\n", + " 'int16',\n", + " 'int32',\n", + " 'int64',\n", + " 'int8',\n", + " 'int_',\n", + " 'int_asbuffer',\n", + " 'intc',\n", + " 'integer',\n", + " 'interp',\n", + " 'intersect1d',\n", + " 'intp',\n", + " 'invert',\n", + " 'ipmt',\n", + " 'irr',\n", + " 'is_busday',\n", + " 'isclose',\n", + " 'iscomplex',\n", + " 'iscomplexobj',\n", + " 'isfinite',\n", + " 'isfortran',\n", + " 'isin',\n", + " 'isinf',\n", + " 'isnan',\n", + " 'isnat',\n", + " 'isneginf',\n", + " 'isposinf',\n", + " 'isreal',\n", + " 'isrealobj',\n", + " 'isscalar',\n", + " 'issctype',\n", + " 'issubclass_',\n", + " 'issubdtype',\n", + " 'issubsctype',\n", + " 'iterable',\n", + " 'ix_',\n", + " 'kaiser',\n", + " 'kron',\n", + " 'lcm',\n", + " 'ldexp',\n", + " 'left_shift',\n", + " 'less',\n", + " 'less_equal',\n", + " 'lexsort',\n", + " 'lib',\n", + " 'linalg',\n", + " 'linspace',\n", + " 'little_endian',\n", + " 'load',\n", + " 'loads',\n", + " 'loadtxt',\n", + " 'log',\n", + " 'log10',\n", + " 'log1p',\n", + " 'log2',\n", + " 'logaddexp',\n", + " 'logaddexp2',\n", + " 'logical_and',\n", + " 'logical_not',\n", + " 'logical_or',\n", + " 'logical_xor',\n", + " 'logspace',\n", + " 'long',\n", + " 'longcomplex',\n", + " 'longdouble',\n", + " 'longfloat',\n", + " 'longlong',\n", + " 'lookfor',\n", + " 'ma',\n", + " 'mafromtxt',\n", + " 'mask_indices',\n", + " 'mat',\n", + " 'math',\n", + " 'matmul',\n", + " 'matrix',\n", + " 'matrixlib',\n", + " 'max',\n", + " 'maximum',\n", + " 'maximum_sctype',\n", + " 'may_share_memory',\n", + " 'mean',\n", + " 'median',\n", + " 'memmap',\n", + " 'meshgrid',\n", + " 'mgrid',\n", + " 'min',\n", + " 'min_scalar_type',\n", + " 'minimum',\n", + " 'mintypecode',\n", + " 'mirr',\n", + " 'mod',\n", + " 'modf',\n", + " 'moveaxis',\n", + " 'msort',\n", + " 'multiply',\n", + " 'nan',\n", + " 'nan_to_num',\n", + " 'nanargmax',\n", + " 'nanargmin',\n", + " 'nancumprod',\n", + " 'nancumsum',\n", + " 'nanmax',\n", + " 'nanmean',\n", + " 'nanmedian',\n", + " 'nanmin',\n", + " 'nanpercentile',\n", + " 'nanprod',\n", + " 'nanquantile',\n", + " 'nanstd',\n", + " 'nansum',\n", + " 'nanvar',\n", + " 'nbytes',\n", + " 'ndarray',\n", + " 'ndenumerate',\n", + " 'ndfromtxt',\n", + " 'ndim',\n", + " 'ndindex',\n", + " 'nditer',\n", + " 'negative',\n", + " 'nested_iters',\n", + " 'newaxis',\n", + " 'nextafter',\n", + " 'nonzero',\n", + " 'not_equal',\n", + " 'nper',\n", + " 'npv',\n", + " 'numarray',\n", + " 'number',\n", + " 'obj2sctype',\n", + " 'object',\n", + " 'object0',\n", + " 'object_',\n", + " 'ogrid',\n", + " 'oldnumeric',\n", + " 'ones',\n", + " 'ones_like',\n", + " 'outer',\n", + " 'packbits',\n", + " 'pad',\n", + " 'partition',\n", + " 'percentile',\n", + " 'pi',\n", + " 'piecewise',\n", + " 'place',\n", + " 'pmt',\n", + " 'poly',\n", + " 'poly1d',\n", + " 'polyadd',\n", + " 'polyder',\n", + " 'polydiv',\n", + " 'polyfit',\n", + " 'polyint',\n", + " 'polymul',\n", + " 'polynomial',\n", + " 'polysub',\n", + " 'polyval',\n", + " 'positive',\n", + " 'power',\n", + " 'ppmt',\n", + " 'print_function',\n", + " 'printoptions',\n", + " 'prod',\n", + " 'product',\n", + " 'promote_types',\n", + " 'ptp',\n", + " 'put',\n", + " 'put_along_axis',\n", + " 'putmask',\n", + " 'pv',\n", + " 'quantile',\n", + " 'r_',\n", + " 'rad2deg',\n", + " 'radians',\n", + " 'random',\n", + " 'rate',\n", + " 'ravel',\n", + " 'ravel_multi_index',\n", + " 'real',\n", + " 'real_if_close',\n", + " 'rec',\n", + " 'recarray',\n", + " 'recfromcsv',\n", + " 'recfromtxt',\n", + " 'reciprocal',\n", + " 'record',\n", + " 'remainder',\n", + " 'repeat',\n", + " 'require',\n", + " 'reshape',\n", + " 'resize',\n", + " 'result_type',\n", + " 'right_shift',\n", + " 'rint',\n", + " 'roll',\n", + " 'rollaxis',\n", + " 'roots',\n", + " 'rot90',\n", + " 'round',\n", + " 'round_',\n", + " 'row_stack',\n", + " 's_',\n", + " 'safe_eval',\n", + " 'save',\n", + " 'savetxt',\n", + " 'savez',\n", + " 'savez_compressed',\n", + " 'sctype2char',\n", + " 'sctypeDict',\n", + " 'sctypeNA',\n", + " 'sctypes',\n", + " 'searchsorted',\n", + " 'select',\n", + " 'set_numeric_ops',\n", + " 'set_printoptions',\n", + " 'set_string_function',\n", + " 'setbufsize',\n", + " 'setdiff1d',\n", + " 'seterr',\n", + " 'seterrcall',\n", + " 'seterrobj',\n", + " 'setxor1d',\n", + " 'shape',\n", + " 'shares_memory',\n", + " 'short',\n", + " 'show_config',\n", + " 'sign',\n", + " 'signbit',\n", + " 'signedinteger',\n", + " 'sin',\n", + " 'sinc',\n", + " 'single',\n", + " 'singlecomplex',\n", + " 'sinh',\n", + " 'size',\n", + " 'sometrue',\n", + " 'sort',\n", + " 'sort_complex',\n", + " 'source',\n", + " 'spacing',\n", + " 'split',\n", + " 'sqrt',\n", + " 'square',\n", + " 'squeeze',\n", + " 'stack',\n", + " 'std',\n", + " 'str',\n", + " 'str0',\n", + " 'str_',\n", + " 'string_',\n", + " 'subtract',\n", + " 'sum',\n", + " 'swapaxes',\n", + " 'sys',\n", + " 'take',\n", + " 'take_along_axis',\n", + " 'tan',\n", + " 'tanh',\n", + " 'tensordot',\n", + " 'test',\n", + " 'testing',\n", + " 'tile',\n", + " 'timedelta64',\n", + " 'trace',\n", + " 'tracemalloc_domain',\n", + " 'transpose',\n", + " 'trapz',\n", + " 'tri',\n", + " 'tril',\n", + " 'tril_indices',\n", + " 'tril_indices_from',\n", + " 'trim_zeros',\n", + " 'triu',\n", + " 'triu_indices',\n", + " 'triu_indices_from',\n", + " 'true_divide',\n", + " 'trunc',\n", + " 'typeDict',\n", + " 'typeNA',\n", + " 'typecodes',\n", + " 'typename',\n", + " 'ubyte',\n", + " 'ufunc',\n", + " 'uint',\n", + " 'uint0',\n", + " 'uint16',\n", + " 'uint32',\n", + " 'uint64',\n", + " 'uint8',\n", + " 'uintc',\n", + " 'uintp',\n", + " 'ulonglong',\n", + " 'unicode',\n", + " 'unicode_',\n", + " 'union1d',\n", + " 'unique',\n", + " 'unpackbits',\n", + " 'unravel_index',\n", + " 'unsignedinteger',\n", + " 'unwrap',\n", + " 'ushort',\n", + " 'vander',\n", + " 'var',\n", + " 'vdot',\n", + " 'vectorize',\n", + " 'version',\n", + " 'void',\n", + " 'void0',\n", + " 'vsplit',\n", + " 'vstack',\n", + " 'warnings',\n", + " 'where',\n", + " 'who',\n", + " 'zeros',\n", + " 'zeros_like']" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(np) #np. +shift+tab" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8939966636005579" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sin(90)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Pandas/IRIS.csv b/2.)PYTHON_BASICS/PYTHON Pandas/IRIS.csv new file mode 100644 index 00000000..21ae1963 --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Pandas/IRIS.csv @@ -0,0 +1,151 @@ +sepal_length,sepal_width,petal_length,petal_width,species +5.1,3.5,1.4,0.2,Iris-setosa +4.9,3,1.4,0.2,Iris-setosa +4.7,3.2,1.3,0.2,Iris-setosa +4.6,3.1,1.5,0.2,Iris-setosa +5,3.6,1.4,0.2,Iris-setosa +5.4,3.9,1.7,0.4,Iris-setosa +4.6,3.4,1.4,0.3,Iris-setosa +5,3.4,1.5,0.2,Iris-setosa +4.4,2.9,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5.4,3.7,1.5,0.2,Iris-setosa +4.8,3.4,1.6,0.2,Iris-setosa +4.8,3,1.4,0.1,Iris-setosa +4.3,3,1.1,0.1,Iris-setosa +5.8,4,1.2,0.2,Iris-setosa +5.7,4.4,1.5,0.4,Iris-setosa +5.4,3.9,1.3,0.4,Iris-setosa +5.1,3.5,1.4,0.3,Iris-setosa +5.7,3.8,1.7,0.3,Iris-setosa +5.1,3.8,1.5,0.3,Iris-setosa +5.4,3.4,1.7,0.2,Iris-setosa +5.1,3.7,1.5,0.4,Iris-setosa +4.6,3.6,1,0.2,Iris-setosa +5.1,3.3,1.7,0.5,Iris-setosa +4.8,3.4,1.9,0.2,Iris-setosa +5,3,1.6,0.2,Iris-setosa +5,3.4,1.6,0.4,Iris-setosa +5.2,3.5,1.5,0.2,Iris-setosa +5.2,3.4,1.4,0.2,Iris-setosa +4.7,3.2,1.6,0.2,Iris-setosa +4.8,3.1,1.6,0.2,Iris-setosa +5.4,3.4,1.5,0.4,Iris-setosa +5.2,4.1,1.5,0.1,Iris-setosa +5.5,4.2,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5,3.2,1.2,0.2,Iris-setosa +5.5,3.5,1.3,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +4.4,3,1.3,0.2,Iris-setosa +5.1,3.4,1.5,0.2,Iris-setosa +5,3.5,1.3,0.3,Iris-setosa +4.5,2.3,1.3,0.3,Iris-setosa +4.4,3.2,1.3,0.2,Iris-setosa +5,3.5,1.6,0.6,Iris-setosa +5.1,3.8,1.9,0.4,Iris-setosa +4.8,3,1.4,0.3,Iris-setosa +5.1,3.8,1.6,0.2,Iris-setosa +4.6,3.2,1.4,0.2,Iris-setosa +5.3,3.7,1.5,0.2,Iris-setosa +5,3.3,1.4,0.2,Iris-setosa +7,3.2,4.7,1.4,Iris-versicolor +6.4,3.2,4.5,1.5,Iris-versicolor +6.9,3.1,4.9,1.5,Iris-versicolor +5.5,2.3,4,1.3,Iris-versicolor +6.5,2.8,4.6,1.5,Iris-versicolor +5.7,2.8,4.5,1.3,Iris-versicolor +6.3,3.3,4.7,1.6,Iris-versicolor +4.9,2.4,3.3,1,Iris-versicolor +6.6,2.9,4.6,1.3,Iris-versicolor +5.2,2.7,3.9,1.4,Iris-versicolor +5,2,3.5,1,Iris-versicolor +5.9,3,4.2,1.5,Iris-versicolor +6,2.2,4,1,Iris-versicolor +6.1,2.9,4.7,1.4,Iris-versicolor +5.6,2.9,3.6,1.3,Iris-versicolor +6.7,3.1,4.4,1.4,Iris-versicolor +5.6,3,4.5,1.5,Iris-versicolor +5.8,2.7,4.1,1,Iris-versicolor +6.2,2.2,4.5,1.5,Iris-versicolor +5.6,2.5,3.9,1.1,Iris-versicolor +5.9,3.2,4.8,1.8,Iris-versicolor +6.1,2.8,4,1.3,Iris-versicolor +6.3,2.5,4.9,1.5,Iris-versicolor +6.1,2.8,4.7,1.2,Iris-versicolor +6.4,2.9,4.3,1.3,Iris-versicolor +6.6,3,4.4,1.4,Iris-versicolor +6.8,2.8,4.8,1.4,Iris-versicolor +6.7,3,5,1.7,Iris-versicolor +6,2.9,4.5,1.5,Iris-versicolor +5.7,2.6,3.5,1,Iris-versicolor +5.5,2.4,3.8,1.1,Iris-versicolor +5.5,2.4,3.7,1,Iris-versicolor +5.8,2.7,3.9,1.2,Iris-versicolor +6,2.7,5.1,1.6,Iris-versicolor +5.4,3,4.5,1.5,Iris-versicolor +6,3.4,4.5,1.6,Iris-versicolor +6.7,3.1,4.7,1.5,Iris-versicolor +6.3,2.3,4.4,1.3,Iris-versicolor +5.6,3,4.1,1.3,Iris-versicolor +5.5,2.5,4,1.3,Iris-versicolor +5.5,2.6,4.4,1.2,Iris-versicolor +6.1,3,4.6,1.4,Iris-versicolor +5.8,2.6,4,1.2,Iris-versicolor +5,2.3,3.3,1,Iris-versicolor +5.6,2.7,4.2,1.3,Iris-versicolor +5.7,3,4.2,1.2,Iris-versicolor +5.7,2.9,4.2,1.3,Iris-versicolor +6.2,2.9,4.3,1.3,Iris-versicolor +5.1,2.5,3,1.1,Iris-versicolor +5.7,2.8,4.1,1.3,Iris-versicolor +6.3,3.3,6,2.5,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +7.1,3,5.9,2.1,Iris-virginica +6.3,2.9,5.6,1.8,Iris-virginica +6.5,3,5.8,2.2,Iris-virginica +7.6,3,6.6,2.1,Iris-virginica +4.9,2.5,4.5,1.7,Iris-virginica +7.3,2.9,6.3,1.8,Iris-virginica +6.7,2.5,5.8,1.8,Iris-virginica +7.2,3.6,6.1,2.5,Iris-virginica +6.5,3.2,5.1,2,Iris-virginica +6.4,2.7,5.3,1.9,Iris-virginica +6.8,3,5.5,2.1,Iris-virginica +5.7,2.5,5,2,Iris-virginica +5.8,2.8,5.1,2.4,Iris-virginica +6.4,3.2,5.3,2.3,Iris-virginica +6.5,3,5.5,1.8,Iris-virginica +7.7,3.8,6.7,2.2,Iris-virginica +7.7,2.6,6.9,2.3,Iris-virginica +6,2.2,5,1.5,Iris-virginica +6.9,3.2,5.7,2.3,Iris-virginica +5.6,2.8,4.9,2,Iris-virginica +7.7,2.8,6.7,2,Iris-virginica +6.3,2.7,4.9,1.8,Iris-virginica +6.7,3.3,5.7,2.1,Iris-virginica +7.2,3.2,6,1.8,Iris-virginica +6.2,2.8,4.8,1.8,Iris-virginica +6.1,3,4.9,1.8,Iris-virginica +6.4,2.8,5.6,2.1,Iris-virginica +7.2,3,5.8,1.6,Iris-virginica +7.4,2.8,6.1,1.9,Iris-virginica +7.9,3.8,6.4,2,Iris-virginica +6.4,2.8,5.6,2.2,Iris-virginica +6.3,2.8,5.1,1.5,Iris-virginica +6.1,2.6,5.6,1.4,Iris-virginica +7.7,3,6.1,2.3,Iris-virginica +6.3,3.4,5.6,2.4,Iris-virginica +6.4,3.1,5.5,1.8,Iris-virginica +6,3,4.8,1.8,Iris-virginica +6.9,3.1,5.4,2.1,Iris-virginica +6.7,3.1,5.6,2.4,Iris-virginica +6.9,3.1,5.1,2.3,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +6.8,3.2,5.9,2.3,Iris-virginica +6.7,3.3,5.7,2.5,Iris-virginica +6.7,3,5.2,2.3,Iris-virginica +6.3,2.5,5,1.9,Iris-virginica +6.5,3,5.2,2,Iris-virginica +6.2,3.4,5.4,2.3,Iris-virginica +5.9,3,5.1,1.8,Iris-virginica diff --git a/2.)PYTHON_BASICS/PYTHON Pandas/KNN AND CROSS VALIDATION BY SONU .ipynb b/2.)PYTHON_BASICS/PYTHON Pandas/KNN AND CROSS VALIDATION BY SONU .ipynb new file mode 100644 index 00000000..371b357d --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Pandas/KNN AND CROSS VALIDATION BY SONU .ipynb @@ -0,0 +1,2003 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", + " # sklearn documentation on KNN \n", + " #### class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, *, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None, **kwargs)\n", + " # Classifier implementing the k-nearest neighbors vote.\n", + "\n", + "# 1) Parameters\n", + "### a) n_neighbors: int, default=5\n", + " ###### Number of neighbors to use by default for kneighbors queries.\n", + "\n", + "### b)weights{‘uniform’, ‘distance’} or callable, default=’uniform’\n", + "##### weight function used in prediction. Possible values:\n", + "\n", + "##### ‘uniform’ : uniform weights. All points in each neighborhood are weighted equally.\n", + "\n", + "##### ‘distance’ : weight points by the inverse of their distance. in this case, closer neighbors of a query point will have a greater influence than neighbors which are further away.\n", + "\n", + "##### [callable] : a user-defined function which accepts an array of distances, and returns an array of the same shape containing the weights.\n", + "\n", + "### c)algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’\n", + "##### Algorithm used to compute the nearest neighbors:\n", + "\n", + "##### ‘ball_tree’ will use BallTree\n", + "\n", + "##### ‘kd_tree’ will use KDTree\n", + "\n", + "##### ‘brute’ will use a brute-force search.\n", + "\n", + "##### ‘auto’ will attempt to decide the most appropriate algorithm based on the values passed to fit method.\n", + "\n", + "##### Note: fitting on sparse input will override the setting of this parameter, using brute force.\n", + "\n", + "### d) leaf_size: int, default=30\n", + "##### Leaf size passed to BallTree or KDTree. This can affect the speed of the construction and query, as well as the memory required to store the tree. The optimal value depends on the nature of the problem.\n", + "\n", + "#### e) p: int, default=2\n", + "##### Power parameter for the Minkowski metric. When p = 1, this is equivalent to using manhattan_distance (l1), and euclidean_distance (l2) for p = 2. For arbitrary p, minkowski_distance (l_p) is used.\n", + "\n", + "### f) metric : str or callable, default=’minkowski’\n", + "##### the distance metric to use for the tree. The default metric is minkowski, and with p=2 is equivalent to the standard Euclidean metric. See the documentation of DistanceMetric for a list of available metrics. If metric is “precomputed”, X is assumed to be a distance matrix and must be square during fit. X may be a sparse graph, in which case only “nonzero” elements may be considered neighbors.\n", + "\n", + "### g) metric_params: dict, default=None\n", + "##### Additional keyword arguments for the metric function.\n", + "\n", + "### h) n_jobs: int, default=None\n", + "##### The number of parallel jobs to run for neighbors search. None means 1 unless in a joblib.parallel_backend context. -1 means using all processors. See Glossary for more details. Doesn’t affect fit method." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn import datasets\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([[1.799e+01, 1.038e+01, 1.228e+02, ..., 2.654e-01, 4.601e-01,\n", + " 1.189e-01],\n", + " [2.057e+01, 1.777e+01, 1.329e+02, ..., 1.860e-01, 2.750e-01,\n", + " 8.902e-02],\n", + " [1.969e+01, 2.125e+01, 1.300e+02, ..., 2.430e-01, 3.613e-01,\n", + " 8.758e-02],\n", + " ...,\n", + " [1.660e+01, 2.808e+01, 1.083e+02, ..., 1.418e-01, 2.218e-01,\n", + " 7.820e-02],\n", + " [2.060e+01, 2.933e+01, 1.401e+02, ..., 2.650e-01, 4.087e-01,\n", + " 1.240e-01],\n", + " [7.760e+00, 2.454e+01, 4.792e+01, ..., 0.000e+00, 2.871e-01,\n", + " 7.039e-02]]),\n", + " array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0,\n", + " 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0,\n", + " 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0,\n", + " 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1,\n", + " 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0,\n", + " 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0,\n", + " 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1,\n", + " 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0,\n", + " 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,\n", + " 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0,\n", + " 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1,\n", + " 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1,\n", + " 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n", + " 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,\n", + " 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1,\n", + " 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1]),\n", + " {'data': array([[1.799e+01, 1.038e+01, 1.228e+02, ..., 2.654e-01, 4.601e-01,\n", + " 1.189e-01],\n", + " [2.057e+01, 1.777e+01, 1.329e+02, ..., 1.860e-01, 2.750e-01,\n", + " 8.902e-02],\n", + " [1.969e+01, 2.125e+01, 1.300e+02, ..., 2.430e-01, 3.613e-01,\n", + " 8.758e-02],\n", + " ...,\n", + " [1.660e+01, 2.808e+01, 1.083e+02, ..., 1.418e-01, 2.218e-01,\n", + " 7.820e-02],\n", + " [2.060e+01, 2.933e+01, 1.401e+02, ..., 2.650e-01, 4.087e-01,\n", + " 1.240e-01],\n", + " [7.760e+00, 2.454e+01, 4.792e+01, ..., 0.000e+00, 2.871e-01,\n", + " 7.039e-02]]),\n", + " 'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0,\n", + " 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0,\n", + " 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0,\n", + " 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1,\n", + " 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0,\n", + " 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0,\n", + " 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1,\n", + " 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0,\n", + " 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,\n", + " 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0,\n", + " 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1,\n", + " 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1,\n", + " 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n", + " 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,\n", + " 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1,\n", + " 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1]),\n", + " 'target_names': array(['malignant', 'benign'], dtype='\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123456789...20212223242526272829
count569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000...569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000
mean14.12729219.28964991.969033654.8891040.0963600.1043410.0887990.0489190.1811620.062798...16.26919025.677223107.261213880.5831280.1323690.2542650.2721880.1146060.2900760.083946
std3.5240494.30103624.298981351.9141290.0140640.0528130.0797200.0388030.0274140.007060...4.8332426.14625833.602542569.3569930.0228320.1573360.2086240.0657320.0618670.018061
min6.9810009.71000043.790000143.5000000.0526300.0193800.0000000.0000000.1060000.049960...7.93000012.02000050.410000185.2000000.0711700.0272900.0000000.0000000.1565000.055040
25%11.70000016.17000075.170000420.3000000.0863700.0649200.0295600.0203100.1619000.057700...13.01000021.08000084.110000515.3000000.1166000.1472000.1145000.0649300.2504000.071460
50%13.37000018.84000086.240000551.1000000.0958700.0926300.0615400.0335000.1792000.061540...14.97000025.41000097.660000686.5000000.1313000.2119000.2267000.0999300.2822000.080040
75%15.78000021.800000104.100000782.7000000.1053000.1304000.1307000.0740000.1957000.066120...18.79000029.720000125.4000001084.0000000.1460000.3391000.3829000.1614000.3179000.092080
max28.11000039.280000188.5000002501.0000000.1634000.3454000.4268000.2012000.3040000.097440...36.04000049.540000251.2000004254.0000000.2226001.0580001.2520000.2910000.6638000.207500
\n", + "

8 rows × 30 columns

\n", + "" + ], + "text/plain": [ + " 0 1 2 3 4 \\\n", + "count 569.000000 569.000000 569.000000 569.000000 569.000000 \n", + "mean 14.127292 19.289649 91.969033 654.889104 0.096360 \n", + "std 3.524049 4.301036 24.298981 351.914129 0.014064 \n", + "min 6.981000 9.710000 43.790000 143.500000 0.052630 \n", + "25% 11.700000 16.170000 75.170000 420.300000 0.086370 \n", + "50% 13.370000 18.840000 86.240000 551.100000 0.095870 \n", + "75% 15.780000 21.800000 104.100000 782.700000 0.105300 \n", + "max 28.110000 39.280000 188.500000 2501.000000 0.163400 \n", + "\n", + " 5 6 7 8 9 ... \\\n", + "count 569.000000 569.000000 569.000000 569.000000 569.000000 ... \n", + "mean 0.104341 0.088799 0.048919 0.181162 0.062798 ... \n", + "std 0.052813 0.079720 0.038803 0.027414 0.007060 ... \n", + "min 0.019380 0.000000 0.000000 0.106000 0.049960 ... \n", + "25% 0.064920 0.029560 0.020310 0.161900 0.057700 ... \n", + "50% 0.092630 0.061540 0.033500 0.179200 0.061540 ... \n", + "75% 0.130400 0.130700 0.074000 0.195700 0.066120 ... \n", + "max 0.345400 0.426800 0.201200 0.304000 0.097440 ... \n", + "\n", + " 20 21 22 23 24 \\\n", + "count 569.000000 569.000000 569.000000 569.000000 569.000000 \n", + "mean 16.269190 25.677223 107.261213 880.583128 0.132369 \n", + "std 4.833242 6.146258 33.602542 569.356993 0.022832 \n", + "min 7.930000 12.020000 50.410000 185.200000 0.071170 \n", + "25% 13.010000 21.080000 84.110000 515.300000 0.116600 \n", + "50% 14.970000 25.410000 97.660000 686.500000 0.131300 \n", + "75% 18.790000 29.720000 125.400000 1084.000000 0.146000 \n", + "max 36.040000 49.540000 251.200000 4254.000000 0.222600 \n", + "\n", + " 25 26 27 28 29 \n", + "count 569.000000 569.000000 569.000000 569.000000 569.000000 \n", + "mean 0.254265 0.272188 0.114606 0.290076 0.083946 \n", + "std 0.157336 0.208624 0.065732 0.061867 0.018061 \n", + "min 0.027290 0.000000 0.000000 0.156500 0.055040 \n", + "25% 0.147200 0.114500 0.064930 0.250400 0.071460 \n", + "50% 0.211900 0.226700 0.099930 0.282200 0.080040 \n", + "75% 0.339100 0.382900 0.161400 0.317900 0.092080 \n", + "max 1.058000 1.252000 0.291000 0.663800 0.207500 \n", + "\n", + "[8 rows x 30 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df=pd.DataFrame(dataset.data)\n", + "df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array(['mean radius', 'mean texture', 'mean perimeter', 'mean area',\n", + " 'mean smoothness', 'mean compactness', 'mean concavity',\n", + " 'mean concave points', 'mean symmetry', 'mean fractal dimension',\n", + " 'radius error', 'texture error', 'perimeter error', 'area error',\n", + " 'smoothness error', 'compactness error', 'concavity error',\n", + " 'concave points error', 'symmetry error',\n", + " 'fractal dimension error', 'worst radius', 'worst texture',\n", + " 'worst perimeter', 'worst area', 'worst smoothness',\n", + " 'worst compactness', 'worst concavity', 'worst concave points',\n", + " 'worst symmetry', 'worst fractal dimension'], dtype='\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst radiusworst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimension
017.9910.38122.801001.00.118400.277600.300100.147100.24190.07871...25.38017.33184.602019.00.162200.665600.71190.26540.46010.11890
120.5717.77132.901326.00.084740.078640.086900.070170.18120.05667...24.99023.41158.801956.00.123800.186600.24160.18600.27500.08902
219.6921.25130.001203.00.109600.159900.197400.127900.20690.05999...23.57025.53152.501709.00.144400.424500.45040.24300.36130.08758
311.4220.3877.58386.10.142500.283900.241400.105200.25970.09744...14.91026.5098.87567.70.209800.866300.68690.25750.66380.17300
420.2914.34135.101297.00.100300.132800.198000.104300.18090.05883...22.54016.67152.201575.00.137400.205000.40000.16250.23640.07678
..................................................................
56421.5622.39142.001479.00.111000.115900.243900.138900.17260.05623...25.45026.40166.102027.00.141000.211300.41070.22160.20600.07115
56520.1328.25131.201261.00.097800.103400.144000.097910.17520.05533...23.69038.25155.001731.00.116600.192200.32150.16280.25720.06637
56616.6028.08108.30858.10.084550.102300.092510.053020.15900.05648...18.98034.12126.701124.00.113900.309400.34030.14180.22180.07820
56720.6029.33140.101265.00.117800.277000.351400.152000.23970.07016...25.74039.42184.601821.00.165000.868100.93870.26500.40870.12400
5687.7624.5447.92181.00.052630.043620.000000.000000.15870.05884...9.45630.3759.16268.60.089960.064440.00000.00000.28710.07039
\n", + "

569 rows × 30 columns

\n", + "" + ], + "text/plain": [ + " mean radius mean texture mean perimeter mean area mean smoothness \\\n", + "0 17.99 10.38 122.80 1001.0 0.11840 \n", + "1 20.57 17.77 132.90 1326.0 0.08474 \n", + "2 19.69 21.25 130.00 1203.0 0.10960 \n", + "3 11.42 20.38 77.58 386.1 0.14250 \n", + "4 20.29 14.34 135.10 1297.0 0.10030 \n", + ".. ... ... ... ... ... \n", + "564 21.56 22.39 142.00 1479.0 0.11100 \n", + "565 20.13 28.25 131.20 1261.0 0.09780 \n", + "566 16.60 28.08 108.30 858.1 0.08455 \n", + "567 20.60 29.33 140.10 1265.0 0.11780 \n", + "568 7.76 24.54 47.92 181.0 0.05263 \n", + "\n", + " mean compactness mean concavity mean concave points mean symmetry \\\n", + "0 0.27760 0.30010 0.14710 0.2419 \n", + "1 0.07864 0.08690 0.07017 0.1812 \n", + "2 0.15990 0.19740 0.12790 0.2069 \n", + "3 0.28390 0.24140 0.10520 0.2597 \n", + "4 0.13280 0.19800 0.10430 0.1809 \n", + ".. ... ... ... ... \n", + "564 0.11590 0.24390 0.13890 0.1726 \n", + "565 0.10340 0.14400 0.09791 0.1752 \n", + "566 0.10230 0.09251 0.05302 0.1590 \n", + "567 0.27700 0.35140 0.15200 0.2397 \n", + "568 0.04362 0.00000 0.00000 0.1587 \n", + "\n", + " mean fractal dimension ... worst radius worst texture \\\n", + "0 0.07871 ... 25.380 17.33 \n", + "1 0.05667 ... 24.990 23.41 \n", + "2 0.05999 ... 23.570 25.53 \n", + "3 0.09744 ... 14.910 26.50 \n", + "4 0.05883 ... 22.540 16.67 \n", + ".. ... ... ... ... \n", + "564 0.05623 ... 25.450 26.40 \n", + "565 0.05533 ... 23.690 38.25 \n", + "566 0.05648 ... 18.980 34.12 \n", + "567 0.07016 ... 25.740 39.42 \n", + "568 0.05884 ... 9.456 30.37 \n", + "\n", + " worst perimeter worst area worst smoothness worst compactness \\\n", + "0 184.60 2019.0 0.16220 0.66560 \n", + "1 158.80 1956.0 0.12380 0.18660 \n", + "2 152.50 1709.0 0.14440 0.42450 \n", + "3 98.87 567.7 0.20980 0.86630 \n", + "4 152.20 1575.0 0.13740 0.20500 \n", + ".. ... ... ... ... \n", + "564 166.10 2027.0 0.14100 0.21130 \n", + "565 155.00 1731.0 0.11660 0.19220 \n", + "566 126.70 1124.0 0.11390 0.30940 \n", + "567 184.60 1821.0 0.16500 0.86810 \n", + "568 59.16 268.6 0.08996 0.06444 \n", + "\n", + " worst concavity worst concave points worst symmetry \\\n", + "0 0.7119 0.2654 0.4601 \n", + "1 0.2416 0.1860 0.2750 \n", + "2 0.4504 0.2430 0.3613 \n", + "3 0.6869 0.2575 0.6638 \n", + "4 0.4000 0.1625 0.2364 \n", + ".. ... ... ... \n", + "564 0.4107 0.2216 0.2060 \n", + "565 0.3215 0.1628 0.2572 \n", + "566 0.3403 0.1418 0.2218 \n", + "567 0.9387 0.2650 0.4087 \n", + "568 0.0000 0.0000 0.2871 \n", + "\n", + " worst fractal dimension \n", + "0 0.11890 \n", + "1 0.08902 \n", + "2 0.08758 \n", + "3 0.17300 \n", + "4 0.07678 \n", + ".. ... \n", + "564 0.07115 \n", + "565 0.06637 \n", + "566 0.07820 \n", + "567 0.12400 \n", + "568 0.07039 \n", + "\n", + "[569 rows x 30 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns=dataset.feature_names\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 569 entries, 0 to 568\n", + "Data columns (total 30 columns):\n", + "mean radius 569 non-null float64\n", + "mean texture 569 non-null float64\n", + "mean perimeter 569 non-null float64\n", + "mean area 569 non-null float64\n", + "mean smoothness 569 non-null float64\n", + "mean compactness 569 non-null float64\n", + "mean concavity 569 non-null float64\n", + "mean concave points 569 non-null float64\n", + "mean symmetry 569 non-null float64\n", + "mean fractal dimension 569 non-null float64\n", + "radius error 569 non-null float64\n", + "texture error 569 non-null float64\n", + "perimeter error 569 non-null float64\n", + "area error 569 non-null float64\n", + "smoothness error 569 non-null float64\n", + "compactness error 569 non-null float64\n", + "concavity error 569 non-null float64\n", + "concave points error 569 non-null float64\n", + "symmetry error 569 non-null float64\n", + "fractal dimension error 569 non-null float64\n", + "worst radius 569 non-null float64\n", + "worst texture 569 non-null float64\n", + "worst perimeter 569 non-null float64\n", + "worst area 569 non-null float64\n", + "worst smoothness 569 non-null float64\n", + "worst compactness 569 non-null float64\n", + "worst concavity 569 non-null float64\n", + "worst concave points 569 non-null float64\n", + "worst symmetry 569 non-null float64\n", + "worst fractal dimension 569 non-null float64\n", + "dtypes: float64(30)\n", + "memory usage: 133.5 KB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst radiusworst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimension
count569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000...569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000
mean14.12729219.28964991.969033654.8891040.0963600.1043410.0887990.0489190.1811620.062798...16.26919025.677223107.261213880.5831280.1323690.2542650.2721880.1146060.2900760.083946
std3.5240494.30103624.298981351.9141290.0140640.0528130.0797200.0388030.0274140.007060...4.8332426.14625833.602542569.3569930.0228320.1573360.2086240.0657320.0618670.018061
min6.9810009.71000043.790000143.5000000.0526300.0193800.0000000.0000000.1060000.049960...7.93000012.02000050.410000185.2000000.0711700.0272900.0000000.0000000.1565000.055040
25%11.70000016.17000075.170000420.3000000.0863700.0649200.0295600.0203100.1619000.057700...13.01000021.08000084.110000515.3000000.1166000.1472000.1145000.0649300.2504000.071460
50%13.37000018.84000086.240000551.1000000.0958700.0926300.0615400.0335000.1792000.061540...14.97000025.41000097.660000686.5000000.1313000.2119000.2267000.0999300.2822000.080040
75%15.78000021.800000104.100000782.7000000.1053000.1304000.1307000.0740000.1957000.066120...18.79000029.720000125.4000001084.0000000.1460000.3391000.3829000.1614000.3179000.092080
max28.11000039.280000188.5000002501.0000000.1634000.3454000.4268000.2012000.3040000.097440...36.04000049.540000251.2000004254.0000000.2226001.0580001.2520000.2910000.6638000.207500
\n", + "

8 rows × 30 columns

\n", + "
" + ], + "text/plain": [ + " mean radius mean texture mean perimeter mean area \\\n", + "count 569.000000 569.000000 569.000000 569.000000 \n", + "mean 14.127292 19.289649 91.969033 654.889104 \n", + "std 3.524049 4.301036 24.298981 351.914129 \n", + "min 6.981000 9.710000 43.790000 143.500000 \n", + "25% 11.700000 16.170000 75.170000 420.300000 \n", + "50% 13.370000 18.840000 86.240000 551.100000 \n", + "75% 15.780000 21.800000 104.100000 782.700000 \n", + "max 28.110000 39.280000 188.500000 2501.000000 \n", + "\n", + " mean smoothness mean compactness mean concavity mean concave points \\\n", + "count 569.000000 569.000000 569.000000 569.000000 \n", + "mean 0.096360 0.104341 0.088799 0.048919 \n", + "std 0.014064 0.052813 0.079720 0.038803 \n", + "min 0.052630 0.019380 0.000000 0.000000 \n", + "25% 0.086370 0.064920 0.029560 0.020310 \n", + "50% 0.095870 0.092630 0.061540 0.033500 \n", + "75% 0.105300 0.130400 0.130700 0.074000 \n", + "max 0.163400 0.345400 0.426800 0.201200 \n", + "\n", + " mean symmetry mean fractal dimension ... worst radius \\\n", + "count 569.000000 569.000000 ... 569.000000 \n", + "mean 0.181162 0.062798 ... 16.269190 \n", + "std 0.027414 0.007060 ... 4.833242 \n", + "min 0.106000 0.049960 ... 7.930000 \n", + "25% 0.161900 0.057700 ... 13.010000 \n", + "50% 0.179200 0.061540 ... 14.970000 \n", + "75% 0.195700 0.066120 ... 18.790000 \n", + "max 0.304000 0.097440 ... 36.040000 \n", + "\n", + " worst texture worst perimeter worst area worst smoothness \\\n", + "count 569.000000 569.000000 569.000000 569.000000 \n", + "mean 25.677223 107.261213 880.583128 0.132369 \n", + "std 6.146258 33.602542 569.356993 0.022832 \n", + "min 12.020000 50.410000 185.200000 0.071170 \n", + "25% 21.080000 84.110000 515.300000 0.116600 \n", + "50% 25.410000 97.660000 686.500000 0.131300 \n", + "75% 29.720000 125.400000 1084.000000 0.146000 \n", + "max 49.540000 251.200000 4254.000000 0.222600 \n", + "\n", + " worst compactness worst concavity worst concave points \\\n", + "count 569.000000 569.000000 569.000000 \n", + "mean 0.254265 0.272188 0.114606 \n", + "std 0.157336 0.208624 0.065732 \n", + "min 0.027290 0.000000 0.000000 \n", + "25% 0.147200 0.114500 0.064930 \n", + "50% 0.211900 0.226700 0.099930 \n", + "75% 0.339100 0.382900 0.161400 \n", + "max 1.058000 1.252000 0.291000 \n", + "\n", + " worst symmetry worst fractal dimension \n", + "count 569.000000 569.000000 \n", + "mean 0.290076 0.083946 \n", + "std 0.061867 0.018061 \n", + "min 0.156500 0.055040 \n", + "25% 0.250400 0.071460 \n", + "50% 0.282200 0.080040 \n", + "75% 0.317900 0.092080 \n", + "max 0.663800 0.207500 \n", + "\n", + "[8 rows x 30 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(398, 30)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_train,x_test,y_train,y_test=train_test_split(df,dataset.target,test_size=0.3)\n", + "x_train.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", + " metric_params=None, n_jobs=None, n_neighbors=5, p=2,\n", + " weights='uniform')" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf=KNeighborsClassifier()\n", + "clf.fit(x_train,y_train)\n", + "\n", + "#explanation of each parameters\n", + "# note all the parameters values showing in the output is the default value.\n", + "# n_neighbor=5 means inbuilt sklearn using default value of k is 5\n", + "# metric=minkowski minkowski distance= (summation (X1(i)-X2(i))^p)^1/p and sklearn use default value of p=2,then minkowski\n", + " #distance become Eucledian . if p=1 then minkowski distance become Manhatten \n", + " \n", + "# in metric , if we want ot use our own defined metric function in that case we use the metric_params which takes a dictionary\n", + " #default value is None \n", + "# leaf size : it is used for the bal tree and kd tree " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9239766081871345" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf.score(x_test,y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# note we can write the latex code when the cells are in markdown mode " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " # cross validation \n", + " \n", + " Once we are done with training our model, we just can’t assume that it is going to work well on data that it has not seen before. In other words, we cant be sure that the model will have the desired accuracy and variance in production environment. We need some kind of assurance of the accuracy of the predictions that our model is putting out. For this, we need to validate our model. This process of deciding whether the numerical results quantifying hypothesised relationships between variables, are acceptable as descriptions of the data, is known as validation.\n", + " \n", + " To evaluate the performance of any machine learning model we need to test it on some unseen data. Based on the models performance on unseen data we can say weather our model is Under-fitting/Over-fitting/Well generalised. Cross validation (CV) is one of the technique used to test the effectiveness of a machine learning models, it is also a re-sampling procedure used to evaluate a model if we have a limited data. To perform CV we need to keep aside a sample/portion of the data on which is do not use to train the model, later us this sample for testing/validating. There are many methods\n", + " \n", + " \n", + "# Below are the few common techniques used for CV.\n", + "\n", + "## 1) Train_Test Split approach.\n", + "In this approach we randomly split the complete data into training and test sets. Then Perform the model training on the training set and use the test set for validation purpose, ideally split the data into 70:30 or 80:20. With this approach there is a possibility of high bias if we have limited data, because we would miss some information about the data which we have not used for training. If our data is huge and our test sample and train sample has the same distribution then this approach is acceptable.\n", + " \n", + " There is always a need to validate the stability of your machine learning model. I mean you just can’t fit the model to your training data and hope it would accurately work for the real data it has never seen before. You need some kind of assurance that your model has got most of the patterns from the data correct, and its not picking up too much on the noise, or in other words its low on bias and variance.\n", + "We can manually split the data into train and test set using slicing or we can use the train_test_split of scikit-learn method for this task.\n", + "\n", + " x_train,x_test,y_train,y_test=model_selection.train_test_split(datasets.data,datasets.target,test_size=0.3,random_state=10)\n", + " \n", + " here when we change the value of random_state from 10 to other non zero value , then the whole data gets shuffled and split\n", + " randomly . therefore the accuracy of my model will not be stable . it will be fluctuating and i won't be able to tell my stackholder that what accuracy is your model is exact.\n", + " for more study visit this link https://towardsdatascience.com/cross-validation-in-machine-learning-72924a69872f\n", + "\n", + "\n", + "## 2) Leave one out cross-validation(LOO CV)\n", + "# Note : we use cross validation only on training data not on testing data\n", + "\n", + " SUPPOSE we have 1000 training data points so in LOO CV METHOD we leave the one data point and train out model on remaining 999 data points .\n", + "##### itreation 1 [ 1 data point for testing] [999 data point for training] \n", + "##### itreation 2 [ 1 data point for training] [1 data point for testing] [998 data for training] so total 999 data for training \n", + "##### itreation 2 [ 2 data point for training] [1 data point for testing] [997 data for training] so total 999 data for training \n", + " ... . . . so on ..\n", + " \n", + "### Note: in this case we have to a lot of iteration and it is low baised (leads to overfitting ) . so now a days no one use it \n", + "\n", + "\n", + "## 3) K FOLD cross-validation(K F CV)\n", + "\n", + " SUPPOSE we have 1000 training data points so in LOO CV METHOD we devide data point into k parts or we can say it k fold and train the model on (k-1) fold data and leave one fold for testing . let say K=4\n", + "##### itreation 1 [fold 1 for testing][fold 2 for training][fold 3 for training][fold 4 for training] - -> we get accuracy score 1\n", + "##### itreation 2 [fold 1 for training][fold 2 for testing][fold 3 for training][fold 4 for training] - -> we get accuracy score 2\n", + "##### itreation 3 [fold 1 for training][fold 2 for trianing][fold 3 for testing][fold 4 for training] - -> we get accuracy score 3\n", + "##### itreation 4 [fold 1 for training][fold 2 for trianing][fold 3 for training][fold 4 for testing] - -> we get accuracy score 4\n", + "\n", + "Now eventually for the final accuracy score , we find out the mean of all accuracy score \n", + " #### final accuracy score =(accuracy score 1+accuracy score 2+accuracy score 3+accuracy score 4)/4\n", + " ##### now we can say to our stackholder final score of my model will be final accuracy score . \n", + " #### we can also say to our stackholder that , hey the minimum accuracy score of the model is minimum of all accuracy score \n", + " #### and maximum accuracy will be maximum of all accuracy score \n", + " ##### minimum accuracy score=min(accuracy score 1, accuracy score 2, accuracy score 3, accuracy score 4)\n", + " ##### maximum accuracy score=max(accuracy score 1, accuracy score 2, accuracy score 3, accuracy score 4)\n", + "\n", + "\n", + "\n", + "### old version inbuilt sklearn k fold cv uses default value of k=3, but new version uses k=5 , for which parameter is cv=5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# i am going to use cross validation on iris data and estimator i am going to use linear regression " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.95424118, 0.89299528, 0.92820538])" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.linear_model import LinearRegression\n", + "iris=datasets.load_iris()\n", + "xtrain,xtest,ytrain,ytest=train_test_split(iris.data,iris.target,test_size=0.2)\n", + "clf1=LinearRegression()\n", + "cross_val_score(clf1,xtrain,ytrain,cv=3)\n", + "#clf.fit(x_train,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 0., 0.])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# instead of using training data lets passed the whole data and lets see the score \n", + "clf2=LinearRegression()\n", + "cross_val_score(clf2,iris.data,iris.target,cv=3)\n", + "# here we are getting score 0 . why?(think)\n", + "# ans: below we can see that in iris classes of data first 50 data belong to class 0 and second 50 belongs to class 1\n", + "# and last 50 belongs to class 2 . so in first iteration model is training on the last 100 data (which contains class 1\n", + "# and class 2 only ) and testing on the first 50 data which has class 0 .hence the mismatching happens here . and it's\n", + "# obvious to get the score 0 . and same on the 2nd iteration and 3rd iteration . " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## to get the non -zero score on iris , we shuffle the data " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", + " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", + " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iris.target" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.90322728, 0.92527008, 0.94214064])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.model_selection import KFold # here lets pass all the data without spliting \n", + "clf2=LinearRegression()\n", + "cross_val_score(clf2,iris.data,iris.target,cv=KFold(3,True,0)) # here k=3 , shuffle =true(which shuffle the data) ,\n", + "# random_state=0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Now comming back to my KNN (above i have discussed some concepts of cross val score ) \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Now how will we decide the optimal value of K.\n", + "### since k=1 it's very prune to overfitting and very high value of k ,it's always tend to predict the classes which has high value . for eg , we have two classes a-> total 100 in numbers and b-> total 50 in numbers then in that case for high value of k is always tend to predict class a due to majority of a . \n", + "\n", + "### so for very low value of k leads to overfitting and very high value of k temds to underfitting \n", + "### we can't use the testing data for finding optimal k, because it's only for testing not for calculating any parameter\n", + "\n", + "#### so what should be the optimal value of k , show that we can get the best result." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': array([[1.799e+01, 1.038e+01, 1.228e+02, ..., 2.654e-01, 4.601e-01,\n", + " 1.189e-01],\n", + " [2.057e+01, 1.777e+01, 1.329e+02, ..., 1.860e-01, 2.750e-01,\n", + " 8.902e-02],\n", + " [1.969e+01, 2.125e+01, 1.300e+02, ..., 2.430e-01, 3.613e-01,\n", + " 8.758e-02],\n", + " ...,\n", + " [1.660e+01, 2.808e+01, 1.083e+02, ..., 1.418e-01, 2.218e-01,\n", + " 7.820e-02],\n", + " [2.060e+01, 2.933e+01, 1.401e+02, ..., 2.650e-01, 4.087e-01,\n", + " 1.240e-01],\n", + " [7.760e+00, 2.454e+01, 4.792e+01, ..., 0.000e+00, 2.871e-01,\n", + " 7.039e-02]]),\n", + " 'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0,\n", + " 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0,\n", + " 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0,\n", + " 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1,\n", + " 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0,\n", + " 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0,\n", + " 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1,\n", + " 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0,\n", + " 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,\n", + " 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0,\n", + " 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1,\n", + " 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1,\n", + " 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n", + " 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,\n", + " 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1,\n", + " 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1]),\n", + " 'target_names': array(['malignant', 'benign'], dtype=' 0.9144831776410723\n", + "3 --> 0.9271094402673349\n", + "5 --> 0.9346282372598161\n", + "7 --> 0.9321029847345637\n", + "9 --> 0.9346092503987241\n", + "11 --> 0.9295967190704033\n", + "13 --> 0.9346282372598161\n", + "15 --> 0.9321409584567478\n", + "17 --> 0.9321409584567478\n", + "19 --> 0.9346472241209084\n", + "21 --> 0.9321409584567478\n", + "23 --> 0.9270904534062429\n", + "25 --> 0.9195526695526696\n" + ] + } + ], + "source": [ + "for i in range(1,26,2):\n", + " clf3=KNeighborsClassifier(n_neighbors=i) # here i represents the no. of neighbours i.e k value\n", + " score =cross_val_score(clf3,x_train,y_train,cv=3) #cv=3 , it is kfold value =3\n", + " print(i,\"-->\",score.mean()) #score will have 3 element. so lets calculate the mean of all three value. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# lets see it by ploting " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "x_axis=[]\n", + "y_axis=[]\n", + "for i in range(1,26,2):\n", + " clf3=KNeighborsClassifier(n_neighbors=i) # here i represents the no. of neighbours i.e k value\n", + " x_axis.append(i) \n", + " score =cross_val_score(clf3,x_train,y_train,cv=3) #cv=3 , it is kfold value =3\n", + " y_axis.append(score.mean()) #score will have 3 element. so lets calculate the mean of all three value. " + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.plot(x_axis,y_axis)\n", + "plt.title(\"deciding optimal k value \")\n", + "plt.xlabel(\"k values\")\n", + "plt.ylabel(\"score\")\n", + "plt.grid()\n", + "plt.show() # in the graph below we can find the optimal k which is around 8" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9239766081871345\n", + "0.9239766081871345\n" + ] + } + ], + "source": [ + "# lets pick k=7 \n", + "clf4=KNeighborsClassifier(n_neighbors=7)\n", + "clf5=KNeighborsClassifier(n_neighbors=9) \n", + "clf4.fit(x_train,y_train)\n", + "clf5.fit(x_train,y_train)\n", + "print(clf4.score(x_test,y_test))\n", + "print(clf5.score(x_test,y_test)) # here k=7works well " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# why does KNN more computation on test time than on train time?\n", + "\n", + "### Ans:- There is no explicit training phase in KNN . It just takes data as input in its training phase . All the actual work , that is calculation of distances,comparisons and taking out nearest k neighbors is done at testing phase when test data is available. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Let me first explain about the counter in python " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({1: 8, 0: 7, 2: 2, 5: 1, 8: 1})" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from collections import Counter\n", + "lis=[1,1,0,2,5,8,2,0,0,0,0,1,1,1,1,1,0,1,0]\n", + "Counter(lis) # its return a collection object in which it is giving count of 1 is 8 ,count of 0 is 7,count of 2 is 2,and so on.." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(1, 8), (0, 7)]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Counter(lis).most_common(2) # it will return most 2 common element in the list .\n", + " # it will return a list of tuple object ." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(1, 8)]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Counter(lis).most_common(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Counter(lis).most_common(1)[0][0] #it will give the most common element." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Now it's time to implement our own KNN algorithm. " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "def fit(x_train,y_train):\n", + " return" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "def predict_one(x_train,y_train,x_test,k):\n", + " distances=[]\n", + " for i in range(len(x_train)):\n", + " distance=((x_train[i,:]-x_test)**2).sum()\n", + " distances.append((distance,i))#here (distance,i) means distance of test data x_test from ith trainig data is distance\n", + " distances=sorted(distances)\n", + " targets=[]\n", + " for i in range(k):\n", + " targets.append(y_train[distances[i][1]])\n", + " return Counter(targets).most_common(1)[0][0] \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "def predict(x_train,y_train,x_test_data,k):\n", + " predictions=[]\n", + " for x in x_test_data:\n", + " predictions.append(predict_one(x_train,y_train,x,k))\n", + " return predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.956140350877193" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics import accuracy_score\n", + "X_train,X_test,Y_train,Y_test=train_test_split(dataset.data,dataset.target,random_state=65,test_size=0.2)\n", + "y_pred=predict(X_train,Y_train,X_test,7)\n", + "accuracy_score(y_pred,Y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9122807017543859" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cl=KNeighborsClassifier(n_neighbors=7) #from inbuilt sklearn i am comparing the score with my own implemented KNN\n", + "cl.fit(X_train,Y_train)\n", + "Y_pred=cl.predict(X_test)\n", + "accuracy_score(y_pred,Y_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### here we can see that accuracy score on my implemented KNN and inbuilt SKlearn has same accuracy score" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/2.)PYTHON_BASICS/PYTHON Pandas/Pandas Continue.ipynb b/2.)PYTHON_BASICS/PYTHON Pandas/Pandas Continue.ipynb new file mode 100644 index 00000000..86e3909b --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Pandas/Pandas Continue.ipynb @@ -0,0 +1,3121 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "df=pd.read_csv(\"IRIS.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
224.63.61.00.2Iris-setosa
134.33.01.10.1Iris-setosa
145.84.01.20.2Iris-setosa
355.03.21.20.2Iris-setosa
365.53.51.30.2Iris-setosa
405.03.51.30.3Iris-setosa
384.43.01.30.2Iris-setosa
424.43.21.30.2Iris-setosa
24.73.21.30.2Iris-setosa
414.52.31.30.3Iris-setosa
165.43.91.30.4Iris-setosa
175.13.51.40.3Iris-setosa
454.83.01.40.3Iris-setosa
335.54.21.40.2Iris-setosa
285.23.41.40.2Iris-setosa
474.63.21.40.2Iris-setosa
495.03.31.40.2Iris-setosa
05.13.51.40.2Iris-setosa
45.03.61.40.2Iris-setosa
14.93.01.40.2Iris-setosa
124.83.01.40.1Iris-setosa
64.63.41.40.3Iris-setosa
84.42.91.40.2Iris-setosa
344.93.11.50.1Iris-setosa
105.43.71.50.2Iris-setosa
325.24.11.50.1Iris-setosa
315.43.41.50.4Iris-setosa
155.74.41.50.4Iris-setosa
275.23.51.50.2Iris-setosa
94.93.11.50.1Iris-setosa
75.03.41.50.2Iris-setosa
34.63.11.50.2Iris-setosa
485.33.71.50.2Iris-setosa
215.13.71.50.4Iris-setosa
195.13.81.50.3Iris-setosa
395.13.41.50.2Iris-setosa
374.93.11.50.1Iris-setosa
304.83.11.60.2Iris-setosa
294.73.21.60.2Iris-setosa
114.83.41.60.2Iris-setosa
265.03.41.60.4Iris-setosa
255.03.01.60.2Iris-setosa
465.13.81.60.2Iris-setosa
435.03.51.60.6Iris-setosa
185.73.81.70.3Iris-setosa
55.43.91.70.4Iris-setosa
235.13.31.70.5Iris-setosa
205.43.41.70.2Iris-setosa
244.83.41.90.2Iris-setosa
445.13.81.90.4Iris-setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "22 4.6 3.6 1.0 0.2 Iris-setosa\n", + "13 4.3 3.0 1.1 0.1 Iris-setosa\n", + "14 5.8 4.0 1.2 0.2 Iris-setosa\n", + "35 5.0 3.2 1.2 0.2 Iris-setosa\n", + "36 5.5 3.5 1.3 0.2 Iris-setosa\n", + "40 5.0 3.5 1.3 0.3 Iris-setosa\n", + "38 4.4 3.0 1.3 0.2 Iris-setosa\n", + "42 4.4 3.2 1.3 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "41 4.5 2.3 1.3 0.3 Iris-setosa\n", + "16 5.4 3.9 1.3 0.4 Iris-setosa\n", + "17 5.1 3.5 1.4 0.3 Iris-setosa\n", + "45 4.8 3.0 1.4 0.3 Iris-setosa\n", + "33 5.5 4.2 1.4 0.2 Iris-setosa\n", + "28 5.2 3.4 1.4 0.2 Iris-setosa\n", + "47 4.6 3.2 1.4 0.2 Iris-setosa\n", + "49 5.0 3.3 1.4 0.2 Iris-setosa\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "12 4.8 3.0 1.4 0.1 Iris-setosa\n", + "6 4.6 3.4 1.4 0.3 Iris-setosa\n", + "8 4.4 2.9 1.4 0.2 Iris-setosa\n", + "34 4.9 3.1 1.5 0.1 Iris-setosa\n", + "10 5.4 3.7 1.5 0.2 Iris-setosa\n", + "32 5.2 4.1 1.5 0.1 Iris-setosa\n", + "31 5.4 3.4 1.5 0.4 Iris-setosa\n", + "15 5.7 4.4 1.5 0.4 Iris-setosa\n", + "27 5.2 3.5 1.5 0.2 Iris-setosa\n", + "9 4.9 3.1 1.5 0.1 Iris-setosa\n", + "7 5.0 3.4 1.5 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "48 5.3 3.7 1.5 0.2 Iris-setosa\n", + "21 5.1 3.7 1.5 0.4 Iris-setosa\n", + "19 5.1 3.8 1.5 0.3 Iris-setosa\n", + "39 5.1 3.4 1.5 0.2 Iris-setosa\n", + "37 4.9 3.1 1.5 0.1 Iris-setosa\n", + "30 4.8 3.1 1.6 0.2 Iris-setosa\n", + "29 4.7 3.2 1.6 0.2 Iris-setosa\n", + "11 4.8 3.4 1.6 0.2 Iris-setosa\n", + "26 5.0 3.4 1.6 0.4 Iris-setosa\n", + "25 5.0 3.0 1.6 0.2 Iris-setosa\n", + "46 5.1 3.8 1.6 0.2 Iris-setosa\n", + "43 5.0 3.5 1.6 0.6 Iris-setosa\n", + "18 5.7 3.8 1.7 0.3 Iris-setosa\n", + "5 5.4 3.9 1.7 0.4 Iris-setosa\n", + "23 5.1 3.3 1.7 0.5 Iris-setosa\n", + "20 5.4 3.4 1.7 0.2 Iris-setosa\n", + "24 4.8 3.4 1.9 0.2 Iris-setosa\n", + "44 5.1 3.8 1.9 0.4 Iris-setosa" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sort_values(by=\"petal_length\")[:50]\n", + "#so whole data is set according to petal length\n", + "#sort whole data frame\n", + "#we have to do sort in no. according to this data not categorical" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
605.02.03.51.0Iris-versicolor
626.02.24.01.0Iris-versicolor
1196.02.25.01.5Iris-virginica
686.22.24.51.5Iris-versicolor
414.52.31.30.3Iris-setosa
535.52.34.01.3Iris-versicolor
935.02.33.31.0Iris-versicolor
876.32.34.41.3Iris-versicolor
815.52.43.71.0Iris-versicolor
805.52.43.81.1Iris-versicolor
574.92.43.31.0Iris-versicolor
726.32.54.91.5Iris-versicolor
1466.32.55.01.9Iris-virginica
985.12.53.01.1Iris-versicolor
1135.72.55.02.0Iris-virginica
1086.72.55.81.8Iris-virginica
695.62.53.91.1Iris-versicolor
895.52.54.01.3Iris-versicolor
1064.92.54.51.7Iris-virginica
925.82.64.01.2Iris-versicolor
795.72.63.51.0Iris-versicolor
905.52.64.41.2Iris-versicolor
1187.72.66.92.3Iris-virginica
1346.12.65.61.4Iris-virginica
1015.82.75.11.9Iris-virginica
945.62.74.21.3Iris-versicolor
595.22.73.91.4Iris-versicolor
1116.42.75.31.9Iris-virginica
825.82.73.91.2Iris-versicolor
675.82.74.11.0Iris-versicolor
1425.82.75.11.9Iris-virginica
1236.32.74.91.8Iris-virginica
836.02.75.11.6Iris-versicolor
1336.32.85.11.5Iris-virginica
1326.42.85.62.2Iris-virginica
1307.42.86.11.9Iris-virginica
1286.42.85.62.1Iris-virginica
546.52.84.61.5Iris-versicolor
736.12.84.71.2Iris-versicolor
1266.22.84.81.8Iris-virginica
995.72.84.11.3Iris-versicolor
1227.72.86.72.0Iris-virginica
1215.62.84.92.0Iris-virginica
1145.82.85.12.4Iris-virginica
716.12.84.01.3Iris-versicolor
766.82.84.81.4Iris-versicolor
555.72.84.51.3Iris-versicolor
786.02.94.51.5Iris-versicolor
586.62.94.61.3Iris-versicolor
645.62.93.61.3Iris-versicolor
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "60 5.0 2.0 3.5 1.0 Iris-versicolor\n", + "62 6.0 2.2 4.0 1.0 Iris-versicolor\n", + "119 6.0 2.2 5.0 1.5 Iris-virginica\n", + "68 6.2 2.2 4.5 1.5 Iris-versicolor\n", + "41 4.5 2.3 1.3 0.3 Iris-setosa\n", + "53 5.5 2.3 4.0 1.3 Iris-versicolor\n", + "93 5.0 2.3 3.3 1.0 Iris-versicolor\n", + "87 6.3 2.3 4.4 1.3 Iris-versicolor\n", + "81 5.5 2.4 3.7 1.0 Iris-versicolor\n", + "80 5.5 2.4 3.8 1.1 Iris-versicolor\n", + "57 4.9 2.4 3.3 1.0 Iris-versicolor\n", + "72 6.3 2.5 4.9 1.5 Iris-versicolor\n", + "146 6.3 2.5 5.0 1.9 Iris-virginica\n", + "98 5.1 2.5 3.0 1.1 Iris-versicolor\n", + "113 5.7 2.5 5.0 2.0 Iris-virginica\n", + "108 6.7 2.5 5.8 1.8 Iris-virginica\n", + "69 5.6 2.5 3.9 1.1 Iris-versicolor\n", + "89 5.5 2.5 4.0 1.3 Iris-versicolor\n", + "106 4.9 2.5 4.5 1.7 Iris-virginica\n", + "92 5.8 2.6 4.0 1.2 Iris-versicolor\n", + "79 5.7 2.6 3.5 1.0 Iris-versicolor\n", + "90 5.5 2.6 4.4 1.2 Iris-versicolor\n", + "118 7.7 2.6 6.9 2.3 Iris-virginica\n", + "134 6.1 2.6 5.6 1.4 Iris-virginica\n", + "101 5.8 2.7 5.1 1.9 Iris-virginica\n", + "94 5.6 2.7 4.2 1.3 Iris-versicolor\n", + "59 5.2 2.7 3.9 1.4 Iris-versicolor\n", + "111 6.4 2.7 5.3 1.9 Iris-virginica\n", + "82 5.8 2.7 3.9 1.2 Iris-versicolor\n", + "67 5.8 2.7 4.1 1.0 Iris-versicolor\n", + "142 5.8 2.7 5.1 1.9 Iris-virginica\n", + "123 6.3 2.7 4.9 1.8 Iris-virginica\n", + "83 6.0 2.7 5.1 1.6 Iris-versicolor\n", + "133 6.3 2.8 5.1 1.5 Iris-virginica\n", + "132 6.4 2.8 5.6 2.2 Iris-virginica\n", + "130 7.4 2.8 6.1 1.9 Iris-virginica\n", + "128 6.4 2.8 5.6 2.1 Iris-virginica\n", + "54 6.5 2.8 4.6 1.5 Iris-versicolor\n", + "73 6.1 2.8 4.7 1.2 Iris-versicolor\n", + "126 6.2 2.8 4.8 1.8 Iris-virginica\n", + "99 5.7 2.8 4.1 1.3 Iris-versicolor\n", + "122 7.7 2.8 6.7 2.0 Iris-virginica\n", + "121 5.6 2.8 4.9 2.0 Iris-virginica\n", + "114 5.8 2.8 5.1 2.4 Iris-virginica\n", + "71 6.1 2.8 4.0 1.3 Iris-versicolor\n", + "76 6.8 2.8 4.8 1.4 Iris-versicolor\n", + "55 5.7 2.8 4.5 1.3 Iris-versicolor\n", + "78 6.0 2.9 4.5 1.5 Iris-versicolor\n", + "58 6.6 2.9 4.6 1.3 Iris-versicolor\n", + "64 5.6 2.9 3.6 1.3 Iris-versicolor" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sort_values(by=\"sepal_width\")[:50]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
224.63.61.00.2Iris-setosa
134.33.01.10.1Iris-setosa
145.84.01.20.2Iris-setosa
355.03.21.20.2Iris-setosa
24.73.21.30.2Iris-setosa
365.53.51.30.2Iris-setosa
384.43.01.30.2Iris-setosa
424.43.21.30.2Iris-setosa
405.03.51.30.3Iris-setosa
414.52.31.30.3Iris-setosa
165.43.91.30.4Iris-setosa
124.83.01.40.1Iris-setosa
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
45.03.61.40.2Iris-setosa
84.42.91.40.2Iris-setosa
285.23.41.40.2Iris-setosa
335.54.21.40.2Iris-setosa
474.63.21.40.2Iris-setosa
495.03.31.40.2Iris-setosa
64.63.41.40.3Iris-setosa
175.13.51.40.3Iris-setosa
454.83.01.40.3Iris-setosa
94.93.11.50.1Iris-setosa
325.24.11.50.1Iris-setosa
344.93.11.50.1Iris-setosa
374.93.11.50.1Iris-setosa
34.63.11.50.2Iris-setosa
75.03.41.50.2Iris-setosa
105.43.71.50.2Iris-setosa
275.23.51.50.2Iris-setosa
395.13.41.50.2Iris-setosa
485.33.71.50.2Iris-setosa
195.13.81.50.3Iris-setosa
155.74.41.50.4Iris-setosa
215.13.71.50.4Iris-setosa
315.43.41.50.4Iris-setosa
114.83.41.60.2Iris-setosa
255.03.01.60.2Iris-setosa
294.73.21.60.2Iris-setosa
304.83.11.60.2Iris-setosa
465.13.81.60.2Iris-setosa
265.03.41.60.4Iris-setosa
435.03.51.60.6Iris-setosa
205.43.41.70.2Iris-setosa
185.73.81.70.3Iris-setosa
55.43.91.70.4Iris-setosa
235.13.31.70.5Iris-setosa
244.83.41.90.2Iris-setosa
445.13.81.90.4Iris-setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "22 4.6 3.6 1.0 0.2 Iris-setosa\n", + "13 4.3 3.0 1.1 0.1 Iris-setosa\n", + "14 5.8 4.0 1.2 0.2 Iris-setosa\n", + "35 5.0 3.2 1.2 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "36 5.5 3.5 1.3 0.2 Iris-setosa\n", + "38 4.4 3.0 1.3 0.2 Iris-setosa\n", + "42 4.4 3.2 1.3 0.2 Iris-setosa\n", + "40 5.0 3.5 1.3 0.3 Iris-setosa\n", + "41 4.5 2.3 1.3 0.3 Iris-setosa\n", + "16 5.4 3.9 1.3 0.4 Iris-setosa\n", + "12 4.8 3.0 1.4 0.1 Iris-setosa\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa\n", + "8 4.4 2.9 1.4 0.2 Iris-setosa\n", + "28 5.2 3.4 1.4 0.2 Iris-setosa\n", + "33 5.5 4.2 1.4 0.2 Iris-setosa\n", + "47 4.6 3.2 1.4 0.2 Iris-setosa\n", + "49 5.0 3.3 1.4 0.2 Iris-setosa\n", + "6 4.6 3.4 1.4 0.3 Iris-setosa\n", + "17 5.1 3.5 1.4 0.3 Iris-setosa\n", + "45 4.8 3.0 1.4 0.3 Iris-setosa\n", + "9 4.9 3.1 1.5 0.1 Iris-setosa\n", + "32 5.2 4.1 1.5 0.1 Iris-setosa\n", + "34 4.9 3.1 1.5 0.1 Iris-setosa\n", + "37 4.9 3.1 1.5 0.1 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "7 5.0 3.4 1.5 0.2 Iris-setosa\n", + "10 5.4 3.7 1.5 0.2 Iris-setosa\n", + "27 5.2 3.5 1.5 0.2 Iris-setosa\n", + "39 5.1 3.4 1.5 0.2 Iris-setosa\n", + "48 5.3 3.7 1.5 0.2 Iris-setosa\n", + "19 5.1 3.8 1.5 0.3 Iris-setosa\n", + "15 5.7 4.4 1.5 0.4 Iris-setosa\n", + "21 5.1 3.7 1.5 0.4 Iris-setosa\n", + "31 5.4 3.4 1.5 0.4 Iris-setosa\n", + "11 4.8 3.4 1.6 0.2 Iris-setosa\n", + "25 5.0 3.0 1.6 0.2 Iris-setosa\n", + "29 4.7 3.2 1.6 0.2 Iris-setosa\n", + "30 4.8 3.1 1.6 0.2 Iris-setosa\n", + "46 5.1 3.8 1.6 0.2 Iris-setosa\n", + "26 5.0 3.4 1.6 0.4 Iris-setosa\n", + "43 5.0 3.5 1.6 0.6 Iris-setosa\n", + "20 5.4 3.4 1.7 0.2 Iris-setosa\n", + "18 5.7 3.8 1.7 0.3 Iris-setosa\n", + "5 5.4 3.9 1.7 0.4 Iris-setosa\n", + "23 5.1 3.3 1.7 0.5 Iris-setosa\n", + "24 4.8 3.4 1.9 0.2 Iris-setosa\n", + "44 5.1 3.8 1.9 0.4 Iris-setosa" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sort_values(by=[\"petal_length\",\"petal_width\"])[:50]\n", + "#first sort petallength then petal width \n", + "#if we have to pass two feature then pass a list in DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.7644204199522626" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"petal_length\"].std()\n", + "#axis=0 is index row\n", + "#axis =1 is col" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sepal_length 5.843333\n", + "sepal_width 3.054000\n", + "petal_length 3.758667\n", + "petal_width 1.198667\n", + "dtype: float64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "abs(-10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Group by" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "byspecies=df.groupby(by=\"species\") # basically its grouping whole df only col we have passed\n", + "#whole df grouping by species\n", + "#you can only group by categorically\n", + "#or\n", + "#df.groupby(\"species\").min() #instead of creating an obj" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "byspecies\n", + "#group by object\n", + "#itwill not show anything\n", + "#till u pass aggregate function-max,min.median" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_width
species
Iris-setosa5.84.41.90.6
Iris-versicolor7.03.45.11.8
Iris-virginica7.93.86.92.5
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width\n", + "species \n", + "Iris-setosa 5.8 4.4 1.9 0.6\n", + "Iris-versicolor 7.0 3.4 5.1 1.8\n", + "Iris-virginica 7.9 3.8 6.9 2.5" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "byspecies.max()\n", + "#so species here is grouped by" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_width
species
Iris-setosa4.32.31.00.1
Iris-versicolor4.92.03.01.0
Iris-virginica4.92.24.51.4
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width\n", + "species \n", + "Iris-setosa 4.3 2.3 1.0 0.1\n", + "Iris-versicolor 4.9 2.0 3.0 1.0\n", + "Iris-virginica 4.9 2.2 4.5 1.4" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "byspecies.min()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_width
species
Iris-setosa5.0063.4181.4640.244
Iris-versicolor5.9362.7704.2601.326
Iris-virginica6.5882.9745.5522.026
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width\n", + "species \n", + "Iris-setosa 5.006 3.418 1.464 0.244\n", + "Iris-versicolor 5.936 2.770 4.260 1.326\n", + "Iris-virginica 6.588 2.974 5.552 2.026" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "byspecies.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
speciesIris-setosaIris-versicolorIris-virginica
sepal_lengthcount50.00000050.00000050.000000
mean5.0060005.9360006.588000
std0.3524900.5161710.635880
min4.3000004.9000004.900000
25%4.8000005.6000006.225000
50%5.0000005.9000006.500000
75%5.2000006.3000006.900000
max5.8000007.0000007.900000
sepal_widthcount50.00000050.00000050.000000
mean3.4180002.7700002.974000
std0.3810240.3137980.322497
min2.3000002.0000002.200000
25%3.1250002.5250002.800000
50%3.4000002.8000003.000000
75%3.6750003.0000003.175000
max4.4000003.4000003.800000
petal_lengthcount50.00000050.00000050.000000
mean1.4640004.2600005.552000
std0.1735110.4699110.551895
min1.0000003.0000004.500000
25%1.4000004.0000005.100000
50%1.5000004.3500005.550000
75%1.5750004.6000005.875000
max1.9000005.1000006.900000
petal_widthcount50.00000050.00000050.000000
mean0.2440001.3260002.026000
std0.1072100.1977530.274650
min0.1000001.0000001.400000
25%0.2000001.2000001.800000
50%0.2000001.3000002.000000
75%0.3000001.5000002.300000
max0.6000001.8000002.500000
\n", + "
" + ], + "text/plain": [ + "species Iris-setosa Iris-versicolor Iris-virginica\n", + "sepal_length count 50.000000 50.000000 50.000000\n", + " mean 5.006000 5.936000 6.588000\n", + " std 0.352490 0.516171 0.635880\n", + " min 4.300000 4.900000 4.900000\n", + " 25% 4.800000 5.600000 6.225000\n", + " 50% 5.000000 5.900000 6.500000\n", + " 75% 5.200000 6.300000 6.900000\n", + " max 5.800000 7.000000 7.900000\n", + "sepal_width count 50.000000 50.000000 50.000000\n", + " mean 3.418000 2.770000 2.974000\n", + " std 0.381024 0.313798 0.322497\n", + " min 2.300000 2.000000 2.200000\n", + " 25% 3.125000 2.525000 2.800000\n", + " 50% 3.400000 2.800000 3.000000\n", + " 75% 3.675000 3.000000 3.175000\n", + " max 4.400000 3.400000 3.800000\n", + "petal_length count 50.000000 50.000000 50.000000\n", + " mean 1.464000 4.260000 5.552000\n", + " std 0.173511 0.469911 0.551895\n", + " min 1.000000 3.000000 4.500000\n", + " 25% 1.400000 4.000000 5.100000\n", + " 50% 1.500000 4.350000 5.550000\n", + " 75% 1.575000 4.600000 5.875000\n", + " max 1.900000 5.100000 6.900000\n", + "petal_width count 50.000000 50.000000 50.000000\n", + " mean 0.244000 1.326000 2.026000\n", + " std 0.107210 0.197753 0.274650\n", + " min 0.100000 1.000000 1.400000\n", + " 25% 0.200000 1.200000 1.800000\n", + " 50% 0.200000 1.300000 2.000000\n", + " 75% 0.300000 1.500000 2.300000\n", + " max 0.600000 1.800000 2.500000" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "byspecies.describe().T" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create a CSV file from dataframe" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "#create csv ==> to_csv()\n", + "df.to_csv(\"my_file.csv\",index=False) #create a new csv file\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspeciesnew_column
05.13.51.40.2Iris-setosa1.96
14.93.01.40.2Iris-setosa1.96
24.73.21.30.2Iris-setosa1.69
34.63.11.50.2Iris-setosa2.25
45.03.61.40.2Iris-setosa1.96
.....................
1456.73.05.22.3Iris-virginica27.04
1466.32.55.01.9Iris-virginica25.00
1476.53.05.22.0Iris-virginica27.04
1486.23.45.42.3Iris-virginica29.16
1495.93.05.11.8Iris-virginica26.01
\n", + "

150 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species \\\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa \n", + "1 4.9 3.0 1.4 0.2 Iris-setosa \n", + "2 4.7 3.2 1.3 0.2 Iris-setosa \n", + "3 4.6 3.1 1.5 0.2 Iris-setosa \n", + "4 5.0 3.6 1.4 0.2 Iris-setosa \n", + ".. ... ... ... ... ... \n", + "145 6.7 3.0 5.2 2.3 Iris-virginica \n", + "146 6.3 2.5 5.0 1.9 Iris-virginica \n", + "147 6.5 3.0 5.2 2.0 Iris-virginica \n", + "148 6.2 3.4 5.4 2.3 Iris-virginica \n", + "149 5.9 3.0 5.1 1.8 Iris-virginica \n", + "\n", + " new_column \n", + "0 1.96 \n", + "1 1.96 \n", + "2 1.69 \n", + "3 2.25 \n", + "4 1.96 \n", + ".. ... \n", + "145 27.04 \n", + "146 25.00 \n", + "147 27.04 \n", + "148 29.16 \n", + "149 26.01 \n", + "\n", + "[150 rows x 6 columns]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.read_csv(\"my_file.csv\") #its saving two indexes so we do above false to remove\n", + "#" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "#pd.concat() and pass sequence of 2 df obj\n", + "#pd.merge()\n", + "#see python.org \n", + "#data frame merge" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 1\n", + "1 1\n", + "2 1\n", + "3 1\n", + "4 1\n", + " ..\n", + "145 5\n", + "146 5\n", + "147 5\n", + "148 5\n", + "149 5\n", + "Name: petal_length, Length: 150, dtype: int64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"petal_length\"].apply(int)\n", + "#so it convert in integer" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "def my_custom(x):\n", + " return x**2" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 1.96\n", + "1 1.96\n", + "2 1.69\n", + "3 2.25\n", + "4 1.96\n", + " ... \n", + "145 27.04\n", + "146 25.00\n", + "147 27.04\n", + "148 29.16\n", + "149 26.01\n", + "Name: petal_length, Length: 150, dtype: float64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"petal_length\"].apply(my_custom)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "df[\"new_column\"]=df[\"petal_length\"].apply(my_custom)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len #len is aslo a func" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspeciesnew_column
05.13.51.40.2Iris-setosa1.96
14.93.01.40.2Iris-setosa1.96
24.73.21.30.2Iris-setosa1.69
34.63.11.50.2Iris-setosa2.25
45.03.61.40.2Iris-setosa1.96
.....................
1456.73.05.22.3Iris-virginica27.04
1466.32.55.01.9Iris-virginica25.00
1476.53.05.22.0Iris-virginica27.04
1486.23.45.42.3Iris-virginica29.16
1495.93.05.11.8Iris-virginica26.01
\n", + "

150 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species \\\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa \n", + "1 4.9 3.0 1.4 0.2 Iris-setosa \n", + "2 4.7 3.2 1.3 0.2 Iris-setosa \n", + "3 4.6 3.1 1.5 0.2 Iris-setosa \n", + "4 5.0 3.6 1.4 0.2 Iris-setosa \n", + ".. ... ... ... ... ... \n", + "145 6.7 3.0 5.2 2.3 Iris-virginica \n", + "146 6.3 2.5 5.0 1.9 Iris-virginica \n", + "147 6.5 3.0 5.2 2.0 Iris-virginica \n", + "148 6.2 3.4 5.4 2.3 Iris-virginica \n", + "149 5.9 3.0 5.1 1.8 Iris-virginica \n", + "\n", + " new_column \n", + "0 1.96 \n", + "1 1.96 \n", + "2 1.69 \n", + "3 2.25 \n", + "4 1.96 \n", + ".. ... \n", + "145 27.04 \n", + "146 25.00 \n", + "147 27.04 \n", + "148 29.16 \n", + "149 26.01 \n", + "\n", + "[150 rows x 6 columns]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data Visualisation\n", + "able to plot visualize something" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[,\n", + " ],\n", + " [,\n", + " ],\n", + " [,\n", + " ]],\n", + " dtype=object)" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.hist()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#EDA using pandas ,matplotlib,seaborn depending on data\n", + "df['petal_length'].hist()\n", + "#or \n", + "#df.hist(column=\"petal_length\")" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[]],\n", + " dtype=object)" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.hist(column=\"petal_length\")" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[]],\n", + " dtype=object)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df[df['species']==\"Iris-setosa\"].hist('petal_length',bins=10) #size of box is bin\n", + "#this means only taking iris setosa flower df['species']==\"Iris-setosa\"\n", + "#then drawing histogram for petal length of setosa" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#matplotlib is more focussed towards DVisulization\n", + "df.plot.kde()" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD5CAYAAAA+0W6bAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAUTElEQVR4nO3df5BdZX3H8c9nQ5QIAQJZ0gjCOjbVjTjguEWRFPk9AbTBisWgbdLJNOlgUIsUopkiWDMu1LGO2KpBKBmhaaNSgcRRYjQkQUA3SCAhljAQhDZDIj9iJEAC+faP82xys7m79+69u3v3uft+zezcc86eH8997rmf+5znnHuPI0IAgPy0NLoAAIDaEOAAkCkCHAAyRYADQKYIcADI1EFDubHx48dHW1vbUG4SALK3du3a30VEa8/pQxrgbW1t6urqGspNAkD2bD9VbjpdKACQKQIcADJFgANApghwAMgUAQ4AmSLAASBTBDgAZIoAB4BMDekXeQBgOLE9IOtp1H0VaIEDGLEios+/469aWnGeRt4UhwAHgEwR4ACQKQIcADJFgANApghwAMgUAQ4AmSLAASBTBDgAZIoAB4BMEeAAkCkCHAAyRYADQKYIcADIFAEOAJkiwAEgUwQ4AGSKAAeATBHgAJApAhwAMkWAA0CmCHAAyBQBDgCZIsABIFMEOABkigAHgEwR4ACQKQIcADJVdYDbHmX717aXpvEjbS+3vSk9jhu8YgIAeupPC/zTkjaWjM+TtCIiJklakcYBAEOkqgC3faykCyR9p2TyNEmL0vAiSRcObNEAAH2ptgX+NUlXStpTMm1CRGyRpPR4dLkFbc+23WW7a9u2bXUVFgCwT8UAt/1BSVsjYm0tG4iIhRHREREdra2ttawCAFDGQVXMc6qkP7d9vqSDJR1m+1ZJz9qeGBFbbE+UtHUwCwoA2F/FFnhEfC4ijo2INkkfk/SziPiEpDslzUizzZB0x6CVEgBwgHquA++UdI7tTZLOSeMAgCFSTRfKXhGxUtLKNPycpLMGvkgAgGrwTUwAyBQBDgCZIsABIFMEOABkigAHgEwR4ACQKQIcADJFgANApghwAMgUAQ4AmSLAASBTBDgAZIoAB4BMEeAAkCkCHAAyRYADQKYIcADIFAEOAJkiwAEgUwQ4AGSKAAeATBHgAJApAhwAMkWAA0CmCHAAyBQBDgCZIsABIFMEOABkigAHgEwR4ACQKQIcADJFgANApioGuO2Dbf/S9jrbG2xfm6YfaXu57U3pcdzgFxcA0K2aFvirks6MiBMlnSRpqu33SZonaUVETJK0Io0DAIZIxQCPwh/S6Oj0F5KmSVqUpi+SdOGglBAAUFZVfeC2R9l+SNJWScsj4gFJEyJiiySlx6MHr5gAgJ6qCvCIeD0iTpJ0rKSTbZ9Q7QZsz7bdZbtr27ZttZYTANBDv65CiYgXJa2UNFXSs7YnSlJ63NrLMgsjoiMiOlpbW+ssLgCgWzVXobTaPiINj5F0tqTfSLpT0ow02wxJdwxWIQEABzqoinkmSlpke5SKwF8SEUtt3ydpie1Zkn4r6aODWE4AQA8VAzwiHpb07jLTn5N01mAUCgBQGd/EBIBMEeAAkCkCHAAyRYADQKYIcADIFAEOAJkiwAEgUwQ4AGSKAAeATBHgAJApAhwAMlXNj1kBQJZOvPZubX95d13raJu3rK7lDx8zWuu+cG5d6+gNAQ6gaW1/ebc2d17Q0DLU+wHQF7pQACBTBDgAZIoAB4BMEeAAkCkCHAAyRYADQKYIcADIFAEOAJkiwAEgUwQ4AGSKAAeATBHgAJApAhwAMkWAA0CmCHAAyBQBDgCZIsABIFMEOABkigAHgEwR4ACQqYoBbvsttn9ue6PtDbY/naYfaXu57U3pcdzgFxcA0K2aFvhrkj4bEe2S3ifpk7YnS5onaUVETJK0Io0DAIZIxQCPiC0R8WAa3iFpo6RjJE2TtCjNtkjShYNVSADAgfrVB267TdK7JT0gaUJEbJGKkJd0dC/LzLbdZbtr27Zt9ZUWALBX1QFu+1BJP5D0mYj4fbXLRcTCiOiIiI7W1tZayggAKKOqALc9WkV43xYRt6fJz9qemP4/UdLWwSkiAKCcaq5CsaSbJG2MiK+W/OtOSTPS8AxJdwx88QAAvTmoinlOlfRXkh6x/VCa9nlJnZKW2J4l6beSPjo4RQQAlFMxwCNijST38u+zBrY4ADBwxrbP07sWNfYK57HtknTBoKy7mhY4AGRpx8ZObe4cnPCsVtu8ZYO2br5KDwCZIsABIFMEOABkigAHgEwR4ACQKQIcADJFgANApghwAMgUAQ4AmSLAASBTBDgAZIoAB4BMEeAAkCkCHAAyRYADQKYIcADIFAEOAJkiwAEgUwQ4AGSKAAeATBHgAJApAhwAMkWAA0CmCHAAyBQBDgCZIsABIFMEOABkigAHgEwR4ACQKQIcADJFgANApghwAMhUxQC3fbPtrbbXl0w70vZy25vS47jBLSYAoKdqWuC3SJraY9o8SSsiYpKkFWkcADCEKgZ4RKyS9HyPydMkLUrDiyRdOMDlAgBUUGsf+ISI2CJJ6fHo3ma0Pdt2l+2ubdu21bg5AEBPg34SMyIWRkRHRHS0trYO9uYAYMSoNcCftT1RktLj1oErEgCgGrUG+J2SZqThGZLuGJjiAACqVc1lhIsl3Sfp7bafsT1LUqekc2xvknROGgcADKGDKs0QEdN7+ddZA1wWAEA/8E1MAMgUAQ4AmSLAASBTFfvAc2N7QNYTEQOyHgAYLE3XAo+IPv+Ov2ppxXkIbwA5aLoAB4CRggAHgEw1XR84UA7nRtCMaIFjRODcCJpRdi3wE6+9W9tf3l3XOtrmLatr+cPHjNa6L5xb1zoAoF7ZBfj2l3drc+cFDS1DvR8AADAQsgvwse3z9K5Fjb2D29h2SWrshwgAZBfgOzZ20gIHAHESEwCylV0LXGp8C/jwMaMbuv16LV68WAsWLNDGjRvV3t6u+fPna/r03n41OA+c3MZIlF2A19t90jZvWcO7YBpp8eLFmjNnjl555RXt2bNHjz32mObMmSNJWYc4J7cxEtGFMsLMnTtXO3fuVGdnp1566SV1dnZq586dmjt3bqOLBqCfsmuBoz7PP/+8rr/+el1++eWSpMsvv1yvv/66rrzyygaXrD5cnYSRqOkCvJqvTPu6yutp5m/dnXDCCX2O54irkzASNV2AN3Pw9ldvH2bnn39+v+anToHhiT7wJlbutzzmzp2rlpYWTZgwQZI0YcIEtbS0aO7cufz+B5CZpmuBo2833HCDJOnGG2+UJL344ou69NJL904HkA8CPGM1X/t8yFT90Wem7h29S9JdNfbfcu0z0DgEeMb2tH1WYxtdBknSIw0uBTAyEeAZ27Gxs6blXnr0Hm2/77+0+7lnNPqoY3X4KRfrkMkfqGlduX8rFcgZAZ6xWi6bW7x4seYv+b6WLLlFM3/0e91y/mGaNWuWFkx/d9bfxET1RtrdiRp9eedgNnII8CbW1xv1zDPPLB6/UoxfcskluuSSS8rOm8sbFdWp9Ho2089NNPtPb3AZYRMrd0lgS0uLdu3atd+0Xbt2qaWlhcsIgczQAh9h2tvbtWbNGp1xxhl7p61Zs0bt7e0NLBUGEr/MOHIQ4CPM/PnzNWvWLN10002aMmWK1qxZU/SBL1jQ6KLVrZn7OvuDX2YcOQjwEab7ROVll1229/fAFyxYkP0JzGbv6+wPfthr5PBQ9nF2dHREV1fXkG0P6DaSrrwYDh9Gw6EM1chlv7C9NiI6ek6v6ySm7am2/8f247Yb+5EP9KG3E7T9/UNzyX2/qDnAbY+S9K+SzpM0WdJ025MHqmAAgL7V0wd+sqTHI+IJSbL9n5KmSXp0IAoGoHaNPok4XE7oNrt6AvwYSU+XjD8j6b09Z7I9W9JsSTruuOPq2ByAalTqe86l3xeV1dMHXm4vOOAVjYiFEdERER2tra11bA7AQMi93xf71BPgz0h6S8n4sZL+r77iAACqVU+A/0rSJNtvtf0GSR+TdOfAFAsAUEnNfeAR8ZrtuZJ+ImmUpJsjYsOAlQwA0Ke6vokZET+S9KMBKgsAoB/4NUIAyBQBDgCZIsABIFMEOABkakh/jdD2NklPDdkGyxsv6XcNLsNwQV3sQ13sQ13sM1zq4viIOOCbkEMa4MOB7a5yP8s4ElEX+1AX+1AX+wz3uqALBQAyRYADQKZGYoAvbHQBhhHqYh/qYh/qYp9hXRcjrg8cAJrFSGyBA0BTIMABIFMEOABkqukC3Pbptpf28f+Ztr8xCNudafvNJeObbY8f6O3UolKdVLF8h+2v9/K/zbbH2z7C9qUDtc1+lG2/eu9jvltsX9TH/1faHtDrfXOvkyqW/6Lts8tM3/s80/D7B2qbw8lweI83XYA30ExJFd80OYqIroj4VIXZjpB0aYV5BsNMDd96b+o6iYirI+KnFWY7XdL7K8yDGjUkwG0fYnuZ7XW219u+2PZ7bN9je63tn9iemOZdaftrtn+R5j05TT85Tft1enx7DeVotf0D279Kf6em6dfYvjlt+wnbnypZ5h9t/8b2ctuLbV+RWhQdkm6z/ZDtMWn2y2w/aPsR2+8YrnWSyneEC8/Z/us0/bu2z+7RojrK9t1pG9/Wvnujdkp6W3r+/5ymHWr7+6m+brMr303Xdluaf5Hth9PybypXF+Xq3fbV6bVcb3thNdssU4Zzbd+XXrvv2T40Td9s+9qer2naj5an6d+2/VRqmWVbJ2lfuj0NT7P9su032D7Y9hNp+t7WtO2pqYxrJP1Fd7kl/Z2kv09l+bO0+tPS/vmEq2yNpzrYaPtG2xvSPjjG9tts/zjVwWrb77A9Kq3bab/eY/u0tJ7Vtv+4l20cavvf02v7sO2PpOnT07T1tq/rpWzrS8avsH1NGl5p+19sr0rl/1Pbt9veZPtLfT23auplwG5w2s+boX5E0o0l44dL+oWk1jR+sYo7/EjSyu55JZ0maX0aPkzSQWn4bEk/SMOnS1rax7ZnSvpGGv4PSVPS8HGSNqbha1J53qjitxCekzRaxRvjIUljJI2VtEnSFSXl7CjZzmZJl6XhSyV9ZxjXybckXSDpBBW3yute9yZJh5YuL+nrkq5OwxeouJH1eElt3eUo2eZ2FfdKbZF0X3ddV6iHtrTOU9P4zZL+oUJdlNb7kSXD35X0oTR8i6SL+tjuyvT6jpe0StIhafpVJc+37Gsq6RuSPpeGpzZDnai42cuTafgrab84VdIHJC0uXV7SwZKeljRJxQf6kpL95Rql90jJMt9Lz3+ypMerzIw2Sa9JOimNL5H0CUkrJE1K094r6Wdp+MeS3inpg6ns81W8n5/sYxvXSfpayfg4FUcyv5XUmurkZ5IuLNkfyr3OV0i6puS1uC4Nf1rFfYMnprI8I+mo3p5bNfVS1x156vCIpK+kT7Olkl5QER7LU+NglKQtJfMvlqSIWGX7MNtHqAjQRbYnqdi5R9dQjrMlTS5pkBxme2waXhYRr0p61fZWSRMkTZF0R0S8LEm276qw/tvT41qlVkkfGlknq1V8EDwl6ZuSZts+RtLzEfGHHg2207qfS0Qss/1CH+v9ZUQ8I0m2H1Kxo66pojxPR8S9afhWSZ9X33VR6gzbV0p6k6QjJW2QVOl1KvU+FcFyb9rWG1QEbbdyr+kUSR+WpIj4cTPUSRS3THzcdrukkyV9VcVrP0rF/lLqHSqCcVN6XrdKmt3H6n8YEXskPWp7Ql/l6OHJiHgoDa9VUXfvl/S9kn30jemxe59+q6QvS/pbSfeoCPPenK3i3r6SpIh4IbXcV0bENkmyfVta7w/7Ue7uewU/ImlDRGxJ63pCxY3hX+zluVXUkACPiMdsv0fS+Soqd7mKJ3ZKb4uUGf8nST+PiA+nQ7WVNRSlRdIp3YHcLe0Mr5ZMel1FXfX3cLx7Hd3L96rBdbJK0idVHIXMVxFGF+nAN2pv2+5NuTqsRs/171DfdSFJsn2wpH9T0fp8Oh3GHlzlNveuRtLyiJjey//Lvab92S9yqpPVks6TtFvST1W0nkepaGFWKl9fSuugnrqbIOnFiDipzLyrVXTfvFnS1SqOWE5Xsa/3xjrweVRTvte0f3d0z/rtLvce7f8c9mjf69/zuVXVhdKoPvA3S9oZEbeqODx7r6RW26ek/4+2/c6SRS5O06dI2h4R21V0Mfxv+v/MGotyt6S5JeUqtyOUWiPpQ6kf8FAVXQjddqhoAdekkXUSEU+rOBScFBFPqHieV6h8gK+S9PG07fNUHGZKdT7/Ho7rft6Spku6X73XRel2u984v0uvTy1XO9wv6dTuflIXfc1/UmGZNZL+Ms1/rpqnTlZJ+oyk+1IL9CgVre2eNy//jaS32n5bSfm6DWQd9PR7SU/a/qgkpT7vE9P/HlDROt8TEa+o6Pqco94bJdKBeTAurecDLq60GqXiud3TY7lnJR3t4vzQG1V02wyJRl2F8i5Jv0yHkPNVfEJeJOk62+tUVHbpmesXbP9CRV/trDTteklftn2vilZBLT4lqSOdsHhUxSd2ryLiVyoOh9apOJTuUtGnKRWtk295/5OY/dHoOnlA0mNpeLWkY1T+0P5aFSehHpR0ror+QUXEcyq6HdZ73wm7Wm2UNMP2wyoO+W9Q73Vxi1K9q2jF3KjiUPWH6vtwuawUVDMlLU7bv19FaPXlWknnpjo5T0VXxo4mqJMHVLRyu1utD0t6OFJHbbcUkLMlLXNxErP0N//vkvRh738ScyB9XNKsVAcbJE1LZXpVRb/8/Wm+1So+SB7pY11fkjQuvV7rJJ2Rujs+J+nnKt73D0bEHaULRcRuSV9UUV9LVXygDYlh/1sotleqOAnS1eiySMWZ6tQv/CYVO/bsiHhwiMuwUsOoTgZS6vpZGhEnNLgoVUutrtdTv/Epkr7Zy2F9retvU2Z1gqHRqJOYOVtoe7KKQ9NFQx3eGJaOk7TEdoukXSpOmAGDbti3wGtl+29UXLZT6t6I+GQjyjMcUCeS7f9WcWVCqasi4ieNKM9wMNLqpJneB00b4ADQ7PgqPQBkigAHgEwR4ACQKQIcADL1/z0GPgVcLOLPAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.plot.box()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.plot.bar()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df[\"petal_length\"].plot.kde()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.plot.scatter(x=\"petal_length\",y=\"petal_width\")" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.plot.line()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#df.plot. explore more..." + ] + } + ], + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Pandas/Pandas.ipynb b/2.)PYTHON_BASICS/PYTHON Pandas/Pandas.ipynb new file mode 100644 index 00000000..32e888cc --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Pandas/Pandas.ipynb @@ -0,0 +1,3566 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "#Working with Toy Dataset\n", + "#download Iris Flower Dataset\n", + "#DATAFRAME - obj in pandas(dataype in pandas way of storing data)\n", + "df=pd.read_csv(\"./IRIS.csv\")\n", + "#this is comma seprate value\n", + "#their is also one tsv- tab sperated val" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
..................
1456.73.05.22.3Iris-virginica
1466.32.55.01.9Iris-virginica
1476.53.05.22.0Iris-virginica
1486.23.45.42.3Iris-virginica
1495.93.05.11.8Iris-virginica
\n", + "

150 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa\n", + ".. ... ... ... ... ...\n", + "145 6.7 3.0 5.2 2.3 Iris-virginica\n", + "146 6.3 2.5 5.0 1.9 Iris-virginica\n", + "147 6.5 3.0 5.2 2.0 Iris-virginica\n", + "148 6.2 3.4 5.4 2.3 Iris-virginica\n", + "149 5.9 3.0 5.1 1.8 Iris-virginica\n", + "\n", + "[150 rows x 5 columns]" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(150, 5)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()# first five rows of DataSet" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
1456.73.05.22.3Iris-virginica
1466.32.55.01.9Iris-virginica
1476.53.05.22.0Iris-virginica
1486.23.45.42.3Iris-virginica
1495.93.05.11.8Iris-virginica
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "145 6.7 3.0 5.2 2.3 Iris-virginica\n", + "146 6.3 2.5 5.0 1.9 Iris-virginica\n", + "147 6.5 3.0 5.2 2.0 Iris-virginica\n", + "148 6.2 3.4 5.4 2.3 Iris-virginica\n", + "149 5.9 3.0 5.1 1.8 Iris-virginica" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.tail() #last five rows of DataSet\n", + "#bydefault 5 rows" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.frame.DataFrame" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(df)\n", + "#DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "#convert dataFrame-->Numpy\n", + "#use==> .values\n", + "iris=pd.read_csv(\"./IRIS.csv\").values\n", + "#./ this represent current dir" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[5.1, 3.5, 1.4, 0.2],\n", + " [4.9, 3.0, 1.4, 0.2],\n", + " [4.7, 3.2, 1.3, 0.2],\n", + " [4.6, 3.1, 1.5, 0.2],\n", + " [5.0, 3.6, 1.4, 0.2],\n", + " [5.4, 3.9, 1.7, 0.4],\n", + " [4.6, 3.4, 1.4, 0.3],\n", + " [5.0, 3.4, 1.5, 0.2],\n", + " [4.4, 2.9, 1.4, 0.2],\n", + " [4.9, 3.1, 1.5, 0.1],\n", + " [5.4, 3.7, 1.5, 0.2],\n", + " [4.8, 3.4, 1.6, 0.2],\n", + " [4.8, 3.0, 1.4, 0.1],\n", + " [4.3, 3.0, 1.1, 0.1],\n", + " [5.8, 4.0, 1.2, 0.2],\n", + " [5.7, 4.4, 1.5, 0.4],\n", + " [5.4, 3.9, 1.3, 0.4],\n", + " [5.1, 3.5, 1.4, 0.3],\n", + " [5.7, 3.8, 1.7, 0.3],\n", + " [5.1, 3.8, 1.5, 0.3],\n", + " [5.4, 3.4, 1.7, 0.2],\n", + " [5.1, 3.7, 1.5, 0.4],\n", + " [4.6, 3.6, 1.0, 0.2],\n", + " [5.1, 3.3, 1.7, 0.5],\n", + " [4.8, 3.4, 1.9, 0.2],\n", + " [5.0, 3.0, 1.6, 0.2],\n", + " [5.0, 3.4, 1.6, 0.4],\n", + " [5.2, 3.5, 1.5, 0.2],\n", + " [5.2, 3.4, 1.4, 0.2],\n", + " [4.7, 3.2, 1.6, 0.2],\n", + " [4.8, 3.1, 1.6, 0.2],\n", + " [5.4, 3.4, 1.5, 0.4],\n", + " [5.2, 4.1, 1.5, 0.1],\n", + " [5.5, 4.2, 1.4, 0.2],\n", + " [4.9, 3.1, 1.5, 0.1],\n", + " [5.0, 3.2, 1.2, 0.2],\n", + " [5.5, 3.5, 1.3, 0.2],\n", + " [4.9, 3.1, 1.5, 0.1],\n", + " [4.4, 3.0, 1.3, 0.2],\n", + " [5.1, 3.4, 1.5, 0.2],\n", + " [5.0, 3.5, 1.3, 0.3],\n", + " [4.5, 2.3, 1.3, 0.3],\n", + " [4.4, 3.2, 1.3, 0.2],\n", + " [5.0, 3.5, 1.6, 0.6],\n", + " [5.1, 3.8, 1.9, 0.4],\n", + " [4.8, 3.0, 1.4, 0.3],\n", + " [5.1, 3.8, 1.6, 0.2],\n", + " [4.6, 3.2, 1.4, 0.2],\n", + " [5.3, 3.7, 1.5, 0.2],\n", + " [5.0, 3.3, 1.4, 0.2],\n", + " [7.0, 3.2, 4.7, 1.4],\n", + " [6.4, 3.2, 4.5, 1.5],\n", + " [6.9, 3.1, 4.9, 1.5],\n", + " [5.5, 2.3, 4.0, 1.3],\n", + " [6.5, 2.8, 4.6, 1.5],\n", + " [5.7, 2.8, 4.5, 1.3],\n", + " [6.3, 3.3, 4.7, 1.6],\n", + " [4.9, 2.4, 3.3, 1.0],\n", + " [6.6, 2.9, 4.6, 1.3],\n", + " [5.2, 2.7, 3.9, 1.4],\n", + " [5.0, 2.0, 3.5, 1.0],\n", + " [5.9, 3.0, 4.2, 1.5],\n", + " [6.0, 2.2, 4.0, 1.0],\n", + " [6.1, 2.9, 4.7, 1.4],\n", + " [5.6, 2.9, 3.6, 1.3],\n", + " [6.7, 3.1, 4.4, 1.4],\n", + " [5.6, 3.0, 4.5, 1.5],\n", + " [5.8, 2.7, 4.1, 1.0],\n", + " [6.2, 2.2, 4.5, 1.5],\n", + " [5.6, 2.5, 3.9, 1.1],\n", + " [5.9, 3.2, 4.8, 1.8],\n", + " [6.1, 2.8, 4.0, 1.3],\n", + " [6.3, 2.5, 4.9, 1.5],\n", + " [6.1, 2.8, 4.7, 1.2],\n", + " [6.4, 2.9, 4.3, 1.3],\n", + " [6.6, 3.0, 4.4, 1.4],\n", + " [6.8, 2.8, 4.8, 1.4],\n", + " [6.7, 3.0, 5.0, 1.7],\n", + " [6.0, 2.9, 4.5, 1.5],\n", + " [5.7, 2.6, 3.5, 1.0],\n", + " [5.5, 2.4, 3.8, 1.1],\n", + " [5.5, 2.4, 3.7, 1.0],\n", + " [5.8, 2.7, 3.9, 1.2],\n", + " [6.0, 2.7, 5.1, 1.6],\n", + " [5.4, 3.0, 4.5, 1.5],\n", + " [6.0, 3.4, 4.5, 1.6],\n", + " [6.7, 3.1, 4.7, 1.5],\n", + " [6.3, 2.3, 4.4, 1.3],\n", + " [5.6, 3.0, 4.1, 1.3],\n", + " [5.5, 2.5, 4.0, 1.3],\n", + " [5.5, 2.6, 4.4, 1.2],\n", + " [6.1, 3.0, 4.6, 1.4],\n", + " [5.8, 2.6, 4.0, 1.2],\n", + " [5.0, 2.3, 3.3, 1.0],\n", + " [5.6, 2.7, 4.2, 1.3],\n", + " [5.7, 3.0, 4.2, 1.2],\n", + " [5.7, 2.9, 4.2, 1.3],\n", + " [6.2, 2.9, 4.3, 1.3],\n", + " [5.1, 2.5, 3.0, 1.1],\n", + " [5.7, 2.8, 4.1, 1.3],\n", + " [6.3, 3.3, 6.0, 2.5],\n", + " [5.8, 2.7, 5.1, 1.9],\n", + " [7.1, 3.0, 5.9, 2.1],\n", + " [6.3, 2.9, 5.6, 1.8],\n", + " [6.5, 3.0, 5.8, 2.2],\n", + " [7.6, 3.0, 6.6, 2.1],\n", + " [4.9, 2.5, 4.5, 1.7],\n", + " [7.3, 2.9, 6.3, 1.8],\n", + " [6.7, 2.5, 5.8, 1.8],\n", + " [7.2, 3.6, 6.1, 2.5],\n", + " [6.5, 3.2, 5.1, 2.0],\n", + " [6.4, 2.7, 5.3, 1.9],\n", + " [6.8, 3.0, 5.5, 2.1],\n", + " [5.7, 2.5, 5.0, 2.0],\n", + " [5.8, 2.8, 5.1, 2.4],\n", + " [6.4, 3.2, 5.3, 2.3],\n", + " [6.5, 3.0, 5.5, 1.8],\n", + " [7.7, 3.8, 6.7, 2.2],\n", + " [7.7, 2.6, 6.9, 2.3],\n", + " [6.0, 2.2, 5.0, 1.5],\n", + " [6.9, 3.2, 5.7, 2.3],\n", + " [5.6, 2.8, 4.9, 2.0],\n", + " [7.7, 2.8, 6.7, 2.0],\n", + " [6.3, 2.7, 4.9, 1.8],\n", + " [6.7, 3.3, 5.7, 2.1],\n", + " [7.2, 3.2, 6.0, 1.8],\n", + " [6.2, 2.8, 4.8, 1.8],\n", + " [6.1, 3.0, 4.9, 1.8],\n", + " [6.4, 2.8, 5.6, 2.1],\n", + " [7.2, 3.0, 5.8, 1.6],\n", + " [7.4, 2.8, 6.1, 1.9],\n", + " [7.9, 3.8, 6.4, 2.0],\n", + " [6.4, 2.8, 5.6, 2.2],\n", + " [6.3, 2.8, 5.1, 1.5],\n", + " [6.1, 2.6, 5.6, 1.4],\n", + " [7.7, 3.0, 6.1, 2.3],\n", + " [6.3, 3.4, 5.6, 2.4],\n", + " [6.4, 3.1, 5.5, 1.8],\n", + " [6.0, 3.0, 4.8, 1.8],\n", + " [6.9, 3.1, 5.4, 2.1],\n", + " [6.7, 3.1, 5.6, 2.4],\n", + " [6.9, 3.1, 5.1, 2.3],\n", + " [5.8, 2.7, 5.1, 1.9],\n", + " [6.8, 3.2, 5.9, 2.3],\n", + " [6.7, 3.3, 5.7, 2.5],\n", + " [6.7, 3.0, 5.2, 2.3],\n", + " [6.3, 2.5, 5.0, 1.9],\n", + " [6.5, 3.0, 5.2, 2.0],\n", + " [6.2, 3.4, 5.4, 2.3],\n", + " [5.9, 3.0, 5.1, 1.8]], dtype=object)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iris[:,:-1] #removing last column" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['sepal_length', 'sepal_width', 'petal_length', 'petal_width',\n", + " 'species'],\n", + " dtype='object')" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#exctracting all col ele\n", + "#and all ele in columns\n", + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 Iris-setosa\n", + "1 Iris-setosa\n", + "2 Iris-setosa\n", + "3 Iris-setosa\n", + "4 Iris-setosa\n", + " ... \n", + "145 Iris-virginica\n", + "146 Iris-virginica\n", + "147 Iris-virginica\n", + "148 Iris-virginica\n", + "149 Iris-virginica\n", + "Name: species, Length: 150, dtype: object" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"species\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_width
05.13.5
14.93.0
24.73.2
34.63.1
45.03.6
.........
1456.73.0
1466.32.5
1476.53.0
1486.23.4
1495.93.0
\n", + "

150 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width\n", + "0 5.1 3.5\n", + "1 4.9 3.0\n", + "2 4.7 3.2\n", + "3 4.6 3.1\n", + "4 5.0 3.6\n", + ".. ... ...\n", + "145 6.7 3.0\n", + "146 6.3 2.5\n", + "147 6.5 3.0\n", + "148 6.2 3.4\n", + "149 5.9 3.0\n", + "\n", + "[150 rows x 2 columns]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[[\"sepal_length\",\"sepal_width\"]]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.series.Series" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(df['species'])\n", + "#single thing then series " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.frame.DataFrame" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(df[[\"sepal_length\",\"sepal_width\"]])\n", + "#Combination of two or more series is knoown as DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "#Series and DataFrame making urself\n", + "#by passing list\n", + "#we can also change indexes accordingly !!\n", + "c=pd.Series([1,10,20,30],index=\"a b c d\".split())" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "#making DataFrame from Numpy Arrays\n", + "arr=np.random.randint(1,100,size=(175,3))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
f1f2f3
0445342
1177096
234356
352286
42682
............
170792911
171295657
172505460
173208946
174684863
\n", + "

175 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " f1 f2 f3\n", + "0 44 53 42\n", + "1 17 70 96\n", + "2 34 3 56\n", + "3 52 2 86\n", + "4 26 8 2\n", + ".. .. .. ..\n", + "170 79 29 11\n", + "171 29 56 57\n", + "172 50 54 60\n", + "173 20 89 46\n", + "174 68 48 63\n", + "\n", + "[175 rows x 3 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(arr,columns=['f1','f2','f3'])\n", + "#changing name of columns" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
f1f2
04453
11770
2343
3522
4268
.........
1707929
1712956
1725054
1732089
1746848
\n", + "

175 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " f1 f2\n", + "0 44 53\n", + "1 17 70\n", + "2 34 3\n", + "3 52 2\n", + "4 26 8\n", + ".. .. ..\n", + "170 79 29\n", + "171 29 56\n", + "172 50 54\n", + "173 20 89\n", + "174 68 48\n", + "\n", + "[175 rows x 2 columns]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(arr[:,:-1],columns=['f1','f2'])\n", + "#removing one column (f3) from DataSet" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "#how to create data frame using dictionaries\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "0", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\users\\lenovo\\appdata\\local\\programs\\python\\python38-32\\lib\\site-packages\\pandas\\core\\indexes\\base.py\u001b[0m in \u001b[0;36mget_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 2645\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2646\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2647\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 0", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m#if u want row then u pass this\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mdf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;31m#but errror\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;31m#so to access rows we can use afunc ==>loc()\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\lenovo\\appdata\\local\\programs\\python\\python38-32\\lib\\site-packages\\pandas\\core\\frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 2798\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnlevels\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2799\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2800\u001b[1;33m \u001b[0mindexer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2801\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mis_integer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2802\u001b[0m \u001b[0mindexer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mindexer\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\lenovo\\appdata\\local\\programs\\python\\python38-32\\lib\\site-packages\\pandas\\core\\indexes\\base.py\u001b[0m in \u001b[0;36mget_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 2646\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2647\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2648\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2649\u001b[0m \u001b[0mindexer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2650\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mindexer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mindexer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msize\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 0" + ] + } + ], + "source": [ + "#if u want row then u pass this\n", + "df[0]#but errror\n", + "#so to access rows we can use afunc ==>loc()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sepal_length 6.7\n", + "sepal_width 3\n", + "petal_length 5.2\n", + "petal_width 2.3\n", + "species Iris-virginica\n", + "Name: 145, dtype: object" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[145]" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sepal_length 5.1\n", + "sepal_width 3.5\n", + "petal_length 1.4\n", + "petal_width 0.2\n", + "species Iris-setosa\n", + "Name: 0, dtype: object" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[0] #particular index of ROWs" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sepal_length 5.1\n", + "sepal_width 3.5\n", + "petal_length 1.4\n", + "petal_width 0.2\n", + "species Iris-setosa\n", + "Name: 0, dtype: object" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0] #integer loctaion same work asloc()\n", + "#useful when we have indx in character" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
55.43.91.70.4Iris-setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa\n", + "5 5.4 3.9 1.7 0.4 Iris-setosa" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#df[0] it try to aceess column\n", + "df.loc[0:5] #this is indexed based" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_width
05.1000003.51.40.2
14.9000003.01.40.2
25.8697483.21.30.2
34.6000003.11.50.2
45.0000003.6NaN0.2
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width\n", + "0 5.100000 3.5 1.4 0.2\n", + "1 4.900000 3.0 1.4 0.2\n", + "2 5.869748 3.2 1.3 0.2\n", + "3 4.600000 3.1 1.5 0.2\n", + "4 5.000000 3.6 NaN 0.2" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0:5,0:4]\n", + "#this is integer based\n", + "#see both table above one is including last val but not in iloc" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.series.Series" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(df.iloc[1])\n", + "#series" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.frame.DataFrame" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(df.iloc[:5])\n", + "#DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[5.1 3.5 1.4 0.2 'Iris-setosa']\n", + " [4.9 3.0 1.4 0.2 'Iris-setosa']\n", + " [4.7 3.2 1.3 0.2 'Iris-setosa']\n", + " [4.6 3.1 1.5 0.2 'Iris-setosa']\n", + " [5.0 3.6 1.4 0.2 'Iris-setosa']]\n", + "converted to numpy\n", + "[5.4 3.9 1.7 0.4 'Iris-setosa']\n" + ] + } + ], + "source": [ + "#to convert it in numpy\n", + "print(df.iloc[:5].values)\n", + "print(\"converted to numpy\")\n", + "print(df.iloc[5].values)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_width
count150.000000150.000000150.000000150.000000
mean5.8433333.0540003.7586671.198667
std0.8280660.4335941.7644200.763161
min4.3000002.0000001.0000000.100000
25%5.1000002.8000001.6000000.300000
50%5.8000003.0000004.3500001.300000
75%6.4000003.3000005.1000001.800000
max7.9000004.4000006.9000002.500000
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width\n", + "count 150.000000 150.000000 150.000000 150.000000\n", + "mean 5.843333 3.054000 3.758667 1.198667\n", + "std 0.828066 0.433594 1.764420 0.763161\n", + "min 4.300000 2.000000 1.000000 0.100000\n", + "25% 5.100000 2.800000 1.600000 0.300000\n", + "50% 5.800000 3.000000 4.350000 1.300000\n", + "75% 6.400000 3.300000 5.100000 1.800000\n", + "max 7.900000 4.400000 6.900000 2.500000" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#function that Generate descriptive statistics\n", + "df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "#df[\"total value\"]=sum of all 4 val\n", + "df[\"total value\"]=df[\"sepal_length\"]+df[\"sepal_width\"]+df[\"petal_length\"]+df[\"petal_width\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspeciestotal value
05.13.51.40.2Iris-setosa10.2
14.93.01.40.2Iris-setosa9.5
24.73.21.30.2Iris-setosa9.4
34.63.11.50.2Iris-setosa9.4
45.03.61.40.2Iris-setosa10.2
.....................
1456.73.05.22.3Iris-virginica17.2
1466.32.55.01.9Iris-virginica15.7
1476.53.05.22.0Iris-virginica16.7
1486.23.45.42.3Iris-virginica17.3
1495.93.05.11.8Iris-virginica15.8
\n", + "

150 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species \\\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa \n", + "1 4.9 3.0 1.4 0.2 Iris-setosa \n", + "2 4.7 3.2 1.3 0.2 Iris-setosa \n", + "3 4.6 3.1 1.5 0.2 Iris-setosa \n", + "4 5.0 3.6 1.4 0.2 Iris-setosa \n", + ".. ... ... ... ... ... \n", + "145 6.7 3.0 5.2 2.3 Iris-virginica \n", + "146 6.3 2.5 5.0 1.9 Iris-virginica \n", + "147 6.5 3.0 5.2 2.0 Iris-virginica \n", + "148 6.2 3.4 5.4 2.3 Iris-virginica \n", + "149 5.9 3.0 5.1 1.8 Iris-virginica \n", + "\n", + " total value \n", + "0 10.2 \n", + "1 9.5 \n", + "2 9.4 \n", + "3 9.4 \n", + "4 10.2 \n", + ".. ... \n", + "145 17.2 \n", + "146 15.7 \n", + "147 16.7 \n", + "148 17.3 \n", + "149 15.8 \n", + "\n", + "[150 rows x 6 columns]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df\n", + "#if u have col name of same as total val then it will be overwrite" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "#drop col,row or index\n", + "df.drop(columns=[\"total value\"],inplace=True)\n", + "#df.drop(columns=[\"total value\"],inplace=True) by default inplace is FALSE\n", + "#inplace will change(s) Data with original DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
0FalseFalseFalseFalseFalse
1FalseFalseFalseFalseFalse
2FalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalse
4FalseFalseFalseFalseFalse
..................
145FalseFalseFalseFalseFalse
146FalseFalseFalseFalseFalse
147FalseFalseFalseFalseFalse
148FalseFalseFalseFalseFalse
149FalseFalseFalseFalseFalse
\n", + "

150 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 False False False False False\n", + "1 False False False False False\n", + "2 False False False False False\n", + "3 False False False False False\n", + "4 False False False False False\n", + ".. ... ... ... ... ...\n", + "145 False False False False False\n", + "146 False False False False False\n", + "147 False False False False False\n", + "148 False False False False False\n", + "149 False False False False False\n", + "\n", + "[150 rows x 5 columns]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#if their is any nullor Nan val-Not a number \n", + "#it give True or False \n", + "df.isna()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sepal_length 0\n", + "sepal_width 0\n", + "petal_length 0\n", + "petal_width 0\n", + "species 0\n", + "dtype: int64" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isna().sum() #total Nan values\n", + "#idea is to fill the nan values" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n", + "1\n" + ] + } + ], + "source": [ + "print(True+True) #True=1 ,False=0\n", + "print(False+True+False)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'], dtype=object)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"species\"].unique()\n", + "#Total number of unique elements" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"species\"].nunique()\n", + "#no of unique" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Iris-virginica 50\n", + "Iris-setosa 50\n", + "Iris-versicolor 50\n", + "Name: species, dtype: int64" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"species\"].value_counts()\n", + "#telling quantity of differnt things\n", + "#and this is highly balanced dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
55.43.91.70.4Iris-setosa
64.63.41.40.3Iris-setosa
75.03.41.50.2Iris-setosa
84.42.91.40.2Iris-setosa
94.93.11.50.1Iris-setosa
105.43.71.50.2Iris-setosa
114.83.41.60.2Iris-setosa
124.83.01.40.1Iris-setosa
134.33.01.10.1Iris-setosa
145.84.01.20.2Iris-setosa
155.74.41.50.4Iris-setosa
165.43.91.30.4Iris-setosa
175.13.51.40.3Iris-setosa
185.73.81.70.3Iris-setosa
195.13.81.50.3Iris-setosa
205.43.41.70.2Iris-setosa
215.13.71.50.4Iris-setosa
224.63.61.00.2Iris-setosa
235.13.31.70.5Iris-setosa
244.83.41.90.2Iris-setosa
255.03.01.60.2Iris-setosa
265.03.41.60.4Iris-setosa
275.23.51.50.2Iris-setosa
285.23.41.40.2Iris-setosa
294.73.21.60.2Iris-setosa
304.83.11.60.2Iris-setosa
315.43.41.50.4Iris-setosa
325.24.11.50.1Iris-setosa
335.54.21.40.2Iris-setosa
344.93.11.50.1Iris-setosa
355.03.21.20.2Iris-setosa
365.53.51.30.2Iris-setosa
374.93.11.50.1Iris-setosa
384.43.01.30.2Iris-setosa
395.13.41.50.2Iris-setosa
405.03.51.30.3Iris-setosa
414.52.31.30.3Iris-setosa
424.43.21.30.2Iris-setosa
435.03.51.60.6Iris-setosa
445.13.81.90.4Iris-setosa
454.83.01.40.3Iris-setosa
465.13.81.60.2Iris-setosa
474.63.21.40.2Iris-setosa
485.33.71.50.2Iris-setosa
495.03.31.40.2Iris-setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa\n", + "5 5.4 3.9 1.7 0.4 Iris-setosa\n", + "6 4.6 3.4 1.4 0.3 Iris-setosa\n", + "7 5.0 3.4 1.5 0.2 Iris-setosa\n", + "8 4.4 2.9 1.4 0.2 Iris-setosa\n", + "9 4.9 3.1 1.5 0.1 Iris-setosa\n", + "10 5.4 3.7 1.5 0.2 Iris-setosa\n", + "11 4.8 3.4 1.6 0.2 Iris-setosa\n", + "12 4.8 3.0 1.4 0.1 Iris-setosa\n", + "13 4.3 3.0 1.1 0.1 Iris-setosa\n", + "14 5.8 4.0 1.2 0.2 Iris-setosa\n", + "15 5.7 4.4 1.5 0.4 Iris-setosa\n", + "16 5.4 3.9 1.3 0.4 Iris-setosa\n", + "17 5.1 3.5 1.4 0.3 Iris-setosa\n", + "18 5.7 3.8 1.7 0.3 Iris-setosa\n", + "19 5.1 3.8 1.5 0.3 Iris-setosa\n", + "20 5.4 3.4 1.7 0.2 Iris-setosa\n", + "21 5.1 3.7 1.5 0.4 Iris-setosa\n", + "22 4.6 3.6 1.0 0.2 Iris-setosa\n", + "23 5.1 3.3 1.7 0.5 Iris-setosa\n", + "24 4.8 3.4 1.9 0.2 Iris-setosa\n", + "25 5.0 3.0 1.6 0.2 Iris-setosa\n", + "26 5.0 3.4 1.6 0.4 Iris-setosa\n", + "27 5.2 3.5 1.5 0.2 Iris-setosa\n", + "28 5.2 3.4 1.4 0.2 Iris-setosa\n", + "29 4.7 3.2 1.6 0.2 Iris-setosa\n", + "30 4.8 3.1 1.6 0.2 Iris-setosa\n", + "31 5.4 3.4 1.5 0.4 Iris-setosa\n", + "32 5.2 4.1 1.5 0.1 Iris-setosa\n", + "33 5.5 4.2 1.4 0.2 Iris-setosa\n", + "34 4.9 3.1 1.5 0.1 Iris-setosa\n", + "35 5.0 3.2 1.2 0.2 Iris-setosa\n", + "36 5.5 3.5 1.3 0.2 Iris-setosa\n", + "37 4.9 3.1 1.5 0.1 Iris-setosa\n", + "38 4.4 3.0 1.3 0.2 Iris-setosa\n", + "39 5.1 3.4 1.5 0.2 Iris-setosa\n", + "40 5.0 3.5 1.3 0.3 Iris-setosa\n", + "41 4.5 2.3 1.3 0.3 Iris-setosa\n", + "42 4.4 3.2 1.3 0.2 Iris-setosa\n", + "43 5.0 3.5 1.6 0.6 Iris-setosa\n", + "44 5.1 3.8 1.9 0.4 Iris-setosa\n", + "45 4.8 3.0 1.4 0.3 Iris-setosa\n", + "46 5.1 3.8 1.6 0.2 Iris-setosa\n", + "47 4.6 3.2 1.4 0.2 Iris-setosa\n", + "48 5.3 3.7 1.5 0.2 Iris-setosa\n", + "49 5.0 3.3 1.4 0.2 Iris-setosa" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# extract all rows where you have Iris-setosa flower\n", + "#masking\n", + "df[df[\"species\"]==\"Iris-setosa\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
45.03.61.40.2Iris-setosa
195.13.81.50.3Iris-setosa
215.13.71.50.4Iris-setosa
224.63.61.00.2Iris-setosa
325.24.11.50.1Iris-setosa
445.13.81.90.4Iris-setosa
465.13.81.60.2Iris-setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa\n", + "19 5.1 3.8 1.5 0.3 Iris-setosa\n", + "21 5.1 3.7 1.5 0.4 Iris-setosa\n", + "22 4.6 3.6 1.0 0.2 Iris-setosa\n", + "32 5.2 4.1 1.5 0.1 Iris-setosa\n", + "44 5.1 3.8 1.9 0.4 Iris-setosa\n", + "46 5.1 3.8 1.6 0.2 Iris-setosa" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# extract all rows where sepal_len < 5.3 and sepal_width >3.5\n", + "df[(df['sepal_length'] <5.3) & (df['sepal_width']>3.5)]" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
indexsepal_lengthsepal_widthpetal_lengthpetal_widthspecies
045.03.61.40.2Iris-setosa
1195.13.81.50.3Iris-setosa
2215.13.71.50.4Iris-setosa
3224.63.61.00.2Iris-setosa
4325.24.11.50.1Iris-setosa
5445.13.81.90.4Iris-setosa
6465.13.81.60.2Iris-setosa
\n", + "
" + ], + "text/plain": [ + " index sepal_length sepal_width petal_length petal_width species\n", + "0 4 5.0 3.6 1.4 0.2 Iris-setosa\n", + "1 19 5.1 3.8 1.5 0.3 Iris-setosa\n", + "2 21 5.1 3.7 1.5 0.4 Iris-setosa\n", + "3 22 4.6 3.6 1.0 0.2 Iris-setosa\n", + "4 32 5.2 4.1 1.5 0.1 Iris-setosa\n", + "5 44 5.1 3.8 1.9 0.4 Iris-setosa\n", + "6 46 5.1 3.8 1.6 0.2 Iris-setosa" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# extract all rows where sepal_len < 5.3\n", + "df[(df['sepal_length'] <5.3) & (df['sepal_width']>3.5)].reset_index()#.drop(columns=[\"index\"])#then drop index column\n", + "#drop(\"index\")\n", + "#we use iloc so no need\n", + "#in series we use this \"&\" not this 'and'" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "#making DataSet which has Nan values" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "rows=np.random.randint(1,150,100)\n", + "col=np.random.randint(0,4,100)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 39, 79, 69, 29, 13, 52, 148, 82, 108, 78, 124, 23, 73,\n", + " 132, 82, 31, 49, 37, 85, 68, 52, 92, 135, 75, 30, 87,\n", + " 129, 112, 112, 5, 91, 2, 127, 34, 130, 64, 117, 47, 34,\n", + " 71, 82, 73, 27, 59, 4, 35, 36, 62, 144, 28, 133, 102,\n", + " 114, 87, 131, 44, 18, 82, 6, 44, 99, 68, 87, 140, 102,\n", + " 49, 54, 125, 76, 104, 57, 129, 108, 16, 121, 126, 102, 43,\n", + " 142, 90, 134, 66, 34, 103, 146, 45, 144, 74, 147, 106, 69,\n", + " 53, 53, 4, 146, 41, 79, 17, 46, 50])" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rows" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3, 3, 3, 3, 3, 2, 3, 0, 3, 3, 1, 2, 0, 3, 1, 2, 3, 3, 3, 1, 1, 1,\n", + " 1, 1, 0, 1, 3, 2, 0, 3, 0, 0, 0, 3, 1, 2, 3, 0, 2, 2, 2, 3, 2, 1,\n", + " 1, 3, 1, 2, 3, 1, 2, 3, 0, 0, 1, 0, 1, 3, 1, 2, 2, 3, 2, 2, 2, 1,\n", + " 2, 0, 3, 3, 1, 0, 2, 2, 2, 0, 2, 0, 0, 0, 1, 3, 1, 3, 3, 3, 2, 0,\n", + " 1, 3, 3, 1, 0, 1, 1, 0, 0, 3, 3, 0])" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "col" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "#manually entering NaN val\n", + "#changing val in dataframe to nan val\n", + "for i in range(100):\n", + " df.iloc[rows[i],col[i]]=np.nan\n", + " #just picked random numbers\n", + " #it could be any no from 150 rows" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "nan" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[rows[2],col[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
2NaN3.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.0NaN1.40.2Iris-setosa
..................
1456.73.05.22.3Iris-virginica
1466.3NaN5.0NaNIris-virginica
1476.5NaN5.22.0Iris-virginica
1486.23.45.4NaNIris-virginica
1495.93.05.11.8Iris-virginica
\n", + "

150 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "2 NaN 3.2 1.3 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "4 5.0 NaN 1.4 0.2 Iris-setosa\n", + ".. ... ... ... ... ...\n", + "145 6.7 3.0 5.2 2.3 Iris-virginica\n", + "146 6.3 NaN 5.0 NaN Iris-virginica\n", + "147 6.5 NaN 5.2 2.0 Iris-virginica\n", + "148 6.2 3.4 5.4 NaN Iris-virginica\n", + "149 5.9 3.0 5.1 1.8 Iris-virginica\n", + "\n", + "[150 rows x 5 columns]" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[:150]" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sepal_length 31\n", + "sepal_width 27\n", + "petal_length 16\n", + "petal_width 19\n", + "species 0\n", + "dtype: int64" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isna().sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# dealing with nan values\n", + "- remove nan\n", + "- remove col\n", + "- Impute nan val(Mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5.869747899159663" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Impute nan val\n", + "df[\"sepal_length\"].mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 5.1\n", + "1 4.9\n", + "2 ABC\n", + "3 4.6\n", + "4 5\n", + " ... \n", + "145 6.7\n", + "146 ABC\n", + "147 6.5\n", + "148 6.2\n", + "149 5.9\n", + "Name: sepal_length, Length: 150, dtype: object" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"sepal_length\"].fillna(value=\"ABC\") #it will put abc val in place of Nan\n", + "#their is also a function dropna() but we dont use here" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "df['sepal_length'].fillna( value=df['sepal_length'].mean() , inplace=True)\n", + "#replace nan value with its mean" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 5.100000\n", + "1 4.900000\n", + "2 5.869748\n", + "3 4.600000\n", + "4 5.000000\n", + "5 5.400000\n", + "6 5.869748\n", + "7 5.000000\n", + "8 4.400000\n", + "9 4.900000\n", + "10 5.869748\n", + "11 4.800000\n", + "12 5.869748\n", + "13 4.300000\n", + "14 5.800000\n", + "15 5.700000\n", + "16 5.400000\n", + "17 5.869748\n", + "18 5.700000\n", + "19 5.100000\n", + "20 5.400000\n", + "21 5.100000\n", + "22 4.600000\n", + "23 5.100000\n", + "24 5.869748\n", + "25 5.869748\n", + "26 5.000000\n", + "27 5.200000\n", + "28 5.869748\n", + "29 4.700000\n", + "30 4.800000\n", + "31 5.400000\n", + "32 5.869748\n", + "33 5.500000\n", + "34 4.900000\n", + "35 5.000000\n", + "36 5.500000\n", + "37 4.900000\n", + "38 4.400000\n", + "39 5.869748\n", + "40 5.000000\n", + "41 5.869748\n", + "42 5.869748\n", + "43 5.869748\n", + "44 5.100000\n", + "45 5.869748\n", + "46 5.100000\n", + "47 4.600000\n", + "48 5.300000\n", + "49 5.869748\n", + "Name: sepal_length, dtype: float64" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['sepal_length'].fillna( value=df['sepal_length'].mean())[:50]" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sepal_length 0\n", + "sepal_width 27\n", + "petal_length 16\n", + "petal_width 19\n", + "species 0\n", + "dtype: int64" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isna().sum()\n", + "#so Nan val in sepal_length become 0" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
25.8697483.21.30.2Iris-setosa
75.000000NaN1.50.2Iris-setosa
34.6000003.11.50.2Iris-setosa
84.400000NaN1.4NaNIris-setosa
14.9000003.01.40.2Iris-setosa
94.9000003.11.50.1Iris-setosa
805.5000002.43.81.1Iris-versicolor
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "2 5.869748 3.2 1.3 0.2 Iris-setosa\n", + "7 5.000000 NaN 1.5 0.2 Iris-setosa\n", + "3 4.600000 3.1 1.5 0.2 Iris-setosa\n", + "8 4.400000 NaN 1.4 NaN Iris-setosa\n", + "1 4.900000 3.0 1.4 0.2 Iris-setosa\n", + "9 4.900000 3.1 1.5 0.1 Iris-setosa\n", + "80 5.500000 2.4 3.8 1.1 Iris-versicolor" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[2,7,3,8,1,9,80]]" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
25.8697483.21.30.2Iris-setosa
75.000000NaN1.50.2Iris-setosa
34.6000003.11.50.2Iris-setosa
84.400000NaN1.4NaNIris-setosa
14.9000003.01.40.2Iris-setosa
94.9000003.11.50.1Iris-setosa
805.5000002.43.81.1Iris-versicolor
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "2 5.869748 3.2 1.3 0.2 Iris-setosa\n", + "7 5.000000 NaN 1.5 0.2 Iris-setosa\n", + "3 4.600000 3.1 1.5 0.2 Iris-setosa\n", + "8 4.400000 NaN 1.4 NaN Iris-setosa\n", + "1 4.900000 3.0 1.4 0.2 Iris-setosa\n", + "9 4.900000 3.1 1.5 0.1 Iris-setosa\n", + "80 5.500000 2.4 3.8 1.1 Iris-versicolor" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[2,7,3,8,1,9,80]]" + ] + }, + { + "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": { + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/2.)PYTHON_BASICS/PYTHON Pandas/my_file.csv b/2.)PYTHON_BASICS/PYTHON Pandas/my_file.csv new file mode 100644 index 00000000..37588e3e --- /dev/null +++ b/2.)PYTHON_BASICS/PYTHON Pandas/my_file.csv @@ -0,0 +1,151 @@ +sepal_length,sepal_width,petal_length,petal_width,species,new_column +5.1,3.5,1.4,0.2,Iris-setosa,1.9599999999999997 +4.9,3.0,1.4,0.2,Iris-setosa,1.9599999999999997 +4.7,3.2,1.3,0.2,Iris-setosa,1.6900000000000002 +4.6,3.1,1.5,0.2,Iris-setosa,2.25 +5.0,3.6,1.4,0.2,Iris-setosa,1.9599999999999997 +5.4,3.9,1.7,0.4,Iris-setosa,2.8899999999999997 +4.6,3.4,1.4,0.3,Iris-setosa,1.9599999999999997 +5.0,3.4,1.5,0.2,Iris-setosa,2.25 +4.4,2.9,1.4,0.2,Iris-setosa,1.9599999999999997 +4.9,3.1,1.5,0.1,Iris-setosa,2.25 +5.4,3.7,1.5,0.2,Iris-setosa,2.25 +4.8,3.4,1.6,0.2,Iris-setosa,2.5600000000000005 +4.8,3.0,1.4,0.1,Iris-setosa,1.9599999999999997 +4.3,3.0,1.1,0.1,Iris-setosa,1.2100000000000002 +5.8,4.0,1.2,0.2,Iris-setosa,1.44 +5.7,4.4,1.5,0.4,Iris-setosa,2.25 +5.4,3.9,1.3,0.4,Iris-setosa,1.6900000000000002 +5.1,3.5,1.4,0.3,Iris-setosa,1.9599999999999997 +5.7,3.8,1.7,0.3,Iris-setosa,2.8899999999999997 +5.1,3.8,1.5,0.3,Iris-setosa,2.25 +5.4,3.4,1.7,0.2,Iris-setosa,2.8899999999999997 +5.1,3.7,1.5,0.4,Iris-setosa,2.25 +4.6,3.6,1.0,0.2,Iris-setosa,1.0 +5.1,3.3,1.7,0.5,Iris-setosa,2.8899999999999997 +4.8,3.4,1.9,0.2,Iris-setosa,3.61 +5.0,3.0,1.6,0.2,Iris-setosa,2.5600000000000005 +5.0,3.4,1.6,0.4,Iris-setosa,2.5600000000000005 +5.2,3.5,1.5,0.2,Iris-setosa,2.25 +5.2,3.4,1.4,0.2,Iris-setosa,1.9599999999999997 +4.7,3.2,1.6,0.2,Iris-setosa,2.5600000000000005 +4.8,3.1,1.6,0.2,Iris-setosa,2.5600000000000005 +5.4,3.4,1.5,0.4,Iris-setosa,2.25 +5.2,4.1,1.5,0.1,Iris-setosa,2.25 +5.5,4.2,1.4,0.2,Iris-setosa,1.9599999999999997 +4.9,3.1,1.5,0.1,Iris-setosa,2.25 +5.0,3.2,1.2,0.2,Iris-setosa,1.44 +5.5,3.5,1.3,0.2,Iris-setosa,1.6900000000000002 +4.9,3.1,1.5,0.1,Iris-setosa,2.25 +4.4,3.0,1.3,0.2,Iris-setosa,1.6900000000000002 +5.1,3.4,1.5,0.2,Iris-setosa,2.25 +5.0,3.5,1.3,0.3,Iris-setosa,1.6900000000000002 +4.5,2.3,1.3,0.3,Iris-setosa,1.6900000000000002 +4.4,3.2,1.3,0.2,Iris-setosa,1.6900000000000002 +5.0,3.5,1.6,0.6,Iris-setosa,2.5600000000000005 +5.1,3.8,1.9,0.4,Iris-setosa,3.61 +4.8,3.0,1.4,0.3,Iris-setosa,1.9599999999999997 +5.1,3.8,1.6,0.2,Iris-setosa,2.5600000000000005 +4.6,3.2,1.4,0.2,Iris-setosa,1.9599999999999997 +5.3,3.7,1.5,0.2,Iris-setosa,2.25 +5.0,3.3,1.4,0.2,Iris-setosa,1.9599999999999997 +7.0,3.2,4.7,1.4,Iris-versicolor,22.090000000000003 +6.4,3.2,4.5,1.5,Iris-versicolor,20.25 +6.9,3.1,4.9,1.5,Iris-versicolor,24.010000000000005 +5.5,2.3,4.0,1.3,Iris-versicolor,16.0 +6.5,2.8,4.6,1.5,Iris-versicolor,21.159999999999997 +5.7,2.8,4.5,1.3,Iris-versicolor,20.25 +6.3,3.3,4.7,1.6,Iris-versicolor,22.090000000000003 +4.9,2.4,3.3,1.0,Iris-versicolor,10.889999999999999 +6.6,2.9,4.6,1.3,Iris-versicolor,21.159999999999997 +5.2,2.7,3.9,1.4,Iris-versicolor,15.209999999999999 +5.0,2.0,3.5,1.0,Iris-versicolor,12.25 +5.9,3.0,4.2,1.5,Iris-versicolor,17.64 +6.0,2.2,4.0,1.0,Iris-versicolor,16.0 +6.1,2.9,4.7,1.4,Iris-versicolor,22.090000000000003 +5.6,2.9,3.6,1.3,Iris-versicolor,12.96 +6.7,3.1,4.4,1.4,Iris-versicolor,19.360000000000003 +5.6,3.0,4.5,1.5,Iris-versicolor,20.25 +5.8,2.7,4.1,1.0,Iris-versicolor,16.81 +6.2,2.2,4.5,1.5,Iris-versicolor,20.25 +5.6,2.5,3.9,1.1,Iris-versicolor,15.209999999999999 +5.9,3.2,4.8,1.8,Iris-versicolor,23.04 +6.1,2.8,4.0,1.3,Iris-versicolor,16.0 +6.3,2.5,4.9,1.5,Iris-versicolor,24.010000000000005 +6.1,2.8,4.7,1.2,Iris-versicolor,22.090000000000003 +6.4,2.9,4.3,1.3,Iris-versicolor,18.49 +6.6,3.0,4.4,1.4,Iris-versicolor,19.360000000000003 +6.8,2.8,4.8,1.4,Iris-versicolor,23.04 +6.7,3.0,5.0,1.7,Iris-versicolor,25.0 +6.0,2.9,4.5,1.5,Iris-versicolor,20.25 +5.7,2.6,3.5,1.0,Iris-versicolor,12.25 +5.5,2.4,3.8,1.1,Iris-versicolor,14.44 +5.5,2.4,3.7,1.0,Iris-versicolor,13.690000000000001 +5.8,2.7,3.9,1.2,Iris-versicolor,15.209999999999999 +6.0,2.7,5.1,1.6,Iris-versicolor,26.009999999999998 +5.4,3.0,4.5,1.5,Iris-versicolor,20.25 +6.0,3.4,4.5,1.6,Iris-versicolor,20.25 +6.7,3.1,4.7,1.5,Iris-versicolor,22.090000000000003 +6.3,2.3,4.4,1.3,Iris-versicolor,19.360000000000003 +5.6,3.0,4.1,1.3,Iris-versicolor,16.81 +5.5,2.5,4.0,1.3,Iris-versicolor,16.0 +5.5,2.6,4.4,1.2,Iris-versicolor,19.360000000000003 +6.1,3.0,4.6,1.4,Iris-versicolor,21.159999999999997 +5.8,2.6,4.0,1.2,Iris-versicolor,16.0 +5.0,2.3,3.3,1.0,Iris-versicolor,10.889999999999999 +5.6,2.7,4.2,1.3,Iris-versicolor,17.64 +5.7,3.0,4.2,1.2,Iris-versicolor,17.64 +5.7,2.9,4.2,1.3,Iris-versicolor,17.64 +6.2,2.9,4.3,1.3,Iris-versicolor,18.49 +5.1,2.5,3.0,1.1,Iris-versicolor,9.0 +5.7,2.8,4.1,1.3,Iris-versicolor,16.81 +6.3,3.3,6.0,2.5,Iris-virginica,36.0 +5.8,2.7,5.1,1.9,Iris-virginica,26.009999999999998 +7.1,3.0,5.9,2.1,Iris-virginica,34.81 +6.3,2.9,5.6,1.8,Iris-virginica,31.359999999999996 +6.5,3.0,5.8,2.2,Iris-virginica,33.64 +7.6,3.0,6.6,2.1,Iris-virginica,43.559999999999995 +4.9,2.5,4.5,1.7,Iris-virginica,20.25 +7.3,2.9,6.3,1.8,Iris-virginica,39.69 +6.7,2.5,5.8,1.8,Iris-virginica,33.64 +7.2,3.6,6.1,2.5,Iris-virginica,37.209999999999994 +6.5,3.2,5.1,2.0,Iris-virginica,26.009999999999998 +6.4,2.7,5.3,1.9,Iris-virginica,28.09 +6.8,3.0,5.5,2.1,Iris-virginica,30.25 +5.7,2.5,5.0,2.0,Iris-virginica,25.0 +5.8,2.8,5.1,2.4,Iris-virginica,26.009999999999998 +6.4,3.2,5.3,2.3,Iris-virginica,28.09 +6.5,3.0,5.5,1.8,Iris-virginica,30.25 +7.7,3.8,6.7,2.2,Iris-virginica,44.89 +7.7,2.6,6.9,2.3,Iris-virginica,47.61000000000001 +6.0,2.2,5.0,1.5,Iris-virginica,25.0 +6.9,3.2,5.7,2.3,Iris-virginica,32.49 +5.6,2.8,4.9,2.0,Iris-virginica,24.010000000000005 +7.7,2.8,6.7,2.0,Iris-virginica,44.89 +6.3,2.7,4.9,1.8,Iris-virginica,24.010000000000005 +6.7,3.3,5.7,2.1,Iris-virginica,32.49 +7.2,3.2,6.0,1.8,Iris-virginica,36.0 +6.2,2.8,4.8,1.8,Iris-virginica,23.04 +6.1,3.0,4.9,1.8,Iris-virginica,24.010000000000005 +6.4,2.8,5.6,2.1,Iris-virginica,31.359999999999996 +7.2,3.0,5.8,1.6,Iris-virginica,33.64 +7.4,2.8,6.1,1.9,Iris-virginica,37.209999999999994 +7.9,3.8,6.4,2.0,Iris-virginica,40.96000000000001 +6.4,2.8,5.6,2.2,Iris-virginica,31.359999999999996 +6.3,2.8,5.1,1.5,Iris-virginica,26.009999999999998 +6.1,2.6,5.6,1.4,Iris-virginica,31.359999999999996 +7.7,3.0,6.1,2.3,Iris-virginica,37.209999999999994 +6.3,3.4,5.6,2.4,Iris-virginica,31.359999999999996 +6.4,3.1,5.5,1.8,Iris-virginica,30.25 +6.0,3.0,4.8,1.8,Iris-virginica,23.04 +6.9,3.1,5.4,2.1,Iris-virginica,29.160000000000004 +6.7,3.1,5.6,2.4,Iris-virginica,31.359999999999996 +6.9,3.1,5.1,2.3,Iris-virginica,26.009999999999998 +5.8,2.7,5.1,1.9,Iris-virginica,26.009999999999998 +6.8,3.2,5.9,2.3,Iris-virginica,34.81 +6.7,3.3,5.7,2.5,Iris-virginica,32.49 +6.7,3.0,5.2,2.3,Iris-virginica,27.040000000000003 +6.3,2.5,5.0,1.9,Iris-virginica,25.0 +6.5,3.0,5.2,2.0,Iris-virginica,27.040000000000003 +6.2,3.4,5.4,2.3,Iris-virginica,29.160000000000004 +5.9,3.0,5.1,1.8,Iris-virginica,26.009999999999998 diff --git a/2.)PYTHON_BASICS/img.jpg b/2.)PYTHON_BASICS/img.jpg new file mode 100644 index 00000000..713be4ed Binary files /dev/null and b/2.)PYTHON_BASICS/img.jpg differ diff --git a/projectProposal.md b/projectProposal.md new file mode 100644 index 00000000..d9af06d9 --- /dev/null +++ b/projectProposal.md @@ -0,0 +1,55 @@ +# Project Proposal + +### **Tech Stack: Python** +### **Team Number: 1** +### **Project Domain: Education** +### **Project Name: Animated Visualization of Data Structures and Algorithms** + +# Project Overview + +Our idea is to write a python script that would visualize various Algorithms and Data Structures, like tree formation, reversing a linked list, finding a single source shortest path, and many more using animation. + +The key idea here is to convert what we learn in theory to an animated visualization. + +# Team Details + +## Moderator: +1. Gaurav Saha (gauravsaha385@gmail.com) +2. Aryan Gulati (aryangulati2810@gmail.com) +## Mentors: +1. Arpita Saggar (arpita.saggar@gmail.com) +2. Debdut Goswami (debdutgoswami@gmail.com) +3. Gagan Deep (gaganwrk0@gmail.com) +4. Abhishek Singh (abhisinghdeveloper@outlook.com) +## Participants: +1. Meenal Verma (vmeenalv@gmail.com) +2. Aastha (astha.satija9@gmail.com) +3. Raunak (bhagatraunak12@gmail.com) +4. Franklin Onyia (onyiafranklin89@gmail.com) +5. Abhijeet Pathak (abhijeetpathak9826@gmail.com) +6. Dhiren Sambyal (dhirensambyal@gmail.com) +7. Harshit Gupta (guptaarg.18@gmail.com) +8. Priyanshi Agrawal(priyanshi3008.pa@gmail.com) +9. Archita Bhatnagar (archita.bhatnagar07@gmail.com) +10. Akshra Kumari (akshrakumari42@gmail.com ) +11. Devi Keerthi Reddy Mitta (keerthimitta2506@gmail.com) +12. Amit Sharma (sharma.amit20111@gmail.com) +13. Devanshi Arora (devanshiarora40@gmail.com) +14. Anikesh Srivastav (anikeshsrivastav1000@gmail.com) +15. Deepika Jaiswal (jais.deepika33@gmail.com) + +# Learning Plan and Milestones + +| Week | Objectives/Goals | Evaluation | +|:----------------:|:-----------------------------------------------------------:|:----------------------------------------------------: +| 15 - 21 June | Setting up an IDE, ‘Hello World’ and basic syntax in Python | Not Applicable | +| 22 - 28 June | Functions, Operators, Loops & Conditionals | Mentor - led assignment/quiz | +| 29 June - 5 July | Strings, Dictionaries, Lists & Tuples | Mentor - led assignment/quiz | +| 6 - 12 July | Recursion & OOPS | Mentor - led assignment/quiz | +| 13 - 19 July | File Management | Mentor - led assignment/quiz | +| 20 - 26 July | Importing and Working with Python modules | Mentor - led assignment/quiz | +| 27 July - 2 Aug | Begin building separate animations | Mentor - led review | +| 3 - 9 Aug | Unit Testing each animated visualization | Testing for corner cases, exceptions etc | +| 10 - 16 Aug | Integrating all visualizations | Mentor - led review | +| 17 - 23 Aug | Integration and Validation testing | Testing project UI, ease of use & overall functionality | +| 24 - 31 Aug | Final Testing, Documentation & Presentation | Mentor - led review |