Difference between revisions of "Python for Data Science"
Adelo Vieira (talk | contribs) |
Adelo Vieira (talk | contribs) (→Arrays) (Tag: Visual edit) |
||
Line 112: | Line 112: | ||
====Arrays==== | ====Arrays==== | ||
{| class="wikitable" | {| class="wikitable" | ||
− | |||
! colspan="2" | | ! colspan="2" | | ||
! colspan="2" |Method | ! colspan="2" |Method |
Revision as of 22:33, 16 October 2019
For a standard Python tutorial go to Python
Contents
Anaconda
Anaconda is a free and open source distribution of the Python and R programming languages for data science and machine learning related applications (large-scale data processing, predictive analytics, scientific computing), that aims to simplify package management and deployment. Package versions are managed by the package management system conda. https://en.wikipedia.org/wiki/Anaconda_(Python_distribution)
En otras palabras, Anaconda puede ser visto como un paquete (a distribution) que incluye no solo Python (or R) but many libraries that are used in Data Science, as well as its own virtual environment system. It's an "all-in-one" install that is extremely popular in data science and Machine Learning.
Installation
https://linuxize.com/post/how-to-install-anaconda-on-ubuntu-18-04/
Anaconda comes with a few IDE
- Jupyter Lab
- Jupyter Notebook
- Spyder
- Qtconsole
- and others
Anaconda Navigator is a GUI that helps you to easily start important applications and manage the packages in your local Anaconda installation
You can open the Anaconda Navigator from the Terminal:
anaconda-navigator
Jupyter
Jupyter comes with Anaconda.
- It is a development environment (IDE) where we can write codes; but it also allows us to display images, and write down markdown notes.
- It is the most popular IDE in data science for exploring and analyzing data.
- Other famoues IDE for Python are Sublime Text and PyCharm.
- There is Jupyter Lab and Jupyter Notebook
Online Jupyter
There are many sites that provides solutions to run your Jupyter Notebook in the cloud: https://www.dataschool.io/cloud-services-for-jupyter-notebook/
I have tried:
- https://cocalc.com/projects/595bf475-61a7-47fa-af69-ba804c3f23f9/files/?session=default
- Parece bueno, pero tiene opciones que no son gratis
- https://www.kaggle.com/adeloaleman/kernel1917a91630/edit
- Parece bueno pero no encontré la forma adicionar una TOC
-
- Es el que estoy utilizando ahora
Udemy - Python for Data Science and Machine Learning Bootcamp
https://www.udemy.com/course/python-for-data-science-and-machine-learning-bootcamp/
Most popular Python Data Science Libraries
- NumPy
- SciPy
- Pandas
- Seaborn
- SciKit'Learn
- MatplotLib
- Plotly
- PySpartk
NumPy
- NumPy (or Numpy) is a Linear Algebra Library for Python, the reason it is so important for Data Science with Python is that almost all of the libraries in the PyData Ecosystem rely on NumPy as one of their main building blocks.
- Numpy is also incredibly fast, as it has bindings to C libraries. For more info on why you would want to use Arrays instead of lists, check out this great [StackOverflow post](http://stackoverflow.com/questions/993984/why-numpy-instead-of-python-lists).
Installation
It is highly recommended you install Python using the Anaconda distribution to make sure all underlying dependencies (such as Linear Algebra libraries) all sync up with the use of a conda install.
- If you have Anaconda, install NumPy by:
conda install numpy
- If you are not using Anaconda distribution:
pip install numpy
Arrays
Method | Description/Comments | Example | |||
---|---|---|---|---|---|
Methods for creating NumPy Arrays |
From a Python List |
array()
|
We can create an array by directly converting a list or list of lists. | my_list = [1,2,3]
| |
From Built-in NumPy Methods |
arange()
|
Return evenly spaced values within a given interval. | np.arange(0,10)
| ||
zeros()
|
Generate arrays of zeros. | np.zeros(3)
| |||
ones()
|
Generate arrays of ones. | np.ones(3)
| |||
linspace()
|
Return evenly spaced numbers over a specified interval. | np.linspace(0,10,3)
| |||
eye()
|
Creates an identity matrix. | np.linspace(0,10,50)
| |||
random
|
rand()
|
Create an array of the given shape and populate it with random samples from a uniform distribution over [0, 1) .
|
np.random.rand(2)
| ||
randn()
|
Return a sample (or samples) from the "standard normal" distribution. Unlike rand which is uniform. | np.random.randn(2)
| |||
randint()
|
Return random integers from low (inclusive) to high (exclusive).
|
np.random.randint(1,100)
| |||
Others Array Attributes and Methods |
reshape()
|
Returns an array containing the same data with a new shape. | arr.reshape(5,5)
| ||
max() , min() , argmax() , argmin()
|
Finding max or min values. Or to find their index locations using argmin or argmax. | arr.max()
| |||
shape()
|
Shape is an attribute that arrays have (not a method). | NO LO ENTENDI.. REVISAR!
arr_length = arr2d.shape[1]
| |||
dtype()
|
You can also grab the data type of the object in the array. | arr.dtype
| |||
- - -
| |||||
Indexing and Selection
|
Creating sample array for the following examples# 1D Array:
arr = np.arange(0,11)
#Show
arr
Output: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 2D Array
arr_2d = np.array(([5,10,15],[20,25,30],[35,40,45]))
#Show
arr_2d
Output:
array([[ 5, 10, 15],
[20, 25, 30],
[35, 40, 45]])
| ||||
Bracket Indexing and Selection (Slicing) |
Note: When we create a sub-array slicing an array (slice_of_arr = arr[0:6]), data is not copied, it's a view of the original array! This avoids memory problems! To get a copy, need to use the method copy(). See important note below. | #Get a value at an index
arr[8]
#Get values in a range
arr[1:5]
slice_of_arr = arr[0:6]
#2D
arr_2d[1]
arr_2d[1][0]
arr_2d[1,0] # The same that above
#Shape (2,2) from top right corner
arr_2d[:2,1:]
#Output:
array([[10, 15],
[25, 30]])
#Shape bottom row
arr_2d[2,:]
| |||
Fancy Indexing: Fancy indexing allows you to select entire rows or columns out of order. Example:# Set up matrix
arr2d = np.zeros((10,10))
# Length of array
arr_length = arr2d.shape[1]
# Set up array
for i in range(arr_length):
arr2d[i] = i
arr2d
# Output:
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[2., 2., 2., 2., 2., 2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],
[4., 4., 4., 4., 4., 4., 4., 4., 4., 4.],
[5., 5., 5., 5., 5., 5., 5., 5., 5., 5.],
[6., 6., 6., 6., 6., 6., 6., 6., 6., 6.],
[7., 7., 7., 7., 7., 7., 7., 7., 7., 7.],
[8., 8., 8., 8., 8., 8., 8., 8., 8., 8.],
[9., 9., 9., 9., 9., 9., 9., 9., 9., 9.]])
# Fancy indexing allows the following
arr2d[[6,4,2,7]]
# Output:
array([[6., 6., 6., 6., 6., 6., 6., 6., 6., 6.],
[4., 4., 4., 4., 4., 4., 4., 4., 4., 4.],
[2., 2., 2., 2., 2., 2., 2., 2., 2., 2.],
[7., 7., 7., 7., 7., 7., 7., 7., 7., 7.]])
| |||||
Broadcasting
|
Setting a value with index range | arr[0:5]=100
arr Output: array([100, 100, 100, 100, 100, 5, 6, 7, 8, 9, 10]) | |||
Setting all the values of an Array | arr[:]=99 | ||||
Get a copy of an Array |
copy()
|
Note: When we create a sub-array slicing an array (slice_of_arr = arr[0:6]), data is not copied, it's a view of the original array! This avoids memory problems! To get a copy, need to use the method copy(). See important note below. | arr_copy = arr.copy() | ||
Important notes on Slices |
slice_of_arr = arr[0:6]
#Show slice
slice_of_arr
Output: array([0, 1, 2, 3, 4, 5])
#Making changes in slice_of_arr
slice_of_arr[:]=99
#Show slice
slice_of_arr
Output: array([99, 99, 99, 99, 99, 99])
#Now note the changes also occur in our original array!
#Show
arr
Output: array([99, 99, 99, 99, 99, 99, 6, 7, 8, 9, 10])
#When we create a sub-array slicing an array (slice_of_arr = arr[0:6]), data is not copied, it's a view of the original array! This avoids memory problems!
#To get a copy, need to use the method copy()
| ||||
Using brackets for selection based on comparison operators and booleans |
arr = np.arange(1,11)
arr > 4
# Output:
array([False, False, False, False, True, True, True, True, True,
True])
bool_arr = arr>4
bool_arr
# Output:
array([False, False, False, False, True, True, True, True, True,
True])
arr[bool_arr]
# Output:
array([ 5, 6, 7, 8, 9, 10])
arr[arr>2]
# Output:
array([ 3, 4, 5, 6, 7, 8, 9, 10])
x = 2
arr[arr>x]
# Output:
array([ 3, 4, 5, 6, 7, 8, 9, 10])
|