# Imports

import sys
import pandas as pd
import csv

%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (20.0, 10.0)

# %load util.py
#!/usr/bin/python

# Util file to import in all of the notebooks to allow for easy code re-use


# Calculate Percent of Attendees that did not speak
def percent_silent(df):
    total = len(df)
    silent = 0
    for row in df.iteritems():
        if row[1] == 0:
            silent = silent + 1

    percent = {}
    percent['TOTAL'] = total
    percent['SILENT'] = silent
    percent['VERBOSE'] = total - silent
    return percent

# Calculate Percent of Attendees that left
def percent_left(df):
    total = len(df)
    left = 0
    for row in df.iteritems():
        if row[1] == 0:
            left = left + 1

    percent = {}
    percent['TOTAL'] = total
    percent['LEFT'] = left
    percent['STAYED'] = total - left
    return percent

# Calculate Percent of Attendees along gender
def percent_gender(df):
    total = len(df)
    female = 0
    for row in df.iteritems():
        if row[1] == 1:
            female = female + 1

    percent = {}
    percent['TOTAL'] = total
    percent['FEMALE'] = female
    percent['MALE'] = total - female
    return percent

# Calculate Percent of Talking points by
def percent_talking_gender(df):
    total = 0
    male = 0
    female = 0
    for talks, gender in df.itertuples(index=False):
        if talks > 0:
            total = total + 1
            if gender == 0:
                male = male + 1
            elif gender == 1:
                female = female + 1

    percent = {}
    percent['TOTAL'] = total
    percent['FEMALE'] = female
    percent['MALE'] = male
    return percent


"""
Explanation: Polyglot Unconference
This notebook holds a project conducting data analysis and visualization of the 2017 Polyglot Vancouver Un-Conference.
See the README in this repository for background information.
Session 02 - "UX Battles"
This one had a much better gender dynamic and was generally more balanced, as you will see from the charts.
Two hosts (who had their sessions combined) and the fact that both of them came with more questions than answers, made for a much more conversational experience. On another entirely subjective note, while you can still see that one person did speak to a much greater extent than others, his manner was friendly, supportive, and genial (as opposed to the main speaker from Session 01), but this is a diffidcult metric to track - perhaps the percentage of people that left (less here than in Session 01) is an indicator ?
Python imports
End of explanation
"""


# Read
data = pd.read_csv('data/2_ux.csv')

# Display
data

"""
Explanation: Reading the Data
End of explanation
"""


# Convert GENDER to Binary (sorry, i know...)

data.loc[data["GENDER"] == "M", "GENDER"] = 0
data.loc[data["GENDER"] == "F", "GENDER"] = 1

# Convert STAYED to 1 and Left/Late to 0

data.loc[data["STAYED"] == "Y", "STAYED"] = 1
data.loc[data["STAYED"] == "N", "STAYED"] = 0
data.loc[data["STAYED"] == "L", "STAYED"] = 0

# We should now see the data in numeric values
data

"""
Explanation: Sanitizing the Data
As we can see, some of our data is stored in a non-numerical format which makes it difficult to perform the maths upon. 
Let's clean it up.
End of explanation
"""


# Run Describe to give us some basic Min/Max/Mean/Std values

data.describe()

# Run Value_Counts in order to see some basic grouping by attribute

vc_talks = data['TALKS'].value_counts()
vc_talks

vc_gender = data['GENDER'].value_counts()
vc_gender

vc_stayed = data['STAYED'].value_counts()
vc_stayed

# Now let's do some basic plotting with MatPlotLib

data.plot()

data.plot(kind='bar')

fig1, ax1 = plt.subplots()
ax1.pie(data['TALKS'], autopct='%1.f%%', shadow=True, startangle=90)
ax1.axis('equal')
plt.show()

"""
Explanation: Analysis and Visualization (V1)
Let's do some really basic passes at the data before we run some mathematical computations on it, just to get a better sense of where it stands at the moment.
End of explanation
"""


data_hostless = data.drop(data.index[[0,1]])

data_hostless.head()

data_hostless.describe()

dh_vc_talks = data_hostless['TALKS'].value_counts()
dh_vc_talks

dh_vc_gender = data_hostless['GENDER'].value_counts()
dh_vc_gender

dh_vc_stayed = data_hostless['STAYED'].value_counts()
dh_vc_stayed

data_hostless.plot()

data_hostless.plot(kind='bar')

fig1, ax1 = plt.subplots()
ax1.pie(data_hostless['TALKS'], autopct='%1.f%%', shadow=True, startangle=90)
ax1.axis('equal')
plt.show()

"""
Explanation: Analysis and Visualization (V2)
As per the methodology in the first notebook, for the sake of mapping the actual conversational flow amongst the participants, I am going to run these analyses and visualizations again while removing the hosts...
End of explanation
"""


# Percentage of attendees that were silent during the talk

silent = percent_silent(data['TALKS'])
silent


fig1, ax1 = plt.subplots()

sizes = [silent['SILENT'], silent['VERBOSE']]
labels = 'Silent', 'Talked'
explode = (0.05, 0)

ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.0f%%', shadow=True, startangle=90)
ax1.axis('equal')
plt.show()

# Percentage of attendees that left early during the talk

left = percent_left(data['STAYED'])
left

fig1, ax1 = plt.subplots()

sizes = [left['LEFT'], left['STAYED']]
labels = 'Left', 'Stayed'
explode = (0.1, 0)

ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.0f%%', shadow=True, startangle=90)
ax1.axis('equal')
plt.show()

# Percentage of attendees that were Male vs. Female (see notes above around methodology)

gender = percent_gender(data['GENDER'])
gender

fig1, ax1 = plt.subplots()

sizes = [gender['FEMALE'], gender['MALE']]
labels = 'Female', 'Male'
explode = (0.1, 0)

ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.0f%%', shadow=True, startangle=90)
ax1.axis('equal')
plt.show()

# Calculate Percent of Talking points by GENDER

distribution = percent_talking_gender(data[['TALKS','GENDER']])
distribution

fig1, ax1 = plt.subplots()

sizes = [distribution['FEMALE'], distribution['MALE']]
labels = 'Female Speakers', 'Male Speakers'
explode = (0.1, 0)

ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.0f%%', shadow=True, startangle=90)
ax1.axis('equal')
plt.show()

"""
Explanation: this is still pretty bad...
Algebraic Analysis
Now lets step into some deeper (but probaby still naive) analysis based off of my rudiemtary understanding of Data Science! :D
End of explanation
"""


