From e1e86fc5c904017219c1ab5b6ac6aa48e5e90593 Mon Sep 17 00:00:00 2001 From: Ehsan Moravveji Date: Sun, 12 Oct 2025 19:56:25 +0200 Subject: [PATCH 01/13] restructuring the repo --- docs/PythonIntro.zip | Bin 605621 -> 0 bytes notebooks/GJB_data_types_recap.ipynb | 2170 +++++++ notebooks/basic_datatypes.ipynb | 723 +++ notebooks/basic_syntax.ipynb | 292 + notebooks/control_flow_conditionals.ipynb | 329 ++ notebooks/control_flow_loops.ipynb | 1050 ++++ notebooks/debugging_basics.ipynb | 166 + notebooks/dict.ipynb | 463 ++ notebooks/functions.ipynb | 630 ++ notebooks/getting_started_jupyter.ipynb | 328 ++ notebooks/intro_to_numpy.ipynb | 824 +++ notebooks/io.ipynb | 970 ++++ notebooks/list.ipynb | 804 +++ notebooks/operators.ipynb | 457 ++ notebooks/quick_start_matplotlib.ipynb | 1117 ++++ notebooks/set.ipynb | 244 + notebooks/tuple.ipynb | 317 + notebooks/variables.ipynb | 413 ++ scripts/MOCK_DATA.csv | 1001 ++++ scripts/MOCK_DATA_out.csv | 1001 ++++ scripts/accum_pattern_multiple-scrabble.py | 30 + scripts/accum_pattern_multiple.py | 22 + scripts/accum_pattern_single.py | 13 + scripts/accum_pattern_single_text.py | 33 + scripts/actors.csv | 5 + scripts/bitwise.py | 30 + scripts/block_code.py | 15 + scripts/check_variable_object.py | 18 + scripts/check_whitespace.py | 31 + scripts/command_line_io.py | 20 + scripts/convert_from_decimal.py | 23 + scripts/convert_to_decimal.py | 22 + scripts/create_lists.py | 16 + scripts/deck.py | 47 + scripts/demo_mix.xlsx | Bin 0 -> 9175 bytes scripts/dictionaries_1.py | 41 + scripts/fibonacci.py | 48 + scripts/file_basic_input.py | 17 + scripts/file_io_2.py | 19 + scripts/file_io_3.py | 12 + scripts/file_io_forLoop.py | 17 + scripts/file_io_header.py | 30 + scripts/file_io_readline.py | 22 + scripts/file_io_readlines.py | 19 + scripts/file_io_readlines_1.py | 17 + scripts/file_io_write_1.py | 35 + scripts/file_io_writelines_1.py | 20 + scripts/file_read_csv_dict.py | 15 + scripts/file_read_csv_list.py | 14 + scripts/file_read_from_csv.py | 15 + scripts/file_squares.txt | 10 + scripts/file_write_csv.py | 23 + scripts/first_1.py | 11 + scripts/first_15.py | 4 + scripts/first_prog_1.py | 26 + scripts/first_sum.py | 15 + scripts/for_loop_1.py | 21 + scripts/for_loop_2.py | 2 + scripts/for_loop_else.py | 14 + scripts/for_loop_index.py | 21 + scripts/for_loop_list.py | 12 + scripts/for_loop_sequence.py | 23 + scripts/for_loop_vanrossum_1.py | 15 + scripts/for_loop_zip.py | 13 + scripts/format_io_1.py | 15 + scripts/format_string.py | 25 + scripts/fstring_01.py | 25 + scripts/function_1.py | 59 + scripts/function_arg_kwarg.py | 38 + scripts/function_arg_kwarg_1.py | 23 + scripts/function_argument_pass_1.py | 62 + scripts/function_on_list.py | 31 + scripts/function_optional_arguments.py | 27 + scripts/function_pass_mutable.py | 19 + scripts/function_pass_nonmutable.py | 20 + scripts/function_return.py | 26 + scripts/function_scope_1.py | 14 + scripts/function_scope_2.py | 14 + scripts/function_scope_3.py | 15 + scripts/function_scope_4.py | 19 + scripts/function_scope_5.py | 38 + scripts/functions_args_1.py | 33 + scripts/generate_data.py | 8 + scripts/get_help.py | 15 + scripts/greetings_bucket.py | 11 + scripts/greetings_calling.py | 16 + scripts/greetings_func.py | 19 + scripts/greetings_more_func.py | 18 + scripts/handson_lists.py | 35 + scripts/hello.py | 29 + scripts/hello_world.py | 9 + scripts/hello_world_function.py | 16 + scripts/hello_world_input.py | 5 + scripts/hi_python.py | 8 + scripts/if_1.py | 24 + scripts/if_else_1.py | 30 + scripts/import_1.py | 9 + scripts/input_1.py | 21 + scripts/isVow_module.py | 19 + scripts/isVow_script.py | 16 + scripts/isVow_using.py | 23 + scripts/iterator_1.py | 54 + scripts/lambda_func_1.py | 17 + scripts/lines_10.txt | 19 + scripts/list_cheat.py | 70 + scripts/list_copy.py | 50 + scripts/list_nested.py | 19 + scripts/make_it_upper.py | 18 + scripts/mall_customers.csv | 201 + scripts/mall_customers.xlsx | Bin 0 -> 15057 bytes scripts/matplotlib_first_plot.py | 21 + scripts/matplotlib_first_plot_oo.py | 28 + scripts/matplotlib_hierarchy.png | Bin 0 -> 39422 bytes scripts/middle.py | 31 + scripts/min_max_f.py | 19 + scripts/mod_random.py | 35 + scripts/module_1.py | 12 + scripts/module_math_1.py | 11 + scripts/multi_return_func.py | 17 + scripts/my_accum.py | 17 + scripts/my_first_script.py | 17 + scripts/my_function_1.py | 16 + scripts/my_module.py | 13 + scripts/my_script.py | 4 + scripts/name.txt | 1 + scripts/name_01.txt | 1 + scripts/name_02.txt | 4 + scripts/named_tuple.py | 25 + scripts/nested_while_error.py | 21 + scripts/nextSquare.py | 27 + scripts/pass_arguments_1.py | 17 + scripts/pass_by_reference_list.py | 25 + scripts/pass_by_reference_number.py | 20 + scripts/pass_example.py | 15 + scripts/people_data.csv | 4 + scripts/person.csv | 3 + scripts/persons_bis.csv | 3 + scripts/print_1.py | 17 + scripts/print_greet.py | 13 + scripts/print_greet_call1.py | 11 + scripts/print_greet_call2.py | 11 + scripts/print_greet_main.py | 13 + scripts/py_call_matlab.py | 10 + scripts/python_test.py | 5 + scripts/python_test_1.py | 10 + scripts/scope_01.py | 15 + scripts/sea_rose.txt | 20 + scripts/sequence_index.png | Bin 0 -> 4013 bytes scripts/simple_math.py | 17 + scripts/string_2_list.py | 12 + scripts/string_intro.py | 30 + scripts/string_reverse.py | 13 + scripts/students.txt | 4 + scripts/students_header.txt | 5 + scripts/study_in_scarlet.txt | 5156 +++++++++++++++++ scripts/sum_brute_force.py | 127 + scripts/sum_for_loop.py | 16 + scripts/sum_while_loop.py | 19 + scripts/support_print.py | 17 + scripts/support_print_use.py | 16 + scripts/support_print_use_bis.py | 18 + scripts/test_text.txt | 49 + scripts/testfile-write.txt | 7 + scripts/testfile-writelines.txt | 2 + scripts/testfile.txt | 37 + scripts/text_from_web.py | 21 + scripts/try_except_1.py | 15 + scripts/try_except_2.py | 26 + scripts/ucfirst.py | 23 + scripts/use_print_greet.py | 11 + scripts/use_print_greet_main.py | 11 + scripts/variables_are_pointers.py | 63 + scripts/while_loop_1.py | 16 + scripts/while_loop_break_continue.py | 19 + .../Python_asASecondLanguage_overview.pdf | Bin .../Python_intro-builtin_datatypes.pdf | Bin .../Python_intro-control_flow.pdf | Bin .../Python_intro-dataContainers.pdf | Bin {docs => slides}/Python_intro-functions.pdf | Bin {docs => slides}/Python_intro-io.pdf | Bin {docs => slides}/Python_intro-syntax.pdf | Bin .../Python_intro-userEnvironments.pdf | Bin .../Python_intro-variables_operators.pdf | Bin {docs => slides}/python_install_miniforge.pdf | Bin 184 files changed, 21739 insertions(+) delete mode 100644 docs/PythonIntro.zip create mode 100644 notebooks/GJB_data_types_recap.ipynb create mode 100644 notebooks/basic_datatypes.ipynb create mode 100644 notebooks/basic_syntax.ipynb create mode 100644 notebooks/control_flow_conditionals.ipynb create mode 100644 notebooks/control_flow_loops.ipynb create mode 100644 notebooks/debugging_basics.ipynb create mode 100644 notebooks/dict.ipynb create mode 100644 notebooks/functions.ipynb create mode 100644 notebooks/getting_started_jupyter.ipynb create mode 100644 notebooks/intro_to_numpy.ipynb create mode 100644 notebooks/io.ipynb create mode 100644 notebooks/list.ipynb create mode 100644 notebooks/operators.ipynb create mode 100644 notebooks/quick_start_matplotlib.ipynb create mode 100644 notebooks/set.ipynb create mode 100644 notebooks/tuple.ipynb create mode 100644 notebooks/variables.ipynb create mode 100644 scripts/MOCK_DATA.csv create mode 100644 scripts/MOCK_DATA_out.csv create mode 100644 scripts/accum_pattern_multiple-scrabble.py create mode 100644 scripts/accum_pattern_multiple.py create mode 100644 scripts/accum_pattern_single.py create mode 100644 scripts/accum_pattern_single_text.py create mode 100644 scripts/actors.csv create mode 100644 scripts/bitwise.py create mode 100644 scripts/block_code.py create mode 100644 scripts/check_variable_object.py create mode 100644 scripts/check_whitespace.py create mode 100644 scripts/command_line_io.py create mode 100644 scripts/convert_from_decimal.py create mode 100644 scripts/convert_to_decimal.py create mode 100644 scripts/create_lists.py create mode 100644 scripts/deck.py create mode 100644 scripts/demo_mix.xlsx create mode 100644 scripts/dictionaries_1.py create mode 100644 scripts/fibonacci.py create mode 100644 scripts/file_basic_input.py create mode 100644 scripts/file_io_2.py create mode 100644 scripts/file_io_3.py create mode 100644 scripts/file_io_forLoop.py create mode 100644 scripts/file_io_header.py create mode 100644 scripts/file_io_readline.py create mode 100644 scripts/file_io_readlines.py create mode 100644 scripts/file_io_readlines_1.py create mode 100644 scripts/file_io_write_1.py create mode 100644 scripts/file_io_writelines_1.py create mode 100644 scripts/file_read_csv_dict.py create mode 100644 scripts/file_read_csv_list.py create mode 100644 scripts/file_read_from_csv.py create mode 100644 scripts/file_squares.txt create mode 100644 scripts/file_write_csv.py create mode 100644 scripts/first_1.py create mode 100644 scripts/first_15.py create mode 100644 scripts/first_prog_1.py create mode 100644 scripts/first_sum.py create mode 100644 scripts/for_loop_1.py create mode 100644 scripts/for_loop_2.py create mode 100644 scripts/for_loop_else.py create mode 100644 scripts/for_loop_index.py create mode 100644 scripts/for_loop_list.py create mode 100644 scripts/for_loop_sequence.py create mode 100644 scripts/for_loop_vanrossum_1.py create mode 100644 scripts/for_loop_zip.py create mode 100644 scripts/format_io_1.py create mode 100644 scripts/format_string.py create mode 100644 scripts/fstring_01.py create mode 100644 scripts/function_1.py create mode 100644 scripts/function_arg_kwarg.py create mode 100644 scripts/function_arg_kwarg_1.py create mode 100644 scripts/function_argument_pass_1.py create mode 100644 scripts/function_on_list.py create mode 100644 scripts/function_optional_arguments.py create mode 100644 scripts/function_pass_mutable.py create mode 100644 scripts/function_pass_nonmutable.py create mode 100644 scripts/function_return.py create mode 100644 scripts/function_scope_1.py create mode 100644 scripts/function_scope_2.py create mode 100644 scripts/function_scope_3.py create mode 100644 scripts/function_scope_4.py create mode 100644 scripts/function_scope_5.py create mode 100644 scripts/functions_args_1.py create mode 100644 scripts/generate_data.py create mode 100644 scripts/get_help.py create mode 100644 scripts/greetings_bucket.py create mode 100644 scripts/greetings_calling.py create mode 100644 scripts/greetings_func.py create mode 100644 scripts/greetings_more_func.py create mode 100644 scripts/handson_lists.py create mode 100644 scripts/hello.py create mode 100644 scripts/hello_world.py create mode 100644 scripts/hello_world_function.py create mode 100644 scripts/hello_world_input.py create mode 100644 scripts/hi_python.py create mode 100644 scripts/if_1.py create mode 100644 scripts/if_else_1.py create mode 100644 scripts/import_1.py create mode 100644 scripts/input_1.py create mode 100644 scripts/isVow_module.py create mode 100644 scripts/isVow_script.py create mode 100644 scripts/isVow_using.py create mode 100644 scripts/iterator_1.py create mode 100644 scripts/lambda_func_1.py create mode 100644 scripts/lines_10.txt create mode 100644 scripts/list_cheat.py create mode 100644 scripts/list_copy.py create mode 100644 scripts/list_nested.py create mode 100644 scripts/make_it_upper.py create mode 100644 scripts/mall_customers.csv create mode 100644 scripts/mall_customers.xlsx create mode 100644 scripts/matplotlib_first_plot.py create mode 100644 scripts/matplotlib_first_plot_oo.py create mode 100644 scripts/matplotlib_hierarchy.png create mode 100644 scripts/middle.py create mode 100644 scripts/min_max_f.py create mode 100644 scripts/mod_random.py create mode 100644 scripts/module_1.py create mode 100644 scripts/module_math_1.py create mode 100644 scripts/multi_return_func.py create mode 100644 scripts/my_accum.py create mode 100644 scripts/my_first_script.py create mode 100644 scripts/my_function_1.py create mode 100644 scripts/my_module.py create mode 100644 scripts/my_script.py create mode 100644 scripts/name.txt create mode 100644 scripts/name_01.txt create mode 100644 scripts/name_02.txt create mode 100644 scripts/named_tuple.py create mode 100644 scripts/nested_while_error.py create mode 100644 scripts/nextSquare.py create mode 100644 scripts/pass_arguments_1.py create mode 100644 scripts/pass_by_reference_list.py create mode 100644 scripts/pass_by_reference_number.py create mode 100644 scripts/pass_example.py create mode 100644 scripts/people_data.csv create mode 100644 scripts/person.csv create mode 100644 scripts/persons_bis.csv create mode 100644 scripts/print_1.py create mode 100644 scripts/print_greet.py create mode 100644 scripts/print_greet_call1.py create mode 100644 scripts/print_greet_call2.py create mode 100644 scripts/print_greet_main.py create mode 100644 scripts/py_call_matlab.py create mode 100644 scripts/python_test.py create mode 100644 scripts/python_test_1.py create mode 100644 scripts/scope_01.py create mode 100644 scripts/sea_rose.txt create mode 100644 scripts/sequence_index.png create mode 100644 scripts/simple_math.py create mode 100644 scripts/string_2_list.py create mode 100644 scripts/string_intro.py create mode 100644 scripts/string_reverse.py create mode 100644 scripts/students.txt create mode 100644 scripts/students_header.txt create mode 100644 scripts/study_in_scarlet.txt create mode 100644 scripts/sum_brute_force.py create mode 100644 scripts/sum_for_loop.py create mode 100644 scripts/sum_while_loop.py create mode 100644 scripts/support_print.py create mode 100644 scripts/support_print_use.py create mode 100644 scripts/support_print_use_bis.py create mode 100644 scripts/test_text.txt create mode 100644 scripts/testfile-write.txt create mode 100644 scripts/testfile-writelines.txt create mode 100644 scripts/testfile.txt create mode 100644 scripts/text_from_web.py create mode 100644 scripts/try_except_1.py create mode 100644 scripts/try_except_2.py create mode 100644 scripts/ucfirst.py create mode 100644 scripts/use_print_greet.py create mode 100644 scripts/use_print_greet_main.py create mode 100644 scripts/variables_are_pointers.py create mode 100644 scripts/while_loop_1.py create mode 100644 scripts/while_loop_break_continue.py rename {docs => slides}/Python_asASecondLanguage_overview.pdf (100%) rename {docs => slides}/Python_intro-builtin_datatypes.pdf (100%) rename {docs => slides}/Python_intro-control_flow.pdf (100%) rename {docs => slides}/Python_intro-dataContainers.pdf (100%) rename {docs => slides}/Python_intro-functions.pdf (100%) rename {docs => slides}/Python_intro-io.pdf (100%) rename {docs => slides}/Python_intro-syntax.pdf (100%) rename {docs => slides}/Python_intro-userEnvironments.pdf (100%) rename {docs => slides}/Python_intro-variables_operators.pdf (100%) rename {docs => slides}/python_install_miniforge.pdf (100%) diff --git a/docs/PythonIntro.zip b/docs/PythonIntro.zip deleted file mode 100644 index 66579eaef313053e08ac70129752840d99236cfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 605621 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

o+$4wYl(lC2{(OvN^ebRo9#x|I1wF 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

3O=ZRZ<@Qd=HeO^u@{_2D3A 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

YAfks==tVdb|Goh1vjHe*i6tx6iFv^ewfg4 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 z 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 ~Nrj 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

>YrS!dlw{Rd%t1ZSoUuF0{*S&KCLkLCpqr zfm*1Dyba{sw!)mpcO0Y$X9pV_!t){K&d@_5*_?~mE=@}>#28cv06L53S403IIy-=N zNwg2j7JogOUT0bnX>jN@x`1qLDE=xAQu6AGBzP9&%05zr7V@M9O7Voj2?Fia4U1eP zQY*|jX>6cRQo4l=Gu7xz5Z}TAMu>H8Ej@)Z?P~Jp9 z;S@aZR8}QJtRKyUM?+1}j4_eJXT)znGgOYW^Bf=yva@(LWbqGiptbgd2)w?bQ$#9B zoF1c^0=hhRkAkIr2{r`Wgy*WQO&^5?!Hp|HA&mVV9Tn~7Mo>PSSKFp%HKGGd9?A#8 zU3PK}Kptwe1pzaZ!TM`-cHgHy`^M%dTeJ;ys!~_tYXAx-K!L9Tl_o&(MXmLv;;ZPV zME_`qcMo!EQb*V3Ut4UQI=!*3!Bz!lUvSJJpaBn!y8v|; zwDa26BVcxOW#Hz!{r{p&zea}y>5b&MsQ1MT$QyjXV5aS?rul-am{(`n<^+gD*-&fvvtLmWQetr!+({izf_@o zEep{^PJ!?0uDY(5TkC~kakCYn|9T@pjTl&0x}$MoNq6KuAUr5X2#;-Vpnrp5e9+F& zb82|oFO-S;1(7C?n?ZI+%{j}r%7C~k0YHcq0Km8c((5^H{KLOhVI=UMO+xGYdkOd# z$xgp?*a2~9z=Nx$H2^Hg3KBRLmO2jqb}ZIuGbqAo!=)o@4NV@R4bs34gs#2UX!O4U z);CAI=76TM(XS~`wpeSuhfh8N0)Rd_Md(&c7VNDe;#OP%Z+P5c?AVtNXhXSKxM6j& z`H%L0FOa|tcf+u5H<3em@`Sz~1vzHqJfIC7%y7R#4g;f)f>PK7hi3YV<=8Dy4z8m?dI%pzbK5!e7Zwu$;_sb_R zffZ_t{99n_+9WE+Wvt64aY7bgKm)!Y>2?5QEu{%=>JWD2F=!@b6X_Sq)_SS=ZA^pR z1<>{a1Mb0)*~91)s+2#j{R`>lPF@8lSxGN4OF+Fg3LqOUWod7zYs{nuXR7+#k7S}Dh@>M z>-d4hm2<-4@K$hkJF?=(v;zkrjK6g5e;twk!Ahiaf6{SKlVa-VK}a|jKsfNtutOY> z2I*{YEHJbvfKD9v|yF0iFA&p1@LO~q+_>1fg3jffbTYA ziT?p$G2lK9VGCW+L#NCCl5`yrw0sT7!-L;6SA+=#5 z9o%f7Q@qSr%i0J~hALlhtJ<-FI;aY-HP++1;1;`6h_#8o!#&gf*u%pQC63aV$?*;d z(_`x__<~J<@~}o@oq)pPqr4ZCaAw;)Q%U&YRc^o#^ur0pug6q>`3x(}^u;mllptvW#TJTj+hBC0K%_#ZUi`2w+`^B58?OcD`9Jq^zDHJk%|f7=OQ`by5BAgNv}0;4hyZA!2U{pSRygKCllW4}a_)hTwg) zE|*Ay0pY9d8xg1m00R6CcNl<`x|=T%mxJ(0^o;;J24MgMj&l3YJ$^(02w&RX2*B_b z0Q`A(d*kf4u@_Sjt7Q>BRJoD3_$1YaXDc_-MjSndQ6W;_Abf>!Bkj@;fHuLKj4%wN z\", line 2, in \n", + " patient[1] = 16\n", + "TypeError: 'tuple' object does not support item assignment\n" + ] + } + ], + "source": [ + "try:\n", + " patient[1] = 16\n", + "except:\n", + " print_exc()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `tuple` seems a reasonable data type to represent our patients, so let's proceed with the function to read them." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def read_patients(file_name):\n", + " '''\n", + " Generator function that yields the patients in a file.\n", + " file_name: name of the data file\n", + " returns tuples representing the patients\n", + " '''\n", + " with open(file_name, 'r') as patients:\n", + " # read but ignore the column names, special use of underscore\n", + " # underscore considered a general purpose \"throwaway\" variable name to indicate \n", + " # that it is being deliberately ignored \n", + " _ = patients.readline()\n", + " # iterate over all the patient data\n", + " for line in patients:\n", + " # strip the line endings, and split on whitespace\n", + " data = line.rstrip().split()\n", + " # turn this function into a generator by yielding a tuple\n", + " # representing a patient; for convenience, do appropriate\n", + " # type conversion\n", + " yield (str(data[0]), int(data[1]), float(data[2]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `yield` statement interrupts the execution of the function, returning a value. When the function is called again, execution will resume from that same point in the function, retaining state." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's test the function by simply printing the results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for patient in read_patients('Data/patients.txt'):\n", + " print(patient)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That seems to work quite well. Let's proceed with some data analytics." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Named tuples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Although this implementation works, it has a drawback. We have to remember that `patient[0]` is the name, `patient[1]` the age, and `patient[2]` the weight of the patient. This is error-prone, and may give rise to subtle bugs. It would be much more convenient if we could access the `tuple`'s fields by name, rather than by index. Python's standard library implements a convenient way to define named tuples through `typing.NameTuple`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from typing import NamedTuple\n", + "\n", + "class Patient(NamedTuple):\n", + " name: str\n", + " age: int\n", + " weight: float" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will cover defining our own classes elsewhere, but this is quite staightforward. Note that `typing.NamedTuple` was introduced in Python 3.5, for earlier version of Python, you can use the somewhat more cumbersome `collections.namedtuple`. A named tuple of type `Patient` has three fields, `name`, `age`, and `weight`, which we declare using type hints, `str`, `int`, and `float` respectively. Let's redefine the tuple representing Suzan." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient = Patient('suzan', 15, 48.9)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The type of this data structure is `Patient`, and we can access the values of its fields by 0-based index, but also by name. The number of fields can be determined using the `len` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "type(patient)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient[0], patient.name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "len(patient)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similar to Python's built-in `tuple`, a named tuple is immutable, i.e., it can not be modified after its creation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "try:\n", + " patient.age = 16\n", + "except:\n", + " print_exc()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Modifying the function `read_patients` to return named tuples is trivial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def read_patients(file_name):\n", + " '''\n", + " Generator function that yields the patients in a file.\n", + " file_name: name of the data file\n", + " returns named tuples representing the patients\n", + " '''\n", + " with open(file_name, 'r') as patients:\n", + " # read but ignore the column names\n", + " _ = patients.readline()\n", + " # iterate over all the patient data\n", + " for line in patients:\n", + " # strip the line endings, and split on whitespace\n", + " data = line.rstrip().split()\n", + " # turn this function into a generator by yielding a tuple\n", + " # representing a patient; for convenience, do appropriate\n", + " # type conversion\n", + " yield Patient(str(data[0]), int(data[1]), float(data[2]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To illustrate, let's read the patient, but only print their names." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for patient in read_patients('Data/patients.txt'):\n", + " print(patient.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lists" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `list` is a very convenient data type, representing an ordered sequence. We can for instance create a list of names of our patients." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names = list()\n", + "for patient in read_patients('Data/patients.txt'):\n", + " patient_names.append(patient.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We start off with an empty list, created using the `list()` function, and we append the name of each patient to it. The resulting list contains the patient names, in the order they have been read from the file, and added to the list `patient_names`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "List elements can be accessed by 0-based index, and the length of a list can be obtained using the `len` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names[1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "len(patient_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Trying to access an element using an invalid index, e.g., one that is larger than the length of the `list` raises an exception." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "try:\n", + " print(patient_names[len(patient_names)])\n", + "except:\n", + " print_exc()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can iterate over the elements of a `list` using a `for`-loop." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for patient_name in patient_names:\n", + " print(patient_name.capitalize())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In contrast to a `tuple`, the elements of a list can be modified, for instance, if we want to change `'bob'` to `'robert'`, we can just do that." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names[1] = 'robert'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for patient_name in patient_names:\n", + " print(patient_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Surreptitiously, we have already used a `list` when we used the `split` method on the lines of our data file. The inverse operation, converting a `list` of `str` type elements can be accomplished using the `join` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "', '.join(patient_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that `join` is a method defined on a `str`, the separator, and that is argument must be an iterable over `str` values." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Indices can be negative, for instance the element at index `-1` would be the last element of the list, `-2` the second but last, and so on. Hence, if the list has $n$ elements, legal index values run from $-n$ to $n - 1$. Although that is a nice shortcut, it is also a good way to introduce subtle bugs in your code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names[-1] == patient_names[len(patient_names) - 1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names[0] == patient_names[-len(patient_names)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modifying & querying lists" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Whereas the number of fields of a `tuple` is always the same, elements can be added to or removed from a list at any time. Besides the `append` method we have already used to build the list, there is the `insert` method to add elements anywhere in the list, and the `pop` method to remove elements." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names.insert(2, 'kathy')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for patient_name in patient_names:\n", + " print(patient_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names.pop(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our `patient_names` list now has `'kathy'` as the third element, while `'elly'` is no longer an element." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "', '.join(patient_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the `pop()` method without an index will remove and return the list's last element, `'john'` in this case." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names.pop()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Checking list membership is easy using the `in` operator, for instance, `'robert'` is in our list, while `'mary'` isn't." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "'robert' in patient_names" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "'mary' in patient_names" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `index` method will return... the index at which an element first occurs in a list, and raises an exception otherise." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names.index('robert')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "try:\n", + " patient_names.index('mary')\n", + "except:\n", + " print_exc()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the same element can occur multiple times in a list, for instance, we can add another `'alice'` at the end of the list." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names.append('alice')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `index` method will only return the index of the first occurence. However, since it can optionally be called with a start, and and end index, we can also search from the end of the list." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names.index('alice')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names.index('alice', -1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `pop` method removes an element at a given index, the `remove` method removes an element by value. If we remove `'alice'` from the list, only the `'alice'` at the end of the list will remain. Removing a value that doesn't occur in the list will raise an exception." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "', '.join(patient_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names.remove('alice')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just as for the `index` method, using -1 as a start index would remove the last `'alice'` from the `list`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "', '.join(patient_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Aliasing versus copying" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It may be a bit counter-intuitive, but assigning a list to a new variable doesn't copy the list. The new variable refers to the same list as the original one. We assign `patient_names` to another variable, remove the first element, and check the value of both variables." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "other_patient_names = patient_names" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "other_patient_names.pop(0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "', '.join(other_patient_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "', '.join(patient_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `copy` method will create an actual copy of the original list." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "other_patient_names = patient_names.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "other_patient_names.pop()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "', '.join(other_patient_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "', '.join(patient_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Slicing" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can create sublists out of list by \"slicing\", i.e., indexing by a start index, and end index, and, optionally, a stride. For instance, we could select the first three elements of the list, or the second to the sixth element, but only every other element." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names[0:3]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names[1:6:2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Both the start and end index can be left out, that means that the slice starts from the beginning, or runs up to the end of the list respectively. Combined with negative indices, this is quite expressive. Getting the first, or the last three elements of list is quite trivial that way." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names[-3:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Leaving out both start and end index, and using a stride of -1 is a neat thrick to reverse a list." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patient_names[::-1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that slicing creates a new list, but that it is a shallow copy. This is important when list elements are mutable." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating lists" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The simplest way to construct a list is by a literal enumeration of its elements." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "first_names = ['peter', 'sally', 'vaughan', 'sophie', 'patrick']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, new lists can be constructed from iterables by comprehension. For instance, a list of capitalized names can be constructed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "[name.capitalize() for name in first_names]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is also possible to select only certain elements for the new list by adding an `if` clause to the comprehension." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "[name.capitalize() for name in first_names if name.startswith('p')]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Returning to our running example, we can combine this to select the names of the patients that are older than 35." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "[patient.name for patient in read_patients('Data/patients.txt') if patient.age > 35]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the `list` function, we can also create a list of the patients in our data file using the generator." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "patients = list(read_patients('Data/patients.txt'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# read_patients returns a named tuple\n", + "patients" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(patients[0].age)\n", + "print(patients[6].name)\n", + "print(patients[-1].weight)\n", + "\n", + "# can the age be updated?\n", + "patients[0].age = 88" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lists can be concatenated using the `+` operator, or extended throught the `extend` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "['alice', 'bob'] + ['carol', 'dave']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Which ages are represented in our group of patients? When we want to answer this question, we actually ask for a mathematical set containing the ages, each element of the set occurs only once. We could accomplish this using a `list` as well, but that would be pretty cumbersome." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_list = list()\n", + "for patient in read_patients('Data/patients.txt'):\n", + " if patient.age not in age_list:\n", + " age_list.append(patient.age)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using Python's built-in `set` type, this task is not only easier, but the data structure represents the mathematical concept we actually have in mind." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_set = set()\n", + "for patient in read_patients('Data/patients.txt'):\n", + " age_set.add(patient.age)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is even simpler using a set comprehension, similar to the list comprehension we've encountered before." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_set = {patient.age for patient in read_patients('Data/patients.txt')}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The number of elements of a `set` is obtained using the `len` function, and we can test membership using the `in` operator." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "len(age_set)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "40 in age_set" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "53 in age_set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As opposed to a `list`, a `set` is not a sequence, i.e., it is not ordered, it has no first, second, or last element. This is of course the same for a mathematical set, which is obviously no coincidence." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Iterating over the elements of a `set` is done using a `for`-loop." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for age in age_set:\n", + " print(age)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modifying sets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `add` method adds an element to an existing set. To remove an element, we can use the `pop()` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_set.pop()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the element that is removed is random (well, implementation dependent, to be precise). To remove an element from the set, you can use either the `remove` or `discard` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_set.remove(41)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "try:\n", + " age_set.remove(41)\n", + "except:\n", + " print_exc()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `discard` method will not raise an exception when we try to remove an element that is not in the set. To remove all elements from a `set`, we can use the `clear` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_set.clear()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "len(age_set)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set operations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All the mathematical operation you would expect on sets are indeed defined, e.g., union (`|`), intersection (`&`), difference (`-`), symmetric difference (`^`)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "set1 = {1, 2, 3, 4, 6, 12}\n", + "set2 = {1, 3, 5, 15}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "set1 | set2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "set1 & set2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "set1 - set2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "set2 - set1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "set1 ^ set2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All operations create a new set, an method to perform these operations in place is implemented, mainly for performance reasons. For example, `difference_update` applied to `set1` would modify that set." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "set1.difference_update(set2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "set1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Three Boolean methods are available as well,\n", + " * `s1.isdisjoint(s2)` will test whether the sets are disjoint,\n", + " * `s1.issubset(s2)` will check whether `s1` is a subset of `s2`, and\n", + " * `s1.issuperset(s2)` checks whether `s1` is a superset of `s2`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dictionaries" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `dict` is a mapping from a set of keys to a map of values, each key maps onto exactly one value, but multiple keys may map the the same value. This corresponds to a mathematical relation called an injection. `dict`s are a very convenient data type to represent associations between objects." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "back to the running example. What if we want to know how many patient there are of each age? So with an age, we want to associate a count. We can represent this by a dictonary that has a patient's age as keys, and the number of patients at that age as values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_distr = dict()\n", + "for patient in read_patients('Data/patients.txt'):\n", + " if patient.age not in age_distr:\n", + " age_distr[patient.age] = 0\n", + " age_distr[patient.age] += 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_distr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We start off with an empty `dict`, and iterate over the patients as usual. For each patient, we check whether her age is in the `dict` as a key using the `in` operator. If not, we associate the value 0 with that key. Next, we increment the value associated with the key.` " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can get the value associated with a key by using the latter as an index, and we can get the number of key/value pairs using the `len` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_distr[33]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "len(age_distr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Trying to access a `dict` with a key not in the `dict` raises an exception." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "try:\n", + " print(age_distr[-5])\n", + "except:\n", + " print_exc()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can iterate over the keys in a dictionary, and use that to access the corresponding value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# using the f format\n", + "# https://www.datacamp.com/community/tutorials/f-string-formatting-in-python\n", + "for age in age_distr:\n", + " print(f'{age}: {age_distr[age]}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This pattern is so common that the `items` method is defined for `dict`s. When called, this method yields `tuple`s where the first field is the key, the second the value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for age, count in age_distr.items():\n", + " print(f'{age}: {count}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that starting from Python 3.6, keys and item are returned in insertion order. For older version of Python, the order can and should not be relied on." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modifying dictionaries" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "New items can be added to a `dict` at any time, or existing values can be updated by assignment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_distr[20] = 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_distr" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_distr[20] = 4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_distr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An item can be removed from the `dictt` using the `remove` method, which takes the key as an argument. The value associated with that key is returned. If we try to remove an item with a key that is not in the `dict`, an exception is raised." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_distr.pop(20)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "try:\n", + " age_distr.pop(20)\n", + "except:\n", + " print_exc()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just like sets and lists, dictionaries can also be constructed using comprehensions. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just like sets and lists, dictionaries can also be constructed using comprehensions. We will create some people with random ages." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "from random import randint\n", + "random.seed(1234)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "people = {name: randint(20, 40) for name in ['zoe', 'wolf', 'thomas']}\n", + "people" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "more_people = {name: randint(20, 40) for name in ['elsie', 'frank', 'thomas']}\n", + "more_people" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Two dictionaries can be merged using the `update` method, which modifies the `dict` in-place." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "people.update(more_people)\n", + "people" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The items of `more_people` have been added to `people`, overwriting the original value when an item with that key already existed." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Nesting data structures" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the excpetion of our list of patients, `list` of `tupule`, all the example we consided so far had elements that were simple types like `str`, `int` or `float`. However, it is possible, and often useful to build more complicated data structures out of `list`, `set`, and `dict`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For example, we could represent a matrix as a `list` of `list`, where each element of the outer `list` represents a row of the matrix. (This is just for illustration purposes, for mathematical applications, you would use numpy arrays, both for performance and features.)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rows = 3\n", + "cols = 4\n", + "matrix = list()\n", + "for i in range(rows):\n", + " matrix.append(list())\n", + " for j in range(cols):\n", + " matrix[i].append(i*cols + j)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrix" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrix[1][2]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrix[0][3] = -17" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Shallow copying" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Shallow copies? Let's explore that here. We create a copy of our matrix, and modify it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "new_matrix = matrix.copy()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can add an extra row to `new_matrix`, and `matrix` is unaffected since we created a copy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "new_matrix.append([3, 9, 7, 5])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we modify and element of `new_matrix`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "new_matrix[0][0] = 103" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "new_matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is all as expected, but inspecting `matrix` may yield a surprise." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrix[0][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It seems that the elements of `matrix` and `new_matrix`, i.e., the first three rows, are the same `list` objects. However, `matrix` and `new_matrix` themselves are distinct objects. This is easy to verify using the `is` operator that tests object identify." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrix[0] is new_matrix[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrix is not new_matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Clearly, the `copy` method produces a shallow copy of the original data structure. Although we illustrated this for `list`, the same is true for both `set` and `dict` as well." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Limitations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can store elements of type `list`, `set` and `dict` in lists without issues. For instance, we can create a `list` of `set`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "list_of_sets = list()\n", + "for size in range(5):\n", + " list_of_sets.append(set(range(size)))\n", + "list_of_sets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, not everything can be stored in a `set` or a `dict`. For instance, if we try to create a `set` of lists, an exception is raised." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "try:\n", + " set_of_lists = set()\n", + " for size in range(5):\n", + " set_of_lists.add(list(range(size)))\n", + "except:\n", + " print_exc()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some types in Python are 'hashable', while others are not. For instance, a `float` has a `__hash__` function, while a `list` has not." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(17.3).__hash__()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "try:\n", + " list_of_sets.__hash__()\n", + "except:\n", + " print_exc()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This implies that only values of types that have a `__hash__` method implemented, and are, by definition, 'hashable' can be stored in a `set`, or used as *keys* in a `dict`. Any type can occur as *value* in a `dict` though, regardless of whether it is hashable or not." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Smell" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are using nested data structures, that might actually a code smell, i.e., an indicator that your code design could stand improvement. Quite often, it means that it is time to consider introducing classes to represent the concepts you are trying to model." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Choices, choices, choices..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How to pick the correct data structure? Of course, there are quite a number of considerations. However, as a rule of thumb, if you pick a data structure that corresponds to the mathemaical model you have in mind while programming, that is probably a good start.\n", + " * Tuples can represent elements of carthesian products of sets.\n", + " * Lists represent ordered sequences of objects.\n", + " * Sets repreesent... well, mathematical sets.\n", + " * Dictionaries represent mathematical relations, or associations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sometimes, your code can be simplified by picking the right data type. For instance, if you find yourself representing something, say, the information on a patient, by a list, and for each patient, the same information is available, and you don't change it in your code, than you might want to replace the list by a tuple.\n", + "\n", + "Similarly, when you represent that information by a dictionary, you can replace it by a named tuple.\n", + "\n", + "If you use a list, but add some item only when it isn't an element yet, you may want to use a set." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another consideration is performance, some operations are fast on certain data structures, slow and others, and vice versa. Take membership test for example, this is a lot faster on a set, than on a list. In fact, for large number of elements, the difference can be huge." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s = set(range(1_000_000))\n", + "l = list(range(1_000_000))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%timeit 1_000_001 in s \n", + "1_000_001 in s " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%timeit 1_000_001 in l\n", + "1_000_001 in l" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# magic command\n", + "%lsmagic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Other standard library data structures" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python's standard library contains many additional data structures, some quite specialized. We will only discuss a few here that might prove useful. Again, it pays of to read through the documentation to familiarize yourself with what is available." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Arrays" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Although arrays are very useful data structures, the implementation in Python's standard library is not so great. However, they can be useful to get some extra performance if you can not use numpy for some reason, or if you require interoperatbility with C. As opposed to lists, array elements all have the same type, and that is specified when you crate the array. Although `array` supports methods such as `append`, `insert` and `pop`, you would probably want to avoid those for performance reasons." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from array import array" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "weights = array('d', (patient.weight for patient in read_patients('Data/patients.txt')))\n", + "weights" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Elements can be accessed by index, and can be modified. The length of an `array` can be determined using the `len` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "weights[1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "weights[0] = 59.3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "len(weights)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Contrary to what you might expect, the `+` operator represents array concatenation, rather than element-wise addition. Hence to do mathematics on arrays in Python, numpy is the way to go" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "weights + weights" + ] + }, + { + "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.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/basic_datatypes.ipynb b/notebooks/basic_datatypes.ipynb new file mode 100644 index 0000000..0993315 --- /dev/null +++ b/notebooks/basic_datatypes.ipynb @@ -0,0 +1,723 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Built-in data types" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Key concepts in programming\n", + "\n", + "- Variables (integers, strings, dates, etc.)\n", + "- Flow control (if then, loop, etc.)\n", + "- Functions (list of steps the code will follow)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## built-in data types\n", + "\n", + "| Type | Meaning | Example |\n", + "|------|---------|---------|\n", + "| int | integers (whole numbers) | a = 2 |\n", + "| float | floating point numbers (real numbers) | a = 2.0 |\n", + "| complex | complex numbers with a real and imaginary part | a = 1.2 + 3j |\n", + "| bool | boolean: True/False values | a = True |\n", + "| str | string: characters or text | a = 'abc' |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## integer\n", + "- Most basic numerical type. \n", + "- Any number without a decimal point is an integer.\n", + "- Note: Python integers are variable-precision, not limited as in C, Matlab to 4 or 8 bytes.\n", + " - see https://rushter.com/blog/python-integer-implementation/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 2\n", + "b = 2**200\n", + "print('type of a', type(a))\n", + "print('type of b', type(b))\n", + "print('a: ', a)\n", + "print('b: ', b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## floating point \n", + "\n", + "- The floating-point type can store fractional numbers. \n", + "- standard decimal notation, or in exponential notation\n", + " * ´a = 0.000005´\n", + " * ´b = 5e-6´\n", + " - Note: limited precision, never rely on exact equality tests with floating-point values.\n", + "0.1 + 0.2 == 0.3\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 0.000005\n", + "b = 5.08e-6\n", + "print(a, b)\n", + "print('type', type(a))\n", + "print('type', type(b))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "comparisons with float numbers can be tricky\n", + "\n", + "due to the limited precision of representing floats, never rely on exact equality tests with floating-point values. 0.1 + 0.2 == 0.3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 0.1\n", + "b = 0.2\n", + "print('a + b =', a + b)\n", + "c = 0.3\n", + "print('test a + b == c: ', (a + b) == c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A better way to cmpare floats: check the absolute difference\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "epsilon = 0.00001\n", + "x = 0.1 + 0.2\n", + "y = 0.3\n", + "print(abs(x - y) < epsilon) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "get an idea of the binary representation of a float: you can convert the float to an integer using the int.from_bytes() function, and then convert that integer to binary with the bin() function.\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import struct\n", + "\n", + "x = 0.1\n", + "print(x.hex())\n", + "packed = struct.pack('f', x)\n", + "integer = int.from_bytes(packed, byteorder='big')\n", + "binary = bin(integer)\n", + "print(binary)\n", + "y = x\n", + "\n", + "x = 0.10000000000000001\n", + "print(x.hex())\n", + "packed = struct.pack('f', x)\n", + "integer = int.from_bytes(packed, byteorder='big')\n", + "binary = bin(integer)\n", + "print(binary)\n", + "\n", + "print(x==y)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the context of programming and numerical computation, “machine epsilon” refers to the smallest representable number such that 1.0 + epsilon is not equal to 1.0. It represents the upper bound on the relative error due to rounding in floating point arithmetic.\n", + "\n", + "Machine epsilon is a measure of precision in the representation of real numbers in a computer. It varies between systems and is specific to the floating-point format used by the system." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "epsilon = sys.float_info.epsilon\n", + "print(epsilon)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## complex \n", + "- A complex number consists of 2 doubles\n", + "- It accepts either `J` or `j` but the numerical value of the imaginary part must immediately precede it. If the imaginary part is a variable the 1 must be present." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 7.86\n", + "c1 = complex(1, 2)\n", + "c2 = 3 + 5.3j\n", + "print('type: ', type(c1))\n", + "print('dir: ', dir(c1))\n", + "c1.imag\n", + "c1.real\n", + "c3 = 2.3 + a*1j\n", + "#c3 = 2.3 + a*j\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## boolean\n", + "- Simple type with two possible values: True and False\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "result = (4 > 5)\n", + "print('result: ', result)\n", + "print('type: ', type(result))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 2.3\n", + "b = 3.4\n", + "c = bool(a*b)\n", + "print(c)\n", + "d = bool(0*a)\n", + "print(d)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## type conversion\n", + "If a variable is of one type but it needs to be of a different type, it is necessary to do a type conversion aka a cast.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "i = 6\n", + "r = float(i)\n", + "print('r: ', r)\n", + "ii = int(3.14)\n", + "print('ii: ', ii)\n", + "z = complex(1.2, 3.4)\n", + "print('z: ', z)\n", + "s = str(r)\n", + "print('type s: ', type(s))\n", + "print('s: ', s)\n", + "z = s + 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## string\n", + "\n", + "(some inspiration from http://www.cs.cornell.edu/courses/cs1110/2019fa/lectures/lecture5/presentation-05.pdf)\n", + "\n", + "- A string is a (ordered) sequence of characters\n", + "- Created with single ‘ or double quotes “\n", + " - 'ab cd' (' preferred)\n", + " - \"ab cd\"\n", + " - slicing\n", + "- immutable: cannot be changed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# '012345678901'\n", + "s = 'Hello World!'\n", + "print(s)\n", + "print(id(s))\n", + "print('s[0] ', s[0])\n", + "print('s[2:] ', s[2:])\n", + "print('s[2:4] ', s[2:4])\n", + "print('s[2:8:1] ', s[2:8:1])\n", + "print('s[2:8:2] ', s[2:8:2])\n", + "\n", + "# assign a new value\n", + "s = 'Where are you?'\n", + "print(s)\n", + "print(id(s))\n", + "s[7] = 'x'\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### string concatenation and replication\n", + "\n", + "concatenation of string variables or constants using the + operator\n", + "\n", + "replication: multiply a string by a number\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 'John'\n", + "b = 'Mary'\n", + "c = a + b\n", + "print(c)\n", + "c_bis = a + ' '+ b\n", + "print(c_bis)\n", + "\n", + "# add a number\n", + "d =a + str(4.5)\n", + "print(d)\n", + "e = a*4+b*2\n", + "print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### strings and Methods \n", + "\n", + "`rstrip`\n", + "\n", + "- Getting rid of line endings: `rstrip('\\r\\n')`\n", + "- Method will strip all combinations of \\r and \\n from right end of string\n", + "- Similar methods:\n", + " - `lstrip`: strips from left end of string\n", + " - `strip`: strips from both ends of string\n", + "- No arguments, strips: space, \\t, \\r, \\n, …\n", + "- These methods do not modify the original string, instead they return a new string that has been altered\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "str1 = 'this is a string'\n", + "print(dir(str1))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "str1.capitalize()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "my_str_1 = 'this is my string,\\t with some text in it \\n More text on a next line \\n'\n", + "dir(my_str_1)\n", + "print(my_str_1)\n", + "print(my_str_1.rstrip())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`split`\n", + "\n", + "Splitting string: `split()` returns list of strings\n", + "- no argument: split on (multiple) whitespace\n", + "- otherwise, split on provided string\n", + "- limit number of splits by providing extra argument\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "my_str_1 = 'this is my string,\\t with some text in it \\n More text on a next line \\n'\n", + "print(my_str_1)\n", + "my_str_split_1 = my_str_1.split()\n", + "print(my_str_split_1)\n", + "my_str_split_2 = my_str_1.split(',')\n", + "print(my_str_split_2)\n", + "\n", + "my_str_3 = 'end 1: 2013-03-28 03:05:57'\n", + "# split on :, but keep the time format!\n", + "my_str_split_3 = my_str_3.split(':', 1)\n", + "print(my_str_split_3)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "my_long_string = ' this is a nice piece of text for you '\n", + "my_words = my_long_string.split()\n", + "print(my_words)\n", + "\n", + "# split on a specified character\n", + "my_words_bis = my_long_string.split('i')\n", + "print(my_words_bis)\n", + "\n", + "#%% putting things together\n", + "new_word = ' '.join(my_words_bis).strip()\n", + "print(new_word)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More methods: is\n", + " isupper\n", + " islower\n", + " isspace\n", + " isdigit\n", + " isalpha" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('ABC'.isupper())\n", + "print('A19'.isupper())\n", + "print('Abc'.isupper())\n", + "print('19'.isupper())\n", + "my_str_1 = 'this is my string,\\t with some text in it \\n More text on a next line \\n'\n", + "print(my_str_1.isalpha())\n", + "print(my_str_1.isalnum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### searching and replacing\n", + "\n", + "- does a string contain a substring: `in`\n", + "\n", + "- search: `index` or `find`\n", + " - find returns -1 when the substring is not found\n", + " - only for strings\n", + " - index will return an error\n", + " - also for lists and tuples\n", + "- Function `len()` computes str length \n", + "- replace with `replace`\n", + " \n", + "Make combinations\n", + "- cut to pull out parts\n", + "- glue to create new strings" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# substring in string\n", + "print('ab' in 'ABCD')\n", + "print('ab' in 'ABCDab')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# extract information between braces\n", + "str1 = ' this is a string containing (some) text'\n", + "# find the first occurence of '('\n", + "start_brc = str1.index('(')\n", + "# cut from the first brace\n", + "tail = str1[start_brc+1:]\n", + "# find the first occurence of ')'\n", + "end_brc = tail.index(')')\n", + "text = tail[:end_brc]\n", + "print('extracted text: ', text)\n", + "print('len(str1) :', len(str1))\n", + "print(str1.replace('is', 'as'))\n", + "str1 = str1.replace('is', 'was')\n", + "print(str1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# '012345678901'\n", + "s = 'Hello World!'\n", + "print('s[0] ', s[0])\n", + "print('s[2:] ', s[2:])\n", + "print('s[2:4] ', s[2:4])\n", + "print('s[2:8:1] ', s[2:8:1])\n", + "print('s[2:8:2] ', s[2:8:2])\n", + "print('s[:4] ', s[:4])\n", + "\n", + "print('s[:] ', s[:])\n", + "print('s[-1] ', s[-1])\n", + "print('s[8:4:-1] ', s[8:4:-1])\n", + "print('s[:4:-1] ', s[:4:-1])\n", + "print('s[8::-1] ', s[8::-1])\n", + "print('s[::-1] ', s[::-1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "small_str_1 = ' small'\n", + "small_str_2 = ' part'\n", + "concat_1 = small_str_1 + small_str_2\n", + "print('concat_1: ', concat_1)\n", + "concat_2 = 3*small_str_1\n", + "print('concat_2: ', concat_2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "str1 = 'help'\n", + "str2 = 'me'\n", + "a1 = str1 + str2\n", + "print(a1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(str1*3)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## format output\n", + "\n", + "### printf-style formatting: \n", + "This is similar to the formatting used in C’s printf function. It’s less commonly used in modern Python code.\n", + "\n", + "### str.format(): \n", + "This method is more versatile and can be used in Python 2.7 and above.\n", + "\n", + "### string Interpolation (f-strings): \n", + "Available since Python 3.6\n", + "F-string is a string literal that is prefixed with `f` or `F`. These strings may contain replacement fields (delimited by curly braces {} – fill out the braces). F-string is evaluated at run time.\n", + "\n", + "File: fstring_01.py\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "name = 'Peter'\n", + "age = 23\n", + "\n", + "print('%s is %d years old' % (name, age)) # printf style\n", + "print('{} is {} years old'.format(name, age)) # .format\n", + "print(f'{name} is {age} years old') # f-string" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fnum = 2007.12345\n", + "print(f\"Simple = {fnum}\")\n", + "print(f\"Decimal Places specified = {fnum:.2f}\")\n", + "print(f\"Significant Figures={fnum:.3g}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## character\n", + "\n", + "`ord()` takes a string argument of a single Unicode character and returns its integer Unicode code point value.\n", + "\n", + "`chr()` function takes integer argument and returns the string representing a character.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(ord('a'))\n", + "\n", + "print(chr(98))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## docstring\n", + "\n", + "Documentation strings or “docstrings” use a special form of comment.\n", + "The lines are enclosed in triple double quotes \n", + "\"\"\" \"\"\"\n", + "- Everything within triple double quotes is treated as a literal string and a comment, including line breaks.\n", + "- Docstrings are placed at the top of program units, just under the declaration of the unit name (if present). \n", + "- If they are correctly placed, certain automated tools are available to display the documentation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### None\n", + "\n", + "`None` is the equivalent of null in C.\n", + "\n", + "When to use? Often you want to perform an action that may or may not work. Using `None` is one way you can check the state of the action later." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a=None\n", + "print(id(a))\n", + "print(type(a))\n", + "\n", + "r_v = print('abc')\n", + "print(r_v)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/basic_syntax.ipynb b/notebooks/basic_syntax.ipynb new file mode 100644 index 0000000..f2b35bc --- /dev/null +++ b/notebooks/basic_syntax.ipynb @@ -0,0 +1,292 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Some basic Python syntax\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Check:\n", + "\n", + "https://jakevdp.github.io/WhirlwindTourOfPython/02-basic-python-syntax.html\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Comment\n", + "Comments are marked by `#`\n", + "Anything on the line following the hash sign is ignored by the interpreter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#\n", + "# some comments\n", + "#\n", + "x = 2 # assign x a value of 2\n", + "\n", + "# print the value of x\n", + "\n", + "print(x) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Statement\n", + "\n", + "A statement is one complete “sentence” in the language. It contains one complete instruction. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 2 + 1\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Continuation\n", + "\n", + "`\\` marker is a continuation line" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "a = 8\n", + "x = 1 + 2 + 3 + 4 +\\\n", + " 5 + 6 + 7 + 8\n", + "print('x = ', x)\n", + "%who" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `;`\n", + "Semicolon `;` can optionally terminate a statement (discouraged)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lower = []; upper = []\n", + "%whos" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%who" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Blocks\n", + "\n", + "Statements can be grouped into **blocks**. \n", + "\n", + "a **block of code** is a set of statements that should be treated as a unit (meant to be executed together).\n", + "\n", + "* Structures that introduce a block end with a colon `:`\n", + "* Blocks are indicated by **indentation level**.\n", + "\n", + "Indentation is used to define the level of a block of code. This is different from many other programming languages, which often use braces {} or keywords.\n", + "\n", + "Indent each block by however many spaces you wish, but each block level must be indented by exactly the same number. \n", + "* Do not use tabs.\n", + "* Some editors (e.g. Spyder) will automatically indent the next statement to the same level as the one before it.\n", + "* The Python standard is to use four white spaces to indent code.\n", + "\n", + "\n", + "Some key points:\n", + "\n", + "* **Indentation matters**: In Python, indentation is not just for readability. It determines how statements are grouped together.\n", + "* **Consistent indentation**: You must use the same amount of indentation for every line in the same block. This can be any number of spaces or tabs, but spaces are preferred.\n", + "* **Blocks can contain other blocks**: If a statement like `if`, `for`, or `while` has its own block, it can contain other blocks. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if 5 > 2:\n", + " print(\"Five is greater than two!\")\n", + "else:\n", + " print(\"Five is not greater than two!\")\n", + " \n", + "if False:\n", + " print(\"I'm a code block\")\n", + " print(\"Look at the indent\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from math import sqrt\n", + "\n", + "# calculate the sum of square root of even numbers\n", + "my_numbers = [1, 4, 3, 4, 16, 9]\n", + "sum = 0\n", + "for i in my_numbers:\n", + " if i%2 == 0:\n", + " sum = sum + sqrt(i)\n", + " print(sum)\n", + " print('final sum = ',sum)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!notepad check_whitespace.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "!python check_whitespace.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run check_whitespace.py" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Whitespace within lines does not matter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a=1+2\n", + "b = 1 + 2\n", + "c = 1 + 2\n", + "print(a, b, c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "tip: check the way python is implemented (what is under the hood)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import platform \n", + "platform.python_implementation()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "tip: check in what environment the code is running" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "print(sys.prefix)\n", + "print(sys.base_prefix)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/notebooks/control_flow_conditionals.ipynb b/notebooks/control_flow_conditionals.ipynb new file mode 100644 index 0000000..f28d028 --- /dev/null +++ b/notebooks/control_flow_conditionals.ipynb @@ -0,0 +1,329 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Computer programs can’t do that many things, they can:\n", + "\n", + "- Assign values to variables (memory locations).\n", + "- Make decisions based on comparisons.\n", + "- Repeat a sequence of instructions over and over.\n", + "- Call subprograms.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Control flow: conditionals\n", + "\n", + "based on:\n", + "- https://jakevdp.github.io/WhirlwindTourOfPython/07-control-flow-statements.html\n", + "- https://realpython.com/python-for-loop/" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With control flow, you can execute certain code blocks conditionally and/or repeatedly: these basic building blocks can be combined to create programs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conditionals\n", + "\n", + "- Boolean values: `True`, `False`\n", + "- Boolean operators: `not`, `and`, `or`\n", + "- Comparison operators: `==`, `!=`, `<`, `<=`, `>`, `>=`\n", + "- membership: `in`\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "9 > 8" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### if statement\n", + "\n", + "If expression is True, execute all statements **indented** underneath\n", + "*note the indents and the colon :*\n", + "```python\n", + "if expression:\n", + " statement(s)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if 0==0:\n", + " print('Hello World')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if 0==1:\n", + " print('Is this happening?')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# change the value of x\n", + "x = 0\n", + "\n", + "if (x > 2):\n", + " print('Hello')\n", + "print('World')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### if else statement\n", + "\n", + "If expression is True, execute all statements indented under if.\n", + "If expression is False, execute all statements indented under else.\n", + "\n", + "```python\n", + "if expression:\n", + " statement(s)\n", + "else:\n", + " statement(s)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 0\n", + "\n", + "if (x > 2):\n", + " print('Hello')\n", + "else:\n", + " print('No')\n", + " print('World')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## if elif else statement\n", + "Execute a code block only if some condition holds\n", + "\n", + "\n", + "**syntax**\n", + " \n", + "*note the indents and the colon :*\n", + "```python\n", + "if expression:\n", + " statement(s)\n", + "elif expression:\n", + " statement(s)\n", + "elif expression:\n", + " statement(s)\n", + "else:\n", + " statement(s)\n", + "```\n", + "\n", + "`elif` and `else` blocks are optional\n", + "\n", + "- no limit on number of `elif`\n", + "- Booleans are checked in order. Once it finds first True, skips over all others\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = -100\n", + "\n", + "if x == 0:\n", + " print(x, 'is zero')\n", + "elif x > 0:\n", + " print(x, 'is positive')\n", + "elif x < 0:\n", + " print(x, 'is negative')\n", + "else:\n", + " print(x, 'what happend here?')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## nesting\n", + "\n", + "combine the expressions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "don't know\n" + ] + } + ], + "source": [ + "temp = 60\n", + "pressure = 100\n", + "\n", + "if 20 <= temp < 40:\n", + " if pressure <= 60:\n", + " print('Case A')\n", + " else:\n", + " print('Case B')\n", + "elif temp >80:\n", + " print('Case C')\n", + "\n", + "else:\n", + " print('don\\'t know')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exceptions\n", + "\n", + "AN exception is an event that arises when an error occurs during the execution of a program. Python uses exception objects to signal that something has gone wrong. \n", + "\n", + "Some built-in exceptions:\n", + "\n", + "- `Exception`: This is the base class for most error types.\n", + "- `ArithmeticError`: This is the base class for exceptions that occur for numeric calculations.\n", + "- `ZeroDivisionError`: This is a subclass of ArithmeticError and is raised when you’re trying to divide by zero.\n", + "- `FileNotFoundError`: This exception is raised when a file or directory is requested but doesn’t exist.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caught an exception: division by zero\n" + ] + } + ], + "source": [ + "try:\n", + " x = 1 / 0\n", + "except ZeroDivisionError as e:\n", + " print(f'Caught an exception: {e}')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "problem: name 'x' is not defined\n" + ] + } + ], + "source": [ + "# x = 5 # put in comment to test\n", + "\n", + "try:\n", + " print(x/0)\n", + "except NameError as e:\n", + " print(f\"problem: {e}\")\n", + "except:\n", + " print(\"Something else went wrong\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "del x" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/control_flow_loops.ipynb b/notebooks/control_flow_loops.ipynb new file mode 100644 index 0000000..8a00ba3 --- /dev/null +++ b/notebooks/control_flow_loops.ipynb @@ -0,0 +1,1050 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Control flow: loops\n", + "\n", + "based on:\n", + "- https://jakevdp.github.io/WhirlwindTourOfPython/07-control-flow-statements.html\n", + "- https://realpython.com/python-for-loop/\n", + "- https://www.w3schools.com/python/default.asp\n", + "- https://docs.python.org/3/tutorial/index.html\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Loops\n", + "\n", + "**for** loops are executed a fixed number of iterations. It is possible to exit early but this must be added to the code.\n", + "\n", + "**while** loops do not have a predetermined number of iterations. They terminate when some condition becomes False.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Computer programs can’t do that many things, they can:\n", + "\n", + "- Assign values to variables (memory locations).\n", + "- Make decisions based on comparisons.\n", + "- Repeat a sequence of instructions over and over.\n", + "- Call subprograms.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Motivation for loops\n", + "\n", + "example of calculating sum of the numbers 1 ... 100\n", + "\n", + "calculate the sum of 1 + 2 + 3 + ...+ 100\n", + "\n", + "- brute force\n", + "- for loop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!type sum_brute_force.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run sum_brute_force.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!type sum_for_loop.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run sum_for_loop.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# for loops\n", + "repeat a code block\n", + "\n", + "definite iteration: the number of repetitions is specified explicitly in advance\n", + "\n", + "**(basic) syntax**\n", + "\n", + "```python\n", + "for in :\n", + " statement(s) \n", + "```\n", + "The indentation is very important!\n", + "\n", + "\n", + "**concept**\n", + "\n", + "To carry out the iteration this for loop describes, Python does the following:\n", + "- Calls iter() to obtain an iterator\n", + "- Calls next() repeatedly to obtain each item from the iterator in turn\n", + "- Terminates the loop when next() raises the StopIteration exception\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sum=0\n", + "numbers =[1,22,31,45]\n", + "for num in numbers:\n", + " print(num)\n", + " sum=sum+num # check the indentation\n", + "avg=sum/len(numbers)\n", + "print ('Average:', avg)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + "example for loop from Python tutorial R 3.7.0\n", + "\"\"\"\n", + "words = ['cat', 'window', 'defenestrate']\n", + "\n", + "for w in words[:]: # Loop over a slice copy of the entire list.\n", + "#for w in words: # Loop over the sequence, beware for an infinite list!.\n", + " if len(w) > 6:\n", + " words.insert(0, w)\n", + "\n", + "print(words)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loop over collections\n", + "\n", + "strings, list and tuple preserve order" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "my_string = 'mississippi'\n", + "\n", + "for x in (my_string):\n", + " print(x)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l_my_string = list(my_string)\n", + "print(l_my_string)\n", + "\n", + "for x in (l_my_string):\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "t_my_string = tuple(my_string)\n", + "print(t_my_string)\n", + "\n", + "for x in (l_my_string):\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s_my_string = set(my_string)\n", + "print(s_my_string)\n", + "\n", + "for x in (s_my_string):\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d = {'6': 's', '7': 's', '8':'i', '9': 'p', '10': 'p', '11': 'i',\n", + " '1': 'm', '2': 'i', '3': 's', '4': 's', '5':'i',}\n", + "# Dictionaries preserve order of entry (newer version of python)\n", + "for x in d:\n", + " print(x)\n", + "print('****')\n", + " \n", + "for x in d.values():\n", + " print(x)\n", + "print('****')\n", + " \n", + "for x, y in d.items():\n", + " print(x,y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Loops can be nested" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "count = 0\n", + "# sequential loops\n", + "for i in range(0, 10):\n", + " count += 1\n", + "for j in range(0, 20):\n", + " count += 1\n", + "print(count)\n", + "print(\"-----------------\")\n", + "# -------------------------\n", + "# nested loop\n", + "count = 0\n", + "for i in range(0, 10):\n", + " for j in range(0, 20):\n", + " count += 1\n", + "print(count)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# while loops\n", + "\n", + "Repeat a code block until some condition is met.\n", + "\n", + "The argument of the while loop is evaluated as a boolean statement, and the loop is executed until the statement evaluates to False.\n", + "It is not always known beforehand how many times the loop will have to repeated.\n", + "\n", + "**(basic) syntax**\n", + "\n", + "```python\n", + "while condition :\n", + " statement(s) \n", + "```\n", + "The indentation is very important!\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "i = 0\n", + "while i < 10:\n", + " print(i, end=' ')\n", + " i += 1\n", + "else:\n", + " print('\\n the end \\n')\n", + "print('this is the next statement') " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run while_loop_1.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "watch out for infinite loops!\n", + "\n", + "trigger a KeyboardInterrupt in a Notebook via the menu \"Kernel --> Interrupt\"." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "i = 0\n", + "while i < 10:\n", + " print(i, end=' ')\n", + " i -= 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## fine-tuning loops\n", + "### Skipping loop iterations\n", + "\n", + "`continue` : skips the remainder of the current loop and goes to the next iteration.\n", + "\n", + "`break`: breaks-out of the loop entirely and go to the next statement following the loop" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### continue\n", + "\n", + "the loop iterates over a list of numbers. If the current number (num) is even (i.e., num % 2 == 0), the continue statement is executed. This causes the loop to skip the print(num) statement for even numbers and immediately move on to the next iteration. As a result, only the odd numbers are printed. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "3\n", + "77\n", + "19\n", + "77.7\n", + "101\n", + "23\n" + ] + } + ], + "source": [ + "num_list = [1, 2, 3, 44, 56, 77, 8, 18, 19, 77.7, 100, 101, 23]\n", + "for num in num_list:\n", + " if num%2 == 0:\n", + " continue \n", + " print(num)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### break\n", + "\n", + "the loop iterates over a list of numbers. If the current number (num) is even (i.e., num % 2 == 0), the break statement is executed. This causes the loop to break out of the loop when an even number is encountered." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], + "source": [ + "num_list = [1, 2, 3, 44, 56, 77, 8, 18, 19, 77.7, 100, 101, 23]\n", + "for num in num_list:\n", + " if num%2 == 0:\n", + " break \n", + " print(num)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "n = 101\n", + "while n < 1000:\n", + " if not(n%20):\n", + " break \n", + " print(n, 'in while loop') \n", + " n += 1\n", + "else:\n", + " print('else part of the while statement')\n", + "print('out of while loop')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run while_loop_break_continue.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### `pass`\n", + "\n", + "The `pass` statement in Python is a placeholder statement that is used when the syntax requires a statement, but you don’t want to execute any code. It’s often used as a placeholder for future code.\n", + "\n", + "The example below uses `pass`as an alternative for the `continue` statement." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "3\n", + "77\n", + "19\n", + "77.7\n", + "101\n", + "23\n" + ] + } + ], + "source": [ + "num_list = [1, 2, 3, 44, 56, 77, 8, 18, 19, 77.7, 100, 101, 23]\n", + "for num in num_list:\n", + " if num%2 == 0:\n", + " pass\n", + " else:\n", + " print(num)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `else` part\n", + "\n", + "**(full) syntax `for` loop**\n", + "\n", + "```python\n", + "for in :\n", + " statement(s) \n", + "else: # optional \n", + " statement(s)\n", + "```\n", + "\n", + "**(full) syntax `while` loop**\n", + "\n", + "```python\n", + "while condition :\n", + " statement(s) \n", + "else: # optional \n", + " statement(s)\n", + "```\n", + "The indentation is very important!\n", + "\n", + "**else** part\n", + "\n", + "use case: implement search loops, searching for an item meeting a particular condition, and need to perform additional processing or raise warning if no acceptable value is found\n", + "\n", + "- Loop should contain break statement.\n", + "- The statements in the else block will be executed after all iterations are completed (normal termination).\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "numbers =[1,2,32,45]\n", + "for i in numbers: \n", + " print(i) \n", + " if i > 5.5:\n", + " break\n", + "else: # Not executed as there is a break \n", + " print('No break encountered') \n", + "print('finished')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "count = 0\n", + "\n", + "while count < 5:\n", + " print(count)\n", + " count += 1\n", + "else:\n", + " print(\"Loop ended, count is no longer less than 5.\")\n", + "print(\"last line\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# another demo of the else clause\n", + "for n in range(2, 10):\n", + " for x in range(2, n):\n", + " if n % x == 0:\n", + " print( n, 'equals', x, '*', n/x)\n", + " break\n", + " else:\n", + " # loop fell through without finding a factor\n", + " print(n, 'is a prime number')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# iterators\n", + "\n", + "\n", + "An iterator is a special object that gives values in succession, it implements the `next` protocol and raises `StopIteration` when exhausted.\n", + "Iterators:\n", + "\n", + "- range()\n", + "- enumerate()\n", + "- zip()\n", + "\n", + "## range\n", + "\n", + "If you need to iterate over a sequence of numbers, the built-in function `range()` can be used, it\n", + "generates arithmetic progressions\n", + "\n", + "for loop is often used with the `range` function (a commonly-used iterator in Python)\n", + "* `range(n)` - sequence 0,1,…,n−1\n", + "* `range(m, n)` - sequence m,m+1,…,n−1\n", + "* `range(m, n, s)` - sequence m,m+s, m+2s,… <= n-1\n", + "\n", + "Note: limitation of `range()`: it works only with integers. (consider NumPy `arange`). See also : https://pynative.com/python-range-for-float-numbers/\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 1 2 3 4 5 6 7 8 9 \n", + "Hello World\n", + "Hello World\n", + "Hello World\n", + "Hello World\n", + "Hello World\n", + "\n", + "Hello World\n", + "Hello World\n", + "Hello World\n", + "Hello World\n", + "Hello World\n" + ] + } + ], + "source": [ + "for i in range(10):\n", + " print(i, end=' ')\n", + "print()\n", + " \n", + "for i in range(5):\n", + " print('Hello World')\n", + "print('')\n", + "\n", + "for _ in range(5): # throwaway variable, the loop variable isn't used.\n", + " print('Hello World')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In many ways the object returned by `range()` behaves as if it is a list, but it is an object\n", + "which returns the successive items of the desired sequence when you iterate over it, but it doesn’t really\n", + "make the list, thus saving space.\n", + "\n", + "Such an object is an iterable, that is, suitable as a target for functions and constructs that expect\n", + "something from which they can obtain successive items until the supply is exhausted. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "range(0, 10)\n" + ] + } + ], + "source": [ + "print(range(10))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(range(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note: The benefit of the iterator indirection is that the full list is never explicitly created!\n", + "```python\n", + "N = 10 ** 12\n", + "\n", + "for i in range(N):\n", + " if i >= 10: break\n", + " print(i, end=', ')\n", + "```\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "range(0, 1000000000000)\n", + "\n", + "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " + ] + } + ], + "source": [ + "N = 10 ** 12\n", + "\n", + "range_N = range(N)\n", + "print(range_N)\n", + "print(type(range_N))\n", + "\n", + "for i in range_N:\n", + " if i >= 10: break\n", + " print(i, end=', ')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "i = 3\n", + "i = 4\n", + "i = 6\n", + "i = 8\n", + "al: [2, 3, 5, 7]\n", + "al: [3, 4, 6, 8]\n" + ] + } + ], + "source": [ + "al = [2, 3, 5, 7]\n", + "for i in al:\n", + " i += 1 \n", + " print('i = ',i )\n", + "print('al: ', al)\n", + "\n", + "# simulate a counter \n", + "al_len = len(al)\n", + "pos = range(al_len)\n", + "for i in pos:\n", + " al[i] +=1\n", + "print('al: ', al)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "banana\n", + "apple\n", + "mango\n" + ] + } + ], + "source": [ + "# python way\n", + "fruitslist = ['banana', 'apple', 'mango']\n", + "for i in fruitslist:\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "banana\n", + "apple\n", + "mango\n" + ] + } + ], + "source": [ + "# Traditional indexing\n", + "fruitslist = ['banana', 'apple', 'mango']\n", + "for i in range(len(fruitslist)):\n", + " print(fruitslist[i])\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* regular for loop uses the items\n", + "* use `enumerate` when index is needed. The function gives you back two loop variables:\n", + " - The count of the current iteration\n", + " - The value of the item at the current iteration\n", + "* use `zip` when skimming multiple lists" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(0, 'banana')\n", + "(1, 'apple')\n", + "(2, 'mango')\n", + "(3, 'grape')\n", + "(4, 'orange')\n", + " \n", + "1 banana\n", + "2 apple\n", + "3 mango\n", + "4 grape\n", + "5 orange\n", + " \n", + "banana\n", + "apple\n", + "mango\n", + "grape\n", + "orange\n", + " \n" + ] + } + ], + "source": [ + "fruitslist = ['banana', 'apple', 'mango', 'grape', 'orange']\n", + "# use of enumerate - tuple\n", + "for line in enumerate(fruitslist, start=0):\n", + " print(line) \n", + "print(' ')\n", + "\n", + "# use of enumerate - individual elements\n", + "for num, color in enumerate(fruitslist, start=1):\n", + " print(num, color) \n", + "print(' ')\n", + "\n", + "for num, color in enumerate(fruitslist, start=1):\n", + " print(color) \n", + "print(' ')\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10 grape\n", + "11 orange\n", + "12 mango\n", + "13 banana\n", + "14 apple\n" + ] + } + ], + "source": [ + "# is it working for a set?\n", + "fruitset = {'banana', 'apple', 'mango', 'grape', 'orange'}\n", + "for num, color in enumerate(fruitset, start=10):\n", + " print(num, color)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fruitslist = ['banana', 'apple', 'mango']\n", + "ratios = [0.2, 0.3, 0.1, 0.4]\n", + "winelist = ['merlot', 'chenin', 'chardonnay', 'temperanillo', 'whatever']\n", + "for fruit, ratio, wine in zip(fruitslist, ratios, winelist):\n", + " print(ratio * 100, fruit, wine)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### note: iter\n", + "\n", + "`iter` object is a container that gives you access to the next object for as long as it’s valid\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "winelist = ['merlot', 'chenin', 'chardonnay', 'temperanillo', 'whatever']\n", + "it_winelist = iter(winelist)\n", + "\n", + "print(type(it_winelist))\n", + "print(it_winelist)\n", + "\n", + "next(it_winelist)\n", + "next(it_winelist)\n", + "next(it_winelist)\n", + "next(it_winelist)\n", + "next(it_winelist)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "I = iter([2, 4, 6, 8, 10])\n", + "print(type(I))\n", + "print(next(I))\n", + "print(next(I))\n", + "print(next(I))\n", + "print(next(I))\n", + "print(next(I))\n", + "print(next(I))\n", + "print(next(I))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### note: generator\n", + "\n", + "A generator is a function that produces a sequence of results instead of a single value. As generators do not store the sequence that is generated, they are memory-efficient. \n", + "\n", + "Many built in Python functions return generators to minimize use of memory - e.g. `range, zip, open` - A loop can be used to evaluate them." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "zz = zip(range(10), 'abcdefghij')\n", + "print(zz)\n", + "\n", + "for i,c in zz:\n", + " print(i,c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### note: comprehension\n", + "\n", + "check http://justinbois.github.io/bootcamp/2023/lessons/l15_comprehensions.html#List-comprehensions\n", + "\n", + "Syntax sugar similar to that of generator expressions can be used to create lists, sets and dictionaries. A powerful functionality within a single line of code; provides a compact way to create lists, dictionaries, sets!\n", + "\n", + "for a list:\n", + "`newlist = [expression for item in iterable if condition == True]`\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# list comprehension\n", + "\n", + "lc1 = [i for i in range(10)]\n", + "print(lc1)\n", + "\n", + "lc2 = [i**2 for i in range(10) if i % 2 == 1]\n", + "print(lc2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# dictionary comprehension\n", + "\n", + "names = ['ann', 'jules', 'charles']\n", + "ages = [55, 44, 45]\n", + "\n", + "dc = {a1: b1 for a1, b1 in zip(names, ages)}\n", + "print(dc)\n", + "dc" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#set comprehension\n", + "\n", + "l1 = list(range(1,11))\n", + "sc = {element**3 for element in l1}\n", + "print(sc)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/debugging_basics.ipynb b/notebooks/debugging_basics.ipynb new file mode 100644 index 0000000..c394b82 --- /dev/null +++ b/notebooks/debugging_basics.ipynb @@ -0,0 +1,166 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "9a57d658", + "metadata": {}, + "source": [ + "# Debugging\n", + "\n", + "A short step into debugging code.\n", + "\n", + "The demo code is taken from Jake Van der Plas https://jakevdp.github.io/PythonDataScienceHandbook/01.06-errors-and-debugging.html\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "bc5c5da6", + "metadata": {}, + "outputs": [], + "source": [ + "def func1(a, b):\n", + " return a / b\n", + "\n", + "def func2(x):\n", + " a = x\n", + " b = x - 1\n", + " return func1(a, b)" + ] + }, + { + "cell_type": "markdown", + "id": "2bc0a427", + "metadata": {}, + "source": [ + "## Controlling exceptions\n", + "\n", + "inspired by Jake vdp\n", + "\n", + "when a Python script fails, it will raise an Exception. When the interpreter hits one of these exceptions, information about the cause of the error can be found in the traceback, which can be accessed from within Python. \n", + "\n", + "With the `%xmode` magic function, the level of information can be set by specifying the argument\n", + "- `Plain`: compact form \n", + "- `Context`: default\n", + "- `Verbose`: some extra information\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "5425c8e3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Exception reporting mode: Context\n" + ] + } + ], + "source": [ + "# %xmode Plain\n", + "%xmode Context\n", + "# %xmode Verbose" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "cffba13b", + "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)", + "Cell \u001b[1;32mIn[13], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mfunc2\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\n", + "Cell \u001b[1;32mIn[4], line 7\u001b[0m, in \u001b[0;36mfunc2\u001b[1;34m(x)\u001b[0m\n\u001b[0;32m 5\u001b[0m a \u001b[38;5;241m=\u001b[39m x\n\u001b[0;32m 6\u001b[0m b \u001b[38;5;241m=\u001b[39m x \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m----> 7\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc1\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mb\u001b[49m\u001b[43m)\u001b[49m\n", + "Cell \u001b[1;32mIn[4], line 2\u001b[0m, in \u001b[0;36mfunc1\u001b[1;34m(a, b)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfunc1\u001b[39m(a, b):\n\u001b[1;32m----> 2\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mb\u001b[49m\n", + "\u001b[1;31mZeroDivisionError\u001b[0m: division by zero" + ] + } + ], + "source": [ + "func2(1)" + ] + }, + { + "cell_type": "markdown", + "id": "80b0b903", + "metadata": {}, + "source": [ + "## Debugger\n", + "The magic command `%%debug` enables to interactively use Python’s `pdb` debugger." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "90947921", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "NOTE: Enter 'c' at the ipdb> prompt to continue execution.\n", + "> \u001b[1;32m\u001b[0m(3)\u001b[0;36m\u001b[1;34m()\u001b[0m\n", + "\n", + "ipdb> b func2\n", + "*** Line c:\\users\\u0015831\\appdata\\local\\temp\\ipykernel_17956\\4021589855.py:4 does not exist\n", + "ipdb> r\n", + "--Return--\n", + "None\n", + "> \u001b[1;32m\u001b[0m(3)\u001b[0;36m\u001b[1;34m()\u001b[0m\n", + "\n", + "ipdb> n\n", + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n", + "\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)\n", + "Cell \u001b[1;32mIn[4], line 7\u001b[0m, in \u001b[0;36mfunc2\u001b[1;34m(x)\u001b[0m\n", + "\u001b[0;32m 5\u001b[0m a \u001b[38;5;241m=\u001b[39m x\n", + "\u001b[0;32m 6\u001b[0m b \u001b[38;5;241m=\u001b[39m x \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m\n", + "\u001b[1;32m----> 7\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc1\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mb\u001b[49m\u001b[43m)\u001b[49m\n", + "\n", + "Cell \u001b[1;32mIn[4], line 2\u001b[0m, in \u001b[0;36mfunc1\u001b[1;34m(a, b)\u001b[0m\n", + "\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfunc1\u001b[39m(a, b):\n", + "\u001b[1;32m----> 2\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mb\u001b[49m\n", + "\n", + "\u001b[1;31mZeroDivisionError\u001b[0m: division by zero\n" + ] + } + ], + "source": [ + "%%debug\n", + "\n", + "func2(1)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/dict.ipynb b/notebooks/dict.ipynb new file mode 100644 index 0000000..2cbc1d9 --- /dev/null +++ b/notebooks/dict.ipynb @@ -0,0 +1,463 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Key concepts in programming\n", + "\n", + "- Variables (integers, strings, dates, etc.)\n", + "- Flow control (if then, loop, etc.)\n", + "- Functions (list of steps the code will follow)\n", + "\n", + "\n", + "## data containers\n", + "\n", + "Organize the data structure into four different families: \n", + "- Ordered data structure: list and tuple\n", + "- Unordered data structure: set and dictionary \n", + "- Mutable: list, set and dictionary \n", + "- Immutable: tuple \n", + "\n", + "\n", + "| Type | Example | Description |\n", + "|------|---------|---------|\n", + "| list | `[1, 2, 3]` | Ordered collection|\n", + "| tuple | `(1, 2, 3)` | Immutable ordered collection|\n", + "| dict | `{'a':1, 'b':2, 'c':3}` | Unordered (key:value) pair mapping|\n", + "| set | `{1, 2, 3}` | Unordered collection of unique values |\n", + "\n", + "\n", + "## operations on any sequence\n", + "\n", + "| Operation | Operator | Description |\n", + "|------|---------|---------|\n", + "| indexing | `[]` | Access an element of a sequence |\n", + "|concatenation | `+` | Combine sequences together|\n", + "| repetition | `*` | Concatenate a repeated number of times|\n", + "| membership | `in` | Ask whether an item is in a sequence |\n", + "| length | `len` | Ask the number of items in the sequence|\n", + "| slicing | `[:]` | Extract a part of a sequence |\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dictionaries\n", + "- {'a':1, 'b':2, 'c':3}\n", + "- **(key,value) mapping**: the key must be immutable, mostly a string. Dictionaries in Python are used to store data values in key-value pairs. Each key-value pair maps the key to its associated value.\n", + "- **mutable**: meaning that we can change, add, or remove items after the dictionary has been created.\n", + "- **nested dictionaries**: A dictionary can contain another dictionary. \n", + "- **ordered?**: as of Python version 3.7, dictionaries are ordered. This means that the items have a defined order, and that order will not change. Note that in Python 3.5 and older dictionaries have no sense of order. In Python 3.6, dictionaries were stored in insertion order as an implementation improvement. In Python 3.7 and beyond, dictionaries are guaranteed to be ordered in the order in which their entries were created. It is therefore advisable be cautious when relying on ordering in dictionaries. For safety’s sake, it is better to assume there is no sense of order.\n", + "- **no indexing**: an index value as in `lists`and `tuples` cannot be used.\n", + "- **no duplicates**: dictionaries do not allow duplicate keys. If you try to use a duplicate key, the old value for that key will be replaced with the new value.\n", + "- **various data types**: the values in dictionary items can be of any data type." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Building a dictionary\n", + "\n", + "- `{}`\n", + "- `dict()`: \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "help(dict)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#First way to setup a dictionary\n", + "zipdict = {'Hasselt': 3500, 'Luik':4000}\n", + "\n", + "#Add a couple of cities to the dictionary\n", + "zipdict['Heverlee'] = 3001\n", + "zipdict['Leuven'] = 3000\n", + "zipdict['Brussel'] = 1000\n", + "zipdict['Gent'] = 9000\n", + "\n", + "# another way\n", + "zipdict.update({'Antwerpen': 2000, 'Brugge': 8000})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(zipdict)\n", + "\n", + "print(zipdict['Leuven'])\n", + "\n", + "print(zipdict[4])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "basketdict = dict([ \n", + " ('Leuven', 'Bears'),\n", + " ('Hasselt','Limburg United'),\n", + " ('Aalst','Okapi'),\n", + " ('Oostende','BC Oostende')])\n", + "\n", + "print(basketdict)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Accessing dictionary values\n", + "\n", + "- specify the corresponding key in square brackets `[]`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "basketdict['Aalst']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "basketdict['Antwerpen']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "basketdict.get('Aalst')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "basketdict.get(Aalst)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "basketdict[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Built-in functions, operators\n", + "\n", + "- `in` use with key values\n", + "- `len`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('len(zipdict): ', len(zipdict))\n", + "\n", + "#Use the function key() - \n", + "if 'Gent' in zipdict:\n", + " print('Gent is in the dictionary', zipdict['Gent'])\n", + "else:\n", + " print('Gent is not in the dictionary')\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The order in dictionaries is kept. \n", + "\n", + "In the example below, elements are added to the dictionary in a specific order: ‘first’, ‘second’, ‘third’, and ‘fourth’. When the dictionary is printed, the elements are displayed in the order they were added. This is because, as of Python 3.7, dictionaries maintain the insertion order of their elements." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Creating a dictionary\n", + "my_dict = {}\n", + "\n", + "# Adding elements to the dictionary\n", + "my_dict['first'] = 1\n", + "my_dict['second'] = 2\n", + "my_dict['third'] = 3\n", + "my_dict['fourth'] = 4\n", + "\n", + "# Printing the dictionary\n", + "for key, value in my_dict.items():\n", + " print(f\"{key}: {value}\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Methods\n", + "\n", + "- clear(): clears a dictionary\n", + "- keys(): returns a list of keys\n", + "- values(): returns a list of values\n", + "- pop(): removes a key, and returns its value\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "zipdict = {'Hasselt': 3500,\n", + " 'Luik': 4000,\n", + " 'Heverlee': 3001,\n", + " 'Leuven': 3000,\n", + " 'Brussel': 1000,\n", + " 'Gent': 9000,\n", + " 'Antwerpen': 2000,\n", + " 'Brugge': 8000}\n", + "\n", + "#Use the function keys() - \n", + "keys = zipdict.keys()\n", + "print(type(keys))\n", + "print(keys)\n", + "\n", + "values = zipdict.values()\n", + "print(values)\n", + "\n", + "zipdict.pop('Gent')\n", + "print(zipdict)\n", + "\n", + "zipdictbis = zipdict\n", + "print('zipdictbis: ', zipdictbis)\n", + "zipdictbis.clear()\n", + "print('zipdictbis: ', zipdictbis)\n", + "\n", + "# alias?\n", + "print('zipdict: ', zipdict)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "basketdict = dict([ \n", + " ('Leuven', 'Bears'),\n", + " ('Hasselt','Limburg United'),\n", + " ('Aalst','Okapi'),\n", + " ('Oostende','BC Oostende')])\n", + "\n", + "#Use the function keys() - \n", + "for city in basketdict.keys():\n", + " if city[0] == 'L':\n", + " print('city starting with L:', city)\n", + "\n", + "# create a list out of the keys\n", + "keys = basketdict.keys()\n", + "alist = list(keys)\n", + "alist.sort()\n", + "# print a sorted list\n", + "print(alist)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# create a histogram\n", + "# https://swcarpentry.github.io/python-second-language/06-dict/\n", + "numbers = [1, 0, 1, 2, 0, 0, 1, 2, 1, 3, 1, 0, 2]\n", + "count = {}\n", + "print(type(count))\n", + "for n in numbers:\n", + " if n not in count:\n", + " count[n] = 1\n", + " else:\n", + " count[n] = count[n] + 1\n", + "print(count)\n", + "print(count[1]) # 1 is a key, not an index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is possible to create a nested dictionary: a dictionary within a dictionary. \n", + "\n", + "In this example, a dictionary is created for an observation, the observations are combined in a parent-dictionary." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Obs01 = {'name': 'experiment 1', 'val': 23.33, 'temp': 100.0, 'press': 200.0, 'date':'2022-02-02'}\n", + "Obs02 = {'name': 'experiment 2', 'val': 27.00, 'temp': 110.0, 'press': 200.0, 'date':'2022-02-02'}\n", + "Obs03 = {'name': 'experiment 3', 'val': 27.88, 'temp': 120.0, 'press': 200.0, 'date':'2022-02-03'}\n", + "series_01 = {'t1': Obs01,\n", + " 't2': Obs02,\n", + " 't3': Obs03} # insert individual dictionaries in a dictionary\n", + "# print result of the 3rd observation\n", + "print('val = {}, temp = {}'.format(series_01['t3']['val'], series_01['t3']['temp']))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### aliasing\n", + "\n", + "\n", + "Because dictionaries are mutable, you need to be aware of aliasing (as with lists). Whenever two variables refer to the same dictionary object, changes to one affect the other. \n", + "\n", + "\n", + "Use the dictionary copy method" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dict1 = {\"key1\": \"value1\", \"key2\": \"value2\"}\n", + "dict2 = dict1\n", + "dict2[\"key2\"] = \"WHY?!\"\n", + "dict1\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import copy\n", + "\n", + "dict1 = {\"key1\": \"value1\", \"key2\": \"value2\"}\n", + "dict2 = copy.deepcopy(dict1)\n", + "dict2[\"key2\"] = \"WHY?!\"\n", + "dict1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### A dictionary is an implementation of a hash table\n", + "\n", + "http://justinbois.github.io/bootcamp/2023/lessons/l09_dictionaries.html\n", + "\n", + "\n", + "Each entry in the dictionary is stored at a different location in memory. The dictionary itself also has its own address. \n", + "\n", + "Dictionaries use a hash function to do this. A hash function converts its input to an integer. \n", + "\n", + "Python’s built-in hash function can be used to convert the keys to integers.\n", + "Under the hood, Python then converts these integers to integers that could correspond to locations in memory. A collection of elements that can be indexed this way is called a hash table. This is a very common data structure in computing." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create dictionary\n", + "my_dict = {'a': 6, 'b': 7, 'c':12.6}\n", + "\n", + "# Find where they are stored\n", + "print(id(my_dict))\n", + "print(id(my_dict['a']))\n", + "print(id(my_dict['b']))\n", + "print(id(my_dict['c']))\n", + "\n", + "# python hash function\n", + "print(hash('a'), hash('b'), hash('c'))\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/functions.ipynb b/notebooks/functions.ipynb new file mode 100644 index 0000000..cabfbca --- /dev/null +++ b/notebooks/functions.ipynb @@ -0,0 +1,630 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Functions\n", + "Functions are groups of code that have a name, and can be called\n", + "- A piece of code written to carry out a specified task.\n", + "- This makes code easier to read, maintain and debug.\n", + "- Code can be tested separately.\n", + "- Must be named and created before you can use them.\n", + "- All functions are placed (in general) at the beginning of the programs. \n", + "- The input comes in parentheses after the function name\n", + " - The ordered sequence of variables is strictly called the argument list in the caller and the parameter list in the function definition. \n", + "\n", + "**syntax**\n", + "- Declare the function with the keyword `def` followed by the function name.\n", + "- Write the parameters of the function inside round braces `( )`, and end the declaration with a colon `:`.\n", + " - Empty parentheses when no parameters are used!\n", + "- Add the program statements to be executed.\n", + " - All statements are indented\n", + "- End the function with/without `return` statement.\n", + " - Without the return statement, the function will return an object None.\n", + " - Return multiple values in a tuple ()\n", + "\n", + "```python\n", + "def function_name(parameters):\n", + "\t\"\"\"docstring\"\"\"\n", + "\tstatement(s)\n", + " return statement\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Naming rules: \n", + "- Cannot use any of Python’s keywords\n", + "- No spaces\n", + "- First character must be A-Z or a-z or the “_” character\n", + "- After the first character you can use A-Z, a-z, “_” or 0-9\n", + "- Case sensitive\n", + "- Two different functions can’t have the same name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def greetings(name):\n", + " \"\"\"This function greets the name passed as an argument\"\"\"\n", + " print('Hello, ', name , ' Welcome!')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%whos" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "greetings('jules')\n", + "print('type greetings: ', type(greetings))\n", + "\n", + "x = greetings('jules')\n", + "print('type x: ', type(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once a function is defined a function, call it:\n", + "- Python prompt\n", + "- from another function \n", + "- within Python interpreter environment\n", + "\n", + "To call a function, type the function name with appropriate parameters.\n", + "The interpreter must see the function definition before it can be called." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!notepad greetings_func.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "%run greetings_func.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def greetings_more(name):\n", + " \"\"\"This function greets the name passed as an argument\"\"\"\n", + " greetings('Dear')\n", + " greetings(name) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%whos\n", + "greetings_more('Marie')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!notepad function_1.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run function_1.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Passing arguments**\n", + "\n", + "You can call a function by using the following types of formal arguments\n", + "\n", + "- Required arguments: pass arguments 'by position'\n", + "- Keyword arguments: allows to skip arguments or place them out of order because the Python interpreter is able to use the keywords to match the values with parameters. \n", + "- Default arguments: assume a default value if a value is not provided in the function call.\n", + "- Variable-length arguments\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A function does not require arguments or returning values" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# no passing of arguments\n", + "def print_header ():\n", + " columns = 40\n", + " print('this is an header')\n", + "#call\n", + "print_header()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# no passing of arguments, returning some value\n", + "def return_the_answer():\n", + " return 42\n", + "#call\n", + "print('result = ', return_the_answer())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def f_avg(num1, num2, num3, num4):\n", + " sum = num1+num2+num3+num4\n", + " avg = sum / 4\n", + " print('first value:', num1)\n", + " print (avg)\n", + "f_avg(100,90,92,77)\n", + "f_avg(100,90,92)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def f_avg(num1, num2, num3, num4=999):\n", + " sum = num1+num2+num3+num4\n", + " avg = sum / 4\n", + " print('first value:', num1)\n", + " print (avg)\n", + "f_avg(100,90,92,77)\n", + "f_avg(100,90,92)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# https://www.tutorialspoint.com/python/python_functions.htm\n", + "def printinfo( name, age ):\n", + " \"This prints a passed info into this function\"\n", + " print(\"Name: \", name)\n", + " print(\"Age \", age)\n", + " return;\n", + "\n", + "# Now you can call printinfo function\n", + "help(printinfo)\n", + "printinfo( age=50, name=\"miki\" )\n", + "printinfo( \"jane\", 45 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Add some flexibility: `*args` and `**kwargs` \n", + "\n", + "`*args`: \n", + "The number of arguments needs to match. When in doubt on the number of arguments, use the * operator (unpacking operator - * before a variable means “expand this as a sequence”)\n", + "\n", + "\n", + "`**kwargs`:\n", + "works like *args, but instead of accepting positional arguments it accepts keyword arguments\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def mySum(*values):\n", + " \"\"\"\n", + " Calculate the sum of values\n", + " Input: integers/floats\n", + " Output: sum value\n", + " \"\"\"\n", + " sumVal = 0\n", + " \n", + " for each in values:\n", + " sumVal += each\n", + " \n", + " return sumVal" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('run 1: ', mySum(1, 2, 3))\n", + "print('run 2: ', mySum(1, 2.3, 3.14, 98.7, 110))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# concatenate_2.py\n", + "# source https://realpython.com/python-kwargs-and-args/\n", + "def concatenate(**words):\n", + " # the iterable object is a standard dict.\n", + " result = \"\"\n", + " for arg in words.values():\n", + " result += arg\n", + " return result\n", + "\n", + "print(concatenate(a=\"Real\", b=\"Python\", c=\"Is\", d=\"Great\", e=\"!\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run function_arg_kwarg_1.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Passing arguments (by object)\n", + "\n", + "If the argument is immutable, it will not be changed, even if the function changes it. A local copy will be made within the function block. \n", + "\n", + "If the variable is mutable, consider 2 cases:\n", + "- Elements of the mutable variable can be changed in place, i.e. the list will be changed even in the caller's scope. \n", + "- If a new list is assigned to the name, the old list will not be affected, i.e. the list in the caller's scope will remain untouched.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!notepad function_argument_pass_1.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def change_me(v):\n", + " print (\"function got:\", v, 'id(v) = ', id(v))\n", + " v = 10\n", + " print (\"argument is now:\", v, 'id(v) = ', id(v))\n", + "\n", + "def change_me_bis(v):\n", + " print (\"function got:\", v, 'id(v) = ', id(v))\n", + " v.append(555)\n", + " print (\"argument is now:\", v, 'id(v) = ', id(v))\n", + "\n", + "def change_me_tris(v):\n", + " print (\"function got:\", v, 'id(v) = ', id(v))\n", + " v = v * 3\n", + " print (\"argument is now:\", v, 'id(v) = ', id(v))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "myvar = 5\n", + "print (\"starting with:\", myvar)\n", + "change_me(myvar)\n", + "print (\"ending with:\", myvar)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "myvar2 = [1, 2, 3]\n", + "print (\"starting with:\", myvar2)\n", + "change_me(myvar2)\n", + "print (\"ending with:\", myvar2)\n", + "\n", + "print (\"starting with:\", myvar2)\n", + "change_me_bis(myvar2)\n", + "print (\"ending with:\", myvar2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "myvar = 5\n", + "print (\"starting with:\", myvar)\n", + "change_me_tris(myvar)\n", + "print (\"ending with:\", myvar)\n", + "\n", + "myvar2 = [1, 2, 3]\n", + "print (\"starting with:\", myvar2)\n", + "change_me_tris(myvar2)\n", + "print (\"ending with:\", myvar2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Return values\n", + "\n", + "- Values are returned by the return statement. It can return an item or an expression. \n", + "- Return: immediate exit.\n", + "- Python functions can return only one item but that item can be any object, in particular a tuple, list, or dictionary.\n", + "- A function may have multiple return statements but only one (the first encountered) will be executed.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function definition is here\n", + "def calcul( arg1, arg2 ):\n", + " # Add both the parameters and return them.\"\n", + " calc_sum = arg1 + arg2\n", + " calc_prod = arg1 * arg2\n", + " if (calc_sum >= 10):\n", + " return calc_sum\n", + " if (calc_prod < 0):\n", + " return calc_prod\n", + " return (calc_sum, calc_prod)\n", + "\n", + "\n", + "r1 = calcul(3, 7.89)\n", + "print(r1)\n", + "r2 = calcul(-3, 7.89)\n", + "print(r2)\n", + "r3 = calcul(0.56, 7.89)\n", + "print(r3)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scope\n", + "- Functions can be considered as a mini program\n", + "- Variables can be created inside functions\n", + " - are considered local to that function. \n", + " - they only exist within that function. \n", + " - Objects outside the scope of the function will not be able to access that variable \n", + " - To create a global variable inside a function, you can use the global keyword.\n", + " Be careful with global variables\n", + "- Variables that are only referenced inside a function are implicitly global. \u000b", + "If a variable is assigned a value anywhere within the function’s body, it’s assumed to be a local unless explicitly declared as global" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Scope variables\n", + "\n", + "- local: variables are defined inside a function body \n", + "- global: variables defined outside" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# var = 'ff'\n", + "# var_bis = 'ffw'\n", + "\n", + "def ex(s): \n", + " global var \n", + " var = 'abc'\n", + " var_bis = 'def'\n", + " print('inside the function var is ', var)\n", + " print('inside the function var_bis is ', var_bis)\n", + " return s+var\n", + "\n", + "\n", + "print(ex('f'))\n", + "print('outside the function var is ', var)\n", + "print('outside the function var_bis is ', var_bis)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!notepad function_scope_5.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run function_scope_5.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Module import\n", + "\n", + "In Python you can reuse code by `import`ing functions from files: import a definition from a module. A file containing the functions is called a module. The file name is the module name with the suffix .py\n", + "\n", + "- Explicit module import : Explicit import of a module preserves the module's content in a namespace. The namespace is then used to refer to its contents with a \".\" between them.\n", + "- Explicit module import by alias. For long module names, use the \"import ... as ...\" \n", + "- Explicit import of module contents: Sometimes rather than importing the module namespace, just like import a few particular items from the module, use \"from ... import ...“\n", + "- Implicit import of module contents: it is sometimes useful to import the entirety of the module contents into the local namespace. This can be done with the \"from ... import *\" \n", + "This pattern should be used sparingly, if at all. The problem is that such imports can sometimes overwrite function names that you do not intend to overwrite, and the implicitness of the statement makes it difficult to determine what has changed.\n", + "\n", + "https://nbviewer.jupyter.org/github/jakevdp/WhirlwindTourOfPython/blob/master/13-Modules-and-Packages.ipynb\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "math.cos(math.pi)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "np.cos(np.pi)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from math import cos, pi\n", + "cos(pi)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from math import *\n", + "sin(pi) ** 2 + cos(pi) ** 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lambda expressions create anonymous functions " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = lambda a : a + 10\n", + "f = lambda a, b: a + b \n", + "v1 = 8.8\n", + "\n", + "print('type x:', type(x))\n", + "print(x(6))\n", + "print(x(v1))\n", + "\n", + "print('type f:', type(f))\n", + "print(f(5.6,6))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/getting_started_jupyter.ipynb b/notebooks/getting_started_jupyter.ipynb new file mode 100644 index 0000000..27e5a5a --- /dev/null +++ b/notebooks/getting_started_jupyter.ipynb @@ -0,0 +1,328 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Getting Started with Jupyter\n", + "\n", + "See Also: [documentation](https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Notebook%20Basics.html)\n", + "\n", + "No Python installed? Go to https://try.jupyter.org. \n", + "\n", + "\n", + "Start the notebook server from the command line:\n", + "\n", + "`jupyter notebook`\n", + "\n", + "When the notebook opens in your browser, you will see the Notebook Dashboard, which will show a list of the notebooks, files, and subdirectories in the directory where the notebook server was started. Most of the time, you will wish to start a notebook server in the highest level directory containing notebooks. Often this will be your home directory. Or start the notebook in the folder where you keep your notebook projects.\n", + "\n", + "\n", + "more text" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basics\n", + "\n", + "This document is a Jupyter notebook, it is built out of cells: text and code. The text cells can be formatted using the *markdown* syntax. The code cells contain code statements, usually Python code. \n", + "It is an interactive environment that enbles you to execute the code cells. \n", + "\n", + "This text block is a *Markdown Cell*. Double click this text and you will be able to edit the text. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tip: for Mac users, the buttons are different, see the list below\n", + "\n", + "- `Ctrl`: command key ⌘\n", + "- `Shift`: Shift ⇧\n", + "- `Alt`: option ⌥" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## cell mode\n", + "\n", + "Cells can be in 2 modes: **command** mode and **edit** mode. \n", + "\n", + "### Edit mode \n", + "\n", + "- Is indicated by a *green cell border* and a prompt showing in the editor area\n", + "- When a cell is in edit mode, you can type into the cell, like a normal text editor.\n", + "- Enter edit mode by pressing `Enter` or using the mouse to click on a cell’s editor area.\n", + "\n", + "### Command mode\n", + "\n", + "- Is indicated by a *grey cell border with a blue left margin*\n", + "- When you are in command mode, you are able to manipulate the notebook as a whole, but not type into the individual cell. \n", + "- Enter command mode by pressing `Esc` or click the mouse outside the cell’s editor area." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Execute a cell\n", + "\n", + "Running a cell works for both text and code cells.\n", + "\n", + "- `Shift + Enter` runs the current cell, move to cell below, add a new cell when no cell is below\n", + "- `Ctrl + Enter` runs the selected cell \n", + "- `Alt + Enter` runs the current cell, insert a cell below \n", + "\n", + "The piece of code below is a *Code Cell* with a short Python command, computing a value and storing it in a variable. This variable is printed. \n", + "\n", + "To execute the code in the cell below, select it with a click and then either press the `Run` button from the menu bar, or use the keyboard shortcut `Ctrl + enter` " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "my_val = 24 * 69\n", + "print(my_val)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Menu / Toolbar\n", + "\n", + "All the actions that you can do on a cell are possible from the Menu / Toolbar. \n", + "\n", + "- You can always start by cleaning up the notebook: `Cell > All Output > Clear`\n", + "- You can run the whole notebook: `Cell > Run All`\n", + "- When in trouble, restart the Kernel: `Kernel > Restart`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "1+2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " ## Useful shortcuts while in *command* mode\n", + " \n", + "- `Enter` from command into edit mode\n", + "- `H` show all shortcuts\n", + "- `A` insert cell above\n", + "- `B` insert cell below\n", + "- `X` cut selected cell\n", + "- `C` copy selected cell\n", + "- `V` paste cells below\n", + "- `Shift + V` paste cell above\n", + "- `D D` (press the key twice) delete selected cell\n", + "- `Z` undo cell deletion\n", + "- `Y` change the cell type to Code\n", + "- `M` change the cell type to Markdown\n", + "- `P` open the command palette.\n", + "- `Shift + Space` scroll notebook up\n", + "- `Space` scroll notebook down" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "1 < 22.3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "string = 'Hello'\n", + "print(string)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### hands-on\n", + "\n", + "- select a cell, copy it and paste it\n", + "- edit the cell and make some changes\n", + "- execute the cell\n", + "- delete the cell" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "1 <= -22.3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " ## Useful shortcuts while in *edit* mode\n", + " \n", + "- `Esc` from edit into command mode\n", + "- `Tab` code completion or indent\n", + "- `Shift + Tab` tooltip\n", + "- `Ctrl + A` select all\n", + "- `Ctrl + Z` undo" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Useful to know\n", + "\n", + "- All cells modify the same global state, so variables that you define by executing a cell can be used in other cells\n", + "- `[prompt number] in front of a code cell`, indicates the execution number. The kernel should have a single, monotonically increasing counter of all execution requests\n", + "- `[*] instead of a prompt number`, indicates that the kernel is busy. Go to the menu Kernel and click Interrupt if you suspect the program . If this does not work click Restart.\n", + "- tab completion works!\n", + "\n", + "### Magic commands\n", + "\n", + "A magic function begins with either a `%` or `%%` sign, and let you perform various useful tasks. Those with a `%` sign work within the environment, and those with a `%%` sign work at the cell level.\n", + "Information of a specific magic function is obtained by putting a `?` behind the command e.g. %magicfunction?\n", + "\n", + "- `%lsmagic`Display the list of magic functions\n", + "- `%time` Times a single statement.\n", + "- `%reset` Delete all variables and names defined in the current namespace.\n", + "- `%run` Run a python script inside a notebook. %run script.py\n", + "- `%who, %who_ls, %whos` Display variables defined in the interactive namespace, with varying levels of verbosity\n", + "- `%pwd`Display the current working directory\n", + "- `!`Run a OS command from within Jupyter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%lsmagic" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run first_sum.py\n", + "\n", + "%time %run first_sum.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# lauch notepad editor (windows)\n", + "!notepad first_sum.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "%whos" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%cd Temp/PythonDev/\n", + "%pwd" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "who" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "%%time is a cell magic command that measures the execution time of the cell. \n", + "\n", + "The cell contains a Python command that makes the program sleep for two seconds. \n", + "\n", + "The %%time command will measure and print the time it took to execute the cell. \n", + "\n", + "Note that cell magics only work in IPython and Jupyter Notebooks. They are not part of the standard Python language." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "%%time\n", + "import time\n", + "time.sleep(2) # sleep for two seconds" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/notebooks/intro_to_numpy.ipynb b/notebooks/intro_to_numpy.ipynb new file mode 100644 index 0000000..f865196 --- /dev/null +++ b/notebooks/intro_to_numpy.ipynb @@ -0,0 +1,824 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Introduction to Numpy arrays\n", + "\n", + "\n", + "sources:\n", + "\n", + "* https://pythonnumericalmethods.berkeley.edu/notebooks/chapter02.07-Introducing_numpy_arrays.html\n", + "* http://justinbois.github.io/bootcamp/2023/lessons/l21_intro_to_numpy_and_scipy.html\n", + "* https://numpy.org/doc/stable/user/basics.creation.html\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import the NumPy package with the `np` alias, the convention is to use the `np` abbreviation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A very brief introduction to NumPy arrays\n", + "\n", + "The central object for NumPy and SciPy is `ndarray`, \"NumPy array.\" This is an array object that is convenient for scientific computing. \n", + "\n", + "NumPy arrays are homogeneous, meaning all elements must be of the same data type. They are similar to Python lists but offer more functionality, especially for numerical operations.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create an array\n", + "\n", + "There are several mechanisms for creating arrays as mentioned in the NumPy documentation:\n", + "\n", + "* Conversion from other Python structures (i.e. lists and tuples)\n", + "* Intrinsic NumPy array creation functions (e.g. arange, ones, zeros, etc.)\n", + "* Replicating, joining, or mutating existing arrays\n", + "* Reading arrays from disk, either from standard or custom formats\n", + "* Creating arrays from raw bytes through the use of strings or buffers\n", + "* Use of special library functions (e.g., random)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Conversion from other Python structures\n", + "\n", + "convert to a NumPy array using `np.array()`\n", + "\n", + "NumPy arrays can be defined using Python sequences such as lists and tuples. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a 1D numpy array\n", + "arr1 = np.array([10, 20, 30, 40])\n", + "\n", + "print(arr1)\n", + "print(type(arr1))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# Create a 2D numpy array\n", + "arr2 = np.array([[10,20,30],[40,50,60]])\n", + "\n", + "print(arr2)\n", + "print(type(arr2))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a 2D numpy array\n", + "arr3 = np.array([[[10, 20], [30, 40]], [[50, 60], [70, 80]]])\n", + "\n", + "print(arr3)\n", + "print(type(arr3))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a 1D numpy array\n", + "arrt1 = np.array((10.2, 20, 30, 40))\n", + "\n", + "print(arrt1)\n", + "print(type(arrt1))\n", + "\n", + "# Create a 2D numpy array\n", + "arrt2 = np.array(((10, 20, 30, 40),(50.2,60,70,80)))\n", + "\n", + "print(arrt2)\n", + "print(type(arrt2))\n", + "\n", + "# Create a 2D numpy array\n", + "arrt3 = np.array((((10, 20), (30, 40.2)), ((50, 60), (70, 80))))\n", + "\n", + "print(arrt3)\n", + "print(type(arrt3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When using numpy.array to define a new array, consider the `dtype` of the elements in the array, which can be specified explicitly." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "arr1_int8 = np.array([120, 121, 122], dtype=np.int8)\n", + "print(arr1_int8)\n", + "print(type(arr1_int8))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "help(np.array)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Intrinsic NumPy array creation functions \n", + "\n", + "use `arange`, `ones`, `zeros`, etc.\n", + "check the routines at: https://numpy.org/doc/stable/reference/routines.array-creation.html#routines-array-creation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "arr_i_1 = np.arange(10)\n", + "print(arr_i_1)\n", + "\n", + "arr_i_2 = np.arange(2, 10, dtype=float)\n", + "print(arr_i_2)\n", + "\n", + "arr_i_3 = np.arange(2, 3, 0.1)\n", + "print(arr_i_3)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "az_1 = np.zeros(5)\n", + "print(az_1)\n", + "print(az_1.dtype)\n", + "\n", + "az_2 = np.zeros((5,), dtype=int)\n", + "print(az_2)\n", + "print(az_2.dtype)\n", + "\n", + "az_3 = np.zeros((2, 1))\n", + "print(az_3)\n", + "\n", + "az_4 = np.zeros((2, 2))\n", + "print(az_4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make a NumPy array filled with zeros the same shape as another NumPy array\n", + "arr22 = np.array([[1, 2], [3, 4]])\n", + "arr_0_22 = np.zeros_like(arr22)\n", + "print(arr_0_22)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "arr_d = np.diag([1, 2, 300.])\n", + "print(arr_d)\n", + "\n", + "arr_e = np.eye(3)\n", + "print(arr_e)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Reshaping, concatenating arrays\n", + "Once arrays are been created, these can be transformed to create new arrays. \n", + "When you assign an array or its elements to a new variable, you have to explicitly numpy.copy the array, otherwise the variable is a view into the original array." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# reshape with shape \n", + "vec1 = np.linspace(3, 9, 10)\n", + "print(vec1)\n", + "\n", + "vec1.shape = (2,5)\n", + "print(vec1)\n", + "\n", + "# a new 2D array using the reshape() method\n", + "arr_vec1 = vec1.reshape((5, 2))\n", + "print(arr_vec1)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Concatenating arrays\n", + "\n", + "The `np.concatenate()` function accomplishes this. We simply have to pass it a tuple containing the NumPy arrays we want to concatenate." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "arr2 = np.array([[10,20,30],[40,50,60]])\n", + "arr2b = np.array([[101,201,301],[401,501,601]])\n", + "\n", + "combi_1 = np.concatenate((arr2,arr2b))\n", + "print(combi_1)\n", + "\n", + "combi_2 = np.concatenate((arr2,arr2b), axis=1)\n", + "print(combi_2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## array object\n", + "An array has several attributes and lots of methods, check it with the `dir` function\n", + "\n", + "* `shape`: Returns the dimensions of the array.\n", + "* `dtype`: Returns the data type of the elements in the array.\n", + "* `size`: Returns the total number of elements in the array." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "dir(np.ndarray)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "help(np.ndarray.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The data type of stored entries\n", + "print(arr3.dtype)\n", + "print(arrt3.dtype)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The shape of the array\n", + "print(arr1.shape)\n", + "print(arr2.shape)\n", + "print(arr3.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The size of the array, showing the number of elements\n", + "print(arr1.size)\n", + "print(arr2.size)\n", + "print(arr3.size)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are also lots of methods. \n", + "\n", + "`astype()` converts the data type of the array." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(arr2)\n", + "print(arr2.dtype)\n", + "\n", + "float_arr2 = arr2.astype(float)\n", + "print(float_arr2)\n", + "print(float_arr2.dtype)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are many others, compute summary statistics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(arr2.max())\n", + "print(arr2.min())\n", + "print(arr2.sum())\n", + "print(arr2.mean())\n", + "print(arr2.std())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "NumPy arrays can be arguments to NumPy functions, doing the same operations as the methods." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(np.max(arr2))\n", + "print(np.min(arr2))\n", + "print(np.sum(arr2))\n", + "print(np.mean(arr2))\n", + "print(np.std(arr2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Indexing\n", + "\n", + "Getting access to the 1D numpy array is similar to lists or tuples, it has an index to indicate the location. It is 0-based, and accepts negative indices for indexing from the end of the array.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "arr = np.array([1, 4, 3])\n", + "\n", + "# get an element at a specific index\n", + "print(arr[1])\n", + "\n", + "# linspace(a,b,n) generates an array of n equally spaced elements starting from a and ending at b.\n", + "vec1 = np.linspace(3, 9, 10)\n", + "print(vec1)\n", + "\n", + "print(vec1[-1])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is not necessary to separate each dimension’s index into its own set of square brackets." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "arr2 = np.array([[10,20,30],[40,50,60]])\n", + "\n", + "print(arr2[1,2])\n", + "print(arr2[1][2])\n", + "\n", + "# stay between the boundaries\n", + "print(arr2[2,3])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Slicing NumPy arrays\n", + "\n", + "Slice NumPy arrays like lists and tuples. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "arr = np.array([1, 4, 3])\n", + "\n", + "# Reversed array\n", + "arr[::-1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Entries 1 to 2\n", + "arr[1:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fancy indexing\n", + "\n", + "NumPy arrays also allow **fancy indexing**, where we can slice out specific values. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x100 = np.arange(1,101)\n", + "x100[[1, 19, 6]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Boolean indexing can be used with Numpy arrays" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# slice out the big ones\n", + "idx_bool = (x100 > 80)\n", + "print(idx_bool)\n", + "\n", + "big_ones = x100[idx_bool]\n", + "print(big_ones)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get the indices where the values are high through `np.where()`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "np.where(x100 > 80)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## NumPy arrays are mutable\n", + "\n", + "NumPy arrays are mutable. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make an array\n", + "my_ar = np.array([1, 2, 3, 4])\n", + "\n", + "# Change an element\n", + "my_ar[2] = 6\n", + "\n", + "# See the result\n", + "my_ar" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, let's try attaching another variable to the NumPy array." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Attach a new variable\n", + "my_ar2 = my_ar\n", + "\n", + "# Set an entry using the new variable\n", + "my_ar2[3] = 9\n", + "\n", + "# Does the original change? (yes.)\n", + "my_ar" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see how messing with NumPy in functions affects things." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create Array from Existing Array\n", + "Create an array from an existing array by copying array elements into the other array.\n", + "\n", + "Using the `copy()` Method\n", + "To create an array from an existing NumPy array Python provides an in-built method that is the copy() method. In simpler words to copy the array elements into another array. If you make changes in an original array that will not be reflected in a copy method. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create array from existing array\n", + "# Using copy()\n", + "arr_0=np.array([10,20,30])\n", + "print(\"Original array\",arr_0)\n", + "print('id arr_0', id(arr_0))\n", + "\n", + "arr_1 = arr_0\n", + "print('arr_1', arr_1)\n", + "print('id arr_1', id(arr_1))\n", + "\n", + "arr_2=arr_0.copy()\n", + "print('arr_2', arr_2)\n", + "print('id arr_2', id(arr_2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Slices of NumPy arrays are **views**, not copies\n", + "\n", + "A very important distinction between NumPy arrays and lists is that slices of NumPy arrays are **views** into the original NumPy array, NOT copies." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make list and array\n", + "my_list = [1, 2, 3, 4]\n", + "print(my_list)\n", + "my_ar = np.array(my_list)\n", + "print(my_ar)\n", + "\n", + "# Slice out of each\n", + "my_list_slice = my_list[1:-1]\n", + "print(my_list_slice)\n", + "my_ar_slice = my_ar[1:-1]\n", + "print(my_ar_slice)\n", + "\n", + "# Mess with the slices\n", + "my_list_slice[0] = 9\n", + "my_ar_slice[0] = 9\n", + "\n", + "# Look at originals\n", + "print(my_list)\n", + "print(my_ar)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mathematical operations with arrays\n", + "\n", + "Mathematical operations on arrays are done elementwise to all elements" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = np.array([1, 2, 3])\n", + "b = np.array([4, 5, 6])\n", + "\n", + "# Element-wise addition\n", + "c = a + b\n", + "print(c)\n", + "\n", + "# Element-wise multiplication\n", + "d = a * b\n", + "print(d)\n", + "\n", + "# Element-wise division\n", + "e = a / b\n", + "print(e)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Multiply by scalar\n", + "-4 * a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Raise to power\n", + "b**2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "matrix operations like dot products." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "help(np.dot)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = np.array([[1, 2], [3, 4]])\n", + "b = np.array([[1, 1], [1, 1]])\n", + "c = np.dot(a, b)\n", + "print(c)\n", + "\n", + "\n", + "a = np.array([1, 2, 3])\n", + "b = np.array([4, 5, 6])\n", + "c = np.dot(a, b)\n", + "print(c)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## NumPy mathematical functions\n", + "The NumPy functions also work elementwise on the arrays when it is intuitive to do soNumPy provides a set of universal functions that operate element-wise on arrays, including mathematical, logical, and bitwise operations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#Showing all functions in NumPy\n", + "dir(np)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "arrx = np.array([1, 2, 3])\n", + "\n", + "print(np.square(arrx)) # Square each element\n", + "\n", + "print(np.sin(arrx)) # Calculate sine of each element" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/notebooks/io.ipynb b/notebooks/io.ipynb new file mode 100644 index 0000000..90cae95 --- /dev/null +++ b/notebooks/io.ipynb @@ -0,0 +1,970 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# IO" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Console IO\n", + "see also https://realpython.com/python-input-output/\n", + "\n", + "### input\n", + "Take input from the user: `input()`\n", + "\n", + "- a prompt can be included\n", + "- `input()` returns a string. \n", + "- need for a numeric type, convert the string to the appropriate type with the `int()`, `float()`, or `complex()` " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "name = input('Enter your name: ')\n", + "print('Hello ' + name + '!')\n", + "print(type(name))\n", + "age = input('Enter your age: ')\n", + "print(age)\n", + "print(type(age))\n", + "\n", + "#use typecasting\n", + "xString = input(\"Enter a number: \")\n", + "x = float(xString)\n", + "yString = input(\"Enter a second number: \")\n", + "y = float(yString)\n", + "print('The sum of ', x, ' and ', y, ' is ', x+y, '.')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run input_1.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### output\n", + "\n", + "Display output to the user: `print()`. print automatically puts a single space between items and a newline at the end.\n", + "\n", + "Syntax: `print(objects, sep=' ', end='\\n', file=sys.stdout, flush=False)`\n", + "\n", + "\n", + "- unformatted \n", + " - list variables separated by comma\n", + " - complex types like lists, dictionaries, etc. can be displayed\n", + "- formatted\n", + " - keywords\n", + " - sophisticated way cfr. Matlab `fprintf`, C `printf`\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fname = 'Louis'\n", + "age = 33\n", + "print('Name:', fname, ', age:', age)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1 = [1, 2, 3]\n", + "numb = -12\n", + "d1 = {'key1': 1, 'key2': 22}\n", + "print(l1, numb, d1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# sep\n", + "print('text', 42, [1, 'zz', 3])\n", + "print('text', 42, [1, 'zz', 3], sep='/')\n", + "print('text', 42, [1, 'zz', 3], sep='...')\n", + "\n", + "# end\n", + "print('text', 42, [1, 'zz', 3], end='/')\n", + "print('text', 42, [1, 'zz', 3], end='/\\n')\n", + "\n", + "for n in range(5):\n", + " print(n)\n", + "\n", + "for n in range(8):\n", + " print(n, end=(' ' if n < 5 else '\\n'))\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "fill-in-the-braces\n", + "\n", + "Syntax: `S.format(item0, item1, item2, ..., itemk)`\n", + "\n", + "- string type has `format()` method which takes arguments and returns another string which is the original with the method’s arguments inserted into it in certain places. \n", + "- `format()` replaces each pair of curly brackets with the corresponding argument. \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s1 = 'The {} in the {}'.format('car', 'room') \n", + "print(s1)\n", + "s2 = '{2} color {1}, {0} {3}'.format('dark', 'brown', 'yellow', 'red') \n", + "print(s2)\n", + "s3 = '{c} color {b}, {a} {d}'.format(a='dark', b='brown', c='yellow', d='red') \n", + "print(s3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### format specifiers\n", + "\n", + "| Conversion | Description |\n", + "|------|-------------------|\n", + "| d | Signed integer decimal.|\n", + "| i | Signed integer decimal.|\n", + "| o | Unsigned octal.|\n", + "| x | Unsigned hexadecimal(lowercase).|\n", + "| X | Unsigned hexadecimal(uppercase).|\n", + "| e | Floating point exponential format (lowercase).|\n", + "| E | Floating point exponential format (uppercase).|\n", + "| f,F | Floating point.|\n", + "| g | Same as \"e\" if exponent is greater than -4 or less than precision, \"f\" otherwise.|\n", + "| G | Same as \"G\" if exponent is greater than -4 or less than precision, \"F\" otherwise.|\n", + "| c | Single character (accepts integer or single character string).|\n", + "| s | String (converts any python object using str()).|\n", + "\n", + "\n", + "Justification codes\n", + "\n", + "|< |left justifies|\n", + "| > |right justifies|\n", + "| ^| centers|\n", + "\n", + "Filling characters\n", + "\n", + "- Character after : pads with that character\n", + "- `+` before the field width forces a preceding sign\n", + "\n", + "\n", + "Escape characters\n", + "\n", + "| Conversion | Description |\n", + "|------|-------------------|\n", + "|single quote \t| \\'|\n", + "|double quote \t|\\\"|\n", + "|backslash \t\t|\\\\|\n", + "|alert (bell) \t|\t\\a|\n", + "|backspace \t\t|\\b|\n", + "|formfeed \t\t|\\f|\n", + "|newline \t\t|\\n|\n", + "|return \t\t|\\r|\n", + "|tab \t\t\t|\\t|\n", + "|vertical tab \t|\t\\v|\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# formatted output\n", + "count = 5 \n", + "amount = 45.56 \n", + "print('count is {0} and amount is {1:9.5f}'.format(count, amount))\n", + "print('count is {0:5d} and amount is {1:9.5f}'.format(count, amount))\n", + "print('count is {:d} and amount is {:f}'.format(count, amount))\n", + "print('count is {:05d} and amount is {:09.5f}'.format(count, amount))\n", + "print('count is {:+5d} and amount is {:09.5f}'.format(count, amount))\n", + "\n", + "person = 'Louis'\n", + "greeting = 'Hello, {}!'.format(person)\n", + "print(greeting)\n", + "greeting = 'Hello, {0}, Good morning, {0}!'.format(person)\n", + "print(greeting)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# f-string\n", + "count = 5 \n", + "amount = 45.56 \n", + "print(f'count is {count} and amount is {amount:9.5f}')\n", + "print(f'count is {count:5d} and amount is {amount:9.5f}')\n", + "print(f'count is {count:d} and amount is {amount:f}')\n", + "print(f'count is {count:05d} and amount is {amount:09.5f}')\n", + "print(f'count is {count:+5d} and amount is {amount:09.5f}')\n", + "\n", + "person = 'Louis'\n", + "greeting = f'Hello, {person}!'\n", + "print(greeting)\n", + "greeting = f'Hello, {person}, Good morning, {person}!'\n", + "print(greeting)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Command line IO\n", + "\n", + "- command line parameters live inside of sys.argv, so import sys is needed. \n", + "- sys.argv is a list in Python, which contains the command-line arguments passed to the script.\n", + "- The name of the program is always the first item (argv[0])\n", + "- The elements of argv are strings\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!notepad command_line_io.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run command_line_io.py a b 1 hello" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## File IO\n", + "\n", + "### Motivation\n", + "\n", + "Storing data is important when working over multiple sessions and sharing the results with collaborators. When Python closes, all the variables in the memory are lost, data must be stored in some way. \n", + "\n", + "### Steps involved\n", + "Working with files, involves the steps:\n", + "* Opening the file and associating it with a file handle. (`open`)\n", + "* Using the file handle: read from or write to a file\n", + "* Closing the file handle to commit to a disk file. (Do not forget!) (`close`)\n", + "\n", + "open a file:\n", + "```python\n", + "f = open(\"name.txt\", mode=\"w\", encoding=\"utf8\")\n", + "```\n", + "The parameters are:\n", + "* name of the file, it can also contain an absolute or a relative path\n", + "* `mode` argument defines how to access the file. \n", + "\n", + "Character | Meaning\n", + ":--------:|--------\n", + "'r' | open for reading (default)\n", + "'w' | open for writing, truncating the file first\n", + "'x' | open for exclusive creation, failing if the file already exists\n", + "'a' | open for writing, appending to the end of the file if it exists\n", + "\n", + "* `encoding` parameter defines the character encoding. It is not mandatory.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Writing to a file\n", + "- `f.write(string)`\n", + " - Copies the value of string to the file\n", + " - Returns the number of characters written\n", + "\n", + "- `f.writelines(list)`\n", + " - Copies the value of each element of sequence to the file\n", + " - Does not add a newline after each string - must be explicitly included in the string" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "username = input('Enter your name: ')\n", + "f = open('name_01.txt', mode='w', encoding='utf8')\n", + "numchar = f.write(username)\n", + "print(numchar)\n", + "f.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!type name_01.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# no automatic generation of 'new lines'\n", + "name1 = 'KU Leuven'\n", + "name2 = 'campus Arenberg'\n", + "listnames = [name1, name2]\n", + "f = open('name_02.txt', mode='w', encoding='utf8')\n", + "f.write(name1)\n", + "f.write(name2)\n", + "f.write('\\n')\n", + "f.writelines(listnames)\n", + "f.write('\\n')\n", + "# or add a new line for each item\n", + "f.writelines(line + '\\n' for line in listnames)\n", + "f.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "KU Leuvencampus Arenberg\n", + "KU Leuvencampus Arenberg\n", + "KU Leuven\n", + "campus Arenberg\n" + ] + } + ], + "source": [ + "!type name_02.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "write the squares of the values 0, 1, ..., 9 into a file\n", + "\n", + "remark the use of the `with` statement and the block of code. A close statement is not neede when using this approach" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# write to a file\n", + "file_name = 'file_squares.txt'\n", + "with open(file_name, 'w') as text_file:\n", + " for i in range(0, 10):\n", + "# text_file.write('{0}: {1}\\n'.format(i, i*i))\n", + " text_file.write(f'{i}: {i*i}\\n')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0: 0\n", + "1: 1\n", + "2: 4\n", + "3: 9\n", + "4: 16\n", + "5: 25\n", + "6: 36\n", + "7: 49\n", + "8: 64\n", + "9: 81\n" + ] + } + ], + "source": [ + "!type file_squares.txt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# add to a file\n", + "file_name = 'file_squares.txt'\n", + "with open(file_name, 'a') as text_file:\n", + " for i in range(10, 20):\n", + " text_file.write('{0}: {1}\\n'.format(i, i*i))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!type file_squares.txt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run file_io_write_1.py\n", + "!type testfile-write.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read from a file\n", + "\n", + "* `f.read()` reads the whole file from the current position to the end of the file as a string\n", + "* `f.read(b)` reads `b` bytes of the file, as data is read, a pointer is set of where the next data will be read\n", + "* `f.readline()` reads the data from the current position in the file to the end of that line. \n", + "* `f.readlines()` reads every line of the file and stores them in a list.\n", + "\n", + "To read the whole text file line by line, you can use `for` loop with the file object:\n", + "```python\n", + "for line in f:\n", + " print(line)\n", + "```\n", + "\n", + "Caution: `read`, `readline` and `readlines` do not check memory to perform the task." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0: 0\n", + "1: 1\n", + "2: 4\n", + "3: 9\n", + "4: 16\n", + "5: 25\n", + "6: 36\n", + "7: 49\n", + "8: 64\n", + "9: 81\n", + "\n", + "--\n", + "\n" + ] + } + ], + "source": [ + "txtfile = open(\"file_squares.txt\",\"r\")\n", + "txt = txtfile.read()\n", + "print(txt)\n", + "print('--')\n", + "# what will be printed?\n", + "txtbis = txtfile.read()\n", + "print(txtbis)\n", + "txtfile.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0: 0\n", + "\n", + "--\n", + "1: 1\n", + "2: 4\n", + "3: 9\n", + "4: 16\n", + "5: 2\n" + ] + } + ], + "source": [ + "txtfile = open(\"file_squares.txt\",\"r\")\n", + "txt = txtfile.read(5)\n", + "print(txt)\n", + "print('--')\n", + "# what will be printed?\n", + "txtbis = txtfile.read(25)\n", + "print(txtbis)\n", + "txtfile.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0: 0\n", + "\n", + "--\n", + "1: 1\n", + "\n" + ] + } + ], + "source": [ + "txtfile = open(\"file_squares.txt\",\"r\")\n", + "txt = txtfile.readline()\n", + "print(txt)\n", + "print('--')\n", + "# what will be printed?\n", + "txtbis = txtfile.readline()\n", + "print(txtbis)\n", + "txtfile.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['0: 0\\n', '1: 1\\n', '2: 4\\n', '3: 9\\n', '4: 16\\n', '5: 25\\n', '6: 36\\n', '7: 49\\n', '8: 64\\n', '9: 81\\n']\n", + "--\n", + "[]\n" + ] + } + ], + "source": [ + "txtfile = open(\"file_squares.txt\",\"r\")\n", + "txt = txtfile.readlines()\n", + "print(txt)\n", + "print('--')\n", + "# what will be printed?\n", + "txtbis = txtfile.readlines()\n", + "print(txtbis)\n", + "txtfile.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "some text Lorem ipsum and also quam\n", + "some text Mauris venenatis and also Cras\n", + "some text Nunc dictum, and also vel\n", + "some text Aenean accumsan and also varius\n", + "some text Curabitur commodo and also id\n", + "some text In faucibus and also diam.\n", + "some text Orci varius and also ridiculus\n", + "some text Curabitur interdum, and also nulla,\n", + "some text Aliquam vitae and also nibh\n", + "some text Phasellus posuere and also mollis\n", + "some text Sed malesuada and also sodales\n", + "some text Nulla condimentum and also vel\n", + "some text Cras et and also nisi\n", + "some text Vestibulum vel and also ut\n", + "some text Suspendisse id and also tincidunt\n", + "some text Nulla sed and also urna\n", + "some text Donec tristique and also Donec\n", + "some text Donec facilisis and also velit\n", + "some text Pellentesque suscipit, and also et\n", + "some text Suspendisse orci and also Quisque\n", + "some text Nulla pretium and also nisl,\n", + "some text Sed eu and also ultrices\n", + "some text Nam diam and also Cras\n", + "some text Phasellus gravida and also vitae\n", + "some text Maecenas ligula and also Morbi\n" + ] + } + ], + "source": [ + "txtfile = open(\"test_text.txt\",\"r\")\n", + "\n", + "for aline in txtfile:\n", + " values = aline.split()\n", + " if len(values) > 10:\n", + " print('some text', values[0], values[1], ' and also ', values[10] )\n", + "\n", + "txtfile.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "seek() method\n", + "\n", + "`fileObject.seek(offset[, whence])`\n", + "\n", + "Parameters\n", + "\n", + "- offset: position of the read/write pointer within the file.\n", + "- whence: optional parameter, defaults to 0 which means absolute file positioning, 1 which means seek relative to the current position and 2 means seek relative to the file's end." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "txtfile = open(\"file_squares.txt\",\"r\")\n", + "# set the file handle to some spot in the file\n", + "txtfile.seek(50)\n", + "txt = txtfile.read()\n", + "print(txt)\n", + "txtfile.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!type file_io_3.py\n", + "%run file_io_3.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!type file_io_readline.py\n", + "%run file_io_readline.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!type file_io_readlines.py\n", + "%run file_io_readlines.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Pythonic way:\n", + "\n", + "```python\n", + "with open('file_path', 'w') as file: \n", + " file.write('hello world !') \n", + "```\n", + "\n", + "The `with` statement automatically takes care of closing the file once it leaves the with block, even in cases of error.\n", + "no need to call `file.close()` when using with statement. \n", + "\n", + "`with` statement itself ensures proper acquisition and release of resources. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nice example from bernd Klein: Numerisches Python\n", + "\n", + "- open a file as input\n", + "- read the data, split the lines, manipulate the data\n", + "- write the results to another file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# example from bernd Klein: Numerisches Python\n", + "with open('./Data/bKlein_bundeslaender.txt') as fh_in, \\\n", + " open('./Data/bKlein_bundeslaender_bis.txt', 'w') as fh_out:\n", + " fh_in.readline() # read header input file\n", + " fh_out.write('Land Surface Population PopulationDensity \\n')\n", + " for line in fh_in:\n", + " land, surf, man, women = line.split() # get a line and split into text components\n", + " surf = float(surf)\n", + " population = int(man) + int(women)\n", + " pDensity = round(population * 1000/ surf, 2)\n", + " fh_out.write(land + \" \" + str(surf) + \" \" + str(population) + \" \" + \\\n", + " str(pDensity) + \"\\n\")\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### IO and data formats\n", + "\n", + "use the __batteries included__\n", + "\n", + "Python provides the csv library. While you can also just simply use `split` function, to separate lines and data within each line, the CSV module can also be used to make things easy.\n", + "Each row read from the csv file is returned as a list of strings.\n", + "\n", + "https://docs.python.org/3/library/csv.html\n", + "\n", + "The csv module's `reader` and `writer` objects read and write sequences. Read and write data in dictionary form using the `DictReader` and `DictWriter` classes.\n", + "\n", + "- `reader`\treturns a reader object which iterates over lines of a CSV file\n", + "- `writer`\treturns a writer object which writes data into CSV file\n", + "- `DictReader` class operates like a regular reader but maps the information read into a dictionary. The keys for the dictionary can be inferred from the first row of the CSV file\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import csv\n", + "\n", + "with open('MOCK_DATA.csv') as csvfile:\n", + " readCSV = csv.reader(csvfile, delimiter=',')\n", + " for row in readCSV:\n", + " print(row)\n", + " print(row[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import csv\n", + "\n", + "with open('MOCK_DATA.csv') as csvfile:\n", + " readCSV = csv.reader(csvfile, delimiter=',')\n", + " dates = []\n", + " ipads = []\n", + " for row in readCSV:\n", + " date = row[6]\n", + " ipad = row[5]\n", + " dates.append(date)\n", + " ipads.append(ipad)\n", + "\n", + "print(dates)\n", + "print(ipads)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import csv\n", + "file_name = 'MOCK_DATA.csv'\n", + "f_csv = open(file_name)\n", + "csv_data = csv.DictReader(f_csv)\n", + "print(\"Type of object csv_data: {}\\n\".format(type(csv_data)))\n", + "f_csv.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import csv\n", + "file_name = 'MOCK_DATA.csv'\n", + "f_csv = open(file_name)\n", + "csv_data = csv.DictReader(f_csv)\n", + "\n", + "line_count = 1\n", + "data_dict = dict()\n", + "for row in csv_data:\n", + "\n", + "# print('Row {:d}: {} (length: {})'.format(line_count, dict(row), len(row)))\n", + " data_dict[line_count] = row\n", + " line_count += 1\n", + " \n", + "f_csv.close()\n", + "\n", + "# use dictionary\n", + "print(data_dict[54])\n", + "print(data_dict[154]['last_name'])\n", + "print(data_dict[254]['ip_address'])\n", + "print(data_dict[354]['unit cost'])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "copy data from a file to another" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import csv\n", + "with open('MOCK_DATA_out.csv' ,'w') as outFile:\n", + " fileWriter = csv.writer(outFile)\n", + " with open('MOCK_DATA.csv','r') as inFile:\n", + " fileReader = csv.reader(inFile)\n", + " for row in fileReader:\n", + " fileWriter.writerow(row)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!notepad 'MOCK_DATA_out.csv'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use writerow\n", + "import csv\n", + "csvData = [('Peter', '22'), ('Jasmine', '21'), ('Sam', '24')]\n", + "csvFile = open('person.csv', 'w', newline='')\n", + "obj=csv.writer(csvFile)\n", + "\n", + "for person in csvData:\n", + " obj.writerow(person)\n", + " \n", + "csvFile.close()\n", + "\n", + "#use writerows\n", + "csvfile = open('persons_bis.csv','w', newline='')\n", + "obj = csv.writer(csvfile)\n", + "obj.writerows(csvData)\n", + "csvFile.close()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!notepad 'person.csv'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!notepad 'persons_bis.csv'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/list.ipynb b/notebooks/list.ipynb new file mode 100644 index 0000000..37edc8d --- /dev/null +++ b/notebooks/list.ipynb @@ -0,0 +1,804 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Key concepts in programming\n", + "\n", + "- Variables (integers, strings, dates, etc.)\n", + "- Flow control (if then, loop, etc.)\n", + "- Functions (list of steps the code will follow)\n", + "\n", + "\n", + "## data containers\n", + "\n", + "Organize the data structure into four different families: \n", + "- Ordered data structure: list and tuple\n", + "- Unordered data structure: set and dictionary \n", + "- Mutable: list, set and dictionary \n", + "- Immutable: tuple \n", + "\n", + "\n", + "| Type | Example | Description |\n", + "|------|---------|---------|\n", + "| list | `[1, 2, 3]` | Ordered collection|\n", + "| tuple | `(1, 2, 3)` | Immutable ordered collection|\n", + "| dict | `{'a':1, 'b':2, 'c':3}` | Unordered (key:value) pair mapping|\n", + "| set | `{1, 2, 3}` | Unordered collection of unique values |\n", + "\n", + "\n", + "## operations on any sequence\n", + "\n", + "| Operation | Operator | Description |\n", + "|------|---------|---------|\n", + "| indexing | `[]` | Access an element of a sequence |\n", + "|concatenation | `+` | Combine sequences together|\n", + "| repetition | `*` | Concatenate a repeated number of times|\n", + "| membership | `in` | Ask whether an item is in a sequence |\n", + "| length | `len` | Ask the number of items in the sequence|\n", + "| slicing | `[:]` | Extract a part of a sequence |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lists\n", + "\n", + "based on http://ehmatthes.github.io/pcc/cheatsheets/README.html\n", + "\n", + "- use square brackets to define a list,\n", + "- []\n", + "- use commas to separate individual items in the list\n", + "- Syntax: < variable > = [< comma separated expressions >]\n", + "- Lists are **ordered** collections of objects. \n", + " - **heterogeneous**: elements of a list don't have to be the same type. Each element of the list can be of any type.\n", + " - **indexing**: elements can be referenced by an index. \n", + " - **nesting**: lists can be nested to arbitrary depth\n", + " - **mutable**: lists are changeable\n", + " - **duplicates allowed**: lists are indexed, items can have the same value\n", + " \n", + "\n", + "*Note:* \n", + "* is different from the Matlab array, closer to the Matlab cell array\n", + "* is different from the C array\n", + "* tip: use plural names for lists, to make your code easier to read." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## creation\n", + "\n", + "- Create the list with brackets `[ ]` \n", + "- Inside the brackets, the elements are separated by a comma (,). \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "zips = [3001, 3000, 1000, 9000, 8000]\n", + "test_lists = ['test1','test2',3, [1, 2, 7]] " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## accessing elements of a list\n", + "\n", + "- Individual elements in a list are accessed according to their index. \n", + "- The index is 0 based.\n", + "- Use square brackets []\n", + "- Syntax: < var name >[< index >], where index is an integer expression\n", + "\n", + "negative index: \n", + "- -1 corresponds to the last element\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "first = zips[0]\n", + "print(first)\n", + "last = zips[-1]\n", + "print(last)\n", + "print(test_lists[2])\n", + "print(test_lists[3])\n", + "print(test_lists[3][0])\n", + "\n", + "#Refer to the index of the item you want to modify.\n", + "zips[1] = 8500\n", + "zips[-2] = 2000\n", + "print(zips)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "whos" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Slicing lists, to create sublists\n", + "\n", + "- Assigning to slices\n", + "- All slice operations return a new list containing the requested elements\n", + "- Syntax: < var name >[< index1 >:< index2 >[:step]]\n", + " - index1: Optional. Starting index of the slice. Defaults to 0.\n", + " - index2: Optional. The last index of the slice or the number of items to get. Defaults to len(sequence).\n", + " - step: Optional. Extended slice syntax. Step value of the slice. Defaults to 1.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l = list(range(1, 6))\n", + "print('l', l)\n", + "l_sub = l[2:4]\n", + "print('l_sub', l_sub)\n", + "l_sub = l[:4]\n", + "print('l_sub', l_sub)\n", + "l_sub = l[2:]\n", + "print('l_sub', l_sub)\n", + "l_sub = l[0:4:3]\n", + "print('l_sub', l_sub)\n", + "l_sub = l[::2]\n", + "print('l_sub', l_sub)\n", + "l_sub = l[4:1:-1]\n", + "print('l_sub', l_sub)\n", + "\n", + "l_r = l[::-1]\n", + "print('l_r', l_r)\n", + "\n", + "#create a copy\n", + "l_bis = l[:]\n", + "print('l_bis', l_bis)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Slice assignment is allowed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l = list(range(1, 6))\n", + "print('l:', l)\n", + "\n", + "# replace a chunk with the same number of items\n", + "print(l[::2])\n", + "l[::2] = ['a', 'b', 'c'] \n", + "print('l:', l)\n", + "\n", + "# replace a chunk with a larger number of items\n", + "print(l[:3])\n", + "l[:3] = [999, 999, 999, 999, 999]\n", + "print('l:', l)\n", + "\n", + "# replace a chunk with a smaller number of items\n", + "print(l[:3])\n", + "l[:3] = [55555]\n", + "print('l:', l)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dir(list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Add elements to the end of a list, \n", + "or insert at wherever position in the list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(type(zips))\n", + "print(dir(zips))\n", + "print('original: ', zips)\n", + "zips.append(3500)\n", + "zips.insert(0,3050)\n", + "zips.insert(3,4000)\n", + "print('modified: ', zips)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More operations on lists" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# concatenate with +\n", + "l = [1,2,3] + [4,5,6]\n", + "print(l)\n", + "l1 = [1, 2]\n", + "l2 = ['a', 'b', 9, True]\n", + "l3 = l1 + l2\n", + "print('l3', l3)\n", + "\n", + "# multiply a list\n", + "l = [1, 2]\n", + "l3 = l * 3\n", + "print('l3:', l3)\n", + "\n", + "# multiply to quickly initialize a list\n", + "list0 = [0]*10\n", + "print('list0: ', list0)\n", + "\n", + "# beware\n", + "list1 = [1,2,3]\n", + "list1_3 = list1*3\n", + "print(list1, ' / ', list1_3)\n", + "list1[2]=4\n", + "print(list1, ' / ', list1_3)\n", + "\n", + "list1 = [1,2,3]\n", + "list1_3 = [list1]*3\n", + "print(list1, ' / ', list1_3)\n", + "list1[2]=4\n", + "print(list1, ' / ', list1_3)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use a list as a stack, appends and pops from the end of list are\n", + "fast!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "stack = [3.01, 40, 'hello']\n", + "print(stack)\n", + "\n", + "# add elements to the list\n", + "stack.append(6)\n", + "stack.append(7.77)\n", + "print(stack)\n", + "\n", + "# remove last elements added using pop\n", + "stack.pop()\n", + "print(stack)\n", + "stack.pop()\n", + "print(stack)\n", + "stack.pop()\n", + "print(stack)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Removing elements from a list\n", + "\n", + "* `remove`: delete a specific object in the list. Remove is the only one that searches object (not index based).\n", + "* `del`: delete the object at a specific location (index) in the list.\n", + "* `pop`: delete the object at a specific location (index) in the list and get the object at the specific location." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# remove elements by their position in a list, \n", + "# or by the value of the item. Python removes only the first occurrence of that value\"\n", + "zips = [3050, 3001, 8500, 4000, 1000, 2000, 8000, 3500]\n", + "\n", + "print('zips: ', zips)\n", + "del zips[1]\n", + "print('zips: ', zips)\n", + "del zips[1:4]\n", + "print('zips: ', zips)\n", + "zips.remove(8000)\n", + "print('zips: ', zips)\n", + "zips.remove(8000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# pop() returns the last element in the list, but any index can be specified.\n", + "recent_zip = zips.pop()\n", + "print('zips: ', zips)\n", + "first_zip = zips.pop(0)\n", + "print('zips: ', zips)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The len() function returns the number of items\n", + "num_zips = len(zips)\n", + "print('num_zips = ', num_zips)\n", + "\n", + "# The sort() method changes the order of a list permanently. \n", + "# The sorted() function returns a copy of the list, leaving the original list unchanged. \"\n", + "zips.sort()\n", + "print('zips (sorted): ', zips)\n", + "zips.sort(reverse=True)\n", + "print('zips (sorted - reverse): ', zips)\n", + "\n", + "zips = [3050, 3001, 8500, 4000, 1000, 2000, 8000, 3500]\n", + "zs = sorted(zips)\n", + "print('zips: ', zips)\n", + "print('zs (using sorted): ', zs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "zips = [3050, 3001, 8500, 4000, 1000, 2000, 8000, 3500]\n", + "\n", + "#Python loop pulls each item from the list one at a time and stores it in a temporary variable, which you provide a name for.\n", + "for zip in zips:\n", + " print(zip)\n", + "# number of elements\n", + "numel = len(zips)\n", + "print('number of elements in zips: ', numel)\n", + "# Simple statistics are possible on a list containing numerical data.\n", + "smallest = min(zips)\n", + "largest = max(zips)\n", + "sumzips = sum(zips)\n", + "print('min = {}, max = {}, sum = {}'.format(smallest, largest, sumzips))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conversion\n", + "\n", + "`list()`: takes sequence types and converts them to lists." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "xl = list('help')\n", + "print(xl)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `range`\n", + "\n", + "The `range` function returns a range object from start to one less than the stop value, a step size can be set (only integers)\n", + "\n", + "`range(start, stop, step)`\n", + "\n", + "create a list: convert the range object into a list\n", + "`LR = list(range(2, 9, 3))`\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "R1 = range(2,9,3)\n", + "print(R1)\n", + "print('type R1', type(R1))\n", + "LR1 = list(R1)\n", + "print(LR1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "xr = range(10)\n", + "print(type(xr))\n", + "\n", + "for i in range(10):\n", + " print(i, end=' ')\n", + "print('\\n') \n", + "\n", + "# enumerate\n", + "L1 = [2, 4, 6, 8, 10]\n", + "for i, val in enumerate(L1):\n", + " print(i, val)\n", + "print('\\n') \n", + " \n", + "L2 = ['pizza', 'pasta', 'salad', 'nachos']\n", + "print(list(enumerate(L2)))\n", + "for i, val in enumerate(L2):\n", + " print(i, val)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## membership\n", + "\n", + "Check if some item is a member of the list\n", + "\n", + "Syntax: < expression > `in` < iterable >): Returns True/False if < expression > is a member of the list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = [2, 3, 4, 5, 6, 8]\n", + "print('3 in x :', 3 in x)\n", + "print('7 in x :', 7 in x)\n", + "\n", + "l3 = ['help', [1, 2], 5, 2]\n", + "print(1 in l3)\n", + "print([1,2] in l3)\n", + "print('e' in l3)\n", + "print('help' in l3)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## aliasing\n", + "\n", + "If variable v1 refers to an object and an assignment is made v2 = v1, then both variables refer to the same object.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It’s important to note that any modifications to the alias object will reflect in the existing object and vice versa, because they both point to the same memory location.\n", + "\n", + "If the aliased object is mutable, changes made with one alias affect the other!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "v1 = [1, 2, 3]\n", + "v2 = v1\n", + "print('v1 = ', v1)\n", + "print('v2 = ', v2)\n", + "print(v1 is v2)\n", + "print(\"Reference of first_variable:\", id(v1))\n", + "print(\"Reference of second_variable:\", id(v2))\n", + "\n", + "v1[1] = 101\n", + "print('v1 = ', v1)\n", + "print('v2 = ', v2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### shallow copy\n", + "\n", + "A partial solution is to use the list constructor or the slice operation to make a new list via a shallow copy. But if the list contains other compound types then they won't be independently copied\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use slicing notation to create a shallow copy\n", + "v1 = [1, 2, 3]\n", + "v2 = v1[:]\n", + "print('v1 = ', v1)\n", + "print('v2 = ', v2)\n", + "print(v1 is v2)\n", + "print(\"Reference of first_variable:\", id(v1))\n", + "print(\"Reference of second_variable:\", id(v2))\n", + "\n", + "v1[1] = 101\n", + "print('v1 = ', v1)\n", + "print('v2 = ', v2)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use the list function to create a shallow copy\n", + "v1 = [1, 2, 3]\n", + "v2 = list(v1)\n", + "print('v1 = ', v1)\n", + "print('v2 = ', v2)\n", + "print(v1 is v2)\n", + "print(\"Reference of first_variable:\", id(v1))\n", + "print(\"Reference of second_variable:\", id(v2))\n", + "\n", + "v1[1] = 101\n", + "print('v1 = ', v1)\n", + "print('v2 = ', v2)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use the copy function to create a shallow copy\n", + "v1 = [1, 2, 3]\n", + "v2 = v1.copy()\n", + "print('v1 = ', v1)\n", + "print('v2 = ', v2)\n", + "print(v1 is v2)\n", + "print(\"Reference of first_variable:\", id(v1))\n", + "print(\"Reference of second_variable:\", id(v2))\n", + "\n", + "v1[1] = 101\n", + "print('v1 = ', v1)\n", + "print('v2 = ', v2)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# be careful with a shallow copy on compound types!\n", + "# example taken from: https://cvw.cac.cornell.edu/python-intro/objects-and-oop/lists\n", + "\n", + "myList = [[1,2,3],4]\n", + "print(myList)\n", + "myOtherList = myList.copy() # use the copy method of the list, is a shallow copy\n", + "\n", + "myList[1] = 'four'\n", + "print(myList)\n", + "print (myOtherList)\n", + "\n", + "#OK so far, but now try to change an element in the sublist\n", + "myList[0][1] = 'two'\n", + "print (myList)\n", + "\n", + "#This time the item also changes in the shallow copy, because it was in a sublist\n", + "print (myOtherList)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Safer to avoid aliasing when working with mutable objects.\n", + "\n", + "The way to make a completely independent copy of a list —a deep copy— is to use the the `copy.deepcopy()` method. \n", + "`copy.deepcopy()` to makes copies of compound objects, as the errors which can occur from shallow copies are often frustrating to debug.\n", + "\n", + "Python’s standard library provides the copy module, which provides functions that can be used to create deep copies of objects.\n", + "\n", + "https://cvw.cac.cornell.edu/python-intro/objects-and-oop/lists" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from copy import deepcopy\n", + "myList = [[1,2,3],4]\n", + "\n", + "#Making a deep copy, myOtherList\n", + "myOtherList = deepcopy(myList)\n", + "\n", + "#Reassigning an element of the sublist in myList\n", + "myList[0][1] = 'two'\n", + "print(myList)\n", + "#No effect on myOtherList\n", + "print(myOtherList)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### list unpacking / packing\n", + "\n", + "assign elements of a list to multiple variables.\n", + "\n", + "packing: wraps the arguments into a single variable. Putting the asterisk (*) in front of a variable name, you’ll pack the leftover elements into a list and assign them to a variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "[a, b, c, d, e] = [1, 2, 3, 4, 5]\n", + "print(a,b,c, d, e)\n", + "\n", + "# try\n", + "#[a, b, c] = [1, 2, 3, 4, 5]\n", + "\n", + "[a, *b, c] = [1, 2, 3, 4, 5]\n", + "print(a,b,c)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " List packing is the process of bundling several values into a single iterable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "num1 = 1\n", + "num2 = 2\n", + "num3 = 3\n", + "*num, = num1, num2, num3\n", + "print(num)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### list comprehension\n", + "\n", + "Comprehension: powerful functionality within a single line of code; provides a compact way to create lists. \n", + "\n", + "The general syntax of list comprehension is: `[expression for item in list if condition]`. The if condition part is optional. List comprehension provides a more concise and readable way to create lists compared to using loops.\n", + "\n", + "Works also for dictionaries and sets" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sqlist = [x * x for x in range(15)]\n", + "print(sqlist)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# with if statement\n", + "even_numbers = [num for num in range(1, 10) if num % 2 == 0]\n", + "print(even_numbers) # Output: [2, 4, 6, 8]\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# using if else\n", + "numbers = [1, 2, 3, 4, 5, 6]\n", + "even_odd_list = [\"Even\" if i % 2 == 0 else \"Odd\" for i in numbers]\n", + "print(even_odd_list) # Output: ['Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even']\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# example from Python Turial\n", + "[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/operators.ipynb b/notebooks/operators.ipynb new file mode 100644 index 0000000..8deee20 --- /dev/null +++ b/notebooks/operators.ipynb @@ -0,0 +1,457 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Operators\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Key concepts in programming\n", + "\n", + "- Variables (integers, strings, dates, etc.)\n", + "- Flow control (if then, loop, etc.)\n", + "- Functions (list of steps the code will follow)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Operators\n", + "## Arithmetic operators\n", + "\n", + "| Operator | Name | Meaning |\n", + "|----------|------|-------------|\n", + "| a + b | addition | sum of a and b|\n", + "| a - b | subtraction | difference of a and b|\n", + "| a * b | multiplication | product of a and b|\n", + "| a / b | true division | quotient of a and b|\n", + "| a // b | floor division | quotient of a and b, removing fractional part|\n", + "| a % b | modulus | remainder after division of a by b|\n", + "| a ** b | exponentiation | a raised to power of b|\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# working with integers\n", + "a = 13\n", + "b = 3\n", + "\n", + "# Output: a + b\n", + "print('a + b =', a + b)\n", + "# Output: a - b\n", + "print('a - b =', a - b)\n", + "# Output: a * b\n", + "print('a * b =', a * b)\n", + "# Output: a / b\n", + "print('a / b =', a / b)\n", + "# Output: a // b\n", + "print('a // b =', a // b)\n", + "# Output: a % b\n", + "print('a % b =', a % b)\n", + "# Output: a ** b\n", + "print('a ** b =', a ** b)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# example with real numbers\n", + "a = 1.2\n", + "b = 8.75\n", + "# Output: a + b\n", + "print('a + b =', a + b)\n", + "# Output: a - b\n", + "print('a - b =', a - b)\n", + "# Output: a * b\n", + "print('a * b =', a * b)\n", + "# Output: a / b\n", + "print('a / b =', a / b)\n", + "# Output: a // b\n", + "print('a // b =', a // b)\n", + "# Output: a % b\n", + "print('a % b =', a % b)\n", + "# Output: a ** b\n", + "print('a ** b =', a ** b)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparison operators\n", + "\n", + "| Operator | Meaning |\n", + "|----------|---------|\n", + "| >\t| Greater than - True if left operand is greater than the right |\n", + "| <\t|Less that - True if left operand is less than the right |\n", + "| == |\tEqual to - True if both operands are equal |\n", + "| != |\tNot equal to - True if operands are not equal |\n", + "| >= |\tGreater than or equal to - True if left operand is greater than or equal to the right |\n", + "| <= |\tLess than or equal to - True if left operand is less than or equal to the right |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 13\n", + "b = 3.6\n", + "\n", + "# Output: a > b\n", + "print('a > b :', a > b)\n", + "# Output: a < b\n", + "print('a < b :', a < b)\n", + "# Output: a == b\n", + "print('a == b :', a == b)\n", + "# Output: a != b\n", + "print('a != b :', a != b)\n", + "# Output: a >= b\n", + "print('a >= b :', a >= b)\n", + "# Output: a <= b\n", + "print('a <= b :', a <= b)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Python, we can also use\n", + "```python\n", + "a < b < c\n", + "```\n", + "as a shorthand for\n", + "```python\n", + "a < b and b < c\n", + "```\n", + "and\n", + "```python\n", + "a < b > c\n", + "```\n", + "as a shorthand for\n", + "```python\n", + "a < b and b > c\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"1 < 2 < 3:\", 1 < 2 < 3)\n", + "print(\"1 < 2 < 1:\", 1 < 2 < 1)\n", + "print(\"1 < 2 > 3:\", 1 < 2 > 3)\n", + "print(\"1 < 2 > 1:\", 1 < 2 > 1)\n", + "\n", + "print(\"1 < 2 < 3 < 99 :\", 1 < 2 < 3 < 99)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Logical operators\n", + "\n", + "Logical operators are the `and`, `or`, `not` operators.\n", + "\n", + "| Operator | Meaning |\n", + "|----------|---------|\n", + "| and | True if both the operands are true |\n", + "| or | True if either of the operands is true |\n", + "| not | True if operand is false (complements the operand) |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = True\n", + "b = False\n", + "\n", + "# Output: a and b\n", + "print('a and b :', a and b)\n", + "# Output: a or b\n", + "print('a or b :', a or b)\n", + "# Output: not a\n", + "print('not a :', not a)\n", + "\n", + "# what happens with numbers?\n", + "a = 1.5\n", + "b = 0\n", + "\n", + "# Output: a and b\n", + "print('a and b :', a and b)\n", + "# Output: a or b\n", + "print('a or b :', a or b)\n", + "# Output: not a\n", + "print('not a :', not a)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assignment operation\n", + "\n", + "`a = value` (regular assignment)\n", + "\n", + "`a = a + val` is a common operation to increase a variable a by some fixed amount val, we can write:\n", + "`a = a + val`\n", + "\n", + "`a OP= b` is equivalent to `a = a OP b`\n", + "\n", + "| Operator | Example | Meaning |\n", + "|----------|---------|---------|\n", + "| =\t| a = 5\t| a = 5 |\n", + "| += | a += 5 | a = a + 5 |\n", + "| -= | a -= 5\t| a = a - 5 |\n", + "| *= | a *= 5\t| a = a * 5 |\n", + "| /= | a /= 5\t| a = a / 5 |\n", + "| %= | a %= 5\t| a = a % 5 |\n", + "| //= | a //= 5 | a = a // 5 |\n", + "| **= | a **= 5\t| a = a ** 5 |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 5\n", + "print('a : ', a)\n", + "a += 5\n", + "print('a : ', a)\n", + "a -= 5\n", + "print('a : ', a)\n", + "a *= 5\n", + "print('a : ', a)\n", + "a /= 5\n", + "print('a : ', a)\n", + "a //= 2\n", + "print('a : ', a)\n", + "a **= 5\n", + "print('a : ', a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "x = x + val\n", + "a common operation to increase a variable x by some fixed amount val, we can write:\n", + "\n", + "x = x + val\n", + "\n", + "x += val" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 9.9\n", + "print(x)\n", + "x = x + 8\n", + "print(x)\n", + "x += 5.5\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Special operator\n", + "\n", + "Identity operator `is` is used to check if two values (or variables) are located on the same part of the memory. Two variables that are equal does not imply that they are identical.\n", + "\n", + "| Operator | Meaning |\n", + "|----------|---------|\n", + "|is | True if the operands are identical (refer to the same object) |\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 9\n", + "b = a\n", + "print('a is b', a is b)\n", + "print(id(a))\n", + "print(id(b))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 9\n", + "b = 9\n", + "print('a == b', a == b)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 9.9\n", + "b = 9.9\n", + "print('a is b', a is b)\n", + "print('id(a)', id(a))\n", + "print('id(b)', id(b))\n", + "print('a == b', a == b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bit operators\n", + "\n", + "| Operator | Meaning | Description |\n", + "|----------|---------|-------------|\n", + "|`a & b` | Bitwise AND | Bits defined in both a and b |\n", + "|`a \\| b` | Bitwise OR | Bits defined in a or b or both |\n", + "|`a ^ b` | Bitwise XOR | Bits defined in a or b but not both|\n", + "|`a << b` | Shift left | Shift bits of a left by b units |\n", + "|`a >> b` | Shift right | Bits defined in both a and b |\n", + "|`~a` | Bitwise NOT | Bitwise negation of a|\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# example taken from https://www.tutorialspoint.com/python/bitwise_operators_example.htm\n", + "\n", + "a = 60 # 60 = 0011 1100 \n", + "b = 13 # 13 = 0000 1101 \n", + "print('a = ', a, ' bin(a) = ', bin(a))\n", + "print('b = ', b, ' bin(b) = ', bin(b))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "c = a & b; # 12 = 0000 1100\n", + "print ('Value of c is ', c)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "c = a | b; # 61 = 0011 1101 \n", + "print ('Value of c is ', c)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "c = a ^ b; # 49 = 0011 0001\n", + "print ('Value of c is ', c)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "c = a << 2; # 240 = 1111 0000 - a multiplied by 4\n", + "print ('Value of c is ', c)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "c = a >> 2; # 15 = 0000 1111 - a divided by 4\n", + "print ('Value of c is ', c)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "c = ~a; # -61 = 1100 0011\n", + "print ('Value of c is ', c)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/quick_start_matplotlib.ipynb b/notebooks/quick_start_matplotlib.ipynb new file mode 100644 index 0000000..2eb0577 --- /dev/null +++ b/notebooks/quick_start_matplotlib.ipynb @@ -0,0 +1,1117 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# In recent versions of Jupyter notebooks, the command %matplotlib inline is unnecessary \n", + "# as the plots are displayed below the cell by default.\n", + "%matplotlib inline\n", + "\n", + "# Display output in separate window, interactivity is possible\n", + "#%matplotlib\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# matplotlib: an anthology\n", + "\n", + "This tutorial covers some basic usage patterns and best practices to\n", + "help you get started with Matplotlib.\n", + "\n", + "`pyplot` provides a convenient interface to the matplotlib object-oriented plotting library. It is modeled closely after Matlab(TM). Therefore, the majority of plotting commands in pyplot have Matlab(TM) analogs with similar arguments. \n", + "\n", + "resources used:\n", + "\n", + "- https://matplotlib.org/stable/tutorials/introductory/quick_start.html\n", + "- https://www.stat.berkeley.edu/~nelle/teaching/2017-visualization/README.html\n", + "- https://github.com/rougier/matplotlib-tutorial\n", + "- https://github.com/stefmolin/python-data-viz-workshop/blob/main/notebooks/1-getting_started_with_matplotlib.ipynb\n", + "- https://realpython.com/python-matplotlib-guide/\n", + "\n", + "\n", + "## pyplot vs. Object-Oriented interface\n", + "source: https://matplotlib.org/matplotblog/posts/pyplot-vs-object-oriented-interface/\n", + "\n", + "When using matplotlib we have two approaches:\n", + "\n", + "- implicit: pyplot interface / functional interface.\n", + "- explicit: Object-Oriented interface (OO).\n", + "\n", + "Check https://matplotlib.org/stable/users/explain/api_interfaces.html#api-interfaces" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### pyplot interface\n", + "matplotlib on the surface is made to imitate MATLAB's method of generating plots, which is called pyplot. All the pyplot commands make changes and modify the same figure. This is a state-based interface, where the state (i.e., the figure) is preserved through various function calls (i.e., the methods that modify the figure). This interface allows us to quickly and easily generate plots. The state-based nature of the interface allows us to add elements and/or modify the plot as we need, when we need it.\n", + "\n", + "This interface shares a lot of similarities in syntax and methodology with MATLAB.\n", + "The example below draws the graph of distance vs time\n", + "\n", + "```python\n", + "# matplotlib_first_plot.py\n", + "# using pyplot functions\n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Data for plotting\n", + "time = [2, 4, 6, 8, 10]\n", + "distance = [1, 4, 9, 19, 39]\n", + "velocity = [1, 16, 26, 36, 111]\n", + "\n", + "plt.figure(figsize=(9,7), dpi=100)\n", + "\n", + "plt.plot(time,distance,'bo-', label='distance')\n", + "plt.plot(time,velocity, label='velocity') # scaling, another y-axis???\n", + "\n", + "plt.xlabel(\"Time\")\n", + "plt.ylabel(\"Distance\")\n", + "\n", + "plt.legend()\n", + "plt.grid(True)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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6CIuuugibr75Zk488UTWr1/PGWecQVxcHF6vt8P1y5Yt4+KLL2bevHmAcwNfWlrK6NGju1znmDFj2LlzJxs3buy0t+CMM87ggw8+oLi4uNPnt4QLEREREQmchg/1oehoZ9lRcAJAey2P77+/b/YrSElJ4dprr+X222/ntdde4/333+fqq68+ak/En/70Jx577DHef/99tmzZwoIFC0hMTKSwsBBwVioqKSlh165dVFZWAk7wWLRoEStXrmTDhg3ccMMN7Nmzp1t1zpgxg+nTp/O5z32ORYsWsXXrVl566SX++9//AvDNb36TVatWcfPNN7Nu3TpKS0v597//za233tqD1hERERHpH43NofEBpkJBH5s7F555BvLzOx4vKHCO9+U+Bffeey/Tp0/noosu4txzz2Xq1KmMGzeu02szMjL4/e9/z5QpUxgzZgyvvfYazz//PFlZWQDcfffdbNu2jREjRrTub/D973+fM844gzlz5jBz5kxyc3P5zGc+0+06//GPfzB+/Hguv/xyTjrpJO64447WXokxY8awdOlSSktLmTZtGqeffjrf//73ycvLC6xRRERERPrJzv31TLt3Kc+XReH1dXMZyX6m4UP9YO5cuPji/t/ROCUlhQULFrBgwYLWY7fffnvr99u2bWv9/jOf+cwxb+gnTZrEu+++2+FYZmYmzz333DFrWLJkySeOHfmczMxMHn/88aO+xvjx43nllVeO+T4iIiIiweaRpVvYX+9heyxER5njP8FFCgX9JDoaZs50uwoRERER6Q97axr425s7AJiTH/xDiDR8SERERESkl/2+ZAtNzT7OLMxgRJrb1RyfQoGIiIiISC+qqm3kqTXOvk03zSj6xIIzwUihQERERESkFz2+YiuHPV5OzU9nanGW2+V0iUKBiIiIiEgvOVjv4YmVZQDccnYxJhS6CVAoEBERERHpNU+s2kZtYzMnDEpl9uhBbpfTZQoFIiIiIiK9oK6xmcdXbAXg5rOLiQryZUjbUygQEREREekFT60p40C9h+HZyfzPqaG10apCgYiIiIhIDzV4vDxa4vQS3DRzRNBvVnYkhQI5KmPMcXcsdvP1RERERILF397YQWVtI/kZiXzm9Hy3y+k2hQLpN+Xl5VxwwQUAbNu2DWMM69atc7coERERkR5qavbxf0s3A3DjzBHERofeLXaM2wVI5MjN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\n", + "text/plain": [ + "

" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "run matplotlib_first_plot.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Object-Oriented interface\n", + "When using the OO interface, it helps to know how the matplotlib structures its plots. The final plot that we see as the output is a ‘Figure’ object. The Figure object is the top level container for all the other elements that make up the graphic image. These other elements are called _Artists_. Artists are basically all the elements that are rendered onto the figure. This can include text, patches (like arrows and shapes), etc. The Figure object can be thought of as a canvas, upon which different artists act to create the final graphic image. This Figure can contain any number of various artists.\n", + "\n", + "Each plot that we see in a figure, is an Axes object. The Axes object holds the actual data that we are going to display. It will also contain X- and Y-axis labels, a title. Each Axes object will contain two or more Axis objects.\n", + "The Axis objects set the data limits. It also contains the ticks and ticks labels. ticks are the marks that we see on a axis.\n", + "\n", + "```python\n", + "# matplotlib_first_plot_oo.py\n", + "\n", + "# using oo approach\n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Data for plotting\n", + "time = [2, 4, 6, 8, 10]\n", + "distance = [1, 4, 9, 19, 39]\n", + "velocity = [1, 16, 26, 36, 111]\n", + "\n", + "fig, ax1 = plt.subplots()\n", + "\n", + "ax1.set_ylabel(\"distance (m)\")\n", + "ax1.set_xlabel(\"time\")\n", + "ax1.plot(time, distance, \"blue\")\n", + "\n", + "ax2 = ax1.twinx() # create another y-axis sharing a common x-axis\n", + "\n", + "\n", + "ax2.set_ylabel(\"velocity (m/s)\")\n", + "ax2.set_xlabel(\"time\")\n", + "ax2.plot(time, velocity, \"green\")\n", + "\n", + "fig.set_size_inches(7,5)\n", + "fig.set_dpi(100)\n", + "\n", + "plt.show()\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "run matplotlib_first_plot_oo.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Showcase example code: Anatomy of a figure\n", + "\n", + "The code below shows the name of several matplotlib elements composing a figure\n", + "\n", + "source: https://matplotlib.org/2.0.2/examples/showcase/anatomy.html" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Anatomy of a figure\n", + "# This figure shows the name of several matplotlib elements composing a figure\n", + "# https://matplotlib.org/2.0.2/examples/showcase/anatomy.html\n", + "\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.ticker import AutoMinorLocator, MultipleLocator, FuncFormatter\n", + "\n", + "\n", + "np.random.seed(19680801)\n", + "\n", + "X = np.linspace(0.5, 3.5, 100)\n", + "Y1 = 3+np.cos(X)\n", + "Y2 = 1+np.cos(1+X/0.75)/2\n", + "Y3 = np.random.uniform(Y1, Y2, len(X))\n", + "\n", + "fig = plt.figure(figsize=(8, 8))\n", + "ax = fig.add_subplot(1, 1, 1, aspect=1)\n", + "\n", + "\n", + "def minor_tick(x, pos):\n", + " if not x % 1.0:\n", + " return \"\"\n", + " return \"%.2f\" % x\n", + "\n", + "ax.xaxis.set_major_locator(MultipleLocator(1.000))\n", + "ax.xaxis.set_minor_locator(AutoMinorLocator(4))\n", + "ax.yaxis.set_major_locator(MultipleLocator(1.000))\n", + "ax.yaxis.set_minor_locator(AutoMinorLocator(4))\n", + "ax.xaxis.set_minor_formatter(FuncFormatter(minor_tick))\n", + "\n", + "ax.set_xlim(0, 4)\n", + "ax.set_ylim(0, 4)\n", + "\n", + "ax.tick_params(which='major', width=1.0)\n", + "ax.tick_params(which='major', length=10)\n", + "ax.tick_params(which='minor', width=1.0, labelsize=10)\n", + "ax.tick_params(which='minor', length=5, labelsize=10, labelcolor='0.25')\n", + "\n", + "ax.grid(linestyle=\"--\", linewidth=0.5, color='.25', zorder=-10)\n", + "\n", + "ax.plot(X, Y1, c=(0.25, 0.25, 1.00), lw=2, label=\"Blue signal\", zorder=10)\n", + "ax.plot(X, Y2, c=(1.00, 0.25, 0.25), lw=2, label=\"Red signal\")\n", + "ax.plot(X, Y3, linewidth=0,\n", + " marker='o', markerfacecolor='w', markeredgecolor='k')\n", + "\n", + "ax.set_title(\"Anatomy of a figure\", fontsize=20, verticalalignment='bottom')\n", + "ax.set_xlabel(\"X axis label\")\n", + "ax.set_ylabel(\"Y axis label\")\n", + "\n", + "ax.legend()\n", + "\n", + "\n", + "def circle(x, y, radius=0.15):\n", + " from matplotlib.patches import Circle\n", + " from matplotlib.patheffects import withStroke\n", + " circle = Circle((x, y), radius, clip_on=False, zorder=10, linewidth=1,\n", + " edgecolor='black', facecolor=(0, 0, 0, .0125),\n", + " path_effects=[withStroke(linewidth=5, foreground='w')])\n", + " ax.add_artist(circle)\n", + "\n", + "\n", + "def text(x, y, text):\n", + " ax.text(x, y, text, backgroundcolor=\"white\",\n", + " ha='center', va='top', weight='bold', color='blue')\n", + "\n", + "\n", + "# Minor tick\n", + "circle(0.50, -0.10)\n", + "text(0.50, -0.32, \"Minor tick label\")\n", + "\n", + "# Major tick\n", + "circle(-0.03, 4.00)\n", + "text(0.03, 3.80, \"Major tick\")\n", + "\n", + "# Minor tick\n", + "circle(0.00, 3.50)\n", + "text(0.00, 3.30, \"Minor tick\")\n", + "\n", + "# Major tick label\n", + "circle(-0.15, 3.00)\n", + "text(-0.15, 2.80, \"Major tick label\")\n", + "\n", + "# X Label\n", + "circle(1.80, -0.27)\n", + "text(1.80, -0.45, \"X axis label\")\n", + "\n", + "# Y Label\n", + "circle(-0.27, 1.80)\n", + "text(-0.27, 1.6, \"Y axis label\")\n", + "\n", + "# Title\n", + "circle(1.60, 4.13)\n", + "text(1.60, 3.93, \"Title\")\n", + "\n", + "# Blue plot\n", + "circle(1.75, 2.80)\n", + "text(1.75, 2.60, \"Line\\n(line plot)\")\n", + "\n", + "# Red plot\n", + "circle(1.20, 0.60)\n", + "text(1.20, 0.40, \"Line\\n(line plot)\")\n", + "\n", + "# Scatter plot\n", + "circle(3.20, 1.75)\n", + "text(3.20, 1.55, \"Markers\\n(scatter plot)\")\n", + "\n", + "# Grid\n", + "circle(3.00, 3.00)\n", + "text(3.00, 2.80, \"Grid\")\n", + "\n", + "# Legend\n", + "circle(3.70, 3.80)\n", + "text(3.70, 3.60, \"Legend\")\n", + "\n", + "# Axes\n", + "circle(0.5, 0.5)\n", + "text(0.5, 0.3, \"Axes\")\n", + "\n", + "# Figure\n", + "circle(-0.3, 0.65)\n", + "text(-0.3, 0.45, \"Figure\")\n", + "\n", + "color = 'blue'\n", + "ax.annotate('Spines', xy=(4.0, 0.35), xycoords='data',\n", + " xytext=(3.3, 0.5), textcoords='data',\n", + " weight='bold', color=color,\n", + " arrowprops=dict(arrowstyle='->',\n", + " connectionstyle=\"arc3\",\n", + " color=color))\n", + "\n", + "ax.annotate('', xy=(3.15, 0.0), xycoords='data',\n", + " xytext=(3.45, 0.45), textcoords='data',\n", + " weight='bold', color=color,\n", + " arrowprops=dict(arrowstyle='->',\n", + " connectionstyle=\"arc3\",\n", + " color=color))\n", + "\n", + "ax.text(4.0, -0.4, \"Made with http://matplotlib.org\",\n", + " fontsize=10, ha=\"right\", color='.5')\n", + "\n", + "plt.show()" + ] + }, + { + "attachments": { + "matplotlib_hierarchy.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## matplotlib Object Hierarchy: more\n", + "source: \n", + "- https://realpython.com/python-matplotlib-guide/\n", + "- https://www.janmeppe.com/blog/Plotting-with-Matplotlib/\n", + "\n", + "One important big-picture matplotlib concept is its _object hierarchy_: there is a tree-like structure of matplotlib objects underlying each plot. Basically, the hierarchy is as follows: Figure, Axes, Axis and all other stuff that goes on a plot. \n", + "\n", + "A Figure object is the outermost container for a matplotlib graphic, which can contain multiple Axes objects. One source of confusion is the name: an Axes actually translates into what we think of as an individual plot or graph (rather than the plural of “axis,” as we might expect).\n", + "\n", + "- A Figure object can have multiple Axes objects. This thing right here is what makes the terminology so confusing, think of the Axes object simply as an individual plot or graph.\n", + "- An Axes object has two Axis objects (x-axis and y-axis)\n", + "- Below the Axes in the hierarchy are smaller objects such as tick marks, individual lines, legends, and text boxes. \n", + "Almost every “element” of a chart is its own manipulable Python object, all the way down to the ticks and labels.\n", + "\n", + "![matplotlib_hierarchy.png](attachment:matplotlib_hierarchy.png)\n", + "Chart: object hierarchy (source: https://www.janmeppe.com/blog/Plotting-with-Matplotlib/)\n", + "\n", + "You can only manipulate one Axes object at a time. With pyplot, simple functions are used to add plot elements (lines, images, text, etc.) to the current Axes in the current figure.” \n", + "\n", + "Functions like gca() refer to getCurrentAxes() which basically grabs the current Axes so you can work on it." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Getting started\n", + "\n", + "imports are necessary to use matplotlib. Use some standard shorthands for Matplotlib imports\n", + "\n", + "```python\n", + "\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# use some standard shorthands for Matplotlib imports\n", + "\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# A step by step example\n", + "\n", + "source: https://matplotlib.org/stable/tutorials/introductory/quick_start.html#sphx-glr-tutorials-introductory-quick-start-py\n", + "\n", + "matplotlib graphs your data on a `figure` each of which can contain one or more `Axes`, an\n", + "area where points can be specified in terms of coordinates \n", + "\n", + "The simplest way of creating a Figure with an Axes is using `pyplot.subplots`.\n", + "\n", + "Note: With subplot you can arrange plots in a regular grid. You need to specify the number of rows and columns and the number of the plot. Note that the `gridspec` command is a more powerful alternative.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Parts of a Figure\n", + "\n", + "Here are the components of a matplotlib figure." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `figure`\n", + "\n", + "The **whole** figure. The figure keeps\n", + "track of all the child `Axes`, a group of\n", + "'special' Artists (titles, figure legends, colorbars, etc), and\n", + "even nested subfigures.\n", + "\n", + "The easiest way to create a new Figure is with pyplot::\n", + "\n", + "```python\n", + " fig = plt.figure() # an empty figure with no Axes\n", + " fig, ax = plt.subplots() # a figure with a single Axes\n", + " fig, axs = plt.subplots(2, 2) # a figure with a 2x2 grid of Axes\n", + "```\n", + "\n", + "It is often convenient to create the Axes together with the Figure, but you\n", + "can also manually add Axes later on. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure() # an empty figure with no Axes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "print(type(fig))\n", + "print(type(ax))\n", + "print(dir(ax))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 2 axes columnwise\n", + "fig1, axs = plt.subplots(2,1)\n", + "\n", + "print(type(axs))\n", + "print(type(axs[1]))\n", + "\n", + "\n", + "fig2, (ax1, ax2) = plt.subplots(2,1)\n", + "\n", + "print(type(ax1))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#2 axes rowwise\n", + "fig, (ax1, ax2) = plt.subplots(1,2)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `Axes`\n", + "\n", + "An Axes is an Artist attached to a Figure that contains a region for\n", + "plotting data, and usually includes two (or three in the case of 3D)\n", + "`Axis` objects (be aware of the difference\n", + "between **Axes** and **Axis**) that provide ticks and tick labels to\n", + "provide scales for the data in the Axes. Each `Axes` also\n", + "has a title\n", + "(set via `set_title`), an x-label (set via\n", + "`set_xlabel`), and a y-label set via\n", + "`set_ylabel`).\n", + "\n", + "The `Axes` class and its member functions are the primary\n", + "entry point to working with the OOP interface, and have most of the\n", + "plotting methods defined on them " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "time = [2, 4, 6, 8, 10]\n", + "distance = [1, 4, 9, 19, 39]\n", + "\n", + "print(type(time))\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.plot(time, distance)\n", + "ax.set(xlabel='time',\n", + " ylabel='distance (m)',\n", + " title='Distance Graph')\n", + "\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `Axis`\n", + "\n", + "These objects set the scale and limits and generate ticks (the marks\n", + "on the Axis) and ticklabels (strings labeling the ticks). The location\n", + "of the ticks is determined by a `Locator` object and the\n", + "ticklabel strings are formatted by a `Formatter`. The\n", + "combination of the correct `Locator` and `Formatter` gives very fine\n", + "control over the tick locations and labels." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `Artist`\n", + "\n", + "Basically, everything visible on the Figure is an Artist. When the Figure is rendered, all of the\n", + "Artists are drawn to the **canvas**. Most Artists are tied to an Axes; such\n", + "an Artist cannot be shared by multiple Axes, or moved from one to another." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Input to plotting functions\n", + "\n", + "Plotting functions expect `numpy.array` or `numpy.ma.masked_array` as\n", + "input, or objects that can be passed to `numpy.asarray`(e.g. a Python list, pandas DataFrame). \n", + "Classes that are similar to arrays ('array-like') such as `pandas`\n", + "data objects and `numpy.matrix` may not work as intended. Common convention\n", + "is to convert these to `numpy.array` objects prior to plotting.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "use `Axes.plot` to draw some data on the Axes:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots() # Create a figure containing a single axes.\n", + "ax.plot([2, 4, 6, 8, 10], [1, 4, 9, 19, 39]); # Plot some data on the axes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(19680801) # seed the random number generator.\n", + "data = {'a': np.arange(50),\n", + " 'c': np.random.randint(0, 50, 50),\n", + " 'd': np.random.randn(50)}\n", + "data['b'] = data['a'] + 10 * np.random.randn(50)\n", + "data['d'] = np.abs(data['d']) * 100\n", + "\n", + "fig, ax = plt.subplots(figsize=(5, 2.7), layout='constrained')\n", + "ax.scatter('a', 'b', c='c', s='d', data=data)\n", + "ax.set_xlabel('entry a')\n", + "ax.set_ylabel('entry b');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Styling Artists\n", + "\n", + "Most plotting methods have styling options for the Artists, accessible either\n", + "when a plotting method is called, or from a \"setter\" on the Artist. \n", + "\n", + "In the\n", + "plot below the *color*, *linewidth*, and *linestyle* of the\n", + "Artists created by `plot` are set, and we set the linestyle of the second line\n", + "after the fact with `set_linestyle`.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data1, data2 = np.random.randn(2, 100) # make 2 random data sets\n", + "\n", + "fig, ax = plt.subplots(figsize=(5, 2.7))\n", + "x = np.arange(len(data1))\n", + "ax.plot(x, np.cumsum(data1), color='blue', linewidth=3, linestyle='--')\n", + "l, = ax.plot(x, np.cumsum(data2), color='orange', linewidth=2)\n", + "l.set_linestyle('dashdot');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Colors\n", + "\n", + "Check: https://matplotlib.org/stable/tutorials/colors/colors.html\n", + "\n", + "Matplotlib has a very flexible array of colors that are accepted for most\n", + "Artists.\n", + "\n", + "A single character shorthand notation for some basic colors (similar to Matlab)\n", + "\n", + "- 'b' as blue\n", + "- 'g' as green\n", + "- 'r' as red\n", + "- 'c' as cyan\n", + "- 'm' as magenta\n", + "- 'y' as yellow\n", + "- 'k' as black\n", + "- 'w' as white\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(5, 2.7))\n", + "ax.scatter(data1, data2, s=50, facecolor='c', edgecolor='k');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Linewidths, linestyles, and markersizes\n", + "\n", + "Line widths are typically in typographic points (1 pt = 1/72 inch) and\n", + "available for Artists that have stroked lines. \n", + "\n", + "- 'solid' or '-'\n", + "- 'dotted' or ':'\n", + "- 'dashed' or '--'\n", + "- 'dashdot'or '-.'\n", + "\n", + "All possible markers: check https://matplotlib.org/stable/api/markers_api.html\n", + "\n", + "Marker size depends on the method being used. `~.Axes.plot` specifies\n", + "markersize in points, and is generally the \"diameter\" or width of the\n", + "marker. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data1, data2, data3, data4 = np.random.randn(4, 100) # make 4 random data sets\n", + "\n", + "fig, ax = plt.subplots(figsize=(5, 2.7))\n", + "ax.plot(data1, 'o', label='data1')\n", + "ax.plot(data2, 'd', label='data2')\n", + "ax.plot(data3, 'v', label='data3')\n", + "ax.plot(data4, 's', label='data4')\n", + "ax.legend();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Labelling plots\n", + "\n", + "### Axes labels and text\n", + "\n", + "`set_xlabel`, `set_ylabel`, and `set_title` are used to\n", + "add text in the indicated locations. Text can also be directly added to plots using\n", + "`text`:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "mu, sigma = 115, 15\n", + "x = mu + sigma * np.random.randn(10000)\n", + "fig, ax = plt.subplots(figsize=(5, 2.7))\n", + "# the histogram of the data\n", + "n, bins, patches = ax.hist(x, 50, density=True, facecolor='C0', alpha=0.75)\n", + "\n", + "ax.set_xlabel('Length [cm]')\n", + "ax.set_ylabel('Probability')\n", + "ax.set_title('Aardvark lengths\\n (not really)')\n", + "ax.text(75, .025, r'$\\mu=115,\\ \\sigma=15$')\n", + "ax.axis([55, 175, 0, 0.03])\n", + "ax.grid(True);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using mathematical expressions in text\n", + "\n", + "Matplotlib accepts TeX equation expressions in any text expression.\n", + "For example to write the expression $\\sigma_i=15$ in the title,\n", + "you can write a TeX expression surrounded by dollar signs:\n", + "\n", + " ax.set_title(r'$\\sigma_i=15$')\n", + "\n", + "where the ``r`` preceding the title string signifies that the string is a\n", + "*raw* string and not to treat backslashes as python escapes.\n", + "Matplotlib has a built-in TeX expression parser and\n", + "layout engine, and ships its own math fonts." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Annotations\n", + "\n", + "We can also annotate points on a plot, often by connecting an arrow pointing\n", + "to *xy*, to a piece of text at *xytext*:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAATsAAAC2CAYAAACmhSp1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAuW0lEQVR4nO2deXyV1bnvv2tPmQdCBhII8xxihEQEB6goaLFWbW0tdaxtvbXjufWec/R4b21Pjz291tPB4zm2lXpbFLBUC7Z1wqGKKIhJmBICYQqQATLPO8ke1v1jD2wwkD28e79vstf388lH4t577Wflfd/fetaznvUsIaVEoVAoxjomvQ1QKBSKWKDETqFQxAVK7BQKRVygxE6hUMQFSuwUCkVcoMROoVDEBRGLnRCiUAjxdyFEjRCiWgjxPS0MUygUCi0RkebZCSHygXwpZaUQIg2oAG6RUh7QwkCFQqHQgog9Oyllk5Sy0vvvHqAGmBhpuwqFQqElmsbshBBTgYXAR1q2q1AoFJFi0aohIUQq8BLwD1LK7mFevx+4HyAlJaV07ty5Wn21QqFQAFBRUdEqpcwZ7rWIY3YAQggr8DfgDSnlz0d6f1lZmSwvL4/4exUKhSIQIUSFlLJsuNe0WI0VwO+AmmCETqFQKPRAi5jdlcBdwAohxB7vz2oN2lUoFArNiDhmJ6XcDggNbFEoFIqooXZQKBSKuECJnUKhiAuU2CkUirhAiZ1CoYgLlNgpFIq4QImdQqGIC5TYKRReUlNTNW3vhz/8IU888YSmbSrCR4mdQqGIC5TYKRTnIaXkH//xH1mwYAHFxcX88Y9/9L/2+OOPU1xcTElJCQ899BAAzzzzDJdddhklJSV8/vOfp7+//6Lt33vvvTzwwANcc801TJ8+nffee4/77ruPefPmce+99/rf98ADD1BWVkZRURGPPvooAF1dXcyZM4dDhw4BsGbNGp555hmN/wJjFCllzH9KS0ulQmE0UlJSpJRSvvjii/K6666TTqdTnj59WhYWFsrGxkb56quvyqVLl8q+vj4ppZRtbW1SSilbW1v9bTzyyCPyySeflFJK+eijj8qf/exnn/iee+65R95+++3S7XbLLVu2yLS0NLlv3z7pcrnkokWL5O7du89p3+l0yuXLl8u9e/dKKaXcunWrXLJkidy4caO8/vrro/PHGKUA5fICuqM8O4XiPLZv386aNWswm83k5eWxfPlyPv74Y9566y2+8pWvkJycDEBWVhYAVVVVXH311RQXF7N+/Xqqq6tH/I6bbroJIQTFxcXk5eVRXFyMyWSiqKiIuro6ADZt2sSiRYtYuHAh1dXVHDjgKf69cuVKiouL+da3vsXatWuj80cYgyixUyjOQ16g7JmUEk+Rn3O59957eeqpp9i/fz+PPvooAwMDI35HQkICACaTyf9v3+9Op5Pjx4/zxBNP8Pbbb7Nv3z5uvPFGf7tut5uamhqSkpJob28Pp4txiRI7heI8li1bxh//+EdcLhctLS1s27aNxYsXs2rVKp599ll/TM4nND09PeTn5+NwOFi/fr0mNnR3d5OSkkJGRgZnzpzhtdde87/2i1/8gnnz5rFx40buu+8+HA6HJt851tGsUrFCMVa49dZb2bFjByUlJQghePzxx5kwYQI33HADe/bsoaysDJvNxurVq/nJT37Cj3/8Yy6//HKmTJlCcXExPT09EdtQUlLCwoULKSoqYvr06Vx55ZUA1NbWsnbtWnbt2kVaWhrLli3j3/7t3/jRj34U8XeOdTSpVBwqqlKxQg+OHz/O5s2bWb58OaWlpXqbo4gCF6tUrDw7xZimpqaGTZs28dxzz9HQ0IDL5WLFihW8/vrrepumiDFK7BRjCiklu3fv5oUXXmDDhg10dHTgdDoZGhryv+fdd9+lv7/fv6qqiA+U2ClGPW63mx07drBhwwY2bdqE3W5ncHAQp9M57PttNhtbt27llltuia2hCl1RYqcYlTgcDt59913Wr1/Pli1bcLvd9PX14Xa7R/ys3W5ny5YtSuziDCV2ilHDwMAAW7du5fnnn+eVV17BbDbT29t7wby4QBITExFCUFBQwF133XXOtixFfKDETmFoenp6ePXVV1m3bh3vvPMOVqs16NSO5ORkXC4Xs2bN4u677+a2225j2rRpUbZYYVSU2CliwpYtW3jooYeoqqrCYrn4bdfe3s7LL7/MunXr2LFjBzabzS9wI+1OSElJweFwUFJSwj333MOtt95KQUGBZv1QjF6U2CmizqZNm/zTxm3btrFixYpPvKepqYnNmzfzhz/8gT179mCz2ejt7QVgcHDwou2npaUxODjI0qVLufvuu7n55psZP3685v1QjG6U2CmiyoYNG/ja176G3W5HCMGGDRv8YldXV8eL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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(5, 2.7))\n", + "\n", + "t = np.arange(0.0, 5.0, 0.01)\n", + "s = np.cos(2 * np.pi * t)\n", + "line, = ax.plot(t, s, lw=2)\n", + "\n", + "ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),\n", + " arrowprops=dict(facecolor='black', shrink=0.05))\n", + "\n", + "ax.set_ylim(-2, 2);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this basic example, both *xy* and *xytext* are in data coordinates." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Legends\n", + "\n", + "Often we want to identify lines or markers with a `legend`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(figsize=(5, 2.7))\n", + "ax.plot(np.arange(len(data1)), data1, label='data1')\n", + "ax.plot(np.arange(len(data2)), data2, label='data2')\n", + "ax.plot(np.arange(len(data3)), data3, 'd', label='data3')\n", + "ax.legend();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Legends in Matplotlib are quite flexible in layout, placement, and what\n", + "Artists they can represent. \n", + "\n", + "Check: https://matplotlib.org/stable/tutorials/intermediate/legend_guide.html" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Axis scales and ticks\n", + "\n", + "Each Axes has two (or three) `Axis` objects representing the x- and\n", + "y-axis. These control the *scale* of the Axis, the tick *locators* and the\n", + "tick *formatters*. Additional Axes can be attached to display further Axis\n", + "objects." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scales\n", + "\n", + "In addition to the linear scale, Matplotlib supplies non-linear scales,\n", + "such as a log-scale. Since log-scales are used so much there are also\n", + "direct methods like `loglog`, `semilogx`, and\n", + "`semilogy`. " + ] + }, + { + "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": [ + "fig, axs = plt.subplots(1, 2, figsize=(5, 2.7))\n", + "xdata = np.arange(len(data1)) # make an ordinal for this\n", + "data = 10**data1\n", + "axs[0].plot(xdata, data)\n", + "\n", + "axs[1].set_yscale('log')\n", + "axs[1].plot(xdata, data);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Tick locators and formatters\n", + "\n", + "Each Axis has a tick *locator* and *formatter* that choose where along the\n", + "Axis objects to put tick marks. A simple interface to this is\n", + "`set_xticks`:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, axs = plt.subplots(1, 2)\n", + "axs[0].plot(xdata, data1)\n", + "axs[0].set_title('Automatic ticks')\n", + "\n", + "axs[1].plot(xdata, data1)\n", + "axs[1].set_xticks(np.arange(0, 100, 30))\n", + "axs[1].set_xticklabels(['zero', '30', 'sixty', '90'])\n", + "axs[1].set_yticks([-1.5, 0, 1.5]) # note that we don't need to specify labels\n", + "axs[1].set_title('Manual ticks');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plotting dates and strings\n", + "\n", + "Matplotlib can handle plotting arrays of dates and arrays of strings, as\n", + "well as floating point numbers. These get special locators and formatters\n", + "as appropriate. For dates:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(5, 2.7))\n", + "dates = np.arange(np.datetime64('2021-11-15'), np.datetime64('2021-12-25'),\n", + " np.timedelta64(1, 'h'))\n", + "data = np.cumsum(np.random.randn(len(dates)))\n", + "ax.plot(dates, data)\n", + "cdf = mpl.dates.ConciseDateFormatter(ax.xaxis.get_major_locator())\n", + "ax.xaxis.set_major_formatter(cdf);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Additional Axis objects\n", + "\n", + "Plotting data of different magnitude in one chart may require\n", + "an additional y-axis. Such an Axis can be created by using\n", + "`twinx` to add a new Axes with an invisible x-axis and a y-axis\n", + "positioned at the right (analogously for `twiny`). \n", + "\n", + "Similarly, you can add a `secondary_xaxis` or\n", + "`secondary_yaxis` having a different scale than the main Axis to\n", + "represent the data in different scales or units. " + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 0, 'Angle [°]')" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, (ax1, ax3) = plt.subplots(1, 2, figsize=(7, 2.7))\n", + "l1, = ax1.plot(t, s)\n", + "ax2 = ax1.twinx()\n", + "l2, = ax2.plot(t, range(len(t)), 'C1')\n", + "ax2.legend([l1, l2], ['Sine (left)', 'Straight (right)'])\n", + "\n", + "ax3.plot(t, s)\n", + "ax3.set_xlabel('Angle [rad]')\n", + "ax4 = ax3.secondary_xaxis('top', functions=(np.rad2deg, np.deg2rad))\n", + "ax4.set_xlabel('Angle [°]')" + ] + } + ], + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/set.ipynb b/notebooks/set.ipynb new file mode 100644 index 0000000..3b85aab --- /dev/null +++ b/notebooks/set.ipynb @@ -0,0 +1,244 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*This notebook contains an excerpt from the [Whirlwind Tour of Python](http://www.oreilly.com/programming/free/a-whirlwind-tour-of-python.csp) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/WhirlwindTourOfPython).*\n", + "\n", + "*The text and code are released under the [CC0](https://github.com/jakevdp/WhirlwindTourOfPython/blob/master/LICENSE) license; see also the companion project, the [Python Data Science Handbook](https://github.com/jakevdp/PythonDataScienceHandbook).*\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Key concepts in programming\n", + "\n", + "- Variables (integers, strings, dates, etc.)\n", + "- Flow control (if then, loop, etc.)\n", + "- Functions (list of steps the code will follow)\n", + "\n", + "\n", + "## data containers\n", + "\n", + "Organize the data structure into four different families: \n", + "- Ordered data structure: list and tuple\n", + "- Unordered data structure: set and dictionary \n", + "- Mutable: list, set and dictionary \n", + "- Immutable: tuple \n", + "\n", + "\n", + "| Type | Example | Description |\n", + "|------|---------|---------|\n", + "| list | `[1, 2, 3]` | Ordered collection|\n", + "| tuple | `(1, 2, 3)` | Immutable ordered collection|\n", + "| dict | `{'a':1, 'b':2, 'c':3}` | Unordered (key:value) pair mapping|\n", + "| set | `{1, 2, 3}` | Unordered collection of unique values |\n", + "\n", + "\n", + "## operations on any sequence\n", + "\n", + "| Operation | Operator | Description |\n", + "|------|---------|---------|\n", + "| indexing | `[]` | Access an element of a sequence |\n", + "|concatenation | `+` | Combine sequences together|\n", + "| repetition | `*` | Concatenate a repeated number of times|\n", + "| membership | `in` | Ask whether an item is in a sequence |\n", + "| length | `len` | Ask the number of items in the sequence|\n", + "| slicing | `[:]` | Extract a part of a sequence |\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sets\n", + "\n", + "The set contains unordered collections of unique items.\n", + "\n", + "- use the curly brackets `{}`\n", + "- **Unordered**\n", + "- **Set elements are unique**. Duplicate elements are not allowed.\n", + "- **Mutable**: a set itself may be modified, but the elements contained in the set must be of an immutable type.\n", + "- **No Indexing**: Set items cannot be referred to by index or key.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "primes = {2, 3, 5, 7}\n", + "odds = {1, 3, 5, 7, 9}\n", + "\n", + "myset = {'a', 'a', 'a', 'a', 'b', 'b', 'c'}\n", + "print(myset)\n", + "myset = {'a', 'all', 1, 2, (1, 2, 3)}\n", + "print(myset)\n", + "myset = {'a', 'all', 1, 2, [1, 2, 3]}\n", + "print(myset)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sets relate very closely to the sets we know from mathematics, the familiar operations like the union, intersection, difference, symmetric difference exist.\n", + "\n", + "\n", + "Python's sets have all of these operations built-in, via methods or operators." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "primes = {2, 3, 5, 7}\n", + "odds = {1, 3, 5, 7, 9}\n", + "# union: items appearing in either\n", + "res_1o = primes | odds # with an operator\n", + "res_1m = primes.union(odds) # equivalently with a method\n", + "print(res_1o)\n", + "print(res_1m)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# intersection: items appearing in both\n", + "res_2o = primes & odds # with an operator\n", + "res_2m = primes.intersection(odds) # equivalently with a method\n", + "print(res_2o)\n", + "print(res_2m)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# difference: items in primes but not in odds\n", + "res_3o = primes - odds # with an operator\n", + "res_3m = primes.difference(odds) # equivalently with a method\n", + "print(res_3o)\n", + "print(res_3m)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# symmetric difference: items appearing in only one set\n", + "res_4o = primes ^ odds # with an operator\n", + "res_4m = primes.symmetric_difference(odds) # equivalently with a method\n", + "print(res_4o)\n", + "print(res_4m)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Building an set\n", + "\n", + "- an empty set with `set()`\n", + "- convert a list, tuple or string with `set()` will return a set with the elements" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "empty_set = set()\n", + "print(empty_set)\n", + "\n", + "str_1 = ' Hello World, this is a string'\n", + "str_set = set(str_1)\n", + "print(str_1)\n", + "print(str_set)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More set methods and operations are available.\n", + "\n", + "- add: add an item to the set\n", + "- discard: remove an item\n", + "- pop: removes a random item from the set and returns its value" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(primes)\n", + "primes.add(13)\n", + "print(primes)\n", + "\n", + "guess_what = primes.pop()\n", + "print(guess_what)\n", + "\n", + "primes.discard(1)\n", + "print(primes)\n", + "\n", + "primes.remove(1)\n", + "print(primes)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/tuple.ipynb b/notebooks/tuple.ipynb new file mode 100644 index 0000000..97c1f45 --- /dev/null +++ b/notebooks/tuple.ipynb @@ -0,0 +1,317 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Key concepts in programming\n", + "\n", + "- Variables (integers, strings, dates, etc.)\n", + "- Flow control (if then, loop, etc.)\n", + "- Functions (list of steps the code will follow)\n", + "\n", + "\n", + "## data containers\n", + "\n", + "Organize the data structure into four different families: \n", + "- Ordered data structure: list and tuple\n", + "- Unordered data structure: set and dictionary \n", + "- Mutable: list, set and dictionary \n", + "- Immutable: tuple \n", + "\n", + "\n", + "| Type | Example | Description |\n", + "|------|---------|---------|\n", + "| list | `[1, 2, 3]` | Ordered collection|\n", + "| tuple | `(1, 2, 3)` | Immutable ordered collection|\n", + "| dict | `{'a':1, 'b':2, 'c':3}` | Unordered (key:value) pair mapping|\n", + "| set | `{1, 2, 3}` | Unordered collection of unique values |\n", + "\n", + "\n", + "## operations on any sequence\n", + "\n", + "| Operation | Operator | Description |\n", + "|------|---------|---------|\n", + "| indexing | `[]` | Access an element of a sequence |\n", + "|concatenation | `+` | Combine sequences together|\n", + "| repetition | `*` | Concatenate a repeated number of times|\n", + "| membership | `in` | Ask whether an item is in a sequence |\n", + "| length | `len` | Ask the number of items in the sequence|\n", + "| slicing | `[:]` | Extract a part of a sequence |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tuples\n", + "Tuples are in many ways similar to lists, but they are defined with parentheses rather than square brackets:\n", + "- ()\n", + "- Tuples are defined by specifying items separated by commas\n", + "- immutable objects, they are usually used when the list of values doesn't change\n", + "- same slicing rules apply as for lists\n", + "\n", + "Key features:\n", + " - **heterogeneous**: elements of a tuple don't have to be the same type. Each element of the tuple can be of any type.\n", + " - **indexing**: elements can be referenced by an index. \n", + " - **nesting**: tuples can be nested to arbitrary depth\n", + " - **immutable**: tuples are unchangeable\n", + " - **duplicates allowed**: tuples are indexed, items can have the same value\n", + "\n", + "Tuples?\n", + "- if data do not change, implementing it as tuple will guarantee that it remains write-protected.\n", + "- tuples are immutable, iterating through tuple is faster than with list. So there is a slight performance boost.\n", + "- tuples are frequently used to return multiple variables from functions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# tuple of strings\n", + "my_tuple1 = ('hi', 'hello', 'world')\n", + "print(my_tuple1)\n", + "\n", + "# tuple mixed data\n", + "my_tuple2 = (1, 'Hello', 3.14)\n", + "print(my_tuple2)\n", + "\n", + "# tuple of string and list\n", + "my_tuple3 = ('moving', [1, 2, 3, 4], ('v', 't', 'y'))\n", + "print(my_tuple3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Watch out: mutable elements from a tuple can be changed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#mutable elements from a tuple can be changed\n", + "my_tuple3[1][0] = 100\n", + "print('my_tuple3', my_tuple3)\n", + "\n", + "# tuple with 1 element\n", + "my_tuple4 = (1,)\n", + "print(my_tuple4)\n", + "\n", + "# empty tuple\n", + "my_tuple5 = ()\n", + "print(my_tuple5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "select items from a tuple with []" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#select elements out of the tuples\n", + "print(my_tuple1[1])\n", + "print(my_tuple1[1][1])\n", + "print(my_tuple2[1])\n", + "print(my_tuple3[2])\n", + "print(my_tuple3[2][2])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### packing / unpacking\n", + "\n", + "Tuples can be used to assign multiple variables in a single operation (packing)\n", + "\n", + "Syntax: < tuple of variables > = < tuple of values >" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(a, b, c) = (1, 2, 3)\n", + "print(a, b, c)\n", + "print(type(c))\n", + "\n", + "(a, b, *c) = (1, 2, 3, 4, 5)\n", + "print(a, b, c)\n", + "print(type(c))\n", + "\n", + "(a, *b, c) = (1, 2, 3, 4, 5)\n", + "print(a, b, c)\n", + "print(type(c))\n", + "\n", + "(a, b, c) = (1, 2, 3, 4, 5)\n", + "print(a, b, c)\n", + "print(type(c))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "t1 = (1, 2, 'help', [1, 2, 3])\n", + "print(t1)\n", + "print(dir(t1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Methods\n", + "\n", + "- index() searches an element in a tuple and returns its index.\n", + "- count() returns the number of items" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "t1 = (1, 2, 'help', [1, 2, 3])\n", + "print(t1)\n", + "print('count of 1: ', t1.count(1))\n", + "print('count of 3: ', t1.count(3))\n", + "\n", + "print('index of 1: ', t1.index(1))\n", + "print('index of 3: ', t1.index(3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test membership with `in`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "3 in t1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Delete Tuple Elements?\n", + "\n", + "- Removing individual tuple elements is not possible. \n", + "- To explicitly remove an entire tuple, use the `del` statement." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "t1 = (1, 2, 'help', [1, 2, 3])\n", + "%who\n", + "del(t1)\n", + "%who" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### advanced\n", + "\n", + "named tuple \n", + "\n", + "* Convenient access the tuple's fields by name, rather than by index. \n", + "* Python's standard library: define named tuples through typing.NameTuple." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from typing import NamedTuple\n", + "\n", + "class Car(NamedTuple):\n", + " name: str\n", + " year: int\n", + " weight: float\n", + " \n", + "\n", + "car1 = Car('Volvo', 2015, 48.9)\n", + "print('car = ', car1)\n", + "print('car name = ', car1.name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lcars = [Car('Volvo', 2015, 48.9), Car('VW', 2017, 4.9), Car('Opel', 2011, 58.9)]\n", + "print('car 1', lcars[0])\n", + "print('car 2', lcars[1].name)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/variables.ipynb b/notebooks/variables.ipynb new file mode 100644 index 0000000..caf7606 --- /dev/null +++ b/notebooks/variables.ipynb @@ -0,0 +1,413 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Variables\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In order to ensure that all cells in this notebook can be evaluated without errors, we will use try-except to catch exceptions. To show the actual errors, we need to print the backtrace, hence the following import.\n", + "from traceback import print_exc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Key concepts in programming\n", + "\n", + "- Variables (integers, strings, dates, etc.)\n", + "- Flow control (if then, loop, etc.)\n", + "- Functions (list of steps the code will follow)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Variables \n", + "* Variables are placeholders for locations in memory. \n", + " * Variables are names for values\n", + " * Created by use – no declaration necessary\n", + " * Python is dynamically typed, The Python interpreter infers the type based on the assigned value.\n", + "* Variables always have a type \n", + " * Variables only have data types after you use them\n", + " * Use the type function to determine variable type\n", + "* Variables have a name\n", + " * Python is case sensitive. \n", + " * myVar is different from Myvar\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Naming \n", + "Variable names in Python can contain alphanumeric characters (a-z, A-Z, 0-9) and underscores (_)\n", + "\n", + "Python is case-sensitive.\n", + "\n", + " * Avoid using names that differ only by case\n", + " * Choose meaningful names\n", + " * No leading numbers, no spaces\n", + " * Variables are generally lower case, functions are CapCase\n", + " * Don’t use Python keywords" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "password1 = 'secret'\n", + "n00b = 9.07\n", + "un_der_scores = 9\n", + "case_sensitive = 'c' \n", + "CASE_SENSITIVE = 'cc'\n", + "Case_Sensitive = 'ccc'\n", + "%whos\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use keyword library to get the list of keywords\n", + "import keyword\n", + "keyword.kwlist" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "76trombones = 'big parade'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "more@ = 1000000" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for = 'Advanced Theoretical Physics'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Assignment\n", + "\n", + "Variables must be created (assigned a value) before they can be used\n", + "\n", + "A variable is created through assignment:\n", + "`x = 4`\n", + "\n", + "What happens?\n", + "* Python creates the object 4 \n", + "* Everything in Python is an object, this object is stored somewhere in memory. \n", + "* Python binds a name to the object. x is a reference to the object.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "chamo = 4\n", + "id(chamo)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(chamo)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 4\n", + "print(type(a))\n", + "print(id(a))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "st1 = 'string'\n", + "dir(st1)\n", + "st1.upper()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 1 # x is an integer\n", + "print(x, id(x))\n", + "x = 'hello' # now x is a string\n", + "print(x, id(x))\n", + "x = [1, 2, 3] # now x is a list\n", + "print(x, id(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python also allows chained assignment, which makes it possible to assign the same value to several variables simultaneously:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = b = c = 300\n", + "print(a, b, c)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!notepad check_variable_object.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%run check_variable_object.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Everything is an object:\n", + "* Some associated functionality (methods) and metadata (attributes). \n", + "* These methods and attributes are accessed via the dot(.) syntax.\n", + "* Use `type` to get information on the class\n", + "* Use `dir` to get an overview on the methods\n", + " * Many of the names in the list start and end with two underscores (dunder), like `__add__`. These are all associated with methods and pieces of data used internally by the Python interpreter. \n", + " * The remaining entries in the list are all user-level methods. \n", + "* Use `id`\n", + " * an integer (or long integer) _which is guaranteed to be unique and constant for this object during its lifetime._ (Python Standard Library - Built-in Functions) A unique number. Nothing more, and nothing less.\n", + " * in cpython implementation, it actually is the memory address of the corresponding C object." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 1 # x is an integer\n", + "y = 15\n", + "print(x)\n", + "print(x, id(x))\n", + "print(type(x))\n", + "print(dir(x))\n", + "print(x+y)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = '1' # now x is a string\n", + "y ='15'\n", + "z = 'this is a string'\n", + "print(x)\n", + "print(x, id(x))\n", + "print(type(x))\n", + "print(x+y)\n", + "\n", + "print(dir(z))\n", + "print(z)\n", + "print(z.upper())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = [1, 2, 3] # now x is a list\n", + "print(x)\n", + "print(x, id(x))\n", + "print(type(x))\n", + "print(dir(x))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2, 3]\n", + "print(a)\n", + "b = a\n", + "print(b)\n", + "a.append(6)\n", + "print(a)\n", + "print(b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Mutable vs Immutable\n", + "\n", + "* Immutability: Some of Python’s data types are immutable, which means they can’t be changed after they’re created. This includes `integers`, `floats`, `strings`, and `tuples`. If you try to change the value of an immutable variable, Python actually creates a new object with the new value.\n", + "* Mutable Types: Other data types in Python are mutable, which means they can be changed after they’re created. This includes `lists`, `dictionaries`, and `sets`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Immutable\n", + "num = 5\n", + "print(num)\n", + "print(id(num)) # Let's say this prints: 140703167764848\n", + "num += 1\n", + "print(num)\n", + "print(id(num)) # This will print a different id: 140703167764880\n", + "\n", + "# Mutable\n", + "lst = [1, 2, 3]\n", + "print(lst)\n", + "print(id(lst)) # Let's say this prints: 1856906640576\n", + "lst.append(4)\n", + "print(lst)\n", + "print(id(lst)) # This will print the same id: 1856906640576\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Global and Local Variables\n", + "\n", + "* Variables defined inside a function are local to that function and cannot be accessed outside of it. \n", + "* Variables defined outside all functions are global and can be accessed anywhere in the program.\n", + "\n", + "* Local Variables:\n", + " * A local variable is declared inside a function.\n", + " * It is only accessible within the function where it is declared.\n", + " * Different functions can use the same name for different local variables.\n", + " * They are created when their function is called and destroyed when the function ends.\n", + "\n", + "* Global Variables:\n", + " * A global variable is declared outside all functions.\n", + " * It is accessible throughout the entire program, including within functions (unless a local variable with the same name exists).\n", + " * There can only be one global variable with a given name in a Python program.\n", + " * They are created when their line of code is executed and exist until the program ends." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# This is a global variable\n", + "x = 10\n", + "\n", + "def my_function():\n", + " # This is a local variable\n", + " y = 5\n", + " print(\"Inside the function, x = \", x, \"and y = \", y)\n", + "\n", + "my_function()\n", + "\n", + "# This will print: Inside the function, x = 10 and y = 5\n", + "print(\"Outside the function, x = \", x)\n", + "\n", + "# This will raise a NameError because y is not defined outside the function\n", + "print(\"Outside the function, y = \", y)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dir()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/scripts/MOCK_DATA.csv b/scripts/MOCK_DATA.csv new file mode 100644 index 0000000..c318778 --- /dev/null +++ b/scripts/MOCK_DATA.csv @@ -0,0 +1,1001 @@ +id,first_name,last_name,email,gender,ip_address,date,parts,unit cost +1,Lurette,Rounsefull,lrounsefull0@cbsnews.com,Female,208.52.245.134,4/11/2019,1,1425.64 +2,Peder,Heineking,pheineking1@mac.com,Male,216.60.184.211,5/15/2019,79,2666.57 +3,Haydon,Birdsall,hbirdsall2@spotify.com,Male,161.74.94.92,10/18/2019,27,2377.64 +4,Barbe,Mouse,bmouse3@elegantthemes.com,Female,97.202.107.43,5/16/2019,20,3375.08 +5,Sherwin,Wealthall,swealthall4@whitehouse.gov,Male,155.14.42.127,3/5/2019,77,4147.29 +6,Ase,Pringle,apringle5@sfgate.com,Male,147.34.186.244,10/19/2019,33,4551.61 +7,Sibylla,Weiss,sweiss6@icq.com,Female,196.247.130.201,3/7/2019,21,2154.9 +8,Richy,Dougal,rdougal7@yelp.com,Male,91.176.172.223,12/27/2018,97,3403.75 +9,Kelsey,Ludlamme,kludlamme8@cyberchimps.com,Male,121.112.184.219,5/2/2019,81,4930.75 +10,Fae,Driffe,fdriffe9@friendfeed.com,Female,219.51.51.253,4/7/2019,57,3100.78 +11,Dannye,Sleit,dsleita@independent.co.uk,Female,160.208.93.210,10/4/2019,88,4401.37 +12,Kessia,Gilkes,kgilkesb@w3.org,Female,30.178.57.187,8/26/2019,82,2369.86 +13,Rickie,Persich,rpersichc@mapquest.com,Male,50.235.20.153,9/13/2019,94,4557.41 +14,Margaretta,Shearn,mshearnd@buzzfeed.com,Female,172.102.242.250,3/14/2019,72,2948.22 +15,Malcolm,Winnard,mwinnarde@yale.edu,Male,185.241.158.149,5/15/2019,82,4723.48 +16,Lazarus,Summerlie,lsummerlief@comsenz.com,Male,111.172.107.99,11/8/2019,89,2845.05 +17,Bord,Cato,bcatog@edublogs.org,Male,177.53.70.102,4/2/2019,32,4933.24 +18,Weber,Guslon,wguslonh@go.com,Male,115.2.137.252,12/10/2018,94,4348.69 +19,Stearne,MacPadene,smacpadenei@pbs.org,Male,35.83.181.137,8/4/2019,82,4950.67 +20,Bekki,Remirez,bremirezj@arstechnica.com,Female,12.111.119.238,2/17/2019,62,1510.53 +21,Desiri,Gaskins,dgaskinsk@prlog.org,Female,43.30.140.105,9/8/2019,64,4641.51 +22,Mata,Beaten,mbeatenl@constantcontact.com,Male,13.90.195.102,4/6/2019,84,1942.72 +23,Mattias,Bullas,mbullasm@fastcompany.com,Male,37.242.45.155,7/21/2019,95,3321.2 +24,Sloan,Graveson,sgravesonn@mozilla.com,Male,124.94.155.193,9/28/2019,7,1786.92 +25,Isak,Juste,ijusteo@google.ru,Male,249.233.28.164,8/18/2019,34,1682.19 +26,Teri,Thomann,tthomannp@wp.com,Female,168.237.145.237,11/16/2019,18,4480.64 +27,Rhoda,Gotcher,rgotcherq@businessinsider.com,Female,23.141.180.40,4/1/2019,19,4514.47 +28,Helen-elizabeth,McEniry,hmceniryr@oakley.com,Female,43.143.23.204,12/14/2018,40,4146.98 +29,Aguie,Brecknall,abrecknalls@nifty.com,Male,69.49.176.116,1/19/2019,96,4720.87 +30,Wildon,Keenlyside,wkeenlysidet@blogtalkradio.com,Male,245.109.45.71,3/26/2019,22,1835.57 +31,Ynez,Lots,ylotsu@abc.net.au,Female,172.185.2.14,7/17/2019,68,4872.13 +32,Norman,Worgen,nworgenv@constantcontact.com,Male,143.221.2.185,3/17/2019,29,4768.51 +33,Ker,Bown,kbownw@bandcamp.com,Male,30.5.53.61,6/14/2019,22,3091.25 +34,Ivy,Nibloe,inibloex@noaa.gov,Female,121.242.246.184,7/31/2019,15,4048.07 +35,Coop,Waiting,cwaitingy@prlog.org,Male,215.155.212.35,1/31/2019,59,1388.34 +36,Philipa,Bigglestone,pbigglestonez@networkadvertising.org,Female,235.113.203.193,1/11/2019,49,2571.05 +37,Konstantine,Reavell,kreavell10@pcworld.com,Male,212.115.157.70,1/15/2019,32,1521.5 +38,Neddie,Peckham,npeckham11@shareasale.com,Male,165.199.0.54,11/10/2019,4,4159.67 +39,Veronique,Crocetti,vcrocetti12@bravesites.com,Female,155.94.241.75,11/27/2019,70,1682.83 +40,Stanford,Folk,sfolk13@walmart.com,Male,115.78.90.21,8/20/2019,21,1049.63 +41,Tamera,Bacchus,tbacchus14@techcrunch.com,Female,125.75.125.6,2/3/2019,44,3804.48 +42,Andromache,Hakonsson,ahakonsson15@ft.com,Female,216.82.36.186,8/3/2019,38,3643.39 +43,Elnora,Amos,eamos16@domainmarket.com,Female,233.33.105.19,11/12/2019,97,1234.57 +44,Andrus,Hegge,ahegge17@arstechnica.com,Male,48.49.214.246,9/21/2019,79,4728.49 +45,Grady,Rodell,grodell18@ox.ac.uk,Male,69.64.12.243,4/22/2019,64,3514.69 +46,Maryann,Shaddick,mshaddick19@boston.com,Female,145.192.46.176,8/7/2019,43,1944.22 +47,Gaelan,Kirtley,gkirtley1a@topsy.com,Male,145.162.10.133,9/14/2019,39,2598.76 +48,Denver,Kennicott,dkennicott1b@amazon.com,Male,179.116.133.53,12/18/2018,10,2243.1 +49,Bordy,Saw,bsaw1c@cmu.edu,Male,6.22.237.36,1/27/2019,80,2196.95 +50,Gwenette,Iston,giston1d@multiply.com,Female,211.116.16.113,3/29/2019,34,2230.26 +51,Hedvig,Simmers,hsimmers1e@uol.com.br,Female,155.181.252.255,8/23/2019,7,3711.71 +52,Jannel,Sarre,jsarre1f@tuttocitta.it,Female,127.187.194.109,6/4/2019,82,2641.84 +53,Rusty,Saffill,rsaffill1g@mozilla.com,Male,152.175.79.114,3/24/2019,63,4482.27 +54,Shelden,Brandin,sbrandin1h@jugem.jp,Male,218.156.254.18,9/29/2019,12,1487.3 +55,Rusty,Dumbare,rdumbare1i@purevolume.com,Male,49.252.90.82,3/2/2019,26,4880.92 +56,Agace,Davidovitz,adavidovitz1j@mtv.com,Female,187.52.194.143,4/21/2019,59,4803.16 +57,Ross,McGarva,rmcgarva1k@upenn.edu,Male,41.191.56.78,8/23/2019,97,4860.07 +58,Kayne,Maruszewski,kmaruszewski1l@stanford.edu,Male,41.228.104.199,7/18/2019,23,1358.8 +59,Stavros,Comar,scomar1m@google.ru,Male,5.91.47.215,6/20/2019,66,1423.4 +60,Ruperto,Proudlock,rproudlock1n@hostgator.com,Male,105.156.116.198,1/20/2019,28,4631.21 +61,Milka,Marvel,mmarvel1o@devhub.com,Female,9.251.162.16,5/26/2019,80,3446.13 +62,Zared,Pallesen,zpallesen1p@ted.com,Male,246.159.163.241,6/13/2019,25,2949.72 +63,Sharona,Muscat,smuscat1q@youtube.com,Female,192.207.68.239,1/17/2019,53,4522.67 +64,Annabella,Persitt,apersitt1r@china.com.cn,Female,5.217.19.64,7/26/2019,52,2113.55 +65,Tawsha,Constantine,tconstantine1s@4shared.com,Female,6.89.103.116,6/15/2019,38,2727.92 +66,Leonard,Pavlasek,lpavlasek1t@theglobeandmail.com,Male,42.64.175.217,2/16/2019,85,2694.45 +67,Kalvin,Caudle,kcaudle1u@baidu.com,Male,193.11.181.80,4/23/2019,18,2549.05 +68,Jessica,Cumbridge,jcumbridge1v@hugedomains.com,Female,238.81.101.205,12/18/2018,80,2877.37 +69,Iorgo,Hampshaw,ihampshaw1w@youtu.be,Male,35.99.25.88,4/15/2019,100,4485.79 +70,Sherlocke,Kerswell,skerswell1x@zdnet.com,Male,201.53.40.240,9/5/2019,6,4147.46 +71,Rikki,Blodg,rblodg1y@admin.ch,Male,233.254.145.162,9/20/2019,41,4950.16 +72,Leoine,MacInnes,lmacinnes1z@joomla.org,Female,76.138.109.238,7/23/2019,45,3870.58 +73,Leicester,O'Haire,lohaire20@nba.com,Male,51.179.242.230,8/7/2019,23,2243.91 +74,Bennett,Jankowski,bjankowski21@jugem.jp,Male,248.133.185.229,6/4/2019,67,2448.41 +75,Josias,Wardingley,jwardingley22@bigcartel.com,Male,128.111.46.189,8/22/2019,2,4954.97 +76,Farrand,Edon,fedon23@networkadvertising.org,Female,181.161.32.177,3/30/2019,95,3728.89 +77,Tirrell,Daugherty,tdaugherty24@miitbeian.gov.cn,Male,202.140.213.72,11/9/2019,36,3436.25 +78,Celeste,Odby,codby25@answers.com,Female,152.36.106.124,6/16/2019,12,1327.35 +79,Jory,Roomes,jroomes26@usa.gov,Male,124.197.56.246,7/2/2019,62,3910.3 +80,Saudra,Woodham,swoodham27@smh.com.au,Female,109.122.138.13,4/17/2019,22,3553.65 +81,Renaldo,Calow,rcalow28@cloudflare.com,Male,108.38.150.172,12/5/2018,98,3790.92 +82,Chrissie,Wynch,cwynch29@de.vu,Female,113.58.215.184,5/25/2019,54,3925.41 +83,Boris,Ilyas,bilyas2a@webeden.co.uk,Male,98.65.148.122,1/26/2019,4,2722.03 +84,Zach,McReynolds,zmcreynolds2b@about.com,Male,169.251.18.46,3/25/2019,33,2238.47 +85,Pip,Puttan,pputtan2c@multiply.com,Male,6.160.216.170,10/23/2019,20,1502.59 +86,Lenore,Shafto,lshafto2d@globo.com,Female,144.169.11.70,1/17/2019,5,2162.94 +87,Maggie,Dryden,mdryden2e@cpanel.net,Female,203.155.129.86,3/12/2019,76,3017.41 +88,Madeleine,Alflatt,malflatt2f@spotify.com,Female,38.43.105.230,6/3/2019,70,4950.07 +89,Jojo,Niblock,jniblock2g@usgs.gov,Female,241.182.83.206,6/20/2019,98,3224.06 +90,Chan,Lebbern,clebbern2h@about.me,Male,129.233.179.181,5/31/2019,14,3407.91 +91,Juanita,O'Neil,joneil2i@sina.com.cn,Female,196.212.243.128,4/21/2019,4,1238.45 +92,Albina,Nestoruk,anestoruk2j@rakuten.co.jp,Female,173.60.28.232,11/25/2019,2,3850.73 +93,Gerrard,Lowrance,glowrance2k@huffingtonpost.com,Male,65.158.65.49,5/30/2019,56,2495.36 +94,Enrique,Borrel,eborrel2l@slashdot.org,Male,234.74.144.119,11/11/2019,89,1230.11 +95,Sheppard,Millward,smillward2m@plala.or.jp,Male,30.207.143.30,9/13/2019,14,4656.55 +96,Karna,Zisneros,kzisneros2n@comcast.net,Female,207.85.89.67,4/30/2019,40,1087.58 +97,Mohandas,Abbitt,mabbitt2o@cocolog-nifty.com,Male,157.202.50.94,2/2/2019,18,4141.99 +98,Alena,McVee,amcvee2p@so-net.ne.jp,Female,35.120.251.203,9/28/2019,15,4863.32 +99,Lanita,Sommerlin,lsommerlin2q@mozilla.com,Female,63.103.18.73,2/17/2019,69,4424.01 +100,Celine,Huddlestone,chuddlestone2r@ask.com,Female,207.219.182.50,6/24/2019,92,4185.16 +101,Jan,Vorley,jvorley2s@bbc.co.uk,Male,24.122.66.16,10/7/2019,88,4856.43 +102,Gordon,Burness,gburness2t@wired.com,Male,251.54.167.76,7/28/2019,77,1249.9 +103,Doris,Dey,ddey2u@youtube.com,Female,105.167.122.156,5/18/2019,95,2541.59 +104,Colby,Ashurst,cashurst2v@wix.com,Male,93.195.66.138,9/14/2019,49,3987.84 +105,Phyllida,Brookson,pbrookson2w@apple.com,Female,15.169.21.114,4/8/2019,10,4565.43 +106,Jeramie,Crasswell,jcrasswell2x@posterous.com,Male,205.238.4.171,7/19/2019,10,1042.23 +107,Lynsey,Plum,lplum2y@blogtalkradio.com,Female,184.41.245.159,11/15/2019,27,1913.04 +108,Dorella,Dulanty,ddulanty2z@discuz.net,Female,29.143.190.208,3/15/2019,71,1939.76 +109,Ruthi,Rishworth,rrishworth30@liveinternet.ru,Female,107.240.252.87,11/14/2019,25,4378.32 +110,Petrina,Featherstonehaugh,pfeatherstonehaugh31@umich.edu,Female,139.60.87.163,5/3/2019,86,2273.95 +111,Karla,Dechelle,kdechelle32@google.cn,Female,147.220.216.41,11/22/2019,79,2940.0 +112,Joshia,Fishlock,jfishlock33@booking.com,Male,158.103.241.179,7/8/2019,68,3644.03 +113,Junia,Maryman,jmaryman34@jigsy.com,Female,216.105.242.205,5/15/2019,97,2466.85 +114,Mabelle,Warmisham,mwarmisham35@mysql.com,Female,246.108.73.60,2/5/2019,43,1904.03 +115,Phaidra,Fleet,pfleet36@1und1.de,Female,83.157.253.208,2/13/2019,21,1765.81 +116,Flo,Mardlin,fmardlin37@unicef.org,Female,31.252.115.185,12/11/2018,14,3875.57 +117,Crin,Aspinall,caspinall38@pen.io,Female,152.151.189.190,9/21/2019,76,3615.12 +118,Lorrie,Carnaman,lcarnaman39@sina.com.cn,Male,182.12.111.81,2/1/2019,66,1537.87 +119,Barnabas,Denslow,bdenslow3a@dell.com,Male,109.193.202.177,10/17/2019,71,1352.18 +120,Bennett,Saffen,bsaffen3b@cloudflare.com,Male,180.151.92.220,3/8/2019,19,3352.34 +121,Jonell,Menauteau,jmenauteau3c@yellowbook.com,Female,49.115.246.26,9/25/2019,26,4823.26 +122,Alicia,Jakubovicz,ajakubovicz3d@nps.gov,Female,239.158.188.213,3/27/2019,32,1051.47 +123,Nikolai,Raselles,nraselles3e@histats.com,Male,94.104.99.187,5/13/2019,43,1043.08 +124,Nikolaos,Loder,nloder3f@google.it,Male,19.118.58.253,3/17/2019,73,1254.57 +125,Sheffield,Muncey,smuncey3g@elpais.com,Male,77.244.5.146,7/28/2019,67,1704.55 +126,Marni,Cowin,mcowin3h@google.com.br,Female,61.232.91.222,7/8/2019,50,1367.66 +127,Storm,Kennedy,skennedy3i@wikispaces.com,Female,191.12.223.90,7/31/2019,77,3871.16 +128,Trent,Gutierrez,tgutierrez3j@sourceforge.net,Male,113.242.15.190,8/10/2019,81,4352.61 +129,Dodi,Tiller,dtiller3k@dailymail.co.uk,Female,0.240.169.55,11/21/2019,35,4607.1 +130,Vivie,Sture,vsture3l@yelp.com,Female,46.11.195.152,10/27/2019,82,2166.72 +131,Nerissa,Giddins,ngiddins3m@whitehouse.gov,Female,25.100.68.103,3/11/2019,81,4326.19 +132,Emalee,Huckerby,ehuckerby3n@europa.eu,Female,249.239.20.180,2/14/2019,15,1607.1 +133,Cesare,Deave,cdeave3o@google.es,Male,215.226.177.3,12/16/2018,64,3602.38 +134,Britni,Neagle,bneagle3p@is.gd,Female,238.87.102.252,5/1/2019,95,3254.36 +135,Andrej,Gandrich,agandrich3q@addtoany.com,Male,122.104.65.90,8/14/2019,41,3220.23 +136,Cody,Worssam,cworssam3r@chronoengine.com,Male,221.63.128.0,11/11/2019,7,4570.98 +137,Mord,Bradford,mbradford3s@utexas.edu,Male,168.172.15.29,2/8/2019,52,2842.69 +138,Madeline,Golledge,mgolledge3t@japanpost.jp,Female,180.54.218.245,8/1/2019,31,2426.19 +139,Clarie,Tunn,ctunn3u@sun.com,Female,170.49.242.95,3/30/2019,6,2375.77 +140,Seana,Gatherell,sgatherell3v@myspace.com,Female,229.46.37.246,7/1/2019,83,3626.95 +141,Veronica,Fielder,vfielder3w@hugedomains.com,Female,211.136.81.248,10/5/2019,76,4578.69 +142,Kris,Searby,ksearby3x@constantcontact.com,Male,75.40.234.246,5/14/2019,79,3491.43 +143,Dorita,Henze,dhenze3y@mozilla.com,Female,19.91.34.111,3/5/2019,23,3869.59 +144,Ada,Sydall,asydall3z@netlog.com,Female,63.122.73.224,9/28/2019,5,3118.74 +145,Josias,Vanichkov,jvanichkov40@amazon.co.jp,Male,111.18.27.20,3/11/2019,82,1807.86 +146,Payton,Chesney,pchesney41@forbes.com,Male,253.128.22.165,6/1/2019,93,1101.65 +147,Arabele,Marcome,amarcome42@bbb.org,Female,25.78.95.237,8/25/2019,20,3268.49 +148,Dick,Egre,degre43@discovery.com,Male,136.113.116.45,3/3/2019,35,3221.24 +149,Charleen,Eckh,ceckh44@shareasale.com,Female,251.215.112.50,6/30/2019,47,3524.18 +150,Minne,Lawfull,mlawfull45@shinystat.com,Female,15.159.68.230,7/31/2019,56,3915.18 +151,Timi,Pelchat,tpelchat46@issuu.com,Female,218.157.149.25,11/17/2019,53,1224.92 +152,Gabrila,Goosnell,ggoosnell47@hugedomains.com,Female,79.133.249.98,12/28/2018,30,4687.86 +153,Casie,Brimm,cbrimm48@4shared.com,Female,252.229.161.4,2/15/2019,98,1455.37 +154,Leeland,Dewi,ldewi49@multiply.com,Male,81.68.121.138,3/25/2019,63,4518.04 +155,Pascal,Garred,pgarred4a@facebook.com,Male,223.70.91.166,5/3/2019,71,2996.67 +156,Lazaro,Manktelow,lmanktelow4b@wikia.com,Male,185.80.62.190,7/21/2019,82,1094.16 +157,Sandi,Montgomery,smontgomery4c@java.com,Female,190.222.21.13,11/17/2019,21,2832.31 +158,Valentine,Jimes,vjimes4d@about.com,Female,74.198.243.183,5/1/2019,53,1644.56 +159,Erika,Ferraresi,eferraresi4e@google.fr,Female,54.193.54.25,5/19/2019,21,4436.52 +160,Nerta,Zaczek,nzaczek4f@spotify.com,Female,108.17.93.214,2/22/2019,81,2156.82 +161,Lucita,Harte,lharte4g@nasa.gov,Female,193.242.177.185,12/21/2018,64,3544.36 +162,Jedidiah,Danielsohn,jdanielsohn4h@accuweather.com,Male,245.98.253.52,9/16/2019,1,2115.11 +163,Lorettalorna,Quarrie,lquarrie4i@fc2.com,Female,76.173.212.93,6/13/2019,4,1466.75 +164,Rich,Tryhorn,rtryhorn4j@moonfruit.com,Male,143.167.201.182,10/7/2019,1,1661.04 +165,Gardie,Karlqvist,gkarlqvist4k@so-net.ne.jp,Male,249.11.192.35,8/12/2019,6,3746.95 +166,Xylia,Penna,xpenna4l@dailymotion.com,Female,180.58.51.110,11/28/2019,61,3441.57 +167,Axel,Renackowna,arenackowna4m@tripod.com,Male,146.67.140.217,3/7/2019,78,3550.93 +168,Chen,Fulton,cfulton4n@columbia.edu,Male,146.169.34.152,4/2/2019,74,2383.26 +169,Alon,Cufley,acufley4o@photobucket.com,Male,125.231.215.140,4/16/2019,65,1732.78 +170,Koo,Gumm,kgumm4p@php.net,Female,243.153.77.38,3/21/2019,48,3721.4 +171,Korey,Weatherdon,kweatherdon4q@blogger.com,Male,240.168.248.218,3/12/2019,77,3795.59 +172,Lena,Stannus,lstannus4r@lulu.com,Female,109.85.91.216,12/5/2018,46,2634.33 +173,Elijah,Westney,ewestney4s@noaa.gov,Male,158.146.220.98,8/7/2019,27,4530.75 +174,Eachelle,Schiefersten,eschiefersten4t@symantec.com,Female,54.128.102.166,9/15/2019,87,2940.88 +175,Georgeanne,Gotthard.sf,ggotthardsf4u@geocities.com,Female,86.43.67.105,1/9/2019,37,2319.01 +176,Frazier,Feldbrin,ffeldbrin4v@joomla.org,Male,184.234.191.22,10/14/2019,23,4596.74 +177,Bancroft,Alvarez,balvarez4w@cisco.com,Male,226.3.76.213,7/28/2019,21,3413.13 +178,Ricky,Lyles,rlyles4x@abc.net.au,Male,156.11.73.17,11/28/2019,6,1870.07 +179,Lorettalorna,Bomfield,lbomfield4y@virginia.edu,Female,37.210.36.178,6/20/2019,66,1127.34 +180,Catrina,Ruse,cruse4z@exblog.jp,Female,81.216.141.90,12/5/2018,34,2485.16 +181,Loleta,Pawels,lpawels50@merriam-webster.com,Female,176.42.193.141,6/10/2019,84,4221.89 +182,Hedvige,Commings,hcommings51@domainmarket.com,Female,138.3.249.198,1/29/2019,8,3910.06 +183,Dmitri,McCrory,dmccrory52@mit.edu,Male,135.37.103.219,7/28/2019,64,2804.83 +184,Hendrika,Shawyer,hshawyer53@xinhuanet.com,Female,16.30.34.147,2/20/2019,65,1706.29 +185,Lorilee,Dunlop,ldunlop54@ed.gov,Female,111.241.90.104,5/10/2019,75,4965.63 +186,Jerad,Faunch,jfaunch55@blogtalkradio.com,Male,139.35.31.167,3/18/2019,93,4404.83 +187,Gualterio,Eary,geary56@illinois.edu,Male,59.170.22.192,10/2/2019,49,3569.07 +188,Barby,Jikylls,bjikylls57@deviantart.com,Female,22.44.213.16,4/7/2019,75,4908.44 +189,Jabez,Mathiot,jmathiot58@w3.org,Male,93.194.63.80,5/5/2019,64,2744.04 +190,Worthy,Edland,wedland59@barnesandnoble.com,Male,4.66.208.56,11/12/2019,51,4272.28 +191,Doralyn,Braunstein,dbraunstein5a@youtube.com,Female,68.179.11.250,3/1/2019,37,3713.51 +192,Mallory,Eyres,meyres5b@google.com.hk,Female,222.214.3.63,7/22/2019,57,3522.06 +193,Louie,Dunkley,ldunkley5c@cdc.gov,Male,154.18.175.128,7/10/2019,51,2901.79 +194,Elbert,Kenvin,ekenvin5d@ftc.gov,Male,206.116.235.21,2/23/2019,75,4198.55 +195,Sean,Hankin,shankin5e@virginia.edu,Female,32.170.127.155,7/7/2019,76,4284.24 +196,Tamiko,O'Fogarty,tofogarty5f@comsenz.com,Female,249.124.65.230,2/27/2019,97,1816.59 +197,Dana,Caress,dcaress5g@bandcamp.com,Female,63.163.104.0,6/11/2019,70,4546.28 +198,Starla,Bicksteth,sbicksteth5h@deviantart.com,Female,93.41.109.63,3/6/2019,75,1536.56 +199,Olly,Chalmers,ochalmers5i@nature.com,Male,206.17.239.226,6/1/2019,99,2617.06 +200,Ermengarde,Laible,elaible5j@alibaba.com,Female,232.255.191.98,4/14/2019,7,2122.32 +201,Melloney,Stalf,mstalf5k@constantcontact.com,Female,254.159.238.133,3/11/2019,17,1829.95 +202,Aggy,Sandry,asandry5l@chicagotribune.com,Female,88.162.78.17,4/23/2019,82,1228.42 +203,Tuesday,Brunning,tbrunning5m@microsoft.com,Female,24.185.56.166,12/2/2018,25,2420.45 +204,Graehme,Marconi,gmarconi5n@forbes.com,Male,134.166.130.121,1/15/2019,29,3650.99 +205,Susi,Casillas,scasillas5o@jimdo.com,Female,130.75.119.191,4/6/2019,26,3164.59 +206,Bunny,Bollands,bbollands5p@privacy.gov.au,Female,73.155.139.92,7/20/2019,94,1459.89 +207,Corrine,Bythway,cbythway5q@ucsd.edu,Female,152.20.150.152,12/30/2018,74,1997.35 +208,Dannye,Adshede,dadshede5r@netlog.com,Female,210.46.12.79,8/9/2019,28,2915.74 +209,Gerald,Waiton,gwaiton5s@1und1.de,Male,47.243.251.9,5/18/2019,66,3698.92 +210,Belia,Hatherley,bhatherley5t@dot.gov,Female,3.253.140.62,10/2/2019,54,1089.69 +211,Terrell,Witherup,twitherup5u@ibm.com,Male,125.43.97.27,5/20/2019,97,3331.73 +212,Vic,Kliner,vkliner5v@cargocollective.com,Male,91.117.26.173,1/22/2019,12,1020.32 +213,Mayor,Drover,mdrover5w@comsenz.com,Male,165.45.244.175,9/18/2019,83,1282.01 +214,Didi,Kanwell,dkanwell5x@mysql.com,Female,249.71.28.189,1/25/2019,39,3401.56 +215,Lothario,Heyworth,lheyworth5y@patch.com,Male,204.254.193.144,6/27/2019,14,2392.22 +216,Adi,Bertome,abertome5z@washingtonpost.com,Female,247.98.53.39,3/19/2019,67,1188.17 +217,Zebadiah,Kryzhov,zkryzhov60@columbia.edu,Male,126.42.169.163,11/28/2019,85,2177.47 +218,Putnam,Wallworke,pwallworke61@sourceforge.net,Male,54.55.143.193,4/5/2019,72,4454.14 +219,Amery,Hitchens,ahitchens62@harvard.edu,Male,48.224.217.2,6/13/2019,64,3615.62 +220,Joana,Davitti,jdavitti63@ebay.co.uk,Female,62.165.254.131,3/4/2019,80,3629.81 +221,Kathleen,Tuer,ktuer64@biblegateway.com,Female,5.70.130.77,3/11/2019,13,1608.46 +222,Renaldo,Campbell-Dunlop,rcampbelldunlop65@skyrock.com,Male,26.131.233.63,12/29/2018,50,3202.62 +223,Titus,Ault,tault66@elpais.com,Male,165.158.147.201,7/2/2019,84,4835.57 +224,Gamaliel,Kilfedder,gkilfedder67@hostgator.com,Male,84.168.17.247,12/23/2018,9,4909.15 +225,Stewart,Boylund,sboylund68@liveinternet.ru,Male,225.118.153.204,6/28/2019,11,3319.59 +226,Jo,Kitchiner,jkitchiner69@skype.com,Female,59.124.146.200,2/6/2019,67,1600.09 +227,Elvis,Fosken,efosken6a@pcworld.com,Male,205.87.85.15,9/9/2019,6,3922.34 +228,Cammie,Danson,cdanson6b@narod.ru,Female,56.105.230.103,2/13/2019,65,1885.94 +229,Fabiano,Garaghan,fgaraghan6c@ezinearticles.com,Male,78.123.49.176,7/20/2019,51,3114.09 +230,Ailina,Givens,agivens6d@cbsnews.com,Female,60.180.138.180,7/5/2019,89,4535.53 +231,Armstrong,Dunkerly,adunkerly6e@independent.co.uk,Male,90.216.21.184,2/26/2019,14,1990.77 +232,Catharine,Matityahu,cmatityahu6f@alibaba.com,Female,57.63.241.97,3/10/2019,95,3363.25 +233,Sile,Glassman,sglassman6g@google.com.au,Female,69.8.60.158,9/2/2019,51,1557.41 +234,Benyamin,Scantleberry,bscantleberry6h@constantcontact.com,Male,130.141.87.136,2/28/2019,73,2950.29 +235,Mendel,Whether,mwhether6i@google.com,Male,241.33.68.87,8/7/2019,82,1090.67 +236,Marcos,Everitt,meveritt6j@yelp.com,Male,233.19.226.38,3/31/2019,37,1052.69 +237,Missie,Eastment,meastment6k@statcounter.com,Female,70.194.212.197,12/20/2018,78,4585.45 +238,Tim,Godfray,tgodfray6l@ucla.edu,Male,200.47.142.40,2/15/2019,5,1682.26 +239,Aguste,Pinney,apinney6m@posterous.com,Male,230.75.22.90,5/30/2019,41,2301.61 +240,Matthias,Francesconi,mfrancesconi6n@biglobe.ne.jp,Male,105.93.88.19,12/8/2018,67,4462.69 +241,Donna,Luckes,dluckes6o@over-blog.com,Female,213.3.126.62,7/2/2019,16,2107.3 +242,Nathanial,Spurden,nspurden6p@microsoft.com,Male,230.177.142.225,3/28/2019,78,1795.33 +243,Stanford,Keets,skeets6q@sbwire.com,Male,192.100.251.103,5/30/2019,60,1912.38 +244,Joly,Mont,jmont6r@technorati.com,Female,14.164.142.106,4/29/2019,23,4036.1 +245,Tyrus,Reasce,treasce6s@ibm.com,Male,12.231.0.1,12/15/2018,60,2707.42 +246,Lee,MacKeogh,lmackeogh6t@woothemes.com,Male,182.53.212.225,12/26/2018,49,1052.96 +247,Valeria,Le Hucquet,vlehucquet6u@cisco.com,Female,155.224.213.71,1/8/2019,67,1292.01 +248,Jillana,Breddy,jbreddy6v@fc2.com,Female,97.42.41.207,1/27/2019,79,2603.53 +249,Alic,Bergeau,abergeau6w@fema.gov,Male,247.140.30.46,10/2/2019,61,1209.85 +250,Cairistiona,Meredith,cmeredith6x@hhs.gov,Female,70.70.142.81,4/12/2019,17,3084.34 +251,Baird,Hollerin,bhollerin6y@issuu.com,Male,22.99.57.132,9/29/2019,50,2427.97 +252,Leonard,Caldecot,lcaldecot6z@vistaprint.com,Male,181.234.61.189,1/17/2019,4,4714.6 +253,Frants,Cochrane,fcochrane70@usgs.gov,Male,243.153.97.44,10/25/2019,7,2131.81 +254,Gertrud,Enticknap,genticknap71@csmonitor.com,Female,252.82.226.210,5/21/2019,11,2407.13 +255,Sullivan,Chattington,schattington72@pinterest.com,Male,155.193.236.102,1/10/2019,82,4204.53 +256,Taite,Sighard,tsighard73@dell.com,Male,201.139.42.108,7/13/2019,40,3983.56 +257,Rozina,Stannas,rstannas74@eventbrite.com,Female,175.179.96.178,1/6/2019,67,4645.75 +258,Sanson,Trevon,strevon75@patch.com,Male,40.224.2.112,5/22/2019,69,4383.12 +259,Torrey,Gilhoolie,tgilhoolie76@cdc.gov,Male,210.149.121.27,6/3/2019,44,2232.38 +260,Lauri,Lackeye,llackeye77@ted.com,Female,104.17.18.94,6/14/2019,21,3534.19 +261,Rica,Vineall,rvineall78@craigslist.org,Female,164.92.184.86,7/29/2019,67,2725.57 +262,Dane,Youell,dyouell79@flavors.me,Male,33.252.240.196,12/2/2018,78,2150.98 +263,Tricia,Singyard,tsingyard7a@facebook.com,Female,117.214.88.252,3/29/2019,46,1692.77 +264,Adrea,Rubinsohn,arubinsohn7b@sakura.ne.jp,Female,27.195.5.14,9/8/2019,72,3230.72 +265,Dotti,Brader,dbrader7c@addthis.com,Female,13.85.47.30,12/26/2018,100,2732.26 +266,Gabi,Fackrell,gfackrell7d@scientificamerican.com,Female,58.145.63.14,8/11/2019,95,1238.44 +267,Price,Moger,pmoger7e@deviantart.com,Male,19.116.110.91,8/15/2019,23,1473.89 +268,Jayme,Wakelin,jwakelin7f@cisco.com,Male,26.252.180.229,10/5/2019,56,4366.22 +269,Maurizio,Dunsmuir,mdunsmuir7g@clickbank.net,Male,120.22.85.145,11/3/2019,31,1877.99 +270,Carlos,Edmands,cedmands7h@redcross.org,Male,20.67.51.110,6/14/2019,79,1238.13 +271,Johan,McGinly,jmcginly7i@amazonaws.com,Male,12.205.191.101,3/20/2019,49,4095.82 +272,Albrecht,Rotchell,arotchell7j@google.es,Male,60.170.217.205,9/28/2019,92,2894.61 +273,Eli,De Lacey,edelacey7k@goo.ne.jp,Male,55.7.194.20,11/10/2019,78,4537.32 +274,Sutherlan,Mill,smill7l@i2i.jp,Male,130.65.164.97,1/16/2019,31,1681.32 +275,Nathalie,Willder,nwillder7m@usnews.com,Female,69.170.87.110,5/5/2019,1,1024.53 +276,Rem,Iczokvitz,riczokvitz7n@harvard.edu,Male,7.203.57.167,4/4/2019,39,3672.82 +277,Lorens,Denyukin,ldenyukin7o@uol.com.br,Male,203.70.155.205,2/14/2019,41,3600.8 +278,Mag,Pigden,mpigden7p@psu.edu,Female,239.194.157.251,6/14/2019,47,3599.97 +279,Petronia,Carvill,pcarvill7q@apple.com,Female,151.29.121.135,8/16/2019,68,4879.68 +280,Felicity,Capewell,fcapewell7r@patch.com,Female,176.136.185.249,9/14/2019,75,2448.16 +281,Hartwell,Zellner,hzellner7s@wordpress.org,Male,210.182.89.221,5/26/2019,68,4758.87 +282,Marcela,Geggie,mgeggie7t@samsung.com,Female,118.65.180.139,2/10/2019,15,4222.62 +283,Keith,Loxston,kloxston7u@etsy.com,Male,30.75.222.61,3/31/2019,90,1964.35 +284,Mattheus,Guinn,mguinn7v@virginia.edu,Male,157.141.233.64,2/5/2019,20,1509.77 +285,Cristy,Van den Bosch,cvandenbosch7w@yandex.ru,Female,106.186.220.48,2/10/2019,57,2650.92 +286,Pansie,Pull,ppull7x@tripod.com,Female,133.223.218.112,3/12/2019,16,1844.52 +287,Hyacinthie,Bools,hbools7y@phpbb.com,Female,6.136.111.144,6/24/2019,88,3753.3 +288,Cosimo,Humphris,chumphris7z@ftc.gov,Male,42.252.197.80,1/8/2019,5,1335.74 +289,Raquela,Ledbetter,rledbetter80@imdb.com,Female,25.84.71.62,12/13/2018,39,4474.51 +290,Domingo,McKelvey,dmckelvey81@globo.com,Male,139.34.201.250,9/6/2019,40,4039.82 +291,Britta,Grzesiak,bgrzesiak82@google.fr,Female,254.24.80.245,7/7/2019,73,1052.79 +292,Palmer,Gliddon,pgliddon83@example.com,Male,60.248.224.227,12/27/2018,33,4273.36 +293,Millard,Feore,mfeore84@mlb.com,Male,129.50.148.247,4/3/2019,60,2015.88 +294,Lanie,Blasgen,lblasgen85@ocn.ne.jp,Female,124.254.122.231,10/6/2019,35,1212.04 +295,Sherry,Jamrowicz,sjamrowicz86@newyorker.com,Female,8.187.192.111,6/12/2019,57,2819.04 +296,Payton,Loxton,ploxton87@ted.com,Male,20.185.112.233,5/16/2019,9,4976.7 +297,Anderea,Blandford,ablandford88@tinypic.com,Female,30.186.15.181,2/3/2019,54,3962.4 +298,Adele,Goldstein,agoldstein89@csmonitor.com,Female,101.24.151.157,8/29/2019,47,1300.26 +299,Christiana,Kybbye,ckybbye8a@soup.io,Female,164.124.255.193,8/24/2019,35,4524.75 +300,Bettine,Bryden,bbryden8b@tinyurl.com,Female,71.23.174.26,4/21/2019,27,3413.85 +301,Halsey,Deeble,hdeeble8c@gizmodo.com,Male,17.234.31.127,8/30/2019,74,2872.84 +302,Peggi,Gallier,pgallier8d@aol.com,Female,34.161.21.167,3/28/2019,26,2530.19 +303,Oby,Lemanu,olemanu8e@skyrock.com,Male,123.215.166.71,10/24/2019,90,2590.72 +304,Kelly,Limbert,klimbert8f@123-reg.co.uk,Male,225.87.194.99,7/15/2019,71,3252.4 +305,Edmon,Pittham,epittham8g@wufoo.com,Male,206.168.11.133,11/1/2019,84,4290.32 +306,Nicola,Hazelby,nhazelby8h@nih.gov,Male,248.203.87.61,8/14/2019,33,4439.66 +307,Norry,Cheesworth,ncheesworth8i@spotify.com,Male,188.191.145.160,9/14/2019,19,3777.37 +308,Madeleine,Colchett,mcolchett8j@goo.ne.jp,Female,49.89.233.117,10/26/2019,97,3215.79 +309,Alyse,Rilston,arilston8k@friendfeed.com,Female,178.80.192.158,4/26/2019,10,3704.99 +310,Aubrey,Rodrigues,arodrigues8l@clickbank.net,Female,110.27.123.138,2/26/2019,82,3312.78 +311,Wade,Fitzgerald,wfitzgerald8m@blogspot.com,Male,83.93.6.27,4/14/2019,18,4200.81 +312,Bar,Aspall,baspall8n@jimdo.com,Male,220.44.202.201,6/14/2019,31,3252.11 +313,Martynne,Jurczik,mjurczik8o@homestead.com,Female,45.95.32.123,4/16/2019,64,3091.17 +314,Rem,Binion,rbinion8p@spiegel.de,Male,194.45.225.156,10/13/2019,32,1460.2 +315,Brocky,Picker,bpicker8q@usda.gov,Male,43.227.235.110,6/26/2019,13,2705.18 +316,Caspar,Frankowski,cfrankowski8r@baidu.com,Male,77.43.200.240,4/9/2019,65,3908.27 +317,Fernanda,Jerman,fjerman8s@qq.com,Female,251.97.23.5,12/2/2018,98,2644.07 +318,Kirbie,Hickford,khickford8t@phoca.cz,Female,222.19.145.98,2/18/2019,75,2101.99 +319,Justen,Simonsson,jsimonsson8u@goodreads.com,Male,50.143.144.122,5/18/2019,23,3668.84 +320,Base,Quainton,bquainton8v@quantcast.com,Male,210.105.216.149,9/25/2019,17,3690.64 +321,Evonne,Biss,ebiss8w@blogspot.com,Female,151.218.87.78,6/20/2019,54,2157.7 +322,Desmund,Naris,dnaris8x@cafepress.com,Male,158.117.9.15,4/8/2019,55,3607.48 +323,Briant,Pulley,bpulley8y@rediff.com,Male,226.108.222.137,7/8/2019,4,2048.56 +324,Neddy,Wannop,nwannop8z@cisco.com,Male,183.31.92.122,8/27/2019,59,3925.77 +325,Trip,Eberst,teberst90@so-net.ne.jp,Male,147.174.43.177,3/9/2019,54,3125.57 +326,Feodor,Ccomini,fccomini91@patch.com,Male,101.243.251.93,9/13/2019,9,1769.13 +327,Lazar,Krinks,lkrinks92@infoseek.co.jp,Male,21.83.214.146,10/20/2019,24,4619.45 +328,Tate,Kedslie,tkedslie93@businesswire.com,Female,141.169.231.230,5/30/2019,49,1552.68 +329,Jessee,Boggon,jboggon94@kickstarter.com,Male,203.194.131.251,11/9/2019,24,1485.03 +330,Doralyn,Durrad,ddurrad95@google.co.jp,Female,240.121.195.82,7/8/2019,86,2176.49 +331,Jesse,Thynn,jthynn96@usnews.com,Male,199.184.188.96,12/29/2018,33,2828.35 +332,Emlyn,Redparth,eredparth97@naver.com,Female,23.58.23.190,9/1/2019,55,1076.4 +333,Gusella,Dimsdale,gdimsdale98@fema.gov,Female,126.167.16.255,5/27/2019,98,3454.61 +334,Dunn,Rentalll,drentalll99@japanpost.jp,Male,222.206.129.103,7/25/2019,85,1144.19 +335,Hyacintha,Coltan,hcoltan9a@creativecommons.org,Female,109.55.166.241,4/4/2019,87,1786.85 +336,Hyacinthe,Matyatin,hmatyatin9b@1und1.de,Female,110.109.78.10,7/3/2019,93,1671.35 +337,Adrian,Sollowaye,asollowaye9c@sitemeter.com,Male,33.129.1.150,11/4/2019,88,3482.58 +338,Arlina,Merriment,amerriment9d@census.gov,Female,236.177.140.9,11/17/2019,95,1747.4 +339,Anne-marie,Fakes,afakes9e@wix.com,Female,61.10.72.218,12/17/2018,67,1347.14 +340,Chico,Curgenuer,ccurgenuer9f@jugem.jp,Male,70.238.241.201,5/12/2019,90,4320.01 +341,Lonee,Roggerone,lroggerone9g@bizjournals.com,Female,176.243.54.186,4/28/2019,89,3039.36 +342,Kendell,Howett,khowett9h@fema.gov,Male,199.214.110.115,3/29/2019,12,2789.57 +343,Agatha,Dolligon,adolligon9i@canalblog.com,Female,34.170.13.241,12/20/2018,92,4743.08 +344,Ky,Fedder,kfedder9j@blogtalkradio.com,Male,163.0.64.234,6/29/2019,25,3252.69 +345,Wat,Kelsell,wkelsell9k@utexas.edu,Male,214.250.242.115,8/21/2019,70,2043.76 +346,Emyle,MacKean,emackean9l@networksolutions.com,Female,92.255.128.207,6/30/2019,1,3104.96 +347,Jeanette,Uridge,juridge9m@ucoz.com,Female,19.150.66.177,1/5/2019,64,4984.27 +348,Lilia,Vann,lvann9n@google.it,Female,89.252.120.154,10/16/2019,75,2663.58 +349,Cecile,Bromley,cbromley9o@unesco.org,Female,123.37.220.84,7/20/2019,54,2929.23 +350,Laureen,Twiddle,ltwiddle9p@narod.ru,Female,216.255.144.65,10/16/2019,19,1270.83 +351,Judas,de Clerc,jdeclerc9q@123-reg.co.uk,Male,70.252.28.9,7/19/2019,52,2346.55 +352,Ardeen,Loveman,aloveman9r@ow.ly,Female,156.219.46.63,2/10/2019,22,2964.62 +353,Raychel,Bilbie,rbilbie9s@cbslocal.com,Female,17.168.95.135,7/30/2019,77,2114.06 +354,Aylmer,Ortsmann,aortsmann9t@wufoo.com,Male,38.11.85.41,7/7/2019,93,3751.57 +355,Cassey,Ivanilov,civanilov9u@infoseek.co.jp,Female,55.185.103.167,8/19/2019,31,2292.8 +356,Hedwiga,Mabbitt,hmabbitt9v@hostgator.com,Female,138.225.43.83,5/18/2019,34,3855.85 +357,Andy,Selwin,aselwin9w@php.net,Female,125.221.82.185,11/12/2019,33,3992.33 +358,Alfonso,Waiton,awaiton9x@cam.ac.uk,Male,229.52.201.138,12/12/2018,79,4822.9 +359,Falito,Waugh,fwaugh9y@behance.net,Male,139.179.83.249,2/9/2019,58,4262.13 +360,Goldia,Devennie,gdevennie9z@globo.com,Female,201.225.234.254,6/29/2019,57,4846.5 +361,Charmaine,Craney,ccraneya0@tinypic.com,Female,225.240.75.169,7/12/2019,84,1316.62 +362,Zeke,Laidlow,zlaidlowa1@ehow.com,Male,166.40.176.121,7/4/2019,35,3356.21 +363,Brok,Drayton,bdraytona2@livejournal.com,Male,144.40.40.68,8/13/2019,11,4276.45 +364,Yorke,Stickins,ystickinsa3@joomla.org,Male,43.66.244.157,9/2/2019,69,4537.3 +365,Niven,Carlow,ncarlowa4@berkeley.edu,Male,172.206.45.58,7/5/2019,65,3926.86 +366,Dexter,Roycraft,droycrafta5@bbb.org,Male,77.45.212.134,7/21/2019,55,3035.99 +367,Nicoline,Maryin,nmaryina6@google.com.au,Female,47.168.8.172,8/1/2019,41,4917.76 +368,Ryon,Manuaud,rmanuauda7@domainmarket.com,Male,47.123.90.232,2/9/2019,74,2439.17 +369,Yehudi,Paylie,ypayliea8@domainmarket.com,Male,191.251.55.194,1/27/2019,6,1923.42 +370,Griffith,Tincey,gtinceya9@oaic.gov.au,Male,25.66.148.134,9/12/2019,39,2655.81 +371,Rafa,McLeman,rmclemanaa@mac.com,Female,230.203.148.84,5/6/2019,15,1870.44 +372,Ethel,Deuss,edeussab@hp.com,Female,28.53.103.241,5/16/2019,32,1469.62 +373,Vasily,Sockell,vsockellac@istockphoto.com,Male,56.222.178.227,3/11/2019,69,1735.2 +374,Lorenza,Adelsberg,ladelsbergad@fda.gov,Female,11.94.242.174,1/22/2019,86,3213.96 +375,Colas,Wakerley,cwakerleyae@hostgator.com,Male,145.79.64.143,10/18/2019,32,3929.61 +376,Corbie,Suthworth,csuthworthaf@so-net.ne.jp,Male,185.110.156.111,11/20/2019,59,1791.8 +377,Raviv,Burdon,rburdonag@google.cn,Male,199.130.230.228,8/31/2019,56,2672.48 +378,Willabella,Braybrook,wbraybrookah@wired.com,Female,21.168.228.152,8/23/2019,81,3055.15 +379,Stavro,Culley,sculleyai@rambler.ru,Male,200.89.13.168,7/13/2019,53,4163.02 +380,Even,Scargill,escargillaj@boston.com,Male,239.83.129.85,4/1/2019,3,3610.96 +381,Estell,Feltham,efelthamak@amazon.com,Female,15.107.128.8,12/17/2018,47,4775.21 +382,Babette,Vel,bvelal@spotify.com,Female,175.148.241.38,1/10/2019,41,3884.25 +383,Artair,Sonschein,asonscheinam@paginegialle.it,Male,127.94.90.52,9/23/2019,34,3579.98 +384,Pegeen,Taynton,ptayntonan@mozilla.org,Female,237.12.237.200,8/17/2019,83,4949.73 +385,Rubina,Yarnley,ryarnleyao@bravesites.com,Female,163.161.0.128,2/1/2019,48,2608.0 +386,Imojean,Swadlen,iswadlenap@behance.net,Female,187.101.162.242,11/26/2019,25,3891.41 +387,Remington,Hunnam,rhunnamaq@xrea.com,Male,155.26.3.155,3/2/2019,98,4085.69 +388,Cart,Symson,csymsonar@arstechnica.com,Male,65.122.8.87,12/12/2018,10,1780.3 +389,Kate,Fitzsimons,kfitzsimonsas@i2i.jp,Female,43.231.183.143,9/5/2019,8,4589.81 +390,Derril,Rimmington,drimmingtonat@homestead.com,Male,6.22.197.94,5/8/2019,63,3112.81 +391,Alyson,McCue,amccueau@wikia.com,Female,23.46.105.252,8/28/2019,70,3955.82 +392,Magdalen,Huncoot,mhuncootav@spiegel.de,Female,148.37.230.51,10/31/2019,2,4091.18 +393,Quincey,Tumilson,qtumilsonaw@webeden.co.uk,Male,56.32.172.37,4/8/2019,42,1930.92 +394,Patrick,Causer,pcauserax@ucsd.edu,Male,246.121.43.120,5/6/2019,93,4121.69 +395,Nadia,Vannuccini,nvannucciniay@ifeng.com,Female,136.227.239.1,6/28/2019,9,2309.55 +396,Grethel,Briggs,gbriggsaz@opensource.org,Female,74.158.54.139,12/18/2018,93,1324.43 +397,Carmelina,Witson,cwitsonb0@slate.com,Female,0.189.23.96,9/17/2019,95,2043.81 +398,Stanford,Gariff,sgariffb1@latimes.com,Male,30.67.52.138,11/28/2019,23,3754.58 +399,Broddie,Dunster,bdunsterb2@businesswire.com,Male,195.171.91.125,5/13/2019,35,1781.96 +400,Brigit,Brownsworth,bbrownsworthb3@yale.edu,Female,235.56.89.121,5/7/2019,11,2976.14 +401,Hillary,Daughtrey,hdaughtreyb4@zimbio.com,Male,171.99.161.95,3/31/2019,14,4683.28 +402,Rubetta,Ryding,rrydingb5@facebook.com,Female,121.209.254.88,2/16/2019,48,3181.31 +403,Darill,Giffin,dgiffinb6@so-net.ne.jp,Male,76.229.144.119,12/1/2019,20,1267.15 +404,Meredith,Leghorn,mleghornb7@google.co.jp,Female,88.130.30.36,3/6/2019,73,1165.58 +405,Godfrey,Kleinhandler,gkleinhandlerb8@auda.org.au,Male,202.128.125.132,2/14/2019,50,4151.4 +406,Andie,Tootell,atootellb9@netscape.com,Male,145.145.81.122,6/12/2019,41,1126.15 +407,Roselia,Craise,rcraiseba@java.com,Female,200.79.82.15,6/21/2019,56,4562.67 +408,Conny,Saice,csaicebb@baidu.com,Male,242.82.15.36,11/6/2019,20,4226.99 +409,Keary,Hartrick,khartrickbc@independent.co.uk,Male,189.126.222.123,12/13/2018,86,3150.61 +410,Salli,Scotchmer,sscotchmerbd@cloudflare.com,Female,229.204.119.25,1/15/2019,85,4684.69 +411,Verena,Everington,veveringtonbe@delicious.com,Female,49.206.228.25,4/25/2019,67,2869.88 +412,Bambi,Berzon,bberzonbf@dailymotion.com,Female,47.88.180.96,10/26/2019,67,4843.29 +413,Barbara,Kovacs,bkovacsbg@deliciousdays.com,Female,116.1.242.72,4/20/2019,43,2218.64 +414,Laurice,Adrianello,ladrianellobh@nbcnews.com,Female,69.69.82.208,6/21/2019,91,3331.25 +415,Nadine,Stenning,nstenningbi@tripadvisor.com,Female,105.204.235.18,9/2/2019,13,2037.16 +416,Cristina,Milsap,cmilsapbj@t-online.de,Female,36.13.98.63,12/4/2018,51,2933.37 +417,Kaleb,Easby,keasbybk@howstuffworks.com,Male,59.120.45.235,12/11/2018,4,1277.52 +418,Alister,Kyberd,akyberdbl@wsj.com,Male,184.221.78.151,5/1/2019,85,3931.28 +419,Roma,Uvedale,ruvedalebm@jigsy.com,Male,127.113.15.154,7/21/2019,71,4158.48 +420,Chrisse,Briggs,cbriggsbn@godaddy.com,Male,36.183.171.148,7/26/2019,63,1042.39 +421,Armin,Fidelus,afidelusbo@sogou.com,Male,207.188.30.35,1/13/2019,52,2565.26 +422,Helena,Harlow,hharlowbp@archive.org,Female,125.154.161.88,7/31/2019,11,3388.81 +423,Judy,Stone Fewings,jstonefewingsbq@youtube.com,Female,220.36.160.104,10/2/2019,54,2051.64 +424,Eddi,Gritsaev,egritsaevbr@sphinn.com,Female,36.194.183.230,6/1/2019,60,3020.44 +425,Royal,Juares,rjuaresbs@craigslist.org,Male,84.222.181.156,5/30/2019,30,2382.04 +426,Violette,Kopje,vkopjebt@blogs.com,Female,12.135.203.81,5/12/2019,61,3565.51 +427,Lesli,Franses,lfransesbu@histats.com,Female,124.138.107.148,11/22/2019,71,2644.08 +428,Alric,Barehead,abareheadbv@stumbleupon.com,Male,220.251.223.254,12/17/2018,6,2989.17 +429,Karin,Rosingdall,krosingdallbw@ucoz.ru,Female,83.135.106.197,8/9/2019,89,1199.79 +430,Margaretta,Hartles,mhartlesbx@google.com.br,Female,146.47.193.138,10/15/2019,82,1786.77 +431,Broderic,Adenot,badenotby@upenn.edu,Male,131.77.120.209,9/22/2019,15,4020.02 +432,Konstanze,Scintsbury,kscintsburybz@eepurl.com,Female,187.225.93.97,9/12/2019,91,3882.0 +433,Heriberto,Branchett,hbranchettc0@google.ca,Male,47.131.19.61,9/10/2019,30,3830.84 +434,Dulcy,Moxham,dmoxhamc1@pinterest.com,Female,139.65.244.96,3/31/2019,48,1930.97 +435,Kakalina,Pellamont,kpellamontc2@51.la,Female,46.138.21.69,3/29/2019,53,2265.45 +436,Durward,McAlester,dmcalesterc3@wisc.edu,Male,43.93.21.201,4/1/2019,19,4312.73 +437,Alfy,Dawby,adawbyc4@alibaba.com,Female,60.254.119.60,7/12/2019,53,1447.77 +438,Rafferty,Cullabine,rcullabinec5@acquirethisname.com,Male,107.140.224.21,8/31/2019,10,4627.05 +439,Catlaina,Laurenty,claurentyc6@tripod.com,Female,72.146.104.69,5/8/2019,77,1050.26 +440,Yves,Kinnock,ykinnockc7@narod.ru,Male,212.80.251.121,9/24/2019,26,4289.62 +441,Rustie,Runham,rrunhamc8@google.cn,Male,14.208.111.115,3/30/2019,17,3840.32 +442,Shannon,Teece,steecec9@issuu.com,Female,224.215.224.129,11/26/2019,87,3028.32 +443,Tawsha,Huggons,thuggonsca@oakley.com,Female,28.182.47.108,12/9/2018,80,3985.84 +444,Jozef,Ropcke,jropckecb@washington.edu,Male,71.34.133.206,10/5/2019,51,2177.5 +445,Brittany,Treadgold,btreadgoldcc@dell.com,Female,70.179.135.39,10/6/2019,35,1239.98 +446,Reynolds,Dungay,rdungaycd@taobao.com,Male,198.198.184.105,3/17/2019,84,1401.56 +447,Deeyn,MacNeely,dmacneelyce@google.nl,Female,129.131.12.166,9/24/2019,67,2584.15 +448,Opalina,McAndrew,omcandrewcf@imgur.com,Female,170.144.235.40,9/27/2019,32,1990.03 +449,Annabell,Bowne,abownecg@tamu.edu,Female,15.103.10.164,11/4/2019,82,4979.86 +450,Shepherd,Toye,stoyech@oakley.com,Male,28.94.51.150,5/4/2019,79,3581.94 +451,Dolorita,Rowatt,drowattci@yale.edu,Female,199.209.35.59,1/7/2019,46,2901.35 +452,Gale,Fenich,gfenichcj@seattletimes.com,Female,117.140.18.113,2/2/2019,95,1402.56 +453,Salvidor,Ruperti,srupertick@mashable.com,Male,253.18.192.61,6/10/2019,83,4161.11 +454,Griffie,Colthard,gcolthardcl@google.com.br,Male,125.41.227.143,5/28/2019,72,2219.96 +455,York,Rittmeyer,yrittmeyercm@redcross.org,Male,117.143.157.105,12/25/2018,69,2618.72 +456,Sarene,Brantzen,sbrantzencn@dion.ne.jp,Female,243.21.1.226,1/14/2019,99,1604.26 +457,Maximilien,Jouhan,mjouhanco@dailymotion.com,Male,135.19.146.201,8/12/2019,22,2904.57 +458,Valma,Chipping,vchippingcp@last.fm,Female,106.227.96.134,12/11/2018,21,2367.02 +459,Delmar,Kaas,dkaascq@histats.com,Male,149.43.164.167,8/29/2019,33,1178.21 +460,Dalli,MacBain,dmacbaincr@tripod.com,Male,179.253.105.225,6/28/2019,57,4678.73 +461,Griz,Macquire,gmacquirecs@google.cn,Male,131.224.85.128,8/28/2019,22,1605.86 +462,Far,Ogden,fogdenct@reverbnation.com,Male,164.236.27.67,12/10/2018,46,3121.44 +463,Eleen,Norree,enorreecu@telegraph.co.uk,Female,172.69.9.125,4/6/2019,18,4440.78 +464,Franzen,Izkoveski,fizkoveskicv@issuu.com,Male,92.192.132.174,9/19/2019,12,2651.29 +465,Rhiamon,Saladino,rsaladinocw@wix.com,Female,123.91.96.42,4/10/2019,88,4982.0 +466,Franny,Grinin,fgrinincx@booking.com,Male,43.0.247.215,3/26/2019,89,3774.54 +467,Colin,O'Donohue,codonohuecy@go.com,Male,88.162.185.175,10/22/2019,3,3491.68 +468,Wendye,Compson,wcompsoncz@hud.gov,Female,136.150.155.64,11/13/2019,74,4538.45 +469,Dyane,Raithmill,draithmilld0@ted.com,Female,235.21.43.42,5/16/2019,17,3995.57 +470,Lacie,Dumper,ldumperd1@ycombinator.com,Female,211.130.88.136,5/5/2019,21,4467.62 +471,Talbert,Jurca,tjurcad2@soup.io,Male,110.180.63.75,4/11/2019,72,1047.55 +472,Blondelle,Ingerfield,bingerfieldd3@bbc.co.uk,Female,21.57.56.111,10/18/2019,36,4305.36 +473,Huntington,Keele,hkeeled4@wired.com,Male,29.115.183.130,1/18/2019,90,3988.22 +474,Merle,Lissenden,mlissendend5@google.ru,Male,181.207.215.130,9/9/2019,14,3780.87 +475,Ahmed,Lowthorpe,alowthorped6@fotki.com,Male,170.252.164.227,7/24/2019,56,1887.16 +476,Melli,Monsey,mmonseyd7@house.gov,Female,226.80.98.178,5/13/2019,14,2671.62 +477,Shelly,Flay,sflayd8@epa.gov,Female,77.216.133.212,7/25/2019,13,4660.94 +478,Ryun,Maffey,rmaffeyd9@discovery.com,Male,130.172.183.105,12/18/2018,45,3261.01 +479,Archer,Monksfield,amonksfieldda@google.com.br,Male,182.48.50.111,8/2/2019,52,3036.93 +480,Rosemonde,Wragg,rwraggdb@icq.com,Female,195.223.97.213,8/25/2019,56,1193.62 +481,Halsey,Robbeke,hrobbekedc@cnet.com,Male,232.48.110.118,2/3/2019,42,1298.35 +482,Paten,Paslow,ppaslowdd@instagram.com,Male,29.24.97.210,5/13/2019,98,2545.85 +483,Dora,Ghidoli,dghidolide@digg.com,Female,58.13.173.228,8/13/2019,89,2796.74 +484,Arlene,Dronsfield,adronsfielddf@t.co,Female,79.160.187.181,3/18/2019,55,2539.18 +485,Blakelee,Lipp,blippdg@sakura.ne.jp,Female,19.124.37.230,8/29/2019,1,4628.15 +486,Cecelia,Grinham,cgrinhamdh@twitter.com,Female,234.55.104.182,2/3/2019,48,1693.35 +487,Onofredo,Andreazzi,oandreazzidi@google.ca,Male,117.52.172.57,7/29/2019,53,2615.64 +488,Kiley,Burdekin,kburdekindj@shop-pro.jp,Female,201.52.16.189,8/24/2019,95,3929.48 +489,Bink,Kestin,bkestindk@chron.com,Male,100.111.135.87,7/13/2019,21,1958.77 +490,Mitch,Cagan,mcagandl@pagesperso-orange.fr,Male,25.244.113.46,10/16/2019,82,2492.12 +491,Charlton,Hughes,chughesdm@dmoz.org,Male,29.138.111.115,11/12/2019,10,3339.82 +492,Doria,Ivatts,divattsdn@nih.gov,Female,242.17.53.201,5/29/2019,72,2228.99 +493,Coriss,Lathan,clathando@domainmarket.com,Female,25.75.179.134,10/4/2019,23,4848.67 +494,Elmore,Reside,eresidedp@diigo.com,Male,79.112.126.164,9/21/2019,59,1610.62 +495,Ezekiel,Scherer,eschererdq@telegraph.co.uk,Male,79.39.63.134,8/28/2019,69,1597.98 +496,Werner,Cobson,wcobsondr@artisteer.com,Male,227.194.178.190,3/13/2019,53,4233.49 +497,Randee,Ornillos,rornillosds@youtube.com,Female,67.192.57.128,12/22/2018,59,2404.97 +498,Gottfried,Carloni,gcarlonidt@google.ca,Male,176.184.59.246,7/25/2019,33,4007.86 +499,Findlay,Ferrieroi,fferrieroidu@edublogs.org,Male,164.15.3.146,6/15/2019,29,1439.89 +500,Anestassia,Caldron,acaldrondv@imdb.com,Female,73.5.249.139,12/5/2018,77,4450.98 +501,Ignazio,Prinnett,iprinnettdw@merriam-webster.com,Male,254.189.253.253,5/26/2019,53,3955.94 +502,Debi,Sedgebeer,dsedgebeerdx@msn.com,Female,90.91.234.210,11/26/2019,96,1951.45 +503,Beverlee,Colliard,bcolliarddy@stanford.edu,Female,112.73.182.216,8/1/2019,60,4097.93 +504,Cinnamon,McFadin,cmcfadindz@blogs.com,Female,149.198.138.102,4/3/2019,80,3719.88 +505,Walden,Bruinemann,wbruinemanne0@360.cn,Male,21.212.132.5,11/7/2019,92,2275.38 +506,Quinton,Glanfield,qglanfielde1@amazon.de,Male,213.175.246.203,12/13/2018,8,4630.05 +507,Cello,Potkins,cpotkinse2@github.com,Male,135.169.51.63,3/16/2019,63,2813.83 +508,Percival,Coley,pcoleye3@photobucket.com,Male,205.135.254.197,1/14/2019,93,3766.81 +509,Brockie,Siddens,bsiddense4@usda.gov,Male,166.107.18.144,7/26/2019,11,4226.07 +510,Emmerich,Eglise,eeglisee5@istockphoto.com,Male,39.239.19.196,11/3/2019,23,1444.76 +511,Theo,Olivetta,tolivettae6@yellowpages.com,Male,135.95.4.136,8/1/2019,59,3670.72 +512,Gabie,Blasius,gblasiuse7@vistaprint.com,Male,176.138.63.24,3/12/2019,100,3276.6 +513,Tiebold,Wharmby,twharmbye8@chicagotribune.com,Male,204.219.78.122,6/13/2019,73,3542.76 +514,Tann,Duke,tdukee9@irs.gov,Male,153.153.136.24,3/14/2019,70,2338.35 +515,Westley,Ottery,wotteryea@soundcloud.com,Male,35.239.11.15,9/18/2019,61,2876.26 +516,Noll,Birkmyre,nbirkmyreeb@histats.com,Male,45.218.226.8,5/4/2019,3,3180.04 +517,Angelle,Canizares,acanizaresec@usgs.gov,Female,79.98.22.161,11/16/2019,57,1414.53 +518,Maddy,Rawlins,mrawlinsed@ocn.ne.jp,Female,194.212.205.87,8/24/2019,9,2037.3 +519,Gonzales,Digle,gdigleee@tinyurl.com,Male,188.81.253.229,2/11/2019,31,1096.61 +520,Matias,Arrighetti,marrighettief@jimdo.com,Male,119.210.95.197,10/13/2019,59,1525.12 +521,Ag,Almon,aalmoneg@discuz.net,Female,211.209.145.71,5/9/2019,5,1832.58 +522,Romona,Keppel,rkeppeleh@auda.org.au,Female,180.44.222.236,12/5/2018,69,1470.18 +523,Aeriel,Seear,aseearei@over-blog.com,Female,132.233.16.148,6/8/2019,20,4592.62 +524,Terri,Trulocke,ttrulockeej@clickbank.net,Female,138.176.80.221,10/1/2019,5,1787.96 +525,Linn,Stonestreet,lstonestreetek@un.org,Male,74.243.5.94,11/27/2019,31,1779.4 +526,Dmitri,Coode,dcoodeel@ameblo.jp,Male,201.81.71.70,1/25/2019,94,1400.26 +527,Alane,Sabattier,asabattierem@scribd.com,Female,32.109.38.132,10/10/2019,10,1416.04 +528,Sadye,Esplin,sesplinen@tiny.cc,Female,76.85.72.29,3/14/2019,45,3626.01 +529,Alexia,Iorizzo,aiorizzoeo@themeforest.net,Female,172.234.209.31,7/10/2019,46,4064.06 +530,Gayelord,Kalewe,gkaleweep@over-blog.com,Male,83.169.129.240,9/10/2019,53,1508.96 +531,Clive,Stuchbery,cstuchberyeq@dell.com,Male,9.182.133.41,12/29/2018,21,4980.91 +532,Derron,Lober,dloberer@epa.gov,Male,184.138.78.88,2/14/2019,24,2245.42 +533,Aleda,Addison,aaddisones@wsj.com,Female,181.181.179.67,6/17/2019,81,4493.79 +534,Marshall,Ugolotti,mugolottiet@aboutads.info,Male,159.50.251.20,7/3/2019,35,1104.16 +535,Garold,Moxon,gmoxoneu@slashdot.org,Male,117.142.41.149,10/7/2019,34,2523.56 +536,Fee,Colleer,fcolleerev@state.gov,Male,207.42.100.89,4/12/2019,87,4816.8 +537,Smitty,Smallridge,ssmallridgeew@spotify.com,Male,132.67.213.163,2/26/2019,84,3814.0 +538,Ber,Pettegre,bpettegreex@google.ru,Male,8.176.93.49,9/6/2019,67,3272.53 +539,Tybi,Brown,tbrowney@ibm.com,Female,100.73.19.52,3/7/2019,76,1088.01 +540,Roxanne,Rigler,rriglerez@weebly.com,Female,29.96.199.117,4/1/2019,65,2694.03 +541,Alphonse,Astlett,aastlettf0@hatena.ne.jp,Male,244.194.52.149,7/29/2019,47,1467.11 +542,Calvin,Finn,cfinnf1@ucoz.com,Male,199.41.9.21,12/30/2018,7,1828.33 +543,Broddie,Brandts,bbrandtsf2@answers.com,Male,100.8.254.225,10/29/2019,64,1792.68 +544,Herrick,Chadderton,hchaddertonf3@wired.com,Male,187.66.85.223,3/1/2019,38,3230.59 +545,Teodoor,Benny,tbennyf4@home.pl,Male,6.177.43.100,4/29/2019,13,2503.4 +546,Karl,Wrintmore,kwrintmoref5@apple.com,Male,73.104.69.176,8/7/2019,97,2688.4 +547,Alexandra,Testo,atestof6@loc.gov,Female,15.230.156.211,6/9/2019,84,4522.93 +548,Colin,Giorgietto,cgiorgiettof7@nymag.com,Male,13.75.177.91,2/21/2019,3,3730.12 +549,Talbot,McNickle,tmcnicklef8@wp.com,Male,44.250.27.152,3/18/2019,30,2209.95 +550,Cassandre,Hayle,chaylef9@newyorker.com,Female,116.81.18.95,11/21/2019,10,3204.22 +551,Tommi,Bilney,tbilneyfa@prweb.com,Female,61.67.100.120,10/16/2019,79,3613.66 +552,Larisa,Pollok,lpollokfb@loc.gov,Female,79.115.80.86,9/30/2019,29,1901.41 +553,Deb,Dorkins,ddorkinsfc@xrea.com,Female,26.52.68.180,10/15/2019,99,4906.29 +554,Johanna,Kainz,jkainzfd@chronoengine.com,Female,142.73.143.215,8/18/2019,4,1226.42 +555,Gasparo,Handrek,ghandrekfe@vinaora.com,Male,21.21.61.211,10/16/2019,91,1731.15 +556,Elwyn,Zahor,ezahorff@washingtonpost.com,Male,184.132.148.138,1/5/2019,55,1626.51 +557,Devina,De Vaar,ddevaarfg@miibeian.gov.cn,Female,195.180.225.61,7/12/2019,2,4095.24 +558,Ikey,Verner,ivernerfh@msu.edu,Male,175.129.187.1,8/8/2019,10,1643.3 +559,Shae,Potteril,spotterilfi@cyberchimps.com,Male,135.218.100.211,9/30/2019,43,2747.3 +560,Kim,Kittel,kkittelfj@buzzfeed.com,Male,224.125.75.142,12/12/2018,17,4109.17 +561,Alexei,Morecomb,amorecombfk@independent.co.uk,Male,172.224.245.105,12/9/2018,33,2899.08 +562,Cathryn,Finnan,cfinnanfl@ask.com,Female,27.110.235.165,5/28/2019,94,4841.66 +563,Maryjane,Duffus,mduffusfm@eventbrite.com,Female,3.255.15.114,10/22/2019,54,1514.19 +564,Violetta,Reisk,vreiskfn@typepad.com,Female,39.227.35.28,4/18/2019,92,4609.62 +565,Vicky,Lots,vlotsfo@cisco.com,Female,231.114.228.254,7/16/2019,5,2747.65 +566,Odilia,Shemmans,oshemmansfp@phpbb.com,Female,173.16.238.214,7/15/2019,64,2509.13 +567,Doralynn,Borne,dbornefq@vistaprint.com,Female,182.193.106.25,9/27/2019,58,2388.86 +568,Gallagher,Tinsey,gtinseyfr@wsj.com,Male,222.169.135.174,8/26/2019,9,2587.26 +569,Ulberto,Hellyar,uhellyarfs@yellowbook.com,Male,248.76.37.74,7/15/2019,30,1922.6 +570,Carilyn,Skones,cskonesft@liveinternet.ru,Female,156.207.111.147,5/19/2019,37,4692.05 +571,Sarine,Rubinovitch,srubinovitchfu@networksolutions.com,Female,80.120.49.55,8/19/2019,20,1594.95 +572,Jemmy,Marlowe,jmarlowefv@engadget.com,Female,75.14.237.58,4/14/2019,51,1904.61 +573,Gaby,Demelt,gdemeltfw@infoseek.co.jp,Male,229.88.216.80,2/3/2019,51,1648.97 +574,Jacob,Lamberton,jlambertonfx@hugedomains.com,Male,47.215.55.112,11/23/2019,98,2245.77 +575,Emile,Bullivent,ebulliventfy@is.gd,Male,222.149.227.61,1/14/2019,28,2610.31 +576,Reidar,Gierardi,rgierardifz@flickr.com,Male,137.20.90.27,7/14/2019,44,1963.44 +577,Dwain,De Mars,ddemarsg0@theglobeandmail.com,Male,29.126.92.147,5/8/2019,83,2977.28 +578,Seth,Hebron,shebrong1@github.io,Male,97.93.183.184,2/17/2019,17,2725.06 +579,Shep,Rabjohn,srabjohng2@sfgate.com,Male,118.230.96.220,4/5/2019,75,4150.25 +580,Georgine,Martill,gmartillg3@who.int,Female,89.160.34.190,1/8/2019,37,4712.71 +581,Theodora,Mitchenson,tmitchensong4@delicious.com,Female,140.245.239.155,4/11/2019,58,1505.59 +582,Geri,Reedman,greedmang5@mac.com,Male,149.218.213.221,6/22/2019,29,3919.37 +583,Hamel,Ruddick,hruddickg6@uiuc.edu,Male,74.103.5.12,3/19/2019,32,2242.44 +584,Marylou,Baggott,mbaggottg7@goo.gl,Female,67.211.254.135,11/7/2019,35,4631.99 +585,Ignacius,Croisdall,icroisdallg8@imdb.com,Male,194.136.32.103,4/9/2019,22,4505.82 +586,Agnes,Pentercost,apentercostg9@yolasite.com,Female,201.109.22.156,4/7/2019,6,2659.75 +587,Phillipe,O'Henery,poheneryga@baidu.com,Male,169.210.213.194,4/28/2019,100,3089.16 +588,Mersey,Bilston,mbilstongb@mozilla.org,Female,212.118.21.202,6/6/2019,47,1546.62 +589,Carie,Pawelski,cpawelskigc@examiner.com,Female,185.32.131.13,12/23/2018,13,1607.17 +590,Cassandra,Zywicki,czywickigd@ask.com,Female,58.164.239.126,10/6/2019,86,3316.82 +591,Myrtia,Avrasin,mavrasinge@tripod.com,Female,23.46.205.131,6/2/2019,28,1376.97 +592,Stanford,Greatrakes,sgreatrakesgf@europa.eu,Male,110.99.123.217,12/31/2018,89,4653.75 +593,Giulietta,Hinkens,ghinkensgg@list-manage.com,Female,146.42.27.152,3/17/2019,90,4663.89 +594,Dame,Eam,deamgh@jalbum.net,Male,93.210.79.222,12/3/2018,99,4955.03 +595,Claresta,Spradbery,cspradberygi@wunderground.com,Female,177.74.189.41,5/7/2019,69,2660.67 +596,Charisse,Janos,cjanosgj@yellowbook.com,Female,107.1.160.123,11/30/2019,27,3260.09 +597,Mufi,Letterick,mletterickgk@apache.org,Female,230.153.229.231,6/16/2019,59,2986.56 +598,Fabe,Sabberton,fsabbertongl@mapquest.com,Male,219.168.121.194,7/18/2019,70,3658.28 +599,Nikolas,Gildersleaves,ngildersleavesgm@ox.ac.uk,Male,162.123.231.93,7/20/2019,78,1233.59 +600,Justin,Vigours,jvigoursgn@sourceforge.net,Male,154.142.42.26,6/28/2019,31,4990.95 +601,Kile,Le Clercq,kleclercqgo@indiatimes.com,Male,239.28.13.21,12/13/2018,84,1001.19 +602,Isidoro,Tregonna,itregonnagp@webeden.co.uk,Male,171.67.239.44,1/16/2019,41,4417.17 +603,Mab,Ironside,mironsidegq@google.cn,Female,42.162.241.202,7/23/2019,91,2259.53 +604,Dimitry,Manass,dmanassgr@51.la,Male,45.173.17.98,1/25/2019,46,1586.27 +605,Rossy,Arden,rardengs@bigcartel.com,Male,214.115.174.58,4/28/2019,51,1823.4 +606,Daniele,Barnard,dbarnardgt@so-net.ne.jp,Female,135.128.233.112,2/1/2019,71,3995.81 +607,Helene,Westphalen,hwestphalengu@addthis.com,Female,106.111.55.197,11/15/2019,95,2675.0 +608,Zeke,Mixer,zmixergv@europa.eu,Male,70.187.67.163,2/1/2019,26,1019.63 +609,Modesta,Cock,mcockgw@berkeley.edu,Female,16.132.149.179,1/19/2019,79,2922.43 +610,Bard,Vieyra,bvieyragx@shinystat.com,Male,192.107.97.186,10/5/2019,17,4998.16 +611,Boote,Geall,bgeallgy@networksolutions.com,Male,54.164.158.9,1/1/2019,95,3385.89 +612,Ninnetta,Loveman,nlovemangz@histats.com,Female,25.150.239.54,9/19/2019,24,3487.97 +613,Sigismund,Fitzer,sfitzerh0@163.com,Male,93.203.46.222,9/7/2019,26,3405.11 +614,Perren,Haquin,phaquinh1@networkadvertising.org,Male,27.195.139.40,7/13/2019,95,4472.37 +615,Ramsay,Galland,rgallandh2@sohu.com,Male,64.157.166.62,2/15/2019,30,3256.71 +616,Silva,Strete,sstreteh3@yellowpages.com,Female,28.120.167.41,10/30/2019,67,4109.49 +617,Dee dee,Poate,dpoateh4@github.io,Female,169.234.44.240,1/26/2019,87,2487.52 +618,Bianca,Martell,bmartellh5@bloomberg.com,Female,17.155.34.89,12/5/2018,88,2523.49 +619,Alan,Wallwork,awallworkh6@bloglines.com,Male,136.41.225.203,11/17/2019,32,2593.63 +620,Alysa,Lembrick,alembrickh7@github.io,Female,4.186.245.140,3/12/2019,42,4087.94 +621,Yoshiko,Alans,yalansh8@list-manage.com,Female,113.124.38.19,1/8/2019,5,3091.72 +622,Chelsy,Watford,cwatfordh9@yellowpages.com,Female,10.18.35.232,5/4/2019,86,4661.23 +623,Bill,Gotthard,bgotthardha@moonfruit.com,Male,169.67.131.116,5/21/2019,11,1287.77 +624,Cad,Kirtlan,ckirtlanhb@xrea.com,Male,40.152.181.2,1/24/2019,24,3155.78 +625,Ahmed,McClenan,amcclenanhc@webmd.com,Male,20.99.191.248,8/13/2019,36,3301.08 +626,Tobit,Barthelemy,tbarthelemyhd@bizjournals.com,Male,35.143.211.133,9/10/2019,98,1382.31 +627,Kacie,Lurner,klurnerhe@illinois.edu,Female,4.70.92.52,3/14/2019,58,3754.13 +628,Keith,Skeech,kskeechhf@pbs.org,Male,14.243.98.120,8/22/2019,99,2840.36 +629,Loy,Brettoner,lbrettonerhg@marriott.com,Male,244.228.186.208,5/28/2019,83,1322.53 +630,Ring,Keppy,rkeppyhh@mediafire.com,Male,63.223.185.137,10/29/2019,49,3414.88 +631,Jennee,Saltsberg,jsaltsberghi@angelfire.com,Female,168.154.55.70,2/20/2019,89,1792.13 +632,Leslie,Sunley,lsunleyhj@furl.net,Female,142.154.216.195,1/14/2019,85,1049.36 +633,Serge,Brightman,sbrightmanhk@nsw.gov.au,Male,218.24.194.199,8/25/2019,17,3821.08 +634,Thadeus,Janosevic,tjanosevichl@auda.org.au,Male,117.42.23.253,6/4/2019,12,3771.8 +635,Spense,Ribchester,sribchesterhm@google.cn,Male,60.125.96.255,3/20/2019,10,4152.59 +636,Cordelia,Petrashov,cpetrashovhn@jalbum.net,Female,4.255.192.99,5/3/2019,42,4778.71 +637,Rhea,Jest,rjestho@hao123.com,Female,60.250.169.224,11/1/2019,88,3984.23 +638,Patricia,Feehery,pfeeheryhp@dot.gov,Female,238.226.108.19,1/3/2019,72,2436.71 +639,Griffie,Haswell,ghaswellhq@linkedin.com,Male,141.208.249.19,3/30/2019,54,4591.33 +640,Isahella,Brockett,ibrocketthr@webnode.com,Female,187.222.253.93,8/18/2019,40,2025.08 +641,Rhea,Castiglioni,rcastiglionihs@cpanel.net,Female,59.223.205.19,3/28/2019,8,4878.09 +642,Stu,Gladman,sgladmanht@yandex.ru,Male,148.174.89.129,2/7/2019,6,4658.63 +643,Meade,Penn,mpennhu@tinypic.com,Female,159.237.205.132,7/14/2019,67,1741.76 +644,Analise,Teesdale,ateesdalehv@istockphoto.com,Female,112.255.159.227,4/27/2019,43,4943.97 +645,Gabbie,Gawith,ggawithhw@bing.com,Male,156.88.177.49,9/1/2019,30,2127.26 +646,Fancie,Matura,fmaturahx@prweb.com,Female,245.199.208.176,10/14/2019,48,3611.12 +647,Oneida,Klee,okleehy@merriam-webster.com,Female,76.241.235.4,4/24/2019,75,3574.83 +648,Patty,Deadman,pdeadmanhz@deviantart.com,Female,119.238.140.122,12/3/2018,78,4990.77 +649,Rica,Habbershon,rhabbershoni0@imdb.com,Female,235.54.40.9,8/21/2019,72,4008.1 +650,Dominick,Morphey,dmorpheyi1@state.gov,Male,26.182.126.198,9/27/2019,32,2803.47 +651,Lin,Elvey,lelveyi2@qq.com,Female,217.142.5.50,5/2/2019,75,1382.58 +652,Candra,Ellershaw,cellershawi3@liveinternet.ru,Female,37.103.239.8,11/5/2019,64,1785.17 +653,Petr,Blamey,pblameyi4@cornell.edu,Male,102.165.209.59,11/16/2019,23,4146.8 +654,Starlene,Shoebrook,sshoebrooki5@un.org,Female,168.143.167.147,3/14/2019,4,4991.14 +655,Rochelle,Inggall,ringgalli6@biglobe.ne.jp,Female,102.127.212.247,9/12/2019,81,1583.69 +656,Ezmeralda,Jubert,ejuberti7@icio.us,Female,81.4.17.157,7/22/2019,52,4205.34 +657,Berny,Crufts,bcruftsi8@jigsy.com,Female,244.211.38.231,1/6/2019,46,4968.82 +658,Philis,Hitzke,phitzkei9@google.es,Female,206.218.221.24,10/5/2019,21,2082.32 +659,Dacey,Beck,dbeckia@netscape.com,Female,52.22.157.97,4/17/2019,22,3785.01 +660,Lammond,Esmead,lesmeadib@slate.com,Male,216.172.89.83,4/11/2019,87,4186.81 +661,Bevin,Pattullo,bpattulloic@yelp.com,Male,96.237.177.242,9/30/2019,9,3862.46 +662,Abbie,Melsom,amelsomid@businesswire.com,Female,226.28.218.124,8/28/2019,98,4520.86 +663,Hilarius,Weagener,hweagenerie@google.nl,Male,6.108.117.111,9/10/2019,80,4920.12 +664,Onida,Dewberry,odewberryif@chron.com,Female,95.189.17.251,7/12/2019,27,1206.75 +665,Sawyer,Behne,sbehneig@who.int,Male,232.40.190.187,6/26/2019,92,2730.93 +666,Ingaborg,Benoit,ibenoitih@diigo.com,Female,45.171.74.30,2/26/2019,79,3169.39 +667,Christyna,Beardow,cbeardowii@hibu.com,Female,212.112.66.197,8/15/2019,22,1664.25 +668,Chrysa,Bouda,cboudaij@posterous.com,Female,182.254.214.92,6/20/2019,58,4842.58 +669,Skell,Janny,sjannyik@statcounter.com,Male,117.115.79.57,8/25/2019,64,3147.82 +670,Willie,Gisbye,wgisbyeil@smh.com.au,Male,163.74.14.6,12/24/2018,60,2181.71 +671,Loydie,MacGiolla Pheadair,lmacgiollapheadairim@ftc.gov,Male,66.165.25.118,12/24/2018,17,4234.43 +672,Millisent,Warwick,mwarwickin@google.co.uk,Female,11.125.80.152,5/27/2019,57,2770.04 +673,Lutero,Campelli,lcampelliio@alibaba.com,Male,218.66.248.154,10/4/2019,29,4169.81 +674,Waverly,Kroch,wkrochip@google.co.uk,Male,117.138.8.158,10/6/2019,55,2248.55 +675,Jorge,Tipple,jtippleiq@google.cn,Male,75.32.226.30,1/5/2019,20,2316.81 +676,Rycca,Markham,rmarkhamir@posterous.com,Female,108.165.80.206,4/1/2019,37,3733.9 +677,Kendell,Tabourel,ktabourelis@ucsd.edu,Male,31.106.135.186,1/27/2019,41,2767.65 +678,Xymenes,Christofol,xchristofolit@slashdot.org,Male,205.98.142.54,4/17/2019,75,3761.36 +679,Willamina,Gluyas,wgluyasiu@patch.com,Female,208.141.12.123,9/10/2019,62,4055.56 +680,Missy,Chaudron,mchaudroniv@ox.ac.uk,Female,253.225.93.169,5/17/2019,54,3188.83 +681,Harrie,Levee,hleveeiw@dropbox.com,Female,104.60.96.6,9/4/2019,73,3779.89 +682,Nickie,Awdry,nawdryix@deviantart.com,Female,186.254.251.36,1/3/2019,76,2909.63 +683,Wash,Mapletoft,wmapletoftiy@baidu.com,Male,176.231.204.160,2/12/2019,3,1072.43 +684,Thea,Crankshaw,tcrankshawiz@bluehost.com,Female,240.218.215.50,12/5/2018,41,2503.95 +685,Bryna,Clemmen,bclemmenj0@slate.com,Female,117.149.65.242,6/24/2019,33,2635.47 +686,Fiann,Dipple,fdipplej1@usda.gov,Female,13.222.48.15,5/1/2019,97,4530.95 +687,Hilliary,Nowell,hnowellj2@jigsy.com,Female,237.64.236.63,9/8/2019,4,3931.64 +688,Francene,Perfitt,fperfittj3@upenn.edu,Female,35.17.66.62,3/5/2019,24,4353.24 +689,Adair,Foucher,afoucherj4@google.com,Male,184.228.99.56,5/7/2019,75,3261.23 +690,Evyn,Cristou,ecristouj5@xrea.com,Male,114.91.151.161,7/17/2019,95,3655.93 +691,Carleton,Mooreed,cmooreedj6@walmart.com,Male,17.30.55.141,8/31/2019,66,1486.95 +692,Ashley,Wallage,awallagej7@dyndns.org,Male,214.116.89.237,5/6/2019,17,3179.86 +693,Corney,Healeas,chealeasj8@phoca.cz,Male,36.170.221.28,12/24/2018,29,3068.73 +694,Marabel,Abbado,mabbadoj9@google.nl,Female,56.208.153.166,4/15/2019,4,4988.67 +695,Barr,Gregr,bgregrja@mozilla.com,Male,118.210.102.100,5/28/2019,31,2310.92 +696,Ulrika,Verni,uvernijb@hhs.gov,Female,252.208.223.205,3/13/2019,34,4254.15 +697,Carri,McWilliam,cmcwilliamjc@unblog.fr,Female,244.144.133.38,2/26/2019,57,4082.44 +698,Ciro,Burnet,cburnetjd@simplemachines.org,Male,56.117.3.236,11/7/2019,71,2943.82 +699,Eryn,Lindblom,elindblomje@paginegialle.it,Female,218.110.190.80,10/26/2019,98,3327.13 +700,Tandi,Jenney,tjenneyjf@sciencedirect.com,Female,61.111.94.217,8/9/2019,63,3161.01 +701,Karissa,McGeachy,kmcgeachyjg@themeforest.net,Female,97.151.85.120,3/15/2019,75,2793.19 +702,Daisie,Gosling,dgoslingjh@yale.edu,Female,80.132.185.177,12/24/2018,99,2564.95 +703,Web,Waters,wwatersji@icio.us,Male,138.42.236.158,11/26/2019,12,3133.25 +704,Beulah,Saltrese,bsaltresejj@rakuten.co.jp,Female,111.246.77.69,5/10/2019,85,1562.53 +705,Shea,Bansal,sbansaljk@timesonline.co.uk,Male,45.157.189.79,6/13/2019,64,4095.48 +706,Granger,Maddyson,gmaddysonjl@cdbaby.com,Male,4.174.208.225,10/22/2019,90,2312.31 +707,Frederic,Ferras,fferrasjm@europa.eu,Male,93.89.74.109,4/21/2019,1,2688.0 +708,Terri-jo,Blockwell,tblockwelljn@diigo.com,Female,139.206.39.244,10/28/2019,77,2032.65 +709,Portia,Messum,pmessumjo@cpanel.net,Female,205.8.231.154,7/5/2019,7,3703.36 +710,Fay,Bleakley,fbleakleyjp@fema.gov,Female,51.78.72.116,11/14/2019,97,4827.37 +711,Blayne,Marnane,bmarnanejq@nasa.gov,Male,254.10.160.105,11/17/2019,59,4393.22 +712,Brooke,Dreinan,bdreinanjr@yandex.ru,Male,101.190.49.170,7/13/2019,91,3896.42 +713,Dannie,Butten,dbuttenjs@w3.org,Male,254.183.249.58,7/3/2019,49,4087.49 +714,Niki,Gooch,ngoochjt@huffingtonpost.com,Male,14.126.59.16,2/13/2019,81,3541.85 +715,Penny,Bovis,pbovisju@macromedia.com,Female,194.73.1.154,9/15/2019,22,3343.77 +716,Agna,Wellings,awellingsjv@economist.com,Female,18.191.109.188,6/20/2019,59,3995.96 +717,Kelsi,Binestead,kbinesteadjw@weibo.com,Female,209.183.105.9,6/22/2019,10,2251.08 +718,Lucio,MacLennan,lmaclennanjx@oracle.com,Male,138.238.128.41,6/18/2019,76,4327.17 +719,Leonora,Shailer,lshailerjy@illinois.edu,Female,119.146.115.106,12/20/2018,29,4657.75 +720,Fonsie,O'Doogan,fodooganjz@cbsnews.com,Male,130.108.253.158,8/21/2019,94,1870.33 +721,Stearne,Claire,sclairek0@booking.com,Male,131.59.84.18,4/11/2019,98,3369.19 +722,Maye,Howis,mhowisk1@buzzfeed.com,Female,22.69.128.140,9/8/2019,85,1974.16 +723,Orton,Kiffe,okiffek2@github.com,Male,81.226.255.158,10/22/2019,52,3864.03 +724,Barty,Leadbeater,bleadbeaterk3@amazon.de,Male,208.66.100.248,4/24/2019,28,4214.56 +725,Sidnee,Coxhead,scoxheadk4@cam.ac.uk,Male,62.75.3.110,2/16/2019,8,4882.21 +726,Worden,Quan,wquank5@telegraph.co.uk,Male,86.238.192.197,3/13/2019,3,4136.64 +727,Brad,Marlor,bmarlork6@chron.com,Male,205.102.239.46,1/10/2019,27,3958.67 +728,Jefferson,Fanning,jfanningk7@google.de,Male,139.239.121.50,10/19/2019,26,3356.51 +729,North,Leidecker,nleideckerk8@nyu.edu,Male,240.19.0.156,4/1/2019,27,4866.45 +730,Chrissy,Rounsefull,crounsefullk9@topsy.com,Female,181.133.238.56,12/31/2018,19,1456.66 +731,Jennine,D'eathe,jdeatheka@ow.ly,Female,82.172.76.47,10/8/2019,87,1326.34 +732,Nedda,Hyland,nhylandkb@unesco.org,Female,85.174.186.120,10/9/2019,67,4967.34 +733,Ripley,Bavester,rbavesterkc@facebook.com,Male,200.70.120.11,7/30/2019,67,3364.31 +734,Amandi,Angrove,aangrovekd@hud.gov,Female,51.90.237.193,10/18/2019,98,3962.5 +735,Jandy,Fritchley,jfritchleyke@youtu.be,Female,236.202.35.177,11/17/2019,79,4641.47 +736,Kevin,Tozer,ktozerkf@godaddy.com,Male,92.185.81.191,9/20/2019,75,2652.18 +737,Erinna,Bucke,ebuckekg@hugedomains.com,Female,134.19.86.195,1/16/2019,19,4117.83 +738,Melania,Margach,mmargachkh@pagesperso-orange.fr,Female,57.86.172.205,1/22/2019,34,4369.1 +739,Darryl,Besset,dbessetki@canalblog.com,Female,150.168.219.97,10/15/2019,85,2449.44 +740,Urbano,Loy,uloykj@vistaprint.com,Male,192.95.90.230,1/29/2019,66,1697.74 +741,Shanan,Titcombe,stitcombekk@addtoany.com,Male,78.104.122.110,1/2/2019,31,2712.55 +742,North,Kropp,nkroppkl@huffingtonpost.com,Male,123.193.124.129,7/19/2019,32,2129.1 +743,Dario,Mennithorp,dmennithorpkm@nifty.com,Male,10.142.173.99,11/4/2019,64,2962.06 +744,Sally,Clerk,sclerkkn@youtu.be,Female,67.123.50.70,11/27/2019,32,4948.27 +745,Phillida,Grishkov,pgrishkovko@hatena.ne.jp,Female,105.59.57.150,5/19/2019,78,2513.36 +746,Warren,Gauthorpp,wgauthorppkp@dailymotion.com,Male,109.33.209.101,3/24/2019,74,3859.6 +747,Yurik,McArthur,ymcarthurkq@time.com,Male,177.53.197.246,6/4/2019,25,1927.47 +748,Lucine,Pritchett,lpritchettkr@adobe.com,Female,214.120.212.72,5/5/2019,44,3376.03 +749,Reeba,Facchini,rfacchiniks@fotki.com,Female,62.203.183.86,3/16/2019,29,2413.06 +750,Marys,MacGaughey,mmacgaugheykt@blogger.com,Female,241.223.207.143,7/28/2019,84,2694.2 +751,Abdul,Rollett,arollettku@intel.com,Male,224.183.67.157,5/16/2019,100,3327.64 +752,Lorry,Wolstenholme,lwolstenholmekv@facebook.com,Female,54.19.245.157,4/24/2019,43,4692.53 +753,Kore,Illingworth,killingworthkw@1und1.de,Female,4.3.169.154,11/2/2019,94,2378.36 +754,Mikel,Welbrock,mwelbrockkx@so-net.ne.jp,Male,94.86.96.2,5/16/2019,74,3938.38 +755,Debby,Largan,dlarganky@mozilla.org,Female,99.67.157.53,10/14/2019,62,2417.72 +756,Brana,Wabe,bwabekz@eepurl.com,Female,243.219.60.35,9/27/2019,36,3520.16 +757,Dyana,Dagworthy,ddagworthyl0@statcounter.com,Female,248.115.199.134,1/29/2019,10,1238.39 +758,Jobi,McAndie,jmcandiel1@alibaba.com,Female,76.175.25.123,9/8/2019,27,2305.18 +759,Karlene,Jery,kjeryl2@va.gov,Female,135.147.68.149,10/20/2019,58,1166.14 +760,Reinhold,Lepoidevin,rlepoidevinl3@baidu.com,Male,31.102.77.143,11/13/2019,22,2344.24 +761,Quent,Screen,qscreenl4@opera.com,Male,12.112.10.35,2/10/2019,53,4842.57 +762,Samuel,Lindberg,slindbergl5@github.io,Male,168.90.162.31,12/12/2018,89,1308.19 +763,Haleigh,Raubenheimer,hraubenheimerl6@quantcast.com,Female,105.212.55.253,1/14/2019,37,3535.98 +764,Shela,Croutear,scroutearl7@istockphoto.com,Female,91.117.195.180,2/8/2019,38,3265.27 +765,Kellyann,Capron,kcapronl8@example.com,Female,124.152.40.23,5/29/2019,50,4056.87 +766,Garey,enzley,genzleyl9@latimes.com,Male,90.152.83.190,9/28/2019,97,1906.66 +767,Mick,Schroter,mschroterla@google.fr,Male,7.60.95.15,5/31/2019,3,1395.4 +768,Alfy,Amdohr,aamdohrlb@google.com,Male,224.77.126.110,3/1/2019,50,4548.48 +769,Mirabelle,Staresmeare,mstaresmearelc@netvibes.com,Female,11.204.171.148,1/11/2019,55,4544.46 +770,Opal,Fincken,ofinckenld@paypal.com,Female,163.158.79.29,9/30/2019,16,4021.93 +771,Donielle,Philliphs,dphilliphsle@g.co,Female,141.55.105.178,7/20/2019,49,1131.35 +772,Stephie,Whitaker,swhitakerlf@skyrock.com,Female,225.117.77.187,3/27/2019,10,4871.35 +773,Elisa,Reddell,ereddelllg@cargocollective.com,Female,74.40.71.217,9/11/2019,9,4241.01 +774,Lars,Bunner,lbunnerlh@si.edu,Male,169.187.187.173,3/18/2019,30,4554.14 +775,Travers,Prinnett,tprinnettli@artisteer.com,Male,105.11.246.207,5/19/2019,60,1589.02 +776,Laurens,Held,lheldlj@delicious.com,Male,124.146.44.210,8/19/2019,96,2202.45 +777,Francesco,Florence,fflorencelk@army.mil,Male,220.136.205.22,7/26/2019,20,3108.6 +778,Lorenzo,Sandhill,lsandhillll@cbc.ca,Male,59.175.249.79,9/30/2019,75,1913.25 +779,Eddy,Duchart,educhartlm@blinklist.com,Male,45.9.255.250,9/3/2019,23,2272.21 +780,Melisse,Corpe,mcorpeln@biblegateway.com,Female,177.26.210.63,10/20/2019,52,4203.4 +781,Clementia,Raggett,craggettlo@wikispaces.com,Female,66.66.204.21,10/17/2019,35,3945.21 +782,Constantine,Spaducci,cspaduccilp@upenn.edu,Male,63.181.82.150,8/21/2019,46,2543.36 +783,Durant,Andreix,dandreixlq@desdev.cn,Male,196.76.252.7,9/20/2019,14,4613.73 +784,Dilan,Jesty,djestylr@nature.com,Male,121.131.244.90,3/19/2019,89,4665.71 +785,Geralda,Zotto,gzottols@samsung.com,Female,203.26.209.205,4/15/2019,76,2964.31 +786,Greg,Goodings,ggoodingslt@instagram.com,Male,64.38.244.127,9/12/2019,92,4711.1 +787,Bailey,Stuchberry,bstuchberrylu@indiatimes.com,Male,26.71.81.206,12/16/2018,30,1848.55 +788,Mata,Wilkowski,mwilkowskilv@google.co.uk,Male,155.242.58.56,11/26/2019,85,4335.11 +789,Hamnet,Phillpotts,hphillpottslw@paypal.com,Male,7.182.159.232,6/16/2019,71,1440.95 +790,Dimitry,Capeloff,dcapelofflx@pinterest.com,Male,109.227.224.121,7/10/2019,80,3282.33 +791,Rafaello,Coggles,rcogglesly@prweb.com,Male,111.224.235.85,12/10/2018,16,4340.53 +792,Judith,Witul,jwitullz@issuu.com,Female,175.239.78.176,3/2/2019,1,4375.79 +793,Addy,Symson,asymsonm0@xing.com,Female,21.208.246.221,2/11/2019,82,1009.31 +794,Joey,Troak,jtroakm1@hhs.gov,Male,134.87.130.194,1/28/2019,60,1454.05 +795,Goldi,Currell,gcurrellm2@xinhuanet.com,Female,93.106.48.19,10/16/2019,65,1228.04 +796,Joaquin,Teodori,jteodorim3@github.com,Male,240.116.96.102,7/31/2019,71,1091.62 +797,Rollo,Embling,remblingm4@un.org,Male,56.201.58.245,3/29/2019,20,2170.46 +798,Mina,Blondel,mblondelm5@weibo.com,Female,98.87.116.35,7/18/2019,58,1320.41 +799,Meridel,Aries,mariesm6@technorati.com,Female,142.95.106.58,11/15/2019,87,2705.6 +800,Bret,Perrelle,bperrellem7@360.cn,Male,118.67.219.42,6/16/2019,87,3500.22 +801,Augustine,Hamments,ahammentsm8@oracle.com,Male,55.61.38.103,3/26/2019,8,1526.07 +802,Billie,Roo,broom9@tuttocitta.it,Female,219.152.107.102,3/14/2019,97,3539.6 +803,Susann,Pargiter,spargiterma@umich.edu,Female,147.205.25.119,6/27/2019,22,1160.81 +804,Glennis,Penella,gpenellamb@posterous.com,Female,192.52.234.179,11/2/2019,36,2548.63 +805,Mozelle,Densumbe,mdensumbemc@phpbb.com,Female,72.69.188.204,7/10/2019,51,4208.3 +806,Bernarr,Congrave,bcongravemd@gizmodo.com,Male,54.147.238.56,6/24/2019,10,3573.77 +807,Humfrid,Glauber,hglauberme@adobe.com,Male,88.115.210.97,2/26/2019,18,1504.77 +808,Suzie,Awmack,sawmackmf@com.com,Female,25.246.10.228,9/22/2019,58,1734.63 +809,Tanitansy,McDill,tmcdillmg@apache.org,Female,176.212.121.232,9/10/2019,91,3442.09 +810,Astrid,O'Henery,aohenerymh@cnbc.com,Female,114.120.10.56,5/9/2019,8,3084.41 +811,Pepita,Estrella,pestrellami@1688.com,Female,32.233.56.52,11/12/2019,14,4239.8 +812,Cornie,Jennaway,cjennawaymj@amazon.de,Male,193.210.211.129,6/10/2019,19,3412.2 +813,Barbette,Rudgard,brudgardmk@myspace.com,Female,176.253.137.53,2/4/2019,1,1136.15 +814,Timofei,Donner,tdonnerml@ed.gov,Male,123.83.191.246,3/26/2019,1,1133.51 +815,Vasily,Jeary,vjearymm@nationalgeographic.com,Male,98.99.97.55,5/7/2019,92,1187.51 +816,Jamey,Windsor,jwindsormn@nih.gov,Male,196.125.95.56,6/29/2019,71,3115.9 +817,Evangelina,Gorrie,egorriemo@theglobeandmail.com,Female,35.130.99.82,1/14/2019,79,2252.03 +818,Odie,Titchmarsh,otitchmarshmp@sina.com.cn,Male,172.30.187.143,6/12/2019,63,3327.2 +819,Hestia,Fresson,hfressonmq@hp.com,Female,195.31.239.116,7/16/2019,39,3541.73 +820,Mortimer,Bestwerthick,mbestwerthickmr@microsoft.com,Male,217.124.4.132,10/24/2019,19,4855.38 +821,Chaunce,Hechlin,chechlinms@goo.ne.jp,Male,197.140.52.246,7/29/2019,1,2219.75 +822,Odella,Casson,ocassonmt@sciencedaily.com,Female,40.211.128.59,3/16/2019,93,3085.53 +823,Shellysheldon,Pallent,spallentmu@youtu.be,Male,153.196.220.186,2/19/2019,19,2695.0 +824,Emelyne,Childes,echildesmv@livejournal.com,Female,126.181.2.21,11/6/2019,13,1095.75 +825,Fred,Calf,fcalfmw@chicagotribune.com,Female,240.193.197.180,11/17/2019,79,3914.36 +826,Dag,Mulliss,dmullissmx@4shared.com,Male,238.137.20.149,8/6/2019,4,3539.27 +827,Georgeanna,Pitcock,gpitcockmy@comsenz.com,Female,102.167.151.225,10/12/2019,84,4585.02 +828,Sunny,Panther,spanthermz@unicef.org,Male,151.172.118.190,1/12/2019,91,4343.08 +829,Belita,Alderson,baldersonn0@blogtalkradio.com,Female,137.76.226.221,1/10/2019,42,3569.01 +830,Ame,Forte,aforten1@sourceforge.net,Female,147.157.177.133,1/8/2019,21,1365.56 +831,Timmie,Rodden,troddenn2@businessweek.com,Male,130.254.151.248,3/26/2019,96,1881.36 +832,Ole,Schafer,oschafern3@about.com,Male,127.222.178.16,3/17/2019,17,2401.6 +833,Patty,Cooling,pcoolingn4@seesaa.net,Female,61.215.62.193,2/11/2019,48,2474.66 +834,Collin,Stute,cstuten5@goo.ne.jp,Male,130.45.80.94,9/10/2019,4,3847.7 +835,Yorgo,Swancott,yswancottn6@intel.com,Male,219.62.66.145,2/25/2019,65,2423.66 +836,Ron,Routley,rroutleyn7@spotify.com,Male,56.197.234.81,8/23/2019,33,2148.92 +837,Stefania,McSkin,smcskinn8@dot.gov,Female,98.31.14.146,3/16/2019,62,1990.6 +838,Salem,Lergan,slergann9@usnews.com,Male,15.104.246.221,6/13/2019,38,2449.21 +839,Dunstan,Kenzie,dkenziena@networksolutions.com,Male,87.134.108.52,11/9/2019,44,4224.03 +840,Hunt,Ledamun,hledamunnb@yahoo.com,Male,176.159.246.215,3/10/2019,86,3822.13 +841,Farrand,Callam,fcallamnc@paypal.com,Female,226.107.7.0,8/27/2019,74,2378.51 +842,Nada,Catlin,ncatlinnd@furl.net,Female,47.100.217.78,9/6/2019,80,4344.19 +843,Carlita,Glavis,cglavisne@thetimes.co.uk,Female,51.186.12.78,12/12/2018,10,1226.08 +844,Lianna,McColm,lmccolmnf@smh.com.au,Female,11.59.43.151,12/24/2018,75,2920.03 +845,Darill,Klempke,dklempkeng@bloomberg.com,Male,130.161.53.81,10/30/2019,26,1470.72 +846,Laughton,Whithalgh,lwhithalghnh@booking.com,Male,245.52.162.163,5/13/2019,95,3958.01 +847,Cammie,Izhakov,cizhakovni@admin.ch,Female,124.164.33.27,4/7/2019,43,2040.2 +848,Marline,Duddell,mduddellnj@opensource.org,Female,170.97.255.200,6/14/2019,35,2449.64 +849,Hillier,Caulder,hcauldernk@npr.org,Male,83.220.85.148,8/30/2019,1,3069.76 +850,Coral,Raffles,crafflesnl@friendfeed.com,Female,149.92.2.58,1/20/2019,13,1301.57 +851,Barb,Dudny,bdudnynm@fc2.com,Female,243.249.246.96,2/19/2019,2,4053.62 +852,Arch,Bente,abentenn@mapy.cz,Male,229.210.219.135,9/9/2019,41,4556.35 +853,Alix,Sheriff,asheriffno@jigsy.com,Female,203.28.108.229,1/30/2019,70,2074.89 +854,Vaughn,Schwaiger,vschwaigernp@webmd.com,Male,112.58.20.107,5/25/2019,5,2348.46 +855,Stearn,Linggood,slinggoodnq@multiply.com,Male,247.71.219.146,11/23/2019,5,3348.25 +856,Doralin,Kleinschmidt,dkleinschmidtnr@ca.gov,Female,30.114.11.63,9/21/2019,29,3475.53 +857,Ali,Treweke,atrewekens@xrea.com,Female,181.217.116.253,1/19/2019,50,4184.66 +858,Brandon,Ogger,boggernt@example.com,Male,19.9.219.173,12/21/2018,53,3270.85 +859,Garth,Sterre,gsterrenu@sina.com.cn,Male,7.170.103.142,12/30/2018,60,4285.48 +860,Elberta,Stooke,estookenv@goo.gl,Female,104.12.213.185,4/7/2019,60,1570.75 +861,Winfield,Peacock,wpeacocknw@liveinternet.ru,Male,214.134.25.83,2/21/2019,76,4428.25 +862,Ernest,Allabarton,eallabartonnx@home.pl,Male,148.170.100.93,4/25/2019,54,2410.98 +863,Florette,Pendle,fpendleny@google.co.uk,Female,163.75.98.87,3/3/2019,25,1877.39 +864,Enrica,Smogur,esmogurnz@jiathis.com,Female,212.86.14.17,10/30/2019,90,1736.18 +865,Selle,Meece,smeeceo0@va.gov,Female,216.204.181.172,12/31/2018,9,4254.26 +866,Leighton,Behninck,lbehnincko1@ted.com,Male,128.137.145.34,7/28/2019,8,4817.49 +867,Dallis,Kildahl,dkildahlo2@ucsd.edu,Male,57.50.158.153,11/29/2019,80,3940.06 +868,Carr,McKeachie,cmckeachieo3@cbsnews.com,Male,155.169.255.5,10/25/2019,92,1248.52 +869,Gwendolin,Twinborough,gtwinborougho4@engadget.com,Female,126.69.215.135,10/31/2019,60,1790.54 +870,Katha,Mains,kmainso5@wired.com,Female,108.80.188.101,9/5/2019,90,1953.27 +871,Anabella,Hawkridge,ahawkridgeo6@elegantthemes.com,Female,194.91.70.106,11/7/2019,33,1067.92 +872,Carney,Moxon,cmoxono7@about.me,Male,243.35.248.83,5/25/2019,46,3541.93 +873,Cynthy,Minette,cminetteo8@unesco.org,Female,198.115.128.127,11/13/2019,17,1202.6 +874,Humfrey,Doogue,hdoogueo9@businesswire.com,Male,118.100.123.208,9/24/2019,21,1883.88 +875,Rosabella,Frowen,rfrowenoa@who.int,Female,168.21.241.150,3/26/2019,12,3747.05 +876,Inger,Benoiton,ibenoitonob@bing.com,Female,62.18.91.144,2/5/2019,55,3668.36 +877,Aldus,McHardy,amchardyoc@google.com,Male,217.43.238.237,2/7/2019,25,3733.76 +878,Thea,Klemke,tklemkeod@aboutads.info,Female,13.193.63.194,9/1/2019,15,2199.75 +879,Nathaniel,Alesio,nalesiooe@prweb.com,Male,45.77.38.94,8/21/2019,88,1398.05 +880,Jo-ann,Thring,jthringof@plala.or.jp,Female,67.45.206.82,3/28/2019,23,1119.69 +881,Betteann,Andreone,bandreoneog@google.it,Female,28.46.236.211,9/21/2019,68,2637.19 +882,Leland,Boulding,lbouldingoh@booking.com,Male,223.0.133.33,6/26/2019,95,1645.04 +883,Rosalia,Sieve,rsieveoi@opera.com,Female,146.244.116.76,11/14/2019,20,3684.84 +884,Pietra,Lillyman,plillymanoj@sphinn.com,Female,241.84.132.180,1/28/2019,100,4262.03 +885,Cosme,Guest,cguestok@chronoengine.com,Male,200.190.189.24,4/16/2019,70,2178.29 +886,Wallie,Telega,wtelegaol@ebay.com,Male,121.243.189.159,4/30/2019,52,1182.3 +887,Lishe,Skillett,lskillettom@umn.edu,Female,195.58.225.2,3/5/2019,71,2012.1 +888,Arleta,Manley,amanleyon@linkedin.com,Female,51.84.250.183,10/15/2019,15,4912.75 +889,Ravi,Willder,rwillderoo@clickbank.net,Male,172.59.196.252,11/3/2019,61,1209.86 +890,Averell,Towner,atownerop@twitpic.com,Male,39.252.161.23,5/12/2019,64,4531.62 +891,Patrice,Dedman,pdedmanoq@marriott.com,Male,210.154.94.25,6/13/2019,74,4735.98 +892,Shem,Girtin,sgirtinor@is.gd,Male,104.118.74.161,11/10/2019,100,4267.43 +893,Francyne,Bransby,fbransbyos@g.co,Female,44.30.38.123,2/4/2019,46,4181.62 +894,Christye,Farbrace,cfarbraceot@hibu.com,Female,112.150.190.191,2/16/2019,23,2095.36 +895,Nadean,Given,ngivenou@spiegel.de,Female,151.241.243.171,4/25/2019,81,2443.82 +896,Cesya,Clutheram,cclutheramov@smh.com.au,Female,165.200.216.167,7/4/2019,31,3937.84 +897,Bax,Goodwins,bgoodwinsow@nhs.uk,Male,11.52.15.206,4/9/2019,91,2252.61 +898,Lewiss,Lamblot,llamblotox@hubpages.com,Male,47.131.77.115,8/30/2019,24,2400.36 +899,Red,Wick,rwickoy@photobucket.com,Male,83.184.219.168,10/21/2019,15,4178.01 +900,Salvatore,Pimblett,spimblettoz@cmu.edu,Male,167.151.230.214,5/15/2019,42,1341.9 +901,Hughie,Bryceson,hbrycesonp0@princeton.edu,Male,196.234.12.37,6/21/2019,62,1336.58 +902,Clayson,Hankinson,chankinsonp1@over-blog.com,Male,23.197.178.40,8/12/2019,99,1615.05 +903,Lilas,Liccardo,lliccardop2@wisc.edu,Female,122.30.29.218,11/8/2019,18,2646.47 +904,Orville,Durrant,odurrantp3@clickbank.net,Male,72.40.168.148,8/12/2019,37,1473.73 +905,Orrin,Skelly,oskellyp4@a8.net,Male,105.220.135.4,5/6/2019,50,1525.97 +906,Tallou,Sandyford,tsandyfordp5@homestead.com,Female,227.225.220.181,2/6/2019,58,4786.43 +907,Quincy,Roseman,qrosemanp6@biglobe.ne.jp,Male,54.163.190.213,7/1/2019,24,4037.23 +908,Tabbie,Kiraly,tkiralyp7@newsvine.com,Male,224.190.131.109,3/13/2019,100,1323.77 +909,Sandy,Matskevich,smatskevichp8@simplemachines.org,Female,2.231.87.52,12/29/2018,82,3517.0 +910,Duane,Dye,ddyep9@nasa.gov,Male,104.68.110.228,10/11/2019,72,3764.03 +911,Vassily,McNeill,vmcneillpa@eepurl.com,Male,224.20.3.98,5/2/2019,93,2130.67 +912,Donalt,Astlet,dastletpb@chron.com,Male,114.210.201.171,5/7/2019,75,2025.04 +913,Nickey,Stobie,nstobiepc@icio.us,Male,185.166.110.244,4/16/2019,71,1045.07 +914,Alejandra,Evenett,aevenettpd@spotify.com,Female,53.71.229.172,3/31/2019,68,3272.6 +915,Malia,Turpey,mturpeype@slashdot.org,Female,100.204.158.195,7/24/2019,23,1887.0 +916,Sancho,Coy,scoypf@unicef.org,Male,172.2.26.180,7/3/2019,57,3139.02 +917,Gabey,Skoyles,gskoylespg@epa.gov,Female,194.148.9.101,3/13/2019,84,2292.4 +918,Bertrando,Ivankin,bivankinph@fda.gov,Male,118.157.82.229,9/22/2019,3,1287.51 +919,Tannie,MacCosty,tmaccostypi@digg.com,Male,72.202.202.95,12/24/2018,82,2588.07 +920,Ranee,Bessent,rbessentpj@imgur.com,Female,127.24.169.67,11/10/2019,54,3444.15 +921,Tiffanie,Trawin,ttrawinpk@marketwatch.com,Female,17.85.226.126,5/24/2019,65,2725.46 +922,Almeria,Gillan,agillanpl@geocities.com,Female,122.181.145.74,11/21/2019,9,4518.15 +923,Myron,Cornuau,mcornuaupm@fema.gov,Male,119.235.159.166,8/23/2019,71,2151.88 +924,Julie,Garmston,jgarmstonpn@istockphoto.com,Female,239.238.200.150,1/14/2019,64,2838.43 +925,Piggy,Gobel,pgobelpo@fastcompany.com,Male,118.158.61.149,2/6/2019,34,3108.47 +926,Gib,Featherstone,gfeatherstonepp@infoseek.co.jp,Male,90.82.112.24,7/12/2019,72,1446.28 +927,Ezri,Roome,eroomepq@bandcamp.com,Male,162.179.9.53,11/8/2019,89,4420.45 +928,Mattias,Bilbie,mbilbiepr@jugem.jp,Male,26.98.219.102,6/29/2019,53,3055.7 +929,Tremain,Puleston,tpulestonps@newsvine.com,Male,57.241.217.97,2/19/2019,74,4113.34 +930,Penrod,Human,phumanpt@amazon.co.jp,Male,191.23.222.227,8/12/2019,14,3914.95 +931,Helyn,Ladell,hladellpu@a8.net,Female,20.100.134.221,4/17/2019,94,2293.8 +932,Enid,Rough,eroughpv@imageshack.us,Female,107.222.42.7,6/17/2019,21,1914.06 +933,Eloise,Rumbold,erumboldpw@meetup.com,Female,43.79.13.253,12/16/2018,59,4639.52 +934,Sol,Merricks,smerrickspx@ow.ly,Male,123.39.195.179,11/1/2019,57,2899.49 +935,Mahmud,Keeney,mkeeneypy@wikispaces.com,Male,72.102.171.49,3/11/2019,6,4225.54 +936,Asia,Bartlosz,abartloszpz@mtv.com,Female,243.106.58.70,12/21/2018,69,1884.34 +937,Christian,Stirman,cstirmanq0@discuz.net,Female,107.80.178.46,8/29/2019,55,2956.9 +938,Alfredo,Adnams,aadnamsq1@washington.edu,Male,37.204.15.227,12/6/2018,15,2349.12 +939,Rudy,Diggins,rdigginsq2@nsw.gov.au,Male,136.105.142.55,10/22/2019,56,4720.66 +940,Valaria,Paulus,vpaulusq3@etsy.com,Female,109.100.3.110,1/2/2019,26,1610.79 +941,Conny,Roels,croelsq4@mozilla.com,Female,208.213.210.29,1/31/2019,54,4096.32 +942,Bucky,Kennan,bkennanq5@pinterest.com,Male,172.225.189.229,8/19/2019,87,4628.59 +943,Iago,Samwyse,isamwyseq6@github.io,Male,89.18.109.205,11/10/2019,60,4746.45 +944,Pietrek,Gori,pgoriq7@reverbnation.com,Male,92.121.178.154,11/5/2019,33,1692.9 +945,Tabina,Kears,tkearsq8@theglobeandmail.com,Female,144.45.170.150,10/3/2019,52,3611.17 +946,Wendye,Sollis,wsollisq9@walmart.com,Female,238.248.64.91,5/1/2019,5,3395.62 +947,Rafferty,Waycot,rwaycotqa@yellowbook.com,Male,56.12.230.243,10/22/2019,65,3819.8 +948,Bendix,Heamus,bheamusqb@adobe.com,Male,249.250.105.13,1/13/2019,1,3871.34 +949,Elfrieda,Gierardi,egierardiqc@uiuc.edu,Female,70.40.147.33,5/15/2019,33,3013.33 +950,Malachi,Sweet,msweetqd@soup.io,Male,45.89.78.169,12/12/2018,80,3668.82 +951,Lanae,Pollendine,lpollendineqe@nasa.gov,Female,95.61.177.183,2/13/2019,1,4889.44 +952,Ryley,Lawry,rlawryqf@scientificamerican.com,Male,125.229.131.211,1/14/2019,2,3286.34 +953,Terri-jo,Jamblin,tjamblinqg@epa.gov,Female,188.157.97.186,6/5/2019,47,2943.87 +954,Leland,Hildred,lhildredqh@scribd.com,Male,225.216.250.143,6/17/2019,56,4864.96 +955,Gabe,Olyff,golyffqi@nba.com,Male,132.213.9.245,4/23/2019,98,1702.76 +956,Madelena,Astling,mastlingqj@samsung.com,Female,30.58.29.118,12/18/2018,84,4673.11 +957,Reinaldo,Kitchingman,rkitchingmanqk@csmonitor.com,Male,188.111.118.234,5/23/2019,75,4450.61 +958,Padgett,Spacey,pspaceyql@google.de,Male,36.237.235.122,11/27/2019,56,1279.87 +959,Rachel,Chezelle,rchezelleqm@domainmarket.com,Female,96.79.189.100,11/24/2019,91,3136.13 +960,Pollyanna,Eggerton,peggertonqn@nsw.gov.au,Female,18.201.58.237,12/19/2018,20,3493.5 +961,Marris,Wincott,mwincottqo@bandcamp.com,Female,184.31.11.215,6/12/2019,8,1515.01 +962,Shae,Mair,smairqp@friendfeed.com,Male,62.3.75.126,5/26/2019,17,1886.62 +963,Rik,Citrine,rcitrineqq@ameblo.jp,Male,185.79.147.211,7/2/2019,34,4809.78 +964,Clare,Bohey,cboheyqr@wunderground.com,Female,107.176.103.42,5/11/2019,88,4309.81 +965,Hayes,Brushfield,hbrushfieldqs@i2i.jp,Male,2.5.51.42,11/26/2019,76,1551.99 +966,Misty,Domico,mdomicoqt@google.pl,Female,39.47.212.202,12/6/2018,70,4670.57 +967,Arthur,Elstub,aelstubqu@independent.co.uk,Male,176.248.255.191,12/30/2018,46,2705.52 +968,Berkeley,Hapgood,bhapgoodqv@technorati.com,Male,178.208.39.27,10/14/2019,22,3380.97 +969,Brose,Kynton,bkyntonqw@arstechnica.com,Male,46.20.210.218,3/5/2019,56,4943.64 +970,Tarah,Deguara,tdeguaraqx@netvibes.com,Female,218.157.37.87,10/15/2019,52,4735.44 +971,Lorie,Tooting,ltootingqy@e-recht24.de,Female,180.29.70.96,5/13/2019,2,3053.29 +972,Consuela,Lyndon,clyndonqz@nature.com,Female,33.99.22.111,10/26/2019,16,1782.96 +973,Heloise,Loges,hlogesr0@ebay.co.uk,Female,65.91.147.32,8/6/2019,91,3905.33 +974,Lamond,Hamnet,lhamnetr1@tripod.com,Male,59.5.218.194,3/21/2019,78,3783.64 +975,Matilda,Clemencet,mclemencetr2@livejournal.com,Female,50.223.87.130,10/4/2019,23,2543.68 +976,Bayard,Roskruge,broskruger3@sitemeter.com,Male,69.240.99.87,7/3/2019,80,1587.29 +977,Benn,Jirak,bjirakr4@delicious.com,Male,128.35.209.194,12/2/2018,44,3277.87 +978,Nahum,Attle,nattler5@tiny.cc,Male,112.43.114.140,6/8/2019,7,2273.81 +979,Evangeline,Ribey,eribeyr6@google.fr,Female,81.105.199.64,3/29/2019,67,4510.15 +980,Ryann,Ellul,rellulr7@ning.com,Female,240.217.190.216,12/13/2018,84,1668.81 +981,Ermina,Venn,evennr8@de.vu,Female,133.154.240.217,2/13/2019,97,1524.47 +982,Toby,Durward,tdurwardr9@state.tx.us,Male,121.122.162.100,6/18/2019,93,2462.12 +983,Frederic,Scraney,fscraneyra@gnu.org,Male,169.185.152.85,9/1/2019,5,4899.03 +984,Marty,Phebey,mphebeyrb@tripadvisor.com,Male,168.107.107.230,12/6/2018,84,4793.66 +985,Harris,Lockney,hlockneyrc@nifty.com,Male,93.129.49.110,8/4/2019,49,1798.63 +986,Eugen,Leverton,elevertonrd@instagram.com,Male,159.232.54.24,9/21/2019,60,3305.1 +987,Gabie,Beardwood,gbeardwoodre@theatlantic.com,Male,20.18.125.82,1/24/2019,5,1946.11 +988,Myrwyn,Pesterfield,mpesterfieldrf@scientificamerican.com,Male,145.133.177.91,8/13/2019,25,3808.27 +989,Mercy,Chadd,mchaddrg@51.la,Female,185.164.11.233,6/3/2019,40,4001.54 +990,Cornelle,Conford,cconfordrh@behance.net,Female,21.225.190.101,1/23/2019,37,3044.81 +991,Maynord,Till,mtillri@youtube.com,Male,152.132.239.240,7/13/2019,100,1128.62 +992,Evelin,Dmitrichenko,edmitrichenkorj@weibo.com,Male,209.57.214.249,7/17/2019,97,1964.24 +993,Quincy,Rupel,qrupelrk@github.io,Male,64.185.162.129,7/17/2019,98,3247.38 +994,Althea,Ternault,aternaultrl@hao123.com,Female,67.166.119.252,9/5/2019,71,1679.32 +995,Tracy,Usmar,tusmarrm@archive.org,Female,218.147.181.108,4/29/2019,13,4937.95 +996,Frank,Thebeaud,fthebeaudrn@phpbb.com,Male,80.246.35.156,3/21/2019,91,3229.53 +997,Kerk,Feathersby,kfeathersbyro@i2i.jp,Male,216.252.23.125,4/2/2019,38,2610.64 +998,Brigid,Worvell,bworvellrp@cnn.com,Female,48.50.178.158,5/19/2019,35,1974.9 +999,Ike,Van der Merwe,ivandermerwerq@craigslist.org,Male,103.61.116.181,8/14/2019,56,2115.14 +1000,Mark,Dallison,mdallisonrr@cdc.gov,Male,187.245.203.40,8/8/2019,73,1286.22 diff --git a/scripts/MOCK_DATA_out.csv b/scripts/MOCK_DATA_out.csv new file mode 100644 index 0000000..613a3d3 --- /dev/null +++ b/scripts/MOCK_DATA_out.csv @@ -0,0 +1,1001 @@ +id,first_name,last_name,email,gender,ip_address,date,parts,unit cost +1,Lurette,Rounsefull,lrounsefull0@cbsnews.com,Female,208.52.245.134,4/11/2019,1,1425.64 +2,Peder,Heineking,pheineking1@mac.com,Male,216.60.184.211,5/15/2019,79,2666.57 +3,Haydon,Birdsall,hbirdsall2@spotify.com,Male,161.74.94.92,10/18/2019,27,2377.64 +4,Barbe,Mouse,bmouse3@elegantthemes.com,Female,97.202.107.43,5/16/2019,20,3375.08 +5,Sherwin,Wealthall,swealthall4@whitehouse.gov,Male,155.14.42.127,3/5/2019,77,4147.29 +6,Ase,Pringle,apringle5@sfgate.com,Male,147.34.186.244,10/19/2019,33,4551.61 +7,Sibylla,Weiss,sweiss6@icq.com,Female,196.247.130.201,3/7/2019,21,2154.9 +8,Richy,Dougal,rdougal7@yelp.com,Male,91.176.172.223,12/27/2018,97,3403.75 +9,Kelsey,Ludlamme,kludlamme8@cyberchimps.com,Male,121.112.184.219,5/2/2019,81,4930.75 +10,Fae,Driffe,fdriffe9@friendfeed.com,Female,219.51.51.253,4/7/2019,57,3100.78 +11,Dannye,Sleit,dsleita@independent.co.uk,Female,160.208.93.210,10/4/2019,88,4401.37 +12,Kessia,Gilkes,kgilkesb@w3.org,Female,30.178.57.187,8/26/2019,82,2369.86 +13,Rickie,Persich,rpersichc@mapquest.com,Male,50.235.20.153,9/13/2019,94,4557.41 +14,Margaretta,Shearn,mshearnd@buzzfeed.com,Female,172.102.242.250,3/14/2019,72,2948.22 +15,Malcolm,Winnard,mwinnarde@yale.edu,Male,185.241.158.149,5/15/2019,82,4723.48 +16,Lazarus,Summerlie,lsummerlief@comsenz.com,Male,111.172.107.99,11/8/2019,89,2845.05 +17,Bord,Cato,bcatog@edublogs.org,Male,177.53.70.102,4/2/2019,32,4933.24 +18,Weber,Guslon,wguslonh@go.com,Male,115.2.137.252,12/10/2018,94,4348.69 +19,Stearne,MacPadene,smacpadenei@pbs.org,Male,35.83.181.137,8/4/2019,82,4950.67 +20,Bekki,Remirez,bremirezj@arstechnica.com,Female,12.111.119.238,2/17/2019,62,1510.53 +21,Desiri,Gaskins,dgaskinsk@prlog.org,Female,43.30.140.105,9/8/2019,64,4641.51 +22,Mata,Beaten,mbeatenl@constantcontact.com,Male,13.90.195.102,4/6/2019,84,1942.72 +23,Mattias,Bullas,mbullasm@fastcompany.com,Male,37.242.45.155,7/21/2019,95,3321.2 +24,Sloan,Graveson,sgravesonn@mozilla.com,Male,124.94.155.193,9/28/2019,7,1786.92 +25,Isak,Juste,ijusteo@google.ru,Male,249.233.28.164,8/18/2019,34,1682.19 +26,Teri,Thomann,tthomannp@wp.com,Female,168.237.145.237,11/16/2019,18,4480.64 +27,Rhoda,Gotcher,rgotcherq@businessinsider.com,Female,23.141.180.40,4/1/2019,19,4514.47 +28,Helen-elizabeth,McEniry,hmceniryr@oakley.com,Female,43.143.23.204,12/14/2018,40,4146.98 +29,Aguie,Brecknall,abrecknalls@nifty.com,Male,69.49.176.116,1/19/2019,96,4720.87 +30,Wildon,Keenlyside,wkeenlysidet@blogtalkradio.com,Male,245.109.45.71,3/26/2019,22,1835.57 +31,Ynez,Lots,ylotsu@abc.net.au,Female,172.185.2.14,7/17/2019,68,4872.13 +32,Norman,Worgen,nworgenv@constantcontact.com,Male,143.221.2.185,3/17/2019,29,4768.51 +33,Ker,Bown,kbownw@bandcamp.com,Male,30.5.53.61,6/14/2019,22,3091.25 +34,Ivy,Nibloe,inibloex@noaa.gov,Female,121.242.246.184,7/31/2019,15,4048.07 +35,Coop,Waiting,cwaitingy@prlog.org,Male,215.155.212.35,1/31/2019,59,1388.34 +36,Philipa,Bigglestone,pbigglestonez@networkadvertising.org,Female,235.113.203.193,1/11/2019,49,2571.05 +37,Konstantine,Reavell,kreavell10@pcworld.com,Male,212.115.157.70,1/15/2019,32,1521.5 +38,Neddie,Peckham,npeckham11@shareasale.com,Male,165.199.0.54,11/10/2019,4,4159.67 +39,Veronique,Crocetti,vcrocetti12@bravesites.com,Female,155.94.241.75,11/27/2019,70,1682.83 +40,Stanford,Folk,sfolk13@walmart.com,Male,115.78.90.21,8/20/2019,21,1049.63 +41,Tamera,Bacchus,tbacchus14@techcrunch.com,Female,125.75.125.6,2/3/2019,44,3804.48 +42,Andromache,Hakonsson,ahakonsson15@ft.com,Female,216.82.36.186,8/3/2019,38,3643.39 +43,Elnora,Amos,eamos16@domainmarket.com,Female,233.33.105.19,11/12/2019,97,1234.57 +44,Andrus,Hegge,ahegge17@arstechnica.com,Male,48.49.214.246,9/21/2019,79,4728.49 +45,Grady,Rodell,grodell18@ox.ac.uk,Male,69.64.12.243,4/22/2019,64,3514.69 +46,Maryann,Shaddick,mshaddick19@boston.com,Female,145.192.46.176,8/7/2019,43,1944.22 +47,Gaelan,Kirtley,gkirtley1a@topsy.com,Male,145.162.10.133,9/14/2019,39,2598.76 +48,Denver,Kennicott,dkennicott1b@amazon.com,Male,179.116.133.53,12/18/2018,10,2243.1 +49,Bordy,Saw,bsaw1c@cmu.edu,Male,6.22.237.36,1/27/2019,80,2196.95 +50,Gwenette,Iston,giston1d@multiply.com,Female,211.116.16.113,3/29/2019,34,2230.26 +51,Hedvig,Simmers,hsimmers1e@uol.com.br,Female,155.181.252.255,8/23/2019,7,3711.71 +52,Jannel,Sarre,jsarre1f@tuttocitta.it,Female,127.187.194.109,6/4/2019,82,2641.84 +53,Rusty,Saffill,rsaffill1g@mozilla.com,Male,152.175.79.114,3/24/2019,63,4482.27 +54,Shelden,Brandin,sbrandin1h@jugem.jp,Male,218.156.254.18,9/29/2019,12,1487.3 +55,Rusty,Dumbare,rdumbare1i@purevolume.com,Male,49.252.90.82,3/2/2019,26,4880.92 +56,Agace,Davidovitz,adavidovitz1j@mtv.com,Female,187.52.194.143,4/21/2019,59,4803.16 +57,Ross,McGarva,rmcgarva1k@upenn.edu,Male,41.191.56.78,8/23/2019,97,4860.07 +58,Kayne,Maruszewski,kmaruszewski1l@stanford.edu,Male,41.228.104.199,7/18/2019,23,1358.8 +59,Stavros,Comar,scomar1m@google.ru,Male,5.91.47.215,6/20/2019,66,1423.4 +60,Ruperto,Proudlock,rproudlock1n@hostgator.com,Male,105.156.116.198,1/20/2019,28,4631.21 +61,Milka,Marvel,mmarvel1o@devhub.com,Female,9.251.162.16,5/26/2019,80,3446.13 +62,Zared,Pallesen,zpallesen1p@ted.com,Male,246.159.163.241,6/13/2019,25,2949.72 +63,Sharona,Muscat,smuscat1q@youtube.com,Female,192.207.68.239,1/17/2019,53,4522.67 +64,Annabella,Persitt,apersitt1r@china.com.cn,Female,5.217.19.64,7/26/2019,52,2113.55 +65,Tawsha,Constantine,tconstantine1s@4shared.com,Female,6.89.103.116,6/15/2019,38,2727.92 +66,Leonard,Pavlasek,lpavlasek1t@theglobeandmail.com,Male,42.64.175.217,2/16/2019,85,2694.45 +67,Kalvin,Caudle,kcaudle1u@baidu.com,Male,193.11.181.80,4/23/2019,18,2549.05 +68,Jessica,Cumbridge,jcumbridge1v@hugedomains.com,Female,238.81.101.205,12/18/2018,80,2877.37 +69,Iorgo,Hampshaw,ihampshaw1w@youtu.be,Male,35.99.25.88,4/15/2019,100,4485.79 +70,Sherlocke,Kerswell,skerswell1x@zdnet.com,Male,201.53.40.240,9/5/2019,6,4147.46 +71,Rikki,Blodg,rblodg1y@admin.ch,Male,233.254.145.162,9/20/2019,41,4950.16 +72,Leoine,MacInnes,lmacinnes1z@joomla.org,Female,76.138.109.238,7/23/2019,45,3870.58 +73,Leicester,O'Haire,lohaire20@nba.com,Male,51.179.242.230,8/7/2019,23,2243.91 +74,Bennett,Jankowski,bjankowski21@jugem.jp,Male,248.133.185.229,6/4/2019,67,2448.41 +75,Josias,Wardingley,jwardingley22@bigcartel.com,Male,128.111.46.189,8/22/2019,2,4954.97 +76,Farrand,Edon,fedon23@networkadvertising.org,Female,181.161.32.177,3/30/2019,95,3728.89 +77,Tirrell,Daugherty,tdaugherty24@miitbeian.gov.cn,Male,202.140.213.72,11/9/2019,36,3436.25 +78,Celeste,Odby,codby25@answers.com,Female,152.36.106.124,6/16/2019,12,1327.35 +79,Jory,Roomes,jroomes26@usa.gov,Male,124.197.56.246,7/2/2019,62,3910.3 +80,Saudra,Woodham,swoodham27@smh.com.au,Female,109.122.138.13,4/17/2019,22,3553.65 +81,Renaldo,Calow,rcalow28@cloudflare.com,Male,108.38.150.172,12/5/2018,98,3790.92 +82,Chrissie,Wynch,cwynch29@de.vu,Female,113.58.215.184,5/25/2019,54,3925.41 +83,Boris,Ilyas,bilyas2a@webeden.co.uk,Male,98.65.148.122,1/26/2019,4,2722.03 +84,Zach,McReynolds,zmcreynolds2b@about.com,Male,169.251.18.46,3/25/2019,33,2238.47 +85,Pip,Puttan,pputtan2c@multiply.com,Male,6.160.216.170,10/23/2019,20,1502.59 +86,Lenore,Shafto,lshafto2d@globo.com,Female,144.169.11.70,1/17/2019,5,2162.94 +87,Maggie,Dryden,mdryden2e@cpanel.net,Female,203.155.129.86,3/12/2019,76,3017.41 +88,Madeleine,Alflatt,malflatt2f@spotify.com,Female,38.43.105.230,6/3/2019,70,4950.07 +89,Jojo,Niblock,jniblock2g@usgs.gov,Female,241.182.83.206,6/20/2019,98,3224.06 +90,Chan,Lebbern,clebbern2h@about.me,Male,129.233.179.181,5/31/2019,14,3407.91 +91,Juanita,O'Neil,joneil2i@sina.com.cn,Female,196.212.243.128,4/21/2019,4,1238.45 +92,Albina,Nestoruk,anestoruk2j@rakuten.co.jp,Female,173.60.28.232,11/25/2019,2,3850.73 +93,Gerrard,Lowrance,glowrance2k@huffingtonpost.com,Male,65.158.65.49,5/30/2019,56,2495.36 +94,Enrique,Borrel,eborrel2l@slashdot.org,Male,234.74.144.119,11/11/2019,89,1230.11 +95,Sheppard,Millward,smillward2m@plala.or.jp,Male,30.207.143.30,9/13/2019,14,4656.55 +96,Karna,Zisneros,kzisneros2n@comcast.net,Female,207.85.89.67,4/30/2019,40,1087.58 +97,Mohandas,Abbitt,mabbitt2o@cocolog-nifty.com,Male,157.202.50.94,2/2/2019,18,4141.99 +98,Alena,McVee,amcvee2p@so-net.ne.jp,Female,35.120.251.203,9/28/2019,15,4863.32 +99,Lanita,Sommerlin,lsommerlin2q@mozilla.com,Female,63.103.18.73,2/17/2019,69,4424.01 +100,Celine,Huddlestone,chuddlestone2r@ask.com,Female,207.219.182.50,6/24/2019,92,4185.16 +101,Jan,Vorley,jvorley2s@bbc.co.uk,Male,24.122.66.16,10/7/2019,88,4856.43 +102,Gordon,Burness,gburness2t@wired.com,Male,251.54.167.76,7/28/2019,77,1249.9 +103,Doris,Dey,ddey2u@youtube.com,Female,105.167.122.156,5/18/2019,95,2541.59 +104,Colby,Ashurst,cashurst2v@wix.com,Male,93.195.66.138,9/14/2019,49,3987.84 +105,Phyllida,Brookson,pbrookson2w@apple.com,Female,15.169.21.114,4/8/2019,10,4565.43 +106,Jeramie,Crasswell,jcrasswell2x@posterous.com,Male,205.238.4.171,7/19/2019,10,1042.23 +107,Lynsey,Plum,lplum2y@blogtalkradio.com,Female,184.41.245.159,11/15/2019,27,1913.04 +108,Dorella,Dulanty,ddulanty2z@discuz.net,Female,29.143.190.208,3/15/2019,71,1939.76 +109,Ruthi,Rishworth,rrishworth30@liveinternet.ru,Female,107.240.252.87,11/14/2019,25,4378.32 +110,Petrina,Featherstonehaugh,pfeatherstonehaugh31@umich.edu,Female,139.60.87.163,5/3/2019,86,2273.95 +111,Karla,Dechelle,kdechelle32@google.cn,Female,147.220.216.41,11/22/2019,79,2940.0 +112,Joshia,Fishlock,jfishlock33@booking.com,Male,158.103.241.179,7/8/2019,68,3644.03 +113,Junia,Maryman,jmaryman34@jigsy.com,Female,216.105.242.205,5/15/2019,97,2466.85 +114,Mabelle,Warmisham,mwarmisham35@mysql.com,Female,246.108.73.60,2/5/2019,43,1904.03 +115,Phaidra,Fleet,pfleet36@1und1.de,Female,83.157.253.208,2/13/2019,21,1765.81 +116,Flo,Mardlin,fmardlin37@unicef.org,Female,31.252.115.185,12/11/2018,14,3875.57 +117,Crin,Aspinall,caspinall38@pen.io,Female,152.151.189.190,9/21/2019,76,3615.12 +118,Lorrie,Carnaman,lcarnaman39@sina.com.cn,Male,182.12.111.81,2/1/2019,66,1537.87 +119,Barnabas,Denslow,bdenslow3a@dell.com,Male,109.193.202.177,10/17/2019,71,1352.18 +120,Bennett,Saffen,bsaffen3b@cloudflare.com,Male,180.151.92.220,3/8/2019,19,3352.34 +121,Jonell,Menauteau,jmenauteau3c@yellowbook.com,Female,49.115.246.26,9/25/2019,26,4823.26 +122,Alicia,Jakubovicz,ajakubovicz3d@nps.gov,Female,239.158.188.213,3/27/2019,32,1051.47 +123,Nikolai,Raselles,nraselles3e@histats.com,Male,94.104.99.187,5/13/2019,43,1043.08 +124,Nikolaos,Loder,nloder3f@google.it,Male,19.118.58.253,3/17/2019,73,1254.57 +125,Sheffield,Muncey,smuncey3g@elpais.com,Male,77.244.5.146,7/28/2019,67,1704.55 +126,Marni,Cowin,mcowin3h@google.com.br,Female,61.232.91.222,7/8/2019,50,1367.66 +127,Storm,Kennedy,skennedy3i@wikispaces.com,Female,191.12.223.90,7/31/2019,77,3871.16 +128,Trent,Gutierrez,tgutierrez3j@sourceforge.net,Male,113.242.15.190,8/10/2019,81,4352.61 +129,Dodi,Tiller,dtiller3k@dailymail.co.uk,Female,0.240.169.55,11/21/2019,35,4607.1 +130,Vivie,Sture,vsture3l@yelp.com,Female,46.11.195.152,10/27/2019,82,2166.72 +131,Nerissa,Giddins,ngiddins3m@whitehouse.gov,Female,25.100.68.103,3/11/2019,81,4326.19 +132,Emalee,Huckerby,ehuckerby3n@europa.eu,Female,249.239.20.180,2/14/2019,15,1607.1 +133,Cesare,Deave,cdeave3o@google.es,Male,215.226.177.3,12/16/2018,64,3602.38 +134,Britni,Neagle,bneagle3p@is.gd,Female,238.87.102.252,5/1/2019,95,3254.36 +135,Andrej,Gandrich,agandrich3q@addtoany.com,Male,122.104.65.90,8/14/2019,41,3220.23 +136,Cody,Worssam,cworssam3r@chronoengine.com,Male,221.63.128.0,11/11/2019,7,4570.98 +137,Mord,Bradford,mbradford3s@utexas.edu,Male,168.172.15.29,2/8/2019,52,2842.69 +138,Madeline,Golledge,mgolledge3t@japanpost.jp,Female,180.54.218.245,8/1/2019,31,2426.19 +139,Clarie,Tunn,ctunn3u@sun.com,Female,170.49.242.95,3/30/2019,6,2375.77 +140,Seana,Gatherell,sgatherell3v@myspace.com,Female,229.46.37.246,7/1/2019,83,3626.95 +141,Veronica,Fielder,vfielder3w@hugedomains.com,Female,211.136.81.248,10/5/2019,76,4578.69 +142,Kris,Searby,ksearby3x@constantcontact.com,Male,75.40.234.246,5/14/2019,79,3491.43 +143,Dorita,Henze,dhenze3y@mozilla.com,Female,19.91.34.111,3/5/2019,23,3869.59 +144,Ada,Sydall,asydall3z@netlog.com,Female,63.122.73.224,9/28/2019,5,3118.74 +145,Josias,Vanichkov,jvanichkov40@amazon.co.jp,Male,111.18.27.20,3/11/2019,82,1807.86 +146,Payton,Chesney,pchesney41@forbes.com,Male,253.128.22.165,6/1/2019,93,1101.65 +147,Arabele,Marcome,amarcome42@bbb.org,Female,25.78.95.237,8/25/2019,20,3268.49 +148,Dick,Egre,degre43@discovery.com,Male,136.113.116.45,3/3/2019,35,3221.24 +149,Charleen,Eckh,ceckh44@shareasale.com,Female,251.215.112.50,6/30/2019,47,3524.18 +150,Minne,Lawfull,mlawfull45@shinystat.com,Female,15.159.68.230,7/31/2019,56,3915.18 +151,Timi,Pelchat,tpelchat46@issuu.com,Female,218.157.149.25,11/17/2019,53,1224.92 +152,Gabrila,Goosnell,ggoosnell47@hugedomains.com,Female,79.133.249.98,12/28/2018,30,4687.86 +153,Casie,Brimm,cbrimm48@4shared.com,Female,252.229.161.4,2/15/2019,98,1455.37 +154,Leeland,Dewi,ldewi49@multiply.com,Male,81.68.121.138,3/25/2019,63,4518.04 +155,Pascal,Garred,pgarred4a@facebook.com,Male,223.70.91.166,5/3/2019,71,2996.67 +156,Lazaro,Manktelow,lmanktelow4b@wikia.com,Male,185.80.62.190,7/21/2019,82,1094.16 +157,Sandi,Montgomery,smontgomery4c@java.com,Female,190.222.21.13,11/17/2019,21,2832.31 +158,Valentine,Jimes,vjimes4d@about.com,Female,74.198.243.183,5/1/2019,53,1644.56 +159,Erika,Ferraresi,eferraresi4e@google.fr,Female,54.193.54.25,5/19/2019,21,4436.52 +160,Nerta,Zaczek,nzaczek4f@spotify.com,Female,108.17.93.214,2/22/2019,81,2156.82 +161,Lucita,Harte,lharte4g@nasa.gov,Female,193.242.177.185,12/21/2018,64,3544.36 +162,Jedidiah,Danielsohn,jdanielsohn4h@accuweather.com,Male,245.98.253.52,9/16/2019,1,2115.11 +163,Lorettalorna,Quarrie,lquarrie4i@fc2.com,Female,76.173.212.93,6/13/2019,4,1466.75 +164,Rich,Tryhorn,rtryhorn4j@moonfruit.com,Male,143.167.201.182,10/7/2019,1,1661.04 +165,Gardie,Karlqvist,gkarlqvist4k@so-net.ne.jp,Male,249.11.192.35,8/12/2019,6,3746.95 +166,Xylia,Penna,xpenna4l@dailymotion.com,Female,180.58.51.110,11/28/2019,61,3441.57 +167,Axel,Renackowna,arenackowna4m@tripod.com,Male,146.67.140.217,3/7/2019,78,3550.93 +168,Chen,Fulton,cfulton4n@columbia.edu,Male,146.169.34.152,4/2/2019,74,2383.26 +169,Alon,Cufley,acufley4o@photobucket.com,Male,125.231.215.140,4/16/2019,65,1732.78 +170,Koo,Gumm,kgumm4p@php.net,Female,243.153.77.38,3/21/2019,48,3721.4 +171,Korey,Weatherdon,kweatherdon4q@blogger.com,Male,240.168.248.218,3/12/2019,77,3795.59 +172,Lena,Stannus,lstannus4r@lulu.com,Female,109.85.91.216,12/5/2018,46,2634.33 +173,Elijah,Westney,ewestney4s@noaa.gov,Male,158.146.220.98,8/7/2019,27,4530.75 +174,Eachelle,Schiefersten,eschiefersten4t@symantec.com,Female,54.128.102.166,9/15/2019,87,2940.88 +175,Georgeanne,Gotthard.sf,ggotthardsf4u@geocities.com,Female,86.43.67.105,1/9/2019,37,2319.01 +176,Frazier,Feldbrin,ffeldbrin4v@joomla.org,Male,184.234.191.22,10/14/2019,23,4596.74 +177,Bancroft,Alvarez,balvarez4w@cisco.com,Male,226.3.76.213,7/28/2019,21,3413.13 +178,Ricky,Lyles,rlyles4x@abc.net.au,Male,156.11.73.17,11/28/2019,6,1870.07 +179,Lorettalorna,Bomfield,lbomfield4y@virginia.edu,Female,37.210.36.178,6/20/2019,66,1127.34 +180,Catrina,Ruse,cruse4z@exblog.jp,Female,81.216.141.90,12/5/2018,34,2485.16 +181,Loleta,Pawels,lpawels50@merriam-webster.com,Female,176.42.193.141,6/10/2019,84,4221.89 +182,Hedvige,Commings,hcommings51@domainmarket.com,Female,138.3.249.198,1/29/2019,8,3910.06 +183,Dmitri,McCrory,dmccrory52@mit.edu,Male,135.37.103.219,7/28/2019,64,2804.83 +184,Hendrika,Shawyer,hshawyer53@xinhuanet.com,Female,16.30.34.147,2/20/2019,65,1706.29 +185,Lorilee,Dunlop,ldunlop54@ed.gov,Female,111.241.90.104,5/10/2019,75,4965.63 +186,Jerad,Faunch,jfaunch55@blogtalkradio.com,Male,139.35.31.167,3/18/2019,93,4404.83 +187,Gualterio,Eary,geary56@illinois.edu,Male,59.170.22.192,10/2/2019,49,3569.07 +188,Barby,Jikylls,bjikylls57@deviantart.com,Female,22.44.213.16,4/7/2019,75,4908.44 +189,Jabez,Mathiot,jmathiot58@w3.org,Male,93.194.63.80,5/5/2019,64,2744.04 +190,Worthy,Edland,wedland59@barnesandnoble.com,Male,4.66.208.56,11/12/2019,51,4272.28 +191,Doralyn,Braunstein,dbraunstein5a@youtube.com,Female,68.179.11.250,3/1/2019,37,3713.51 +192,Mallory,Eyres,meyres5b@google.com.hk,Female,222.214.3.63,7/22/2019,57,3522.06 +193,Louie,Dunkley,ldunkley5c@cdc.gov,Male,154.18.175.128,7/10/2019,51,2901.79 +194,Elbert,Kenvin,ekenvin5d@ftc.gov,Male,206.116.235.21,2/23/2019,75,4198.55 +195,Sean,Hankin,shankin5e@virginia.edu,Female,32.170.127.155,7/7/2019,76,4284.24 +196,Tamiko,O'Fogarty,tofogarty5f@comsenz.com,Female,249.124.65.230,2/27/2019,97,1816.59 +197,Dana,Caress,dcaress5g@bandcamp.com,Female,63.163.104.0,6/11/2019,70,4546.28 +198,Starla,Bicksteth,sbicksteth5h@deviantart.com,Female,93.41.109.63,3/6/2019,75,1536.56 +199,Olly,Chalmers,ochalmers5i@nature.com,Male,206.17.239.226,6/1/2019,99,2617.06 +200,Ermengarde,Laible,elaible5j@alibaba.com,Female,232.255.191.98,4/14/2019,7,2122.32 +201,Melloney,Stalf,mstalf5k@constantcontact.com,Female,254.159.238.133,3/11/2019,17,1829.95 +202,Aggy,Sandry,asandry5l@chicagotribune.com,Female,88.162.78.17,4/23/2019,82,1228.42 +203,Tuesday,Brunning,tbrunning5m@microsoft.com,Female,24.185.56.166,12/2/2018,25,2420.45 +204,Graehme,Marconi,gmarconi5n@forbes.com,Male,134.166.130.121,1/15/2019,29,3650.99 +205,Susi,Casillas,scasillas5o@jimdo.com,Female,130.75.119.191,4/6/2019,26,3164.59 +206,Bunny,Bollands,bbollands5p@privacy.gov.au,Female,73.155.139.92,7/20/2019,94,1459.89 +207,Corrine,Bythway,cbythway5q@ucsd.edu,Female,152.20.150.152,12/30/2018,74,1997.35 +208,Dannye,Adshede,dadshede5r@netlog.com,Female,210.46.12.79,8/9/2019,28,2915.74 +209,Gerald,Waiton,gwaiton5s@1und1.de,Male,47.243.251.9,5/18/2019,66,3698.92 +210,Belia,Hatherley,bhatherley5t@dot.gov,Female,3.253.140.62,10/2/2019,54,1089.69 +211,Terrell,Witherup,twitherup5u@ibm.com,Male,125.43.97.27,5/20/2019,97,3331.73 +212,Vic,Kliner,vkliner5v@cargocollective.com,Male,91.117.26.173,1/22/2019,12,1020.32 +213,Mayor,Drover,mdrover5w@comsenz.com,Male,165.45.244.175,9/18/2019,83,1282.01 +214,Didi,Kanwell,dkanwell5x@mysql.com,Female,249.71.28.189,1/25/2019,39,3401.56 +215,Lothario,Heyworth,lheyworth5y@patch.com,Male,204.254.193.144,6/27/2019,14,2392.22 +216,Adi,Bertome,abertome5z@washingtonpost.com,Female,247.98.53.39,3/19/2019,67,1188.17 +217,Zebadiah,Kryzhov,zkryzhov60@columbia.edu,Male,126.42.169.163,11/28/2019,85,2177.47 +218,Putnam,Wallworke,pwallworke61@sourceforge.net,Male,54.55.143.193,4/5/2019,72,4454.14 +219,Amery,Hitchens,ahitchens62@harvard.edu,Male,48.224.217.2,6/13/2019,64,3615.62 +220,Joana,Davitti,jdavitti63@ebay.co.uk,Female,62.165.254.131,3/4/2019,80,3629.81 +221,Kathleen,Tuer,ktuer64@biblegateway.com,Female,5.70.130.77,3/11/2019,13,1608.46 +222,Renaldo,Campbell-Dunlop,rcampbelldunlop65@skyrock.com,Male,26.131.233.63,12/29/2018,50,3202.62 +223,Titus,Ault,tault66@elpais.com,Male,165.158.147.201,7/2/2019,84,4835.57 +224,Gamaliel,Kilfedder,gkilfedder67@hostgator.com,Male,84.168.17.247,12/23/2018,9,4909.15 +225,Stewart,Boylund,sboylund68@liveinternet.ru,Male,225.118.153.204,6/28/2019,11,3319.59 +226,Jo,Kitchiner,jkitchiner69@skype.com,Female,59.124.146.200,2/6/2019,67,1600.09 +227,Elvis,Fosken,efosken6a@pcworld.com,Male,205.87.85.15,9/9/2019,6,3922.34 +228,Cammie,Danson,cdanson6b@narod.ru,Female,56.105.230.103,2/13/2019,65,1885.94 +229,Fabiano,Garaghan,fgaraghan6c@ezinearticles.com,Male,78.123.49.176,7/20/2019,51,3114.09 +230,Ailina,Givens,agivens6d@cbsnews.com,Female,60.180.138.180,7/5/2019,89,4535.53 +231,Armstrong,Dunkerly,adunkerly6e@independent.co.uk,Male,90.216.21.184,2/26/2019,14,1990.77 +232,Catharine,Matityahu,cmatityahu6f@alibaba.com,Female,57.63.241.97,3/10/2019,95,3363.25 +233,Sile,Glassman,sglassman6g@google.com.au,Female,69.8.60.158,9/2/2019,51,1557.41 +234,Benyamin,Scantleberry,bscantleberry6h@constantcontact.com,Male,130.141.87.136,2/28/2019,73,2950.29 +235,Mendel,Whether,mwhether6i@google.com,Male,241.33.68.87,8/7/2019,82,1090.67 +236,Marcos,Everitt,meveritt6j@yelp.com,Male,233.19.226.38,3/31/2019,37,1052.69 +237,Missie,Eastment,meastment6k@statcounter.com,Female,70.194.212.197,12/20/2018,78,4585.45 +238,Tim,Godfray,tgodfray6l@ucla.edu,Male,200.47.142.40,2/15/2019,5,1682.26 +239,Aguste,Pinney,apinney6m@posterous.com,Male,230.75.22.90,5/30/2019,41,2301.61 +240,Matthias,Francesconi,mfrancesconi6n@biglobe.ne.jp,Male,105.93.88.19,12/8/2018,67,4462.69 +241,Donna,Luckes,dluckes6o@over-blog.com,Female,213.3.126.62,7/2/2019,16,2107.3 +242,Nathanial,Spurden,nspurden6p@microsoft.com,Male,230.177.142.225,3/28/2019,78,1795.33 +243,Stanford,Keets,skeets6q@sbwire.com,Male,192.100.251.103,5/30/2019,60,1912.38 +244,Joly,Mont,jmont6r@technorati.com,Female,14.164.142.106,4/29/2019,23,4036.1 +245,Tyrus,Reasce,treasce6s@ibm.com,Male,12.231.0.1,12/15/2018,60,2707.42 +246,Lee,MacKeogh,lmackeogh6t@woothemes.com,Male,182.53.212.225,12/26/2018,49,1052.96 +247,Valeria,Le Hucquet,vlehucquet6u@cisco.com,Female,155.224.213.71,1/8/2019,67,1292.01 +248,Jillana,Breddy,jbreddy6v@fc2.com,Female,97.42.41.207,1/27/2019,79,2603.53 +249,Alic,Bergeau,abergeau6w@fema.gov,Male,247.140.30.46,10/2/2019,61,1209.85 +250,Cairistiona,Meredith,cmeredith6x@hhs.gov,Female,70.70.142.81,4/12/2019,17,3084.34 +251,Baird,Hollerin,bhollerin6y@issuu.com,Male,22.99.57.132,9/29/2019,50,2427.97 +252,Leonard,Caldecot,lcaldecot6z@vistaprint.com,Male,181.234.61.189,1/17/2019,4,4714.6 +253,Frants,Cochrane,fcochrane70@usgs.gov,Male,243.153.97.44,10/25/2019,7,2131.81 +254,Gertrud,Enticknap,genticknap71@csmonitor.com,Female,252.82.226.210,5/21/2019,11,2407.13 +255,Sullivan,Chattington,schattington72@pinterest.com,Male,155.193.236.102,1/10/2019,82,4204.53 +256,Taite,Sighard,tsighard73@dell.com,Male,201.139.42.108,7/13/2019,40,3983.56 +257,Rozina,Stannas,rstannas74@eventbrite.com,Female,175.179.96.178,1/6/2019,67,4645.75 +258,Sanson,Trevon,strevon75@patch.com,Male,40.224.2.112,5/22/2019,69,4383.12 +259,Torrey,Gilhoolie,tgilhoolie76@cdc.gov,Male,210.149.121.27,6/3/2019,44,2232.38 +260,Lauri,Lackeye,llackeye77@ted.com,Female,104.17.18.94,6/14/2019,21,3534.19 +261,Rica,Vineall,rvineall78@craigslist.org,Female,164.92.184.86,7/29/2019,67,2725.57 +262,Dane,Youell,dyouell79@flavors.me,Male,33.252.240.196,12/2/2018,78,2150.98 +263,Tricia,Singyard,tsingyard7a@facebook.com,Female,117.214.88.252,3/29/2019,46,1692.77 +264,Adrea,Rubinsohn,arubinsohn7b@sakura.ne.jp,Female,27.195.5.14,9/8/2019,72,3230.72 +265,Dotti,Brader,dbrader7c@addthis.com,Female,13.85.47.30,12/26/2018,100,2732.26 +266,Gabi,Fackrell,gfackrell7d@scientificamerican.com,Female,58.145.63.14,8/11/2019,95,1238.44 +267,Price,Moger,pmoger7e@deviantart.com,Male,19.116.110.91,8/15/2019,23,1473.89 +268,Jayme,Wakelin,jwakelin7f@cisco.com,Male,26.252.180.229,10/5/2019,56,4366.22 +269,Maurizio,Dunsmuir,mdunsmuir7g@clickbank.net,Male,120.22.85.145,11/3/2019,31,1877.99 +270,Carlos,Edmands,cedmands7h@redcross.org,Male,20.67.51.110,6/14/2019,79,1238.13 +271,Johan,McGinly,jmcginly7i@amazonaws.com,Male,12.205.191.101,3/20/2019,49,4095.82 +272,Albrecht,Rotchell,arotchell7j@google.es,Male,60.170.217.205,9/28/2019,92,2894.61 +273,Eli,De Lacey,edelacey7k@goo.ne.jp,Male,55.7.194.20,11/10/2019,78,4537.32 +274,Sutherlan,Mill,smill7l@i2i.jp,Male,130.65.164.97,1/16/2019,31,1681.32 +275,Nathalie,Willder,nwillder7m@usnews.com,Female,69.170.87.110,5/5/2019,1,1024.53 +276,Rem,Iczokvitz,riczokvitz7n@harvard.edu,Male,7.203.57.167,4/4/2019,39,3672.82 +277,Lorens,Denyukin,ldenyukin7o@uol.com.br,Male,203.70.155.205,2/14/2019,41,3600.8 +278,Mag,Pigden,mpigden7p@psu.edu,Female,239.194.157.251,6/14/2019,47,3599.97 +279,Petronia,Carvill,pcarvill7q@apple.com,Female,151.29.121.135,8/16/2019,68,4879.68 +280,Felicity,Capewell,fcapewell7r@patch.com,Female,176.136.185.249,9/14/2019,75,2448.16 +281,Hartwell,Zellner,hzellner7s@wordpress.org,Male,210.182.89.221,5/26/2019,68,4758.87 +282,Marcela,Geggie,mgeggie7t@samsung.com,Female,118.65.180.139,2/10/2019,15,4222.62 +283,Keith,Loxston,kloxston7u@etsy.com,Male,30.75.222.61,3/31/2019,90,1964.35 +284,Mattheus,Guinn,mguinn7v@virginia.edu,Male,157.141.233.64,2/5/2019,20,1509.77 +285,Cristy,Van den Bosch,cvandenbosch7w@yandex.ru,Female,106.186.220.48,2/10/2019,57,2650.92 +286,Pansie,Pull,ppull7x@tripod.com,Female,133.223.218.112,3/12/2019,16,1844.52 +287,Hyacinthie,Bools,hbools7y@phpbb.com,Female,6.136.111.144,6/24/2019,88,3753.3 +288,Cosimo,Humphris,chumphris7z@ftc.gov,Male,42.252.197.80,1/8/2019,5,1335.74 +289,Raquela,Ledbetter,rledbetter80@imdb.com,Female,25.84.71.62,12/13/2018,39,4474.51 +290,Domingo,McKelvey,dmckelvey81@globo.com,Male,139.34.201.250,9/6/2019,40,4039.82 +291,Britta,Grzesiak,bgrzesiak82@google.fr,Female,254.24.80.245,7/7/2019,73,1052.79 +292,Palmer,Gliddon,pgliddon83@example.com,Male,60.248.224.227,12/27/2018,33,4273.36 +293,Millard,Feore,mfeore84@mlb.com,Male,129.50.148.247,4/3/2019,60,2015.88 +294,Lanie,Blasgen,lblasgen85@ocn.ne.jp,Female,124.254.122.231,10/6/2019,35,1212.04 +295,Sherry,Jamrowicz,sjamrowicz86@newyorker.com,Female,8.187.192.111,6/12/2019,57,2819.04 +296,Payton,Loxton,ploxton87@ted.com,Male,20.185.112.233,5/16/2019,9,4976.7 +297,Anderea,Blandford,ablandford88@tinypic.com,Female,30.186.15.181,2/3/2019,54,3962.4 +298,Adele,Goldstein,agoldstein89@csmonitor.com,Female,101.24.151.157,8/29/2019,47,1300.26 +299,Christiana,Kybbye,ckybbye8a@soup.io,Female,164.124.255.193,8/24/2019,35,4524.75 +300,Bettine,Bryden,bbryden8b@tinyurl.com,Female,71.23.174.26,4/21/2019,27,3413.85 +301,Halsey,Deeble,hdeeble8c@gizmodo.com,Male,17.234.31.127,8/30/2019,74,2872.84 +302,Peggi,Gallier,pgallier8d@aol.com,Female,34.161.21.167,3/28/2019,26,2530.19 +303,Oby,Lemanu,olemanu8e@skyrock.com,Male,123.215.166.71,10/24/2019,90,2590.72 +304,Kelly,Limbert,klimbert8f@123-reg.co.uk,Male,225.87.194.99,7/15/2019,71,3252.4 +305,Edmon,Pittham,epittham8g@wufoo.com,Male,206.168.11.133,11/1/2019,84,4290.32 +306,Nicola,Hazelby,nhazelby8h@nih.gov,Male,248.203.87.61,8/14/2019,33,4439.66 +307,Norry,Cheesworth,ncheesworth8i@spotify.com,Male,188.191.145.160,9/14/2019,19,3777.37 +308,Madeleine,Colchett,mcolchett8j@goo.ne.jp,Female,49.89.233.117,10/26/2019,97,3215.79 +309,Alyse,Rilston,arilston8k@friendfeed.com,Female,178.80.192.158,4/26/2019,10,3704.99 +310,Aubrey,Rodrigues,arodrigues8l@clickbank.net,Female,110.27.123.138,2/26/2019,82,3312.78 +311,Wade,Fitzgerald,wfitzgerald8m@blogspot.com,Male,83.93.6.27,4/14/2019,18,4200.81 +312,Bar,Aspall,baspall8n@jimdo.com,Male,220.44.202.201,6/14/2019,31,3252.11 +313,Martynne,Jurczik,mjurczik8o@homestead.com,Female,45.95.32.123,4/16/2019,64,3091.17 +314,Rem,Binion,rbinion8p@spiegel.de,Male,194.45.225.156,10/13/2019,32,1460.2 +315,Brocky,Picker,bpicker8q@usda.gov,Male,43.227.235.110,6/26/2019,13,2705.18 +316,Caspar,Frankowski,cfrankowski8r@baidu.com,Male,77.43.200.240,4/9/2019,65,3908.27 +317,Fernanda,Jerman,fjerman8s@qq.com,Female,251.97.23.5,12/2/2018,98,2644.07 +318,Kirbie,Hickford,khickford8t@phoca.cz,Female,222.19.145.98,2/18/2019,75,2101.99 +319,Justen,Simonsson,jsimonsson8u@goodreads.com,Male,50.143.144.122,5/18/2019,23,3668.84 +320,Base,Quainton,bquainton8v@quantcast.com,Male,210.105.216.149,9/25/2019,17,3690.64 +321,Evonne,Biss,ebiss8w@blogspot.com,Female,151.218.87.78,6/20/2019,54,2157.7 +322,Desmund,Naris,dnaris8x@cafepress.com,Male,158.117.9.15,4/8/2019,55,3607.48 +323,Briant,Pulley,bpulley8y@rediff.com,Male,226.108.222.137,7/8/2019,4,2048.56 +324,Neddy,Wannop,nwannop8z@cisco.com,Male,183.31.92.122,8/27/2019,59,3925.77 +325,Trip,Eberst,teberst90@so-net.ne.jp,Male,147.174.43.177,3/9/2019,54,3125.57 +326,Feodor,Ccomini,fccomini91@patch.com,Male,101.243.251.93,9/13/2019,9,1769.13 +327,Lazar,Krinks,lkrinks92@infoseek.co.jp,Male,21.83.214.146,10/20/2019,24,4619.45 +328,Tate,Kedslie,tkedslie93@businesswire.com,Female,141.169.231.230,5/30/2019,49,1552.68 +329,Jessee,Boggon,jboggon94@kickstarter.com,Male,203.194.131.251,11/9/2019,24,1485.03 +330,Doralyn,Durrad,ddurrad95@google.co.jp,Female,240.121.195.82,7/8/2019,86,2176.49 +331,Jesse,Thynn,jthynn96@usnews.com,Male,199.184.188.96,12/29/2018,33,2828.35 +332,Emlyn,Redparth,eredparth97@naver.com,Female,23.58.23.190,9/1/2019,55,1076.4 +333,Gusella,Dimsdale,gdimsdale98@fema.gov,Female,126.167.16.255,5/27/2019,98,3454.61 +334,Dunn,Rentalll,drentalll99@japanpost.jp,Male,222.206.129.103,7/25/2019,85,1144.19 +335,Hyacintha,Coltan,hcoltan9a@creativecommons.org,Female,109.55.166.241,4/4/2019,87,1786.85 +336,Hyacinthe,Matyatin,hmatyatin9b@1und1.de,Female,110.109.78.10,7/3/2019,93,1671.35 +337,Adrian,Sollowaye,asollowaye9c@sitemeter.com,Male,33.129.1.150,11/4/2019,88,3482.58 +338,Arlina,Merriment,amerriment9d@census.gov,Female,236.177.140.9,11/17/2019,95,1747.4 +339,Anne-marie,Fakes,afakes9e@wix.com,Female,61.10.72.218,12/17/2018,67,1347.14 +340,Chico,Curgenuer,ccurgenuer9f@jugem.jp,Male,70.238.241.201,5/12/2019,90,4320.01 +341,Lonee,Roggerone,lroggerone9g@bizjournals.com,Female,176.243.54.186,4/28/2019,89,3039.36 +342,Kendell,Howett,khowett9h@fema.gov,Male,199.214.110.115,3/29/2019,12,2789.57 +343,Agatha,Dolligon,adolligon9i@canalblog.com,Female,34.170.13.241,12/20/2018,92,4743.08 +344,Ky,Fedder,kfedder9j@blogtalkradio.com,Male,163.0.64.234,6/29/2019,25,3252.69 +345,Wat,Kelsell,wkelsell9k@utexas.edu,Male,214.250.242.115,8/21/2019,70,2043.76 +346,Emyle,MacKean,emackean9l@networksolutions.com,Female,92.255.128.207,6/30/2019,1,3104.96 +347,Jeanette,Uridge,juridge9m@ucoz.com,Female,19.150.66.177,1/5/2019,64,4984.27 +348,Lilia,Vann,lvann9n@google.it,Female,89.252.120.154,10/16/2019,75,2663.58 +349,Cecile,Bromley,cbromley9o@unesco.org,Female,123.37.220.84,7/20/2019,54,2929.23 +350,Laureen,Twiddle,ltwiddle9p@narod.ru,Female,216.255.144.65,10/16/2019,19,1270.83 +351,Judas,de Clerc,jdeclerc9q@123-reg.co.uk,Male,70.252.28.9,7/19/2019,52,2346.55 +352,Ardeen,Loveman,aloveman9r@ow.ly,Female,156.219.46.63,2/10/2019,22,2964.62 +353,Raychel,Bilbie,rbilbie9s@cbslocal.com,Female,17.168.95.135,7/30/2019,77,2114.06 +354,Aylmer,Ortsmann,aortsmann9t@wufoo.com,Male,38.11.85.41,7/7/2019,93,3751.57 +355,Cassey,Ivanilov,civanilov9u@infoseek.co.jp,Female,55.185.103.167,8/19/2019,31,2292.8 +356,Hedwiga,Mabbitt,hmabbitt9v@hostgator.com,Female,138.225.43.83,5/18/2019,34,3855.85 +357,Andy,Selwin,aselwin9w@php.net,Female,125.221.82.185,11/12/2019,33,3992.33 +358,Alfonso,Waiton,awaiton9x@cam.ac.uk,Male,229.52.201.138,12/12/2018,79,4822.9 +359,Falito,Waugh,fwaugh9y@behance.net,Male,139.179.83.249,2/9/2019,58,4262.13 +360,Goldia,Devennie,gdevennie9z@globo.com,Female,201.225.234.254,6/29/2019,57,4846.5 +361,Charmaine,Craney,ccraneya0@tinypic.com,Female,225.240.75.169,7/12/2019,84,1316.62 +362,Zeke,Laidlow,zlaidlowa1@ehow.com,Male,166.40.176.121,7/4/2019,35,3356.21 +363,Brok,Drayton,bdraytona2@livejournal.com,Male,144.40.40.68,8/13/2019,11,4276.45 +364,Yorke,Stickins,ystickinsa3@joomla.org,Male,43.66.244.157,9/2/2019,69,4537.3 +365,Niven,Carlow,ncarlowa4@berkeley.edu,Male,172.206.45.58,7/5/2019,65,3926.86 +366,Dexter,Roycraft,droycrafta5@bbb.org,Male,77.45.212.134,7/21/2019,55,3035.99 +367,Nicoline,Maryin,nmaryina6@google.com.au,Female,47.168.8.172,8/1/2019,41,4917.76 +368,Ryon,Manuaud,rmanuauda7@domainmarket.com,Male,47.123.90.232,2/9/2019,74,2439.17 +369,Yehudi,Paylie,ypayliea8@domainmarket.com,Male,191.251.55.194,1/27/2019,6,1923.42 +370,Griffith,Tincey,gtinceya9@oaic.gov.au,Male,25.66.148.134,9/12/2019,39,2655.81 +371,Rafa,McLeman,rmclemanaa@mac.com,Female,230.203.148.84,5/6/2019,15,1870.44 +372,Ethel,Deuss,edeussab@hp.com,Female,28.53.103.241,5/16/2019,32,1469.62 +373,Vasily,Sockell,vsockellac@istockphoto.com,Male,56.222.178.227,3/11/2019,69,1735.2 +374,Lorenza,Adelsberg,ladelsbergad@fda.gov,Female,11.94.242.174,1/22/2019,86,3213.96 +375,Colas,Wakerley,cwakerleyae@hostgator.com,Male,145.79.64.143,10/18/2019,32,3929.61 +376,Corbie,Suthworth,csuthworthaf@so-net.ne.jp,Male,185.110.156.111,11/20/2019,59,1791.8 +377,Raviv,Burdon,rburdonag@google.cn,Male,199.130.230.228,8/31/2019,56,2672.48 +378,Willabella,Braybrook,wbraybrookah@wired.com,Female,21.168.228.152,8/23/2019,81,3055.15 +379,Stavro,Culley,sculleyai@rambler.ru,Male,200.89.13.168,7/13/2019,53,4163.02 +380,Even,Scargill,escargillaj@boston.com,Male,239.83.129.85,4/1/2019,3,3610.96 +381,Estell,Feltham,efelthamak@amazon.com,Female,15.107.128.8,12/17/2018,47,4775.21 +382,Babette,Vel,bvelal@spotify.com,Female,175.148.241.38,1/10/2019,41,3884.25 +383,Artair,Sonschein,asonscheinam@paginegialle.it,Male,127.94.90.52,9/23/2019,34,3579.98 +384,Pegeen,Taynton,ptayntonan@mozilla.org,Female,237.12.237.200,8/17/2019,83,4949.73 +385,Rubina,Yarnley,ryarnleyao@bravesites.com,Female,163.161.0.128,2/1/2019,48,2608.0 +386,Imojean,Swadlen,iswadlenap@behance.net,Female,187.101.162.242,11/26/2019,25,3891.41 +387,Remington,Hunnam,rhunnamaq@xrea.com,Male,155.26.3.155,3/2/2019,98,4085.69 +388,Cart,Symson,csymsonar@arstechnica.com,Male,65.122.8.87,12/12/2018,10,1780.3 +389,Kate,Fitzsimons,kfitzsimonsas@i2i.jp,Female,43.231.183.143,9/5/2019,8,4589.81 +390,Derril,Rimmington,drimmingtonat@homestead.com,Male,6.22.197.94,5/8/2019,63,3112.81 +391,Alyson,McCue,amccueau@wikia.com,Female,23.46.105.252,8/28/2019,70,3955.82 +392,Magdalen,Huncoot,mhuncootav@spiegel.de,Female,148.37.230.51,10/31/2019,2,4091.18 +393,Quincey,Tumilson,qtumilsonaw@webeden.co.uk,Male,56.32.172.37,4/8/2019,42,1930.92 +394,Patrick,Causer,pcauserax@ucsd.edu,Male,246.121.43.120,5/6/2019,93,4121.69 +395,Nadia,Vannuccini,nvannucciniay@ifeng.com,Female,136.227.239.1,6/28/2019,9,2309.55 +396,Grethel,Briggs,gbriggsaz@opensource.org,Female,74.158.54.139,12/18/2018,93,1324.43 +397,Carmelina,Witson,cwitsonb0@slate.com,Female,0.189.23.96,9/17/2019,95,2043.81 +398,Stanford,Gariff,sgariffb1@latimes.com,Male,30.67.52.138,11/28/2019,23,3754.58 +399,Broddie,Dunster,bdunsterb2@businesswire.com,Male,195.171.91.125,5/13/2019,35,1781.96 +400,Brigit,Brownsworth,bbrownsworthb3@yale.edu,Female,235.56.89.121,5/7/2019,11,2976.14 +401,Hillary,Daughtrey,hdaughtreyb4@zimbio.com,Male,171.99.161.95,3/31/2019,14,4683.28 +402,Rubetta,Ryding,rrydingb5@facebook.com,Female,121.209.254.88,2/16/2019,48,3181.31 +403,Darill,Giffin,dgiffinb6@so-net.ne.jp,Male,76.229.144.119,12/1/2019,20,1267.15 +404,Meredith,Leghorn,mleghornb7@google.co.jp,Female,88.130.30.36,3/6/2019,73,1165.58 +405,Godfrey,Kleinhandler,gkleinhandlerb8@auda.org.au,Male,202.128.125.132,2/14/2019,50,4151.4 +406,Andie,Tootell,atootellb9@netscape.com,Male,145.145.81.122,6/12/2019,41,1126.15 +407,Roselia,Craise,rcraiseba@java.com,Female,200.79.82.15,6/21/2019,56,4562.67 +408,Conny,Saice,csaicebb@baidu.com,Male,242.82.15.36,11/6/2019,20,4226.99 +409,Keary,Hartrick,khartrickbc@independent.co.uk,Male,189.126.222.123,12/13/2018,86,3150.61 +410,Salli,Scotchmer,sscotchmerbd@cloudflare.com,Female,229.204.119.25,1/15/2019,85,4684.69 +411,Verena,Everington,veveringtonbe@delicious.com,Female,49.206.228.25,4/25/2019,67,2869.88 +412,Bambi,Berzon,bberzonbf@dailymotion.com,Female,47.88.180.96,10/26/2019,67,4843.29 +413,Barbara,Kovacs,bkovacsbg@deliciousdays.com,Female,116.1.242.72,4/20/2019,43,2218.64 +414,Laurice,Adrianello,ladrianellobh@nbcnews.com,Female,69.69.82.208,6/21/2019,91,3331.25 +415,Nadine,Stenning,nstenningbi@tripadvisor.com,Female,105.204.235.18,9/2/2019,13,2037.16 +416,Cristina,Milsap,cmilsapbj@t-online.de,Female,36.13.98.63,12/4/2018,51,2933.37 +417,Kaleb,Easby,keasbybk@howstuffworks.com,Male,59.120.45.235,12/11/2018,4,1277.52 +418,Alister,Kyberd,akyberdbl@wsj.com,Male,184.221.78.151,5/1/2019,85,3931.28 +419,Roma,Uvedale,ruvedalebm@jigsy.com,Male,127.113.15.154,7/21/2019,71,4158.48 +420,Chrisse,Briggs,cbriggsbn@godaddy.com,Male,36.183.171.148,7/26/2019,63,1042.39 +421,Armin,Fidelus,afidelusbo@sogou.com,Male,207.188.30.35,1/13/2019,52,2565.26 +422,Helena,Harlow,hharlowbp@archive.org,Female,125.154.161.88,7/31/2019,11,3388.81 +423,Judy,Stone Fewings,jstonefewingsbq@youtube.com,Female,220.36.160.104,10/2/2019,54,2051.64 +424,Eddi,Gritsaev,egritsaevbr@sphinn.com,Female,36.194.183.230,6/1/2019,60,3020.44 +425,Royal,Juares,rjuaresbs@craigslist.org,Male,84.222.181.156,5/30/2019,30,2382.04 +426,Violette,Kopje,vkopjebt@blogs.com,Female,12.135.203.81,5/12/2019,61,3565.51 +427,Lesli,Franses,lfransesbu@histats.com,Female,124.138.107.148,11/22/2019,71,2644.08 +428,Alric,Barehead,abareheadbv@stumbleupon.com,Male,220.251.223.254,12/17/2018,6,2989.17 +429,Karin,Rosingdall,krosingdallbw@ucoz.ru,Female,83.135.106.197,8/9/2019,89,1199.79 +430,Margaretta,Hartles,mhartlesbx@google.com.br,Female,146.47.193.138,10/15/2019,82,1786.77 +431,Broderic,Adenot,badenotby@upenn.edu,Male,131.77.120.209,9/22/2019,15,4020.02 +432,Konstanze,Scintsbury,kscintsburybz@eepurl.com,Female,187.225.93.97,9/12/2019,91,3882.0 +433,Heriberto,Branchett,hbranchettc0@google.ca,Male,47.131.19.61,9/10/2019,30,3830.84 +434,Dulcy,Moxham,dmoxhamc1@pinterest.com,Female,139.65.244.96,3/31/2019,48,1930.97 +435,Kakalina,Pellamont,kpellamontc2@51.la,Female,46.138.21.69,3/29/2019,53,2265.45 +436,Durward,McAlester,dmcalesterc3@wisc.edu,Male,43.93.21.201,4/1/2019,19,4312.73 +437,Alfy,Dawby,adawbyc4@alibaba.com,Female,60.254.119.60,7/12/2019,53,1447.77 +438,Rafferty,Cullabine,rcullabinec5@acquirethisname.com,Male,107.140.224.21,8/31/2019,10,4627.05 +439,Catlaina,Laurenty,claurentyc6@tripod.com,Female,72.146.104.69,5/8/2019,77,1050.26 +440,Yves,Kinnock,ykinnockc7@narod.ru,Male,212.80.251.121,9/24/2019,26,4289.62 +441,Rustie,Runham,rrunhamc8@google.cn,Male,14.208.111.115,3/30/2019,17,3840.32 +442,Shannon,Teece,steecec9@issuu.com,Female,224.215.224.129,11/26/2019,87,3028.32 +443,Tawsha,Huggons,thuggonsca@oakley.com,Female,28.182.47.108,12/9/2018,80,3985.84 +444,Jozef,Ropcke,jropckecb@washington.edu,Male,71.34.133.206,10/5/2019,51,2177.5 +445,Brittany,Treadgold,btreadgoldcc@dell.com,Female,70.179.135.39,10/6/2019,35,1239.98 +446,Reynolds,Dungay,rdungaycd@taobao.com,Male,198.198.184.105,3/17/2019,84,1401.56 +447,Deeyn,MacNeely,dmacneelyce@google.nl,Female,129.131.12.166,9/24/2019,67,2584.15 +448,Opalina,McAndrew,omcandrewcf@imgur.com,Female,170.144.235.40,9/27/2019,32,1990.03 +449,Annabell,Bowne,abownecg@tamu.edu,Female,15.103.10.164,11/4/2019,82,4979.86 +450,Shepherd,Toye,stoyech@oakley.com,Male,28.94.51.150,5/4/2019,79,3581.94 +451,Dolorita,Rowatt,drowattci@yale.edu,Female,199.209.35.59,1/7/2019,46,2901.35 +452,Gale,Fenich,gfenichcj@seattletimes.com,Female,117.140.18.113,2/2/2019,95,1402.56 +453,Salvidor,Ruperti,srupertick@mashable.com,Male,253.18.192.61,6/10/2019,83,4161.11 +454,Griffie,Colthard,gcolthardcl@google.com.br,Male,125.41.227.143,5/28/2019,72,2219.96 +455,York,Rittmeyer,yrittmeyercm@redcross.org,Male,117.143.157.105,12/25/2018,69,2618.72 +456,Sarene,Brantzen,sbrantzencn@dion.ne.jp,Female,243.21.1.226,1/14/2019,99,1604.26 +457,Maximilien,Jouhan,mjouhanco@dailymotion.com,Male,135.19.146.201,8/12/2019,22,2904.57 +458,Valma,Chipping,vchippingcp@last.fm,Female,106.227.96.134,12/11/2018,21,2367.02 +459,Delmar,Kaas,dkaascq@histats.com,Male,149.43.164.167,8/29/2019,33,1178.21 +460,Dalli,MacBain,dmacbaincr@tripod.com,Male,179.253.105.225,6/28/2019,57,4678.73 +461,Griz,Macquire,gmacquirecs@google.cn,Male,131.224.85.128,8/28/2019,22,1605.86 +462,Far,Ogden,fogdenct@reverbnation.com,Male,164.236.27.67,12/10/2018,46,3121.44 +463,Eleen,Norree,enorreecu@telegraph.co.uk,Female,172.69.9.125,4/6/2019,18,4440.78 +464,Franzen,Izkoveski,fizkoveskicv@issuu.com,Male,92.192.132.174,9/19/2019,12,2651.29 +465,Rhiamon,Saladino,rsaladinocw@wix.com,Female,123.91.96.42,4/10/2019,88,4982.0 +466,Franny,Grinin,fgrinincx@booking.com,Male,43.0.247.215,3/26/2019,89,3774.54 +467,Colin,O'Donohue,codonohuecy@go.com,Male,88.162.185.175,10/22/2019,3,3491.68 +468,Wendye,Compson,wcompsoncz@hud.gov,Female,136.150.155.64,11/13/2019,74,4538.45 +469,Dyane,Raithmill,draithmilld0@ted.com,Female,235.21.43.42,5/16/2019,17,3995.57 +470,Lacie,Dumper,ldumperd1@ycombinator.com,Female,211.130.88.136,5/5/2019,21,4467.62 +471,Talbert,Jurca,tjurcad2@soup.io,Male,110.180.63.75,4/11/2019,72,1047.55 +472,Blondelle,Ingerfield,bingerfieldd3@bbc.co.uk,Female,21.57.56.111,10/18/2019,36,4305.36 +473,Huntington,Keele,hkeeled4@wired.com,Male,29.115.183.130,1/18/2019,90,3988.22 +474,Merle,Lissenden,mlissendend5@google.ru,Male,181.207.215.130,9/9/2019,14,3780.87 +475,Ahmed,Lowthorpe,alowthorped6@fotki.com,Male,170.252.164.227,7/24/2019,56,1887.16 +476,Melli,Monsey,mmonseyd7@house.gov,Female,226.80.98.178,5/13/2019,14,2671.62 +477,Shelly,Flay,sflayd8@epa.gov,Female,77.216.133.212,7/25/2019,13,4660.94 +478,Ryun,Maffey,rmaffeyd9@discovery.com,Male,130.172.183.105,12/18/2018,45,3261.01 +479,Archer,Monksfield,amonksfieldda@google.com.br,Male,182.48.50.111,8/2/2019,52,3036.93 +480,Rosemonde,Wragg,rwraggdb@icq.com,Female,195.223.97.213,8/25/2019,56,1193.62 +481,Halsey,Robbeke,hrobbekedc@cnet.com,Male,232.48.110.118,2/3/2019,42,1298.35 +482,Paten,Paslow,ppaslowdd@instagram.com,Male,29.24.97.210,5/13/2019,98,2545.85 +483,Dora,Ghidoli,dghidolide@digg.com,Female,58.13.173.228,8/13/2019,89,2796.74 +484,Arlene,Dronsfield,adronsfielddf@t.co,Female,79.160.187.181,3/18/2019,55,2539.18 +485,Blakelee,Lipp,blippdg@sakura.ne.jp,Female,19.124.37.230,8/29/2019,1,4628.15 +486,Cecelia,Grinham,cgrinhamdh@twitter.com,Female,234.55.104.182,2/3/2019,48,1693.35 +487,Onofredo,Andreazzi,oandreazzidi@google.ca,Male,117.52.172.57,7/29/2019,53,2615.64 +488,Kiley,Burdekin,kburdekindj@shop-pro.jp,Female,201.52.16.189,8/24/2019,95,3929.48 +489,Bink,Kestin,bkestindk@chron.com,Male,100.111.135.87,7/13/2019,21,1958.77 +490,Mitch,Cagan,mcagandl@pagesperso-orange.fr,Male,25.244.113.46,10/16/2019,82,2492.12 +491,Charlton,Hughes,chughesdm@dmoz.org,Male,29.138.111.115,11/12/2019,10,3339.82 +492,Doria,Ivatts,divattsdn@nih.gov,Female,242.17.53.201,5/29/2019,72,2228.99 +493,Coriss,Lathan,clathando@domainmarket.com,Female,25.75.179.134,10/4/2019,23,4848.67 +494,Elmore,Reside,eresidedp@diigo.com,Male,79.112.126.164,9/21/2019,59,1610.62 +495,Ezekiel,Scherer,eschererdq@telegraph.co.uk,Male,79.39.63.134,8/28/2019,69,1597.98 +496,Werner,Cobson,wcobsondr@artisteer.com,Male,227.194.178.190,3/13/2019,53,4233.49 +497,Randee,Ornillos,rornillosds@youtube.com,Female,67.192.57.128,12/22/2018,59,2404.97 +498,Gottfried,Carloni,gcarlonidt@google.ca,Male,176.184.59.246,7/25/2019,33,4007.86 +499,Findlay,Ferrieroi,fferrieroidu@edublogs.org,Male,164.15.3.146,6/15/2019,29,1439.89 +500,Anestassia,Caldron,acaldrondv@imdb.com,Female,73.5.249.139,12/5/2018,77,4450.98 +501,Ignazio,Prinnett,iprinnettdw@merriam-webster.com,Male,254.189.253.253,5/26/2019,53,3955.94 +502,Debi,Sedgebeer,dsedgebeerdx@msn.com,Female,90.91.234.210,11/26/2019,96,1951.45 +503,Beverlee,Colliard,bcolliarddy@stanford.edu,Female,112.73.182.216,8/1/2019,60,4097.93 +504,Cinnamon,McFadin,cmcfadindz@blogs.com,Female,149.198.138.102,4/3/2019,80,3719.88 +505,Walden,Bruinemann,wbruinemanne0@360.cn,Male,21.212.132.5,11/7/2019,92,2275.38 +506,Quinton,Glanfield,qglanfielde1@amazon.de,Male,213.175.246.203,12/13/2018,8,4630.05 +507,Cello,Potkins,cpotkinse2@github.com,Male,135.169.51.63,3/16/2019,63,2813.83 +508,Percival,Coley,pcoleye3@photobucket.com,Male,205.135.254.197,1/14/2019,93,3766.81 +509,Brockie,Siddens,bsiddense4@usda.gov,Male,166.107.18.144,7/26/2019,11,4226.07 +510,Emmerich,Eglise,eeglisee5@istockphoto.com,Male,39.239.19.196,11/3/2019,23,1444.76 +511,Theo,Olivetta,tolivettae6@yellowpages.com,Male,135.95.4.136,8/1/2019,59,3670.72 +512,Gabie,Blasius,gblasiuse7@vistaprint.com,Male,176.138.63.24,3/12/2019,100,3276.6 +513,Tiebold,Wharmby,twharmbye8@chicagotribune.com,Male,204.219.78.122,6/13/2019,73,3542.76 +514,Tann,Duke,tdukee9@irs.gov,Male,153.153.136.24,3/14/2019,70,2338.35 +515,Westley,Ottery,wotteryea@soundcloud.com,Male,35.239.11.15,9/18/2019,61,2876.26 +516,Noll,Birkmyre,nbirkmyreeb@histats.com,Male,45.218.226.8,5/4/2019,3,3180.04 +517,Angelle,Canizares,acanizaresec@usgs.gov,Female,79.98.22.161,11/16/2019,57,1414.53 +518,Maddy,Rawlins,mrawlinsed@ocn.ne.jp,Female,194.212.205.87,8/24/2019,9,2037.3 +519,Gonzales,Digle,gdigleee@tinyurl.com,Male,188.81.253.229,2/11/2019,31,1096.61 +520,Matias,Arrighetti,marrighettief@jimdo.com,Male,119.210.95.197,10/13/2019,59,1525.12 +521,Ag,Almon,aalmoneg@discuz.net,Female,211.209.145.71,5/9/2019,5,1832.58 +522,Romona,Keppel,rkeppeleh@auda.org.au,Female,180.44.222.236,12/5/2018,69,1470.18 +523,Aeriel,Seear,aseearei@over-blog.com,Female,132.233.16.148,6/8/2019,20,4592.62 +524,Terri,Trulocke,ttrulockeej@clickbank.net,Female,138.176.80.221,10/1/2019,5,1787.96 +525,Linn,Stonestreet,lstonestreetek@un.org,Male,74.243.5.94,11/27/2019,31,1779.4 +526,Dmitri,Coode,dcoodeel@ameblo.jp,Male,201.81.71.70,1/25/2019,94,1400.26 +527,Alane,Sabattier,asabattierem@scribd.com,Female,32.109.38.132,10/10/2019,10,1416.04 +528,Sadye,Esplin,sesplinen@tiny.cc,Female,76.85.72.29,3/14/2019,45,3626.01 +529,Alexia,Iorizzo,aiorizzoeo@themeforest.net,Female,172.234.209.31,7/10/2019,46,4064.06 +530,Gayelord,Kalewe,gkaleweep@over-blog.com,Male,83.169.129.240,9/10/2019,53,1508.96 +531,Clive,Stuchbery,cstuchberyeq@dell.com,Male,9.182.133.41,12/29/2018,21,4980.91 +532,Derron,Lober,dloberer@epa.gov,Male,184.138.78.88,2/14/2019,24,2245.42 +533,Aleda,Addison,aaddisones@wsj.com,Female,181.181.179.67,6/17/2019,81,4493.79 +534,Marshall,Ugolotti,mugolottiet@aboutads.info,Male,159.50.251.20,7/3/2019,35,1104.16 +535,Garold,Moxon,gmoxoneu@slashdot.org,Male,117.142.41.149,10/7/2019,34,2523.56 +536,Fee,Colleer,fcolleerev@state.gov,Male,207.42.100.89,4/12/2019,87,4816.8 +537,Smitty,Smallridge,ssmallridgeew@spotify.com,Male,132.67.213.163,2/26/2019,84,3814.0 +538,Ber,Pettegre,bpettegreex@google.ru,Male,8.176.93.49,9/6/2019,67,3272.53 +539,Tybi,Brown,tbrowney@ibm.com,Female,100.73.19.52,3/7/2019,76,1088.01 +540,Roxanne,Rigler,rriglerez@weebly.com,Female,29.96.199.117,4/1/2019,65,2694.03 +541,Alphonse,Astlett,aastlettf0@hatena.ne.jp,Male,244.194.52.149,7/29/2019,47,1467.11 +542,Calvin,Finn,cfinnf1@ucoz.com,Male,199.41.9.21,12/30/2018,7,1828.33 +543,Broddie,Brandts,bbrandtsf2@answers.com,Male,100.8.254.225,10/29/2019,64,1792.68 +544,Herrick,Chadderton,hchaddertonf3@wired.com,Male,187.66.85.223,3/1/2019,38,3230.59 +545,Teodoor,Benny,tbennyf4@home.pl,Male,6.177.43.100,4/29/2019,13,2503.4 +546,Karl,Wrintmore,kwrintmoref5@apple.com,Male,73.104.69.176,8/7/2019,97,2688.4 +547,Alexandra,Testo,atestof6@loc.gov,Female,15.230.156.211,6/9/2019,84,4522.93 +548,Colin,Giorgietto,cgiorgiettof7@nymag.com,Male,13.75.177.91,2/21/2019,3,3730.12 +549,Talbot,McNickle,tmcnicklef8@wp.com,Male,44.250.27.152,3/18/2019,30,2209.95 +550,Cassandre,Hayle,chaylef9@newyorker.com,Female,116.81.18.95,11/21/2019,10,3204.22 +551,Tommi,Bilney,tbilneyfa@prweb.com,Female,61.67.100.120,10/16/2019,79,3613.66 +552,Larisa,Pollok,lpollokfb@loc.gov,Female,79.115.80.86,9/30/2019,29,1901.41 +553,Deb,Dorkins,ddorkinsfc@xrea.com,Female,26.52.68.180,10/15/2019,99,4906.29 +554,Johanna,Kainz,jkainzfd@chronoengine.com,Female,142.73.143.215,8/18/2019,4,1226.42 +555,Gasparo,Handrek,ghandrekfe@vinaora.com,Male,21.21.61.211,10/16/2019,91,1731.15 +556,Elwyn,Zahor,ezahorff@washingtonpost.com,Male,184.132.148.138,1/5/2019,55,1626.51 +557,Devina,De Vaar,ddevaarfg@miibeian.gov.cn,Female,195.180.225.61,7/12/2019,2,4095.24 +558,Ikey,Verner,ivernerfh@msu.edu,Male,175.129.187.1,8/8/2019,10,1643.3 +559,Shae,Potteril,spotterilfi@cyberchimps.com,Male,135.218.100.211,9/30/2019,43,2747.3 +560,Kim,Kittel,kkittelfj@buzzfeed.com,Male,224.125.75.142,12/12/2018,17,4109.17 +561,Alexei,Morecomb,amorecombfk@independent.co.uk,Male,172.224.245.105,12/9/2018,33,2899.08 +562,Cathryn,Finnan,cfinnanfl@ask.com,Female,27.110.235.165,5/28/2019,94,4841.66 +563,Maryjane,Duffus,mduffusfm@eventbrite.com,Female,3.255.15.114,10/22/2019,54,1514.19 +564,Violetta,Reisk,vreiskfn@typepad.com,Female,39.227.35.28,4/18/2019,92,4609.62 +565,Vicky,Lots,vlotsfo@cisco.com,Female,231.114.228.254,7/16/2019,5,2747.65 +566,Odilia,Shemmans,oshemmansfp@phpbb.com,Female,173.16.238.214,7/15/2019,64,2509.13 +567,Doralynn,Borne,dbornefq@vistaprint.com,Female,182.193.106.25,9/27/2019,58,2388.86 +568,Gallagher,Tinsey,gtinseyfr@wsj.com,Male,222.169.135.174,8/26/2019,9,2587.26 +569,Ulberto,Hellyar,uhellyarfs@yellowbook.com,Male,248.76.37.74,7/15/2019,30,1922.6 +570,Carilyn,Skones,cskonesft@liveinternet.ru,Female,156.207.111.147,5/19/2019,37,4692.05 +571,Sarine,Rubinovitch,srubinovitchfu@networksolutions.com,Female,80.120.49.55,8/19/2019,20,1594.95 +572,Jemmy,Marlowe,jmarlowefv@engadget.com,Female,75.14.237.58,4/14/2019,51,1904.61 +573,Gaby,Demelt,gdemeltfw@infoseek.co.jp,Male,229.88.216.80,2/3/2019,51,1648.97 +574,Jacob,Lamberton,jlambertonfx@hugedomains.com,Male,47.215.55.112,11/23/2019,98,2245.77 +575,Emile,Bullivent,ebulliventfy@is.gd,Male,222.149.227.61,1/14/2019,28,2610.31 +576,Reidar,Gierardi,rgierardifz@flickr.com,Male,137.20.90.27,7/14/2019,44,1963.44 +577,Dwain,De Mars,ddemarsg0@theglobeandmail.com,Male,29.126.92.147,5/8/2019,83,2977.28 +578,Seth,Hebron,shebrong1@github.io,Male,97.93.183.184,2/17/2019,17,2725.06 +579,Shep,Rabjohn,srabjohng2@sfgate.com,Male,118.230.96.220,4/5/2019,75,4150.25 +580,Georgine,Martill,gmartillg3@who.int,Female,89.160.34.190,1/8/2019,37,4712.71 +581,Theodora,Mitchenson,tmitchensong4@delicious.com,Female,140.245.239.155,4/11/2019,58,1505.59 +582,Geri,Reedman,greedmang5@mac.com,Male,149.218.213.221,6/22/2019,29,3919.37 +583,Hamel,Ruddick,hruddickg6@uiuc.edu,Male,74.103.5.12,3/19/2019,32,2242.44 +584,Marylou,Baggott,mbaggottg7@goo.gl,Female,67.211.254.135,11/7/2019,35,4631.99 +585,Ignacius,Croisdall,icroisdallg8@imdb.com,Male,194.136.32.103,4/9/2019,22,4505.82 +586,Agnes,Pentercost,apentercostg9@yolasite.com,Female,201.109.22.156,4/7/2019,6,2659.75 +587,Phillipe,O'Henery,poheneryga@baidu.com,Male,169.210.213.194,4/28/2019,100,3089.16 +588,Mersey,Bilston,mbilstongb@mozilla.org,Female,212.118.21.202,6/6/2019,47,1546.62 +589,Carie,Pawelski,cpawelskigc@examiner.com,Female,185.32.131.13,12/23/2018,13,1607.17 +590,Cassandra,Zywicki,czywickigd@ask.com,Female,58.164.239.126,10/6/2019,86,3316.82 +591,Myrtia,Avrasin,mavrasinge@tripod.com,Female,23.46.205.131,6/2/2019,28,1376.97 +592,Stanford,Greatrakes,sgreatrakesgf@europa.eu,Male,110.99.123.217,12/31/2018,89,4653.75 +593,Giulietta,Hinkens,ghinkensgg@list-manage.com,Female,146.42.27.152,3/17/2019,90,4663.89 +594,Dame,Eam,deamgh@jalbum.net,Male,93.210.79.222,12/3/2018,99,4955.03 +595,Claresta,Spradbery,cspradberygi@wunderground.com,Female,177.74.189.41,5/7/2019,69,2660.67 +596,Charisse,Janos,cjanosgj@yellowbook.com,Female,107.1.160.123,11/30/2019,27,3260.09 +597,Mufi,Letterick,mletterickgk@apache.org,Female,230.153.229.231,6/16/2019,59,2986.56 +598,Fabe,Sabberton,fsabbertongl@mapquest.com,Male,219.168.121.194,7/18/2019,70,3658.28 +599,Nikolas,Gildersleaves,ngildersleavesgm@ox.ac.uk,Male,162.123.231.93,7/20/2019,78,1233.59 +600,Justin,Vigours,jvigoursgn@sourceforge.net,Male,154.142.42.26,6/28/2019,31,4990.95 +601,Kile,Le Clercq,kleclercqgo@indiatimes.com,Male,239.28.13.21,12/13/2018,84,1001.19 +602,Isidoro,Tregonna,itregonnagp@webeden.co.uk,Male,171.67.239.44,1/16/2019,41,4417.17 +603,Mab,Ironside,mironsidegq@google.cn,Female,42.162.241.202,7/23/2019,91,2259.53 +604,Dimitry,Manass,dmanassgr@51.la,Male,45.173.17.98,1/25/2019,46,1586.27 +605,Rossy,Arden,rardengs@bigcartel.com,Male,214.115.174.58,4/28/2019,51,1823.4 +606,Daniele,Barnard,dbarnardgt@so-net.ne.jp,Female,135.128.233.112,2/1/2019,71,3995.81 +607,Helene,Westphalen,hwestphalengu@addthis.com,Female,106.111.55.197,11/15/2019,95,2675.0 +608,Zeke,Mixer,zmixergv@europa.eu,Male,70.187.67.163,2/1/2019,26,1019.63 +609,Modesta,Cock,mcockgw@berkeley.edu,Female,16.132.149.179,1/19/2019,79,2922.43 +610,Bard,Vieyra,bvieyragx@shinystat.com,Male,192.107.97.186,10/5/2019,17,4998.16 +611,Boote,Geall,bgeallgy@networksolutions.com,Male,54.164.158.9,1/1/2019,95,3385.89 +612,Ninnetta,Loveman,nlovemangz@histats.com,Female,25.150.239.54,9/19/2019,24,3487.97 +613,Sigismund,Fitzer,sfitzerh0@163.com,Male,93.203.46.222,9/7/2019,26,3405.11 +614,Perren,Haquin,phaquinh1@networkadvertising.org,Male,27.195.139.40,7/13/2019,95,4472.37 +615,Ramsay,Galland,rgallandh2@sohu.com,Male,64.157.166.62,2/15/2019,30,3256.71 +616,Silva,Strete,sstreteh3@yellowpages.com,Female,28.120.167.41,10/30/2019,67,4109.49 +617,Dee dee,Poate,dpoateh4@github.io,Female,169.234.44.240,1/26/2019,87,2487.52 +618,Bianca,Martell,bmartellh5@bloomberg.com,Female,17.155.34.89,12/5/2018,88,2523.49 +619,Alan,Wallwork,awallworkh6@bloglines.com,Male,136.41.225.203,11/17/2019,32,2593.63 +620,Alysa,Lembrick,alembrickh7@github.io,Female,4.186.245.140,3/12/2019,42,4087.94 +621,Yoshiko,Alans,yalansh8@list-manage.com,Female,113.124.38.19,1/8/2019,5,3091.72 +622,Chelsy,Watford,cwatfordh9@yellowpages.com,Female,10.18.35.232,5/4/2019,86,4661.23 +623,Bill,Gotthard,bgotthardha@moonfruit.com,Male,169.67.131.116,5/21/2019,11,1287.77 +624,Cad,Kirtlan,ckirtlanhb@xrea.com,Male,40.152.181.2,1/24/2019,24,3155.78 +625,Ahmed,McClenan,amcclenanhc@webmd.com,Male,20.99.191.248,8/13/2019,36,3301.08 +626,Tobit,Barthelemy,tbarthelemyhd@bizjournals.com,Male,35.143.211.133,9/10/2019,98,1382.31 +627,Kacie,Lurner,klurnerhe@illinois.edu,Female,4.70.92.52,3/14/2019,58,3754.13 +628,Keith,Skeech,kskeechhf@pbs.org,Male,14.243.98.120,8/22/2019,99,2840.36 +629,Loy,Brettoner,lbrettonerhg@marriott.com,Male,244.228.186.208,5/28/2019,83,1322.53 +630,Ring,Keppy,rkeppyhh@mediafire.com,Male,63.223.185.137,10/29/2019,49,3414.88 +631,Jennee,Saltsberg,jsaltsberghi@angelfire.com,Female,168.154.55.70,2/20/2019,89,1792.13 +632,Leslie,Sunley,lsunleyhj@furl.net,Female,142.154.216.195,1/14/2019,85,1049.36 +633,Serge,Brightman,sbrightmanhk@nsw.gov.au,Male,218.24.194.199,8/25/2019,17,3821.08 +634,Thadeus,Janosevic,tjanosevichl@auda.org.au,Male,117.42.23.253,6/4/2019,12,3771.8 +635,Spense,Ribchester,sribchesterhm@google.cn,Male,60.125.96.255,3/20/2019,10,4152.59 +636,Cordelia,Petrashov,cpetrashovhn@jalbum.net,Female,4.255.192.99,5/3/2019,42,4778.71 +637,Rhea,Jest,rjestho@hao123.com,Female,60.250.169.224,11/1/2019,88,3984.23 +638,Patricia,Feehery,pfeeheryhp@dot.gov,Female,238.226.108.19,1/3/2019,72,2436.71 +639,Griffie,Haswell,ghaswellhq@linkedin.com,Male,141.208.249.19,3/30/2019,54,4591.33 +640,Isahella,Brockett,ibrocketthr@webnode.com,Female,187.222.253.93,8/18/2019,40,2025.08 +641,Rhea,Castiglioni,rcastiglionihs@cpanel.net,Female,59.223.205.19,3/28/2019,8,4878.09 +642,Stu,Gladman,sgladmanht@yandex.ru,Male,148.174.89.129,2/7/2019,6,4658.63 +643,Meade,Penn,mpennhu@tinypic.com,Female,159.237.205.132,7/14/2019,67,1741.76 +644,Analise,Teesdale,ateesdalehv@istockphoto.com,Female,112.255.159.227,4/27/2019,43,4943.97 +645,Gabbie,Gawith,ggawithhw@bing.com,Male,156.88.177.49,9/1/2019,30,2127.26 +646,Fancie,Matura,fmaturahx@prweb.com,Female,245.199.208.176,10/14/2019,48,3611.12 +647,Oneida,Klee,okleehy@merriam-webster.com,Female,76.241.235.4,4/24/2019,75,3574.83 +648,Patty,Deadman,pdeadmanhz@deviantart.com,Female,119.238.140.122,12/3/2018,78,4990.77 +649,Rica,Habbershon,rhabbershoni0@imdb.com,Female,235.54.40.9,8/21/2019,72,4008.1 +650,Dominick,Morphey,dmorpheyi1@state.gov,Male,26.182.126.198,9/27/2019,32,2803.47 +651,Lin,Elvey,lelveyi2@qq.com,Female,217.142.5.50,5/2/2019,75,1382.58 +652,Candra,Ellershaw,cellershawi3@liveinternet.ru,Female,37.103.239.8,11/5/2019,64,1785.17 +653,Petr,Blamey,pblameyi4@cornell.edu,Male,102.165.209.59,11/16/2019,23,4146.8 +654,Starlene,Shoebrook,sshoebrooki5@un.org,Female,168.143.167.147,3/14/2019,4,4991.14 +655,Rochelle,Inggall,ringgalli6@biglobe.ne.jp,Female,102.127.212.247,9/12/2019,81,1583.69 +656,Ezmeralda,Jubert,ejuberti7@icio.us,Female,81.4.17.157,7/22/2019,52,4205.34 +657,Berny,Crufts,bcruftsi8@jigsy.com,Female,244.211.38.231,1/6/2019,46,4968.82 +658,Philis,Hitzke,phitzkei9@google.es,Female,206.218.221.24,10/5/2019,21,2082.32 +659,Dacey,Beck,dbeckia@netscape.com,Female,52.22.157.97,4/17/2019,22,3785.01 +660,Lammond,Esmead,lesmeadib@slate.com,Male,216.172.89.83,4/11/2019,87,4186.81 +661,Bevin,Pattullo,bpattulloic@yelp.com,Male,96.237.177.242,9/30/2019,9,3862.46 +662,Abbie,Melsom,amelsomid@businesswire.com,Female,226.28.218.124,8/28/2019,98,4520.86 +663,Hilarius,Weagener,hweagenerie@google.nl,Male,6.108.117.111,9/10/2019,80,4920.12 +664,Onida,Dewberry,odewberryif@chron.com,Female,95.189.17.251,7/12/2019,27,1206.75 +665,Sawyer,Behne,sbehneig@who.int,Male,232.40.190.187,6/26/2019,92,2730.93 +666,Ingaborg,Benoit,ibenoitih@diigo.com,Female,45.171.74.30,2/26/2019,79,3169.39 +667,Christyna,Beardow,cbeardowii@hibu.com,Female,212.112.66.197,8/15/2019,22,1664.25 +668,Chrysa,Bouda,cboudaij@posterous.com,Female,182.254.214.92,6/20/2019,58,4842.58 +669,Skell,Janny,sjannyik@statcounter.com,Male,117.115.79.57,8/25/2019,64,3147.82 +670,Willie,Gisbye,wgisbyeil@smh.com.au,Male,163.74.14.6,12/24/2018,60,2181.71 +671,Loydie,MacGiolla Pheadair,lmacgiollapheadairim@ftc.gov,Male,66.165.25.118,12/24/2018,17,4234.43 +672,Millisent,Warwick,mwarwickin@google.co.uk,Female,11.125.80.152,5/27/2019,57,2770.04 +673,Lutero,Campelli,lcampelliio@alibaba.com,Male,218.66.248.154,10/4/2019,29,4169.81 +674,Waverly,Kroch,wkrochip@google.co.uk,Male,117.138.8.158,10/6/2019,55,2248.55 +675,Jorge,Tipple,jtippleiq@google.cn,Male,75.32.226.30,1/5/2019,20,2316.81 +676,Rycca,Markham,rmarkhamir@posterous.com,Female,108.165.80.206,4/1/2019,37,3733.9 +677,Kendell,Tabourel,ktabourelis@ucsd.edu,Male,31.106.135.186,1/27/2019,41,2767.65 +678,Xymenes,Christofol,xchristofolit@slashdot.org,Male,205.98.142.54,4/17/2019,75,3761.36 +679,Willamina,Gluyas,wgluyasiu@patch.com,Female,208.141.12.123,9/10/2019,62,4055.56 +680,Missy,Chaudron,mchaudroniv@ox.ac.uk,Female,253.225.93.169,5/17/2019,54,3188.83 +681,Harrie,Levee,hleveeiw@dropbox.com,Female,104.60.96.6,9/4/2019,73,3779.89 +682,Nickie,Awdry,nawdryix@deviantart.com,Female,186.254.251.36,1/3/2019,76,2909.63 +683,Wash,Mapletoft,wmapletoftiy@baidu.com,Male,176.231.204.160,2/12/2019,3,1072.43 +684,Thea,Crankshaw,tcrankshawiz@bluehost.com,Female,240.218.215.50,12/5/2018,41,2503.95 +685,Bryna,Clemmen,bclemmenj0@slate.com,Female,117.149.65.242,6/24/2019,33,2635.47 +686,Fiann,Dipple,fdipplej1@usda.gov,Female,13.222.48.15,5/1/2019,97,4530.95 +687,Hilliary,Nowell,hnowellj2@jigsy.com,Female,237.64.236.63,9/8/2019,4,3931.64 +688,Francene,Perfitt,fperfittj3@upenn.edu,Female,35.17.66.62,3/5/2019,24,4353.24 +689,Adair,Foucher,afoucherj4@google.com,Male,184.228.99.56,5/7/2019,75,3261.23 +690,Evyn,Cristou,ecristouj5@xrea.com,Male,114.91.151.161,7/17/2019,95,3655.93 +691,Carleton,Mooreed,cmooreedj6@walmart.com,Male,17.30.55.141,8/31/2019,66,1486.95 +692,Ashley,Wallage,awallagej7@dyndns.org,Male,214.116.89.237,5/6/2019,17,3179.86 +693,Corney,Healeas,chealeasj8@phoca.cz,Male,36.170.221.28,12/24/2018,29,3068.73 +694,Marabel,Abbado,mabbadoj9@google.nl,Female,56.208.153.166,4/15/2019,4,4988.67 +695,Barr,Gregr,bgregrja@mozilla.com,Male,118.210.102.100,5/28/2019,31,2310.92 +696,Ulrika,Verni,uvernijb@hhs.gov,Female,252.208.223.205,3/13/2019,34,4254.15 +697,Carri,McWilliam,cmcwilliamjc@unblog.fr,Female,244.144.133.38,2/26/2019,57,4082.44 +698,Ciro,Burnet,cburnetjd@simplemachines.org,Male,56.117.3.236,11/7/2019,71,2943.82 +699,Eryn,Lindblom,elindblomje@paginegialle.it,Female,218.110.190.80,10/26/2019,98,3327.13 +700,Tandi,Jenney,tjenneyjf@sciencedirect.com,Female,61.111.94.217,8/9/2019,63,3161.01 +701,Karissa,McGeachy,kmcgeachyjg@themeforest.net,Female,97.151.85.120,3/15/2019,75,2793.19 +702,Daisie,Gosling,dgoslingjh@yale.edu,Female,80.132.185.177,12/24/2018,99,2564.95 +703,Web,Waters,wwatersji@icio.us,Male,138.42.236.158,11/26/2019,12,3133.25 +704,Beulah,Saltrese,bsaltresejj@rakuten.co.jp,Female,111.246.77.69,5/10/2019,85,1562.53 +705,Shea,Bansal,sbansaljk@timesonline.co.uk,Male,45.157.189.79,6/13/2019,64,4095.48 +706,Granger,Maddyson,gmaddysonjl@cdbaby.com,Male,4.174.208.225,10/22/2019,90,2312.31 +707,Frederic,Ferras,fferrasjm@europa.eu,Male,93.89.74.109,4/21/2019,1,2688.0 +708,Terri-jo,Blockwell,tblockwelljn@diigo.com,Female,139.206.39.244,10/28/2019,77,2032.65 +709,Portia,Messum,pmessumjo@cpanel.net,Female,205.8.231.154,7/5/2019,7,3703.36 +710,Fay,Bleakley,fbleakleyjp@fema.gov,Female,51.78.72.116,11/14/2019,97,4827.37 +711,Blayne,Marnane,bmarnanejq@nasa.gov,Male,254.10.160.105,11/17/2019,59,4393.22 +712,Brooke,Dreinan,bdreinanjr@yandex.ru,Male,101.190.49.170,7/13/2019,91,3896.42 +713,Dannie,Butten,dbuttenjs@w3.org,Male,254.183.249.58,7/3/2019,49,4087.49 +714,Niki,Gooch,ngoochjt@huffingtonpost.com,Male,14.126.59.16,2/13/2019,81,3541.85 +715,Penny,Bovis,pbovisju@macromedia.com,Female,194.73.1.154,9/15/2019,22,3343.77 +716,Agna,Wellings,awellingsjv@economist.com,Female,18.191.109.188,6/20/2019,59,3995.96 +717,Kelsi,Binestead,kbinesteadjw@weibo.com,Female,209.183.105.9,6/22/2019,10,2251.08 +718,Lucio,MacLennan,lmaclennanjx@oracle.com,Male,138.238.128.41,6/18/2019,76,4327.17 +719,Leonora,Shailer,lshailerjy@illinois.edu,Female,119.146.115.106,12/20/2018,29,4657.75 +720,Fonsie,O'Doogan,fodooganjz@cbsnews.com,Male,130.108.253.158,8/21/2019,94,1870.33 +721,Stearne,Claire,sclairek0@booking.com,Male,131.59.84.18,4/11/2019,98,3369.19 +722,Maye,Howis,mhowisk1@buzzfeed.com,Female,22.69.128.140,9/8/2019,85,1974.16 +723,Orton,Kiffe,okiffek2@github.com,Male,81.226.255.158,10/22/2019,52,3864.03 +724,Barty,Leadbeater,bleadbeaterk3@amazon.de,Male,208.66.100.248,4/24/2019,28,4214.56 +725,Sidnee,Coxhead,scoxheadk4@cam.ac.uk,Male,62.75.3.110,2/16/2019,8,4882.21 +726,Worden,Quan,wquank5@telegraph.co.uk,Male,86.238.192.197,3/13/2019,3,4136.64 +727,Brad,Marlor,bmarlork6@chron.com,Male,205.102.239.46,1/10/2019,27,3958.67 +728,Jefferson,Fanning,jfanningk7@google.de,Male,139.239.121.50,10/19/2019,26,3356.51 +729,North,Leidecker,nleideckerk8@nyu.edu,Male,240.19.0.156,4/1/2019,27,4866.45 +730,Chrissy,Rounsefull,crounsefullk9@topsy.com,Female,181.133.238.56,12/31/2018,19,1456.66 +731,Jennine,D'eathe,jdeatheka@ow.ly,Female,82.172.76.47,10/8/2019,87,1326.34 +732,Nedda,Hyland,nhylandkb@unesco.org,Female,85.174.186.120,10/9/2019,67,4967.34 +733,Ripley,Bavester,rbavesterkc@facebook.com,Male,200.70.120.11,7/30/2019,67,3364.31 +734,Amandi,Angrove,aangrovekd@hud.gov,Female,51.90.237.193,10/18/2019,98,3962.5 +735,Jandy,Fritchley,jfritchleyke@youtu.be,Female,236.202.35.177,11/17/2019,79,4641.47 +736,Kevin,Tozer,ktozerkf@godaddy.com,Male,92.185.81.191,9/20/2019,75,2652.18 +737,Erinna,Bucke,ebuckekg@hugedomains.com,Female,134.19.86.195,1/16/2019,19,4117.83 +738,Melania,Margach,mmargachkh@pagesperso-orange.fr,Female,57.86.172.205,1/22/2019,34,4369.1 +739,Darryl,Besset,dbessetki@canalblog.com,Female,150.168.219.97,10/15/2019,85,2449.44 +740,Urbano,Loy,uloykj@vistaprint.com,Male,192.95.90.230,1/29/2019,66,1697.74 +741,Shanan,Titcombe,stitcombekk@addtoany.com,Male,78.104.122.110,1/2/2019,31,2712.55 +742,North,Kropp,nkroppkl@huffingtonpost.com,Male,123.193.124.129,7/19/2019,32,2129.1 +743,Dario,Mennithorp,dmennithorpkm@nifty.com,Male,10.142.173.99,11/4/2019,64,2962.06 +744,Sally,Clerk,sclerkkn@youtu.be,Female,67.123.50.70,11/27/2019,32,4948.27 +745,Phillida,Grishkov,pgrishkovko@hatena.ne.jp,Female,105.59.57.150,5/19/2019,78,2513.36 +746,Warren,Gauthorpp,wgauthorppkp@dailymotion.com,Male,109.33.209.101,3/24/2019,74,3859.6 +747,Yurik,McArthur,ymcarthurkq@time.com,Male,177.53.197.246,6/4/2019,25,1927.47 +748,Lucine,Pritchett,lpritchettkr@adobe.com,Female,214.120.212.72,5/5/2019,44,3376.03 +749,Reeba,Facchini,rfacchiniks@fotki.com,Female,62.203.183.86,3/16/2019,29,2413.06 +750,Marys,MacGaughey,mmacgaugheykt@blogger.com,Female,241.223.207.143,7/28/2019,84,2694.2 +751,Abdul,Rollett,arollettku@intel.com,Male,224.183.67.157,5/16/2019,100,3327.64 +752,Lorry,Wolstenholme,lwolstenholmekv@facebook.com,Female,54.19.245.157,4/24/2019,43,4692.53 +753,Kore,Illingworth,killingworthkw@1und1.de,Female,4.3.169.154,11/2/2019,94,2378.36 +754,Mikel,Welbrock,mwelbrockkx@so-net.ne.jp,Male,94.86.96.2,5/16/2019,74,3938.38 +755,Debby,Largan,dlarganky@mozilla.org,Female,99.67.157.53,10/14/2019,62,2417.72 +756,Brana,Wabe,bwabekz@eepurl.com,Female,243.219.60.35,9/27/2019,36,3520.16 +757,Dyana,Dagworthy,ddagworthyl0@statcounter.com,Female,248.115.199.134,1/29/2019,10,1238.39 +758,Jobi,McAndie,jmcandiel1@alibaba.com,Female,76.175.25.123,9/8/2019,27,2305.18 +759,Karlene,Jery,kjeryl2@va.gov,Female,135.147.68.149,10/20/2019,58,1166.14 +760,Reinhold,Lepoidevin,rlepoidevinl3@baidu.com,Male,31.102.77.143,11/13/2019,22,2344.24 +761,Quent,Screen,qscreenl4@opera.com,Male,12.112.10.35,2/10/2019,53,4842.57 +762,Samuel,Lindberg,slindbergl5@github.io,Male,168.90.162.31,12/12/2018,89,1308.19 +763,Haleigh,Raubenheimer,hraubenheimerl6@quantcast.com,Female,105.212.55.253,1/14/2019,37,3535.98 +764,Shela,Croutear,scroutearl7@istockphoto.com,Female,91.117.195.180,2/8/2019,38,3265.27 +765,Kellyann,Capron,kcapronl8@example.com,Female,124.152.40.23,5/29/2019,50,4056.87 +766,Garey,enzley,genzleyl9@latimes.com,Male,90.152.83.190,9/28/2019,97,1906.66 +767,Mick,Schroter,mschroterla@google.fr,Male,7.60.95.15,5/31/2019,3,1395.4 +768,Alfy,Amdohr,aamdohrlb@google.com,Male,224.77.126.110,3/1/2019,50,4548.48 +769,Mirabelle,Staresmeare,mstaresmearelc@netvibes.com,Female,11.204.171.148,1/11/2019,55,4544.46 +770,Opal,Fincken,ofinckenld@paypal.com,Female,163.158.79.29,9/30/2019,16,4021.93 +771,Donielle,Philliphs,dphilliphsle@g.co,Female,141.55.105.178,7/20/2019,49,1131.35 +772,Stephie,Whitaker,swhitakerlf@skyrock.com,Female,225.117.77.187,3/27/2019,10,4871.35 +773,Elisa,Reddell,ereddelllg@cargocollective.com,Female,74.40.71.217,9/11/2019,9,4241.01 +774,Lars,Bunner,lbunnerlh@si.edu,Male,169.187.187.173,3/18/2019,30,4554.14 +775,Travers,Prinnett,tprinnettli@artisteer.com,Male,105.11.246.207,5/19/2019,60,1589.02 +776,Laurens,Held,lheldlj@delicious.com,Male,124.146.44.210,8/19/2019,96,2202.45 +777,Francesco,Florence,fflorencelk@army.mil,Male,220.136.205.22,7/26/2019,20,3108.6 +778,Lorenzo,Sandhill,lsandhillll@cbc.ca,Male,59.175.249.79,9/30/2019,75,1913.25 +779,Eddy,Duchart,educhartlm@blinklist.com,Male,45.9.255.250,9/3/2019,23,2272.21 +780,Melisse,Corpe,mcorpeln@biblegateway.com,Female,177.26.210.63,10/20/2019,52,4203.4 +781,Clementia,Raggett,craggettlo@wikispaces.com,Female,66.66.204.21,10/17/2019,35,3945.21 +782,Constantine,Spaducci,cspaduccilp@upenn.edu,Male,63.181.82.150,8/21/2019,46,2543.36 +783,Durant,Andreix,dandreixlq@desdev.cn,Male,196.76.252.7,9/20/2019,14,4613.73 +784,Dilan,Jesty,djestylr@nature.com,Male,121.131.244.90,3/19/2019,89,4665.71 +785,Geralda,Zotto,gzottols@samsung.com,Female,203.26.209.205,4/15/2019,76,2964.31 +786,Greg,Goodings,ggoodingslt@instagram.com,Male,64.38.244.127,9/12/2019,92,4711.1 +787,Bailey,Stuchberry,bstuchberrylu@indiatimes.com,Male,26.71.81.206,12/16/2018,30,1848.55 +788,Mata,Wilkowski,mwilkowskilv@google.co.uk,Male,155.242.58.56,11/26/2019,85,4335.11 +789,Hamnet,Phillpotts,hphillpottslw@paypal.com,Male,7.182.159.232,6/16/2019,71,1440.95 +790,Dimitry,Capeloff,dcapelofflx@pinterest.com,Male,109.227.224.121,7/10/2019,80,3282.33 +791,Rafaello,Coggles,rcogglesly@prweb.com,Male,111.224.235.85,12/10/2018,16,4340.53 +792,Judith,Witul,jwitullz@issuu.com,Female,175.239.78.176,3/2/2019,1,4375.79 +793,Addy,Symson,asymsonm0@xing.com,Female,21.208.246.221,2/11/2019,82,1009.31 +794,Joey,Troak,jtroakm1@hhs.gov,Male,134.87.130.194,1/28/2019,60,1454.05 +795,Goldi,Currell,gcurrellm2@xinhuanet.com,Female,93.106.48.19,10/16/2019,65,1228.04 +796,Joaquin,Teodori,jteodorim3@github.com,Male,240.116.96.102,7/31/2019,71,1091.62 +797,Rollo,Embling,remblingm4@un.org,Male,56.201.58.245,3/29/2019,20,2170.46 +798,Mina,Blondel,mblondelm5@weibo.com,Female,98.87.116.35,7/18/2019,58,1320.41 +799,Meridel,Aries,mariesm6@technorati.com,Female,142.95.106.58,11/15/2019,87,2705.6 +800,Bret,Perrelle,bperrellem7@360.cn,Male,118.67.219.42,6/16/2019,87,3500.22 +801,Augustine,Hamments,ahammentsm8@oracle.com,Male,55.61.38.103,3/26/2019,8,1526.07 +802,Billie,Roo,broom9@tuttocitta.it,Female,219.152.107.102,3/14/2019,97,3539.6 +803,Susann,Pargiter,spargiterma@umich.edu,Female,147.205.25.119,6/27/2019,22,1160.81 +804,Glennis,Penella,gpenellamb@posterous.com,Female,192.52.234.179,11/2/2019,36,2548.63 +805,Mozelle,Densumbe,mdensumbemc@phpbb.com,Female,72.69.188.204,7/10/2019,51,4208.3 +806,Bernarr,Congrave,bcongravemd@gizmodo.com,Male,54.147.238.56,6/24/2019,10,3573.77 +807,Humfrid,Glauber,hglauberme@adobe.com,Male,88.115.210.97,2/26/2019,18,1504.77 +808,Suzie,Awmack,sawmackmf@com.com,Female,25.246.10.228,9/22/2019,58,1734.63 +809,Tanitansy,McDill,tmcdillmg@apache.org,Female,176.212.121.232,9/10/2019,91,3442.09 +810,Astrid,O'Henery,aohenerymh@cnbc.com,Female,114.120.10.56,5/9/2019,8,3084.41 +811,Pepita,Estrella,pestrellami@1688.com,Female,32.233.56.52,11/12/2019,14,4239.8 +812,Cornie,Jennaway,cjennawaymj@amazon.de,Male,193.210.211.129,6/10/2019,19,3412.2 +813,Barbette,Rudgard,brudgardmk@myspace.com,Female,176.253.137.53,2/4/2019,1,1136.15 +814,Timofei,Donner,tdonnerml@ed.gov,Male,123.83.191.246,3/26/2019,1,1133.51 +815,Vasily,Jeary,vjearymm@nationalgeographic.com,Male,98.99.97.55,5/7/2019,92,1187.51 +816,Jamey,Windsor,jwindsormn@nih.gov,Male,196.125.95.56,6/29/2019,71,3115.9 +817,Evangelina,Gorrie,egorriemo@theglobeandmail.com,Female,35.130.99.82,1/14/2019,79,2252.03 +818,Odie,Titchmarsh,otitchmarshmp@sina.com.cn,Male,172.30.187.143,6/12/2019,63,3327.2 +819,Hestia,Fresson,hfressonmq@hp.com,Female,195.31.239.116,7/16/2019,39,3541.73 +820,Mortimer,Bestwerthick,mbestwerthickmr@microsoft.com,Male,217.124.4.132,10/24/2019,19,4855.38 +821,Chaunce,Hechlin,chechlinms@goo.ne.jp,Male,197.140.52.246,7/29/2019,1,2219.75 +822,Odella,Casson,ocassonmt@sciencedaily.com,Female,40.211.128.59,3/16/2019,93,3085.53 +823,Shellysheldon,Pallent,spallentmu@youtu.be,Male,153.196.220.186,2/19/2019,19,2695.0 +824,Emelyne,Childes,echildesmv@livejournal.com,Female,126.181.2.21,11/6/2019,13,1095.75 +825,Fred,Calf,fcalfmw@chicagotribune.com,Female,240.193.197.180,11/17/2019,79,3914.36 +826,Dag,Mulliss,dmullissmx@4shared.com,Male,238.137.20.149,8/6/2019,4,3539.27 +827,Georgeanna,Pitcock,gpitcockmy@comsenz.com,Female,102.167.151.225,10/12/2019,84,4585.02 +828,Sunny,Panther,spanthermz@unicef.org,Male,151.172.118.190,1/12/2019,91,4343.08 +829,Belita,Alderson,baldersonn0@blogtalkradio.com,Female,137.76.226.221,1/10/2019,42,3569.01 +830,Ame,Forte,aforten1@sourceforge.net,Female,147.157.177.133,1/8/2019,21,1365.56 +831,Timmie,Rodden,troddenn2@businessweek.com,Male,130.254.151.248,3/26/2019,96,1881.36 +832,Ole,Schafer,oschafern3@about.com,Male,127.222.178.16,3/17/2019,17,2401.6 +833,Patty,Cooling,pcoolingn4@seesaa.net,Female,61.215.62.193,2/11/2019,48,2474.66 +834,Collin,Stute,cstuten5@goo.ne.jp,Male,130.45.80.94,9/10/2019,4,3847.7 +835,Yorgo,Swancott,yswancottn6@intel.com,Male,219.62.66.145,2/25/2019,65,2423.66 +836,Ron,Routley,rroutleyn7@spotify.com,Male,56.197.234.81,8/23/2019,33,2148.92 +837,Stefania,McSkin,smcskinn8@dot.gov,Female,98.31.14.146,3/16/2019,62,1990.6 +838,Salem,Lergan,slergann9@usnews.com,Male,15.104.246.221,6/13/2019,38,2449.21 +839,Dunstan,Kenzie,dkenziena@networksolutions.com,Male,87.134.108.52,11/9/2019,44,4224.03 +840,Hunt,Ledamun,hledamunnb@yahoo.com,Male,176.159.246.215,3/10/2019,86,3822.13 +841,Farrand,Callam,fcallamnc@paypal.com,Female,226.107.7.0,8/27/2019,74,2378.51 +842,Nada,Catlin,ncatlinnd@furl.net,Female,47.100.217.78,9/6/2019,80,4344.19 +843,Carlita,Glavis,cglavisne@thetimes.co.uk,Female,51.186.12.78,12/12/2018,10,1226.08 +844,Lianna,McColm,lmccolmnf@smh.com.au,Female,11.59.43.151,12/24/2018,75,2920.03 +845,Darill,Klempke,dklempkeng@bloomberg.com,Male,130.161.53.81,10/30/2019,26,1470.72 +846,Laughton,Whithalgh,lwhithalghnh@booking.com,Male,245.52.162.163,5/13/2019,95,3958.01 +847,Cammie,Izhakov,cizhakovni@admin.ch,Female,124.164.33.27,4/7/2019,43,2040.2 +848,Marline,Duddell,mduddellnj@opensource.org,Female,170.97.255.200,6/14/2019,35,2449.64 +849,Hillier,Caulder,hcauldernk@npr.org,Male,83.220.85.148,8/30/2019,1,3069.76 +850,Coral,Raffles,crafflesnl@friendfeed.com,Female,149.92.2.58,1/20/2019,13,1301.57 +851,Barb,Dudny,bdudnynm@fc2.com,Female,243.249.246.96,2/19/2019,2,4053.62 +852,Arch,Bente,abentenn@mapy.cz,Male,229.210.219.135,9/9/2019,41,4556.35 +853,Alix,Sheriff,asheriffno@jigsy.com,Female,203.28.108.229,1/30/2019,70,2074.89 +854,Vaughn,Schwaiger,vschwaigernp@webmd.com,Male,112.58.20.107,5/25/2019,5,2348.46 +855,Stearn,Linggood,slinggoodnq@multiply.com,Male,247.71.219.146,11/23/2019,5,3348.25 +856,Doralin,Kleinschmidt,dkleinschmidtnr@ca.gov,Female,30.114.11.63,9/21/2019,29,3475.53 +857,Ali,Treweke,atrewekens@xrea.com,Female,181.217.116.253,1/19/2019,50,4184.66 +858,Brandon,Ogger,boggernt@example.com,Male,19.9.219.173,12/21/2018,53,3270.85 +859,Garth,Sterre,gsterrenu@sina.com.cn,Male,7.170.103.142,12/30/2018,60,4285.48 +860,Elberta,Stooke,estookenv@goo.gl,Female,104.12.213.185,4/7/2019,60,1570.75 +861,Winfield,Peacock,wpeacocknw@liveinternet.ru,Male,214.134.25.83,2/21/2019,76,4428.25 +862,Ernest,Allabarton,eallabartonnx@home.pl,Male,148.170.100.93,4/25/2019,54,2410.98 +863,Florette,Pendle,fpendleny@google.co.uk,Female,163.75.98.87,3/3/2019,25,1877.39 +864,Enrica,Smogur,esmogurnz@jiathis.com,Female,212.86.14.17,10/30/2019,90,1736.18 +865,Selle,Meece,smeeceo0@va.gov,Female,216.204.181.172,12/31/2018,9,4254.26 +866,Leighton,Behninck,lbehnincko1@ted.com,Male,128.137.145.34,7/28/2019,8,4817.49 +867,Dallis,Kildahl,dkildahlo2@ucsd.edu,Male,57.50.158.153,11/29/2019,80,3940.06 +868,Carr,McKeachie,cmckeachieo3@cbsnews.com,Male,155.169.255.5,10/25/2019,92,1248.52 +869,Gwendolin,Twinborough,gtwinborougho4@engadget.com,Female,126.69.215.135,10/31/2019,60,1790.54 +870,Katha,Mains,kmainso5@wired.com,Female,108.80.188.101,9/5/2019,90,1953.27 +871,Anabella,Hawkridge,ahawkridgeo6@elegantthemes.com,Female,194.91.70.106,11/7/2019,33,1067.92 +872,Carney,Moxon,cmoxono7@about.me,Male,243.35.248.83,5/25/2019,46,3541.93 +873,Cynthy,Minette,cminetteo8@unesco.org,Female,198.115.128.127,11/13/2019,17,1202.6 +874,Humfrey,Doogue,hdoogueo9@businesswire.com,Male,118.100.123.208,9/24/2019,21,1883.88 +875,Rosabella,Frowen,rfrowenoa@who.int,Female,168.21.241.150,3/26/2019,12,3747.05 +876,Inger,Benoiton,ibenoitonob@bing.com,Female,62.18.91.144,2/5/2019,55,3668.36 +877,Aldus,McHardy,amchardyoc@google.com,Male,217.43.238.237,2/7/2019,25,3733.76 +878,Thea,Klemke,tklemkeod@aboutads.info,Female,13.193.63.194,9/1/2019,15,2199.75 +879,Nathaniel,Alesio,nalesiooe@prweb.com,Male,45.77.38.94,8/21/2019,88,1398.05 +880,Jo-ann,Thring,jthringof@plala.or.jp,Female,67.45.206.82,3/28/2019,23,1119.69 +881,Betteann,Andreone,bandreoneog@google.it,Female,28.46.236.211,9/21/2019,68,2637.19 +882,Leland,Boulding,lbouldingoh@booking.com,Male,223.0.133.33,6/26/2019,95,1645.04 +883,Rosalia,Sieve,rsieveoi@opera.com,Female,146.244.116.76,11/14/2019,20,3684.84 +884,Pietra,Lillyman,plillymanoj@sphinn.com,Female,241.84.132.180,1/28/2019,100,4262.03 +885,Cosme,Guest,cguestok@chronoengine.com,Male,200.190.189.24,4/16/2019,70,2178.29 +886,Wallie,Telega,wtelegaol@ebay.com,Male,121.243.189.159,4/30/2019,52,1182.3 +887,Lishe,Skillett,lskillettom@umn.edu,Female,195.58.225.2,3/5/2019,71,2012.1 +888,Arleta,Manley,amanleyon@linkedin.com,Female,51.84.250.183,10/15/2019,15,4912.75 +889,Ravi,Willder,rwillderoo@clickbank.net,Male,172.59.196.252,11/3/2019,61,1209.86 +890,Averell,Towner,atownerop@twitpic.com,Male,39.252.161.23,5/12/2019,64,4531.62 +891,Patrice,Dedman,pdedmanoq@marriott.com,Male,210.154.94.25,6/13/2019,74,4735.98 +892,Shem,Girtin,sgirtinor@is.gd,Male,104.118.74.161,11/10/2019,100,4267.43 +893,Francyne,Bransby,fbransbyos@g.co,Female,44.30.38.123,2/4/2019,46,4181.62 +894,Christye,Farbrace,cfarbraceot@hibu.com,Female,112.150.190.191,2/16/2019,23,2095.36 +895,Nadean,Given,ngivenou@spiegel.de,Female,151.241.243.171,4/25/2019,81,2443.82 +896,Cesya,Clutheram,cclutheramov@smh.com.au,Female,165.200.216.167,7/4/2019,31,3937.84 +897,Bax,Goodwins,bgoodwinsow@nhs.uk,Male,11.52.15.206,4/9/2019,91,2252.61 +898,Lewiss,Lamblot,llamblotox@hubpages.com,Male,47.131.77.115,8/30/2019,24,2400.36 +899,Red,Wick,rwickoy@photobucket.com,Male,83.184.219.168,10/21/2019,15,4178.01 +900,Salvatore,Pimblett,spimblettoz@cmu.edu,Male,167.151.230.214,5/15/2019,42,1341.9 +901,Hughie,Bryceson,hbrycesonp0@princeton.edu,Male,196.234.12.37,6/21/2019,62,1336.58 +902,Clayson,Hankinson,chankinsonp1@over-blog.com,Male,23.197.178.40,8/12/2019,99,1615.05 +903,Lilas,Liccardo,lliccardop2@wisc.edu,Female,122.30.29.218,11/8/2019,18,2646.47 +904,Orville,Durrant,odurrantp3@clickbank.net,Male,72.40.168.148,8/12/2019,37,1473.73 +905,Orrin,Skelly,oskellyp4@a8.net,Male,105.220.135.4,5/6/2019,50,1525.97 +906,Tallou,Sandyford,tsandyfordp5@homestead.com,Female,227.225.220.181,2/6/2019,58,4786.43 +907,Quincy,Roseman,qrosemanp6@biglobe.ne.jp,Male,54.163.190.213,7/1/2019,24,4037.23 +908,Tabbie,Kiraly,tkiralyp7@newsvine.com,Male,224.190.131.109,3/13/2019,100,1323.77 +909,Sandy,Matskevich,smatskevichp8@simplemachines.org,Female,2.231.87.52,12/29/2018,82,3517.0 +910,Duane,Dye,ddyep9@nasa.gov,Male,104.68.110.228,10/11/2019,72,3764.03 +911,Vassily,McNeill,vmcneillpa@eepurl.com,Male,224.20.3.98,5/2/2019,93,2130.67 +912,Donalt,Astlet,dastletpb@chron.com,Male,114.210.201.171,5/7/2019,75,2025.04 +913,Nickey,Stobie,nstobiepc@icio.us,Male,185.166.110.244,4/16/2019,71,1045.07 +914,Alejandra,Evenett,aevenettpd@spotify.com,Female,53.71.229.172,3/31/2019,68,3272.6 +915,Malia,Turpey,mturpeype@slashdot.org,Female,100.204.158.195,7/24/2019,23,1887.0 +916,Sancho,Coy,scoypf@unicef.org,Male,172.2.26.180,7/3/2019,57,3139.02 +917,Gabey,Skoyles,gskoylespg@epa.gov,Female,194.148.9.101,3/13/2019,84,2292.4 +918,Bertrando,Ivankin,bivankinph@fda.gov,Male,118.157.82.229,9/22/2019,3,1287.51 +919,Tannie,MacCosty,tmaccostypi@digg.com,Male,72.202.202.95,12/24/2018,82,2588.07 +920,Ranee,Bessent,rbessentpj@imgur.com,Female,127.24.169.67,11/10/2019,54,3444.15 +921,Tiffanie,Trawin,ttrawinpk@marketwatch.com,Female,17.85.226.126,5/24/2019,65,2725.46 +922,Almeria,Gillan,agillanpl@geocities.com,Female,122.181.145.74,11/21/2019,9,4518.15 +923,Myron,Cornuau,mcornuaupm@fema.gov,Male,119.235.159.166,8/23/2019,71,2151.88 +924,Julie,Garmston,jgarmstonpn@istockphoto.com,Female,239.238.200.150,1/14/2019,64,2838.43 +925,Piggy,Gobel,pgobelpo@fastcompany.com,Male,118.158.61.149,2/6/2019,34,3108.47 +926,Gib,Featherstone,gfeatherstonepp@infoseek.co.jp,Male,90.82.112.24,7/12/2019,72,1446.28 +927,Ezri,Roome,eroomepq@bandcamp.com,Male,162.179.9.53,11/8/2019,89,4420.45 +928,Mattias,Bilbie,mbilbiepr@jugem.jp,Male,26.98.219.102,6/29/2019,53,3055.7 +929,Tremain,Puleston,tpulestonps@newsvine.com,Male,57.241.217.97,2/19/2019,74,4113.34 +930,Penrod,Human,phumanpt@amazon.co.jp,Male,191.23.222.227,8/12/2019,14,3914.95 +931,Helyn,Ladell,hladellpu@a8.net,Female,20.100.134.221,4/17/2019,94,2293.8 +932,Enid,Rough,eroughpv@imageshack.us,Female,107.222.42.7,6/17/2019,21,1914.06 +933,Eloise,Rumbold,erumboldpw@meetup.com,Female,43.79.13.253,12/16/2018,59,4639.52 +934,Sol,Merricks,smerrickspx@ow.ly,Male,123.39.195.179,11/1/2019,57,2899.49 +935,Mahmud,Keeney,mkeeneypy@wikispaces.com,Male,72.102.171.49,3/11/2019,6,4225.54 +936,Asia,Bartlosz,abartloszpz@mtv.com,Female,243.106.58.70,12/21/2018,69,1884.34 +937,Christian,Stirman,cstirmanq0@discuz.net,Female,107.80.178.46,8/29/2019,55,2956.9 +938,Alfredo,Adnams,aadnamsq1@washington.edu,Male,37.204.15.227,12/6/2018,15,2349.12 +939,Rudy,Diggins,rdigginsq2@nsw.gov.au,Male,136.105.142.55,10/22/2019,56,4720.66 +940,Valaria,Paulus,vpaulusq3@etsy.com,Female,109.100.3.110,1/2/2019,26,1610.79 +941,Conny,Roels,croelsq4@mozilla.com,Female,208.213.210.29,1/31/2019,54,4096.32 +942,Bucky,Kennan,bkennanq5@pinterest.com,Male,172.225.189.229,8/19/2019,87,4628.59 +943,Iago,Samwyse,isamwyseq6@github.io,Male,89.18.109.205,11/10/2019,60,4746.45 +944,Pietrek,Gori,pgoriq7@reverbnation.com,Male,92.121.178.154,11/5/2019,33,1692.9 +945,Tabina,Kears,tkearsq8@theglobeandmail.com,Female,144.45.170.150,10/3/2019,52,3611.17 +946,Wendye,Sollis,wsollisq9@walmart.com,Female,238.248.64.91,5/1/2019,5,3395.62 +947,Rafferty,Waycot,rwaycotqa@yellowbook.com,Male,56.12.230.243,10/22/2019,65,3819.8 +948,Bendix,Heamus,bheamusqb@adobe.com,Male,249.250.105.13,1/13/2019,1,3871.34 +949,Elfrieda,Gierardi,egierardiqc@uiuc.edu,Female,70.40.147.33,5/15/2019,33,3013.33 +950,Malachi,Sweet,msweetqd@soup.io,Male,45.89.78.169,12/12/2018,80,3668.82 +951,Lanae,Pollendine,lpollendineqe@nasa.gov,Female,95.61.177.183,2/13/2019,1,4889.44 +952,Ryley,Lawry,rlawryqf@scientificamerican.com,Male,125.229.131.211,1/14/2019,2,3286.34 +953,Terri-jo,Jamblin,tjamblinqg@epa.gov,Female,188.157.97.186,6/5/2019,47,2943.87 +954,Leland,Hildred,lhildredqh@scribd.com,Male,225.216.250.143,6/17/2019,56,4864.96 +955,Gabe,Olyff,golyffqi@nba.com,Male,132.213.9.245,4/23/2019,98,1702.76 +956,Madelena,Astling,mastlingqj@samsung.com,Female,30.58.29.118,12/18/2018,84,4673.11 +957,Reinaldo,Kitchingman,rkitchingmanqk@csmonitor.com,Male,188.111.118.234,5/23/2019,75,4450.61 +958,Padgett,Spacey,pspaceyql@google.de,Male,36.237.235.122,11/27/2019,56,1279.87 +959,Rachel,Chezelle,rchezelleqm@domainmarket.com,Female,96.79.189.100,11/24/2019,91,3136.13 +960,Pollyanna,Eggerton,peggertonqn@nsw.gov.au,Female,18.201.58.237,12/19/2018,20,3493.5 +961,Marris,Wincott,mwincottqo@bandcamp.com,Female,184.31.11.215,6/12/2019,8,1515.01 +962,Shae,Mair,smairqp@friendfeed.com,Male,62.3.75.126,5/26/2019,17,1886.62 +963,Rik,Citrine,rcitrineqq@ameblo.jp,Male,185.79.147.211,7/2/2019,34,4809.78 +964,Clare,Bohey,cboheyqr@wunderground.com,Female,107.176.103.42,5/11/2019,88,4309.81 +965,Hayes,Brushfield,hbrushfieldqs@i2i.jp,Male,2.5.51.42,11/26/2019,76,1551.99 +966,Misty,Domico,mdomicoqt@google.pl,Female,39.47.212.202,12/6/2018,70,4670.57 +967,Arthur,Elstub,aelstubqu@independent.co.uk,Male,176.248.255.191,12/30/2018,46,2705.52 +968,Berkeley,Hapgood,bhapgoodqv@technorati.com,Male,178.208.39.27,10/14/2019,22,3380.97 +969,Brose,Kynton,bkyntonqw@arstechnica.com,Male,46.20.210.218,3/5/2019,56,4943.64 +970,Tarah,Deguara,tdeguaraqx@netvibes.com,Female,218.157.37.87,10/15/2019,52,4735.44 +971,Lorie,Tooting,ltootingqy@e-recht24.de,Female,180.29.70.96,5/13/2019,2,3053.29 +972,Consuela,Lyndon,clyndonqz@nature.com,Female,33.99.22.111,10/26/2019,16,1782.96 +973,Heloise,Loges,hlogesr0@ebay.co.uk,Female,65.91.147.32,8/6/2019,91,3905.33 +974,Lamond,Hamnet,lhamnetr1@tripod.com,Male,59.5.218.194,3/21/2019,78,3783.64 +975,Matilda,Clemencet,mclemencetr2@livejournal.com,Female,50.223.87.130,10/4/2019,23,2543.68 +976,Bayard,Roskruge,broskruger3@sitemeter.com,Male,69.240.99.87,7/3/2019,80,1587.29 +977,Benn,Jirak,bjirakr4@delicious.com,Male,128.35.209.194,12/2/2018,44,3277.87 +978,Nahum,Attle,nattler5@tiny.cc,Male,112.43.114.140,6/8/2019,7,2273.81 +979,Evangeline,Ribey,eribeyr6@google.fr,Female,81.105.199.64,3/29/2019,67,4510.15 +980,Ryann,Ellul,rellulr7@ning.com,Female,240.217.190.216,12/13/2018,84,1668.81 +981,Ermina,Venn,evennr8@de.vu,Female,133.154.240.217,2/13/2019,97,1524.47 +982,Toby,Durward,tdurwardr9@state.tx.us,Male,121.122.162.100,6/18/2019,93,2462.12 +983,Frederic,Scraney,fscraneyra@gnu.org,Male,169.185.152.85,9/1/2019,5,4899.03 +984,Marty,Phebey,mphebeyrb@tripadvisor.com,Male,168.107.107.230,12/6/2018,84,4793.66 +985,Harris,Lockney,hlockneyrc@nifty.com,Male,93.129.49.110,8/4/2019,49,1798.63 +986,Eugen,Leverton,elevertonrd@instagram.com,Male,159.232.54.24,9/21/2019,60,3305.1 +987,Gabie,Beardwood,gbeardwoodre@theatlantic.com,Male,20.18.125.82,1/24/2019,5,1946.11 +988,Myrwyn,Pesterfield,mpesterfieldrf@scientificamerican.com,Male,145.133.177.91,8/13/2019,25,3808.27 +989,Mercy,Chadd,mchaddrg@51.la,Female,185.164.11.233,6/3/2019,40,4001.54 +990,Cornelle,Conford,cconfordrh@behance.net,Female,21.225.190.101,1/23/2019,37,3044.81 +991,Maynord,Till,mtillri@youtube.com,Male,152.132.239.240,7/13/2019,100,1128.62 +992,Evelin,Dmitrichenko,edmitrichenkorj@weibo.com,Male,209.57.214.249,7/17/2019,97,1964.24 +993,Quincy,Rupel,qrupelrk@github.io,Male,64.185.162.129,7/17/2019,98,3247.38 +994,Althea,Ternault,aternaultrl@hao123.com,Female,67.166.119.252,9/5/2019,71,1679.32 +995,Tracy,Usmar,tusmarrm@archive.org,Female,218.147.181.108,4/29/2019,13,4937.95 +996,Frank,Thebeaud,fthebeaudrn@phpbb.com,Male,80.246.35.156,3/21/2019,91,3229.53 +997,Kerk,Feathersby,kfeathersbyro@i2i.jp,Male,216.252.23.125,4/2/2019,38,2610.64 +998,Brigid,Worvell,bworvellrp@cnn.com,Female,48.50.178.158,5/19/2019,35,1974.9 +999,Ike,Van der Merwe,ivandermerwerq@craigslist.org,Male,103.61.116.181,8/14/2019,56,2115.14 +1000,Mark,Dallison,mdallisonrr@cdc.gov,Male,187.245.203.40,8/8/2019,73,1286.22 diff --git a/scripts/accum_pattern_multiple-scrabble.py b/scripts/accum_pattern_multiple-scrabble.py new file mode 100644 index 0000000..8fd9a4e --- /dev/null +++ b/scripts/accum_pattern_multiple-scrabble.py @@ -0,0 +1,30 @@ + # -*- coding: utf-8 -*- +""" +Created on Thu Jun 6 16:11:59 2019 + +@author: http://ice-web.cc.gatech.edu/ce21/1/static/audio/static/pip/Dictionaries/dictionary_accum.html#scarlet.txt +""" + +f = open('study_in_scarlet.txt', 'r', encoding='utf8') +txt = f.read() +f.close() +# now txt is one long string containing all the characters +x = {} # start with an empty dictionary +for c in txt: + if c not in x: + # we have not seen this character before, so initialize a counter for it + x[c] = 0 + + #whether we've seen it before or not, increment its counter + x[c] = x[c] + 1 + +# build a second dictionary, containing the scrabble scores for individual characters +# calculate the scrabble score of your text +letter_values = {'a': 1, 'b': 3, 'c': 3, 'd': 2, 'e': 1, 'f':4, 'g': 2, 'h':4, 'i':1, 'j':8, 'k':5, 'l':1, 'm':3, 'n':1, 'o':1, 'p':3, 'q':10, 'r':1, 's':1, 't':1, '':1, 'v':8, 'w':4, 'x':8, 'y':4, 'z':10} + +tot = 0 +for y in x: + if y in letter_values: + tot = tot + letter_values[y] * x[y] + +print('total scrabble score = ', tot) diff --git a/scripts/accum_pattern_multiple.py b/scripts/accum_pattern_multiple.py new file mode 100644 index 0000000..2cbaedd --- /dev/null +++ b/scripts/accum_pattern_multiple.py @@ -0,0 +1,22 @@ +h# -*- coding: utf-8 -*- +""" +Created on Thu Jun 6 15:31:20 2019 + +@author: http://ice-web.cc.gatech.edu/ce21/1/static/audio/static/pip/Dictionaries/dictionary_accum.html#scarlet.txt +""" + +f = open('study_in_scarlet.txt', 'r', encoding="utf8") +txt = f.read() +f.close() +# now txt is one long string containing all the characters +x = {} # start with an empty dictionary +for c in txt: + if c not in x: + # we have not seen this character before, so initialize a counter for it + x[c] = 0 + + #whether we've seen it before or not, increment its counter + x[c] = x[c] + 1 + +for c in x.keys(): + print(c + ": " + str(x[c]) + " occurrences") \ No newline at end of file diff --git a/scripts/accum_pattern_single.py b/scripts/accum_pattern_single.py new file mode 100644 index 0000000..ec0983f --- /dev/null +++ b/scripts/accum_pattern_single.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 6 14:47:11 2019 + +@author: http://ice-web.cc.gatech.edu/ce21/1/static/audio/static/pip/Iteration/iteration.html +""" + +nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +accum = 0 +for w in nums: + accum = accum + w + print(accum) + diff --git a/scripts/accum_pattern_single_text.py b/scripts/accum_pattern_single_text.py new file mode 100644 index 0000000..7e7c546 --- /dev/null +++ b/scripts/accum_pattern_single_text.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 6 15:02:14 2019 + +@author: http://ice-web.cc.gatech.edu/ce21/1/static/audio/static/pip/Dictionaries/dictionary_accum.html#scarlet.txt +""" + +#f = open('study_in_scarlet.txt', 'r', encoding="utf8") +f = open('Data\patients.txt', 'r') +txt = f.read() +# now txt is one long string containing all the characters +t_count = 0 #initialize the accumulator variable + +# check the number of occurences of t +for ch in txt: + if ch == 't': + t_count = t_count + 1 #increment the counter +print("t: " + str(t_count) + " occurrences") +f.close() + + +# a more elaborted loop for 2 characters +# a lot of elif's required to test for all 26 characters +t_count = 0 #initialize the accumulator variable +s_count = 0 # initialize the s counter accumulator as well +for ch in txt: + if ch == 't': + t_count = t_count + 1 #increment the t counter + elif ch == 's': + s_count = s_count + 1 +print("t: " + str(t_count) + " occurrences") +print("s: " + str(s_count) + " occurrences") +f.close() diff --git a/scripts/actors.csv b/scripts/actors.csv new file mode 100644 index 0000000..b82ba4c --- /dev/null +++ b/scripts/actors.csv @@ -0,0 +1,5 @@ +First Name,Last Name,Date of Birth +Tom,Cruise,"July 3, 1962" +Bruce,Willis,"March 19, 1955" +Morgan,Freeman,"June 1, 1937" +John,Wayne,"May 26, 1907" \ No newline at end of file diff --git a/scripts/bitwise.py b/scripts/bitwise.py new file mode 100644 index 0000000..b8a165d --- /dev/null +++ b/scripts/bitwise.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 14 11:19:09 2018 +bitwise + +@author: u0015831 +""" +x = 10 +print(bin(x)) + +y = 13 +print(bin(y)) + +print('x&y',x&y) +print('x&y',bin(x&y)) + +print('x|y',x|y) +print('x|y',bin(x|y)) + +print('x', x) +print('x<<2',x<<2) +print('x<<2',bin(x<<2)) + +print('x', x) +print('x>>1',x>>1) +print('x>>1',bin(x>>1)) + +print('x', x) +print('~x',~x) +print('~x',bin(~x)) \ No newline at end of file diff --git a/scripts/block_code.py b/scripts/block_code.py new file mode 100644 index 0000000..0fae151 --- /dev/null +++ b/scripts/block_code.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Feb 21 10:06:18 2022 + +@author: u0015831 +""" + +from math import sqrt + +my_list = [1, 2, 3, 4] +result = 0 +for i in my_list: + if i%2 == 0: + result = result + sqrt(i) + print(result) \ No newline at end of file diff --git a/scripts/check_variable_object.py b/scripts/check_variable_object.py new file mode 100644 index 0000000..e4a0f4d --- /dev/null +++ b/scripts/check_variable_object.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +""" +check variable as an object + +@author: u0015831 +""" + +a = 4.5 +b = 56 +c = 'Hello' +d = a + b + +print(a, b, c, d) + +print (type(a), type(b), type(c), type(d)) + +print(dir(a)) +print('is a integer?', a.is_integer()) diff --git a/scripts/check_whitespace.py b/scripts/check_whitespace.py new file mode 100644 index 0000000..a5d1c2b --- /dev/null +++ b/scripts/check_whitespace.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 14 10:34:11 2018 +check the White Space! +@author: u0015831 +""" +#%% +for i in range(3): + print("Hello") + print("Bye!") + +#%% +# for i in range(10): +# if i%2 == 1: +# print (0.1*i) +# print ('bla') +# print('end block') + +#%% +# for i in range(10): +# if i%2 == 1: +# print (0.1*i) +# print ('bla') +# print('end block') + +#%% +# for i in range(10): +# if i%2 == 1: +# print (0.1*i) +# print('bla') +# print('end block') \ No newline at end of file diff --git a/scripts/command_line_io.py b/scripts/command_line_io.py new file mode 100644 index 0000000..b67ad56 --- /dev/null +++ b/scripts/command_line_io.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Nov 7 13:22:42 2019 + +command line IO + +example command line: python command_line_io.py o m g +example in Spyder: run command_line_io.py o m g + +@author: u0015831 +""" + +import sys +print('This is the name of the script: ', sys.argv[0]) +print('Number of arguments: ', len(sys.argv)) +print('The arguments are: ', sys.argv) + + +for arg in sys.argv: + print(type(arg), arg) \ No newline at end of file diff --git a/scripts/convert_from_decimal.py b/scripts/convert_from_decimal.py new file mode 100644 index 0000000..4b9dd2c --- /dev/null +++ b/scripts/convert_from_decimal.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Aug 29 09:51:15 2019 +taken from Marina von Steinkirch + +@author: u0015831 +""" + +def convert_to_decimal(number, base): + multiplier, result = 1, 0 + while number > 0: + result += number%10*multiplier + multiplier *= base + number = number//10 + return result + +def test_convert_to_decimal(): + number, base = 1001, 2 + assert(convert_to_decimal(number, base) == 9) + +def test_convert_from_decimal(): + number, base = 9, 2 + assert(convert_from_decimal(number, base) == 1001) \ No newline at end of file diff --git a/scripts/convert_to_decimal.py b/scripts/convert_to_decimal.py new file mode 100644 index 0000000..3dd17d2 --- /dev/null +++ b/scripts/convert_to_decimal.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Aug 29 09:51:15 2019 +taken from Marina von Steinkirch + +@author: u0015831 +""" + +def convert_to_decimal(number, base): + multiplier, result = 1, 0 + while number > 0: + result += number%10*multiplier + multiplier *= base + number = number//10 + return result + +def test_convert_to_decimal(): + number, base = 1001, 2 + print ('number = ', number) + print ('base = ', base) + assert(convert_to_decimal(number, base) == 9), 'result must equal 9' + diff --git a/scripts/create_lists.py b/scripts/create_lists.py new file mode 100644 index 0000000..7d3a950 --- /dev/null +++ b/scripts/create_lists.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" +Created on Sat Nov 23 11:52:06 2019 + +create lists + +""" +# classic approach +squares = [] +for i in range(10): + squares.append(i * i) +squares + +# list comprehension +squares = [i * i for i in range(10)] +squares \ No newline at end of file diff --git a/scripts/deck.py b/scripts/deck.py new file mode 100644 index 0000000..0babfa5 --- /dev/null +++ b/scripts/deck.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +import random + + +def generate_deck(): + """Return a list containing the cards in a standard, 52-card deck.""" + suits = ["Spades", "Hearts", "Diamonds", "Clubs"] + ranks = ["2", "3", "4", "5", "6", "7", "8", "9", "10", + "Jack", "Queen", "King", "Ace"] + deck = [] + for s in suits: + for r in ranks: + name = "%s of %s" % (r, s) + deck.append(name) + return deck + + +def draw_random(deck): + """Draw a random card from the given deck.""" + n = len(deck) + i = random.randint(0, n) + k = draw_card(deck, i) + return k + + +def draw_card(deck, x): + """Return card no. x from the deck.""" + return deck[x] + + +def test_with_replacement(): + print("Generating deck") + deck = generate_deck() + + number = 10 + print("Drawing", number, "random cards with replacement:") + drawn = set() + for x in range(number): + card = draw_random(deck) + print(" You drew", card) + drawn.add(card) + unique = len(drawn) + print("Drew", unique, "different cards") + + +test_with_replacement() \ No newline at end of file diff --git a/scripts/demo_mix.xlsx b/scripts/demo_mix.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0aac4758a5ebb60dcbe506c931d52b25bdcd7893 GIT binary patch literal 9175 zcmeHN|#wjv2oV6l1E4(6lW?$i zHMe&)QulH+cQJVCX=h9I9^nB481Ml0`~MyP#VgR6G-BV*j^2Hcc#f&@NsV-cT@f#| z;|CdUUO93vi3II9T_i?uZ8oWKS^;Lr^SOLg((7w~Co`;`oo)-}2+Kxhsg|v`==$r` zPA4xLm9tL-6Q~&rlg}{a%HimLRZzZPVXQpDfS?<@|JHu(zAw*@rEfloL${ zp;ncqU}%9`vBj)D!hI;0(v6ZPuH6(_$qrI2$PX}yKlhcrkc@2;b;4d2jNkV1X9Nx= z1k>8FtmFp-;0kZ(m!Mq5(0FWh!TDQLuC81Qz7?VJa1NO$DRY?O5yWCaNI>`HwVBSp zbN|NZ=sug1$w}fGUaR0@cM5aAyE}M*%0Ha5T7#YT6vj9OnD3#%oYTnJ+}4Hd>Cf~3 zobtce6aRMWAAyR>9qi~~2QoL|z0j$}cx-Wb4>6erYIXlW*#)fXm|Qy2#g->z*y<#~ z@GkTK#9^g_;y z!M!Ptsif{hj(p!Tt@Ol^WI6W8Q!SE*c==>u1j3*D9^mu%o2+urDZz^1~7=PyO3T9+|xyH(b%ytVq=BIxT6Rrz|gZG?$L+Q3wYx{m zg~W_G_!CyWl+MOwW^@ZTIL#_DQx)4|gQU|Rz3Q+gQgs{Htq3KI74VX>LLR9oO*2Z zE|pB^aem*g%9*)_M9-Zy@4ln`jydk3rwW*`(8`Pe0ARr=0b|bJIg^*D7&pg`9d?j> zMai;E{SZ--7C4o%SS&MTU2U2w|Fj!~jTSKFj(T&g1RP398PII%q!9G)_Fo3A56Q|N z<7E&^zvd$DNebL3!1vA`+Z>u63&N#*_Y}lM!r_gi>~I`Mnet){Q_u_(0dDSf6=qw3 z>NhWp$jkC_uu~z2Qh8v`{EH<4}GOmXh24)PoQ!WdQyLhDIJ~)XX>l1X2uO{(gSB-XyEADZNt_c&a>{njC*PKA`lj8cU&ChmIb2>1Y%QFqhsWN~66gUm>~9$HDbT+;+vC zU?%IPPJ2El1!4OKbmD;9PV4af^Wa zu7=$x_c4Mf$yY#Beln-gYU)wa-VH4pw^hdA787fhaQ{m#r;I^@Y~bpbIY9#LqeaKZ zQ5Xz*3vm<*fi)MAXlgUnYj?(IYY^oMuX4}eU6uztFidt%ZyU?dYI8su| zyB^c>RJ@dKBi?1@sfsKI0C;KFH4;1`YaC|W<+n}SQ!K0}-> zpiMtt_86pBahoeRN6dDy4G_@+mS{R2ytVE~Qc(58p^EDlPgbCKd3r_-)#~L;=>F*4aIV zeg@e(wEXZ4M3h2s#&W}_YfWLZ+T(R18Fn9vru8idFq#3eUt|I?fE4fc6%@2_Yg~_EmPiS*Un?@EZR|AmKZl2 z6Q**VPanB&_C%%c*{7BUGt^yjr#JB`7(%mqaf#w$zOrX~qqsZ%@UO_XEI8fw5Jt5h z@iTfcup)p7FWQ1G9#Brl98ldDeJg~SyXair6m#Oa;d9fkgXKsRTe%c=)XgErpJ)c@ zMje8v(5c+vB2X~DDa>{}C;eS;LnLrp9)K}a5%!!%^eeczSel!=y0HB*aQq}|Qi`5K zE<3jLvew*PpeI}E0v=AW{REfS%#?NM2qsY(DvwQr;>m%>Ae|Mc_~ljD2qDt7=c^~5 z{q3y}-rCS6>0dcvUs9xk`a@Y#e;gR?lz1^f4{5<9$exmqE=ZwJ`ZGFj|#X+2~VL)FFni*dF$9+blG+IWLR}HQ^|^ zpMvx$E5TT!1;K^`(^#5X_2Y&-{f^TPGoR$5f>2yRRWzTi$ScD{)|!0vv^{HWsEd&4 zY>_*!r&==(NK^U|PoOik(&=8>=2xK*IjeE6i%-JwLoMY<%|{d4WEUoB-yUdg)^tuZ zYG3glnF_i$`fSFn_?b7cfO1;ssn`0-_Hix3^{vm;P|`>#kwgII7H-gG})ar zKM*Kn5PV0(+YF6t>wKGI!R}=7fkYvL|k)XJ3x{p-i_+6=Y?&nkIOyPGx*` zc7Ij^Ej3iVR*r(r-h;d9<2NJF(@-wMp{RZ1tRStHyU;xEC)%|#oH9jbwGZy zR#kvkPLePN__4(fruRpJ{2OLlx0}d@*DJhVFXNtHQU1;W+(bZDiAVrIG|5k8gYwyOXK^qorbe69oBX5N2wh(asz581{7;9^)l6 zXmn*O7{*cJH<6u(7=Eb3RO+@B2kOi>ag!ybed<7zdmK@LP`gOKv7f&fCt4rjE*WCB z8|c^Wp)wy6^6nsMz!!Ze!pPVqqqUMz-i&UACo}m8qX1INGuCOQWH1>muudt+)X~RJ zfZl8uJzw6#W4%%ND-Vu7PqdXcm4R7@xXF`njkhcE6yuZp;#GU%qIm8?ozRdSl}!)iPj=<@Zh&e|C+pt4-R3id&?R2W z)P-1j2J995UJ^{KROa}N(>i+*=oIVH{+TuQ-)yYHjODpUwm}5I8*eec%tKq zDx45?((>7sJy+uDnELQI1-eFp2;E++XWZ?c#H&nJYiIS9O&WE_OM}{HCYqH~%ik&>@>g9hNJMYj@v)iPK>$~WRdG0GRuEqTegUQB3+#Nx;^`tO|j$7p9hH!#D40N`EjlnaqI#HC` z>lVU&yMyD)0k@n{s--Sn1IWS}1P#iVbNZZxacRwZZ`i~z4IQj%$22+Y+?0_1!V%Y0q7rw}UeTK3aqV`Q=G-474tHy@)+9Cc?XR5^W?A*)={ql(Dqcvp zSZzySm}CA?Pkv59BY_-aidExY>R!!Rt!0Q4U*jMyzB5RtS{rZqk%StplqN^o{V9ts z0fFMSe{!(~!E_G5dgo(nd*7RN&H1yYT{1w8dc^A6K{a=}vi?sB!=Ej@_1KFH;mRVl zHJ&GIr+lk-^K^FADQc1~z`)i045F*zh#p1QoGPNs$awupPf8BMn*+b3HU~Ur*&L@Y zkHepj!8Mi~^my259^<=6Moi3DCCdXgct*exOP%jow}UPxLr^#!^6U!INbA3u|L&MU!}*7xu{^Yvn7p*1nTB3Bgu zgvuj+o4KyjTg79N5>s4mZS!$R4MyW={TI0%unMHIleludhc+P_;ca^jt8C04(avB%kJHmg!*tZ|#dAfq{DTb(36vBqZ z7$jxn9-GmJ)JOxBY?cmTew_fU@o8E0Xe`?Z&zGAxNNudwV&uM6YMMN{^{zh9Vs5hE zgHvFki7fFyA2SCatGa>$yjAx|vyE1#bml{!MGYwU88R}jem{|~uDLyll6daAk6bNQ zvh*D(U$cpm!K=x>auPMzzKAd+W(iDqHS}fW%?=r3*>q93;iyAOkTp?CBba8JS1&(I ztHiBQx^NaMfOTw+9xap@Cq#g4*kuECfMuwEYa5uk3_hE%BF^FA|69cUk;sx#=Ivoc zT-bruoX7KpREbzc$(Pl6Q||c&kQ$#lcQSa*HVZpmt0n)Quy>OvjGsGBIPZMT5~C9v zpv9->k~00X{c*v)P?Qee7dp+y0e9Z@pU;Ggu;+7toE67$l2;x(BiTTB!qN&VNw1aG zZ~bgZ#i=F?PGU@S@P>Fua@|s)_$*Qs{kqsyoU$6kvF|MjG$S}#oU|k5g*;PK6?n*6 zG(w8HCF5}!S5grn>wS>+)ENz##^x#BcUs)qwpOxJWACmELsLii*B;o(Z(R##QTZP8 zL}mF&m9GF_GXWaP;P#-6D1_8}5WGq((GcWx#pYa8>&C6U=v&9kT?W^}xK2Dey-VoP zu~W|4<4r7jWUupG#wtH*`nJg36%;>Z%Au4Kt=m=35E_G_Mld;!rmOPHmnqD5J1E0? zKRBgMIg?QAVoo;Inx431Ja3{U_GX?^_P-FfG-O~9!jvu(^Uh9bSPPRuM@Hxh9-Dmc z5HG$Xc^Hfwj*(X(eKqkmbs}fbE$FNP`s}pKs7JOAnPowmvh{(SOs*7Vb=6Qr#zl8G z`PXth0eS>YH1s_KOd$>xT4W*?ma++jIg8Uky9LDk5V(~i?p8B+A@{(x_6LGPd3MrR zGu;L&N<@GxeR!c~t$68jw6K0$*dY zYik=9f~tnL;O6Vl79PU4p4bF#B6;rr0vvh`ujVeVeI~#%-YNGw%ASX`HM^CywVMjE z=EJ5i-@WMfb8cPSt!VJOy94n5H2Bn!Gbc^;C7~m;Dt?D#KcCuA)yZUem{Y%Jzm8A! z7~ThI{>v~)CD5rH5H!mbZj^1gp@qK{x>^lV(EEg6I%o!$O7MV_0rmL^pH?BFC(m5s zL+=lH{MYgtW13@$TFUA^8oGDLzjKZz_S5=0nA;e@1U>ve3p^J~6KC^RYOc;!_OJhV z6xSaWv+iKWMjZ9a@xZQB{^p7!p0F-O^+W~>JY%M3978t3*I8RC2Y#dT14@k4Y?Ech zfu+x9QT(;6w3Vv*a}?L)p-a=QlCky!HX}DD}N(h|B0_8@D*qs(}8uxsSm zrYKR8GZ9GQjS(ECDlvIDS=Q8+;&sFJ+b|G&blRg1yGu)0D8PY9oUa_rRGb|gUD(VV zoXvk0vaoKz|CCMG()j`nY}(oJ!w!(IvFM?8B$@AXAY~Y(k5P6+W(;Ivb#2GvB}?x7 ztx62c&EnI)HEw?852uStWC^Av(o<)WqKi}oL~6ZPna6KhA8-tNu=5W0<463wEp!6b zitC0Dn|@|^8#OETPXJO+U`5gn{$9oezS)2W6)476{BpH`1IQo1t@n|5xsr87l}x!D zp$EYQowrp5D(NbQxVI@agU6}pgAFAL}o6l`k0TPnmz~g z?vs`@f-Yr?*)L{De&YREvS?I$$Dik%7UgBPn;WQR{~ zblbC9Q&kK*6LW~j3CaDYs?cjTJ2r=?Im$F!Ol>o`I}0ZRG8Ew?q-GbF#B;y77QM5_ za8D&8cm4FOO2fv6M7yH=lR_}~+x7Fs;B5&#;#8HASORiwR7MGCoLPF*ZmHOo6Y3b~ zTlACe@8)KllZujZSM+&WAK_4vU$ya(^%uG8Hc)ztpw#gZo+Htsunptz#*(!5SexVe zNei(@H_|F~73MK6Jxl@~5lLhZBVSNsbzdBQHMh(?LcT3yCfB3TJ6pM77U@!~<3{Ld z9SOHKNJpSw9@`dIf_EFyDJBV_%<=yYVw>jwFB{fwoh|8nCAC;hTfgFlR{ ze^MFl0V^z5{C@MpUw_?S<8QV?sL21*z&{(be*u4vnXpU#tzCN`_|K-*-+}Eg$>RTS zVcoZLzlHJ3(hW@ayVuaT556yA{{r*E`Xw;%FG>48^uD_I3pxu68~?fPzqH2tR_;qQ zzpTt*|6%36U~}KV{rdQqfh@w`PUDYi`M#C=g~Tr_4KVHK=Q`XkEACtPXM+BP2LSS6 q;_ScD^?mq1gX-Vm>=b{4|0l$%$Roly@^eQ38lW3i5nNOKeD{AYFXBD` literal 0 HcmV?d00001 diff --git a/scripts/dictionaries_1.py b/scripts/dictionaries_1.py new file mode 100644 index 0000000..8739f6a --- /dev/null +++ b/scripts/dictionaries_1.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 21 15:58:30 2018 + +dictionaries + +@author: u0015831 +""" + +#A few examples of a dictionary + +#First way to setup a dictionary +zipdict = {} + +#Add a couple of cities to the dictionary +zipdict['Heverlee'] = 3001 +zipdict['Leuven'] = 3000 +zipdict['Brussel'] = 1000 +zipdict['Gent'] = 9000 + +# another way +zipdict.update({'Antwerpen': 2000, 'Brugge': 8000}) + +#Use the function key() - +if 'Gent' in zipdict: + print('Gent is in the dictionary. ZIP: ', zipdict['Gent']) +else: + print('Gent is not in the dictionary') + +#Use the function keys() - +keys = zipdict.keys() +print(keys) +#keys.sort() will this work? +#print(keys) + +# List of codes in a list: +values = zipdict.values() +print(values) +#values.sort() +#print(values) + diff --git a/scripts/fibonacci.py b/scripts/fibonacci.py new file mode 100644 index 0000000..ff5e55e --- /dev/null +++ b/scripts/fibonacci.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Aug 29 11:02:31 2019 +taken from Marina von Steinkirch + +@author: u0015831 +""" + +def fib_generator(): + a, b = 0, 1 + print(a, b) + while True: + print(b) + yield b + a, b = b, a+b + +def fib(n): + ''' + >>> fib(2) + 1 + >>> fib(5) + 5 + >>> fib(7) + 13 + ''' + if n < 3: + return 1 + a, b = 0, 1 + count = 1 + while count < n: + print(count) + count += 1 + a, b = b, a+b + return b + + +def fib_rec(n): + ''' + >>> fib_rec(2) + 1 + >>> fib_rec(5) + 5 + >>> fib_rec(7) + 13 + ''' + if n < 3: + return 1 + return fib_rec(n - 1) + fib_rec(n - 2) \ No newline at end of file diff --git a/scripts/file_basic_input.py b/scripts/file_basic_input.py new file mode 100644 index 0000000..1c2ab3c --- /dev/null +++ b/scripts/file_basic_input.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 5 15:12:20 2019 + +processing a file in a for-loop + +@author: u0015831 +""" + +txtfile = open("test_text.txt","r") + +for aline in txtfile: + values = aline.split() + if len(values) > 10: + print('some text', values[0], values[1], ' and also ', values[10] ) + +txtfile.close() diff --git a/scripts/file_io_2.py b/scripts/file_io_2.py new file mode 100644 index 0000000..275ec69 --- /dev/null +++ b/scripts/file_io_2.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 28 13:44:00 2018 + +@author: u0015831 +""" + +my_file=open('lines_10.txt','r') + +fa = my_file.read() +print(fa) + +my_file.seek(0) # return handle to first position +f3 = my_file.read(3) +print(f3) + +# use readline +frl = my_file.readline() +print(frl) diff --git a/scripts/file_io_3.py b/scripts/file_io_3.py new file mode 100644 index 0000000..cdcd266 --- /dev/null +++ b/scripts/file_io_3.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 28 14:16:29 2018 + +@author: u0015831 +""" + +fin=open('test_text.txt','r') +for line in fin: + line_in = line.rstrip('\r\n') #remove end of line + data = line_in.split() #split line of text + print(data) diff --git a/scripts/file_io_forLoop.py b/scripts/file_io_forLoop.py new file mode 100644 index 0000000..1c2ab3c --- /dev/null +++ b/scripts/file_io_forLoop.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 5 15:12:20 2019 + +processing a file in a for-loop + +@author: u0015831 +""" + +txtfile = open("test_text.txt","r") + +for aline in txtfile: + values = aline.split() + if len(values) > 10: + print('some text', values[0], values[1], ' and also ', values[10] ) + +txtfile.close() diff --git a/scripts/file_io_header.py b/scripts/file_io_header.py new file mode 100644 index 0000000..182a6eb --- /dev/null +++ b/scripts/file_io_header.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Jun 3 10:09:14 2019 + +@author: taken from http://www2.hawaii.edu/~takebaya/cent110/file_in/file_in.html +""" + +infile = open("students_header.txt","r") +line1 = infile.readline() +lines = infile.readlines() +infile.close() +outfile = open("data.html","w") +outfile.write("\n \n") +outfile.write(' \n') +outfile.write(' \n') +headers = line1.strip().split(",") +outfile.write(' ') +for header in headers: + outfile.write(' ') +outfile.write('\n \n') +for line in lines: + tokens = line.strip().split(",") + outfile.write(' \n') + outfile.write(' ') + for token in tokens: + outfile.write(' ') + outfile.write('\n \n') +outfile.write('
' + header + '
' + token + '
\n') +outfile.write(' \n') +outfile.close() \ No newline at end of file diff --git a/scripts/file_io_readline.py b/scripts/file_io_readline.py new file mode 100644 index 0000000..009d590 --- /dev/null +++ b/scripts/file_io_readline.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 5 15:12:20 2019 + +processing a file with readline +the file is read into a list + +@author: u0015831 +""" + +txtfile = open("test_text.txt","r") + +aline = txtfile.readline() +values = aline.split() + +while aline: + if len(values) > 10: + print('some text', values[0], values[1], ' and also ', values[10] ) + aline = txtfile.readline() + values = aline.split() + +txtfile.close() diff --git a/scripts/file_io_readlines.py b/scripts/file_io_readlines.py new file mode 100644 index 0000000..ff6be8d --- /dev/null +++ b/scripts/file_io_readlines.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 5 15:12:20 2019 + +processing a file with readlines +the file is read into a list + +@author: u0015831 +""" + +txtfile = open("test_text.txt","r") +lines = txtfile.readlines() +txtfile.close() + +for aline in lines: + values = aline.split() + if len(values) > 10: + print('some text', values[0], values[1], ' and also ', values[10] ) + diff --git a/scripts/file_io_readlines_1.py b/scripts/file_io_readlines_1.py new file mode 100644 index 0000000..bc679f2 --- /dev/null +++ b/scripts/file_io_readlines_1.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Jun 3 09:45:37 2019 + +@author: taken from http://www2.hawaii.edu/~takebaya/cent110/file_in/file_in.html +""" + +infile = open("students.txt","r") +lines = infile.readlines() +infile.close() +for line in lines: + tokens = line.split(",") + total = 0 + for i in range(1, len(tokens)): + total = total + float(tokens[i]) + average = total/(len(tokens) - 1) + print(tokens[0],"has an average of: ",average) \ No newline at end of file diff --git a/scripts/file_io_write_1.py b/scripts/file_io_write_1.py new file mode 100644 index 0000000..49883ca --- /dev/null +++ b/scripts/file_io_write_1.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 28 11:04:44 2018 + +@author: u0015831 +""" + +fp = open('testfile-write.txt','w') + +fp.write('Hello World') +fp.write('Hello World \n') + +# write the list +# note, here print is used +# It inserts spaces between arguments and appends the line terminator. +l = [0, 1, 2, 3] +print(l, file=fp) +for i in l: + print(i, file=fp) + +for i in l: + print(i, end=' ', file=fp) + + +# write the individual elements +for i in l: + fp.write(str(i)) + +# write the individual elements with a separator +for i in l: + fp.write(str(i) + '/') + +fp.write('\n') + +fp.close() diff --git a/scripts/file_io_writelines_1.py b/scripts/file_io_writelines_1.py new file mode 100644 index 0000000..3f1b432 --- /dev/null +++ b/scripts/file_io_writelines_1.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 28 11:04:44 2018 + +@author: u0015831 +""" + +fp = open('testfile-writelines.txt','w') + +fp.write('Hello World') +fp.write('Hello World \n') + +# write the list +l = [1, 2, 3] +l_str = map(str, l) +fp.writelines(l_str) + + +fp.close() + diff --git a/scripts/file_read_csv_dict.py b/scripts/file_read_csv_dict.py new file mode 100644 index 0000000..cdc16ad --- /dev/null +++ b/scripts/file_read_csv_dict.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Created on Sun Nov 24 17:35:22 2019 + +source: https://www.alexkras.com/how-to-read-csv-file-in-python/ + +""" + +import csv +with open('MOCK_DATA.csv') as f: + reader = csv.DictReader(f) + data = [r for r in reader] + +print('type(data): ', type(data)) +print(data[0]['id']) \ No newline at end of file diff --git a/scripts/file_read_csv_list.py b/scripts/file_read_csv_list.py new file mode 100644 index 0000000..3f16f9c --- /dev/null +++ b/scripts/file_read_csv_list.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +""" +Created on Sun Nov 24 17:32:57 2019 + +source: https://www.alexkras.com/how-to-read-csv-file-in-python/ +""" + +import csv +with open('MOCK_DATA.csv') as f: + reader = csv.reader(f) + next(reader) # skip header + data = [] + for row in reader: + data.append(row) \ No newline at end of file diff --git a/scripts/file_read_from_csv.py b/scripts/file_read_from_csv.py new file mode 100644 index 0000000..0b9720c --- /dev/null +++ b/scripts/file_read_from_csv.py @@ -0,0 +1,15 @@ +from csv import Sniffer, DictReader + +file_name = 'people_data.csv' +with open(file_name, 'rb') as csv_file: + dialect = Sniffer().sniff(csv_file.read(1024)) + csv_file.seek(0) + sum = 0.0 + csv_reader = DictReader(csv_file, fieldnames=None, + restkey='rest', restval=None, + dialect=dialect) + for row in csv_reader: + print('{name} --- {weight}'.format(name=row['name'], + weight=row['weight'])) + sum += float(row['weight']) + print('sum = {0}'.format(sum)) diff --git a/scripts/file_squares.txt b/scripts/file_squares.txt new file mode 100644 index 0000000..08b3b28 --- /dev/null +++ b/scripts/file_squares.txt @@ -0,0 +1,10 @@ +0: 0 +1: 1 +2: 4 +3: 9 +4: 16 +5: 25 +6: 36 +7: 49 +8: 64 +9: 81 diff --git a/scripts/file_write_csv.py b/scripts/file_write_csv.py new file mode 100644 index 0000000..a6638aa --- /dev/null +++ b/scripts/file_write_csv.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +""" +Created on Sun Nov 24 17:43:58 2019 + +https://www.tutorialspoint.com/reading-and-writing-csv-file-using-python +""" + +# use writerow +import csv +csvData = [('Peter', '22'), ('Jasmine', '21'), ('Sam', '24')] +csvFile = open('person.csv', 'w', newline='') +obj=csv.writer(csvFile) + +for person in csvData: + obj.writerow(person) + +csvFile.close() + +#use writerows +csvfile = open('persons_bis.csv','w', newline='') +obj = csv.writer(csvfile) +obj.writerows(csvData) +csvFile.close() diff --git a/scripts/first_1.py b/scripts/first_1.py new file mode 100644 index 0000000..a3f3d3a --- /dev/null +++ b/scripts/first_1.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +""" +Spyder Editor + +This is a temporary script file. +""" + +a = 1 +b = 2.2 +c = a + b +print(c) diff --git a/scripts/first_15.py b/scripts/first_15.py new file mode 100644 index 0000000..2d75e78 --- /dev/null +++ b/scripts/first_15.py @@ -0,0 +1,4 @@ +a = 1 +b = 3.3 +c = a + b +print(c, a, b) \ No newline at end of file diff --git a/scripts/first_prog_1.py b/scripts/first_prog_1.py new file mode 100644 index 0000000..f2b8f83 --- /dev/null +++ b/scripts/first_prog_1.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +""" + +@author: u0015831 +""" + +a = 8 +b = 9.9 +c = a + b +print('c = ', c) + +#%% +a = 88 +d = 9.76 +r1 = a * d +print('r1 =', r1) + +# ============================================================================= +# +# ============================================================================= +if (a > 50): + print('a is larger than 50') +else: + print('a is smaller or equal to 50') + + \ No newline at end of file diff --git a/scripts/first_sum.py b/scripts/first_sum.py new file mode 100644 index 0000000..938fb48 --- /dev/null +++ b/scripts/first_sum.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Nov 25 09:48:16 2019 + +@author: u0015831 +""" + +a = 1 +b = 7 +c = a + b +print(a+b) + +if (a > 6): + print('a larger than 6') + diff --git a/scripts/for_loop_1.py b/scripts/for_loop_1.py new file mode 100644 index 0000000..93e79e5 --- /dev/null +++ b/scripts/for_loop_1.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +""" +Created on Sun Nov 17 16:51:05 2019 +calculate the average of a list of numbers +@author: u0015831 +""" + +#rli = range(1, 10, 2) +#for i in rli: +# print('i=', i) + + +sum=0 +numbers =[1,22,31,45] +for num in numbers: + print(num) + sum=sum+num +avg=sum/len(numbers) +print ('Average:', avg) + + \ No newline at end of file diff --git a/scripts/for_loop_2.py b/scripts/for_loop_2.py new file mode 100644 index 0000000..341d923 --- /dev/null +++ b/scripts/for_loop_2.py @@ -0,0 +1,2 @@ +for i in range(1, 101): + print(i) \ No newline at end of file diff --git a/scripts/for_loop_else.py b/scripts/for_loop_else.py new file mode 100644 index 0000000..ff680fe --- /dev/null +++ b/scripts/for_loop_else.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +""" +Created on Sun Nov 12 13:57:24 2023 + +@author: u0015831 +""" + +numbers =[1,2,3,4] +for i in numbers: + print(i) + if i > 2: # try with 8 + break +else: # Not executed as there is a break + print("No Break") diff --git a/scripts/for_loop_index.py b/scripts/for_loop_index.py new file mode 100644 index 0000000..ca240f4 --- /dev/null +++ b/scripts/for_loop_index.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 20 15:57:29 2018 +for loop with index +@author: u0015831 +""" +fruitslist = ['banana', 'apple', 'mango'] +for i in range(len(fruitslist)): + print("Color {}: {}".format(i + 1, fruitslist[i])) +print +# use of enumerate +for line in enumerate(fruitslist, start=1): + print(line) +print# use of enumerate +for num, color in enumerate(fruitslist, start=1): + print("Color {}: {}".format(num, color)) +print +# is this working? +fruitset = {'banana', 'apple', 'mango'} +for num, color in enumerate(fruitset, start=1): + print("Color {}: {}".format(num, color)) \ No newline at end of file diff --git a/scripts/for_loop_list.py b/scripts/for_loop_list.py new file mode 100644 index 0000000..6870485 --- /dev/null +++ b/scripts/for_loop_list.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 20 14:20:38 2018 + +@author: u0015831 +""" + +#my_list = [1, 2, 32] +my_list = (1, 2, 3) + +for i in my_list: + print(my_list[i]) \ No newline at end of file diff --git a/scripts/for_loop_sequence.py b/scripts/for_loop_sequence.py new file mode 100644 index 0000000..fbfb90e --- /dev/null +++ b/scripts/for_loop_sequence.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 20 15:46:16 2018 +for loop on different sequences + +source: https://www.tutorialspoint.com/python/python_for_loop.htm +@author: u0015831 +""" + +for letter in 'Python': # First Example + print('Current Letter :', letter) + +fruitslist = ['banana', 'apple', 'mango'] +for fruit in fruitslist: # Second Example + print('Current fruit :', fruit) +print() +fruitstuple = ('banana', 'apple', 'mango') +for fruit in fruitstuple: # Third Example + print('Current fruit :', fruit) +print() +fruitset = {'banana', 'apple', 'mango'} +for fruit in fruitset: # Fourth Example + print('Current fruit :', fruit) diff --git a/scripts/for_loop_vanrossum_1.py b/scripts/for_loop_vanrossum_1.py new file mode 100644 index 0000000..d965c2e --- /dev/null +++ b/scripts/for_loop_vanrossum_1.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Spyder Editor + +example for loop from Python tutorial R 3.7.0 +""" +words = ['cat', 'window', 'defenestrate'] + + +for w in words[:]: # Loop over a slice copy of the entire list. +#for w in words: # Loop over the sequence, beware for an infinite list!. + if len(w) > 6: + words.insert(0, w) + +print(words) \ No newline at end of file diff --git a/scripts/for_loop_zip.py b/scripts/for_loop_zip.py new file mode 100644 index 0000000..96ca450 --- /dev/null +++ b/scripts/for_loop_zip.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 20 16:25:00 2018 + +source: http://treyhunner.com/2016/04/how-to-loop-with-indexes-in-python/ +@author: u0015831 +""" + +fruitslist = ['banana', 'apple', 'mango'] +ratios = [0.2, 0.3, 0.1, 0.4] +winelist = ['merlot', 'chenin', 'chardonnay', 'temperanillo', 'whatever'] +for fruit, ratio, wine in zip(fruitslist, ratios, winelist): + print('{}% {} more {}'.format(ratio * 100, fruit, wine)) diff --git a/scripts/format_io_1.py b/scripts/format_io_1.py new file mode 100644 index 0000000..75523c1 --- /dev/null +++ b/scripts/format_io_1.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 28 14:53:41 2018 + +source: https://www.digitalocean.com/community/tutorials/how-to-use-string-formatters-in-python-3 +@author: u0015831 +""" + +print("Sammy ate {0:f} percent of a {1}!".format(75, "pizza")) +print("Sammy ate {0:6.2f} percent of a {1}!".format(75, "pizza")) +print("Sammy ate {0:x} percent of a {1}!".format(75, "pizza")) +print("Sammy ate {0:3d} percent of a {1}!".format(75, "pizza")) + +for i in range(3,13): + print("{:3d} {:4d} {:5d}".format(i, i*i, i*i*i)) \ No newline at end of file diff --git a/scripts/format_string.py b/scripts/format_string.py new file mode 100644 index 0000000..58607d7 --- /dev/null +++ b/scripts/format_string.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Sep 1 16:11:26 2023 + +Number formatting in f-strings + +""" + +name = 'Jane' +age = 53 +print('%s is %d years old' % (name, age)) # old school deprecated +print('{} is {} years old'.format(name, age)) +print(f'{name} is {age} years old') # preferred + + +# arithmetic expressions allowed +a = 5 +b = 10 +print(f'a plus b is {a + b} and 2 times a minus b is {2*a-b}') + +# The = specifier will print the expression and its value: +fnum = 2007.12345 +print(f"Simple = {fnum}") +print(f"Decimal Places specified = {fnum=:.2f}") +print(f"Significant Figures={fnum:.3g}") diff --git a/scripts/fstring_01.py b/scripts/fstring_01.py new file mode 100644 index 0000000..58607d7 --- /dev/null +++ b/scripts/fstring_01.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Sep 1 16:11:26 2023 + +Number formatting in f-strings + +""" + +name = 'Jane' +age = 53 +print('%s is %d years old' % (name, age)) # old school deprecated +print('{} is {} years old'.format(name, age)) +print(f'{name} is {age} years old') # preferred + + +# arithmetic expressions allowed +a = 5 +b = 10 +print(f'a plus b is {a + b} and 2 times a minus b is {2*a-b}') + +# The = specifier will print the expression and its value: +fnum = 2007.12345 +print(f"Simple = {fnum}") +print(f"Decimal Places specified = {fnum=:.2f}") +print(f"Significant Figures={fnum:.3g}") diff --git a/scripts/function_1.py b/scripts/function_1.py new file mode 100644 index 0000000..b7dbd7f --- /dev/null +++ b/scripts/function_1.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +""" + +basic example using function + +demo 1: copy main part in front of the function definitions + check the behavior of the IDE + +demo 2: run program in editor / debug mode + +@author: u0015831 +""" + + +# main part, calling the functions + + +def my_func_1 (): + """ + this function writes hello, no input, no output + """ + print('Hello') + +def my_func_2(a, b): + """ + parameters: + a: first part of mathematical manip + b: second part in mathematical manip + + """ + res = a + b + return (res) + +def my_func_3(a, b): + """ + parameters: + a: first part of mathematical manip + b: second part in mathematical manip + """ + res1 = a + b + res2 = a - b + return (res1, res2) + + + +my_func_1() + +my_func_2(5,6) # effect? +r1 = my_func_2(5,6) +print(type(r1)) +print(r1) + +r2 = my_func_3(5,6) +print(type(r2)) +print(r2) + +r3 = my_func_3(b=5,a=6) +print(type(r3)) +print(r3) \ No newline at end of file diff --git a/scripts/function_arg_kwarg.py b/scripts/function_arg_kwarg.py new file mode 100644 index 0000000..a9f7b9c --- /dev/null +++ b/scripts/function_arg_kwarg.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jul 4 10:14:49 2018 + +source: + https://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/ + https://code.tutsplus.com/articles/understanding-args-and-kwargs-in-python--cms-29494 + https://www.digitalocean.com/community/tutorials/how-to-use-args-and-kwargs-in-python-3 +@author: u0015831 +""" + +def test_var_args(farg, *args): + print("formal arg:", farg) + for arg in args: + print("another arg:", arg, " - type", type(arg)) + +def test_var_kwargs(farg, **kwargs): + print("formal arg:", farg) + for key in kwargs: + print("another keyword arg: %s: %s" % (key, kwargs[key])) + +def multiply(*args): + z = 1 + for num in args: + z *= num + print(z) + print('final result: ',z) + + +#using the functions +test_var_args(1, "two", 3) + +test_var_kwargs(farg=1, myarg2="two", myarg3=3) +test_var_kwargs(100, myarg2="two", myarg3=3) +#test_var_kwargs(101, "two", myarg3=3) # only 1 argument + +multiply(2, 3) +multiply(2, 3, 99, 12.7) diff --git a/scripts/function_arg_kwarg_1.py b/scripts/function_arg_kwarg_1.py new file mode 100644 index 0000000..56e7f02 --- /dev/null +++ b/scripts/function_arg_kwarg_1.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +""" +Created on Sat Nov 12 13:14:08 2022 + +@author: u0015831 +""" + +def arg_printer(*args, **kwargs): + if args: + print('positional') + for arg in args: + print(arg) + if kwargs: + print('named') + for k, v in kwargs.items(): + print("{}={}".format(k, v)) + +print('first test') +arg_printer(1,2,3) + +print('test 2') +arg_printer(1,2,3,sweater=100,hat=5) + diff --git a/scripts/function_argument_pass_1.py b/scripts/function_argument_pass_1.py new file mode 100644 index 0000000..4f7ed55 --- /dev/null +++ b/scripts/function_argument_pass_1.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 27 11:42:31 2018 + +source: https://cs.nyu.edu/courses/summer16/CSCI-UA.0002-002/slides/Python_Functions.pdf +@author: u0015831 +""" + +def change_me(v): + print ("function got:", v, 'id(v) = ', id(v)) + v = 10 + print ("argument is now:", v, 'id(v) = ', id(v)) + +def change_me_bis(v): + print ("function got:", v, 'id(v) = ', id(v)) + v.append(555) + print ("argument is now:", v, 'id(v) = ', id(v)) + +def change_me_tris(v): + print ("function got:", v, 'id(v) = ', id(v)) + v = v * 3 + print ("argument is now:", v, 'id(v) = ', id(v)) + + +myvar = 5 +myvar2 = [1, 2, 3] + +# testing change_me +print('\n testing change_me') +print ("starting with:", myvar) +print ("starting with id:", id(myvar)) +change_me(myvar) +print ("ending with:", myvar) + +print ("starting with:", myvar2) +print ("starting with id:", id(myvar2)) +change_me(myvar2) +print ("ending with:", myvar2) + + +# testing change_me_bis +print('\n testing change_me_bis') + +print ("starting with:", myvar2) +print ("starting with id:", id(myvar2)) +change_me_bis(myvar2) +print ("ending with:", myvar2) + + + +# testing change_me_tris +print('\n testing change_me_tris') + +myvar = 5 +print ("starting with:", myvar) +change_me_tris(myvar) +print ("ending with:", myvar) + +myvar2 = [1, 2, 3] +print ("starting with:", myvar2) +change_me_tris(myvar2) +print ("ending with:", myvar2) diff --git a/scripts/function_on_list.py b/scripts/function_on_list.py new file mode 100644 index 0000000..5ea0995 --- /dev/null +++ b/scripts/function_on_list.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Jun 29 17:00:09 2018 + +function on list + +source: http://www.cs.cornell.edu/courses/cs1110/2018sp/ +""" + + +def add_one(the_list): + """Adds 1 to every elt + Pre: the_list is all numb.""" + for x in the_list: + x = x+1 + +def add_one_bis(the_list): + """Adds 1 to every elt + Pre: the_list is all numb.""" + lenl = len(the_list) + lll = list(range(lenl)) + for i in lll: + the_list[i] = the_list[i]+1 + +grades = [5,4,7] + +add_one(grades) +print(grades) + +add_one_bis(grades) +print(grades) diff --git a/scripts/function_optional_arguments.py b/scripts/function_optional_arguments.py new file mode 100644 index 0000000..7638314 --- /dev/null +++ b/scripts/function_optional_arguments.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 27 11:00:12 2018 + +source: https://www.pythoncentral.io/fun-with-python-function-parameters/ +@author: u0015831 +""" + +def foo(val1, val2, val3, calcSum=True): + # Calculate the sum + if calcSum: + return val1 + val2 - val3 + # Calculate the average instead + else: + return (val1 + val2 + val3) / 3 + +print(foo(10,20,30, True)) +print(foo(10,20,30, False)) +print(foo(10,20,30)) + +print(foo(val1=10,val3=20,val2=30,calcSum=True)) + + +# will this work? +#print(foo(10,20)) +#print(foo(10,20,False)) +#print(foo(val1=10,val3=20,val2=30,True)) diff --git a/scripts/function_pass_mutable.py b/scripts/function_pass_mutable.py new file mode 100644 index 0000000..e4f38f8 --- /dev/null +++ b/scripts/function_pass_mutable.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Sat Nov 12 12:11:11 2022 + +@author: u0015831 +""" + +def myfunction (seq): + print ("Entering sequence inside a function: ", seq, ' id', id(seq)) + seq.append(40) + print ("Modified sequence inside a function: ", seq, ' id', id(seq)) + seq = [1, 2, 3] + print ("New sequence inside a function: ", seq, ' id', id(seq)) + return + +mylist=[10,20,30] +print('mylist before call', mylist, ' id', id(mylist)) +myfunction(mylist) +print('mylist after call', mylist, ' id', id(mylist)) diff --git a/scripts/function_pass_nonmutable.py b/scripts/function_pass_nonmutable.py new file mode 100644 index 0000000..17be7fa --- /dev/null +++ b/scripts/function_pass_nonmutable.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +""" +Created on Sat Nov 12 12:09:32 2022 + +@author: u0015831 +""" + +def myfunction(arg): + print ('value received:',arg,'id:',id(arg)) + arg = 8 + print ('value changed:',arg,'id:',id(arg)) + return + +#id() function returns a unique integer corresponding to the identity of an object. + +x=10 +print ('value passed:',x, 'id:',id(x)) + +myfunction(x) +print ('value after function call:',x, 'id:',id(x)) diff --git a/scripts/function_return.py b/scripts/function_return.py new file mode 100644 index 0000000..8cb5286 --- /dev/null +++ b/scripts/function_return.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +""" +Created on Sun Nov 12 16:40:19 2023 + +@author: u0015831 +""" + +def test(p1=10): + + if (p1 < 10): + return ('abc', 100) + elif (p1 == 10): + return ('default value') + else: + return 0 + + +# +t1 = test(6) +print(type(t1), t1) + +t1 = test() +print(type(t1), t1) + +t1 = test(1000) +print(type(t1), t1) diff --git a/scripts/function_scope_1.py b/scripts/function_scope_1.py new file mode 100644 index 0000000..3de296f --- /dev/null +++ b/scripts/function_scope_1.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Feb 20 10:21:52 2020 +taken from: https://www.python-course.eu/python3_global_vs_local_variables.php +@author: u0015831 +""" + +def f(): + print(a) + print(s) + +a = 1 +s = "I love Paris in the summer!" +f() \ No newline at end of file diff --git a/scripts/function_scope_2.py b/scripts/function_scope_2.py new file mode 100644 index 0000000..28dcb26 --- /dev/null +++ b/scripts/function_scope_2.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Feb 20 10:28:19 2020 +taken from: https://www.python-course.eu/python3_global_vs_local_variables.php +@author: u0015831 +""" + +def f(): + s = "I love London!" + print(s) + +s = "I love Paris!" +f() +print(s) \ No newline at end of file diff --git a/scripts/function_scope_3.py b/scripts/function_scope_3.py new file mode 100644 index 0000000..1a1de03 --- /dev/null +++ b/scripts/function_scope_3.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Feb 20 10:28:19 2020 +taken from: https://www.python-course.eu/python3_global_vs_local_variables.php +@author: u0015831 +""" + +def f(): + print(s) + s = "I love London!" # considered a local variable + print(s) + +s = "I love Paris!" +f() +print(s) \ No newline at end of file diff --git a/scripts/function_scope_4.py b/scripts/function_scope_4.py new file mode 100644 index 0000000..7194e00 --- /dev/null +++ b/scripts/function_scope_4.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Feb 20 10:28:19 2020 +taken from: https://www.python-course.eu/python3_global_vs_local_variables.php +@author: u0015831 +""" + +def f(): + ''' + example working with global key word + ''' + global s + print(s) + s = "I love London!" # considered a local variable + print(s) + +s = "I love Paris!" +f() +print(s) \ No newline at end of file diff --git a/scripts/function_scope_5.py b/scripts/function_scope_5.py new file mode 100644 index 0000000..8f0d496 --- /dev/null +++ b/scripts/function_scope_5.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +""" +Created on Sun Nov 15 09:25:39 2020 + +@author: https://www.tutorialsteacher.com/python/local-and-global-variables-in-python +""" + +def SayHello(): + user='John' + print ("user = ", user) + return + +def SayHello_implicit(): + # user must be known + print ("user = ", user) + return + +def SayHello_global(): + global user + print ("user = ", user) + user = 'Mary' + val_k = 0 + return + + +user = 'Jeff' +SayHello_implicit() +print('user', user) + +user = 'Jeff' +SayHello() +print('user', user) + +user = 'Jeff' +SayHello_global() +print('user', user) +#print(val_k) + diff --git a/scripts/functions_args_1.py b/scripts/functions_args_1.py new file mode 100644 index 0000000..b793453 --- /dev/null +++ b/scripts/functions_args_1.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +""" +Created on Tue Jun 26 15:45:23 2018 + +@author: u0015831 +""" +# a regular function definition +def my_sub(a,b): + res = a - b + return (res, a, b) + +# defining a function with default values +def my_min(a=9, b = 2): + res = a - b + return (res, a, b) + +# calling the functions +res = my_sub(1, 2) +print(res) + +res = my_sub(b=10, a=5) +print(res) + +c = 1 +d = 2 +res = my_sub(c, d) +print(res) + +res = my_min() +print(res) + +res = my_min(7, 8) +print(res) diff --git a/scripts/generate_data.py b/scripts/generate_data.py new file mode 100644 index 0000000..a8fcbcd --- /dev/null +++ b/scripts/generate_data.py @@ -0,0 +1,8 @@ +jdef main(): + print('case', 'dim', 'temp') + case_nr = 0 + for dim_nr in [1, 2, 3]: + for temp in [-0.5, 0.0, 0.5]: + case_nr += 1 + print(case_nr, dim_nr, temp) + return 0 diff --git a/scripts/get_help.py b/scripts/get_help.py new file mode 100644 index 0000000..376d68b --- /dev/null +++ b/scripts/get_help.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Nov 6 10:06:04 2019 + +getting help +- dir +- help + +@author: u0015831 +""" + +a = "string" +dir(a) + +help(a.split) diff --git a/scripts/greetings_bucket.py b/scripts/greetings_bucket.py new file mode 100644 index 0000000..215b734 --- /dev/null +++ b/scripts/greetings_bucket.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 13 16:17:00 2020 + +@author: u0015831 +""" + +def greetings(name): + """This function greets the name passed as an argument""" + print('Hello, ', name , ' Welcome!') + \ No newline at end of file diff --git a/scripts/greetings_calling.py b/scripts/greetings_calling.py new file mode 100644 index 0000000..8422b41 --- /dev/null +++ b/scripts/greetings_calling.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 29 10:12:42 2019 + +basic usage of a function + +@author: u0015831 +""" + +from greetings_bucket import greetings + +# use the function multiple times +greetings('Jan') +greetings('Lieve') +greetings('Jef') + diff --git a/scripts/greetings_func.py b/scripts/greetings_func.py new file mode 100644 index 0000000..b3090d2 --- /dev/null +++ b/scripts/greetings_func.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 29 10:12:42 2019 + +basic usage of a function + +@author: u0015831 +""" + +def greetings(name): + """This function greets the name passed as an argument""" + print('Hello, ', name , ' Welcome!') + + +# use the function multiple times +greetings('Jan') +greetings('Lieve') +greetings('Jef') + diff --git a/scripts/greetings_more_func.py b/scripts/greetings_more_func.py new file mode 100644 index 0000000..832f60a --- /dev/null +++ b/scripts/greetings_more_func.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 29 10:27:05 2019 + +@author: u0015831 +""" + +def greetings_more(name): + """This function greets the name passed as an argument""" + greetings('Dear') + greetings(name) + +def greetings(name): + """This function greets the name passed as an argument""" + print('Hello, ', name , ' Welcome!') + + +greetings_more('Marie') \ No newline at end of file diff --git a/scripts/handson_lists.py b/scripts/handson_lists.py new file mode 100644 index 0000000..7330710 --- /dev/null +++ b/scripts/handson_lists.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +""" +Created on Tue Jun 19 15:36:15 2018 + +handson lists +@author: u0015831 +""" + +NumList=list(range(10)) + +# Print the length of the list +ll = len(NumList) +print("length list", ll) + +# Change the fourth element to 11 +NumList[3] = 11 + +# Extend the list with L=[20,30,40] +NumList.extend([20, 30, 40]) +print(NumList) + +# Print the index of the item 9 +i9 = NumList.index(9) +print("index of item 9", i9) + +# Remove that item from the list +NumList.remove(9) + +# Print the current length of the list +print("current length of list: ", len(NumList)) + +# Sort the list and then reverse the sorted version +NumList.sort +Lreversed=NumList[::-1] +print(Lreversed) \ No newline at end of file diff --git a/scripts/hello.py b/scripts/hello.py new file mode 100644 index 0000000..97d5019 --- /dev/null +++ b/scripts/hello.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Nov 18 11:14:17 2019 + +@author: u0015831 +""" + +def hello(): + """ + Prints "Hello World". + Returns: + None + """ + + print('Hello World') + return + +def hello_again(): + """ + Prints "Hello World again". + Returns: + None + """ + + print('Hello World again') + return + +print('The docstring of the function hello: ' + hello.__doc__) +print('The docstring of the function hello_again: ' + hello_again.__doc__) diff --git a/scripts/hello_world.py b/scripts/hello_world.py new file mode 100644 index 0000000..456fdb0 --- /dev/null +++ b/scripts/hello_world.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +# ============================================================================= +# print('hello world') +# print('hello world') +# print('hello world') +# ============================================================================= +print('hello world') # more +print('hello class') # text diff --git a/scripts/hello_world_function.py b/scripts/hello_world_function.py new file mode 100644 index 0000000..aaefb2a --- /dev/null +++ b/scripts/hello_world_function.py @@ -0,0 +1,16 @@ +m# -*- coding: utf-8 -*- +""" +Created on Mon Nov 25 17:02:29 2019 + +@author: u0015831 +""" + + +def hello(): + """Print "Hello World" """ + print("Later World") + +# Main program starts here +# once executed, the function hello is known +# the function can be called at the console +hello() diff --git a/scripts/hello_world_input.py b/scripts/hello_world_input.py new file mode 100644 index 0000000..8dd0958 --- /dev/null +++ b/scripts/hello_world_input.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python + +print('hello world') + +input('Press Enter to Continue...') \ No newline at end of file diff --git a/scripts/hi_python.py b/scripts/hi_python.py new file mode 100644 index 0000000..7e998a9 --- /dev/null +++ b/scripts/hi_python.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri May 31 14:00:55 2019 + +@author: u0015831 +""" + +print("Hi, this is a Python program") diff --git a/scripts/if_1.py b/scripts/if_1.py new file mode 100644 index 0000000..16c6f35 --- /dev/null +++ b/scripts/if_1.py @@ -0,0 +1,24 @@ +1# -*- coding: utf-8 -*- +""" +Created on Fri Jun 15 09:49:23 2018 + +Basic if statement + +source: http://anh.cs.luc.edu/handsonPythonTutorial/ifstatements.html +@author: u0015831 +""" +ipay = 0 +weight = float(input("How many pounds does your suitcase weigh? ")) +if weight > 50: + print("There is a $25 charge for luggage that heavy.") + ipay = 1 +print("Thank you for your business.") + +balance = float(input("Enter the balance on your account ")) +if ipay == 1: + balance = balance - 25 + if balance < 0: + print("negative balance!") + +print("Your balance is :", balance) + \ No newline at end of file diff --git a/scripts/if_else_1.py b/scripts/if_else_1.py new file mode 100644 index 0000000..df93b76 --- /dev/null +++ b/scripts/if_else_1.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Jun 15 09:43:06 2018 + +basic if else statement + +@author: u0015831 +""" + +from random import randint + +# use the input function, specify with int-casting that an integer is expected +x = int(input('Give me a number: ')) +if x < 0: + print(x, 'is negative') +else: + print(x, 'is positive') + + +xr = randint(1, 100) +print('xr = ', xr) +xn = x + xr + +if xn == 0: + print("The sum is equal to 0") +else: + if xn < 0: + print(xn, 'is negative') + else: + print(xn, 'is positive') diff --git a/scripts/import_1.py b/scripts/import_1.py new file mode 100644 index 0000000..b2b4fef --- /dev/null +++ b/scripts/import_1.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Nov 18 20:48:23 2019 + +@author: u0015831 +""" + +import math +print(math.pi) \ No newline at end of file diff --git a/scripts/input_1.py b/scripts/input_1.py new file mode 100644 index 0000000..340f98b --- /dev/null +++ b/scripts/input_1.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 27 14:22:32 2018 + +source: https://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/io.html +@author: u0015831 +""" + +name = input('Enter your name: ') +print('Hello ' + name + '!') +print(type(name)) +age = input('Enter your age: ') +print(age) +print(type(age)) + +#use typecasting +xString = input("Enter a number: ") +x = float(xString) +yString = input("Enter a second number: ") +y = float(yString) +print('The sum of ', x, ' and ', y, ' is ', x+y, '.') \ No newline at end of file diff --git a/scripts/isVow_module.py b/scripts/isVow_module.py new file mode 100644 index 0000000..f2f5375 --- /dev/null +++ b/scripts/isVow_module.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Sat Nov 12 14:42:24 2022 + +source: https://sites.pitt.edu/~naraehan/python3/mbb20.html +@author: u0015831 +""" + + +def isVow(char): + return char.lower() in 'aeiou' + +def main(): + print(isVow('i')) + print(isVow('I')) + print(isVow('K')) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/isVow_script.py b/scripts/isVow_script.py new file mode 100644 index 0000000..e2250f6 --- /dev/null +++ b/scripts/isVow_script.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" +Created on Sat Nov 12 14:41:13 2022 + +source: https://sites.pitt.edu/~naraehan/python3/mbb20.html + +@author: u0015831 +""" + + +def isVow(char): + return char.lower() in 'aeiou' + +print(isVow('i')) +print(isVow('I')) +print(isVow('K')) diff --git a/scripts/isVow_using.py b/scripts/isVow_using.py new file mode 100644 index 0000000..c98fb24 --- /dev/null +++ b/scripts/isVow_using.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +""" +Created on Sat Nov 12 14:43:11 2022 + +@author: u0015831 +""" + +import isVow_script +import isVow_module + + +# call isVow the bad way +# the code in the script file is fully executed, also the test part +print('regular file') +print(isVow_script.isVow('i')) +print(isVow_script.isVow('y')) + + +# call isVow the right way +# only the function itself will be executed +print('name == main') +print(isVow_module.isVow('i')) +print(isVow_module.isVow('y')) \ No newline at end of file diff --git a/scripts/iterator_1.py b/scripts/iterator_1.py new file mode 100644 index 0000000..98349ed --- /dev/null +++ b/scripts/iterator_1.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jul 5 10:32:20 2018 + +@author: u0015831 +""" +# what is range? +xr = range(10) +print(type(xr)) + +for i in range(10): + print(i, end=' ') + +print('\n') + +for value in [2, 4, 6, 8, 10]: +# do some operation + print(value + 1, end=' ') +print('\n') + +# enumerate +L1 = [2, 4, 6, 8, 10] +for i, val in enumerate(L1): + print(i, val) +print('\n') + +L2 = ['pizza', 'pasta', 'salad', 'nachos'] +print(list(enumerate(L2))) +for i, val in enumerate(L2): + print(i, val) + +# zip +L3 = [12.3, 44.56, 99.9, 768.02, 123, 123.56] +zipped = zip(L1, L2, L3) +print(list(zip(L1, L2, L3))) +for v1, v2, v3 in zipped: + print(v1, v2, v3) +print('\n') + +# unzip +e1, e2, e3 = zip(*zip(L1, L2, L3)) + +# map +square = lambda x: x ** 2 +for val in map(square, range(10)): + print(val, end=' / ') +print('\n') + +# find values up to 10 for which x % 2 is zero +is_even = lambda x: x % 2 == 0 +for val in filter(is_even, range(10)): + print(val, end=' ') +print('\n') + diff --git a/scripts/lambda_func_1.py b/scripts/lambda_func_1.py new file mode 100644 index 0000000..b73a7cc --- /dev/null +++ b/scripts/lambda_func_1.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +""" +Created on Sat Nov 12 14:25:31 2022 + +@author: u0015831 +""" + +x = lambda a : a + 10 +f = lambda a, b: a + b +v1 = 8.8 + +print('type x:', type(x)) +print(x(6)) +print(x(v1)) + +print('type f:', type(f)) +print(f(5.6,6)) \ No newline at end of file diff --git a/scripts/lines_10.txt b/scripts/lines_10.txt new file mode 100644 index 0000000..7d3e69b --- /dev/null +++ b/scripts/lines_10.txt @@ -0,0 +1,19 @@ +Inhabit hearing perhaps on ye do no. It maids decay as there he. Smallest on suitable disposed do although blessing he juvenile in. Society or if excited forbade. Here name off yet she long sold easy whom. Differed oh cheerful procured pleasure securing suitable in. Hold rich on an he oh fine. Chapter ability shyness article welcome be do on service. + +Mind what no by kept. Celebrated no he decisively thoroughly. Our asked sex point her she seems. New plenty she horses parish design you. Stuff sight equal of my woody. Him children bringing goodness suitable she entirely put far daughter. + +Parish so enable innate in formed missed. Hand two was eat busy fail. Stand smart grave would in so. Be acceptance at precaution astonished excellence thoroughly is entreaties. Who decisively attachment has dispatched. Fruit defer in party me built under first. Forbade him but savings sending ham general. So play do in near park that pain. + +Attachment apartments in delightful by motionless it no. And now she burst sir learn total. Hearing hearted shewing own ask. Solicitude uncommonly use her motionless not collecting age. The properly servants required mistaken outlived bed and. Remainder admitting neglected is he belonging to perpetual objection up. Has widen too you decay begin which asked equal any. + +It prepare is ye nothing blushes up brought. Or as gravity pasture limited evening on. Wicket around beauty say she. Frankness resembled say not new smallness you discovery. Noisier ferrars yet shyness weather ten colonel. Too him himself engaged husband pursuit musical. Man age but him determine consisted therefore. Dinner to beyond regret wished an branch he. Remain bed but expect suffer little repair. + +Had repulsive dashwoods suspicion sincerity but advantage now him. Remark easily garret nor nay. Civil those mrs enjoy shy fat merry. You greatest jointure saw horrible. He private he on be imagine suppose. Fertile beloved evident through no service elderly is. Blind there if every no so at. Own neglected you preferred way sincerity delivered his attempted. To of message cottage windows do besides against uncivil. + +Led ask possible mistress relation elegance eat likewise debating. By message or am nothing amongst chiefly address. The its enable direct men depend highly. Ham windows sixteen who inquiry fortune demands. Is be upon sang fond must shew. Really boy law county she unable her sister. Feet you off its like like six. Among sex are leave law built now. In built table in an rapid blush. Merits behind on afraid or warmly. + +Ecstatic advanced and procured civility not absolute put continue. Overcame breeding or my concerns removing desirous so absolute. My melancholy unpleasing imprudence considered in advantages so impression. Almost unable put piqued talked likely houses her met. Met any nor may through resolve entered. An mr cause tried oh do shade happy. + +Raising say express had chiefly detract demands she. Quiet led own cause three him. Front no party young abode state up. Saved he do fruit woody of to. Met defective are allowance two perceived listening consulted contained. It chicken oh colonel pressed excited suppose to shortly. He improve started no we manners however effects. Prospect humoured mistress to by proposal marianne attended. Simplicity the far admiration preference everything. Up help home head spot an he room in. + +Extended kindness trifling remember he confined outlived if. Assistance sentiments yet unpleasing say. Open they an busy they my such high. An active dinner wishes at unable hardly no talked on. Immediate him her resolving his favourite. Wished denote abroad at branch at. diff --git a/scripts/list_cheat.py b/scripts/list_cheat.py new file mode 100644 index 0000000..82b425f --- /dev/null +++ b/scripts/list_cheat.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Jun 22 11:38:15 2018 + +list_cheat + +beased on http://ehmatthes.github.io/pcc/cheatsheets/README.html +@author: u0015831 +""" + +# Use square brackets to define a list, and use commas to separate individual items in the list. Use plural names for lists, to make your code easier to read. +# [] +zips = [3001, 3000, 1000, 9000, 8000] + +# Individual elements in a list are accessed according to their index. The index is 0 based. +# Use square brackets []" +first = zips[0] +last = zips[-1] + +#Refer to the index of the item you want to modify. +zips[1] = 8500 +zips[-2] = 2000 + +# Add elements to the end of a list, +# or insert at wherever position in the list." +zips.append(3500) +zips.insert(0, 3050) +zips.insert(3,4000) + +# remove elements by their position in a list, +# or by the value of the item. Python removes only the first occurrence of that value" +del zips[1] +zips.remove(4000) + +# pop() returns the last element in the list, but any index can be specified. +recent_zip = zips.pop() +first_zip = zips.pop(0) + +# The len() function returns the number of items +num_zip = len(zips) + +# The sort() method changes the order of a list permanently. +# The sorted() function returns a copy of the list, leaving the original list unchanged. " +zips.sort() +zips.sort(reverse=True) +zs = sorted(zips) + +#Python loop pulls each item from the list one at a time and stores it in a temporary variable, which you provide a name for. +for zip in zips: + print(zip) + +# The range() function starts at 0 by default, and stops below the upper boundary. +# range(start, stop[, step]) +for number in range(1001): + print(number) +# create a list of numbers, interlaced by 100 +numbers = list(range(1, 1000001, 100)) + +# Simple statistics are possible on a list containing numerical data. +smallest = min(zips) +largest = max(zips) +sumzips = sum(zips) + +# A portion of a list is called a slice. To slice a list start with the index of the first item , colon, index after the last item. +first3 = zips[:3] +last3 = zips[-3:] +middle3 = zips[2:5] + +#Copy a list: make a slice from the first to the last element. Remember that a variable name is a label, pointer to some spot in memory +copy_of_zips = zips[:] diff --git a/scripts/list_copy.py b/scripts/list_copy.py new file mode 100644 index 0000000..4dc18a9 --- /dev/null +++ b/scripts/list_copy.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +""" +Created on Tue Jun 19 16:12:40 2018 + +lists: copying + +@author: u0015831 +""" +# this behavior is specific for any mutable data structure +v1=[1,2,3,4] +v2=v1 +v2[2]=9 +print("v1: ", v1) + +# slicing notation +v1=[1,2,3,4] +C=v1[:] +C[1]=11 +print("v1: ", v1) + +# use list function +v1=[1,2,3,4] +v2=list(v1) +v2[2]=9 +print("v1: ", v1) + +# use copy +v1=[1,2,3,4] +v2=v1.copy() +v2[2]=9 +print("v1: ", v1) + +# more layers +L1 = [1,2,3] +L2 = [4,5,6] +L3 = [7,8,9] + +Lbig = [L1,L2,L3] +LbigAlias = Lbig +LbigAlias2 = Lbig.copy() +LbigShallow = Lbig[:] + +from copy import deepcopy +LbigDeep = deepcopy(Lbig) + +L1[0] = 99 #changes first element of L1 +print(LbigAlias) +print(LbigAlias2) +print(LbigShallow) +print(LbigDeep) diff --git a/scripts/list_nested.py b/scripts/list_nested.py new file mode 100644 index 0000000..51678aa --- /dev/null +++ b/scripts/list_nested.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Jul 2 11:46:02 2018 + +nested lists +@author: u0015831 +""" + +a = [1, 2] +b = [3, 4, 5] + +ln1 = [10, a] + +ln2 = [1, 2, a, b, ln1] + +print(ln2) +print(ln2[-1]) +print(ln2[-1][1]) +print(ln2[-1][1][1]) \ No newline at end of file diff --git a/scripts/make_it_upper.py b/scripts/make_it_upper.py new file mode 100644 index 0000000..98e7409 --- /dev/null +++ b/scripts/make_it_upper.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Nov 18 20:12:22 2019 +source: http://rwet.decontextualize.com/book/functions/ +example: python make_it_upper.py 0: + print(ucfirst(line)) + else: + print(line) \ No newline at end of file diff --git a/scripts/mall_customers.csv b/scripts/mall_customers.csv new file mode 100644 index 0000000..93d04e8 --- /dev/null +++ b/scripts/mall_customers.csv @@ -0,0 +1,201 @@ +CustomerID,Gender,Age,Annual Income (k$),Spending Score +1,Male,19,15,39 +2,Male,21,15,81 +3,Female,20,16,6 +4,Female,23,16,77 +5,Female,31,17,40 +6,Female,22,17,76 +7,Female,35,18,6 +8,Female,23,18,94 +9,Male,64,19,3 +10,Female,30,19,72 +11,Male,67,19,14 +12,Female,35,19,99 +13,Female,58,20,15 +14,Female,24,20,77 +15,Male,37,20,13 +16,Male,22,20,79 +17,Female,35,21,35 +18,Male,20,21,66 +19,Male,52,23,29 +20,Female,35,23,98 +21,Male,35,24,35 +22,Male,25,24,73 +23,Female,46,25,5 +24,Male,31,25,73 +25,Female,54,28,14 +26,Male,29,28,82 +27,Female,45,28,32 +28,Male,35,28,61 +29,Female,40,29,31 +30,Female,23,29,87 +31,Male,60,30,4 +32,Female,21,30,73 +33,Male,53,33,4 +34,Male,18,33,92 +35,Female,49,33,14 +36,Female,21,33,81 +37,Female,42,34,17 +38,Female,30,34,73 +39,Female,36,37,26 +40,Female,20,37,75 +41,Female,65,38,35 +42,Male,24,38,92 +43,Male,48,39,36 +44,Female,31,39,61 +45,Female,49,39,28 +46,Female,24,39,65 +47,Female,50,40,55 +48,Female,27,40,47 +49,Female,29,40,42 +50,Female,31,40,42 +51,Female,49,42,52 +52,Male,33,42,60 +53,Female,31,43,54 +54,Male,59,43,60 +55,Female,50,43,45 +56,Male,47,43,41 +57,Female,51,44,50 +58,Male,69,44,46 +59,Female,27,46,51 +60,Male,53,46,46 +61,Male,70,46,56 +62,Male,19,46,55 +63,Female,67,47,52 +64,Female,54,47,59 +65,Male,63,48,51 +66,Male,18,48,59 +67,Female,43,48,50 +68,Female,68,48,48 +69,Male,19,48,59 +70,Female,32,48,47 +71,Male,70,49,55 +72,Female,47,49,42 +73,Female,60,50,49 +74,Female,60,50,56 +75,Male,59,54,47 +76,Male,26,54,54 +77,Female,45,54,53 +78,Male,40,54,48 +79,Female,23,54,52 +80,Female,49,54,42 +81,Male,57,54,51 +82,Male,38,54,55 +83,Male,67,54,41 +84,Female,46,54,44 +85,Female,21,54,57 +86,Male,48,54,46 +87,Female,55,57,58 +88,Female,22,57,55 +89,Female,34,58,60 +90,Female,50,58,46 +91,Female,68,59,55 +92,Male,18,59,41 +93,Male,48,60,49 +94,Female,40,60,40 +95,Female,32,60,42 +96,Male,24,60,52 +97,Female,47,60,47 +98,Female,27,60,50 +99,Male,48,61,42 +100,Male,20,61,49 +101,Female,23,62,41 +102,Female,49,62,48 +103,Male,67,62,59 +104,Male,26,62,55 +105,Male,49,62,56 +106,Female,21,62,42 +107,Female,66,63,50 +108,Male,54,63,46 +109,Male,68,63,43 +110,Male,66,63,48 +111,Male,65,63,52 +112,Female,19,63,54 +113,Female,38,64,42 +114,Male,19,64,46 +115,Female,18,65,48 +116,Female,19,65,50 +117,Female,63,65,43 +118,Female,49,65,59 +119,Female,51,67,43 +120,Female,50,67,57 +121,Male,27,67,56 +122,Female,38,67,40 +123,Female,40,69,58 +124,Male,39,69,91 +125,Female,23,70,29 +126,Female,31,70,77 +127,Male,43,71,35 +128,Male,40,71,95 +129,Male,59,71,11 +130,Male,38,71,75 +131,Male,47,71,9 +132,Male,39,71,75 +133,Female,25,72,34 +134,Female,31,72,71 +135,Male,20,73,5 +136,Female,29,73,88 +137,Female,44,73,7 +138,Male,32,73,73 +139,Male,19,74,10 +140,Female,35,74,72 +141,Female,57,75,5 +142,Male,32,75,93 +143,Female,28,76,40 +144,Female,32,76,87 +145,Male,25,77,12 +146,Male,28,77,97 +147,Male,48,77,36 +148,Female,32,77,74 +149,Female,34,78,22 +150,Male,34,78,90 +151,Male,43,78,17 +152,Male,39,78,88 +153,Female,44,78,20 +154,Female,38,78,76 +155,Female,47,78,16 +156,Female,27,78,89 +157,Male,37,78,1 +158,Female,30,78,78 +159,Male,34,78,1 +160,Female,30,78,73 +161,Female,56,79,35 +162,Female,29,79,83 +163,Male,19,81,5 +164,Female,31,81,93 +165,Male,50,85,26 +166,Female,36,85,75 +167,Male,42,86,20 +168,Female,33,86,95 +169,Female,36,87,27 +170,Male,32,87,63 +171,Male,40,87,13 +172,Male,28,87,75 +173,Male,36,87,10 +174,Male,36,87,92 +175,Female,52,88,13 +176,Female,30,88,86 +177,Male,58,88,15 +178,Male,27,88,69 +179,Male,59,93,14 +180,Male,35,93,90 +181,Female,37,97,32 +182,Female,32,97,86 +183,Male,46,98,15 +184,Female,29,98,88 +185,Female,41,99,39 +186,Male,30,99,97 +187,Female,54,101,24 +188,Male,28,101,68 +189,Female,41,103,17 +190,Female,36,103,85 +191,Female,34,103,23 +192,Female,32,103,69 +193,Male,33,113,8 +194,Female,38,113,91 +195,Female,47,120,16 +196,Female,35,120,79 +197,Female,45,126,28 +198,Male,32,126,74 +199,Male,32,137,18 +200,Male,30,137,83 \ No newline at end of file diff --git a/scripts/mall_customers.xlsx b/scripts/mall_customers.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..18cec941a760bd1e1ca66eb9dca1a1df7375ee93 GIT binary patch literal 15057 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�Rtiz;7c;)i$FyR2#W`c{R+o9wc9C@)c}Nyl=5Yg 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 P7Vy(lgMv#{ti%2X!=u`% literal 0 HcmV?d00001 diff --git a/scripts/middle.py b/scripts/middle.py new file mode 100644 index 0000000..d59d891 --- /dev/null +++ b/scripts/middle.py @@ -0,0 +1,31 @@ +# string_extract +""" +Created on Fri Jun 29 14:57:05 2018 + +Source: http://www.cs.cornell.edu/courses/cs1110/2018sp +""" + +def middle(text): + """Returns: middle 3rd of text + Param text: a string with + length divisible by 3"""2+2 + + # Get length of text + size = len(text) + # Start of middle third + start2 = size//3 + # End of middle third + start3 = (2*size)//3 + # Get the substring + middle_third = text[start2:start3] + return middle_third + +def firstparens(text): + """Returns: substring in () + Uses the first set of parens + Param text: a string with ()""" + # Find the open parenthesis + start = text.index('(') + # Find the close parenthesis + end = text.index(‘)’) + return text[start+1:end] \ No newline at end of file diff --git a/scripts/min_max_f.py b/scripts/min_max_f.py new file mode 100644 index 0000000..a50fe52 --- /dev/null +++ b/scripts/min_max_f.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 21 15:19:07 2018 + +usage: +seq = [1, 9, 2, 4, 3, 540] +print min_max(seq) + +string = 'Hello World' +print min_max(string) + +@author: u0015831 +""" + +def min_max(t): + """Returns the smallest and largest + elements of a sequence as a tuple""" + return (min(t), max(t)) + diff --git a/scripts/mod_random.py b/scripts/mod_random.py new file mode 100644 index 0000000..17bd464 --- /dev/null +++ b/scripts/mod_random.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Jul 2 15:11:32 2018 + +some examples on random module +@author: u0015831 +""" +# import the module +import random + +# good practice to use the seed function, and timing data as an argument for it. +from datetime import datetime +random.seed(datetime.now()) + +print(random.random()) +print(random.random()) + +print(random.uniform(10, 14)) + +random.randint(1, 100) +random.randint(1, 100) +random.randint(1, 100) +random.randint(1, 100) + +ls = [1, 2, 88, 92, 10, 3, 127] +print(random.choice(ls)) +print(random.choice(ls)) + +print(random.randrange(1,33)) +print(random.randrange(1,33)) +print(random.randrange(1,33)) + +print(ls) +print(random.shuffle(ls)) +print(ls) \ No newline at end of file diff --git a/scripts/module_1.py b/scripts/module_1.py new file mode 100644 index 0000000..45e5b16 --- /dev/null +++ b/scripts/module_1.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jul 5 14:00:38 2018 + +@author: u0015831 +""" + +import math +print(math.cos(math.pi)) + +import numpy as np +print(np.cos(np.pi)) \ No newline at end of file diff --git a/scripts/module_math_1.py b/scripts/module_math_1.py new file mode 100644 index 0000000..d066d84 --- /dev/null +++ b/scripts/module_math_1.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 28 16:20:24 2018 + +@author: u0015831 +""" + +import math +print(math.cos(90.0)) +print(math.pi) +print(math.cos(math.pi)) \ No newline at end of file diff --git a/scripts/multi_return_func.py b/scripts/multi_return_func.py new file mode 100644 index 0000000..21b92d4 --- /dev/null +++ b/scripts/multi_return_func.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Jan 7 16:56:59 2019 +source: https://pythonbasics.org/multiple-return/ +@author: u0015831 +""" + +def getPerson(): + name = "Leona" + age = 35 + country = "UK" + return name,age,country + +name,age,country = getPerson() +print(name) +print(age) +print(country) \ No newline at end of file diff --git a/scripts/my_accum.py b/scripts/my_accum.py new file mode 100644 index 0000000..c9c0c79 --- /dev/null +++ b/scripts/my_accum.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Feb 20 09:43:40 2020 + +@author: u0015831 +""" + +big_sum = 0 # accumumator as global variable + +def my_accum(val): + big_sum = big_sum + val + return +# big_sum = 0 +my_accum(5.7) +my_accum(6) +my_accum(99) +print('big_sum', big_sum) \ No newline at end of file diff --git a/scripts/my_first_script.py b/scripts/my_first_script.py new file mode 100644 index 0000000..0b04221 --- /dev/null +++ b/scripts/my_first_script.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Nov 6 09:26:53 2019 + +My first script +- create some variables +- make some calculations +@author: u0015831 +""" +a = 1 +b = 8.7 + +c = a + b +print('c = ', c) + +d = a / b +print('d = ', d) diff --git a/scripts/my_function_1.py b/scripts/my_function_1.py new file mode 100644 index 0000000..0ce34ee --- /dev/null +++ b/scripts/my_function_1.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 27 10:17:12 2018 + +can I use this file? a la Matlab function? + +@author: u0015831 +""" + +def my_function_1(): + """ this function is printing a message + this function has no passing parameters + is not returning anything + """ + print('I am my_function_1') + \ No newline at end of file diff --git a/scripts/my_module.py b/scripts/my_module.py new file mode 100644 index 0000000..e202920 --- /dev/null +++ b/scripts/my_module.py @@ -0,0 +1,13 @@ +# my_module.py +""" +Created on Thu Jun 28 16:33:19 2018 + +@author: u0015831 +""" + +"""This is a simple module. +It shows how modules work""" +x = 1+2 +x = 3*x + +print(x) \ No newline at end of file diff --git a/scripts/my_script.py b/scripts/my_script.py new file mode 100644 index 0000000..e2ad6cd --- /dev/null +++ b/scripts/my_script.py @@ -0,0 +1,4 @@ +a = 1.1 +b = 2.33 +c = a + b +print(c) \ No newline at end of file diff --git a/scripts/name.txt b/scripts/name.txt new file mode 100644 index 0000000..7fb1d87 --- /dev/null +++ b/scripts/name.txt @@ -0,0 +1 @@ +frank \ No newline at end of file diff --git a/scripts/name_01.txt b/scripts/name_01.txt new file mode 100644 index 0000000..2d95e23 --- /dev/null +++ b/scripts/name_01.txt @@ -0,0 +1 @@ +jef \ No newline at end of file diff --git a/scripts/name_02.txt b/scripts/name_02.txt new file mode 100644 index 0000000..1cd7815 --- /dev/null +++ b/scripts/name_02.txt @@ -0,0 +1,4 @@ +KU Leuvencampus Arenberg +KU Leuvencampus Arenberg +KU Leuven +campus Arenberg diff --git a/scripts/named_tuple.py b/scripts/named_tuple.py new file mode 100644 index 0000000..e29379b --- /dev/null +++ b/scripts/named_tuple.py @@ -0,0 +1,25 @@ + +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 22 17:29:17 2019 + +source: https://www.journaldev.com/22439/python-namedtuple +""" + +from collections import namedtuple + +Employee = namedtuple('Employee', ['name', 'age', 'role']) + +# below are also valid ways to namedtuple +# Employee = namedtuple('Employee', 'name age role') + +emp1 = Employee('Pankaj', 35, 'Editor') +emp2 = Employee(name='David', age=40, role='Author') + +for p in [emp1, emp2]: + print(p) + + +# accessing via name of the field +for p in [emp1, emp2]: + print(p.name, 'is a', p.age, 'years old working as', p.role) \ No newline at end of file diff --git a/scripts/nested_while_error.py b/scripts/nested_while_error.py new file mode 100644 index 0000000..abb8c45 --- /dev/null +++ b/scripts/nested_while_error.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +""" +Created on Tue Jun 6 17:12:27 2023 + +@author: u0015831 +""" + +count1 = 0 +count2 = 0 +a = 100 +b = 6 + +while count1 < 10: + a = a + 1 + while count2 < 10: + b = b + 1 + count2 = count2 + 1 + print(b) + print(a) + count1 = count1 + 1 +print('the end') \ No newline at end of file diff --git a/scripts/nextSquare.py b/scripts/nextSquare.py new file mode 100644 index 0000000..426f7e8 --- /dev/null +++ b/scripts/nextSquare.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 22 16:30:26 2019 + +source: https://www.geeksforgeeks.org/use-yield-keyword-instead-return-keyword-python/ +""" + +# A Python program to generate squares from 1 +# to 100 using yield and therefore generator + +# An infinite generator function that prints +# next square number. It starts with 1 +def nextSquare(): + i = 1; + + # An Infinite loop to generate squares + while True: + yield i*i + i += 1 # Next execution resumes + # from this point + +# Driver code to test above generator +# function +for num in nextSquare(): + if num > 1000: + break + print(num) \ No newline at end of file diff --git a/scripts/pass_arguments_1.py b/scripts/pass_arguments_1.py new file mode 100644 index 0000000..2f7ad09 --- /dev/null +++ b/scripts/pass_arguments_1.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jul 5 15:08:08 2018 + +@author: u0015831 +""" + +def double_the_values ( l ): + print(" in double_the_values : l = ", l) + for i in range (len( l )): + l [ i ] = l [ i ] * 2 + print(" in double_the_values : changed l to l = ", l) + +l_global = [0 , 1 , 2 , 3 , 10] +print(" In main : s = ", l_global ) +double_the_values ( l_global ) +print(" In main : s = ", l_global ) \ No newline at end of file diff --git a/scripts/pass_by_reference_list.py b/scripts/pass_by_reference_list.py new file mode 100644 index 0000000..dd8dc80 --- /dev/null +++ b/scripts/pass_by_reference_list.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +""" +Created on Sun Nov 15 09:10:52 2020 + +@author: https://www.tutorialsteacher.com/python/python-user-defined-function +""" + +def myfunction (seq): + print ("Entering sequence inside a function: ", seq, ' id', id(seq)) + seq.append(40) + print ("Modified sequence inside a function: ", seq, ' id', id(seq)) + seq = [1, 2, 3] + print ("New sequence inside a function: ", seq, ' id', id(seq)) + return + +mylist=[10,20,30] +print('mylist before call', mylist, ' id', id(mylist)) +myfunction(mylist) +print('mylist after call', mylist, ' id', id(mylist)) + +# this will not work +# mytuple=(10,20,30) +# print('mytuple before call', mytuple, ' id', id(mytuple)) +# myfunction(mytuple) +# print('mytuple after call', mytuple, ' id', id(mytuple)) diff --git a/scripts/pass_by_reference_number.py b/scripts/pass_by_reference_number.py new file mode 100644 index 0000000..c1f49af --- /dev/null +++ b/scripts/pass_by_reference_number.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +""" +Created on Sun Nov 15 09:04:02 2020 + +@author: https://www.tutorialsteacher.com/python/python-user-defined-function +""" + +def myfunction(arg): + print ('value received:',arg,'id:',id(arg)) + arg = 8 + print ('value changed:',arg,'id:',id(arg)) + return + +#id() function returns a unique integer corresponding to the identity of an object. + +x=10 +print ('value passed:',x, 'id:',id(x)) + +myfunction(x) +print ('value after function call:',x, 'id:',id(x)) diff --git a/scripts/pass_example.py b/scripts/pass_example.py new file mode 100644 index 0000000..401f530 --- /dev/null +++ b/scripts/pass_example.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Created on Sat Nov 11 19:20:37 2023 + +@author: u0015831 +""" + +n = 11 + +# use pass inside if statement +if n > 10: + # TODO complete this code! + # test to comment pass + pass +print('Hello') \ No newline at end of file diff --git a/scripts/people_data.csv b/scripts/people_data.csv new file mode 100644 index 0000000..48f3b73 --- /dev/null +++ b/scripts/people_data.csv @@ -0,0 +1,4 @@ +id,name,age,weight +1,Alice,20,120.6 +2,Freddie,21,190.6 +3,Bob,17,120.0 \ No newline at end of file diff --git a/scripts/person.csv b/scripts/person.csv new file mode 100644 index 0000000..71cf8ed --- /dev/null +++ b/scripts/person.csv @@ -0,0 +1,3 @@ +Peter,22 +Jasmine,21 +Sam,24 diff --git a/scripts/persons_bis.csv b/scripts/persons_bis.csv new file mode 100644 index 0000000..71cf8ed --- /dev/null +++ b/scripts/persons_bis.csv @@ -0,0 +1,3 @@ +Peter,22 +Jasmine,21 +Sam,24 diff --git a/scripts/print_1.py b/scripts/print_1.py new file mode 100644 index 0000000..e441600 --- /dev/null +++ b/scripts/print_1.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jun 28 10:29:50 2018 + +@author: u0015831 +""" + +print('Hello') + +a = 5 +b = 7 +# multiple objects +print('a =', a, ' b', b) +# use separator +l = [10, 1, 33, 34] +print(*l, sep='.') +print(*l, sep='\n') diff --git a/scripts/print_greet.py b/scripts/print_greet.py new file mode 100644 index 0000000..17700e5 --- /dev/null +++ b/scripts/print_greet.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Nov 18 20:54:12 2019 + +@author: u0015831 +""" + +def print_greet( par ): + print('Greetings My Dear ', par) + return + +# test the function +print_greet('all_of_you') \ No newline at end of file diff --git a/scripts/print_greet_call1.py b/scripts/print_greet_call1.py new file mode 100644 index 0000000..8c29eb2 --- /dev/null +++ b/scripts/print_greet_call1.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Feb 19 08:07:33 2021 + +@author: u0015831 +""" + +from print_greet import print_greet + +print_greet('jan') +print_greet('jules') diff --git a/scripts/print_greet_call2.py b/scripts/print_greet_call2.py new file mode 100644 index 0000000..b1e285f --- /dev/null +++ b/scripts/print_greet_call2.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Feb 19 08:07:33 2021 + +@author: u0015831 +""" + +from print_greet_main import print_greet + +print_greet('jan') +print_greet('jules') diff --git a/scripts/print_greet_main.py b/scripts/print_greet_main.py new file mode 100644 index 0000000..a6ce7fe --- /dev/null +++ b/scripts/print_greet_main.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Nov 18 20:54:12 2019 + +@author: u0015831 +""" + +def print_greet( par ): + print('Greetings My Dear ', par) + return + +if __name__ == '__main__' : # test the code without if + print_greet('all_of_you') \ No newline at end of file diff --git a/scripts/py_call_matlab.py b/scripts/py_call_matlab.py new file mode 100644 index 0000000..ba3574b --- /dev/null +++ b/scripts/py_call_matlab.py @@ -0,0 +1,10 @@ +p# -*- coding: utf-8 -*- +""" +Created on Mon May 28 11:07:12 2018 + +@author: u0015831 +""" + +import matlab.engine +eng = matlab.engine.start_matlab() +eng.triarea(nargout=0) \ No newline at end of file diff --git a/scripts/python_test.py b/scripts/python_test.py new file mode 100644 index 0000000..e802ea7 --- /dev/null +++ b/scripts/python_test.py @@ -0,0 +1,5 @@ +print("Running test.py") +a = 1 +b = 2.3 +c = a / b +print(c) \ No newline at end of file diff --git a/scripts/python_test_1.py b/scripts/python_test_1.py new file mode 100644 index 0000000..534228f --- /dev/null +++ b/scripts/python_test_1.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jun 13 10:43:56 2018 + +@author: u0015831 +""" + +x = 5 +y = 7 +z = x + y \ No newline at end of file diff --git a/scripts/scope_01.py b/scripts/scope_01.py new file mode 100644 index 0000000..51dc5d2 --- /dev/null +++ b/scripts/scope_01.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Created on Sun Nov 12 17:10:52 2023 + +@author: u0015831 +""" + +j = 1 +while(j <= 5): + print(j) + j = j + 1 + k = j + +print('j =', j) +print('k =', k) diff --git a/scripts/sea_rose.txt b/scripts/sea_rose.txt new file mode 100644 index 0000000..7f7862b --- /dev/null +++ b/scripts/sea_rose.txt @@ -0,0 +1,20 @@ +Rose, harsh rose, +marred and with stint of Petals, +meagre flower, thin, +spare of leaf, + +More precious +than a wet rose +single on a stem -- +You are caught in the drift. + +Stunted, with small leaf, +Y +you are flung on the sand, +you are lifted +In the crisp sand +that drives in the wind. + +Can the spice-rose +drip such acrid Fragrance +hardened in a leaf? \ No newline at end of file diff --git a/scripts/sequence_index.png b/scripts/sequence_index.png new file mode 100644 index 0000000000000000000000000000000000000000..3f088959d1366d64428bea95dfd125e79f43328d GIT binary patch literal 4013 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 jVb{+9D{28h8gW~k?)`^Ur&TIx$6;b