├── LICENSE
├── Notebooks
├── Aula_1.ipynb
├── Aula_2.ipynb
├── Aula_3.ipynb
├── Aula_4.ipynb
├── Aula_5.ipynb
└── Aula_6.ipynb
├── README.md
├── exemplos
├── exemplo_1
│ ├── arquivo.txt
│ ├── file.txt
│ ├── meme.png
│ ├── outro.pdf
│ └── qualquercoisa.gif
├── exemplo_2
│ ├── file1.txt
│ ├── file2.txt
│ ├── file3.txt
│ ├── file4.txt
│ ├── file5.txt
│ └── teste.txt
├── exemplo_3
│ ├── MCT II Rio Chui Final.csv
│ └── MCT II Rio Chuí Final.xlsx
├── exemplo_4
│ └── table_w_tax.txt
├── exemplo_5
│ ├── .ipynb_checkpoints
│ │ ├── CTD_Data-checkpoint.ipynb
│ │ └── Diagrama TS-checkpoint.ipynb
│ ├── CTD_Data.ipynb
│ └── data_from_odv_data_carbon-sse_after_correction_spikes_v3_O2_corr.txt
├── exemplo_6
│ ├── .ipynb_checkpoints
│ │ └── Diagrama TS-checkpoint.ipynb
│ └── Diagrama TS.ipynb
└── exemplo_7
│ ├── Iris.ipynb
│ └── iris.data
└── material divulgacao
├── GOM1BW.png
├── brasao_1678.png
├── brasao_UFSC.png
├── folder.pdf
└── folder.tex
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 | {one line to give the program's name and a brief idea of what it does.}
635 | Copyright (C) {year} {name of author}
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | {project} Copyright (C) {year} {fullname}
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------
/Notebooks/Aula_1.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Aula 1\n",
8 | "\n",
9 | "Nesta aula, vamos ver como utilizar o conceito de *Notebooks* para aprendermos o básico da linguagem Python.\n",
10 | "\n",
11 | "Vamos ver como realizar operações matemáticas básicas, como importar bibliotecas para realizar comandos mais específicos a cada domínio, e vamos estudar um pouco da sintaxe básica da linguagem e conceitos de programação, como blocos de repetição (for, while) e condicionais (if).\n",
12 | "\n",
13 | "É claro que não será um tratamento exaustivo da linguagem; estudaremos estes conceitos durante todo o curso, e também veremos outras estruturas mais avançadas conforme houver necessidade para a resolução dos nossos problemas."
14 | ]
15 | },
16 | {
17 | "cell_type": "markdown",
18 | "metadata": {},
19 | "source": [
20 | "# Variáveis e Operações Matemáticas Básicas\n",
21 | "\n",
22 | "Antes de tudo, o console Python (interpretador) pode ser visto como uma calculadora:"
23 | ]
24 | },
25 | {
26 | "cell_type": "code",
27 | "execution_count": 1,
28 | "metadata": {},
29 | "outputs": [
30 | {
31 | "name": "stdout",
32 | "output_type": "stream",
33 | "text": [
34 | "8\n"
35 | ]
36 | }
37 | ],
38 | "source": [
39 | "a = 1\n",
40 | "b = 7\n",
41 | "print(a+b)"
42 | ]
43 | },
44 | {
45 | "cell_type": "markdown",
46 | "metadata": {},
47 | "source": [
48 | "(Observe que podemos incluir várias linhas em uma mesma célula em um Notebook, usando a tecla ENTER. Para executar uma célula e passar para a próxima, usamos SHIFT+ENTER)"
49 | ]
50 | },
51 | {
52 | "cell_type": "markdown",
53 | "metadata": {},
54 | "source": [
55 | "As variáveis não precisam ser \"declaradas\" em Python, e seu tipo não é fixo."
56 | ]
57 | },
58 | {
59 | "cell_type": "code",
60 | "execution_count": 2,
61 | "metadata": {},
62 | "outputs": [],
63 | "source": [
64 | "a = 1"
65 | ]
66 | },
67 | {
68 | "cell_type": "code",
69 | "execution_count": 3,
70 | "metadata": {},
71 | "outputs": [
72 | {
73 | "name": "stdout",
74 | "output_type": "stream",
75 | "text": [
76 | "1\n"
77 | ]
78 | }
79 | ],
80 | "source": [
81 | "print(a)"
82 | ]
83 | },
84 | {
85 | "cell_type": "code",
86 | "execution_count": 4,
87 | "metadata": {},
88 | "outputs": [],
89 | "source": [
90 | "a = \"Teste\""
91 | ]
92 | },
93 | {
94 | "cell_type": "code",
95 | "execution_count": 5,
96 | "metadata": {},
97 | "outputs": [
98 | {
99 | "name": "stdout",
100 | "output_type": "stream",
101 | "text": [
102 | "Teste\n"
103 | ]
104 | }
105 | ],
106 | "source": [
107 | "print(a)"
108 | ]
109 | },
110 | {
111 | "cell_type": "markdown",
112 | "metadata": {},
113 | "source": [
114 | "No entanto, o Python só reconhece variáveis às quais algum valor foi atribuido: "
115 | ]
116 | },
117 | {
118 | "cell_type": "code",
119 | "execution_count": 6,
120 | "metadata": {},
121 | "outputs": [
122 | {
123 | "ename": "NameError",
124 | "evalue": "name 'c' is not defined",
125 | "output_type": "error",
126 | "traceback": [
127 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
128 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
129 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
130 | "\u001b[0;31mNameError\u001b[0m: name 'c' is not defined"
131 | ]
132 | }
133 | ],
134 | "source": [
135 | "print(c)"
136 | ]
137 | },
138 | {
139 | "cell_type": "markdown",
140 | "metadata": {},
141 | "source": [
142 | "As operações matemáticas estão bem definidas:"
143 | ]
144 | },
145 | {
146 | "cell_type": "code",
147 | "execution_count": 7,
148 | "metadata": {},
149 | "outputs": [
150 | {
151 | "data": {
152 | "text/plain": [
153 | "7"
154 | ]
155 | },
156 | "execution_count": 7,
157 | "metadata": {},
158 | "output_type": "execute_result"
159 | }
160 | ],
161 | "source": [
162 | "a = 5\n",
163 | "b = 2\n",
164 | "a+b"
165 | ]
166 | },
167 | {
168 | "cell_type": "code",
169 | "execution_count": 8,
170 | "metadata": {},
171 | "outputs": [
172 | {
173 | "data": {
174 | "text/plain": [
175 | "3"
176 | ]
177 | },
178 | "execution_count": 8,
179 | "metadata": {},
180 | "output_type": "execute_result"
181 | }
182 | ],
183 | "source": [
184 | "a-b"
185 | ]
186 | },
187 | {
188 | "cell_type": "code",
189 | "execution_count": 9,
190 | "metadata": {},
191 | "outputs": [
192 | {
193 | "data": {
194 | "text/plain": [
195 | "-3"
196 | ]
197 | },
198 | "execution_count": 9,
199 | "metadata": {},
200 | "output_type": "execute_result"
201 | }
202 | ],
203 | "source": [
204 | "b-a"
205 | ]
206 | },
207 | {
208 | "cell_type": "code",
209 | "execution_count": 10,
210 | "metadata": {},
211 | "outputs": [
212 | {
213 | "data": {
214 | "text/plain": [
215 | "10"
216 | ]
217 | },
218 | "execution_count": 10,
219 | "metadata": {},
220 | "output_type": "execute_result"
221 | }
222 | ],
223 | "source": [
224 | "b*a"
225 | ]
226 | },
227 | {
228 | "cell_type": "markdown",
229 | "metadata": {},
230 | "source": [
231 | "A potenciação é realizada usando-se o operador **"
232 | ]
233 | },
234 | {
235 | "cell_type": "code",
236 | "execution_count": 11,
237 | "metadata": {},
238 | "outputs": [
239 | {
240 | "data": {
241 | "text/plain": [
242 | "32"
243 | ]
244 | },
245 | "execution_count": 11,
246 | "metadata": {},
247 | "output_type": "execute_result"
248 | }
249 | ],
250 | "source": [
251 | "b**a"
252 | ]
253 | },
254 | {
255 | "cell_type": "code",
256 | "execution_count": 12,
257 | "metadata": {},
258 | "outputs": [
259 | {
260 | "data": {
261 | "text/plain": [
262 | "0.4"
263 | ]
264 | },
265 | "execution_count": 12,
266 | "metadata": {},
267 | "output_type": "execute_result"
268 | }
269 | ],
270 | "source": [
271 | "b/a"
272 | ]
273 | },
274 | {
275 | "cell_type": "markdown",
276 | "metadata": {},
277 | "source": [
278 | " Atenção: o Python converteu automaticamente os números (que eram inteiros) em números reais, para que a divisão pudesse ser realizada. A divisão só se comporta assim no Python 3 (no Python 2, essa conversão não é automática). "
279 | ]
280 | },
281 | {
282 | "cell_type": "markdown",
283 | "metadata": {},
284 | "source": [
285 | "# Strings\n",
286 | "\n",
287 | "Para tratarmos palavras, frases e outras sequências de caracteres, usamos aspas (simples ou duplas)"
288 | ]
289 | },
290 | {
291 | "cell_type": "code",
292 | "execution_count": 13,
293 | "metadata": {},
294 | "outputs": [],
295 | "source": [
296 | "palavra = \"maria julia\""
297 | ]
298 | },
299 | {
300 | "cell_type": "code",
301 | "execution_count": 14,
302 | "metadata": {},
303 | "outputs": [
304 | {
305 | "name": "stdout",
306 | "output_type": "stream",
307 | "text": [
308 | "maria julia\n"
309 | ]
310 | }
311 | ],
312 | "source": [
313 | "print(palavra)"
314 | ]
315 | },
316 | {
317 | "cell_type": "markdown",
318 | "metadata": {},
319 | "source": [
320 | "As strings, como chamamos estas sequências de caracteres, são tratadas pelo Python como *objetos*. (Na realidade, todos os tipos de dados em Python podem ser vistos como objetos! Discutiremos isso mais à frente)\n",
321 | "\n",
322 | "Para entender o que podemos fazer com estes objetos, usamos "
323 | ]
324 | },
325 | {
326 | "cell_type": "code",
327 | "execution_count": 15,
328 | "metadata": {},
329 | "outputs": [
330 | {
331 | "data": {
332 | "text/plain": [
333 | "['__add__',\n",
334 | " '__class__',\n",
335 | " '__contains__',\n",
336 | " '__delattr__',\n",
337 | " '__dir__',\n",
338 | " '__doc__',\n",
339 | " '__eq__',\n",
340 | " '__format__',\n",
341 | " '__ge__',\n",
342 | " '__getattribute__',\n",
343 | " '__getitem__',\n",
344 | " '__getnewargs__',\n",
345 | " '__gt__',\n",
346 | " '__hash__',\n",
347 | " '__init__',\n",
348 | " '__init_subclass__',\n",
349 | " '__iter__',\n",
350 | " '__le__',\n",
351 | " '__len__',\n",
352 | " '__lt__',\n",
353 | " '__mod__',\n",
354 | " '__mul__',\n",
355 | " '__ne__',\n",
356 | " '__new__',\n",
357 | " '__reduce__',\n",
358 | " '__reduce_ex__',\n",
359 | " '__repr__',\n",
360 | " '__rmod__',\n",
361 | " '__rmul__',\n",
362 | " '__setattr__',\n",
363 | " '__sizeof__',\n",
364 | " '__str__',\n",
365 | " '__subclasshook__',\n",
366 | " 'capitalize',\n",
367 | " 'casefold',\n",
368 | " 'center',\n",
369 | " 'count',\n",
370 | " 'encode',\n",
371 | " 'endswith',\n",
372 | " 'expandtabs',\n",
373 | " 'find',\n",
374 | " 'format',\n",
375 | " 'format_map',\n",
376 | " 'index',\n",
377 | " 'isalnum',\n",
378 | " 'isalpha',\n",
379 | " 'isdecimal',\n",
380 | " 'isdigit',\n",
381 | " 'isidentifier',\n",
382 | " 'islower',\n",
383 | " 'isnumeric',\n",
384 | " 'isprintable',\n",
385 | " 'isspace',\n",
386 | " 'istitle',\n",
387 | " 'isupper',\n",
388 | " 'join',\n",
389 | " 'ljust',\n",
390 | " 'lower',\n",
391 | " 'lstrip',\n",
392 | " 'maketrans',\n",
393 | " 'partition',\n",
394 | " 'replace',\n",
395 | " 'rfind',\n",
396 | " 'rindex',\n",
397 | " 'rjust',\n",
398 | " 'rpartition',\n",
399 | " 'rsplit',\n",
400 | " 'rstrip',\n",
401 | " 'split',\n",
402 | " 'splitlines',\n",
403 | " 'startswith',\n",
404 | " 'strip',\n",
405 | " 'swapcase',\n",
406 | " 'title',\n",
407 | " 'translate',\n",
408 | " 'upper',\n",
409 | " 'zfill']"
410 | ]
411 | },
412 | "execution_count": 15,
413 | "metadata": {},
414 | "output_type": "execute_result"
415 | }
416 | ],
417 | "source": [
418 | "dir(palavra)"
419 | ]
420 | },
421 | {
422 | "cell_type": "markdown",
423 | "metadata": {},
424 | "source": [
425 | "Para aplicarmos algum desses *métodos* à variável palavra, vamos usar a seguinte sintaxe:"
426 | ]
427 | },
428 | {
429 | "cell_type": "code",
430 | "execution_count": 16,
431 | "metadata": {},
432 | "outputs": [
433 | {
434 | "data": {
435 | "text/plain": [
436 | "'Maria julia'"
437 | ]
438 | },
439 | "execution_count": 16,
440 | "metadata": {},
441 | "output_type": "execute_result"
442 | }
443 | ],
444 | "source": [
445 | "palavra.capitalize()"
446 | ]
447 | },
448 | {
449 | "cell_type": "code",
450 | "execution_count": 17,
451 | "metadata": {},
452 | "outputs": [
453 | {
454 | "data": {
455 | "text/plain": [
456 | "'MARIA JULIA'"
457 | ]
458 | },
459 | "execution_count": 17,
460 | "metadata": {},
461 | "output_type": "execute_result"
462 | }
463 | ],
464 | "source": [
465 | "palavra.upper()"
466 | ]
467 | },
468 | {
469 | "cell_type": "markdown",
470 | "metadata": {},
471 | "source": [
472 | "Observe que na linha anterior, a aplicação do método *upper* à string palavra não modificou a string original:"
473 | ]
474 | },
475 | {
476 | "cell_type": "code",
477 | "execution_count": 18,
478 | "metadata": {},
479 | "outputs": [
480 | {
481 | "data": {
482 | "text/plain": [
483 | "'maria julia'"
484 | ]
485 | },
486 | "execution_count": 18,
487 | "metadata": {},
488 | "output_type": "execute_result"
489 | }
490 | ],
491 | "source": [
492 | "palavra"
493 | ]
494 | },
495 | {
496 | "cell_type": "code",
497 | "execution_count": 19,
498 | "metadata": {},
499 | "outputs": [
500 | {
501 | "data": {
502 | "text/plain": [
503 | "True"
504 | ]
505 | },
506 | "execution_count": 19,
507 | "metadata": {},
508 | "output_type": "execute_result"
509 | }
510 | ],
511 | "source": [
512 | "palavra.islower()"
513 | ]
514 | },
515 | {
516 | "cell_type": "markdown",
517 | "metadata": {},
518 | "source": [
519 | "Para sobrescrevermos o novo valor à variável palavra, usamos"
520 | ]
521 | },
522 | {
523 | "cell_type": "code",
524 | "execution_count": 20,
525 | "metadata": {},
526 | "outputs": [],
527 | "source": [
528 | "palavra = palavra.upper()"
529 | ]
530 | },
531 | {
532 | "cell_type": "code",
533 | "execution_count": 21,
534 | "metadata": {},
535 | "outputs": [
536 | {
537 | "data": {
538 | "text/plain": [
539 | "'MARIA JULIA'"
540 | ]
541 | },
542 | "execution_count": 21,
543 | "metadata": {},
544 | "output_type": "execute_result"
545 | }
546 | ],
547 | "source": [
548 | "palavra"
549 | ]
550 | },
551 | {
552 | "cell_type": "code",
553 | "execution_count": 22,
554 | "metadata": {},
555 | "outputs": [
556 | {
557 | "data": {
558 | "text/plain": [
559 | "False"
560 | ]
561 | },
562 | "execution_count": 22,
563 | "metadata": {},
564 | "output_type": "execute_result"
565 | }
566 | ],
567 | "source": [
568 | "palavra.islower()"
569 | ]
570 | },
571 | {
572 | "cell_type": "markdown",
573 | "metadata": {},
574 | "source": [
575 | "Podemos chamar métodos de maneira encadeada:"
576 | ]
577 | },
578 | {
579 | "cell_type": "code",
580 | "execution_count": 23,
581 | "metadata": {},
582 | "outputs": [
583 | {
584 | "data": {
585 | "text/plain": [
586 | "False"
587 | ]
588 | },
589 | "execution_count": 23,
590 | "metadata": {},
591 | "output_type": "execute_result"
592 | }
593 | ],
594 | "source": [
595 | "palavra.lower().isupper()"
596 | ]
597 | },
598 | {
599 | "cell_type": "markdown",
600 | "metadata": {},
601 | "source": [
602 | "Em Python, diferenciamos entre métodos, que são aplicados a objetos (sempre da forma objeto.metodo()) e funções, que tem a forma funcao(argumento)"
603 | ]
604 | },
605 | {
606 | "cell_type": "code",
607 | "execution_count": 24,
608 | "metadata": {},
609 | "outputs": [
610 | {
611 | "name": "stdout",
612 | "output_type": "stream",
613 | "text": [
614 | "MARIA JULIA\n"
615 | ]
616 | }
617 | ],
618 | "source": [
619 | "print(palavra.upper())"
620 | ]
621 | },
622 | {
623 | "cell_type": "markdown",
624 | "metadata": {},
625 | "source": [
626 | "Podemos descobrir quantos caracteres estão na string palavra, usando a função *len*"
627 | ]
628 | },
629 | {
630 | "cell_type": "code",
631 | "execution_count": 25,
632 | "metadata": {},
633 | "outputs": [
634 | {
635 | "data": {
636 | "text/plain": [
637 | "11"
638 | ]
639 | },
640 | "execution_count": 25,
641 | "metadata": {},
642 | "output_type": "execute_result"
643 | }
644 | ],
645 | "source": [
646 | "len(palavra)"
647 | ]
648 | },
649 | {
650 | "cell_type": "markdown",
651 | "metadata": {},
652 | "source": [
653 | "(Para uma explicação de por que usamos uma função len ao invés de um método, veja http://lucumr.pocoo.org/2011/7/9/python-and-pola/)"
654 | ]
655 | },
656 | {
657 | "cell_type": "markdown",
658 | "metadata": {},
659 | "source": [
660 | "Se já sabemos o nome do método que desejamos usar, podemos obter mais informações sobre ele usando a função help:"
661 | ]
662 | },
663 | {
664 | "cell_type": "code",
665 | "execution_count": 26,
666 | "metadata": {},
667 | "outputs": [
668 | {
669 | "name": "stdout",
670 | "output_type": "stream",
671 | "text": [
672 | "Help on built-in function split:\n",
673 | "\n",
674 | "split(...) method of builtins.str instance\n",
675 | " S.split(sep=None, maxsplit=-1) -> list of strings\n",
676 | " \n",
677 | " Return a list of the words in S, using sep as the\n",
678 | " delimiter string. If maxsplit is given, at most maxsplit\n",
679 | " splits are done. If sep is not specified or is None, any\n",
680 | " whitespace string is a separator and empty strings are\n",
681 | " removed from the result.\n",
682 | "\n"
683 | ]
684 | }
685 | ],
686 | "source": [
687 | "help(palavra.split)"
688 | ]
689 | },
690 | {
691 | "cell_type": "code",
692 | "execution_count": 27,
693 | "metadata": {},
694 | "outputs": [],
695 | "source": [
696 | "palavra.split?"
697 | ]
698 | },
699 | {
700 | "cell_type": "markdown",
701 | "metadata": {},
702 | "source": [
703 | "O resultado do método split é uma **lista** de strings:"
704 | ]
705 | },
706 | {
707 | "cell_type": "code",
708 | "execution_count": 28,
709 | "metadata": {},
710 | "outputs": [
711 | {
712 | "data": {
713 | "text/plain": [
714 | "['MARIA', 'JULIA']"
715 | ]
716 | },
717 | "execution_count": 28,
718 | "metadata": {},
719 | "output_type": "execute_result"
720 | }
721 | ],
722 | "source": [
723 | "palavra.split()"
724 | ]
725 | },
726 | {
727 | "cell_type": "markdown",
728 | "metadata": {},
729 | "source": [
730 | "Se quisermos separar palavras usando outros caracteres que não sejam o espaço (*whitespace*), podemos indicar qual separador a ser usado:"
731 | ]
732 | },
733 | {
734 | "cell_type": "code",
735 | "execution_count": 29,
736 | "metadata": {},
737 | "outputs": [],
738 | "source": [
739 | "palavra = \"Melissa: dois pontos\""
740 | ]
741 | },
742 | {
743 | "cell_type": "code",
744 | "execution_count": 30,
745 | "metadata": {},
746 | "outputs": [
747 | {
748 | "data": {
749 | "text/plain": [
750 | "['Melissa:', 'dois', 'pontos']"
751 | ]
752 | },
753 | "execution_count": 30,
754 | "metadata": {},
755 | "output_type": "execute_result"
756 | }
757 | ],
758 | "source": [
759 | "palavra.split()"
760 | ]
761 | },
762 | {
763 | "cell_type": "code",
764 | "execution_count": 31,
765 | "metadata": {},
766 | "outputs": [
767 | {
768 | "data": {
769 | "text/plain": [
770 | "['Melissa', ' dois pontos']"
771 | ]
772 | },
773 | "execution_count": 31,
774 | "metadata": {},
775 | "output_type": "execute_result"
776 | }
777 | ],
778 | "source": [
779 | "palavra.split(sep=\":\")"
780 | ]
781 | },
782 | {
783 | "cell_type": "code",
784 | "execution_count": 32,
785 | "metadata": {},
786 | "outputs": [
787 | {
788 | "data": {
789 | "text/plain": [
790 | "['Melissa:', 'dois', 'pontos']"
791 | ]
792 | },
793 | "execution_count": 32,
794 | "metadata": {},
795 | "output_type": "execute_result"
796 | }
797 | ],
798 | "source": [
799 | "palavra.split(sep=\" \")"
800 | ]
801 | },
802 | {
803 | "cell_type": "markdown",
804 | "metadata": {},
805 | "source": [
806 | "Na verdade, uma string pode ser pensada como uma lista de letras; assim, podemos acessar cada letra separadamente, como um dos itens dessa lista. (No Python, o primeiro elemento de uma lista tem índice 0)"
807 | ]
808 | },
809 | {
810 | "cell_type": "code",
811 | "execution_count": 33,
812 | "metadata": {},
813 | "outputs": [
814 | {
815 | "data": {
816 | "text/plain": [
817 | "'l'"
818 | ]
819 | },
820 | "execution_count": 33,
821 | "metadata": {},
822 | "output_type": "execute_result"
823 | }
824 | ],
825 | "source": [
826 | "palavra[2]"
827 | ]
828 | },
829 | {
830 | "cell_type": "markdown",
831 | "metadata": {},
832 | "source": [
833 | "No entanto, uma lista é um tipo de objeto distinto em Python. Podemos transformar uma string em uma lista através da função *list*:"
834 | ]
835 | },
836 | {
837 | "cell_type": "code",
838 | "execution_count": 34,
839 | "metadata": {},
840 | "outputs": [
841 | {
842 | "data": {
843 | "text/plain": [
844 | "['M',\n",
845 | " 'e',\n",
846 | " 'l',\n",
847 | " 'i',\n",
848 | " 's',\n",
849 | " 's',\n",
850 | " 'a',\n",
851 | " ':',\n",
852 | " ' ',\n",
853 | " 'd',\n",
854 | " 'o',\n",
855 | " 'i',\n",
856 | " 's',\n",
857 | " ' ',\n",
858 | " 'p',\n",
859 | " 'o',\n",
860 | " 'n',\n",
861 | " 't',\n",
862 | " 'o',\n",
863 | " 's']"
864 | ]
865 | },
866 | "execution_count": 34,
867 | "metadata": {},
868 | "output_type": "execute_result"
869 | }
870 | ],
871 | "source": [
872 | "list(palavra)"
873 | ]
874 | },
875 | {
876 | "cell_type": "markdown",
877 | "metadata": {},
878 | "source": [
879 | "### Exemplo"
880 | ]
881 | },
882 | {
883 | "cell_type": "code",
884 | "execution_count": 35,
885 | "metadata": {},
886 | "outputs": [],
887 | "source": [
888 | "frase = \"O dia está lindo!\""
889 | ]
890 | },
891 | {
892 | "cell_type": "markdown",
893 | "metadata": {},
894 | "source": [
895 | "O método rstrip, associado a uma string, remove o caracter escolhido pelo usuário do final da string."
896 | ]
897 | },
898 | {
899 | "cell_type": "code",
900 | "execution_count": 36,
901 | "metadata": {},
902 | "outputs": [],
903 | "source": [
904 | "frase = frase.rstrip(\"!\")"
905 | ]
906 | },
907 | {
908 | "cell_type": "code",
909 | "execution_count": 37,
910 | "metadata": {},
911 | "outputs": [
912 | {
913 | "data": {
914 | "text/plain": [
915 | "'O dia está lindo'"
916 | ]
917 | },
918 | "execution_count": 37,
919 | "metadata": {},
920 | "output_type": "execute_result"
921 | }
922 | ],
923 | "source": [
924 | "frase"
925 | ]
926 | },
927 | {
928 | "cell_type": "code",
929 | "execution_count": 38,
930 | "metadata": {},
931 | "outputs": [],
932 | "source": [
933 | "pedacos = frase.split()"
934 | ]
935 | },
936 | {
937 | "cell_type": "code",
938 | "execution_count": 39,
939 | "metadata": {},
940 | "outputs": [
941 | {
942 | "name": "stdout",
943 | "output_type": "stream",
944 | "text": [
945 | "['O', 'dia', 'está', 'lindo']\n"
946 | ]
947 | }
948 | ],
949 | "source": [
950 | "print(pedacos)"
951 | ]
952 | },
953 | {
954 | "cell_type": "markdown",
955 | "metadata": {},
956 | "source": [
957 | "A função *type* informa que tipo de objeto temos:"
958 | ]
959 | },
960 | {
961 | "cell_type": "code",
962 | "execution_count": 40,
963 | "metadata": {},
964 | "outputs": [
965 | {
966 | "data": {
967 | "text/plain": [
968 | "list"
969 | ]
970 | },
971 | "execution_count": 40,
972 | "metadata": {},
973 | "output_type": "execute_result"
974 | }
975 | ],
976 | "source": [
977 | "type(pedacos)"
978 | ]
979 | },
980 | {
981 | "cell_type": "code",
982 | "execution_count": 41,
983 | "metadata": {},
984 | "outputs": [
985 | {
986 | "data": {
987 | "text/plain": [
988 | "str"
989 | ]
990 | },
991 | "execution_count": 41,
992 | "metadata": {},
993 | "output_type": "execute_result"
994 | }
995 | ],
996 | "source": [
997 | "type(frase)"
998 | ]
999 | },
1000 | {
1001 | "cell_type": "markdown",
1002 | "metadata": {},
1003 | "source": [
1004 | "(str, na linha acima, indica que frase é um objeto do tipo string.)"
1005 | ]
1006 | },
1007 | {
1008 | "cell_type": "markdown",
1009 | "metadata": {},
1010 | "source": [
1011 | "# Listas"
1012 | ]
1013 | },
1014 | {
1015 | "cell_type": "code",
1016 | "execution_count": 42,
1017 | "metadata": {},
1018 | "outputs": [],
1019 | "source": [
1020 | "palavra = \"melissa\""
1021 | ]
1022 | },
1023 | {
1024 | "cell_type": "code",
1025 | "execution_count": 43,
1026 | "metadata": {},
1027 | "outputs": [],
1028 | "source": [
1029 | "lista_palavra = [\"melissa\"]"
1030 | ]
1031 | },
1032 | {
1033 | "cell_type": "markdown",
1034 | "metadata": {},
1035 | "source": [
1036 | "Observe que palavra é uma string, e por isso os métodos que podem ser aplicados a esta variável são os métodos associados a um objeto do tipo string, enquanto que lista_palavra é uma lista, com métodos associados a um objeto do tipo lista:"
1037 | ]
1038 | },
1039 | {
1040 | "cell_type": "code",
1041 | "execution_count": 44,
1042 | "metadata": {},
1043 | "outputs": [
1044 | {
1045 | "data": {
1046 | "text/plain": [
1047 | "['__add__',\n",
1048 | " '__class__',\n",
1049 | " '__contains__',\n",
1050 | " '__delattr__',\n",
1051 | " '__delitem__',\n",
1052 | " '__dir__',\n",
1053 | " '__doc__',\n",
1054 | " '__eq__',\n",
1055 | " '__format__',\n",
1056 | " '__ge__',\n",
1057 | " '__getattribute__',\n",
1058 | " '__getitem__',\n",
1059 | " '__gt__',\n",
1060 | " '__hash__',\n",
1061 | " '__iadd__',\n",
1062 | " '__imul__',\n",
1063 | " '__init__',\n",
1064 | " '__init_subclass__',\n",
1065 | " '__iter__',\n",
1066 | " '__le__',\n",
1067 | " '__len__',\n",
1068 | " '__lt__',\n",
1069 | " '__mul__',\n",
1070 | " '__ne__',\n",
1071 | " '__new__',\n",
1072 | " '__reduce__',\n",
1073 | " '__reduce_ex__',\n",
1074 | " '__repr__',\n",
1075 | " '__reversed__',\n",
1076 | " '__rmul__',\n",
1077 | " '__setattr__',\n",
1078 | " '__setitem__',\n",
1079 | " '__sizeof__',\n",
1080 | " '__str__',\n",
1081 | " '__subclasshook__',\n",
1082 | " 'append',\n",
1083 | " 'clear',\n",
1084 | " 'copy',\n",
1085 | " 'count',\n",
1086 | " 'extend',\n",
1087 | " 'index',\n",
1088 | " 'insert',\n",
1089 | " 'pop',\n",
1090 | " 'remove',\n",
1091 | " 'reverse',\n",
1092 | " 'sort']"
1093 | ]
1094 | },
1095 | "execution_count": 44,
1096 | "metadata": {},
1097 | "output_type": "execute_result"
1098 | }
1099 | ],
1100 | "source": [
1101 | "dir(lista_palavra)"
1102 | ]
1103 | },
1104 | {
1105 | "cell_type": "markdown",
1106 | "metadata": {},
1107 | "source": [
1108 | "Também podemos saber quantos itens tem uma lista:"
1109 | ]
1110 | },
1111 | {
1112 | "cell_type": "code",
1113 | "execution_count": 45,
1114 | "metadata": {},
1115 | "outputs": [
1116 | {
1117 | "data": {
1118 | "text/plain": [
1119 | "1"
1120 | ]
1121 | },
1122 | "execution_count": 45,
1123 | "metadata": {},
1124 | "output_type": "execute_result"
1125 | }
1126 | ],
1127 | "source": [
1128 | "len(lista_palavra)"
1129 | ]
1130 | },
1131 | {
1132 | "cell_type": "code",
1133 | "execution_count": 46,
1134 | "metadata": {},
1135 | "outputs": [],
1136 | "source": [
1137 | "letras = list(palavra)"
1138 | ]
1139 | },
1140 | {
1141 | "cell_type": "code",
1142 | "execution_count": 47,
1143 | "metadata": {},
1144 | "outputs": [
1145 | {
1146 | "name": "stdout",
1147 | "output_type": "stream",
1148 | "text": [
1149 | "['m', 'e', 'l', 'i', 's', 's', 'a']\n"
1150 | ]
1151 | }
1152 | ],
1153 | "source": [
1154 | "print(letras)"
1155 | ]
1156 | },
1157 | {
1158 | "cell_type": "markdown",
1159 | "metadata": {},
1160 | "source": [
1161 | "O acesso a cada elemento de uma lista é feito da mesma maneira como acessamos os caracteres de uma string (lembrando que o índice do primeiro elemento de uma lista, no Python, é 0)"
1162 | ]
1163 | },
1164 | {
1165 | "cell_type": "code",
1166 | "execution_count": 48,
1167 | "metadata": {},
1168 | "outputs": [
1169 | {
1170 | "data": {
1171 | "text/plain": [
1172 | "'m'"
1173 | ]
1174 | },
1175 | "execution_count": 48,
1176 | "metadata": {},
1177 | "output_type": "execute_result"
1178 | }
1179 | ],
1180 | "source": [
1181 | "letras[0]"
1182 | ]
1183 | },
1184 | {
1185 | "cell_type": "markdown",
1186 | "metadata": {},
1187 | "source": [
1188 | "Alguns métodos especiais que são bastante interessantes:"
1189 | ]
1190 | },
1191 | {
1192 | "cell_type": "markdown",
1193 | "metadata": {},
1194 | "source": [
1195 | "O método append acrescenta ao final da lista algum item (neste caso, uma string)"
1196 | ]
1197 | },
1198 | {
1199 | "cell_type": "code",
1200 | "execution_count": 49,
1201 | "metadata": {},
1202 | "outputs": [],
1203 | "source": [
1204 | "pedacos.append(\"!\")"
1205 | ]
1206 | },
1207 | {
1208 | "cell_type": "code",
1209 | "execution_count": 50,
1210 | "metadata": {},
1211 | "outputs": [
1212 | {
1213 | "data": {
1214 | "text/plain": [
1215 | "['O', 'dia', 'está', 'lindo', '!']"
1216 | ]
1217 | },
1218 | "execution_count": 50,
1219 | "metadata": {},
1220 | "output_type": "execute_result"
1221 | }
1222 | ],
1223 | "source": [
1224 | "pedacos"
1225 | ]
1226 | },
1227 | {
1228 | "cell_type": "code",
1229 | "execution_count": 51,
1230 | "metadata": {},
1231 | "outputs": [],
1232 | "source": [
1233 | "pedacos.append(\"!\")"
1234 | ]
1235 | },
1236 | {
1237 | "cell_type": "code",
1238 | "execution_count": 52,
1239 | "metadata": {},
1240 | "outputs": [
1241 | {
1242 | "data": {
1243 | "text/plain": [
1244 | "['O', 'dia', 'está', 'lindo', '!', '!']"
1245 | ]
1246 | },
1247 | "execution_count": 52,
1248 | "metadata": {},
1249 | "output_type": "execute_result"
1250 | }
1251 | ],
1252 | "source": [
1253 | "pedacos"
1254 | ]
1255 | },
1256 | {
1257 | "cell_type": "markdown",
1258 | "metadata": {},
1259 | "source": [
1260 | "O método insert acrescenta um item à lista, na posição indicada:"
1261 | ]
1262 | },
1263 | {
1264 | "cell_type": "code",
1265 | "execution_count": 53,
1266 | "metadata": {},
1267 | "outputs": [],
1268 | "source": [
1269 | "pedacos.insert(3,\"mais\")"
1270 | ]
1271 | },
1272 | {
1273 | "cell_type": "code",
1274 | "execution_count": 54,
1275 | "metadata": {},
1276 | "outputs": [
1277 | {
1278 | "data": {
1279 | "text/plain": [
1280 | "['O', 'dia', 'está', 'mais', 'lindo', '!', '!']"
1281 | ]
1282 | },
1283 | "execution_count": 54,
1284 | "metadata": {},
1285 | "output_type": "execute_result"
1286 | }
1287 | ],
1288 | "source": [
1289 | "pedacos"
1290 | ]
1291 | },
1292 | {
1293 | "cell_type": "markdown",
1294 | "metadata": {},
1295 | "source": [
1296 | "Em Python, o **operador** del pode ser usado para excluir um item de uma lista, dado seu índice:"
1297 | ]
1298 | },
1299 | {
1300 | "cell_type": "code",
1301 | "execution_count": 55,
1302 | "metadata": {},
1303 | "outputs": [],
1304 | "source": [
1305 | "del pedacos[3]"
1306 | ]
1307 | },
1308 | {
1309 | "cell_type": "code",
1310 | "execution_count": 56,
1311 | "metadata": {},
1312 | "outputs": [
1313 | {
1314 | "data": {
1315 | "text/plain": [
1316 | "['O', 'dia', 'está', 'lindo', '!', '!']"
1317 | ]
1318 | },
1319 | "execution_count": 56,
1320 | "metadata": {},
1321 | "output_type": "execute_result"
1322 | }
1323 | ],
1324 | "source": [
1325 | "pedacos"
1326 | ]
1327 | },
1328 | {
1329 | "cell_type": "markdown",
1330 | "metadata": {},
1331 | "source": [
1332 | "No entanto, é mais usual excluirmos um item da lista usando o método pop (que exclui um item selecionado pelo seu índice, assim como o operador del) ou o método remove (que remove um item da lista selecionado pelo seu *valor*):"
1333 | ]
1334 | },
1335 | {
1336 | "cell_type": "code",
1337 | "execution_count": 57,
1338 | "metadata": {},
1339 | "outputs": [],
1340 | "source": [
1341 | "pedacos.remove(\"está\")"
1342 | ]
1343 | },
1344 | {
1345 | "cell_type": "code",
1346 | "execution_count": 58,
1347 | "metadata": {},
1348 | "outputs": [
1349 | {
1350 | "data": {
1351 | "text/plain": [
1352 | "['O', 'dia', 'lindo', '!', '!']"
1353 | ]
1354 | },
1355 | "execution_count": 58,
1356 | "metadata": {},
1357 | "output_type": "execute_result"
1358 | }
1359 | ],
1360 | "source": [
1361 | "pedacos"
1362 | ]
1363 | },
1364 | {
1365 | "cell_type": "markdown",
1366 | "metadata": {},
1367 | "source": [
1368 | "O método pop é interessante pois retorna, ao final de sua execução, o valor do item que foi removido:"
1369 | ]
1370 | },
1371 | {
1372 | "cell_type": "code",
1373 | "execution_count": 59,
1374 | "metadata": {},
1375 | "outputs": [
1376 | {
1377 | "data": {
1378 | "text/plain": [
1379 | "'!'"
1380 | ]
1381 | },
1382 | "execution_count": 59,
1383 | "metadata": {},
1384 | "output_type": "execute_result"
1385 | }
1386 | ],
1387 | "source": [
1388 | "pedacos.pop(3)"
1389 | ]
1390 | },
1391 | {
1392 | "cell_type": "markdown",
1393 | "metadata": {},
1394 | "source": [
1395 | "Podemos também descobrir o índice de um item da lista, dado seu valor:"
1396 | ]
1397 | },
1398 | {
1399 | "cell_type": "code",
1400 | "execution_count": 60,
1401 | "metadata": {},
1402 | "outputs": [
1403 | {
1404 | "data": {
1405 | "text/plain": [
1406 | "1"
1407 | ]
1408 | },
1409 | "execution_count": 60,
1410 | "metadata": {},
1411 | "output_type": "execute_result"
1412 | }
1413 | ],
1414 | "source": [
1415 | "pedacos.index(\"dia\")"
1416 | ]
1417 | },
1418 | {
1419 | "cell_type": "markdown",
1420 | "metadata": {},
1421 | "source": [
1422 | "Para descobrirmos se determinado valor está em uma lista, usamos a seguinte sintaxe:"
1423 | ]
1424 | },
1425 | {
1426 | "cell_type": "code",
1427 | "execution_count": 61,
1428 | "metadata": {},
1429 | "outputs": [
1430 | {
1431 | "data": {
1432 | "text/plain": [
1433 | "True"
1434 | ]
1435 | },
1436 | "execution_count": 61,
1437 | "metadata": {},
1438 | "output_type": "execute_result"
1439 | }
1440 | ],
1441 | "source": [
1442 | "\"!\" in pedacos"
1443 | ]
1444 | },
1445 | {
1446 | "cell_type": "markdown",
1447 | "metadata": {},
1448 | "source": [
1449 | "Observe que na lista pedacos, cada entrada também pode ser vista como uma lista!"
1450 | ]
1451 | },
1452 | {
1453 | "cell_type": "code",
1454 | "execution_count": 62,
1455 | "metadata": {},
1456 | "outputs": [
1457 | {
1458 | "data": {
1459 | "text/plain": [
1460 | "'dia'"
1461 | ]
1462 | },
1463 | "execution_count": 62,
1464 | "metadata": {},
1465 | "output_type": "execute_result"
1466 | }
1467 | ],
1468 | "source": [
1469 | "pedacos[1]"
1470 | ]
1471 | },
1472 | {
1473 | "cell_type": "code",
1474 | "execution_count": 63,
1475 | "metadata": {},
1476 | "outputs": [
1477 | {
1478 | "data": {
1479 | "text/plain": [
1480 | "'d'"
1481 | ]
1482 | },
1483 | "execution_count": 63,
1484 | "metadata": {},
1485 | "output_type": "execute_result"
1486 | }
1487 | ],
1488 | "source": [
1489 | "pedacos[1][0]"
1490 | ]
1491 | },
1492 | {
1493 | "cell_type": "code",
1494 | "execution_count": 64,
1495 | "metadata": {},
1496 | "outputs": [
1497 | {
1498 | "data": {
1499 | "text/plain": [
1500 | "'O'"
1501 | ]
1502 | },
1503 | "execution_count": 64,
1504 | "metadata": {},
1505 | "output_type": "execute_result"
1506 | }
1507 | ],
1508 | "source": [
1509 | "pedacos[0]"
1510 | ]
1511 | },
1512 | {
1513 | "cell_type": "markdown",
1514 | "metadata": {},
1515 | "source": [
1516 | "(Fim da Aula 1, ministrada em 13/09/2016)"
1517 | ]
1518 | },
1519 | {
1520 | "cell_type": "code",
1521 | "execution_count": null,
1522 | "metadata": {},
1523 | "outputs": [],
1524 | "source": []
1525 | }
1526 | ],
1527 | "metadata": {
1528 | "kernelspec": {
1529 | "display_name": "Python 3",
1530 | "language": "python",
1531 | "name": "python3"
1532 | },
1533 | "language_info": {
1534 | "codemirror_mode": {
1535 | "name": "ipython",
1536 | "version": 3
1537 | },
1538 | "file_extension": ".py",
1539 | "mimetype": "text/x-python",
1540 | "name": "python",
1541 | "nbconvert_exporter": "python",
1542 | "pygments_lexer": "ipython3",
1543 | "version": "3.6.5"
1544 | }
1545 | },
1546 | "nbformat": 4,
1547 | "nbformat_minor": 1
1548 | }
1549 |
--------------------------------------------------------------------------------
/Notebooks/Aula_2.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# List Comprehensions"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": 1,
13 | "metadata": {
14 | "collapsed": false
15 | },
16 | "outputs": [],
17 | "source": [
18 | "minhalista = \"Como fazer uma list comprehension\".split()"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {},
24 | "source": [
25 | "Observe que na linha acima aplicamos o método split diretamente a uma string, sem precisarmos nomear uma variável com o conteúdo da string!"
26 | ]
27 | },
28 | {
29 | "cell_type": "code",
30 | "execution_count": 2,
31 | "metadata": {
32 | "collapsed": false
33 | },
34 | "outputs": [
35 | {
36 | "data": {
37 | "text/plain": [
38 | "['Como', 'fazer', 'uma', 'list', 'comprehension']"
39 | ]
40 | },
41 | "execution_count": 2,
42 | "metadata": {},
43 | "output_type": "execute_result"
44 | }
45 | ],
46 | "source": [
47 | "minhalista"
48 | ]
49 | },
50 | {
51 | "cell_type": "markdown",
52 | "metadata": {},
53 | "source": [
54 | "Como transformar todas as primeiras letras de cada item da lista em maiúsculas?"
55 | ]
56 | },
57 | {
58 | "cell_type": "code",
59 | "execution_count": 3,
60 | "metadata": {
61 | "collapsed": false
62 | },
63 | "outputs": [],
64 | "source": [
65 | "minhalista = [x.capitalize() for x in minhalista]"
66 | ]
67 | },
68 | {
69 | "cell_type": "code",
70 | "execution_count": 4,
71 | "metadata": {
72 | "collapsed": false
73 | },
74 | "outputs": [
75 | {
76 | "data": {
77 | "text/plain": [
78 | "['Como', 'Fazer', 'Uma', 'List', 'Comprehension']"
79 | ]
80 | },
81 | "execution_count": 4,
82 | "metadata": {},
83 | "output_type": "execute_result"
84 | }
85 | ],
86 | "source": [
87 | "minhalista"
88 | ]
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "metadata": {},
93 | "source": [
94 | "Observe que x é uma variável local à list comprehension; ela serve apenas para que possamos fazer referência a cada item da lista sendo percorrida na nova expressão que queremos gerar. Fora da list comprehension, o Python não sabe quem é esse x:"
95 | ]
96 | },
97 | {
98 | "cell_type": "code",
99 | "execution_count": 6,
100 | "metadata": {
101 | "collapsed": false
102 | },
103 | "outputs": [
104 | {
105 | "ename": "NameError",
106 | "evalue": "name 'x' is not defined",
107 | "output_type": "error",
108 | "traceback": [
109 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
110 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
111 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
112 | "\u001b[0;31mNameError\u001b[0m: name 'x' is not defined"
113 | ]
114 | }
115 | ],
116 | "source": [
117 | "x"
118 | ]
119 | },
120 | {
121 | "cell_type": "markdown",
122 | "metadata": {},
123 | "source": [
124 | "### Exemplo: língua do P"
125 | ]
126 | },
127 | {
128 | "cell_type": "code",
129 | "execution_count": 7,
130 | "metadata": {
131 | "collapsed": true
132 | },
133 | "outputs": [],
134 | "source": [
135 | "linguadope = [\"Pe\"+palavra for palavra in minhalista]"
136 | ]
137 | },
138 | {
139 | "cell_type": "code",
140 | "execution_count": 8,
141 | "metadata": {
142 | "collapsed": false
143 | },
144 | "outputs": [
145 | {
146 | "data": {
147 | "text/plain": [
148 | "['PeComo', 'PeFazer', 'PeUma', 'PeList', 'PeComprehension']"
149 | ]
150 | },
151 | "execution_count": 8,
152 | "metadata": {},
153 | "output_type": "execute_result"
154 | }
155 | ],
156 | "source": [
157 | "linguadope"
158 | ]
159 | },
160 | {
161 | "cell_type": "markdown",
162 | "metadata": {},
163 | "source": [
164 | "Para transformarmos essa lista em uma string, podemos usar o método join:"
165 | ]
166 | },
167 | {
168 | "cell_type": "code",
169 | "execution_count": 9,
170 | "metadata": {
171 | "collapsed": false
172 | },
173 | "outputs": [
174 | {
175 | "data": {
176 | "text/plain": [
177 | "'PeComo PeFazer PeUma PeList PeComprehension'"
178 | ]
179 | },
180 | "execution_count": 9,
181 | "metadata": {},
182 | "output_type": "execute_result"
183 | }
184 | ],
185 | "source": [
186 | "\" \".join(linguadope)"
187 | ]
188 | },
189 | {
190 | "cell_type": "markdown",
191 | "metadata": {},
192 | "source": [
193 | "Uma explicação para a sintaxe do join: http://www.faqs.org/docs/diveintopython/odbchelper_join.html (basicamente, o método join precisa de duas strings: um resultado e uma \"cola\". Mas o argumento a ser unido pode ser outra coisa além de uma string (notadamente, iterables)"
194 | ]
195 | },
196 | {
197 | "cell_type": "markdown",
198 | "metadata": {},
199 | "source": [
200 | "### Exemplo: lista de números"
201 | ]
202 | },
203 | {
204 | "cell_type": "markdown",
205 | "metadata": {},
206 | "source": [
207 | "É comum querermos gerar uma lista de números delimitada por dois valores. A função range(a,b) gera uma lista que vai do número a até b-1; porém, o resultado da função range não é a lista diretamente, mas uma estrutura de dados que precisamos transformar em uma lista."
208 | ]
209 | },
210 | {
211 | "cell_type": "code",
212 | "execution_count": 15,
213 | "metadata": {
214 | "collapsed": false
215 | },
216 | "outputs": [
217 | {
218 | "name": "stdout",
219 | "output_type": "stream",
220 | "text": [
221 | "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n"
222 | ]
223 | }
224 | ],
225 | "source": [
226 | "numeros = [n for n in range(0,10)]\n",
227 | "print(numeros)"
228 | ]
229 | },
230 | {
231 | "cell_type": "markdown",
232 | "metadata": {},
233 | "source": [
234 | "Podemos, usando list comprehensions, gerar outras listas. Por exemplo, gerar uma lista de números ímpares:"
235 | ]
236 | },
237 | {
238 | "cell_type": "code",
239 | "execution_count": 16,
240 | "metadata": {
241 | "collapsed": true
242 | },
243 | "outputs": [],
244 | "source": [
245 | "numeros = [2*n+1 for n in range(0,11)]"
246 | ]
247 | },
248 | {
249 | "cell_type": "code",
250 | "execution_count": 17,
251 | "metadata": {
252 | "collapsed": false
253 | },
254 | "outputs": [
255 | {
256 | "data": {
257 | "text/plain": [
258 | "[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]"
259 | ]
260 | },
261 | "execution_count": 17,
262 | "metadata": {},
263 | "output_type": "execute_result"
264 | }
265 | ],
266 | "source": [
267 | "numeros"
268 | ]
269 | },
270 | {
271 | "cell_type": "markdown",
272 | "metadata": {},
273 | "source": [
274 | "## Slicing\n",
275 | "\n",
276 | "Podemos selecionar pedaços de uma lista (ou string) facilmente usando o conceito de slicing."
277 | ]
278 | },
279 | {
280 | "cell_type": "code",
281 | "execution_count": 18,
282 | "metadata": {
283 | "collapsed": false
284 | },
285 | "outputs": [
286 | {
287 | "data": {
288 | "text/plain": [
289 | "1"
290 | ]
291 | },
292 | "execution_count": 18,
293 | "metadata": {},
294 | "output_type": "execute_result"
295 | }
296 | ],
297 | "source": [
298 | "numeros[0]"
299 | ]
300 | },
301 | {
302 | "cell_type": "code",
303 | "execution_count": 19,
304 | "metadata": {
305 | "collapsed": false
306 | },
307 | "outputs": [
308 | {
309 | "data": {
310 | "text/plain": [
311 | "21"
312 | ]
313 | },
314 | "execution_count": 19,
315 | "metadata": {},
316 | "output_type": "execute_result"
317 | }
318 | ],
319 | "source": [
320 | "numeros[-1]"
321 | ]
322 | },
323 | {
324 | "cell_type": "code",
325 | "execution_count": 20,
326 | "metadata": {
327 | "collapsed": false
328 | },
329 | "outputs": [
330 | {
331 | "data": {
332 | "text/plain": [
333 | "[7]"
334 | ]
335 | },
336 | "execution_count": 20,
337 | "metadata": {},
338 | "output_type": "execute_result"
339 | }
340 | ],
341 | "source": [
342 | "numeros[3:4]"
343 | ]
344 | },
345 | {
346 | "cell_type": "markdown",
347 | "metadata": {},
348 | "source": [
349 | "Observe que, com um parâmetro a mais, podemos selecionar os elementos da lista de 2 em 2:"
350 | ]
351 | },
352 | {
353 | "cell_type": "code",
354 | "execution_count": 21,
355 | "metadata": {
356 | "collapsed": false
357 | },
358 | "outputs": [
359 | {
360 | "data": {
361 | "text/plain": [
362 | "[1, 5, 9, 13, 17, 21]"
363 | ]
364 | },
365 | "execution_count": 21,
366 | "metadata": {},
367 | "output_type": "execute_result"
368 | }
369 | ],
370 | "source": [
371 | "numeros[0:11:2]"
372 | ]
373 | },
374 | {
375 | "cell_type": "markdown",
376 | "metadata": {},
377 | "source": [
378 | "Também podemos calcular o tamanho de uma lista de números:"
379 | ]
380 | },
381 | {
382 | "cell_type": "code",
383 | "execution_count": 22,
384 | "metadata": {
385 | "collapsed": false
386 | },
387 | "outputs": [
388 | {
389 | "data": {
390 | "text/plain": [
391 | "11"
392 | ]
393 | },
394 | "execution_count": 22,
395 | "metadata": {},
396 | "output_type": "execute_result"
397 | }
398 | ],
399 | "source": [
400 | "len(numeros)"
401 | ]
402 | },
403 | {
404 | "cell_type": "code",
405 | "execution_count": 23,
406 | "metadata": {
407 | "collapsed": false
408 | },
409 | "outputs": [
410 | {
411 | "data": {
412 | "text/plain": [
413 | "17"
414 | ]
415 | },
416 | "execution_count": 23,
417 | "metadata": {},
418 | "output_type": "execute_result"
419 | }
420 | ],
421 | "source": [
422 | "numeros[-3]"
423 | ]
424 | },
425 | {
426 | "cell_type": "markdown",
427 | "metadata": {},
428 | "source": [
429 | "Podemos gerar uma nova lista contendo pedaços da lista original:"
430 | ]
431 | },
432 | {
433 | "cell_type": "code",
434 | "execution_count": 24,
435 | "metadata": {
436 | "collapsed": false
437 | },
438 | "outputs": [
439 | {
440 | "name": "stdout",
441 | "output_type": "stream",
442 | "text": [
443 | "[[9, 11], [7, 9, 11, 13, 15]]\n"
444 | ]
445 | }
446 | ],
447 | "source": [
448 | "numeros = [numeros[4:6],numeros[3:8]]\n",
449 | "print(numeros)"
450 | ]
451 | },
452 | {
453 | "cell_type": "markdown",
454 | "metadata": {},
455 | "source": [
456 | "Infelizmente, o resultado acima é uma lista de listas: cada elemento da lista é, por sua vez, uma outra lista:"
457 | ]
458 | },
459 | {
460 | "cell_type": "code",
461 | "execution_count": 25,
462 | "metadata": {
463 | "collapsed": false
464 | },
465 | "outputs": [
466 | {
467 | "data": {
468 | "text/plain": [
469 | "[9, 11]"
470 | ]
471 | },
472 | "execution_count": 25,
473 | "metadata": {},
474 | "output_type": "execute_result"
475 | }
476 | ],
477 | "source": [
478 | "numeros[0]"
479 | ]
480 | },
481 | {
482 | "cell_type": "markdown",
483 | "metadata": {},
484 | "source": [
485 | "Assim, para acessarmos um elemento individual da lista numeros, precisamos utilizar um índice para a lista externa, e outro índice para a lista interna:"
486 | ]
487 | },
488 | {
489 | "cell_type": "code",
490 | "execution_count": 26,
491 | "metadata": {
492 | "collapsed": false
493 | },
494 | "outputs": [
495 | {
496 | "data": {
497 | "text/plain": [
498 | "11"
499 | ]
500 | },
501 | "execution_count": 26,
502 | "metadata": {},
503 | "output_type": "execute_result"
504 | }
505 | ],
506 | "source": [
507 | "numeros[0][1]"
508 | ]
509 | },
510 | {
511 | "cell_type": "markdown",
512 | "metadata": {},
513 | "source": [
514 | "Para transformarmos aquela lista de listas em uma lista simples, podemos usar o comando abaixo (admito que é um pouco mágico, mas funciona! ;))"
515 | ]
516 | },
517 | {
518 | "cell_type": "code",
519 | "execution_count": 27,
520 | "metadata": {
521 | "collapsed": false
522 | },
523 | "outputs": [
524 | {
525 | "data": {
526 | "text/plain": [
527 | "[9, 11, 7, 9, 11, 13, 15]"
528 | ]
529 | },
530 | "execution_count": 27,
531 | "metadata": {},
532 | "output_type": "execute_result"
533 | }
534 | ],
535 | "source": [
536 | "lista = [item for sublist in numeros for item in sublist]\n",
537 | "lista"
538 | ]
539 | },
540 | {
541 | "cell_type": "markdown",
542 | "metadata": {},
543 | "source": [
544 | "Observe que o slicing também vale para sequências de caracteres (strings):"
545 | ]
546 | },
547 | {
548 | "cell_type": "code",
549 | "execution_count": 28,
550 | "metadata": {
551 | "collapsed": true
552 | },
553 | "outputs": [],
554 | "source": [
555 | "palavra = \"teste\""
556 | ]
557 | },
558 | {
559 | "cell_type": "code",
560 | "execution_count": 29,
561 | "metadata": {
562 | "collapsed": false
563 | },
564 | "outputs": [
565 | {
566 | "data": {
567 | "text/plain": [
568 | "'este'"
569 | ]
570 | },
571 | "execution_count": 29,
572 | "metadata": {},
573 | "output_type": "execute_result"
574 | }
575 | ],
576 | "source": [
577 | "palavra[1:]"
578 | ]
579 | },
580 | {
581 | "cell_type": "markdown",
582 | "metadata": {},
583 | "source": [
584 | "# Comandos de repetição e condicionais"
585 | ]
586 | },
587 | {
588 | "cell_type": "markdown",
589 | "metadata": {},
590 | "source": [
591 | "## Repetição: for\n",
592 | "\n",
593 | "Às vezes, desejamos repetir um certo número de vezes a mesma operação."
594 | ]
595 | },
596 | {
597 | "cell_type": "markdown",
598 | "metadata": {},
599 | "source": [
600 | "De fato, uma lista comprehension inclui um comando de repetição: executamos alguma ação com cada item de uma lista; se lermos a expressão da lista comprehension, poderíamos dizer: \"retorne n para cada n no conjunto que vai de 0 a 10\":"
601 | ]
602 | },
603 | {
604 | "cell_type": "code",
605 | "execution_count": 32,
606 | "metadata": {
607 | "collapsed": false
608 | },
609 | "outputs": [
610 | {
611 | "name": "stdout",
612 | "output_type": "stream",
613 | "text": [
614 | "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n"
615 | ]
616 | }
617 | ],
618 | "source": [
619 | "numeros = [n for n in range(0,11)]\n",
620 | "print(numeros)"
621 | ]
622 | },
623 | {
624 | "cell_type": "markdown",
625 | "metadata": {},
626 | "source": [
627 | "Fazemos isso explicitamente quando usamos a estrutura for. Observe que, no Python, não precisamos sinalizar o fim de um bloco de código; na verdade, a indentação sinaliza um bloco. Observe a diferença entre as células abaixo:"
628 | ]
629 | },
630 | {
631 | "cell_type": "code",
632 | "execution_count": 35,
633 | "metadata": {
634 | "collapsed": false
635 | },
636 | "outputs": [
637 | {
638 | "name": "stdout",
639 | "output_type": "stream",
640 | "text": [
641 | "Numero 0\n",
642 | "Numero 1\n",
643 | "Numero 2\n",
644 | "Numero 3\n",
645 | "Numero 4\n",
646 | "Numero 5\n",
647 | "Numero 6\n",
648 | "Numero 7\n",
649 | "Numero 8\n",
650 | "Numero 9\n",
651 | "Numero 10\n",
652 | "bla\n"
653 | ]
654 | }
655 | ],
656 | "source": [
657 | "for item in numeros: # Indentação\n",
658 | " print(\"Numero \"+str(item))\n",
659 | "print(\"bla\")"
660 | ]
661 | },
662 | {
663 | "cell_type": "code",
664 | "execution_count": 36,
665 | "metadata": {
666 | "collapsed": false
667 | },
668 | "outputs": [
669 | {
670 | "name": "stdout",
671 | "output_type": "stream",
672 | "text": [
673 | "Numero 0\n",
674 | "bla\n",
675 | "Numero 1\n",
676 | "bla\n",
677 | "Numero 2\n",
678 | "bla\n",
679 | "Numero 3\n",
680 | "bla\n",
681 | "Numero 4\n",
682 | "bla\n",
683 | "Numero 5\n",
684 | "bla\n",
685 | "Numero 6\n",
686 | "bla\n",
687 | "Numero 7\n",
688 | "bla\n",
689 | "Numero 8\n",
690 | "bla\n",
691 | "Numero 9\n",
692 | "bla\n",
693 | "Numero 10\n",
694 | "bla\n"
695 | ]
696 | }
697 | ],
698 | "source": [
699 | "for item in numeros: # Indentação\n",
700 | " print(\"Numero \"+str(item))\n",
701 | " print(\"bla\")"
702 | ]
703 | },
704 | {
705 | "cell_type": "markdown",
706 | "metadata": {},
707 | "source": [
708 | "## Condicionais: if\n",
709 | "\n",
710 | "Agora, se desejamos realizar uma operação caso alguma condição seja satisfeita, e outra caso contrário, usamos a estrutura if: \"se determinada condição lógica for verdadeira, execute o primeiro bloco de comandos; caso contrário (else), execute o segundo\"."
711 | ]
712 | },
713 | {
714 | "cell_type": "code",
715 | "execution_count": 37,
716 | "metadata": {
717 | "collapsed": false
718 | },
719 | "outputs": [
720 | {
721 | "name": "stdout",
722 | "output_type": "stream",
723 | "text": [
724 | "Falso\n"
725 | ]
726 | }
727 | ],
728 | "source": [
729 | "palavra = \"bla\"\n",
730 | "if palavra == \"bla!\":\n",
731 | " print(\"Verdadeiro\")\n",
732 | "else:\n",
733 | " print(\"Falso\")"
734 | ]
735 | },
736 | {
737 | "cell_type": "markdown",
738 | "metadata": {},
739 | "source": [
740 | "Usamos == na expressão acima, pois no Python é necessário diferenciar entre um comando de atribuição (atribuir um valor a uma variável) e um comando de comparação (testar se duas variáveis são iguais). O caso do if é o segundo."
741 | ]
742 | },
743 | {
744 | "cell_type": "markdown",
745 | "metadata": {},
746 | "source": [
747 | "Podemos também acrescentar outras condições lógicas ao nosso teste."
748 | ]
749 | },
750 | {
751 | "cell_type": "code",
752 | "execution_count": 38,
753 | "metadata": {
754 | "collapsed": false
755 | },
756 | "outputs": [
757 | {
758 | "name": "stdout",
759 | "output_type": "stream",
760 | "text": [
761 | "Uhu\n"
762 | ]
763 | }
764 | ],
765 | "source": [
766 | "if palavra == \"bla!\" and 3 > 2:\n",
767 | " print(\"Aha\")\n",
768 | "else:\n",
769 | " print(\"Uhu\")"
770 | ]
771 | },
772 | {
773 | "cell_type": "code",
774 | "execution_count": 47,
775 | "metadata": {
776 | "collapsed": false
777 | },
778 | "outputs": [
779 | {
780 | "name": "stdout",
781 | "output_type": "stream",
782 | "text": [
783 | "Aha\n"
784 | ]
785 | }
786 | ],
787 | "source": [
788 | "if palavra == \"bla!\" or 3>2:\n",
789 | " print(\"Aha\")\n",
790 | "else:\n",
791 | " print(\"Uhu\")"
792 | ]
793 | },
794 | {
795 | "cell_type": "markdown",
796 | "metadata": {},
797 | "source": [
798 | "# Scripting"
799 | ]
800 | },
801 | {
802 | "cell_type": "markdown",
803 | "metadata": {},
804 | "source": [
805 | "### Exemplo 1\n",
806 | "\n",
807 | "Percorrer um diretório com diversos arquivos e procurar todos os arquivos que satisfazem algum critério, realizando alguma operação nesses arquivos."
808 | ]
809 | },
810 | {
811 | "cell_type": "markdown",
812 | "metadata": {},
813 | "source": [
814 | "Para acessarmos comandos e operações realizadas no nível do sistema operacional, utilizamos o módulo os."
815 | ]
816 | },
817 | {
818 | "cell_type": "code",
819 | "execution_count": 2,
820 | "metadata": {
821 | "collapsed": true
822 | },
823 | "outputs": [],
824 | "source": [
825 | "import os"
826 | ]
827 | },
828 | {
829 | "cell_type": "markdown",
830 | "metadata": {},
831 | "source": [
832 | "**Atenção: Escolha um diretório no seu computador para executar esse exemplo, com arquivos que possam ser renomeados.**\n",
833 | "\n",
834 | "No meu caso, usarei os arquivos do diretório oceanobiopython/exemplos/exemplo_1"
835 | ]
836 | },
837 | {
838 | "cell_type": "code",
839 | "execution_count": 24,
840 | "metadata": {
841 | "collapsed": false
842 | },
843 | "outputs": [],
844 | "source": [
845 | "diretorio = os.path.join(os.getcwd(), \"..\",\"exemplos/exemplo_1\")"
846 | ]
847 | },
848 | {
849 | "cell_type": "markdown",
850 | "metadata": {},
851 | "source": [
852 | "Em seguida, vamos listar todos os arquivos deste diretório."
853 | ]
854 | },
855 | {
856 | "cell_type": "code",
857 | "execution_count": 10,
858 | "metadata": {
859 | "collapsed": false
860 | },
861 | "outputs": [
862 | {
863 | "data": {
864 | "text/plain": [
865 | "['meme.png', 'qualquercoisa.gif', 'file.txt', 'outro.pdf', 'arquivo.txt']"
866 | ]
867 | },
868 | "execution_count": 10,
869 | "metadata": {},
870 | "output_type": "execute_result"
871 | }
872 | ],
873 | "source": [
874 | "os.listdir(diretorio)"
875 | ]
876 | },
877 | {
878 | "cell_type": "markdown",
879 | "metadata": {},
880 | "source": [
881 | "Para que possamos percorrer a lista que contém os nomes de todos os arquivos deste diretório, vamos salvar esta lista de nomes de arquivo:"
882 | ]
883 | },
884 | {
885 | "cell_type": "code",
886 | "execution_count": 11,
887 | "metadata": {
888 | "collapsed": true
889 | },
890 | "outputs": [],
891 | "source": [
892 | "lista = os.listdir(diretorio)"
893 | ]
894 | },
895 | {
896 | "cell_type": "markdown",
897 | "metadata": {},
898 | "source": [
899 | "Agora, vamos efetuar a seguinte operação: todos os arquivos deste diretório que tiverem a extensão \".txt\" terão um novo nome iniciando com letra maiúscula."
900 | ]
901 | },
902 | {
903 | "cell_type": "code",
904 | "execution_count": 12,
905 | "metadata": {
906 | "collapsed": false
907 | },
908 | "outputs": [],
909 | "source": [
910 | "for arquivo in lista:\n",
911 | " if arquivo[-3:] == \"txt\":\n",
912 | " os.rename(os.path.join(diretorio,arquivo),os.path.join(diretorio,arquivo.capitalize()))"
913 | ]
914 | },
915 | {
916 | "cell_type": "markdown",
917 | "metadata": {},
918 | "source": [
919 | "Verificando que funcionou:"
920 | ]
921 | },
922 | {
923 | "cell_type": "code",
924 | "execution_count": 13,
925 | "metadata": {
926 | "collapsed": false
927 | },
928 | "outputs": [
929 | {
930 | "data": {
931 | "text/plain": [
932 | "['meme.png', 'qualquercoisa.gif', 'File.txt', 'outro.pdf', 'Arquivo.txt']"
933 | ]
934 | },
935 | "execution_count": 13,
936 | "metadata": {},
937 | "output_type": "execute_result"
938 | }
939 | ],
940 | "source": [
941 | "os.listdir(diretorio)"
942 | ]
943 | },
944 | {
945 | "cell_type": "markdown",
946 | "metadata": {},
947 | "source": [
948 | "(é claro que se você estiver em um diretório em que não hajam arquivos com extensão \".txt\", nada irá acontecer!)"
949 | ]
950 | },
951 | {
952 | "cell_type": "markdown",
953 | "metadata": {},
954 | "source": [
955 | "Para desfazermos este exemplo, podemos executar o seguinte script:"
956 | ]
957 | },
958 | {
959 | "cell_type": "code",
960 | "execution_count": 15,
961 | "metadata": {
962 | "collapsed": true
963 | },
964 | "outputs": [],
965 | "source": [
966 | "lista = os.listdir(diretorio)\n",
967 | "for arquivo in lista:\n",
968 | " os.rename(os.path.join(diretorio,arquivo),os.path.join(diretorio,arquivo.lower())) "
969 | ]
970 | },
971 | {
972 | "cell_type": "code",
973 | "execution_count": 16,
974 | "metadata": {
975 | "collapsed": false
976 | },
977 | "outputs": [
978 | {
979 | "data": {
980 | "text/plain": [
981 | "['meme.png', 'qualquercoisa.gif', 'file.txt', 'outro.pdf', 'arquivo.txt']"
982 | ]
983 | },
984 | "execution_count": 16,
985 | "metadata": {},
986 | "output_type": "execute_result"
987 | }
988 | ],
989 | "source": [
990 | "os.listdir(diretorio)"
991 | ]
992 | },
993 | {
994 | "cell_type": "markdown",
995 | "metadata": {},
996 | "source": [
997 | "### Exemplo 2\n",
998 | "\n",
999 | "Organizar os arquivos de um diretório pela data da última modificação."
1000 | ]
1001 | },
1002 | {
1003 | "cell_type": "code",
1004 | "execution_count": 17,
1005 | "metadata": {
1006 | "collapsed": false
1007 | },
1008 | "outputs": [
1009 | {
1010 | "name": "stdout",
1011 | "output_type": "stream",
1012 | "text": [
1013 | "/home/melissa/Dropbox/trabalho/2016.2/oceanobiopython/Notebooks/../exemplos/exemplo_2\n",
1014 | "['file5.txt', 'file2.txt', 'file1.txt', 'teste.txt', 'file4.txt', 'file3.txt']\n"
1015 | ]
1016 | }
1017 | ],
1018 | "source": [
1019 | "import os\n",
1020 | "diretorio = os.path.join(os.getcwd(), \"..\",\"exemplos/exemplo_2\")\n",
1021 | "print(diretorio)\n",
1022 | "print(os.listdir(diretorio))"
1023 | ]
1024 | },
1025 | {
1026 | "cell_type": "markdown",
1027 | "metadata": {},
1028 | "source": [
1029 | "Agora, para descobrirmos quando o arquivo foi modificado pela última vez, precisamos usar uma função que não retorna a data da última modificação no formato em que estamos acostumados. Ela retorna o tempo, em segundos, decorrido desde 1o de janeiro de 1970 (se você estiver no Unix). Para podermos obter o que queremos, usamos então a função ctime do módulo time."
1030 | ]
1031 | },
1032 | {
1033 | "cell_type": "code",
1034 | "execution_count": 18,
1035 | "metadata": {
1036 | "collapsed": false
1037 | },
1038 | "outputs": [
1039 | {
1040 | "name": "stdout",
1041 | "output_type": "stream",
1042 | "text": [
1043 | "1473628286.1679237\n"
1044 | ]
1045 | },
1046 | {
1047 | "data": {
1048 | "text/plain": [
1049 | "'Sun Sep 11 18:11:26 2016'"
1050 | ]
1051 | },
1052 | "execution_count": 18,
1053 | "metadata": {},
1054 | "output_type": "execute_result"
1055 | }
1056 | ],
1057 | "source": [
1058 | "import time\n",
1059 | "print(os.path.getmtime(os.path.join(diretorio,\"file1.txt\")))\n",
1060 | "time.ctime(os.path.getmtime(os.path.join(diretorio,\"file1.txt\")))"
1061 | ]
1062 | },
1063 | {
1064 | "cell_type": "code",
1065 | "execution_count": 19,
1066 | "metadata": {
1067 | "collapsed": false
1068 | },
1069 | "outputs": [
1070 | {
1071 | "name": "stdout",
1072 | "output_type": "stream",
1073 | "text": [
1074 | "Thu Sep 8 22:42:51 2016\n",
1075 | "Wed Sep 7 11:00:22 2016\n",
1076 | "Sun Sep 11 18:11:26 2016\n",
1077 | "Wed Sep 14 22:38:26 2016\n",
1078 | "Mon Aug 29 13:19:03 2016\n",
1079 | "Tue Aug 16 08:24:00 2016\n"
1080 | ]
1081 | }
1082 | ],
1083 | "source": [
1084 | "lista = os.listdir(diretorio)\n",
1085 | "for arquivo in lista:\n",
1086 | " print(time.ctime(os.path.getmtime(os.path.join(diretorio,arquivo))))"
1087 | ]
1088 | },
1089 | {
1090 | "cell_type": "code",
1091 | "execution_count": 20,
1092 | "metadata": {
1093 | "collapsed": false
1094 | },
1095 | "outputs": [],
1096 | "source": [
1097 | "os.mkdir(os.path.join(diretorio,\"arquivos_setembro\"))\n",
1098 | "os.mkdir(os.path.join(diretorio,\"arquivos_agosto\"))"
1099 | ]
1100 | },
1101 | {
1102 | "cell_type": "code",
1103 | "execution_count": 21,
1104 | "metadata": {
1105 | "collapsed": false
1106 | },
1107 | "outputs": [],
1108 | "source": [
1109 | "for arquivo in lista:\n",
1110 | " if arquivo != \"teste.txt\":\n",
1111 | " data_modificacao = time.ctime(os.path.getmtime(os.path.join(diretorio,arquivo)))\n",
1112 | " if data_modificacao[4:7] == \"Sep\":\n",
1113 | " os.rename(os.path.join(diretorio,arquivo), os.path.join(diretorio,\"arquivos_setembro\",arquivo))\n",
1114 | " elif data_modificacao[4:7] == \"Aug\":\n",
1115 | " os.rename(os.path.join(diretorio,arquivo), os.path.join(diretorio,\"arquivos_agosto\",arquivo))"
1116 | ]
1117 | },
1118 | {
1119 | "cell_type": "markdown",
1120 | "metadata": {},
1121 | "source": [
1122 | "Agora, vamos desfazer o exercício para restaurarmos o diretório à estrutura original:"
1123 | ]
1124 | },
1125 | {
1126 | "cell_type": "code",
1127 | "execution_count": 22,
1128 | "metadata": {
1129 | "collapsed": false
1130 | },
1131 | "outputs": [
1132 | {
1133 | "name": "stdout",
1134 | "output_type": "stream",
1135 | "text": [
1136 | "['file5.txt', 'file2.txt', 'file1.txt']\n",
1137 | "['file4.txt', 'file3.txt']\n"
1138 | ]
1139 | }
1140 | ],
1141 | "source": [
1142 | "lista = os.listdir(diretorio)\n",
1143 | "for item in lista:\n",
1144 | " if os.path.isdir(os.path.join(diretorio,item)):\n",
1145 | " locais = os.listdir(os.path.join(diretorio,item))\n",
1146 | " print(locais)\n",
1147 | " for arquivo in locais:\n",
1148 | " os.rename(os.path.join(diretorio,item,arquivo),os.path.join(diretorio,arquivo))\n",
1149 | " os.rmdir(os.path.join(diretorio,item))"
1150 | ]
1151 | },
1152 | {
1153 | "cell_type": "code",
1154 | "execution_count": 23,
1155 | "metadata": {
1156 | "collapsed": false
1157 | },
1158 | "outputs": [
1159 | {
1160 | "name": "stdout",
1161 | "output_type": "stream",
1162 | "text": [
1163 | "['file5.txt', 'file2.txt', 'file1.txt', 'teste.txt', 'file4.txt', 'file3.txt']\n"
1164 | ]
1165 | }
1166 | ],
1167 | "source": [
1168 | "print(os.listdir(diretorio))"
1169 | ]
1170 | },
1171 | {
1172 | "cell_type": "markdown",
1173 | "metadata": {},
1174 | "source": [
1175 | "(Fim da Aula 2, ministrada em 15/09/2016)"
1176 | ]
1177 | }
1178 | ],
1179 | "metadata": {
1180 | "kernelspec": {
1181 | "display_name": "Python 3",
1182 | "language": "python",
1183 | "name": "python3"
1184 | },
1185 | "language_info": {
1186 | "codemirror_mode": {
1187 | "name": "ipython",
1188 | "version": 3
1189 | },
1190 | "file_extension": ".py",
1191 | "mimetype": "text/x-python",
1192 | "name": "python",
1193 | "nbconvert_exporter": "python",
1194 | "pygments_lexer": "ipython3",
1195 | "version": "3.5.2"
1196 | }
1197 | },
1198 | "nbformat": 4,
1199 | "nbformat_minor": 0
1200 | }
1201 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # oceanobiopython
2 |
3 | ### Repositório do curso "Computação Científica com Python, com aplicações à Oceanografia e à Biologia"
4 |
5 | Este curso foi ministrado por mim a pedido do Programa de Pós-Graduação em Oceanografia e do Grupo de Oceanografia Microbiana da Universidade Federal de Santa Catarina (Florianópolis), e foi realizado de 13 de setembro a 6 de outubro de 2016. O curso contou com cerca de 35 participantes. Foram realizadas 8 aulas de 1:30 de duração cada uma. O conteúdo apresentado encontra-se listado abaixo.
6 |
7 | O objetivo deste repositório é compartilhar este material, permitindo a estudantes e pesquisadores organizarem cursos semelhantes, ou mesmo estudarem de maneira independente. O material pode ser utilizado, copiado, modificado e recompartilhado à vontade, desde que seja mantido **livre e gratuito** (e, de preferência, que seja creditado a este repositório).
8 |
9 | Para entrar em contato comigo, escreva para melissawm@gmail.com
10 |
11 | ### Pré-requisitos
12 |
13 | Para executar os exemplos, você precisará de:
14 | - Python 3.5 (de preferência usando a distribuição Anaconda https://www.continuum.io/downloads)
15 | - Um leitor de notebooks (se você instalou o Anaconda, certamente pode usar o jupyter-notebook http://jupyter.org/; existem também alguns leitores online, como o http://mybinder.org/)
16 | - Pandas (http://pandas.pydata.org/)
17 | - Matplotlib (http://matplotlib.org/)
18 | - Numpy (http://www.numpy.org/)
19 |
20 | Para alguns exemplos, em especial da Aula 6, pacotes adicionais são necessários (mas opcionais):
21 | - gsw (https://pypi.python.org/pypi/gsw/3.0.3)
22 | - windrose (https://pypi.python.org/pypi/windrose/)
23 |
24 | Obs. Todo o curso e todos os exemplos foram formulados usando Python 3.5 (Anaconda) e Linux.
25 |
26 | ### Aula 1 (13/09/2016)
27 | - Familiarização com Notebooks e a linguagem Python
28 | - Variáveis e Operações Matemáticas Básicas
29 | - Introdução ao tratamento de strings e listas
30 |
31 | [Notebook Aula 1.ipynb](Notebooks/Aula 1.ipynb)
32 |
33 | ### Aula 2 (15/09/2016)
34 | - List Comprehensions
35 | - Slicing
36 | - Comandos de repetição e condicionais
37 |
38 | [Notebook Aula 2.ipynb](Notebooks/Aula 2.ipynb)
39 | (Exemplos utilizando os diretórios exemplos/exemplo_1 e exemplos/exemplo_2)
40 |
41 | ### Aula 3 (20/09/2016)
42 | - Leitura e escrita em Arquivos
43 | - Exercícios práticos sugeridos pelos alunos
44 |
45 | [Notebook Aula 3.ipynb](Notebooks/Aula 3.ipynb)
46 | (Exemplos utilizando o diretório exemplos/exemplo_2)
47 |
48 | ### Aula 4 (22/09/2016)
49 | - Tratamento de arquivos .csv, .xls
50 | - Introdução à biblioteca Pandas
51 | - Elaboração de gráficos simples
52 |
53 | [Notebook Aula 4.ipynb](Notebooks/Aula 4.ipynb) ;
54 | [Notebook CTD_Data.ipynb](exemplos/exemplo_5/CTD_Data.ipynb)
55 | (Exemplos utilizando os diretórios exemplos/exemplo_3, exemplos/exemplo_4 e exemplos/exemplo_5)
56 |
57 | ### Aula 5 (27/09/2016)
58 | - Gráficos com matplotlib
59 |
60 | [Notebook Aula 5.ipynb](Notebooks/Aula 5.ipynb)
61 |
62 | ### Aula 6 (29/09/2016)
63 | - Gráficos avançados
64 | - Algumas aplicações
65 | - Gráficos em 3D
66 |
67 | [Notebook Aula 6.ipynb](Notebooks/Aula 6.ipynb) ;
68 | [Notebook Diagrama TS.ipynb](exemplos/exemplo_6/Diagrama TS.ipynb)
69 |
70 | ### Aula 7 (04/10/2016)
71 | - Exercícios
72 | - Dúvidas e aplicações específicas dos participantes
73 |
74 | ### Aula 8 (06/10/2016)
75 | - Exercícios
76 | - Dúvidas e aplicações específicas dos participantes
77 |
--------------------------------------------------------------------------------
/exemplos/exemplo_1/arquivo.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/exemplos/exemplo_1/arquivo.txt
--------------------------------------------------------------------------------
/exemplos/exemplo_1/file.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/exemplos/exemplo_1/file.txt
--------------------------------------------------------------------------------
/exemplos/exemplo_1/meme.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/exemplos/exemplo_1/meme.png
--------------------------------------------------------------------------------
/exemplos/exemplo_1/outro.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/exemplos/exemplo_1/outro.pdf
--------------------------------------------------------------------------------
/exemplos/exemplo_1/qualquercoisa.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/exemplos/exemplo_1/qualquercoisa.gif
--------------------------------------------------------------------------------
/exemplos/exemplo_2/file1.txt:
--------------------------------------------------------------------------------
1 | dom set 11 18:10:54 BRT 2016
2 | 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
132 |
--------------------------------------------------------------------------------
/exemplos/exemplo_2/file2.txt:
--------------------------------------------------------------------------------
1 | qua set 07 11:00:22 BRT 2016
2 | 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
132 |
--------------------------------------------------------------------------------
/exemplos/exemplo_2/file3.txt:
--------------------------------------------------------------------------------
1 | ter ago 16 08:24:00 BRT 2016
2 | Mg/JQfKxll3FoSq+SqPuzCM1KaFii2fL3P0Eunhx1QVux/Te37iP03dKcv9DnE08HveWG+ftKg/Y
3 | BQWbLqeyHHu6nCUzc996ea6o3Y3BUF0KLbejDhJQa8M2rFc+LKJP8OWrYm15TgKlEbKOgDt8qQTv
4 | lMssYpvBIjALKjLEqPUgTfNGsLzkJlEAfDlTOXX3By6fCcBkVcw89cB4YSMDxn4Z9wnz/4yt0n2+
5 | 6eeVwoIaQncU7jAgubMsbC/NUGSTd36hX1FD9Z1xd9X7ltszWSSDJlenBw1k7HAWnnc4dO2djfPm
6 | UunxVVfwJB+2ebTDzrZcfIhWBRRdy5LZGF7Fcr7P1xeFOkr2sgxbkXiTBwzkhU0FOtPtJQvBR8SM
7 | 3EmCtJwm0FXY6RAaBnlLks5oHL4+FpaqMT1tbEQbSb3ZG1lI6F/FXvPBTBIy9b8UAGTl96EZHElI
8 | 8+Ig2HuK7NOce/c7/C5hcZJxuHXl7d7h2ZmhDFdg7l59R0q8iZmOYuwB5gBsFu7U8jYv2DrPMniq
9 | hfjkh8+ht+WVgm9GesuhPAvTa2PYB7hdHbnCV7JN64COIzpyV6FDPTy10yxfZJLL9u8UVqafSO/x
10 | 55Z7GHx9sD/zqTEINpM42hN6rTs8dwsSZvp5eOaWHYnEyNMhk2Gq8VF89bVCaVGpvPuQxRMW0BWL
11 | j2xPR4916+uQhtT2kKh+IVYwYM2KUiVXGheOh0ofZ+IJ182TvQHWXaXPIuUNoXAnJCLhaCteWehG
12 | xjAw+JLiZkm001T38+oH3lsnsDjEYaRKHJOGmzM0DUkLtynXT1tLbTJRCM9SfNXGNhWulkeFWyHD
13 | QbpmdyYrXamjABk00RT+Sfe8WpbYahRxwgGv1mDq7hrhTkyjmPYw/vhZc76RGWp5erRkDbp86ba8
14 | eUEz6m/DXm/oWDIh8EJTqBvaGWypqHcLuvoJ3P980XaMbd7kh0XQaYnaBGm3Z3MeCMcOpoBI398B
15 | kFGdQtgsgFJtaaI0wnh2hDhdjr/zbMCOoEhCMoslIKhRqOsxzKhpIrNOwAkrS7a1T2BcwK5OSPHM
16 | NT24/nUkZNQzkGBG19xgjBLOZMHvSNirSROq2/XqjQbaT5B84BbQKVjZObEbgNih5d/GDWOGFlrv
17 | HuJJBg+wV81YxwiTJevtUucbj9AT0rBBtfinpUiJJx9ECmZzieT+31KkBUK7UmPiZuuD9RbmAncR
18 | s4jIi4w/GMlxAeRvA3FGNUaSKKtbTzOaGPFMwVW6aEHuigCcqhaoKarjylohee+rmWgey8mKS8dZ
19 | FZfFipRyv7FaA6QIsEyNmu3BLIXLvN+rbEuW5wTFyLiw8iG4OW3uUujSAVDbhoD85JqQAbIsA5sM
20 | RrtM5E6cGAF6T/K+rusgdTWEgjHeEyh9yrZaygK+EBpJsRWgGs9TCI7Abc0oIeNW6eD3NtvVig6i
21 | AoP+R0LPiLnHY/n7h++SUNWPYsriuwD071cPeeLClnvoWk+0sfRAisvpqbtGf5c48byoJv9/L57g
22 | PAjO4KZotkbWIJbI6DTV+lUS3hGGYWXk6lgYL0+0TRTSOUCLmCFkpJ4+DQdyDUKTpFSOab+34obC
23 | FI8+446+iAQcAgYUxSGTaMKBk0TS6huq2lNEiz6cYbX73m8JsPJ4xCwZW5H5i0NzrwqEf4x+CixO
24 | UhJnbHw1Is/9L+CTMoJQ3I7XJmztmHMRqeCpaMHBbWHHgorvj1lWiMtDyE1q1pZ7FQUW8+K9UlX8
25 | BW6xltKp7MgBZ0wx6k23V9czKUOY9x/bQ7mWRq2UqKcm8G0uynoxCgqRTfalPzkby0r9idETnWc9
26 | PYfku71b0iut5S10We3E+X3yyfrjkHBhxuN+M3bs72nJlNhZYiCUXppyzDDVoyPa5Q/03hmDVTRn
27 | csS3Y3JZUppqDh4A7xa08MaAj3kNTsIKaNKHGFrmPCBGcHE7mhapNXIeOYwdOjWBu+Gr2ejJson1
28 | +o4XEAaTNLqqz1UMilit0ipPUr5hXRfD/aZ0Pmj1/eH9qBaFdE3PEvH2kDqqkh34USf/RSgmdwU8
29 | //WyvLhtDY4DHNQ3nQakFd1qPevVKQHM6DoCU0BG+iUjOrPTcvEkJ//29HwU/FfnJvDZ7qBwksst
30 | NYOox+XWSWe8zm9tbzlvsr012OBznswZHCaxI2/viCY+HFZ1Fy8I6QEgl3CY5O9C0zpoegMm0K8b
31 | QJbBa0c6gXuJT4OGURiGFtUj6A/gas6n3nR38yUvb86MgvFzYwBDxaAUJ8HQiszzbTakrsYJnmEH
32 | 293vee8WyYWHJ8TUc0WgXYIe6ovRMrYQRJzWj6Bkrz7MHSmQGpEndgo2JsqnHbb8w8S6DNjQzL26
33 | Ydy78kMs043sJy9xaWhAcvD5+TdfnQYPKuu/YjyC9EWztCGxSY3+sl4bOZEp4W1P7KZAtgRB4Ffb
34 | /Se0EDliG4VkpnFYfLULaKqVkwazRJbcUELHyUrhXAkEJO1Q2hOuJUrGZu1Sjqw4i/pSkoLPHadA
35 | 9wWjfJoBEan1g0CkBLTjv8AcrPL58/S5W6JEnh1wO1oKEFs0bfCO267qzekgT5mx+3kpiIeLjmyA
36 | TX4DFaIV3WMDF1YZAdY/N5U/enlrmv4YVZzrTqOGhkU3zqfoKKJjeCwXAc7wdCeJDVIeaTAKEWnQ
37 | SgC/K+XNYkoLCq2CumHIbFZDohbH4IkgRYVqRWFSnyAnnPLdzljYZLhMCZY+tJcqLNT7aeKhasPD
38 | NV0N/0Ev+2lmhxkgdOYCCCnY+yVvQM/BRqxElqxuosMTUFW/FfgA7UUfS3YNWPaFYu6M0mtKLn3v
39 | NFIyP4r1DXpzdfn4Wwd0KsE1E5poR+Y6RGEkfYTnYkUUS1jEBvglxwXtIRn5weFAsImuYPjfliBP
40 | /cGbxiBJq/VRAuFZL8+MIXlyDrP4GhaighB0t8Dmax9pSWkdRA0xZnxHfqHxfnztg7DZD9AfIHGq
41 | UAp5OCHVe36pH4XEouS6iD0moIwzNniiJbz/d4dF4UwYL249iIMvc7mxXbu7ULpm9PcU4F7F4e5d
42 | XKmXaW/pK8eNaYt45t35oT3LWwcKfdXE9TCVn/WMwXijg2nF0ZqWXR4FSZ/oK1/NOTPIAN33Xdij
43 | zLXyqvB20IrrBvthwaGgaFYCmwJBcPC8Za9IJTW2KbbHete3vBHieTUc0P3LoUGsPsJ8PLG+kcz4
44 | 0TegK+DlludYX0R+I9yN1ZPguxpgKsf+u79H7QTTxUCNCpJPnCYbj0FvGmydip/Tq5v1TV85KA5g
45 | 3hwS4Gq19ti5NzcPPKzbRMag/CXaGmjRorz5Q3uJtNZzBekVW9kC2pAuvqFhViH1NM87DV28suOf
46 | qTdIsDOySZJZmyVbAbByO3Gb44jUBLyY9SMeMRfUALk8xsmMmwNOW/6BWnvBSmkCMUdDRTa04pVC
47 | vdUri8LQmu+R9XKOrceDz+6YW8Yvi/B/btfj1YH9ts0qPN5cOFyQdmm4PJFIqxuAm83abQhDVdA5
48 | CfOpf3+GA4dbK4mesKawzf96w8gC6HYeuHnqgecKv/xSh4Zlw6gnP8XO3p/oE2nSXxkhkVcS2dfW
49 | 6shN8wVlIFMPya5+s+9MstwCFy8ojbJFv2uRl8kYjdSGGY4ng2RF2Q8m1cw+PL8ZW4CjuAPdEsI/
50 | A0x0Gi8KR4Sjn8gRwnOTmyRA0VVJR/y3oUQEcANNTanoJx9lMTzT5v4886HptuQuUQnlZFQaRR5i
51 | zpiRdv+wobopjaiodIMzsF/3XdIrRpbHlFz+kOrMH8kt95zPcBwjRUsTOq25mAG/oDb0jKuNqcDD
52 | vIubCESgyIN1J/0gPto4moId/DHscpSuL2fznRcfefrDJlSKJolvavxe4FIlZof0iJ7bIq6JHwWD
53 | B7Z7+qqhHjADJBORum6GFRSB61vG6XTX/Y08fcr8t/7pHWObY7Pc0rOktv4i0H4AZtqC0VD5Ttq4
54 | LWx3Jsgh0JuRsLHnhzKXCRmB7NGCI7VpRCiOWnHsoA89Hku+pzvG+d76qf/A+YdeljilZ6aA81uE
55 | TNO+8F3c1cfRH31d4E8LT31yX1VgW+TQWPjIEx+LaX707QfBZss63o7wI53BG2Uu46emClee6Ww/
56 | 4OcvokjpQCPe1rgaf5vID9SOiOnsC7uWD6i316QV/42QU/9tQweiMjxH2Gi6tFr9oxctFuzMwweS
57 | nuT8R5fKnqD6+Ur22IMXW5nlK/BPsLgaOu7PResWEmLG7nU7WwnCNUEsg2MrnqjkV8u7PLqFfnOg
58 | GYChwNo8S1VrzOiZQvY6RfC0EnbHQZ+XYtvqxYQZ/Ub0JxRWnblyOxQYQK0aHWnXl8rrSz+TdiN0
59 | XQMhLxQetUHcrdIjUJae2VHB1LlERzSL13Ji//sGMSqEzVEJ0+xRHRuSqXnhVO2StBbhCI8Um3VS
60 | 5tPjUmjp4gvERaoaXKLtTdys/chwaOifR4sLek1BwmU/j/3xZOc/8StWG2lQdQZm2ej/XJCSaNj9
61 | X5AoCXvwvlGBY5u0csXkfHOOGAPQ91IpoPKigcOAykHwRcZ5qg178QbCgu5XO7T5PkuaWAO5LqHd
62 | 4f5kVJPx4DsfTACp44T0Bl4tEjIpIfNm9RkD9IBLHoLiau7LV87DmOlNjRHWEvPRod2JH+Yyaoau
63 | g+QQ5M3itqhJ7fsC55BR9QSCp/JDCp47N6TYjvGib9EiaJe2SioevtrgUpnEJzYS1h2F4TsjCrF4
64 | +jmylAAYHTDo8j5Zttkzx7fATpaL6+TCfKOiSyy9oAZW/ktU5m9AgKn0F5l6K5wlV1+7mcHbZNnQ
65 | lOGRtV9bIO5RX7DnHSZs4vBvoz1UJq4iWGat4zIuTJI/Ixkd0dT4XIFPG6ORDK4aPuy81JQJgmkV
66 | Eh230sWmXVl9u0QB9iEX+vfnWcpEfNikcPYGQwpKhukisRVL7zRrNjIPlMA6QQ6CrJ7ufYxLqYE+
67 | ZPgaWtmLd8A/z5fA91bRnI9j8TQbpYiyTXf4vaXUgluV41v8wuyTlM04Yhk36FMCSa8UU4dh3Ts0
68 | 135VDNJnEEDKQu80Ox1wbwqIvtVl9+MF3C26TN8cSk0jydTcpC1ntSIg8N+dpsJdTJiEWGPDGWPC
69 | V+fUlOlAFW9Slf/xMawAlZvXeRFsQNGMP0eV+Jp9ux+pzORTLbB0kz1nPIXSHlZ/zFlIVzm/ZnBC
70 | q1A0JDxkaRZto4ZkSMnnQCppMA93Cr0wdDMKjoAZhznFgYuRMQ2wqS8kxWPwZrfcCml+P/arNEhL
71 | 9MfxLVoEchr6ekldkzjejKMiqz2plA/jVTH+Fh8laodM7RSPp8EsPt0zZGm07hGr2HsMIeo5o8Se
72 | mwrts7V7XuImMYqh7j634prNnKdjrU4NC+6yLop6RG35DcahZaFMX8a8IFvV/Ddr3kA8t3fVUD3Q
73 | P1iWkNM7aE3k5epdHi2/rjM5r/HQso0jaYJW6reFXBE2HrYglvdoDyFKy6PPy+WVIP1iJCAqzdbk
74 | zL2PZsW2TCMku+SSPd4HoZJfHqRwRa/SYbvdLwrOR9Lq+TETmiAKZTwHLDYaN6615SXl4lcjLc77
75 | +c/YX0DAuB50DYycz8Xih2ms3dhL+BoaBIXijZENQkC0ABTkz2NEERhkKsQI+KcWSR601A3C2loQ
76 | dAp9iRSFbe5s/oQFr5hVTHT/TC3tRUx1pWEwZLEr6K68NpUdkH6dsm0HWH7xu0DxAbFcTcbbINlD
77 | +dMgEhz7q+tcKErlFU0IhFAH8dVLpx1gQubcrAYQqUHLnzxmb+grxF9XkM3nWEKK3CS6hO+LXJ7E
78 | cV1uD/4QpxN0cg67pppdWefGJxMyhVzIdy3Ed/LTaPgL0tNAYNWlBM5Xsq1BjoT/vLEjyGmzScdY
79 | UFgRX7G2Z54YmKeodD5h2l+ku/WR88nIa6TkH0k/UIIhwKZKtruOogPHyyCkv46NDN7chC+STnaL
80 | BI61PzfxljRU4oqzytSgK26ps8lnMNPe825yydE3N8XPJ4EpoAQhUEp17CdJrlGTQfHUx03mgY3X
81 | s+0UtUgpVzfCpbkgxp/nGw9vsB40zNjqKyjZedAEiUZKmACuE1o/38EtgTqE00xwnsk6KfLcp8+r
82 | JT+manQBmszsG+nm94PzQ8bF8cOsfuxeJLmdsdyu5V0HyKppBjQ8i16x7eHMd6+NbtLQJ1eoalZ/
83 | JVrbwhtBZC6gR/lyc9dbVZV1PUecoSQ+K7UApKA9iUk2/Ww7EKZwjuZ8zHNz/Wu6msUSo5l+8wHa
84 | XS3hh7kbymy/KLhdPd9Rhx5jXSPgXOezY/F2N6ikkiUgOJzOXBg4erIt8yRnSolByMkA/fkoo+W7
85 | cmJ+jc2mJL6cIvDQIUrzatVE41iG2Nh09+oMA3+jZL014yemP+x3a+ohhRM9/aY2wI8YRH90Q3pm
86 | ur+IDXekRumWC8PSlmBBnPusIvQ7VlHTIBQ+ope6rwcuqEBLY3FcuPSJlkqLIKzYxfSH5IIWbEaw
87 | Nf99+h+Z/5bd5ZoDxRM8xGk7Fs2exua5CBPipSVDPnoPalETelQNT+uNjY5Bgfuv+hhXSx0Ava3Y
88 | qwY/QChdw1a5baq5BHcGEALwML0Xu8keAa2pdysPv/wJw7Oov1FH1jbovACwwKvUWdMhJVZ4VrVA
89 | O6wOT6A6conOafKAwjn4sK8bwqhmgnGjNFHdzIMO4s2EZ6sWlyN2JZ3YzostOUY3Iux7HQiC1uaI
90 | d0kLp5Ln+A8roRUtgKFWQdgWap3tTq+wCGPZT+x6b2h4iNC/b8tJaqW/tdYC4Kyf8/FWyxM3sZUF
91 | Z63r7Fr0JRh+/aYk8o6ljh4rXjKqUK2lL3WpkIs98zVn6WHhZ55SsbyGITzRmpKuCV9cfI+gJF2k
92 | zSJoyytIE/FL/dqu4ALLBMye7JjpbTUE7NriUFDBh4wLvUM2mnpoxkBKqF+UJqz5z7ZLztYeJpxo
93 | 8YH8swtRjStRPSdcohh3qH7qRQr2537EGWeX1uqf2i+JHdDO6FhzgRtaELu2VVZ3bspwF4SVJMWw
94 | r2NVaGHg7gVdcwvTp28zS/vRPdNSQKplpLEnrvcdabrCIKsrqNxAK4uHWGg8xjOjTsKOwvBlmo8B
95 | 7PBKB4gn72n9T9kJYa87RcTzYuz89c84RnQbRqWoXEogmQ/MKy34zhw3u2/A1kv2f8vS0Uw/uZ4X
96 | X0FDTh89Sl0WXKlj5Z/mov00MTeiP9r++0cYSnfuPa70xPuMMMyyyA50l7BWPZs9lyACjaP5KHP3
97 | NiLcnbR+eyv80ECfdHqCUvp9KJJ/gYqHKsImb1sVK1A+MLBG3fRywbkBJNg7VMulb66PSvoJYb4J
98 | cTDLK+g0zdj+OLsP3RSWX8RNtcd2uHxzIubeRlbE6L2Rtl93mF2ZQ1F8GkanbZ5NMWNF+qGEL8T/
99 | lkOcOa5caNb2kN+hIudhJY5Owgb/ciknFcyS4umIBvgbps4ILjdHhxVYvUDzxbeP711yY6TS5Hc8
100 | roqBjwpEldVywcLCLF1whleW9/ydaPSUzLmx1aqU2leaDg3IbwvI5At/aJqJjF3aRRD5i1l/0WT5
101 | e33P+bS/VswDVFe1B0y/Un0EPyHwixtAvrpQCkwS33d2jFaK1bPIMY9Z6zxTQWHJCOZ0x/YVFwio
102 | mQ61D8jSl9UlT+sJvdXO5KXF2525M9xrAHLjojhxyUmnnM6IqR4ywXkhn9X0cif4r8sqxWJLOW6o
103 | RQsnwWUYchGFTYpguMmrmL0b5m0plR25tEr+GVh6k2f4JK82kVWxcd40uWiwG+sOialVrJbK1xra
104 | HA49AFmhe3s/A2bSLwerMTqrulV9wiwYOnaesJJeehBIqSbh8bBbtYIVkG4c7cNM7IW14IkCmSQ/
105 | /xhczW2ns4SHzK6wt7vUOVbK3DMx4C3hG5bkWUU79mxaUh2TupHFndF2wS2PgFUVoqgwb+zjWMtc
106 | Wvn0L4dLjqNQGLD2LvRADF9DqVEsyEypC8RuKyDtnSACqc4JOmy424qq3ZGUpDw8S06h4AIyTthP
107 | kU8xi8ZtVUpSjClM8LSiuTKwTdtYC8L0u44dWT44g+ybo3KOeE8tZ1f5ZuYxemx25Nr8LGO9Xgtr
108 | Tm8nnh+FVqMfWV8cMNgr+ga6eSpKFflddU+o5aA1dTB2lo6Jk3hVEldAu7kcGUdafRUy22VTwp7h
109 | FoHLuHS0DlCHR+KRtSgn+k//pHBXGgbdj+JOoYE227P/SFnghNeXI+vc5smcO1GrqUGGdNpNi9ql
110 | V1O1bMnb3SXMBhZRt4+szBSLKmMxg+RfX2ksmhkdXNICO3kRDEttWNkDyDCiyPfJfQE1ne8p/b1D
111 | kGDZnBWGeYsfltOFhtKHfuJYfSGlaasfCwfS1VOnK1/kOD1pLeJdRiclLgvuvED6qnhJ+ikMxVDL
112 | IvrcEb0oAKvEMqUticDjwEzejEn0GplcCa3JrhSx2QieYratqPON8PY0lMBlFR0Ci4i0oNyMPXp7
113 | RYzV/8QAlaLPqBC8Q1v8+kvRo/aXMsj38uFLJVWOOV/Skrkm3UgDDNqyeZWpP0E5zv75cqgRRagY
114 | thTecZ6J/0ijIA8EXj7M1Z/cSPIpuXgcHdbHCxoyxzbQ1ygxmhTmABGkolVVO6G77n+BQICQfzN1
115 | fgRFZJ0kwYfSfmMv7MX+LZ6W0TKx1gqBNRiQpGyALu2RFtG72zmRJMGv+aGt66SWNjWSnVyneI2Z
116 | gGOOGzOaxL4tIJQGBCrQ+yl2yFdTYgpLfXjha+e7wdLsfOmx2uJ+IsbqnjzP17wq9pGdA2Mpb+Jd
117 | el5g4zWJiaKBcFS1yYLG/1fl1OgQ449sID0tQmGlhiizwP6LvupgH6/Wc1fEewTnkjd1HLCFdXvu
118 | OCWXPVTHS8tyI+eKaWpc7ohuBM4gYL4slPBpEwjx2vuCYcmnA4jqDrBma5kbeHscV4ClblLpsM7e
119 | 5itWIEyJQzLnkzkWzDq3lSWdgE5GPOCe9LUbh3OBapJ/GcG7uLfC110EAsCwAMwprOzqgTllsLB2
120 | PSCIvMjHBFuZEjvcv0Whb577C3e8VBT8QxNS7TJCFG2saHjaE4IutzWhGtIiVzRvi91Hb7ctg3S6
121 | vhVmqm5Vnwp1haRhBGL1N6FEVbmjdRYlzMXzncg6+9njNQX2WfiHndZKTigv98RAzn6zHFfVo7mJ
122 | QjFmR5DRjgsfWB+qq0OMEEVTuHIz4XD4vtHi1+OIx8tvqEgNVh3H9Cy+aqXhLUEDmqU5XfdjFz6V
123 | 8tS1u2nuBin/RCfHITCO331/qbHfYGB37M5e/0MA65tTU5wUcOAXHoaWTKDechxVbXWAnwr6jAFR
124 | YvVGlp663Pt4+lACnteTXASQMhluINvWffiXWEu/fu5rA6cYbe5CyX+No1d25S47ZaQ+/xvhHpNH
125 | Wik7uutYZF0AhBT3D3RLBSKrc5ESv/buTqXk8THD8uJwcCOL6Sb+9R0FdV+ZMg5a2E8Kcg/oviTF
126 | oDlkq5R5QYk/rLUho5T66Kr8uN8+PKQiEhvJEgKAQQX6lj50wpaUgMqVAAZLzwzRt3BCoEQWx0JW
127 | HOHkhHAwRokvDkSLQmScPZNOq75XaIFHMZFjk8rjqAodO6UlOxJ8E6bBKSrwCC8I8ptlByQiWM3L
128 | TiaGwOzwWuSpjvC/plSXux/PtfEVAVxew+TM+JURtNH42NXEEFL7bDRQbRVj+kHy163RRrgLc/4u
129 | HMkvx2lWYZM9RmZoRBXKzzSBp2JJeV9rXgTiXWArlM/K1CqPTjYA9luGSPK5f+64C64zE/Vo0oXc
130 | zmQ98ahh4AgGoYTKY31ErYpbq+OqwtTbw67yRb8quj7ecxGmOXE/zVdFYJgThrKcatL+JS8J3TsM
131 | Ei/Rs6LUfagHm6qCH2wnd3ZUQucqjWNgt0J7Inavul7IBmafzTMvwCj8ahrlYXT6wNp
132 |
--------------------------------------------------------------------------------
/exemplos/exemplo_2/file4.txt:
--------------------------------------------------------------------------------
1 | seg ago 29 13:19:03 BRT 2016
2 | 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
132 |
--------------------------------------------------------------------------------
/exemplos/exemplo_2/file5.txt:
--------------------------------------------------------------------------------
1 | qui set 08 22:42:51 BRT 2016
2 | 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
132 |
--------------------------------------------------------------------------------
/exemplos/exemplo_2/teste.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/exemplos/exemplo_2/teste.txt
--------------------------------------------------------------------------------
/exemplos/exemplo_3/MCT II Rio Chuí Final.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/exemplos/exemplo_3/MCT II Rio Chuí Final.xlsx
--------------------------------------------------------------------------------
/exemplos/exemplo_6/.ipynb_checkpoints/Diagrama TS-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 24,
6 | "metadata": {
7 | "collapsed": true
8 | },
9 | "outputs": [],
10 | "source": [
11 | "%matplotlib inline"
12 | ]
13 | },
14 | {
15 | "cell_type": "markdown",
16 | "metadata": {},
17 | "source": [
18 | "# Diagrama TS"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {},
24 | "source": [
25 | "Vamos elaborar um diagrama TS com o auxílio do pacote gsw [https://pypi.python.org/pypi/gsw/3.0.3], que é uma alternativa em python para a toolbox gsw do MATLAB:"
26 | ]
27 | },
28 | {
29 | "cell_type": "code",
30 | "execution_count": 25,
31 | "metadata": {
32 | "collapsed": false
33 | },
34 | "outputs": [],
35 | "source": [
36 | "import gsw"
37 | ]
38 | },
39 | {
40 | "cell_type": "markdown",
41 | "metadata": {},
42 | "source": [
43 | "Se você não conseguiu importar a biblioteca acima, precisa instalar o módulo gsw. "
44 | ]
45 | },
46 | {
47 | "cell_type": "markdown",
48 | "metadata": {
49 | "collapsed": true
50 | },
51 | "source": [
52 | "Em seguida, importamos a biblioteca numpy que nos permite usar algumas funções matemáticas no python:"
53 | ]
54 | },
55 | {
56 | "cell_type": "code",
57 | "execution_count": 26,
58 | "metadata": {
59 | "collapsed": true
60 | },
61 | "outputs": [],
62 | "source": [
63 | "import numpy as np\n",
64 | "import matplotlib.pyplot as plt"
65 | ]
66 | },
67 | {
68 | "cell_type": "code",
69 | "execution_count": 28,
70 | "metadata": {
71 | "collapsed": false
72 | },
73 | "outputs": [
74 | {
75 | "data": {
76 | "text/plain": [
77 | ""
78 | ]
79 | },
80 | "execution_count": 28,
81 | "metadata": {},
82 | "output_type": "execute_result"
83 | },
84 | {
85 | "data": {
86 | "image/png": "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\nz3oAAAAASUVORK5CYII=\n",
87 | "text/plain": [
88 | ""
89 | ]
90 | },
91 | "metadata": {},
92 | "output_type": "display_data"
93 | }
94 | ],
95 | "source": [
96 | "sal = np.linspace(0, 42, 100)\n",
97 | "temp = np.linspace(-2, 40, 100)\n",
98 | "\n",
99 | "s, t = np.meshgrid(sal, temp)\n",
100 | "\n",
101 | "# Abaixo usamos diretamente o resultado da biblioteca gsw: \n",
102 | "# Thermodynamic Equation Of Seawater - 2010 (TEOS-10)\n",
103 | "sigma = gsw.sigma0(s, t)\n",
104 | "\n",
105 | "# Quantidade de linhas desejada \n",
106 | "cnt = np.arange(-7, 35, 5)\n",
107 | "\n",
108 | "fig, ax = plt.subplots(figsize=(5, 5))\n",
109 | "\n",
110 | "ax.plot(sal, temp, 'ro')\n",
111 | "\n",
112 | "# O comando abaixo faz curvas de nível com dados contour(X, Y, Z)\n",
113 | "cs = ax.contour(s, t, sigma, colors='blue', levels=cnt)\n",
114 | "\n",
115 | "# Aqui fazemos rótulos para as curvas de nível\n",
116 | "ax.clabel(cs, fontsize=9, inline=1, fmt='%2i')\n",
117 | "\n",
118 | "ax.set_xlabel('Salinity [g kg$^{-1}$]')\n",
119 | "ax.set_ylabel('Temperature [$^{\\circ}$C]')\n",
120 | "\n",
121 | "#plt.plot(s,t,'ro')"
122 | ]
123 | },
124 | {
125 | "cell_type": "code",
126 | "execution_count": null,
127 | "metadata": {
128 | "collapsed": true
129 | },
130 | "outputs": [],
131 | "source": []
132 | }
133 | ],
134 | "metadata": {
135 | "kernelspec": {
136 | "display_name": "Python 3",
137 | "language": "python",
138 | "name": "python3"
139 | },
140 | "language_info": {
141 | "codemirror_mode": {
142 | "name": "ipython",
143 | "version": 3
144 | },
145 | "file_extension": ".py",
146 | "mimetype": "text/x-python",
147 | "name": "python",
148 | "nbconvert_exporter": "python",
149 | "pygments_lexer": "ipython3",
150 | "version": "3.5.2"
151 | }
152 | },
153 | "nbformat": 4,
154 | "nbformat_minor": 0
155 | }
156 |
--------------------------------------------------------------------------------
/exemplos/exemplo_6/Diagrama TS.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 7,
6 | "metadata": {
7 | "collapsed": true
8 | },
9 | "outputs": [],
10 | "source": [
11 | "%matplotlib inline"
12 | ]
13 | },
14 | {
15 | "cell_type": "markdown",
16 | "metadata": {},
17 | "source": [
18 | "# Diagrama TS"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {},
24 | "source": [
25 | "Vamos elaborar um diagrama TS com o auxílio do pacote gsw [https://pypi.python.org/pypi/gsw/3.0.3], que é uma alternativa em python para a toolbox gsw do MATLAB:"
26 | ]
27 | },
28 | {
29 | "cell_type": "code",
30 | "execution_count": 8,
31 | "metadata": {
32 | "collapsed": false
33 | },
34 | "outputs": [],
35 | "source": [
36 | "import gsw"
37 | ]
38 | },
39 | {
40 | "cell_type": "markdown",
41 | "metadata": {},
42 | "source": [
43 | "Se você não conseguiu importar a biblioteca acima, precisa instalar o módulo gsw. "
44 | ]
45 | },
46 | {
47 | "cell_type": "markdown",
48 | "metadata": {
49 | "collapsed": true
50 | },
51 | "source": [
52 | "Em seguida, importamos a biblioteca numpy que nos permite usar algumas funções matemáticas no python:"
53 | ]
54 | },
55 | {
56 | "cell_type": "code",
57 | "execution_count": 9,
58 | "metadata": {
59 | "collapsed": true
60 | },
61 | "outputs": [],
62 | "source": [
63 | "import numpy as np\n",
64 | "import matplotlib.pyplot as plt"
65 | ]
66 | },
67 | {
68 | "cell_type": "code",
69 | "execution_count": 10,
70 | "metadata": {
71 | "collapsed": false
72 | },
73 | "outputs": [
74 | {
75 | "data": {
76 | "text/plain": [
77 | ""
78 | ]
79 | },
80 | "execution_count": 10,
81 | "metadata": {},
82 | "output_type": "execute_result"
83 | },
84 | {
85 | "data": {
86 | "image/png": "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\n",
87 | "text/plain": [
88 | ""
89 | ]
90 | },
91 | "metadata": {},
92 | "output_type": "display_data"
93 | }
94 | ],
95 | "source": [
96 | "sal = np.linspace(0, 42, 100)\n",
97 | "temp = np.linspace(-2, 40, 100)\n",
98 | "\n",
99 | "s, t = np.meshgrid(sal, temp)\n",
100 | "\n",
101 | "# Abaixo usamos diretamente o resultado da biblioteca gsw: \n",
102 | "# Thermodynamic Equation Of Seawater - 2010 (TEOS-10)\n",
103 | "sigma = gsw.sigma0(s, t)\n",
104 | "\n",
105 | "# Quantidade de linhas desejada \n",
106 | "cnt = np.arange(-7, 35, 10)\n",
107 | "\n",
108 | "fig, ax = plt.subplots(figsize=(5, 5))\n",
109 | "\n",
110 | "ax.plot(sal, temp, 'ro')\n",
111 | "\n",
112 | "# O comando abaixo faz curvas de nível com dados contour(X, Y, Z)\n",
113 | "cs = ax.contour(s, t, sigma, colors='blue', levels=cnt)\n",
114 | "\n",
115 | "# Aqui fazemos rótulos para as curvas de nível\n",
116 | "ax.clabel(cs, fontsize=9, inline=1, fmt='%2i')\n",
117 | "\n",
118 | "ax.set_xlabel('Salinity [g kg$^{-1}$]')\n",
119 | "ax.set_ylabel('Temperature [$^{\\circ}$C]')"
120 | ]
121 | },
122 | {
123 | "cell_type": "code",
124 | "execution_count": null,
125 | "metadata": {
126 | "collapsed": true
127 | },
128 | "outputs": [],
129 | "source": []
130 | }
131 | ],
132 | "metadata": {
133 | "kernelspec": {
134 | "display_name": "Python 3",
135 | "language": "python",
136 | "name": "python3"
137 | },
138 | "language_info": {
139 | "codemirror_mode": {
140 | "name": "ipython",
141 | "version": 3
142 | },
143 | "file_extension": ".py",
144 | "mimetype": "text/x-python",
145 | "name": "python",
146 | "nbconvert_exporter": "python",
147 | "pygments_lexer": "ipython3",
148 | "version": "3.5.2"
149 | }
150 | },
151 | "nbformat": 4,
152 | "nbformat_minor": 0
153 | }
154 |
--------------------------------------------------------------------------------
/exemplos/exemplo_7/iris.data:
--------------------------------------------------------------------------------
1 | 5.1,3.5,1.4,0.2,Iris-setosa
2 | 4.9,3.0,1.4,0.2,Iris-setosa
3 | 4.7,3.2,1.3,0.2,Iris-setosa
4 | 4.6,3.1,1.5,0.2,Iris-setosa
5 | 5.0,3.6,1.4,0.2,Iris-setosa
6 | 5.4,3.9,1.7,0.4,Iris-setosa
7 | 4.6,3.4,1.4,0.3,Iris-setosa
8 | 5.0,3.4,1.5,0.2,Iris-setosa
9 | 4.4,2.9,1.4,0.2,Iris-setosa
10 | 4.9,3.1,1.5,0.1,Iris-setosa
11 | 5.4,3.7,1.5,0.2,Iris-setosa
12 | 4.8,3.4,1.6,0.2,Iris-setosa
13 | 4.8,3.0,1.4,0.1,Iris-setosa
14 | 4.3,3.0,1.1,0.1,Iris-setosa
15 | 5.8,4.0,1.2,0.2,Iris-setosa
16 | 5.7,4.4,1.5,0.4,Iris-setosa
17 | 5.4,3.9,1.3,0.4,Iris-setosa
18 | 5.1,3.5,1.4,0.3,Iris-setosa
19 | 5.7,3.8,1.7,0.3,Iris-setosa
20 | 5.1,3.8,1.5,0.3,Iris-setosa
21 | 5.4,3.4,1.7,0.2,Iris-setosa
22 | 5.1,3.7,1.5,0.4,Iris-setosa
23 | 4.6,3.6,1.0,0.2,Iris-setosa
24 | 5.1,3.3,1.7,0.5,Iris-setosa
25 | 4.8,3.4,1.9,0.2,Iris-setosa
26 | 5.0,3.0,1.6,0.2,Iris-setosa
27 | 5.0,3.4,1.6,0.4,Iris-setosa
28 | 5.2,3.5,1.5,0.2,Iris-setosa
29 | 5.2,3.4,1.4,0.2,Iris-setosa
30 | 4.7,3.2,1.6,0.2,Iris-setosa
31 | 4.8,3.1,1.6,0.2,Iris-setosa
32 | 5.4,3.4,1.5,0.4,Iris-setosa
33 | 5.2,4.1,1.5,0.1,Iris-setosa
34 | 5.5,4.2,1.4,0.2,Iris-setosa
35 | 4.9,3.1,1.5,0.1,Iris-setosa
36 | 5.0,3.2,1.2,0.2,Iris-setosa
37 | 5.5,3.5,1.3,0.2,Iris-setosa
38 | 4.9,3.1,1.5,0.1,Iris-setosa
39 | 4.4,3.0,1.3,0.2,Iris-setosa
40 | 5.1,3.4,1.5,0.2,Iris-setosa
41 | 5.0,3.5,1.3,0.3,Iris-setosa
42 | 4.5,2.3,1.3,0.3,Iris-setosa
43 | 4.4,3.2,1.3,0.2,Iris-setosa
44 | 5.0,3.5,1.6,0.6,Iris-setosa
45 | 5.1,3.8,1.9,0.4,Iris-setosa
46 | 4.8,3.0,1.4,0.3,Iris-setosa
47 | 5.1,3.8,1.6,0.2,Iris-setosa
48 | 4.6,3.2,1.4,0.2,Iris-setosa
49 | 5.3,3.7,1.5,0.2,Iris-setosa
50 | 5.0,3.3,1.4,0.2,Iris-setosa
51 | 7.0,3.2,4.7,1.4,Iris-versicolor
52 | 6.4,3.2,4.5,1.5,Iris-versicolor
53 | 6.9,3.1,4.9,1.5,Iris-versicolor
54 | 5.5,2.3,4.0,1.3,Iris-versicolor
55 | 6.5,2.8,4.6,1.5,Iris-versicolor
56 | 5.7,2.8,4.5,1.3,Iris-versicolor
57 | 6.3,3.3,4.7,1.6,Iris-versicolor
58 | 4.9,2.4,3.3,1.0,Iris-versicolor
59 | 6.6,2.9,4.6,1.3,Iris-versicolor
60 | 5.2,2.7,3.9,1.4,Iris-versicolor
61 | 5.0,2.0,3.5,1.0,Iris-versicolor
62 | 5.9,3.0,4.2,1.5,Iris-versicolor
63 | 6.0,2.2,4.0,1.0,Iris-versicolor
64 | 6.1,2.9,4.7,1.4,Iris-versicolor
65 | 5.6,2.9,3.6,1.3,Iris-versicolor
66 | 6.7,3.1,4.4,1.4,Iris-versicolor
67 | 5.6,3.0,4.5,1.5,Iris-versicolor
68 | 5.8,2.7,4.1,1.0,Iris-versicolor
69 | 6.2,2.2,4.5,1.5,Iris-versicolor
70 | 5.6,2.5,3.9,1.1,Iris-versicolor
71 | 5.9,3.2,4.8,1.8,Iris-versicolor
72 | 6.1,2.8,4.0,1.3,Iris-versicolor
73 | 6.3,2.5,4.9,1.5,Iris-versicolor
74 | 6.1,2.8,4.7,1.2,Iris-versicolor
75 | 6.4,2.9,4.3,1.3,Iris-versicolor
76 | 6.6,3.0,4.4,1.4,Iris-versicolor
77 | 6.8,2.8,4.8,1.4,Iris-versicolor
78 | 6.7,3.0,5.0,1.7,Iris-versicolor
79 | 6.0,2.9,4.5,1.5,Iris-versicolor
80 | 5.7,2.6,3.5,1.0,Iris-versicolor
81 | 5.5,2.4,3.8,1.1,Iris-versicolor
82 | 5.5,2.4,3.7,1.0,Iris-versicolor
83 | 5.8,2.7,3.9,1.2,Iris-versicolor
84 | 6.0,2.7,5.1,1.6,Iris-versicolor
85 | 5.4,3.0,4.5,1.5,Iris-versicolor
86 | 6.0,3.4,4.5,1.6,Iris-versicolor
87 | 6.7,3.1,4.7,1.5,Iris-versicolor
88 | 6.3,2.3,4.4,1.3,Iris-versicolor
89 | 5.6,3.0,4.1,1.3,Iris-versicolor
90 | 5.5,2.5,4.0,1.3,Iris-versicolor
91 | 5.5,2.6,4.4,1.2,Iris-versicolor
92 | 6.1,3.0,4.6,1.4,Iris-versicolor
93 | 5.8,2.6,4.0,1.2,Iris-versicolor
94 | 5.0,2.3,3.3,1.0,Iris-versicolor
95 | 5.6,2.7,4.2,1.3,Iris-versicolor
96 | 5.7,3.0,4.2,1.2,Iris-versicolor
97 | 5.7,2.9,4.2,1.3,Iris-versicolor
98 | 6.2,2.9,4.3,1.3,Iris-versicolor
99 | 5.1,2.5,3.0,1.1,Iris-versicolor
100 | 5.7,2.8,4.1,1.3,Iris-versicolor
101 | 6.3,3.3,6.0,2.5,Iris-virginica
102 | 5.8,2.7,5.1,1.9,Iris-virginica
103 | 7.1,3.0,5.9,2.1,Iris-virginica
104 | 6.3,2.9,5.6,1.8,Iris-virginica
105 | 6.5,3.0,5.8,2.2,Iris-virginica
106 | 7.6,3.0,6.6,2.1,Iris-virginica
107 | 4.9,2.5,4.5,1.7,Iris-virginica
108 | 7.3,2.9,6.3,1.8,Iris-virginica
109 | 6.7,2.5,5.8,1.8,Iris-virginica
110 | 7.2,3.6,6.1,2.5,Iris-virginica
111 | 6.5,3.2,5.1,2.0,Iris-virginica
112 | 6.4,2.7,5.3,1.9,Iris-virginica
113 | 6.8,3.0,5.5,2.1,Iris-virginica
114 | 5.7,2.5,5.0,2.0,Iris-virginica
115 | 5.8,2.8,5.1,2.4,Iris-virginica
116 | 6.4,3.2,5.3,2.3,Iris-virginica
117 | 6.5,3.0,5.5,1.8,Iris-virginica
118 | 7.7,3.8,6.7,2.2,Iris-virginica
119 | 7.7,2.6,6.9,2.3,Iris-virginica
120 | 6.0,2.2,5.0,1.5,Iris-virginica
121 | 6.9,3.2,5.7,2.3,Iris-virginica
122 | 5.6,2.8,4.9,2.0,Iris-virginica
123 | 7.7,2.8,6.7,2.0,Iris-virginica
124 | 6.3,2.7,4.9,1.8,Iris-virginica
125 | 6.7,3.3,5.7,2.1,Iris-virginica
126 | 7.2,3.2,6.0,1.8,Iris-virginica
127 | 6.2,2.8,4.8,1.8,Iris-virginica
128 | 6.1,3.0,4.9,1.8,Iris-virginica
129 | 6.4,2.8,5.6,2.1,Iris-virginica
130 | 7.2,3.0,5.8,1.6,Iris-virginica
131 | 7.4,2.8,6.1,1.9,Iris-virginica
132 | 7.9,3.8,6.4,2.0,Iris-virginica
133 | 6.4,2.8,5.6,2.2,Iris-virginica
134 | 6.3,2.8,5.1,1.5,Iris-virginica
135 | 6.1,2.6,5.6,1.4,Iris-virginica
136 | 7.7,3.0,6.1,2.3,Iris-virginica
137 | 6.3,3.4,5.6,2.4,Iris-virginica
138 | 6.4,3.1,5.5,1.8,Iris-virginica
139 | 6.0,3.0,4.8,1.8,Iris-virginica
140 | 6.9,3.1,5.4,2.1,Iris-virginica
141 | 6.7,3.1,5.6,2.4,Iris-virginica
142 | 6.9,3.1,5.1,2.3,Iris-virginica
143 | 5.8,2.7,5.1,1.9,Iris-virginica
144 | 6.8,3.2,5.9,2.3,Iris-virginica
145 | 6.7,3.3,5.7,2.5,Iris-virginica
146 | 6.7,3.0,5.2,2.3,Iris-virginica
147 | 6.3,2.5,5.0,1.9,Iris-virginica
148 | 6.5,3.0,5.2,2.0,Iris-virginica
149 | 6.2,3.4,5.4,2.3,Iris-virginica
150 | 5.9,3.0,5.1,1.8,Iris-virginica
151 |
152 |
--------------------------------------------------------------------------------
/material divulgacao/GOM1BW.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/material divulgacao/GOM1BW.png
--------------------------------------------------------------------------------
/material divulgacao/brasao_1678.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/material divulgacao/brasao_1678.png
--------------------------------------------------------------------------------
/material divulgacao/brasao_UFSC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/material divulgacao/brasao_UFSC.png
--------------------------------------------------------------------------------
/material divulgacao/folder.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/melissawm/oceanobiopython/d9f1865d4040cc1a6c62533dddf8033b0238f2f2/material divulgacao/folder.pdf
--------------------------------------------------------------------------------
/material divulgacao/folder.tex:
--------------------------------------------------------------------------------
1 | \documentclass{beamer}
2 | \usetheme{default}
3 | \usecolortheme{seagull}
4 | \usefonttheme{structurebold}
5 | \usenavigationsymbolstemplate{}
6 | \definecolor{csred}{rgb}{0.91,0.42,0.39}
7 | \definecolor{csgreen}{rgb}{0.5,0.79,0.62}
8 | \definecolor{csyellow}{rgb}{0.95,0.73,0.44}
9 | \definecolor{cslblue}{rgb}{0.52,0.75,0.96}
10 | \definecolor{csdblue}{rgb}{0.29,0.47,0.61}
11 |
12 | \usepackage[utf8]{inputenc}
13 | \usepackage{tikz}
14 | \begin{document}
15 |
16 | \addtobeamertemplate{frametitle}{\vskip-0.7ex}
17 |
18 | \begin{frame}
19 | \frametitle{\small{Minicurso}}
20 | \begin{center}
21 | \vskip-0.3cm
22 | \begin{tikzpicture}
23 | \node[fill=csdblue, text=white] {
24 | \raisebox{0.6cm}[1.5cm]{%
25 | \begin{minipage}{9cm}
26 | \centering \Large{\textbf{Computação Científica com Python}}\\\small{\textbf{com aplicações à Oceanografia e à Biologia}}
27 | \end{minipage}
28 | }
29 | };
30 | \end{tikzpicture}
31 | \end{center}
32 | \vskip-0.3cm
33 | \small{%
34 | \textbf{Datas:} de 13/09 a 06/10, terças e quintas, das 18:30 às 20:00\\
35 | \textbf{Local:} Laboratório de Informática do CFH \textemdash\ Sala 327 (30 vagas)
36 | }
37 |
38 | \scriptsize{%
39 | \begin{itemize}
40 | \setlength\itemsep{0em}
41 | \item[$\bullet$] Introdução ao Python: instalação, configuração e a utilização do \emph{console}. Operações aritméticas e utilização de funções matemáticas básicas.
42 | \item[$\bullet$] Manipulação de listas e strings; vetores e matrizes usando SciPy e Numpy
43 | \item[$\bullet$] Tratamento de dados em arquivos; leitura e escrita em arquivos; Utilização de bibliotecas para leitura de arquivos \texttt{.csv}, \texttt{.txt}, e \texttt{.xls}
44 | \item[$\bullet$] Utilização da biblioteca \emph{PANDAS} para tratamento estatístico de dados.
45 | \item[$\bullet$] Gráficos com a biblioteca \emph{matplotlib}
46 | \item[$\bullet$] Resolução de problemas aplicados, incluindo a utilização de outras bibliotecas.
47 | \end{itemize}
48 | }
49 |
50 | \small{%
51 | \textbf{Inscrições e informações:} \texttt{gomicrobes@gmail.com} \textbf{até dia 08/09}
52 | }
53 | \begin{columns}
54 | \column{1cm}
55 | \column{1cm}
56 | \tiny{\textbf{Apoio:}}
57 | \column{2.5cm}
58 | \begin{center}\tiny{Departamento de Matemática\\CFM - UFSC}\end{center}
59 | \column{1.6cm}
60 | \includegraphics[width=1.5cm]{brasao_1678.png}
61 | \column{1.6cm}
62 | \includegraphics[width=1.5cm]{GOM1BW.png}
63 | \column{1.6cm}
64 | \includegraphics[width=1.5cm]{brasao_UFSC.png}
65 | \column{2cm}
66 | \end{columns}
67 | \end{frame}
68 | \end{document}
69 |
--------------------------------------------------------------------------------