from IPython.display import Image
from IPython.display import clear_output
from IPython.display import FileLink, FileLinks
import matplotlib.pylab as plt
import pandas as pd
data = pd.read_excel('C://Users/Nina/Documents/courses/Python_Beginner_Course/e - List of participants with invoice information.xlsx')
labels = data['Programming/Scripting experience'].dropna().unique().tolist()
labels2 = data['Position'].dropna().unique().tolist()
slices = [count for count in data['Programming/Scripting experience'].value_counts()]
slices2 = [count for count in data['Position'].value_counts()]
explode = [0.05 for a in slices]
explode2 = [0.05 for a in slices2]
fig = plt.figure(figsize=(10,10))
ax1 = fig.add_subplot(2,2,2)
ax1.pie(slices, explode=explode, labels=labels, autopct='%1.0f%%',
shadow=True, startangle=90)
plt.title('Programming experience', size = 20)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
ax2 = fig.add_subplot(2,2,3)
ax2.pie(slices2, explode=explode2, labels=labels2, autopct='%1.0f%%',
shadow=True, startangle=90)
plt.title('Position', size = 20)
ax2.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
#plt.show()
#plt.close()
Wikipedia:
"Computer programming is the process of building and designing an executable computer program for accomplishing a specific computing task"
Endless possibilities!
Python 1.0 - January 1994
Python 1.2 - April 10, 1995
Python 1.3 - October 12, 1995
Python 1.4 - October 25, 1996
Python 1.5 - December 31, 1997
Python 1.6 - September 5, 2000
Python 2.0 - October 16, 2000
Python 2.1 - April 17, 2001
Python 2.2 - December 21, 2001
Python 2.3 - July 29, 2003
Python 2.4 - November 30, 2004
Python 2.5 - September 19, 2006
Python 2.6 - October 1, 2008
Python 2.7 - July 3, 2010
Python 3.0 - December 3, 2008
Python 3.1 - June 27, 2009
Python 3.2 - February 20, 2011
Python 3.3 - September 29, 2012
Python 3.4 - March 16, 2014
Python 3.5 - September 13, 2015
Python 3.6 - December 23, 2016
Python 3.7 - June 27, 2018
How to seek help:
# A simple loop that adds 2 to a number
i = 0
while i < 10:
u = i + 2
print('u is',u)
i += 1
u is 2 u is 3 u is 4 u is 5 u is 6 u is 7 u is 8 u is 9 u is 10 u is 11
'this is a string'
"this is also a string"
3 # here we can put a comment so we know that this is an integer
3.14 # this is a float
True # this is a boolean
[3, 5, 7, 4, 99] # this is a list of integers
('a', 'b', 'c', 'd') # this is a tuple of strings
{'a', 'b', 'c'} # this is a set of strings
{'a':3, 'b':5, 'c':7} # this is a dictionary with strings as keys and integers as values
That depends on their type:
'a string '+' another string'
'a string another string'
Type Operations
int + - * / ** % // ...
float + - * / ** % // ...
string + *
Identifiers are used to identify a program element in the code.
For example:
Used to store values and to assign them a name.
Examples:
i = 0
counter = 5
snpname = 'rs2315487'
snplist = ['rs21354', 'rs214569']
width = 23564
height = 10
snpname = 'rs56483'
snplist = ['rs12345','rs458782']
'rs56483rs56483'
Allowed: Not allowed:
Var_name 2save
_total *important
aReallyLongName Special%
with_digit_2 With spaces
dkfsjdsklut (well, allowed, but NOT recommended)
NO special characters:
+ - * $ % ; : , ? ! { } ( ) < > “ ‘ | \ @
→ Notebook Day_1_Exercise_1 (~30 minutes)
width = 5
height = 3.6
snps = ['rs123', 'rs5487']
snp = 'rs2546'
active = True
nums = [2,4,6,8,4,5,2]
sum(snps)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-20-fe49d075f27d> in <module>() 6 nums = [2,4,6,8,4,5,2] 7 ----> 8 sum(snps) TypeError: unsupported operand type(s) for +: 'int' and 'str'
x = 4
y = 3
z = [2, 3, 6, 3, 9, 23]
max(z)
23
x = 5.14
y = 3.14
y + 2 == x
False
x = [2,4,7,3,5,9]
y = ['a','b','c']
23 in x
4 in x and 'd' in y
False
# A simple loop that adds 2 to a number
i = 0
even = [2,4,6,8,10]
while i < 10:
u = i + 2
print('u is '+str(u)+'. Is this number even? '+str(u in even))
i += 1
u is 2. Is this number even? True u is 3. Is this number even? False u is 4. Is this number even? True u is 5. Is this number even? False u is 6. Is this number even? True u is 7. Is this number even? False u is 8. Is this number even? True u is 9. Is this number even? False u is 10. Is this number even? True u is 11. Is this number even? False
# A simple loop that adds 2 to a number
i = 0
even = [2,4,6,8,10]
while i < 10:
u = i + 2
print('u is '+str(u)+'. Is this number even and below 5? '+\
str(u in even and u < 5))
i += 1
u is 2. Is this number even and below 5? True u is 3. Is this number even and below 5? False u is 4. Is this number even and below 5? True u is 5. Is this number even and below 5? False u is 6. Is this number even and below 5? False u is 7. Is this number even and below 5? False u is 8. Is this number even and below 5? False u is 9. Is this number even and below 5? False u is 10. Is this number even and below 5? False u is 11. Is this number even and below 5? False
x = 5
y = 7
z = 2
(x > 6 and y == 7) or z > 1
x > 6 and (y == 7 or z > 1)
(x > 6 and y == 7) or z > 1
#x > 4 or y == 6 and z > 3
#x > 4 or (y == 6 and z > 3)
#(x > 4 or y == 6) and z > 3
False
# BEWARE!
x = 5
y = 8
x > 2 or xx == 6 and xxx == 6
x > 42 or (y < 0 and someRandomVariable > 1000)
False
Python does short-circuit evaluation of operators
Lists (and strings) are an ORDERED collection of elements where every element can be access through an index.
l = [2,3,4,5,3,7,5,9]
s = 'somelongrandomstring'
s[0] = 'S'
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-51-302ede970bbc> in <module>() 2 s = 'somelongrandomstring' 3 ----> 4 s[0] = 'S' TypeError: 'str' object does not support item assignment
Mutable objects can be altered after creation, while immutable objects can't.
Immutable objects: Mutable objects:
int
• list
float
• set
bool
• dict
str
tuple
s = [0,1,2,3,4,5,6,7,8,9]
s.insert(5,10)
s
[0, 1, 2, 3, 4, 10, 5, 6, 7, 8, 9]
→ Notebook Day_1_Exercise_2 (~30 minutes)
fruits = ['apple','pear','banana','orange']
print(fruits[0])
print(fruits[1])
print(fruits[2])
print(fruits[3])
apple pear banana orange
fruits = ['apple','pear','banana','orange']
for fruit in fruits:
print(fruit)
apple pear banana orange
Always remember to INDENT your loops!
For
loop¶fruits = ['apple','pear','banana','orange']
for fruit in fruits:
print(fruit)
print('end')
apple pear banana orange end
While
loop¶fruits = ['apple','pear','banana','orange']
i = 0
while i < len(fruits):
print(fruits[i])
i = i + 2
apple banana
For
loop
Is a control flow statement that performs a fixed operation over a known amount of steps.
While
loop
Is a control flow statement that allows code to be executed repeatedly based on a given Boolean condition.
Which one to use?
For
loops better for simple iterations over lists and other iterable objects
While
loops are more flexible and can iterate an unspecified number of times
→ Notebook Day_1_Exercise_3 (~20 minutes)
if/else
statements¶shopping_list = ['bread', 'egg', 'butter', 'milk']
if len(shopping_list) > 2:
print('Go shopping!')
else:
print('Nah! I\'ll do it tomorrow!')
Go shopping!
shopping_list = ['bread', 'egg', 'butter', 'milk']
tired = True
if len(shopping_list) > 7:
if not tired:
print('Go shopping!')
else:
print('Too tired, I\'ll do it later')
else:
if not tired:
print('Better get it over with today anyway')
else:
print('Nah! I\'ll do it tomorrow!')
Nah! I'll do it tomorrow!
Any longer pieces of code that have been used and will be re-used SHOULD be saved
Two options:
Examples
./script.py
python script.py
fruits = ['apple','pear','banana','orange']
for fruit in fruits:
print(fruit)
apple pear banana orange
fh = open('../files/fruits.txt', 'r', encoding = 'utf-8')
for line in fh:
print(line.strip())
fh.close()
apple pear banana orange
'string'.strip()
Removes whitespace
'string'.split()
Splits on whitespace into list
s = 'an example string to split with whitespace in end '
sw = s.strip()
sw
l = sw.split()
l
l = s.strip().split()
l
['an', 'example', 'string', 'to', 'split', 'with', 'whitespace', 'in', 'end']
fh = open('../files/fruits.txt', 'r', encoding = 'utf-8')
for line in fh:
print(line.strip())
fh.close()
apple pear banana orange
fh = open("../files/bank_statement.txt", "r", encoding = "utf-8")
total = 0
for line in fh:
expenses = line.strip().split() # split line into list
store = expenses[0] # save what store
price = float(expenses[1]) # save the price
if store == 'ICA': # only count the price if store is ICA
total = total + price
fh.close()
print('Total amount spent on ICA is: '+str(total))
Total amount spent on ICA is: 1186.71
How much money is spent on ICA in September?
fh = open("../files/bank_statement_extended.txt", "r", encoding = "utf-8")
total = 0
for line in fh:
if not line.startswith('store'):
expenses = line.strip().split()
store = expenses[0]
year = expenses[1]
month = expenses[2]
day = expenses[3]
price = float(expenses[4])
if store == 'ICA' and month == '09': # store has to be ICA and month september
total = total + price
fh.close()
out = open("../files/bank_statement_result.txt", "w", encoding = "utf-8") # open a file for writing the results to
out.write('Total amount spent on ICA in september is: '+str(total))
out.close()
For
loops and While
loopsIf/Else
statement are used when deciding actions depending on a condition that evaluates to a booleanIf/Else
statements can be nestedopen()
can be used to read in text files→ Notebook Day_1_Exercise_4