# Spring 2018 R Open Lab: Exploratory Data Analysis

Mar 28

This week ‘s topic is Exploratory Data Analysis in R. The goal of the lab is to give attendants some ideas about what they can learn when they first have a data set in their hands and the corresponding approaches. The lab started with introduction of data frame’s concept and how to create one in R. Then, we talked about different ways to import data into R. After that, we learned ways to explore features of a data frame using the data set “diamonds.csv”. With the information we learned, we started to manipulate the data frame into our desired form by reordering and subsetting. We ended this lab with 2 simple practices of what we learned so far.

Here is the link to the script for this open lab:

Here is the data set we used for this lab:

Thank you all for showing up. If you have further questions regarding topics covered in the material, please feel free to drop by during next week’s lab or email me or leave a comment.

See you all next week!

# Python Open Labs: March 26, 2018

Over the past few weeks, students have been learning how to iterate through items – whether they may be in strings, lists, tuples, or dictionaries. Students have mainly been using for loops to grab the value of each item, and lots of progress has been in regards to writing them with little to no instruction.

In this blog post, I wanted to go over two different ways to write for loops that I presented in class. One method uses the loop to take on the literal value of an item, whereas the other method uses the loop to take on the index of the item.

Let’s say that we have a list:

lst = [1, 2, 3, 4, 5, 6]

If I wanted to iterate through the list such that my iterator takes on the literal value of the list, then I would write my for loop like this:

for item in lst:

>>>>print(item)

The output of this program would simply be:
``` 1 2 3 4 5 6 ```

If I wanted my for loop to instead take on the index value of each item within the list, then I would write my for loop like this:

for item in range(len(lst)):

>>>>print(item)

The output of the program would now be:
``` 0 1 2 3 4 5 ```

The only difference between this for loop and the previous one is the additional use of the keywords range and len, which allow the iterator to take on an item’s index value.

Note that using the for loop structure with these keywords also allow you to take on the literal value of the list when you index the list within the loop.

Here is example of what that looks like:

for item in range(len(lst)):

>>>>print(item, lst[item])

The output of this program is:
``` 0 1 1 2 2 3 3 4 4 5 5 6 ```

Writing for loops either way is acceptable, but it’s important to know which one might be most relevant to your program. If I were simply looking to add one to every item in the list and print its output, using the for loop without range or len is just fine. If I had multiple lists to iterate over that all happen to be the same length, I might want to incorporate the keywords to save time and efficiency in my program.

For instance, let’s say I had two lists that were of the same length.

animals = [“dog”, “bird”, “horse”]

nums = [2, 11, 19]

I would only need to iterate through one list to grab the values from both by using range and len.

Here is what that looks like:

for item in range(len(animals)):

>>>>print(animals[item], nums[item])

My output would look like:
``` dog 2 bird 11 horse 19 ```

I hope you found this blog post about for loop structure and output helpful and are confident enough to know which ones to use in your own programs!

Navie Narula

# Spring 2018 R Open Lab: Character Strings

Feb 28

For this week, the topic we discussed is character strings in R. This lab’s content is a steppingstone for text  analysis.  We started with introducing the concept of characters, character strings, and character string vectors in R. Then, we talked about operations on strings such as getting substring and combining different character strings.  Finally, we learned about extracting and replacing certain patterns within a text-form data set.

Here is the link to the script for this open lab:

Here is a reference for regular expressions in R:

Thank you all for showing up. If you have further question regarding topics covered in the material, please feel free to drop by during next week’s lab or email me or leave a comment.

See you all next week!

# Spring 2018 R Open Lab: More Fundamentals

Last week, we walked through the R starter kit which introduced most of the useful basic concepts in R such as vectors, matrices, and loops. This week, we continued to talk about more basics in R and demonstrated examples. The goal of this lab is to get attendants a better understanding of how R language works so that they can transform their specific real-life problem into R algorithms smoothly.

Here is the link to the script for this open lab:

The script also has comments and explanations. You can open it with R studio and run it step by step.

Thank you all for showing up. If you have further question regarding topics covered in the material, please feel free to drop by during next week’s lab or email me or leave a comment. See you all next week!

# Python Open Lab Nov 28: Blog Style!

Hello all,

Due to some complex scheduling issues, I am posting here the material we would have covered in lab tomorrow. Please feel free to contact me for any questions (data@library.columbia.edu). Enjoy!

Python Objects and Classes (cont’d!)

Self:

What is the self variable in Python?

The self variable represents the instance of the object itself. Unlike most object-oriented languages that pass the instance of an object as a hidden parameter to the methods defined on an object; Python does not. It must be explicitly declared. All methods in python, including some special methods like initializer, have self.

In other words, the self  variable refers to the object which invokes the method. When you create new object the self parameter in the __init__  method is automatically set to reference the object you have just created.

More theory…do’s and don’ts of Self:

You use self when:

1. Defining an instance method. It is passed automatically as the first parameter when you call a method on an instance, and it is the instance on which the method was called.
2. Referencing a class or instance attribute from inside an instance method. Use it you want to call a method or access a name (variable) on the instance the method was called on, from inside that method.

You don’t use self when:

1. You call an instance method normally. For example if you input [instance = MyClass()], you call [MyClass.my_method] as [instance.my_method(some_var)] not as [instance.my_method(self, some_var)].
2. You reference a class attribute from outside an instance method but inside the class definition.

Let’s try an example!

First, we must create an object from class:

Input:

1       p1 – Person(‘anna’)   # here we have created a new person object called p1
2       print(p1.whoami())
3       print(p1.name)

1      You are anna
2      anna
As discussed in lab, it is bad practice to give access to your data fields outside of the class itself. Let’s see how we can hide data fields: To hide data fields, first you have to define private data fields. In Python, this can be done by using two leading underscores (__). Moreover, a private method can also be defined using two leading underscores.

Here’s an example I created on Jupyter notebook. If you’d like, I can email you the notebook as lines are colour formatted and the spaces match up to the correct inputs (as you know, your code will be affected by the spacing).

Expected Output:

Now, I’d like to show you if it’s possible to access  __balance  data field outside of the class.

Input:

As you can see, now __balance  is not accessible outside the class.

What questions do you have at this point? Does this match up with the aforementioned theoretical concept of self/hidden self data? Would you like more practice?

# Fall 2017 Python Open Lab Week 3

October 10, 2017

Week 3’s lab was intense! We started with list methods, where we left off last week and went through the following:

list.append(x): Add an item to the end of the list.

list.extend(L): Extend the list by appending all the items in the given list.

list.insert(i, x): Insert an item at a given position.

list.remove(x): Remove the first item from the list whose value is x  (it will come up as an              error if there is no such item).

list.pop([i]): Remove the item at the given position in the list, and return it. If no index is                specified, a.pop() removes and returns the last item in the list.

list.index(x): Return the index in the list of the first item whose value is x (it will come up                as an error if there is no such item).

list.count(x): Return the number of times x appears in the list.

list.sort(cmp=None, key=None, reverse=False): Sort the items of the list in place.

list.reverse(): Reverse the elements of the list, in place.

Here is an example that uses most of the list methods

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count(‘x’))
2 1 0
>>> a.insert(2, 1)
>>> a.append(333)
>>> a
[66.25, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
1
>>> a.remove(333)
>>> a
[66.25, -1, 333, 1, 1234.5, 333]
>>> a.reverse()
>>> a
[333, 1234.5, 1, 333, -1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]
>>> a.pop()
1234.5
>>> a
[-1, 1, 66.25, 333, 333]

We then introduced the Python Dictionary:

Python Dictionary

In the Python dictionary, each key is separated from its value by a colon (:), the items are separated by commas, and the whole thing is enclosed in curly braces.

An empty dictionary without any items is written with just two curly braces, like this: {}. Keys within a dictionary must be a data type such as strings, numbers, or tuples.

Example:

dict = {‘Name’: ‘Michael’, ‘Age’: 7, ‘Class’: ‘First’}

print “dict[‘Name’]: “, dict[‘Name’]
print “dict[‘Age’]: “, dict[‘Age’]

When we run this code, it produces the following result:

dict[‘Name’]:  Michael
dict[‘Age’]:  7

And finally, we very briefly touched upon string methods and boolean methods – by no means did we cover all the material we intended (as you see below) – but will pick up in Week 4 with string methods first!

String Methods

The string data type has multiple methods. Here are all of the methods of list objects:

str.upper()  – Making Strings uppercase

str.lower() – Making Strings lowercase

str.join() method will concatenate two strings, but in a way that passes one string through another.

str.split() method returns a list of strings that are separated by whitespace if no other parameter is given.

str.replace() method can take an original string and return an updated string with some replacement.

Boolean methods:

 Method True if str.isalnum() If string consists of only alpha-numeric values str.isalpha() If string consists of only alphabets str.islower() If string consists of only lower-case  values str.isnumeric() String consists of only numeric characters str.isspace() String consists of only whitespace characters str.istitle() String is in title case str.isupper() String’s alphabetic characters are all upper case

Example:

>>> string = “Hello”

>>> string.upper()

‘HELLO’

>>> string.lower()

‘hello’

>>> string = “Hello,world”

>>> string.split(“,”)

[‘Hello’, ‘world’]

>>> string[::-1]

‘dlrow,olleH’

>>> len(string)

11

>>> string1 = “Hello”

>>> string2 = “World”

>>> string1+string2

‘HelloWorld’

# Fall 2017 Python Open Lab Week 2

Week 2: October 3rd

This week we started with a brief review of the basics from week 1 and the starter kit. We continued on with Data Structures and worked through Lists, Tuples and Dictionaries. These concepts were easy to approach and we went over many practice examples on the way. Towards the end of the session, we introduced the different types of lists that one can use in Python as well as list methods. List methods, however, are quite complex and we only got through .append and .extend in great detail.

Next week we will continue with list methods!

Please comment or email us for any questions. Below is the worksheet we used for this week:

Python Open Lab Week II

Outline and reference:

1. Summary from Open Lab I – Starter Kit
2. Data Structures:

Lists:

Lists are what they seem – a list of values. Each one of them is numbered, starting from zero – the first one is numbered zero, the second 1, the third 2, etc. You can remove values from the list, and add new values to the end. Example: Your many cats’ names.

Tuples:

Tuples are just like lists, but you can’t change their values. The values that you give it first up, are the values that you are stuck with for the rest of the program. Again, each value is numbered starting from zero, for easy reference. Example: the names of the months of the year.

Dictionaries:

Dictionaries are similar to what their name suggests – a dictionary. In a dictionary, you have an ‘index’ of words, and for each of them a definition. In python, the word is called a ‘key’, and the definition a ‘value’. The values in a dictionary aren’t numbered – tare similar to what their name suggests – a dictionary. In a dictionary, you have an ‘index’ of words, and for each of them a definition. In python, the word is called a ‘key’, and the definition a ‘value’. The values in a dictionary aren’t numbered – they aren’t in any specific order, either – the key does the same thing. You can add, remove, and modify the values in dictionaries. Example: telephone book.

Lists:

• Indexing
• Slicing
• List operations (concat, etc.)
• Multiplying
• “In” operator

*Question: Given a year, month, day, print as follows:

21st July, 1991

Methods:

• Append
• Extend
• Count
• Index
• Insert
• Pop
• Remove
• Reverse
• Sort/Sorted

# Fall 2017 Python Open Lab Week 1

Week 1 September 26
In week 1 of our Python Open lab, we introduced the Python Starter Kit and went over Python basics such as expressions, variables and statements, floats, statements, integers, strings, booleans, and control flow statements. The class was a mix of students with little to no experience with Python, to a few advanced users, to those with some knowledge of basic concepts looking to strengthen their skillset.
We moved at a slower pace in this first session to ensure students grasped the basic concepts needed to continue on their programming journey with confidence.
We hope that anyone with outstanding questions contact us, and anyone thinking of attending sign up through the DSC website. All are welcome and we will ensure you are caught up with the relevant material we covered in the past!
Next week, we will start with a review of the starter kit and continue with lists.

# Python Open Labs

In the penultimate session of Python Open Labs we had a brief review of csv concepts and XML parsing with BeautifulSoup Library.

A boiler plate code for practise can be obtained below from the Google Drive link, filed under Session-19 folder.

All of the course slides and examples are made available on: https://goo.gl/YP0c2E

Next week on April 21, I will going over the basic concepts and some practise problems from the python concepts that we looked into !

# Python Open Labs – CSV Files

As we move towards the end of Spring semester, having covered most of the basics in Python, the recent sessions have been focusing on introducing python modules requested by attendees.

Last week had a second session on web-scraping with BeautifulSoup, I have updated the practice code for the same in Session-17 folder of the google drive link mentioned below.

This week, on April 7, 2017 I introduced the Python CSV module for reading and writing data from csv files. A very easy module primarily for reading CSV data, it requires the user to understand only a few of the details. The relevant sample code and a practise csv file can be found on the google drive link below, under Session-18 folder.

All of the course slides and examples are made available on: https://goo.gl/YP0c2E

Next week’s topic is XML file parsing !

See you next Friday from 1:30 PM – 3:30 PM at DSSC (Room – 215), Lehman Library at Columbia SIPA !