├── 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 | 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 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 | --------------------------------------------------------------------------------