Python có hữu ích cho sinh viên khoa học không?

Chuyển đến nội dung chính

Có liên quan

SQL so với Python. Bạn nên học cái nào?

Trong bài viết này, chúng tôi sẽ đề cập đến các tính năng chính của Python và SQL, những điểm tương đồng và khác biệt chính của chúng cũng như bạn nên chọn cái nào trước để bắt đầu hành trình khoa học dữ liệu của mình

Javier Canales Luna •

12 phút

Dữ liệu văn bản trong Python Cheat Sheet

Chào mừng bạn đến với bảng gian lận của chúng tôi để làm việc với dữ liệu văn bản trong Python. Chúng tôi đã biên soạn một danh sách các hàm và gói hữu ích nhất để dọn dẹp, xử lý và phân tích dữ liệu văn bản trong Python, cùng với các ví dụ và giải thích rõ ràng, vì vậy bạn sẽ có mọi thứ cần biết về cách làm việc với dữ liệu văn bản trong Python.

Hướng dẫn về tập hợp và lý thuyết tập hợp trong Python

Tìm hiểu về bộ Python. chúng là gì, cách tạo chúng, khi nào sử dụng chúng, các chức năng tích hợp và mối quan hệ của chúng với các hoạt động lý thuyết thiết lập

Hướng dẫn gấu trúc. Khung dữ liệu trong Python

Khám phá phân tích dữ liệu với Python. Pandas DataFrames giúp thao tác dữ liệu của bạn dễ dàng, từ việc chọn hoặc thay thế các cột và chỉ mục để định hình lại dữ liệu của bạn

Xem ThêmXem Thêm

Khi các nhà khoa học nhận ra khả năng hỗ trợ công việc của máy tính, có lẽ họ là những người đầu tiên nhiệt tình áp dụng công nghệ này. Khi máy tính ngày càng trở nên phổ biến vào những năm 1950, 1960 và 1970, các nhà khoa học đã tiếp tục sử dụng chúng và phát triển phần mềm để thực hiện các phép tính dài và tự động hóa các hoạt động thu thập dữ liệu tẻ nhạt. Một số lĩnh vực đã được biến đổi nhiều như tinh thể học, thông qua các chương trình cho các phương pháp trực tiếp pha và sàng lọc bình phương nhỏ nhất và thông qua các thiết bị vi tính hóa. Fifty years later, the thought of recording measurements on a strip chart recorder seems as quaint as a commuting to work in a horse-drawn carriage

There is now a plethora of highly specialized software programs for powder diffraction and practitioners also draw upon many general-purpose tools, such as spreadsheets and word processing packages. While use of computers and their power have grown in science, there is an irony that far fewer scientists are learning software development skills. This is a loss. While existing applications can accomplish quite a bit, there are always simple tasks in science that no one has programmed in a convenient way. Additionally, there are always new ideas that should be tried. Also of concern is the question of who will write the next generation of scientific software? Even when scientists team with computer specialists for software development, it is still very helpful when the scientists have a good understanding of the programming process. Hence, we recommend that more scientists learn to program. Fortunately, not only have computers become ubiquitous, but also the skills needed to learn programming have been simplified, at least with some high-level computer languages

There are programming languages aplenty, with each computer language having been designed to fill a gap unmet in the capabilities of its predecessors, but even so, every language in common use has advantages and disadvantages, some of which will be considered below. Even professional programmers typically tend to specialize in the use of a small number of languages, but since scientists have considerably less time to invest, they typically prefer mastering a single language that can satisfy as many needs as possible

Scientific computing requires that multiple types of tasks be done in combination. one needs to perform numerical or symbolic analysis, usually with a scientific software package to avoid reinventing the wheel; results need to be presented to the user, usually with scientific graphics; the user must interact with the program, typically in modern codes via a graphical user interface (GUI or web browser); documentation is needed to describe the software and for users to learn how to utilize the program. The Python programming language is able to perform all of this and more and thus satisfies what scientists need (van Rossum, Reference van Rossum 1998). Furthermore, the authors of this paper feel that Python is among the easiest of languages for novices to learn, while being one of the best programming environments for scientific purposes, such as automation, image processing and numerical analysis. It also provides an environment where users can start with only the simpler capabilities, but possibly advance to using more powerful features, such as object-oriented programming, as skills grow.

Python offers capabilities for two different approaches to scientific computing. “numerical” vs. “symbolic” scientific systems. The former requires tools specifically meant to handle precise numerical data (e. g. Matlab, Octave, R-language, and other high-level computer languages), whereas the latter manipulates indefinite symbolic expressions or equations (e. g. Mathematica and Maple). Since all these features are available in Python, it can be applied to solve a wide range of problems. A novice can easily learn Python in order to turn their ideas into programs very quickly, but if needed for a larger project, she or he can learn to create object-oriented code, optimize code for speed and develop sophisticated scientific visualization with complex graphical user interfaces

Furthermore, Python is a cross-platform open source software package that is licensed under the “Python Software Foundation License”, enabling the free distribution of the interpreter. Programs written in it incur no hidden licensing costs. This makes it ideal for use in the classroom, as well as in the laboratory, since replication of work is a cornerstone of the scientific method. Below, we will explain many of the features of Python and explain why it is so valuable for nearly all aspects of scientific computation, from quick-and-dirty format data conversion to model fitting through instrument automation and even first-principles theory. We first compare Python to some of the other programming languages commonly used in scientific computing, and then present a short overview of Python syntax

What makes Python so valuable for scientific computation is not only Python's novice-friendly syntax, but also the many packages that allow many common programming tasks to be completed in dozens of lines of code rather than hundreds or thousands in other languages. Again, there are thousands of such packages, so we point out a small selection of these in order to highlight what makes Python so valuable and to point novices toward some of the most valuable resources. Finally, since a search for resources for learning Python can produce an overwhelming number of results, many of which are of limited value to a scientist, we provide a section (Appendix 2) with recommendations on many different types of pedagogical materials to help scientists learn to program with Python

II. AN OVERVIEW OF MODERN PROGRAMMING LANGUAGES

Although there are many different programming languages, they fall into three general categories and it is important to understand the benefits and drawbacks of each approach. The original computer languages such as Fortran, Algol, Cobol, as well as more modern languages, such as C and C+ +, are interpreted by another large program called a compiler. The output of a compiler process is called machine code, because it contains the actual hardware instructions appropriate for the circuitry and operating system of a specific type of computer. A program compiled to run in Windows will not run on a Linux machine or on an Macintosh (except perhaps in an emulator) and, in some cases, a program compiled for a specific version of an operating system will not run on older or newer versions of the same operating system. After recompilation, code should be readily portable between computer platforms, but in practice this is not always true. The main advantage of using compilers is they produce the most powerful and efficient programs, since they take direct advantage of the computer and operating system design, but the cost is more of a learning investment and slower coding progress for the programmer

Các ngôn ngữ lập trình được giải thích đã được phát triển khi máy tính trở nên phổ biến hơn và hiệu quả trở nên ít quan trọng hơn. In this, a master program called an interpreter reads the program to be run and as each line of code is encountered, it is translated and the requested actions are performed. One of the earliest interpreted languages was BASIC (circa 1964), but newer interpreted languages include Perl, Ruby, Tcl/Tk, and Python. These languages also tend to have sophisticated instructions that allow commonly used actions to be coded in a simple manner. This tends to both reduce the size of programs and simplify the process of writing them. Another advantage of interpreted languages is that a programmer can type individual instructions directly into the interpreter and experiment with the results. These two features allow programs to be developed with the minimum level of effort. Hầu hết các trình thông dịch được thử nghiệm để hoạt động giống hệt nhau trên nhiều nền tảng máy tính, điều đó có nghĩa là mã chương trình ngôn ngữ được thông dịch thường sẽ chạy giống hệt nhau trên nhiều loại máy tính. Ban đầu, các ngôn ngữ này thường được sử dụng để viết các chương trình đơn giản và ngắn, được gọi là tập lệnh, vì vậy chúng thường được gọi là ngôn ngữ kịch bản

Các ngôn ngữ lập trình thông dịch mang lại một số nhược điểm. One is that the interpreter must be installed on each computer where the program will be run. Furthermore, such interpreted programs tend not to run as efficiently as those in compiled languages. However, computational speed is often less of a concern than the time needed to create and debug a program. In the relatively rare cases where speed is a significant concern, usually only a small fraction of the lines in a program will impact this and many interpreted languages offer mechanisms for addressing these bottlenecks

Loại ngôn ngữ máy tính mới nhất là thứ gì đó kết hợp giữa ngôn ngữ được biên dịch và thông dịch. Một trình biên dịch được sử dụng để chuyển đổi chương trình thành các lệnh đơn giản và tổng quát được gọi là bytecode. Không giống như đầu ra từ trình biên dịch, các hướng dẫn này không dành riêng cho bất kỳ loại phần cứng máy tính nào. Để chạy chương trình, sau khi được chuyển đổi thành mã byte, chương trình thứ hai, được gọi là máy ảo, đọc các lệnh mã byte độc ​​lập với phần cứng này và thực hiện các hoạt động thực tế bằng cách dịch chúng, từng lệnh, sang hệ điều hành và phần cứng thực tế. Do đó, bytecode cũng sẽ chạy trên bất kỳ máy tính nào đã chuyển máy ảo. Java là ví dụ hàng đầu của loại ngôn ngữ này, có sẵn cho nhiều loại phần cứng, bao gồm tất cả các máy tính cá nhân thông thường và ước tính khoảng 109 điện thoại di động trên toàn thế giới. Nó thậm chí còn được tích hợp vào hầu hết các trình duyệt web. Nhu cầu dịch mã byte sang hướng dẫn phần cứng thêm một lớp chi phí hoạt động, làm giảm hiệu suất thường là trung gian giữa các ngôn ngữ được biên dịch và không được tối ưu hóa. Mã có xu hướng phức tạp và tốn thời gian để viết như mã của các ngôn ngữ được biên dịch, nhưng có lợi thế là mã tuân thủ có xu hướng khá di động, trừ khi các gói dành riêng cho máy được sử dụng để cải thiện tốc độ, đồ họa, v.v. Mặc dù những ngôn ngữ này khá hấp dẫn đối với các nhiệm vụ lập trình chuyên nghiệp, nhưng cần phải có mức độ thành thạo cao hơn trước khi chúng hữu ích cho khoa học và chúng tôi không thể khuyến nghị sử dụng chúng cho mục đích thông thường

III. CÚ PHÁP CỦA PYTHON

Trong các phần sau của bài báo này, chúng tôi sẽ cung cấp một số ví dụ về mã Python để giải thích các khái niệm khác nhau. Độc giả chưa có kinh nghiệm về ngôn ngữ lập trình hoặc muốn xem Python khác với các ngôn ngữ khác như thế nào có thể muốn giới thiệu về cú pháp Python trước khi tiếp tục. Điều này đã được cung cấp như Phụ lục 1. Điều này cũng thảo luận về sự khác biệt giữa truyền thống (Python 2. 7) và mới (Python 3 hoặc 3. phiên bản x)

Như đã lưu ý trước đây, trình thông dịch Python có thể được sử dụng một cách tương tác, do đó, bạn có thể thử các lệnh lập trình bên dưới bằng cách nhập chúng vào cửa sổ lệnh. Trên thực tế, nhiều ví dụ được hiển thị như chúng sẽ xuất hiện nếu được nhập trực tiếp vào trình thông dịch, sử dụng lời nhắc >>> (hoặc for continuation lines). The same commands can also be placed in a file (sans the prompt characters), saved with the “.py” extension and the entire file can be run as a script.

Trong Phần VII, bên dưới, một cách tiếp cận khác để sử dụng Python tương tác, sử dụng lớp vỏ IPython được trình bày. Khi Python được sử dụng theo cách đó, đầu vào và đầu ra được mở đầu bằng In [1]Out [1] . Các ví dụ cũng được hiển thị ở định dạng đó. (where 1 will be subsequently incremented). Examples are also shown in that format, as well.

IV. CÁC MÔ-đun VÀ GÓI TRONG PYTHON

Điều làm cho Python trở nên có giá trị đối với khoa học là thư viện mô-đun phong phú giúp mở rộng đáng kể khả năng của lập trình viên để thực hiện các tác vụ khác nhau. Lưu ý rằng nếu chưa có gói có chức năng mong muốn, lập trình viên có thể tạo các mô-đun bổ sung. Các gói có thể được viết bằng ngôn ngữ Python hoặc nếu cần tốc độ hoặc một số chức năng khác, bằng C, C+ + hoặc Fortran

A. Cách nhập gói

Python có một số quy ước đặt tên tiêu chuẩn để nhập các mô-đun gói trong một chương trình. Giả sử chương trình của chúng tôi yêu cầu chúng tôi nhập Pandas, NumPy và một phần của gói Matplotlib. Thông thường, điều này được thực hiện khi bắt đầu chương trình, như bên dưới

nhập numpy nhập gấu trúc dưới dạng pd nhập matplotlib. pyplot dưới dạng plt

Trong trường hợp này, chúng tôi đã xác định các từ viết tắt pdplt to simplify later typing. To use the Pandas read_csv của Pandas, chúng tôi gọi nó là pd. read_csv . Nếu chỉ sử dụng nhập gấu trúc , tham chiếu sẽ cần được tham chiếu là pandas. read_csv . Python cho phép chúng ta loại bỏ việc sử dụng các tiền tố không gian tên này bằng cách sử dụng lệnh from pandas import * , nhưng đây là một cách lập trình rất kém. Tiền tố làm cho người đọc mã hiểu rõ những thói quen nào được xác định trong mô-đun hiện tại so với trong một mô-đun hoặc gói khác. Nếu từnhập * được sử dụng với nhiều gói và các gói này chứa .

B. Các mô-đun tích hợp sẵn

Có hơn 200 mô-đun trong thư viện chuẩn của Python, được gọi là “tích hợp sẵn” vì chúng được phân phối cùng với Python như một phần của quá trình cài đặt cơ bản. Cách tiếp cận “bao gồm pin” này cung cấp chức năng cơ bản mà người ta mong đợi ở bất kỳ ngôn ngữ máy tính hiện đại nào. Ví dụ về điều này bao gồm. mô-đun datetime , được sử dụng để giải thích, so sánh và thao tác với các biểu diễn ngày, giờ và quả địa cầu< . Một số mô-đun cung cấp chức năng tinh vi hơn, chẳng hạn như module which is used to search for files. Some of the modules provide more sophisticated functionality, such as sqlite3 , triển khai cơ sở dữ liệu đơn giản và các mô-đun cho phép Python chạy máy chủ web bằng các lệnh rất đơn giản. Trên mạng có một danh sách đầy đủ các gói cài sẵn (https. // tài liệu. con trăn. org/2/thư viện/). Một khó khăn với Python là vì có quá nhiều khả năng trong thư viện tiêu chuẩn nên khó có thể xác định được quy trình mà một người cần – và có thể có nhiều cách để hoàn thành một thao tác. Các công cụ tìm kiếm như Yahoo, Google hoặc Bing cũng có thể hữu ích. Một truy vấn chẳng hạn như “Python tìm các phần tử duy nhất trong danh sách” có thể sẽ đưa ra một giải pháp đơn giản, chẳng hạn như lệnh gọi list[set(l)] . l to a set, which only contains each unique element once and then converts the set back to a list, thus eliminating duplicates.

Các nhà khoa học học Python chắc chắn nên đọc các mô-đun xử lý số (https. // tài liệu. con trăn. org/2/library/numeric. html) của tài liệu Python. Các mô-đun này cung cấp các khả năng như hàm lượng giác (nhưng lưu ý rằng gói NumPy, Phần V. A1, cung cấp giải pháp thay thế nhanh hơn cho các hoạt động này trong mảng. ) Các mô-đun tích hợp này cung cấp khả năng tạo số ngẫu nhiên và cũng có thể được sử dụng để thực hiện tính toán ở mức độ chính xác tùy ý hoặc thậm chí khi các số hữu tỷ được lưu trữ và thao tác dưới dạng phân số chính xác cho phép thực hiện một số loại tính toán nhất định mà không có lỗi làm tròn số

C. Gói bổ trợ Python

Như sẽ được thảo luận dưới đây trong các phần tiếp theo, mối quan tâm lớn của các nhà khoa học là các thư viện và mô-đun “tiện ích bổ sung” khác nhau không phải là một phần chính thức của Python, nhưng bổ sung các tính năng quan trọng. Chúng được viết bởi các cá nhân hoặc nhóm lập trình viên và phải được thêm vào bản cài đặt Python cơ bản. Các mô-đun này thường được nhóm thành các gói đã được viết để giải quyết các nhu cầu cụ thể hoặc mở rộng khả năng của Python. Ví dụ: các gói Python để xử lý số sẽ đơn giản hóa mã hóa và/hoặc tăng tốc các tính toán này. Các gói bổ sung này, chẳng hạn như Python, được phân phối dưới dạng mã nguồn mở và thường có giấy phép không hạn chế. Các gói tiện ích bổ sung của bên thứ ba này mở rộng đáng kể tiện ích của Python, nhưng gây ra sự phức tạp do phân phối riêng biệt của chúng. Một chương trình Python cần các gói bổ trợ yêu cầu một “ngăn xếp” Python phức tạp hơn, vì cả trình thông dịch và (các) gói phải được cài đặt ở bất kỳ nơi nào chương trình Python sẽ được sử dụng

Cần lưu ý rằng mặc dù quá trình chuyển đổi từ Python 2 sang Python 3 được thảo luận trong Phụ lục 1 chỉ yêu cầu những thay đổi nhỏ trong tập lệnh Python (nếu có), nhưng cần có những thay đổi sâu rộng hơn đối với mã được viết bằng ngôn ngữ biên dịch được sử dụng bên trong nhiều gói Python. Điều này đã làm trì hoãn khả năng cung cấp các phiên bản Python 3 của nhiều gói khoa học

D. Trình quản lý gói Python và bản phân phối Linux

Sự phụ thuộc là một vấn đề quan trọng trong bất kỳ môi trường tính toán nào và điều này trở nên phức tạp đối với Python khoa học, một phần là do ngăn xếp khoa học đã phát triển nhiều năm sau khi ngôn ngữ này ra đời. Do đó, hệ sinh thái đóng gói cho Python khoa học hơi lộn xộn và khó hiểu đối với người mới bắt đầu sử dụng ngôn ngữ này, do có nhiều thư viện phụ thuộc lẫn nhau và các phụ thuộc khác. Python cũng có bộ trình quản lý gói riêng được xây dựng riêng để xử lý “địa ngục phụ thuộc” này cho các bản phân phối Python khoa học, với các công cụ được sử dụng phổ biến nhất để cài đặt gói và quản lý phụ thuộc

  • pip (https. //pip. pypa. io/en/latest/) là trình quản lý phụ thuộc và gói chính thức của Python.

  • điều kiện (https. //github. com/conda/conda/) trình quản lý gói nhị phân đa nền tảng, một sản phẩm mã nguồn mở của Continuum Analytics, Inc. (www. sự liên tục. io), đặc biệt thuận tiện.

Giải pháp đơn giản nhất là tìm và cài đặt một bản phân phối của bên thứ ba cung cấp cấu hình Python với tất cả các gói mà người dùng có thể cần. những cái phổ biến nhất là

  • Anaconda (http. // tiếp tục. io/downloads) Lưu ý rằng điều này bao gồm trình quản lý gói conda.

  • Tán cây (https. //www. say mê. com/products/canopy/).

  • Python(x, y) (https. //mã số. Google. com/p/pythonxy/).

Anaconda và Canopy hỗ trợ máy tính Windows, Linux và Macintosh, trong khi Python(x,y) chỉ có bản phân phối cho Windows và Linux

Ngoài ra, hầu hết các bản phân phối Linux đều có chương trình cài đặt phần mềm và thư viện phong phú gồm các gói phần mềm đã được kiểm tra kỹ lưỡng, thường bao gồm nhiều tài nguyên phát triển phần mềm khoa học Python. Trong số các phiên bản Linux phổ biến nhất, Debian và Ubuntu sử dụng “dpkg” (https. //wiki. debian. org/Teams/Dpkg) làm công cụ quản lý gói, trong khi các hệ thống dựa trên vòng/phút như Fedora/RedHat sử dụng “yum” (http. // ngon. bazơ. org) làm công cụ quản lý gói dòng lệnh của họ. Giao diện người dùng dựa trên GUI để chạy dpkg và yum cũng thường được cung cấp

Các công cụ khác cho phiên bản Python và quản lý môi trường là

  • virtualenv (https. //pypi. con trăn. org/pypi/virtualenv) là một công cụ để định cấu hình Python sao cho chỉ một số gói nhất định mới hiển thị. Ví dụ: điều này cho phép thử nghiệm phần mềm với các phiên bản đã chọn của các gói Python khác nhau khi cài đặt nhiều phiên bản.

  • virtualenvwrapper (https. //pypi. con trăn. org/pypi/virtualenvwrapper) là một tiện ích mở rộng trình bao bọc cho virtualenv giúp việc sử dụng nó thuận tiện hơn.

  • pyenv (https. //github. com/yyuu/pyenv) Sử dụng shell (e. g. Bash) để quản lý cài đặt các phiên bản Python khác nhau.

V. KHẢO SÁT CÁC GÓI PYTHON BỔ SUNG ĐƯỢC CÁC NHÀ KHOA HỌC QUAN TÂM

Trang web PyPI (https. //pypi. con trăn. org) cung cấp chỉ mục cho các gói Python được phân phối tự do. Trang web này liệt kê >40 000 gói (. ), nhưng không phải tất cả đều có chất lượng như nhau và nhiều nơi không còn được bảo trì. Đôi khi người ta có thể tìm thấy bằng chứng lịch sử cho các cách tiếp cận song song để giải quyết vấn đề trước khi cộng đồng giải quyết một phương pháp ưa thích. Tuy nhiên, việc tìm kiếm ngay cả một bộ mã không rõ ràng bị bỏ rơi cho một nhiệm vụ cụ thể có thể giúp ích rất nhiều trong việc giải quyết một dự án. Số lượng lớn các gói bên ngoài vừa là lợi ích vừa là gót chân Achilles đối với người dùng Python. Gần như chắc chắn rằng người ta có thể tìm thấy một gói có các thói quen có giá trị cho bất kỳ dự án nào, nhưng sau đó nó phải được cài đặt và nếu phần mềm được phân phối, người dùng sẽ cần phải làm như vậy. Đây là lý do tại sao quản lý gói, như đã mô tả trước đây, trở nên rất có giá trị

Dưới đây chúng tôi thảo luận về một số gói yêu thích của tác giả. Tất cả đều có sẵn trên nhiều nền tảng trên ít nhất là trên tất cả các máy tính thông thường, mặc dù có lẽ không phải trên điện thoại thông minh và máy tính bảng. Tất cả đều được phát miễn phí. Không phải tất cả chúng đều có sẵn cho Python3. x, nhưng điều này có thể thay đổi muộn nhất là vào năm 2015 hoặc 2016

A. Phép tính

Gõ động giúp Python dễ sử dụng hơn C. Nó cực kỳ linh hoạt và linh hoạt, giúp sử dụng hiệu quả thời gian phát triển. Trong những trường hợp cần đến các kỹ thuật tối ưu hóa có sẵn trong C hoặc Fortran, Python cung cấp các móc nối dễ dàng vào các thư viện đã biên dịch. Python cuối cùng trở thành một ngôn ngữ cực kỳ hiệu quả cho nhiệm vụ chung là thực hiện khoa học thông qua phần mềm và là một trong những lý do tại sao việc sử dụng Python trong nhiều cộng đồng khoa học đã liên tục phát triển. Dưới đây chúng tôi thảo luận về một số gói giúp tính toán toán học dễ dàng trong Python

1. NumPy

NumPy là gói nền tảng được sử dụng trong điện toán khoa học với Python. Nó được cấp phép theo giấy phép BSD, cho phép tái sử dụng với một số hạn chế. Trong số các tính năng khác, nó hỗ trợ các thao tác trên mảng lớn, nhiều chiều và ma trận cho phép thao tác với các đối tượng mảng N chiều. Nó cũng cung cấp một thư viện lớn các hàm toán học cấp cao để hoạt động trên các mảng này, bao gồm các hàm quảng bá trên mảng. Các tính năng toán học khác bao gồm hỗ trợ đại số tuyến tính, phép biến đổi Fourier và khả năng số ngẫu nhiên

Cấu trúc dữ liệu mảng “ndarray” hoặc mảng N chiều là chức năng cốt lõi trong NumPy, được sử dụng làm vùng chứa cho nhiều giá trị (van der Walt et al. , Tham khảo van der Walt, Colbert và Varoquaux 2011). Tuy nhiên, không giống như cấu trúc dữ liệu “danh sách” của Python, tất cả các phần tử trong một ndarray phải có cùng kiểu; .

Để chứng minh sự khác biệt giữa danh sách và ndarray, chúng ta hãy xem xét rằng danh sách Python có thể chứa hỗn hợp nhiều loại dữ liệu khác nhau

>>> list_subject_years = ['Sinh học', 'Vật lý', '. Hóa học', 2011, 2012, 2014]

Ngược lại, một mảng NumPy được gõ. Ở đây, một danh sách các số nguyên lồng nhau được viết lại dưới dạng một mảng float hai chiều (2D)

>>> nhập numpy dưới dạng np >>> convertgf = [[106, 177, 44], [32, 47, 30], [133, 116, 112]] >>> bitmap = np. mảng(convertgf, dtype = float) >>> df = bitmap/255 >>> print(df) [[0. 41568627 0. 45882353 0. 17254902], [ 0. 1254902  0. 18431373 0. 11764706], [ 0. 52156863 0. 45490196 0. 43921569]])

Lưu ý rằng ở trên, tất cả các phần tử mảng đều được chia tỷ lệ ( bitmap/255 ) trong một thao tác NumPy. Với một danh sách, điều này sẽ yêu cầu một vòng lặp.

Vì NumPy có hỗ trợ tích hợp cho các ndarray được ánh xạ bộ nhớ, nên tất cả các mảng NumPy có thể được xem trong bộ đệm bộ nhớ được cấp phát bởi C/C+ +. Yêu cầu rằng tất cả các mục trong một mảng NumPy có cùng loại cho phép cơ chế truy cập bộ nhớ hiệu quả hơn so với mô hình đối tượng của Python và dẫn đến các phép tính nhanh hơn so với Python cơ bản. Khả năng xác định vùng chứa đa chiều hiệu quả của dữ liệu chung cùng loại trên nhiều cơ sở dữ liệu khác nhau đảm bảo tính di động của dữ liệu, một yêu cầu chính đối với các dự án khoa học lớn. Tuy nhiên, mặc dù các mô-đun vector hóa hoạt động của NumPy và gọi mã được biên dịch, NumPy vẫn có thể chậm hơn nhiều so với các ngôn ngữ hiện đại khác như Julia và thậm chí cả Fortran và C được tối ưu hóa

a. Thực hiện tính toán hiệu quả với NumPy

NumPy cho phép thực hiện một số tính toán chuyên sâu về mặt tính toán với tốc độ tương đương với tốc độ của mã Fortran hoặc C (và đôi khi vượt quá chúng, vì bản thân các quy trình NumPy thường được tối ưu hóa cao). Làm điều này yêu cầu viết các phép tính số theo cách giảm thiểu vòng lặp, trong đó mỗi lệnh gọi hàm NumPy sẽ xử lý càng nhiều giá trị càng tốt, thường sử dụng đại số tuyến tính và đôi khi mở rộng thành các mảng có 3, 4 hoặc nhiều chiều hơn

Để làm ví dụ về cách thức hoạt động của tính năng này, chúng ta hãy tính toán một phần của phương trình nhân tố cấu trúc

Python có hữu ích cho sinh viên khoa học không?
$${F_{hkl}}=\sum {{\,f_j}\exp \lsqb 2\pi i\lpar h{x_j}+k{y_j}+l{z_j}\rpar \rsqb }$$

Để đơn giản hóa điều này một chút, chúng ta có thể giả sử một tâm đối xứng, sao cho F hkl đều là số thực và f j giống nhau đối với mọi nguyên tử và sẽ bị bỏ qua. Sau đó chúng tôi nhận được

Python có hữu ích cho sinh viên khoa học không?
$${F_{hkl}}=\sum {\cos \lsqb 2\pi \lpar h{x_j}+k{y_j}+l{z_j}\rpar \rsqb }$$

Chúng tôi sẽ xác định trong Python các phản xạ dưới dạng danh sách lồng nhau của các giá trị hkl, [[h 1 k 1 l 1], [h 2 k 2 l 2],,…] chẳng hạn như

ref = [[1,0,0], [0,1,0], [0,0,1], [1,1,0], [0,1,1], [0,1,0]

so ref[j] là [h j ,k j ,l j ] và ref [j][i] is h j , k j , or l j , for i = 0, 1, or 2, respectively. Likewise, we can define a nested list for atom coordinates, where atom[j] là [x j , y j , z j ] và atom [j][i] is x j , y j , or z j for i = 0,1, or 2, respectively:

nguyên tử = [[0,0. 5,0. 5], [0. 5,0,0. 5], [0. 5,0. 5,0], [0. 5,0. 5,0. 5]]

Khi đó, cách đơn giản để tính toán danh sách các giá trị F hkl là dịch trực tiếp công thức toán học cho F hkl sang Python, vì người ta có thể viết mã C hoặc Fortran bằng một vòng lặp lồng đôi

>>> nhập toán >>> atom = [[0,. 5,. 5], [. 5,0,. 5],[. 5,. 5,0], [. 5,. 5,. 5]] >>> ref = [[1,0,0], [0,1,0], [0,0,1], [1,1,0], [0,1,1], [ . …    s = 0 …    đối với j2 trong phạm vi(len(atom)). …    c = 0 …     cho i trong phạm vi(3). …        c +=  ref[j1][i] * nguyên tử[j2][i] …   s +=  toán. cos(2 * toán. pi*c) …    F. append(s) … >>> F [-2. 0, -2. 0, -2. 0, 0. 0, 0. 0, -2. 0, 2. 0]

Điều này hoạt động, nhưng để cho thấy cách tính toán tương tự này có thể được thực hiện mà không có bất kỳ vòng lặp nào bằng NumPy, chúng ta có thể lặp lại điều này dưới dạng tính toán ma trận. Lưu ý rằng chúng ta có thể truyền danh sách lồng nhau, atomref , vào . Lưu ý rằng phần tử hình cung cấp cho chúng tôi kích thước, (4 × 3) và (7 × 3).

>>> np. mảng (nguyên tử) mảng ([[0. , 0. 5, 0. 5],     [0. 5, 0. , 0. 5],     [0. 5, 0. 5, 0. ],     [0. 5, 0. 5, 0. 5]]) >>> np. mảng (nguyên tử). hình dạng (4, 3) >>> np. mảng(ref) mảng([[1, 0, 0],     [0, 1, 0],     [0, 0, 1],     [1, 1, 0],     [0, 1, 1],     [0, . mảng (tham khảo). hình dạng (7, 3)

Nội dung của vòng lặp trong cùng, ở trên, ở trên tính toán một tích bên trong, trong đó mỗi hàng của hai mảng được nhân và sau đó được tính tổng. Điều này có thể được thực hiện với np. inner() , tạo ra một mảng (7,4) trong một lần gọi.

>>> np. mảng bên trong (ref, nguyên tử) ([[0. , 0. 5, 0. 5, 0. 5],     [0. 5, 0. , 0. 5, 0. 5],     [0. 5, 0. 5, 0. , 0. 5],     [0. 5, 0. 5, 1. , 1. ],     [1. , 0. 5, 0. 5, 1. ],     [0. 5, 0. , 0. 5, 0. 5],     [1. , 1. , 1. , 1. 5]])

Lưu ý rằng np. inner() yêu cầu hai ndarray làm đầu vào, nhưng sẽ chuyển các danh sách lồng nhau của chúng tôi sang dạng đó. [Chúng tôi có thể tránh điều đó bằng cách thực hiện chuyển đổi một cách rõ ràng bằng cách sử dụng np. bên trong (np. mảng (ref), np. mảng (nguyên tử)) . ]

This inner product multiples the first set of coordinates, [0. ,0. 5,0. 5] , theo phản xạ đầu tiên, [1,0,0] , từng phần tử một và sau đó thêm . Sau đó, tọa độ nguyên tử thứ hai, [0. ,0. 5,0. 5] , are multiplied by the same hkl value, (yielding 0. 5) for the second term in the first row (and so on). We can then easily multiply every element in the matrix from np. inner() times 2 and π and take the cosine of each term.

>>> np. cos(2. * np. pi * np. inner(ref, atom)) array([[1. , -1. , -1. , -1. ],     [-1. , 1. , -1. , -1. ],     [-1. , -1. , 1. , -1. ],     [-1. , -1. , 1. , 1. ],     [1. , -1. , -1. , 1. ],     [-1. , 1. , -1. , -1. ],     [1. , 1. , 1. , -1. ]])

Note that the standard math module cos() function can only compute one value at a time, whereas the corresponding function in NumPy can handle single values as well as arrays. In fact, np. cos() hoàn toàn có thể thay thế math. cos() .

Finally, we want to sum the contents of each row, which can be done with np. sum(, axis = 1) , where 1 refers to the second array dimension (since Python uses 0-based indexing, we count starting at zero).

Sử dụng cách tiếp cận này, chúng ta có thể giảm ví dụ trước xuống còn năm dòng mã, nhưng tất cả các tính toán được thực hiện trong một dòng duy nhất

>>> atom = [[0,. 5,. 5], [. 5,0,. 5],[. 5,. 5,0], [. 5,. 5,. 5]] >>> ref = [[1,0,0], [0,1,0], [0,0,1], [1,1,0], [0,1,1], [ . tổng (np. cos(2. * np. pi * np. inner(ref,atom)), axis = 1) >>> F array([-2. , -2. , -2. , 0. , 0. , -2. , 2. ])

Với số lượng nhỏ các giá trị được sử dụng ở trên, quá trình tính toán này mất một lượng thời gian không đáng kể, nhưng với nhiều nguyên tử và phản xạ hơn, điều này không đúng. Điều này đã được chứng minh bằng cách lặp lại điều trên với 500 nguyên tử và 5000 phản xạ. Sau đó, quá trình tính toán sử dụng phương pháp mã hóa đầu tiên cần 37 giây để hoàn thành, trong khi phương pháp thứ hai, với một dòng mã NumPy được tối ưu hóa duy nhất, chỉ cần 0. 1 giây

2. Khoa học

khoa học viễn tưởng (http. //www. scipy. org/scipylib/) là một gói được xây dựng dựa trên và phân phối cùng với NumPy. Nó chứa nhiều quy trình phân tích số khác nhau, chẳng hạn như biến đổi Fourier thực và phức tạp, tích hợp, nội suy, xử lý hình ảnh và trình tối ưu hóa. Nó được sử dụng rộng rãi trong các lĩnh vực từ kỹ thuật điện cho đến tin sinh học và hải dương học và thậm chí cả tài chính.

SciPy có một số tính năng nâng cao tiện lợi như “ma trận thưa thớt” – một ma trận gần như trống rỗng chỉ lưu trữ các mục khác không. Lưu trữ các số không là một sự lãng phí tài nguyên và việc tính toán có thể được đơn giản hóa bằng cách chỉ xử lý các phần tử khác không. SciPy cũng có thói quen cho. thao tác hình ảnh, lọc hình ảnh, thuộc tính đối tượng (phân đoạn) và trích xuất tính năng (phát hiện cạnh)

3. Numba

Numba (http. // tê liệt. pydata. org) is an open-source optimizing compiler for Python, sponsored by Continuum Analytics, Inc. Nó bổ sung tính năng biên dịch tức thời cho Python, nghĩa là khi cần tính toán được chỉ định trước tiên, trình biên dịch sẽ tạo mã máy được tối ưu hóa cụ thể cho máy tính đang được sử dụng hiện tại. Nó tích hợp với NumPy và cung cấp khả năng cho các phần yêu cầu tính toán của chương trình được gửi đến phần cứng chuyên dụng (chẳng hạn như GPU). Do đó, nó tích hợp với ngăn xếp phần mềm khoa học Python cũ hơn để đảm bảo tính di động của mã và thường cung cấp hiệu suất tương đương hoặc vượt trội so với mã hóa C, C+ + và Fortran truyền thống

Numba sử dụng hai mã đặc biệt được gọi là trình trang trí, “@jit” và “@autojit” để tăng tốc độ biên dịch và tối ưu hóa hiệu suất. Trình trang trí jit trả về một phiên bản đã biên dịch của hàm bằng cách sử dụng các loại đầu vào và loại đầu ra của hàm. The autojit decorator does not need type specification. Nó xem các loại được gọi bởi hàm và suy ra loại trả về. Khi mã được biên dịch trước đó tồn tại, nó được sử dụng lại. If not, it generates machine code for the function and then executes that code

4. Scikit-learn

Scikit-learn (http. //scikit-learn. org) is a machine-learning package written in Python. Machine learning is a form of artificial intelligence for pattern recognition, where the software generates rules to classify information by being “trained” on input datasets that have already been classified. For example, k-means clustering is a popular algorithm for data mining from text documents. Another example of the clustering technique in machine learning is “unsupervised learning”, which tries to create structure within unlabeled data, where no pre-defined datasets are used. Scikit-learn was developed as an extension to SciPy

5. Sympy

SymPy (http. //sympy. org/en/) is a module for performing symbolic mathematics. Hầu hết các tính toán khoa học được thực hiện bằng số, e. g. where equations are evaluated with specific values. With symbolic processing, such as is implemented in Mathematica and Maple, the equations themselves are manipulated. Thus, SymPy can determine that the derivative of sin(x) with respect to x is cos(x). This is done directly on the expression and without use of any numerical values for x

6. Theano

Theano (http. //deeplearning. net/software/theano/) là một thư viện Python khác để tính toán hiệu quả các biểu thức toán học liên quan đến mảng nhiều chiều. Most importantly, it has tight integration with NumPy, with dynamic C code generation support that allows faster expression evaluation. It supports symbolic differentiation and offers optimization and extensive unit testing

Theano uses graph structures for defining all mathematical relations by using symbolic placeholders known as “Variables”, which are the main data structure-building blocks. Theano has strict typing constraints to allow it to tailor C code to statically optimize the computation graph. Variables can be an instance of a NumPy ndarray, or an array of 32-bit integers (“int32”) or have a shape of 1 × N. Broadcasting is a feature that exists in NumPy, but primarily for scalars and arrays. Theano extends broadcasting to cases where dimensions are added to an array. Another feature of Theano is the different types of computational optimizations that can be performed globally or locally

B. Big Data Processing Packages

The term “Big Data” is used for computation involving very large collections of information, usually too large to fit in the memory of a single computer. For example in diffraction, experiments involving large numbers of area detector images can reach the scale of a terabyte

1. Pandas

Pandas (http. //pandas. pydata. org) is a powerful data analysis manipulation library for Python, which provides an easy tool for working with multi-dimensional data structures (McKinney, 2012). The documentation is available online (http. //pandas. pydata. org/pandas-docs/stable/)

Matrix operations are commonly used in scientific computations and Pandas uses the “DataFrame” data structure, which makes it easy to work with data stored in relational databases, text or spreadsheet data files such as Excel files (tab- or comma-separated values), time-series financial data analysis, multi-dimensional arrays, and statistical regressions on large datasets. A DataFrame is essentially a “2D array” with rows and columns of data, such as a spreadsheet

Creating a DataFrame from an original set of records is simple, and as an example, we use some financial data for General Electric (GE) stock that has been uploaded to a git repository (https. //gitlab. com/aleph-omega/stockex-usa) để dễ tham khảo. (Note that these files are quite large in size. )

To show how adept Pandas is at accessing “spreadsheet” data, below we read data from the file into a DataFrame object using pandas. read_table for tabulation in the second line. The subsequent line slices through the DataFrame to pull in the first 11 records

In [1]. import pandas as pd     df = pd. read_csv('. /Aleph-Omega/stockex-usa/GE-1990-2014-stocks. csv')     df = df[. 11]     print(df) Out [1]. Ngày    Mở  Cao  Thấp  Đóng  Điều chỉnh âm lượng Đóng     2014-07-03 26. 81 26. 89 26. 78 26. 86 20513900 26. 86     2014-07-02 26. 35 26. 65 26. 34 26. 61 21246500 26. 61     2014-07-01 26. 27 26. 50 26. 26 26. 40 28054100 26. 40     2014-06-30 26. 44 26. 45 26. 22 26. 28 29661100 26. 28     2014-06-27 26. 29 26. 43 26. 23 26. 43 35155200 26. 43     2014-06-26 26. 46 26. 46 26. 20 26. 29 23159000 26. 29     2014-06-25 26. 47 26. 51 26. 34 26. 42 26261200 26. 42     2014-06-24 26. 66 26. 88 26. 51 26. 58 26418900 26. 58     2014-06-23 27. 05 27. 06 26. 60 26. 68 31217700 26. 68     2014-06-20 27. 02 27. 04 26. 87 26. 97 49734400 26. 97     2014-06-19 26. 66 26. 98 26. 66 26. 93 31605200 26. 93     [11 hàng x 7 cột]

Furthermore, Pandas is excellent at memory management, which is crucial for handling Big Data. The “groupby” feature is especially helpful and can reduce lengths of Python scripts by an order of magnitude over what is required with other languages. Chúng tôi có thể đạt được điều này bằng cách chia dữ liệu của mình thành các nhóm nhỏ hơn, dựa trên các tiêu chí được xác định trước, sau đó bằng cách viết các hàm sẽ được áp dụng riêng cho từng nhóm với đầu ra được kết hợp thành một khung dữ liệu

Pandas speeds up computation, as well as allows for rapid coding and improved code maintenance, since it is much easier to express a mode of analysis with fewer lines of code. Do các hoạt động như hợp nhất, sắp xếp, nhóm và tạo biến mới được thực hiện trong gói, trong mã máy được biên dịch và tối ưu hóa, nên tốc độ đạt được có thể rất lớn

2. Blaze

Blaze (http. // bùng cháy. pydata. org) is a mechanism to build more complex data structures into the framework of NumPy and building on Pandas. Although the ndarray in NumPy requires arrays to have fixed lengths along each dimension, Blaze allows for much more complex structures. It also uses just-in-time compilation, as employed in Numba, to speed computations. Blaze is a fairly recent project, also sponsored by Continuum Analytics, Inc

C. Thống kê

Statistical capabilities are available in some of the previously discussed packages, but the packages described here are specifically designed for statistical analysis

1. PyMC

PyMC (http. //pymc-devs. github. com/pymc/) is a Python module for Bayesian statistical modeling and model fitting that focuses on advanced Markov chain Monte Carlo fitting algorithms, fitting sampling algorithms (such as Hamiltonian Monte Carlo), numerical optimization, and also for solving unconstrained non-linear optimization problems. Its flexibility and extensibility make it applicable to a large suite of problems

2. Statsmodels

Statsmodels (https. //github. com/statsmodels/statsmodels) is a Python library package for econometrics, plotting functions, statistical modeling, and tests, which provides a complement to SciPy for statistical computations, including descriptive statistics, and estimation and inference for statistical models. Các nhà nghiên cứu có thể khám phá dữ liệu, ước tính các mô hình thống kê, thực hiện các bài kiểm tra thống kê và sử dụng dữ liệu đó để tính toán thống kê và phân tích dữ liệu bằng Python. Statsmodels runs on Python 2. 5 through 3. 2 versions and some useful features it supports are

  • Linear regression models

  • Các mô hình tuyến tính tổng quát

  • Các mô hình lựa chọn rời rạc

  • Robust linear models

  • Many models and functions for time series analysis

  • Non-parametric estimators

  • A collection of datasets for examples

  • A wide range of statistical tests

  • Input–output tools for producing tables in a number of formats (text, LaTeX, HTML) and for reading files into NumPy and Pandas

  • Plotting functions

  • Extensive unit tests to ensure correctness of results

  • Many more models and extensions in development.

D. Visualization and image-processing packages in Python

Python excels at the graphical display of data, which is an important aspect of scientific analysis. Graphical display can be separated into two categories. 2D representations and pseudo-three-dimensional (3D) ones. In the case of 3D, objects are portrayed as viewed from a particular direction, but that direction can usually be manipulated interactively. This allows the viewer's brain to interpret the representation as if an actual physical object had been seen

A related computational task is the interpretation and transform of digital images. Some capabilities for image processing can be found in SciPy (5. 1. 2), but more sophisticated capabilities are also discussed below

1. Matplotlib

Matplotlib (http. //matplotlib. org/) is a scientific 2D graphics library consisting of a programming interface that creates vector graphics representation and renders it for output display (Hunter, Reference Hunter 2007). The advantage of vector graphics is that the resulting plots can be shown at very high quality, as might be used for a journal article or presentation. Matplotlib can also be used interactively to plot results, such as one might use in a spreadsheet environment. Simple Matplotlib commands can be used to generate graphics easily. Như một ví dụ về việc sử dụng Matplotlib đơn giản như thế nào, trong ví dụ mã sau, NumPy được sử dụng để tính toán một mảng gồm 500 điểm trong phạm vi từ 0. 0 to 6π and then a new array is created containing the sine of each value in the previous array. Finally, the a plot is generated, where the x-axis is the first plot, but indicated in units of π and the y-axis shows the sine values.

>>> import numpy as np >>> import matplotlib. pyplot as plt >>> x = np. linspace(0,6*np. pi,500) >>> y = np. sin(x) >>> plt. plot(x/np. pi,y) >>> plt. show()

The resulting plot, as it appears on the screen, is shown in Figure 1. Note that even with this very simple plotting command, the resulting plot is quite fully featured. The icons at the upper left allow the plot to be repositioned in the window, including “zooming”, and the plot can be saved as a higher resolution bitmap file. At the bottom, the position of the cursor is displayed as it is moved around in the window

Python có hữu ích cho sinh viên khoa học không?

Figure 1. (Color online) An example of simple screen graphics from the Matplotlib package, generated with a simple command. Lưu ý rằng cốt truyện có thể được thay đổi và phóng to. Also, the cursor position is indicated.

Gói Matplotlib cũng rất phù hợp để tạo đồ họa phức tạp và người đọc nên xem thư viện web (http. //matplotlib. org/gallery. html) of very complex and beautifully formatted sample Matplotlib graphs and the corresponding (usually quite simple) example code to see what can be done with Matplotlib

It is also possible to use Matplotlib for interactive applications, where the user can interact with the graphics through mouse clicks and the keyboard. This, however, is not always implemented as conveniently as might be liked

2. Chaco

Chaco (http. //code. enthought. com/projects/chaco/) is another scientific graphics library intended more for display than creation of “hard-copy” plots – it generates attractive static 2D plots. Although it also works well for interactive data visualization and exploration, it does not offer all the sophistication of Matplotlib, but it is quite easy to use

3. Hiệu ứng mờ

Bokeh (http. //bokeh. pydata. org) is an interactive visualization library for Python and other languages for making powerful graphical presentations. With graphics that rival the widely used D3. js JavaScript library, it delivers good performance with large datasets, but is integrated with Python. It works well with the IPython Notebook. Bokeh is compatible with Matplotlib. With it, programmers can easily create applications to deliver high-performance interactive visualization of large datasets

4. Mayavi

Mayavi (http. //code. say mê. com/projects/mayavi/) is a toolkit for 3D visualization of scientific data in Python, a part of the Enthought Tool Suite (ETS). Data plotted in Mayavi correspond to 3D objects that can be “rotated” on the computer display, allowing people to better understand the 3D nature of the displayed information. Mayavi is built on top of the very sophisticated VTK (http. //www. vtk. org/) system, which also provides a Python interface. The interactive 3D display graphics are performed using a combined hardware/software protocol known as OpenGL. Alternately, very high-performance interactive graphics can be performed in Python with direct use of OpenGL calls through use of the PyOpenGL (http. //pyopengl. sourceforge. net/) package, but this is considerably more difficult and is not recommended for most uses

5. Scikit-image

Scikit-image (http. //scikit-image. org) is a machine-learning module built on top of SciPy specifically for image processing (see scikit-learn, above), Source code (https. //github. com/scikit-learn/scikit-learn)

6. PIL/pillow

PIL (http. //www. pythonware. com/products/pil) is the Python Imaging Library. This contains routines for reading and processing images. Thư viện này là một công cụ đơn giản và hữu ích cho những người bắt đầu thao tác với hình ảnh để tìm hiểu những điều cơ bản. However, it had not been updated in some years and support for Python 3. x was not planned. Hence, a fork-called pillow (https. //pypi. python. org/pypi/Pillow/) was developed to enhance PIL. The two projects were later integrated into a single codebase, so that the packages are largely interchangeable

As an example of how this package is used, we will read a rather famous image file from Wikipedia and perform some simple processing steps

Trong 2]. # retrieve a public-domain image and write as a file locally     import urllib2     URL =  'http. //upload. wikimedia. org/wikipedia/commons/thumb/e/ec/Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched. jpg/402px- Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched. jpg'     fp = open('Mona. jpg','w')    fp. write(urllib2. urlopen(URL). read())     fp. close()

These commands read and display the image and then convert it to black-and-white

In [3]. # read the image file and display it      import PIL. Image as Image      import matplotlib. pylab as plt      mona = Image. open('Mona. jpg')      plt. imshow(mona) In [4]. # sử dụng PIL để tạo phiên bản đen trắng của hình ảnh      nhập PIL. ImageEnhance as Enhance      enhancer = Enhance. Color(mona)      bw_mona= enhancer. enhance(0)      plt. imshow(bw_mona)

We can examine the image file. In the output below, the format attribute tells us that this is a JPEG image while the size gives us the image width and height in pixels. Cuối cùng, thuộc tính mode cung cấp loại pixel và độ sâu.

In [5]. print(mona. format, mona. size, mona. mode) JPEG (402, 599) RGB

PIL allows images to be converted between different pixel representations, so we will use the convert() method to convert the above-mode attribute (RGB) to luminance (“L”). The output from this is shown as Figure 2. Here each pixel is colored by the luminance value using an arbitrary color scale to show the values (this scale can easily be changed).

In [6]. # display as luminance      im = Image. open("Mona. jpg"). convert(“L”)       plt. imshow(im)

Not only can the Python Imaging Library (PIL) be used to perform image manipulations, but images can also be exported as ndarrays, so that Numpy and Scipy computations may be performed on them

Python có hữu ích cho sinh viên khoa học không?

Figure 2. (Color online) An image that has been recolored to show the luminance of each pixel according to a Matplotlib color mapping.

E. Python for instrument automation

The ubiquity of computers in science extends to instrumentation; many scientific instruments are computer-automated to reduce operational complexity. Các thiết bị khác có khả năng tự động hóa tinh vi đến mức cho phép vận hành từ xa hoặc thậm chí không cần giám sát. Python là một lựa chọn tuyệt vời để tự động hóa các công cụ, vì nó có thể hỗ trợ các thư viện sẽ thực hiện giao tiếp cấp thấp với phần cứng của công cụ cũng như tính toán và đồ họa cấp cao hơn. Likewise, it is also relatively easy to create high-quality graphical user interfaces or web applications for eventual user control. Để Python điều khiển một thiết bị khoa học, cần có trình điều khiển thiết bị triển khai (các) giao thức truyền thông tới thiết bị điện tử của thiết bị. For common communication protocols, such as RS-232 devices (http. //pyserial. sourceforge. net/) hoặc EPICS (http. //cars9. uchicago. edu/software/python/pyepics3/) there exist standard communication libraries. If a vendor provides a function library, such as a Windows “. DLL” module or Linux “. so” library, the ctypes module in the Python standard library can be used to access those functions

The fact that Python code can be executed interactively greatly simplifies creation of an applications programming interface. For example, the highest resolution and most productive powder diffractometer in the USA, the 11-BM instrument at the Argonne Advanced Photon Source, is automated completely in Python (Toby et al. , 2009). A video (http. //youtu. be/86TZpk_Tn1M) is online. The library that drives the appropriate motors, coordinates use of the robot and ancillary equipment, such as for sample temperature control, was initially developed by typing commands into the Python interpreter and then collecting the code that worked. The result was a library of ~3000 lines of code and comments, which provides routines to initialize and drive the instrument, to load or unload a sample or read a sample's barcode, set a temperature, perform a data collection scan, etc. From that point, it was relatively straightforward and only another 1000 lines of commented Python to develop routines that query the instrument database for the details of data collection for each sample, optimize the data collection sequence, and then perform the actual scans. Finally, ~1000 more lines of code were used to develop a graphical user interface that allows an operator to fine-tune data collection parameters. The resulting software can run the instrument for days at a time unattended; recover from loss of the synchrotron beam; and even send text messages to alert an operator, if the program aborts because of unexpected problems

VI. GRAPHICAL USER INTERFACES

Increasingly, scientists wish to create programs with graphic user interfaces (GUI) – applications that display in windows and have buttons and menus that are used to control the program execution. Python có gói GUI tích hợp, Tkinter, trong thư viện tiêu chuẩn của nó, nhưng việc sử dụng gói này không được khuyến khích, vì nó là phiên bản ghép của ngôn ngữ Tcl/Tk, khá vụng về khi sử dụng trong Python. In addition, the resulting GUIs have a rather antique appearance

Hai gói C++ đa nền tảng được sử dụng rất rộng rãi, wxWidgets (http. //www. wxwidgets. tổ chức/) và Qt (http. //qt-project. org/) (phát âm là “dễ thương”) có các thư viện Python được sử dụng rộng rãi. Qt was developed and released for open access by cellphone manufacturer Nokia, is newer, and seems to be attracting more attention at present. The alternative, Python package wxWidgets has been in use for quite a while and has a large user base. Mỗi cái sẽ được thảo luận dưới đây

It should be noted that regardless of which package is selected, GUI programming requires a change in programming paradigm. Traditional software is usually written in a linear fashion, where the program starts, reads some input, produces some results, and stops. GUI-based programs are event-driven, which means they perform a series of initializations when starting and then go into hibernation (in an event loop) and from that point only respond to user actions such as mouse clicks, which in turn initiate “callback” routines. Most code is placed in routines that will be triggered only through these callback routines. Một chương trình GUI thường sẽ chỉ dừng khi một thói quen gọi lại kết thúc chương trình

Một cách tiếp cận khác để tạo GUI cho phần mềm là cung cấp quyền truy cập vào nó từ trình duyệt web. This is typically not a method of choice for very sophisticated interfaces, but is surprisingly effective for many scientific computations. Python has a number of mature web application frameworks, such as Django (https. //www. djangoproject. com/), available for building web sites. As one example the capability of Python for web applications, very large portions of the code used to run the YouTube web site are written in Python. Other languages such as PHP, Java, Ruby, and JavaScript are also used for creating web applications, but these languages do not have the wealth of scientific packages that Python has, so scientific projects using those languages frequently require components to be written in another language. While this is frequently done for commercial work when large teams manage different aspects of a project, using Python for the entire application stack greatly simplifies both development and maintenance tasks, facilitating smaller-scale scientific projects

Another alternative for GUI programming is through the IPython Notebook architecture, which allows notebooks to have interactive widgets (http. //nbviewer. ipython. org/github/ipython/ipython/blob/2. x/examples/Interactive%20Widgets/Index. ipynb). Notebooks can provide the benefits of command line interfaces and graphical interfaces. The IPython package will be discussed in Section VII

1. PyQt and PySide

PyQt (http. //www. riverbankcomputing. com/software/pyqt/intro) is a Python binding of the cross-platform GUI toolkit Qt, providing GUI programming in Python. PyQt is free software implemented as a Python plug-in, but because of license restrictions is avoided by some commercial organizations

PySide (http. //qt-project. org/wiki/pyside) is an alternate and more recent open-source Python binding for Qt, which was fostered by Nokia and avoids the licensing problems that arose with PyQt. PySide is not completely mature software, but it is widely used and should be highly reliable soon, if it is not at that point already. The authors have no experience in use of PySide at present, but would likely select it over wxPython if they start a new project requiring a complex GUI

2. wxPython

wxPython (http. //www. wxpython. org/) là gói liên kết Python dành cho wxWidgets (Rappin và Dunn, Tham khảo Rappin và Dunn 2006). It is a very comprehensive package offering a great wealth of GUI tools that can be adapted into a project. One of this article's authors (BHT) has considerable experience with writing wxWidgets-based GUI codes, for example with the GSAS-II Rietveld code (Toby and Von Dreele, Reference Toby, Huang, Dohan, Carroll, Jiao, Ribaud, Doebbler, Suchomel, Wang, Preissner, Kline and Mooney 2013; idem, Reference Toby and Von Dreele 2014), but still does not find all aspects of this coding to be straightforward.

In order to make wxPython compatible with Python 3. x, gói này đã được phát triển lại và ban đầu được phát hành trong một phiên bản mới vào năm 2013 có tên là “phoenix”, trong khi phiên bản gốc có tên là “cổ điển. ” Hiện tại cả hai đang được cập nhật song song. Không rõ sẽ cần bao nhiêu nỗ lực để di chuyển các chương trình giữa hai

VII. ỨNG DỤNG PYTHON

Có nhiều ứng dụng dựa trên Python hoặc cung cấp khả năng lập trình bằng Python. Như một ví dụ, Sage (http. //www. nhà hiền triết. org) là gói phần mềm toán học độc lập với các tính năng bao gồm nhiều khía cạnh của toán học, bao gồm đại số, tổ hợp, toán số, lý thuyết số và phép tính. Nó sử dụng nhiều gói tính toán nguồn mở với mục tiêu “tạo ra một giải pháp thay thế nguồn mở miễn phí khả thi cho Magma, Maple, Mathematica và Matlab. ” Nó không phải là gói Python có thể nhập, nhưng cung cấp giao diện lập trình Python thuận tiện. Sage cũng có thể được sử dụng cho điện toán dựa trên đám mây, trong đó một tác vụ được phân phối cho nhiều máy tính tại các địa điểm từ xa. Các ví dụ khác bao gồm. Gián điệp (https. //pythonhosted. org/spyder/) một môi trường điện toán và phát triển mã và PyXLL của Enthought (https. //www. pyxll. com/), cho phép nhúng Python vào bảng tính Excel

Chương trình IPython là một trong những công cụ tuyệt vời nhất xuất hiện trong cộng đồng Python (Pérez và Granger, Tham khảo Pérez và Granger 2007). Kiến trúc đầu ra IPython (tệp sổ ghi chép) được xây dựng dựa trên các giao thức được sử dụng rộng rãi như JSON, ZeroMQ và WebSockets, với CSS để tạo kiểu và trình bày HTML cũng như với các tiêu chuẩn mở (HTML, Markdown, PNG và JPEG) để lưu trữ nội dung. Chương trình IPython hiện đang bắt đầu được sử dụng làm môi trường lập trình cho các ngôn ngữ khác, vì nhiều khả năng là chung chung và do sử dụng các tiêu chuẩn mở, các chương trình khác có thể đọc các tệp sổ ghi chép.

Sổ tay IPython phục vụ nhiều mục đích bao gồm. tạo mẫu mã, cộng tác, xem xét tài liệu và gỡ lỗi. Nó kết hợp các công cụ để định hình mã, do đó nếu một chương trình quá chậm, các phần (thường là ngắn) của mã chiếm nhiều thời gian thực thi nhất có thể được xác định và làm lại nhanh chóng. Nó tích hợp tốt với matplotlib và NumPy và có thể được sử dụng như một người có thể sử dụng Matlab, để phân tích dữ liệu một cách tương tác, với đồ họa và tính toán tích hợp. Cuối cùng, IPython cung cấp một cơ chế để thực thi các lệnh Python từ xa. Điều này có thể được sử dụng để phân phối một tính toán lớn cho một siêu máy tính. Do các lệnh Python và các đối tượng dữ liệu nội tại có thể mang theo được nên máy tính từ xa có thể là một kiến ​​trúc hoàn toàn khác với bộ điều khiển. Có lẽ vấn đề lớn nhất với IPython là làm sao để làm chủ tất cả các tính năng

A. IPython dưới dạng shell

Nhiều nhà phát triển sử dụng IPython làm trình bao tương tác để chạy các lệnh Python và hiếm khi gọi Python trực tiếp qua cửa sổ lệnh. Nó cung cấp nhiều lợi thế so với việc chạy Python trực tiếp, chủ yếu là hoàn thành mã. nếu một phần của lệnh hoặc chức năng được nhập và phím tab được nhấn, thì tất cả các lần hoàn thành có thể được hiển thị; . Nó cũng sẽ hiển thị tài liệu chuỗi tài liệu về các hàm và lớp, nếu một lệnh có tiền tố hoặc theo sau một dấu chấm hỏi ( ? ).

Trong IPython, lời nhắc In [#] . được sử dụng trước khi người dùng nhập và Ra [#] . được hiển thị cho các giá trị được trả về từ một lệnh. Biểu tượng # được thay thế bằng một số. Cả VàoRa đều là các ký tự duy trì lịch sử của các lệnh mà .

IPython cung cấp tính năng gọi là “hoàn thành tab” đề xuất các tùy chọn để hoàn tất việc nhập lệnh. Ví dụ: nếu một người không chắc cách gọi hàm căn bậc hai NumPy và nhập np. sq và sau đó nhấn phím tab, IPython phản hồi bằng cách hiển thị ba khả năng hoàn thành, như minh họa bên dưới.

Trong 1]. nhập numpy dưới dạng np Trong [2]. np. np vuông. np sqrt. np vuông. vắt kiệt

Việc nhập thêm r rồi nhấn lại tab sẽ gây ra t to be added, since that is the only valid completion. Placing a question mark before or after the command causes the docstring for the routine to be displayed, such as:

Trong 2]. np. vuông?

Tài liệu này sau đó bao gồm

sqrt(x[, out]) Trả về căn bậc hai dương của một mảng, theo từng phần tử

Thông số ---------- x. array_like    Các giá trị có căn bậc hai là bắt buộc. …

Khi IPython được sử dụng làm môi trường tương tác để phân tích dữ liệu, lịch sử các lệnh trong dict In có thể được sử dụng làm nguồn Python .

IPython cũng có thể được sử dụng để thực thi các lệnh Python trong tệp. Sử dụng lệnh IPython %run , nội dung của tệp có thể được thực thi trong trình thông dịch “mới” hoặc trong ngữ cảnh Python hiện tại ( %run -i). The latter case causes variable definitions in the current session prior to the %run được chuyển vào tệp. Dù bằng cách nào, các biến được xác định trong quá trình thực thi các lệnh trong tệp sẽ được tải vào phiên hiện tại. Lệnh %run cũng có thể được sử dụng để gỡ lỗi, thực thi thời gian và mã định hình.

B. IPython có sổ ghi chép

Sổ ghi chép IPython tương tự như lệnh đang chạy trong IPython dựa trên thiết bị đầu cuối, nhưng sử dụng cửa sổ trình duyệt web (Shen, 2014). Các lệnh Python và kết quả của chúng có thể được lưu lại để liên lạc và cộng tác trong tương lai. Để khởi động IPython ở chế độ này, hãy nhập ipython notebook vào dòng lệnh trên máy tính của bạn. Sổ tay IPython có thể so sánh với một bảng tính chỉ có một cột duy nhất, nhưng trong đó mỗi ô có thể chứa văn bản được định dạng hoặc mã Python, tùy chọn đi kèm với đầu ra từ các lệnh trước đó. Như thể hiện trong Hình 3, đầu ra có thể chứa đồ họa và sơ đồ được nhúng trong sổ ghi chép.

Python có hữu ích cho sinh viên khoa học không?

Hình 3. (Màu trực tuyến) Một ví dụ về phép tính được thực hiện trong sổ ghi chép IPython hiển thị phép tính đơn giản và kết quả được vẽ trên biểu đồ. Tệp sổ ghi chép IPython có thể được chia sẻ qua e-mail hoặc thậm chí trong mạng, với máy chủ được bảo mật.

Do đó, sổ ghi chép IPython là một cách tuyệt vời để

  • các nhà nghiên cứu để cộng tác phân tích dữ liệu,

  • người hướng dẫn để cung cấp các ví dụ thực hành về phép tính và thậm chí có thể là bài tập về nhà hoặc bài kiểm tra,

  • diễn giả giới thiệu mã Python trong các trang trình bày của họ trong các cuộc nói chuyện hoặc hội thảo của họ.

Thông thường, dịch vụ web sổ tay IPython chỉ có thể được truy cập từ máy tính bắt đầu quá trình. Với các biện pháp bảo vệ bảo mật phù hợp, máy chủ sổ ghi chép IPython có thể cho phép các cá nhân tấn công vấn đề lập trình hoặc phân tích dữ liệu với tư cách là một nhóm với tất cả các thành viên của nhóm chạy Python từ cùng một máy chủ bằng IPython thông qua trình duyệt web. Tương tự như vậy, sổ ghi chép IPython có thể được sử dụng trong môi trường lớp học để cho phép một nhóm sinh viên cộng tác làm việc với Python mà không cần phải cài đặt trình thông dịch trên máy tính cá nhân của họ. Ngoài ra còn có các dịch vụ thương mại và miễn phí cung cấp quyền truy cập vào sổ ghi chép IPython trên web, chẳng hạn như Wakari (https. //www. wakari. io/wakari). Notebook cũng có thể được xem miễn phí qua dịch vụ nbviewer (http. //nbviewer. ipython. org/), bằng cách nhập liên kết đến kho lưu trữ gitlab hoặc github của bạn hoặc liên kết đến trang web lưu trữ sổ ghi chép của riêng bạn. Phòng thí nghiệm Jupyter CoLaboratory do IPython tài trợ (https. // phòng thí nghiệm. jupyter. org/welcome/) cho phép chỉnh sửa sổ ghi chép theo thời gian thực và hiện đang sử dụng Google Drive để hạn chế quyền truy cập đối với người dùng có quyền được chia sẻ

Để làm ví dụ về cách IPython có thể được sử dụng để chia sẻ một vấn đề đã giải quyết xong, các tính toán trong phần “Thực hiện tính toán hiệu quả với NumPy” ở trên, được cung cấp tại URL này (https. // anl. hộp. com/s/hb3ridp66r247sq1k5qh) và Tài liệu bổ sung, cũng bao gồm các tệp sổ ghi chép IPython trình bày một số ví dụ mã khác cùng với đầu ra của chúng

VIII. KẾT LUẬN

Như chúng ta đã thảo luận và chứng minh ở đây, Python là một ngôn ngữ lập trình mạnh mẽ, mặc dù đủ đơn giản để dạy trong các khóa học cơ bản ở trường trung học. Nó có thể được học một cách dễ dàng, nhưng vẫn mang lại sức mạnh to lớn cho việc phát triển phần mềm chuyên nghiệp. Số lượng lớn các gói khoa học, trong đó chỉ một số ít được trình bày ở đây, cho thấy giá trị cao mà Python có trong tay các nhà khoa học. Các tác giả khuyến khích các nhà khoa học tìm hiểu và sử dụng Python trong công việc của họ

Python có hữu ích cho sinh viên sinh học không?

Python đặc biệt phù hợp với các nhà nghiên cứu vì một số lập trình viên sinh học đã đóng góp nhiều thư viện để làm cho Python trở nên thân thiện với khoa học. Tài liệu Python cũng có một phần dành riêng cho đối tượng khoa học của nó.

Python có hữu ích cho hóa học không?

Lập trình bằng Python trao quyền cho các nhà hóa học áp dụng kiến ​​thức lĩnh vực của họ vào các quy mô không thể tiếp cận bằng nỗ lực thủ công . Học Python thì dễ, nhưng ngữ cảnh hóa các vấn đề hóa học trong Python không phải lúc nào cũng rõ ràng.

Tại sao Python rất phổ biến trong khoa học?

Ngôn ngữ python là một trong những ngôn ngữ lập trình dễ tiếp cận nhất hiện có vì nó có cú pháp đơn giản hóa và không phức tạp, giúp nhấn mạnh hơn vào ngôn ngữ tự nhiên. Due to its ease of learning and usage, python codes can be easily written and executed much faster than other programming languages.

Sinh viên Cử nhân có thể học Python không?

Các khóa học về Python bao gồm chứng chỉ về Python, bằng tốt nghiệp về Python và bằng cấp về Python. Người ta cũng có thể thực hiện các khóa học Python trực tuyến. Nhiều nền tảng edtech phổ biến cung cấp các khóa học về python. Nếu một người muốn theo đuổi bằng cấp về Python, họ có thể tham gia các khóa học kỹ thuật hoặc khoa học máy tính BCA/BSc/Btech .