faircoopDataAnalytics/botc-membersAnalytics.py
botc-membersAnalytics.pyRaw
1# coding=utf-8
2import sys
3reload(sys)
4sys.setdefaultencoding('utf8')
5
6import numpy as np
7import pandas as pd
8import matplotlib.pyplot as plt
9from datetime import datetime, date, timedelta
10
11members = pd.read_csv('datasets/BotC.csv')
12
13print members.head(1)
14
15#generate the full set of days from the first date to the last in the dataset
16months = []
17days = []
18dInit = date(2017, 6, 8)
19dEnd = date(2017, 1, 9)
20delta = dEnd - dInit
21for i in range(delta.days+1):
22 day = dInit + timedelta(days=i)
23 dayString = day.strftime("%d/%m/%y")
24 dayDatetime = datetime.strptime(dayString, '%d/%m/%y')
25 days.append(dayDatetime)
26
27#add the dates of shops creation to the days array
28for memberDate in members['Date']:
29 if isinstance(memberDate, basestring):
30 memberDay = memberDate
31 memberDayDatetime = datetime.strptime(memberDay, '%B %d, %Y')
32 days.append(memberDayDatetime)
33
34#count days frequency in days array
35unique, counts = np.unique(days, return_counts=True)
36countDays = dict(zip(unique, counts))
37realCounts = []
38for count in counts:
39 realCounts.append(count-1)
40
41#count the total acumulation of shops created in each days
42totalCount = 0
43globalCount = []
44for k in realCounts:
45 totalCount = totalCount + k
46 globalCount.append(totalCount)
47
48dates = countDays.values()
49counts = countDays.values()
50
51#plot the data
52plt.title("New members registered each day")
53plt.plot(unique, realCounts)
54plt.show()
55
56plt.title("Total members each day")
57plt.plot(unique, globalCount)
58plt.show()
59
60plt.title("New members and total members each day")
61plt.plot(unique, realCounts, label="new members registered each day")
62plt.plot(unique, globalCount, label="total members each day")
63plt.legend(loc='upper left')
64plt.show()
65
66
67# place of the account
68places = []
69for place in members["Place"]:
70 if isinstance(place, basestring):
71 places.append(place)
72
73placesNames, placesCount = np.unique(places, return_counts=True)
74plt.title("Membership places")
75plt.pie(placesCount, labels=placesNames, autopct='%1.1f%%', shadow=True, startangle=90)
76plt.axis('equal')
77plt.show()