{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Sets\n",
"> A summary of \"Probability and Statistics in Data Science using Python\", offered from UCSD DSE210x\n",
"\n",
"- toc: true \n",
"- badges: true\n",
"- comments: true\n",
"- author: Chanseok Kang\n",
"- categories: [Python, edX, Data_Science, Statistics, Probability]\n",
"- image: images/venn_example.png"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Elements, sets, and membership"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Elements\n",
"- Foundation, building blocks of sets\n",
"- Can be anything\n",
"- Structured\n",
"- Numbers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Sets\n",
"- Collection of elements\n",
"- Define : `{specify elements}`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Specification\n",
"- Explicit\n",
" - Coin = {heads, tails}\n",
" - Bits = {0, 1}\n",
" - Die = {1, 2, 3, 4, 5, 6}\n",
"- Implicit\n",
" - Digits = {0, 1, $\\dots$ 9}\n",
" - Letters = {a, b, $\\dots$, z}\n",
" - Days = {Monday, $\\dots$, Sunday}\n",
"- Descriptive \n",
" - {4-letter words} = {love, like, dear, $\\dots$}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Common Sets\n",
"| Sets | | Notation |\n",
"| ---- | ----- | ---- |\n",
"| Integers | {$\\dots$, -2, -1, 0, 1, 2, $\\dots$} | $\\mathbb{Z}$ |\n",
"| Naturals | {0, 1, 2, $\\dots$ }| $\\mathbb{N}$ |\n",
"| Positives | {1, 2, 3, $\\dots$} | $\\mathbb{P}$ |\n",
"| Rationals | {interger ratio m / n, n $\\neq 0$} | $\\mathbb{Q}$ |\n",
"| Reals | { whole number } | $\\mathbb{R}$ |\n",
"\n",
"> Note: $\\mathbb{Z}$ comes from german word `Zahl`, meaning numbers\n",
"\n",
"Usually, Sets are expressed with Upper case (A, B, etc), and Elements are expressed with Lower case (a, b, etc), as a convention."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Membership\n",
"- If element $x$ is in a set $A$, it is a member of, or belongs to $A$, denoted $x$ $\\in$ $A$.\n",
" \n",
" $$ 0 \\in \\{0, 1\\} \\qquad 1 \\in \\{0, 1\\} \\qquad \\pi \\in \\mathbb{R} $$\n",
" \n",
"- Equivalently, $A$ contains $x$, written $A$ $\\ni$ $x$.\n",
"\n",
" $$ \\{0, 1\\} \\ni 0 \\qquad \\{0, 1\\} \\ni 1 \\qquad \\mathbb{R} \\in \\pi $$\n",
"\n",
"- If $x$ is not in $A$, then $x$ is not a member, or does not belong to $A$, denoted $x$ $\\notin$ $A$.\n",
"\n",
"- Equivalently, $A$ does not contain $x$, $A$ $\\not\\owns$ $x$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Doesn't Matter\n",
"- Order: {0, 1} = {1, 0}\n",
"- Repetition: {0, 1} = {0, 1, 1, 1}\n",
"\n",
"If you want to consider:\n",
"\n",
"- Order matters: use ordered tuples ((0, 1) $\\neq$ (1, 0))\n",
"- Repetition matters: use multisets or bags"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Special Sets\n",
"- Empty set: contains no elements ($\\emptyset$ or {}, $\\forall x, x \\notin \\emptyset$)\n",
"\n",
"> Note: $\\forall$ means 'all', or 'every'\n",
"\n",
"- Universal set: all possible elements ($\\Omega$, $\\forall x, x \\in \\Omega$)\n",
"\n",
"- $\\Omega$ lets us consider only relevant elements. $\\Omega$ can be $\\mathbb{Z}$ (the integer) or \"prime number\"\n",
"\n",
"- $\\Omega$ depends on application (temperature, text, etc...)\n",
"\n",
"- $\\emptyset$ is only one in whole case, this is the set with no elements."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Set Definition in python\n",
"- Define a set\n",
"```python\n",
"{...} or set({...})\n",
"```\n",
"- For empty set\n",
"```python\n",
"set() or set({})\n",
"```\n",
"\n",
"> Note: In python, `{}` is not a empty set, it is dictionary."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Membership in python\n",
"- $\\in \\quad \\rightarrow$ `in`\n",
"- $\\notin \\quad \\rightarrow$ `not in`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Testing if Empty, Size"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Empty set\n",
"S = set()\n",
"not S"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Set\n",
"T = {1, 2}\n",
"not T"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(S)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(T)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Some simple sets"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Sets within Sets\n",
"Specify a set within a universe, or any other set,\n",
"$$ \\{x \\in A \\vert \\dots \\} $$\n",
"means elements $x$ in $A$ such that. Sometimes it expresses like this,\n",
"$$ \\{x \\in A : \\dots \\} $$\n",
"\n",
"For example,\n",
"\n",
"$$ \\mathbb{N} = \\{x \\in \\mathbb{Z} \\vert x \\geq 0 \\} $$\n",
"$$ \\mathbb{P} = \\{x \\in \\mathbb{N} \\vert x \\gt 0 \\} $$\n",
"\n",
"It usually express the solution to equations,\n",
"\n",
"$$ \\{ x \\in \\mathbb{R} \\vert x^2 \\geq 0\\} = \\mathbb{R} $$\n",
"$$ \\{ x \\in \\mathbb{R} : x^2 = 1 \\} = \\{-1, 1\\} $$\n",
"$$ \\{ x \\in \\mathbb{R} \\vert x^2 = 0 \\} = \\{0\\} $$\n",
"\n",
"> Note: a single-element set is called **singleton**\n",
"\n",
"$$ \\{ x \\in \\mathbb{R} \\vert x^2 = -1 \\} = \\emptyset $$\n",
"$$ \\{ x \\in \\mathbb{C} \\vert x^2 = -1 \\} = \\{i, -i\\} $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Integer intervals\n",
"$$ \\{m, \\dots n\\} = \\{i \\in \\mathbb{Z} \\vert m \\leq i \\leq n \\} $$\n",
"\n",
"It is a set of integers from $m$ to $n$, inclusively.\n",
"\n",
"$$ \\{3, \\dots, 5\\} = \\{i \\in \\mathbb{Z} \\vert 3 \\leq i \\leq 5 \\} = \\{3, 4, 5\\} $$ \n",
"$$ \\{3, \\dots, 4\\} = \\{i \\in \\mathbb{Z} \\vert 3 \\leq i \\leq 4 \\} = \\{3, 4\\} $$\n",
"$$ \\{3, \\dots, 3\\} = \\{i \\in \\mathbb{Z} \\vert 3 \\leq i \\leq 3 \\} = \\{3\\} $$\n",
"$$ \\{3, \\dots, 2\\} = \\{i \\in \\mathbb{Z} \\vert 3 \\leq i \\leq 2 \\} = \\emptyset $$\n",
"\n",
"For convention, $[n] = \\{1, \\dots, n\\}$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Real intervals\n",
"$$[a, b] \\qquad \\rightarrow \\{x \\in \\mathbb{R} \\vert a \\leq x \\leq b \\} $$\n",
"$$(a, b) \\qquad \\rightarrow \\{x \\in \\mathbb{R} \\vert a \\lt x \\lt b \\} $$\n",
"$$[a, b) \\qquad \\rightarrow \\{x \\in \\mathbb{R} \\vert a \\leq x \\lt b \\} $$\n",
"$$(a, b] \\qquad \\rightarrow \\{x \\in \\mathbb{R} \\vert a \\lt x \\leq b \\} $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Divisibility\n",
"In $m, n \\in \\mathbb{Z}$, if $n = c \\dot m$ for some $c \\in \\mathbb{Z}$, we say that n is a multiple of m, or $m$ divides $n$, and write $m \\vert n$\n",
"\n",
"If no such $c$ exists, $m$ does not divide $n$, or $n$ is not a multiple of $m$ denoted $m \\not\\vert n$.\n",
"\n",
"For example,\n",
"\n",
"$$\\text{There is no } c \\in \\mathbb{Z} \\quad \\text{such that} \\quad 4 = c \\cdot 3 \\quad \\rightarrow 3 \\not\\vert 4 $$\n",
"$$ 0 \\not\\vert n \\quad \\text{for any } n \\neq 0 $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Set of Multiples\n",
"- Integer multiples of $m$\n",
"$$ m \\in \\mathbb{Z} \\qquad {}_m\\mathbb{Z} \\overset{\\underset{\\mathrm{def}}{}}{=} \\{i \\in \\mathbb{Z} : m \\vert i \\}$$\n",
" - Example\n",
"$$ \\begin{aligned} {}_2\\mathbb{Z} &= \\{\\dots, -4, -2, 0, 2, 4, \\dots \\} \\overset{\\underset{\\mathrm{def}}{}}{=} \\mathbb{E} \\quad \\rightarrow \\text{even number} \\\\\n",
" {}_1\\mathbb{Z} &= \\{\\dots , -2, -1, 0, 1, 2, \\dots \\} = \\mathbb{Z} \\\\\n",
" {}_0\\mathbb{Z} &= \\{0\\} \\end{aligned} $$\n",
"\n",
"- Multiples of $m$ in $\\{1..n\\}$\n",
"$$ m \\in \\mathbb{Z}, n \\in \\mathbb{P} \\qquad {}_m[n] \\overset{\\underset{\\mathrm{def}}{}}{=} \\{i \\in [n] : m \\vert i\\}$$\n",
"\n",
" - Example\n",
" \n",
"$$ \\begin{aligned} {}_3[13] &= \\{i \\in \\{1, \\dots, 13\\} : 3 \\vert i \\} = \\{3, 6, 9, 12\\} \\\\\n",
"{}_7[13] &= \\{7\\} \\\\ {}_1[13] &= [13] \\\\ {}_{14}[13] &= {}_0[13] = \\emptyset \\end{aligned} $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Intervals, Multiples in python\n",
"$\\{0,\\dots, n-1\\} \\quad \\rightarrow$ `range(n)`\n",
"\n",
"$\\{m, \\dots, n-1\\} \\quad \\rightarrow$ `range(m, n)`\n",
"\n",
"$\\{m, m+d, m+2d, \\dots \\} \\leq n - 1 \\quad \\rightarrow$ `range(m, n, d)`"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{0, 1, 2}"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"set(range(3))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{2, 3, 4}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"set(range(2, 5))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{2, 5, 8, 11}"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"set(range(2, 12, 3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Visualizing Sets\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Venn Diagram\n",
"- Developed by John Venn\n",
"- Used to visualize Sets, Regions, Elements, Points"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ven Diagram in Python\n",
"```python\n",
"!pip install matplotlib_venn\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"