From 6017e6b9e179caf4c78b989b3dbf030d2d897afb Mon Sep 17 00:00:00 2001 From: Chudgar Date: Tue, 9 Jan 2018 11:39:29 -0600 Subject: [PATCH 1/2] done --- exercise.py | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/exercise.py b/exercise.py index 0ae90ce..7856099 100644 --- a/exercise.py +++ b/exercise.py @@ -1,12 +1,23 @@ # problem 1 # ------------------------------------------------------------------- # +""" +python -m doctest -v exercise.py + +""" + people = ['Bob Smith', 'Ken Jones', 'Alex Bradino'] +def sort_by_last_name(people): + """ + sorts list alphabetically + >>> sort_by_last_name(people) + ['Alex Bradino', 'Ken Jones', 'Bob Smith'] -def sort_by_last_name(people, order): - # return full names sorted by last name in either ascending or descending order + """ + # return full names sorted by last name in ascending order + # ['Alex Bradino', 'Ken Jones', 'Bob Smith'] # add doctests make sure it passes - pass + return sorted(sorted(people), key=lambda n: n.split()[1]) # problem 2 @@ -14,11 +25,17 @@ def sort_by_last_name(people, order): names = ['James', 'Susan', 'Maggie'] ages = [4, 9, 12] - def create_dictionary_from_lists(names, ages): + """ + creates a new dictionary from lists names and ages + >>> create_dictionary_from_lists(names, ages) + {'James': 4, 'Maggie': 12, 'Susan': 9} + """ # {'James':4, 'Susan':9, 'Maggie':12} # add doctests make sure it passes - pass + mydict = {} + for i in range(len(names)): + mydict[names[i]] = ages[i] # problem 3 @@ -27,6 +44,11 @@ def create_dictionary_from_lists(names, ages): def square_even_values_and_sum_under_10(numbers): + """ + the squares for only the even values in list numbers that are less than 10 + >>> square_even_values_and_sum_under_10(numbers) + 100 + """ # 6^2 + 8^2] # add doctests make sure it passes - pass + return sum([n**2 for n in numbers if (n<10 and n%2==0)]) From cde12e194fa065880848edb1596b7fa2b936dc2e Mon Sep 17 00:00:00 2001 From: Chudgar Date: Tue, 9 Jan 2018 17:06:24 -0600 Subject: [PATCH 2/2] afternoon --- Supplies.csv | 44 ++ __pycache__/exercise.cpython-36.pyc | Bin 0 -> 1705 bytes __pycache__/morestats.cpython-36.pyc | Bin 0 -> 2107 bytes baseball.csv | 1016 ++++++++++++++++++++++++++ baseball_analysis.py | 19 + exercise.py | 11 +- morestats.py | 78 ++ supplies_analysis.py | 25 + 8 files changed, 1188 insertions(+), 5 deletions(-) create mode 100644 Supplies.csv create mode 100644 __pycache__/exercise.cpython-36.pyc create mode 100644 __pycache__/morestats.cpython-36.pyc create mode 100644 baseball.csv create mode 100644 baseball_analysis.py create mode 100644 morestats.py create mode 100644 supplies_analysis.py diff --git a/Supplies.csv b/Supplies.csv new file mode 100644 index 0000000..c7d93ac --- /dev/null +++ b/Supplies.csv @@ -0,0 +1,44 @@ +OrderDate,Region,Rep,Item,Units,Unit Price +4-Jul-14,East,Richard,Pen Set,62,4.99 +12-Jul-14,East,Nick,Binder,29,1.99 +21-Jul-14,Central,Morgan,Pen Set,55,12.49 +29-Jul-14,East,Susan,Binder,81,19.99 +7-Aug-14,Central,Matthew,Pen Set,42,23.95 +15-Aug-14,East,Richard,Pencil,35,4.99 +24-Aug-14,West,James,Desk,3,275 +1-Sep-14,Central,Smith,Desk,2,125 +10-Sep-14,Central,Bill,Pencil,7,1.29 +18-Sep-14,East,Richard,Pen Set,16,15.99 +27-Sep-14,West,James,Pen,76,1.99 +5-Oct-14,Central,Morgan,Binder,28,8.99 +14-Oct-14,West,Thomas,Binder,57,19.99 +22-Oct-14,East,Richard,Pen,64,8.99 +31-Oct-14,Central,Rachel,Pencil,14,1.29 +8-Nov-14,East,Susan,Pen,15,19.99 +17-Nov-14,Central,Alex,Binder,11,4.99 +25-Nov-14,Central,Matthew,Pen Set,96,4.99 +4-Dec-14,Central,Alex,Binder,94,19.99 +12-Dec-14,Central,Smith,Pencil,67,1.29 +21-Dec-14,Central,Rachel,Binder,28,4.99 +29-Dec-14,East,Susan,Pen Set,74,15.99 +6-Jan-15,East,Richard,Pencil,95,1.99 +15-Jan-15,Central,Bill,Binder,46,8.99 +23-Jan-15,Central,Matthew,Binder,50,19.99 +1-Feb-15,Central,Smith,Binder,87,15 +9-Feb-15,Central,Alex,Pencil,36,4.99 +18-Feb-15,East,Richard,Binder,4,4.99 +26-Feb-15,Central,Bill,Pen,27,19.99 +7-Mar-15,West,James,Binder,7,19.99 +15-Mar-15,West,James,Pencil,56,2.99 +24-Mar-15,Central,Alex,Pen Set,50,4.99 +1-Apr-15,East,Richard,Binder,60,4.99 +10-Apr-15,Central,Rachel,Pencil,66,1.99 +18-Apr-15,Central,Rachel,Pencil,75,1.99 +27-Apr-15,East,Nick,Pen,96,4.99 +5-May-15,Central,Alex,Pencil,90,4.99 +14-May-15,Central,Bill,Pencil,53,1.29 +22-May-15,West,Thomas,Pencil,32,1.99 +31-May-15,Central,Bill,Binder,80,8.99 +8-Jun-15,East,Richard,Binder,60,8.99 +17-Jun-15,Central,Matthew,Desk,5,125 +25-Jun-15,Central,Morgan,Pencil,90,4.99 diff --git a/__pycache__/exercise.cpython-36.pyc b/__pycache__/exercise.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8956f2c4533b7bdb006f3185d21e776fe3358617 GIT binary patch literal 1705 zcma)6OK;mo5Z)#AGHvH!J1J7Mz@iQy3$R@&3G#vEz z>A`gA2dUVTL`gGU`7V;j?4jl&R7u|f5Anmf4C4_Dvj!w3Gwb#nGNZ!%)djPq>7O2h z&m=lEEDFIUk46W)C)2RcqiABeoleI}1ieWRagzp$$8u{VlTjqMzvq#W4J-F^ebJHn zHmlEl#Le9I`u_i`eWu5At)DKQS9!)>p|wvTRQzzp9PGg`D?n!C6*(osxdulK_i2s- z`QPw0XjV3(C`=pFuZ*NNiTa)B60qOjdUU`0+`v&+4kx!?-5zycCwkbu(QMt_X~KVR zCr-2q)u6jjsI1nGc-#}ba|La~Ak$4u@tFkfwxa}cY&x(gq#I7=4&@}PYIy`ECHPgr zYf=CQ9K(EPswHL61^wQ}&TjRc# z9H7iNQ}Q(vVLuHM#r1@})JbdsXBeUhB$Qx$Ak7>a#ns@`odE9y2vW0U?`+!(1@?Za z+wki5*)0G`5gcqGWjx)Gf;KmV4+ptFL!D738 z)Bz3VLX3qVSa=hQBF6zIhb_a9F2yBGif literal 0 HcmV?d00001 diff --git a/__pycache__/morestats.cpython-36.pyc b/__pycache__/morestats.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99c52115c3768e567f42be4f8f4cdbe8e1fed1fb GIT binary patch literal 2107 zcmZ`)OK;mo5Z)#Apyfv#OYtLd3#RSC1QbD%ABh7&4d52&q3|UL0yy@8(X3>~e8|g{ zQw#D*37Q^y=$|Oizr;gPpeOx>T-uo>Wjl7V)XvU6XXcxSHs|L{e?NS2@Kuqqf7!K$ zbM_2-+(#l9urcQhI2iBP0T)bgFd;WK^lBaoxN1NVEF4Xkff9~6n1wk%9~2G>cyk^W zaIFY;=pHP>U08y0uXtcV1@7U_3@pP6jwM)q&YZR3+)u*yBl~3}eR$Y0Pzh=@Qs2WK zTS!K1#8(*J;QN0u$2iD^gP@^lQ*zwbjmAr*=5RtvRoKX=q>5=B z95X5SBJ8Q-B>&a}916$6>m92rH6=Zgl+L8+C^zi+VjkyH*)zy@$RcVqlGHuy@gfq1 zGRItTq7PE3j**!0AV^G<>hPq9z`RBTZi>qV!VT}zJDHIr^imM5<*{o)KO>V0x?rg& z;P=@@CKmWI1LMSy&y+y`fVrya3VUy?p<197qn$NW5OV0V{P53`jcqRq`U53mTOA8K z5a79?9d&Kj_PtmUm+7t#yRtV3M5vyAc2^2Dkm0q5^qqFQoxQv9s#$GRca9vr-n_ND zS>3K~Rd=)ft=hIeA#-T@1Us7$^!wz@IFd?$oW;2;A#n^zzE28)2jGjFI2Tg8?%|P` zjtfD=`Obpe?*`-vd#5nG&}MbL5Hips1iCB5=>Uep?9F6wJo0bImG!oA_;g0=T?`He6aqh*F%DvFn^hThJ1n(`oAP zgr6Wb98yqqnpiF04PJxW-lA*R*>E{P{c0^g>bQQ~MkYOgH_a1qKKT!uV@eW}m|mzP zCC=1qCWcrhOp=e%T+Gpn4o6A5xZ#04+l#qcJX8CaDO3a5&=8st1N(c(>>7k7*Q>u17jqpZo z^KrA@+-imhVZFS9?4Q_5DZvj7LG5LjJ| zT3y~p_C}b#FYLSkqTpcswmx zMfolApNE~Yib~dqj}72u3MymxUL$Z7{8;Zpa3$Cv&OBFnQD}D~X}fkm>JR*MLC<41 z==lNf*JkYpab$X~8wtv1yM9F~6Z21lHH?7WVQ9t5NYO*E2Lw?_x zP4az7p={D6`is!c(G?|`?L@whe>> sort_by_last_name(people) + >>> sort_by_last_name(people,False) ['Alex Bradino', 'Ken Jones', 'Bob Smith'] - + >>> sort_by_last_name(people,True) + ['Bob Smith', 'Ken Jones', 'Alex Bradino'] """ # return full names sorted by last name in ascending order # ['Alex Bradino', 'Ken Jones', 'Bob Smith'] # add doctests make sure it passes - return sorted(sorted(people), key=lambda n: n.split()[1]) + return sorted(people, key=lambda person: person.split()[-1], reverse=order) # problem 2 @@ -36,7 +37,7 @@ def create_dictionary_from_lists(names, ages): mydict = {} for i in range(len(names)): mydict[names[i]] = ages[i] - + return mydict # problem 3 # ------------------------------------------------------------------- # diff --git a/morestats.py b/morestats.py new file mode 100644 index 0000000..99632d3 --- /dev/null +++ b/morestats.py @@ -0,0 +1,78 @@ +print('Hello World!') +""" +python -m doctest -v morestats.py + +""" +def add(num1, num2): + return num1 + num2 + +print(add(2,3)) + + +#compute the volume of a rectangle +def vrectangle(length, width, height): + return length * width * height + +#compute the mean of a bunch of numbers +def mean(numbers): + return sum(numbers) /len(numbers) + +#compute the median of a bunch of numbers +def median(numbers): + """ + Computes the median of a list of numbers + argument: list of numbers + return the median + >>> median([2,1,6]) + 2 + >>> median([3,5,4,9]) + 4.5 + """ + numbers = sorted(numbers) + middle = len(numbers) // 2 + if len(numbers) % 2 == 0: + # even list + return sum(numbers[middle - 1:middle + 1]) / 2 + else: + # odd list + return numbers[middle] + +from collections import defaultdict +def mode(numbers): + """ + finds the most frequent value of a list + >>> mode([1,1,1,1,1,1,4,5,6]) + 1 + >>> mode([1,2,2,2,3,3,4]) + 2 + """ + d = defaultdict(int) + for num in numbers: + d[num] += 1 + return sorted(d, key=lambda k:d[k]) [-1] + +#varience tells us about the spread of the data +#the square root of varience is the standard deviation +#1 standard deviation is also called 1 sigma +#compute varience + +numbers = [1, 2, 3, 4, 5, 6, 7] +def variance (numbers, ddof): + """ + determines the variance of a set of numbers + >>> variance(numbers, 0) + 1.3720238095238095 + + """ + return sum([(num - mean(numbers)) ** 2 for num in numbers]) / (len(numbers) - ddof) + + +def stdev (numbers, ddof): + """ + finds the standard deviation for a population or a sample + >>> stdev(numnbers, 0) + 1 + >>> stdev(numnbers, 1) + 2 + """ + return variance(numbers, ddof) ** 0.5 diff --git a/supplies_analysis.py b/supplies_analysis.py new file mode 100644 index 0000000..764516d --- /dev/null +++ b/supplies_analysis.py @@ -0,0 +1,25 @@ +import pandas as pd +df = pd.read_csv('supplies.csv') + +#add a new column called total = units * unitsprice +df['Total'] = df['Units'] * df['Unit Price'] + +#show the mean, sum for each rep per region +regions = df.groupby(['Region','Rep'])['Total'].agg(['mean', 'sum', 'count']) + +#which are the largest? +largestthree = df.groupby(['Region','Rep'])['Total'].agg(['mean', 'sum', 'count']).nlargest(3, 'mean') + +regions = df.groupby(['Region'])['Total'].agg(['sum']) +reps = df.groupby(['Region'])['Rep'].unique() + + +#convert series into dataframe +rps = reps.to_frame() +reps = rps.reset_index() +regions = regions.reset_index() +merged = pd.merge(reps, regions, on='Region', how='inner').set_index('Region') + + +merged['count'] = merged.apply(lambda row: len(row['Rep']), axis=1) +merged['normalized'] = merged['sum'] / merged['count']