## Artificial Intelligence and Python

## Overview

During the downtime due to the pandemic-inspired shelter-in-place in California, I’ve decided to learn some new technologies and concepts related to software design. This has been my first foray into online learning using one of the e-learning platforms. In this case, I signed up for Udacity (https://www.udacity.com).

So far, I’ve been quite impressed. Of course, it does not perfectly substitute live classroom instruction, but it is still quite effective, plus I can skip to the good parts. The course I signed up for is titled “Artificial Intelligence and Python”.

While I’ve programmed scripts with Python before, I never knew that it had some many math and statistic-intensive libraries. Hence, it’s a great language for developing AI-related software since AI is all about statistics: predicting future events based upon historical information.

While the basics of Python programming is not that interesting, the libraries and tools associated with Python are fascinating and actually lots of fun to work with. This blog post will talk a bit about those libraries and also how they apply to AI. As of mid-April 2020, I have not finished the course yet, so emphasis is on the Python libraries used for AI, but not quite AI, itself.

## NumPy

NumPy is a library for Python. It is short for “Numerical Python”, and it includes a large amount of functionality related to multi-dimensional arrays and matrices in addition to many mathematical functions. Users can create arrays from Python dictionaries, and then manipulate the arrays in many different ways including reshaping arrays, adding arrays, multiplying arrays, and much much more.

Here’s an example of how a simple numpy array works in Python:

1. *import numpy as np2. x = np.array([0,1,2,3,4,5,6,7,8,9])3. print(x)4. [0 1 2 3 4 5 6 7 8 9 10]*

Line 1 imports the numpy library and renames it.

Line 2 defines a single row array with values from 0 to 9.

Line 3 prints the array and Line 4 displays it.

Let’s take it a step further:

*5. x.reshape(2,5)6. print(x)7. [[0,1,2,3,4] [5,6,7,8,9]]*

Line 5 executes the “reshape” function that changes the shape of the array from a single row to a 2×5 array as seen in Line 7.

Other functions allow you to insert rows in an array:

8. x = np.insert(x, 1, [10,11,12,13,14], axis=0)

The above “insert” statement inserts a new row at row 1 (row numbers start at 0). The numbers it inserts are: 10,11,12,13,14. The “axis” tells whether to insert a row (0) or column (1).

You can also perform mathematics on 2 arrays including addition, subtraction, multiplication, and division. For example:

x = *[[0,1,2,3,4][5,6,7,8,9]]*

y = *[[6,3,2,8,7][1,6,7,3,10]]*

print(x + y) = *[[6,4,4,11,11][6,12,14,11,19]]*

The above “x” adds each of the elements from each row and column and creates the corresponding matrix with the added values. You can also do the same with the other mathematical functions.

There are many functions associated with numpy that can be found in lots of online documentation.

## Pandas

Pandas is another Python library that deals with data analysis and manipulation. It takes the numpy arrays one step further and allow the creation of complex arrays. Let’s look at an example:

*import pandas as pd**groceries = pd.Series(data=[30,6,’Yes’,’No’], index=[‘eggs’,’apples’,’milk’,’bread’])*

Line 1 imports the Pandas library. Line 2 creates a complex matrix where the first column is the index of labels and the 2nd column is the actual data. It looks like this:

eggs | 30 |
---|---|

apples | 6 |

milk | Yes |

bread | No |

dtype: object

If you “print groceries[‘eggs’]”. The result is: 30.

Pandas allows you to perform mathematics on values in a matrix:

print(groceries / 2) =

eggs | 15 |
---|---|

apples | 3 |

milk | Yes |

bread | No |

You can also create a more complex matrix by creating a dictionary of Pandas series:

3. items = {‘Bob’ : pd.Series(data = [245, 25, 55], index = [‘bike’, ‘pants’, ‘watch’]),

‘Alice’ : pd.Series(data = [40, 110, 500, 45], index = [‘book’, ‘glasses’, ‘bike’, ‘pants’])}

4. shopping_carts = pd.DataFrame(items)

5. shopping_carts

Bob | Alice | |
---|---|---|

bike | 245.0 | 500.0 |

book | NaN | 40.0 |

glasses | NaN | 110.0 |

pants | 25.0 | 45.0 |

watch | 55.0 | NaN |

shopping_carts[‘Bob’][‘Bike’] displays “245.0”.

You can also create a Python dictionary and then create a Panda dataframe from the dictionary along with indexes. See the following:

#Create a list of Python dictionaries

items2 = [{‘bikes’: 21, ‘pants’: 36, ‘watches’: 40}, {‘watches’: 12, ‘glasses’: 51, ‘bikes’: 18, ‘pants’:9}]

#Create a Panda DataFrame

store_items = pd.DataFrame(items2, index=[‘store 1’, ‘store 2’])

#Display the DataFrame

store_items

It displays as:

bikes | pants | watches | glasses | |
---|---|---|---|---|

store 1 | 20 | 30 | 35 | NaN |

store 2 | 15 | 5 | 10 | 50.0 |

To add a column:

store_items[‘shirts’] = [15,2]

Now, the DataFrame displays:

bikes | pants | watches | glasses | shirts | |
---|---|---|---|---|---|

store 1 | 20 | 30 | 35 | NaN | 15 |

store 2 | 15 | 5 | 10 | 50.0 | 2 |

## Anaconda and Jupyter Notebook

Now that I have covered a bit of NumPy and Pandas for manipulating data arrays, let’s delve a bit into a Python platform called Anaconda. Anaconda is a “navigator” that allows users to download any and all libraries available for the Python platform. These libraries include mathematical libraries, different types of Python compilers, and the Jupyter Notebook which is a web-based user interface for displaying comments and typing in Python code that runs on command.