20171009 - TNUI-UB/grupA-sessions GitHub Wiki

Sessió del 9 d'octubre 2017

  • Dubtes pràctica 0?
  • Tots hauríem de tenir grup, ja. Funciona?

Pràctica 0

  • comprehensions, intro a paquets data science:
    • NumPy i la seva estrucutura de dades: el ndararay: els ndarray són uns (objectes) array multidimensional de dades optimitzat per a ser processat amb llibreries de baix nivell sense fer cap còpia de les dades emmagatzemandes en un programa Python.
    • pandas: mòdul que afegeix unes estructura de dades noves que ens permet manipular dades.
  • Docker, Anaconda o Python 3.6 amb virtualenv.
  • GitHub Classroom.

Pràctica 1: Apriori

  • a partir d'aquesta pràctica, ja avaluable, totes es faran en parelles.
  • es lliurarà la setmana del 23 d'octubre.

En aquesta pràctica resoldrem un problema utilitzant dos algorismes: Naive i Apriorisme.

Revisem funcionament Apriorisme?

Temps aproximat d'execució amb el subconjunt dels que tenen mé de 50 compres (referència):

get_all_n_sets(df, 2) ~ 400ms
get_all_n_sets(df, 3) ~ 6.2s

naive(df, 2, 10) ~ 1s
naive(df, 3, 10) ~ 20s

apriori(df, 2, 10) ~ 290ms
apriori(df, 3, 10) ~ 360ms
  • Combinacions != permutacions

    • combinacions de A, B i C: AB, AC, BC
    • permutacions de A, B i C: AB, AC, BA, BC, CA, CB

Revisem pràctica 0.

Exercici 18: Donades les taules df (que correspon a una sèrie d'espectadors) i dg (que correspon a una sèrie de pel·licules puntuades pels espectadors) següents: (1) Uneix tota la informació en una única taula m. (2) Calcula el coeficient de correlació de Pearson entre l'usuari 1 i l'usuari 2 en funció de les pel·licules que han vist els dos.

df = pd.DataFrame({'User' : [1,2,4,6,8], 'Age' : [22, 33,41,13,28], 'Sex' : ['a','b','a','a','a']})
dg = pd.DataFrame({'Mov' : [1,2,1,4,5,6,2,15], 'Rating' : [0.1, 0.9, 0.9,0.4,0.6,0.8,0.1,0.8], 'User' : [1,1,2,3,4,5,2,2]})
print(dg)
print(df)

Dóna


   Mov  Rating  User
0    1     0.1     1
1    2     0.9     1
2    1     0.9     2
3    4     0.4     3
4    5     0.6     4
5    6     0.8     5
6    2     0.1     2
7   15     0.8     2
   Age Sex  User
0   22   a     1
1   33   b     2
2   41   a     4
3   13   a     6
4   28   a     8

Usem pivot per "pivotar" (és a dir, combinar) la taula en base a unes columnes.

mg = pd.merge(df, dg)
da = dg.pivot(index='User', columns='Mov', values='Rating')

print(mg)
print(da)

Dóna:

   Age Sex  User  Mov  Rating
0   22   a     1    1     0.1
1   22   a     1    2     0.9
2   33   b     2    1     0.9
3   33   b     2    2     0.1
4   33   b     2   15     0.8
5   41   a     4    5     0.6
Mov    1    2    4    5    6    15
User                              
1     0.1  0.9  NaN  NaN  NaN  NaN
2     0.9  0.1  NaN  NaN  NaN  0.8
3     NaN  NaN  0.4  NaN  NaN  NaN
4     NaN  NaN  NaN  0.6  NaN  NaN
5     NaN  NaN  NaN  NaN  0.8  NaN
# Correlació de series
user1 = da.ix[1](/TNUI-UB/grupA-sessions/wiki/1).squeeze()
user2 = da.ix[2](/TNUI-UB/grupA-sessions/wiki/2).squeeze()
print(user1.corr(user2))
print()

# Correlació de tota la taula pivotada
print(da.corr())
print()

# Correlació de la taula merged
print(mg.corr())
-1.0

Dóna

Mov   1    2   4   5   6   15
Mov                          
1    1.0 -1.0 NaN NaN NaN NaN
2   -1.0  1.0 NaN NaN NaN NaN
4    NaN  NaN NaN NaN NaN NaN
5    NaN  NaN NaN NaN NaN NaN
6    NaN  NaN NaN NaN NaN NaN
15   NaN  NaN NaN NaN NaN NaN

             Age      User       Mov    Rating
Age     1.000000  0.938343  0.337193  0.124134
User    0.938343  1.000000  0.235435  0.096674
Mov     0.337193  0.235435  1.000000  0.318646
Rating  0.124134  0.096674  0.318646  1.000000