Data Science do zero: Primeiras regras com o Python


Cientistas de Dados Que Você Talvez Conheça



Baixar 5.26 Mb.
Pdf preview
Página12/75
Encontro24.07.2022
Tamanho5.26 Mb.
#24344
1   ...   8   9   10   11   12   13   14   15   ...   75
Data Science do zero - Primeiras regras
Cientistas de Dados Que Você Talvez Conheça
Enquanto você está preenchendo os papéis de admissão, a vice-presidente da
Fraternidade chega a sua mesa. Ela quer estimular mais conexões entre os seus
membros, e pede que você desenvolva sugestões de “Cientistas de Dados Que
Você Talvez Conheça”.


Seu primeiro instinto é sugerir um usuário que possa conhecer amigos de
amigos. São fáceis de computar: para cada amigo de um usuário, itera sobre os
amigos daquela pessoa, e coleta todos os resultados:
def friends_of_friend_ids_bad(user):
# “foaf” é abreviação de “friend of a friend”
return [foaf["id"]
for friend in user["friends"] # para cada amigo de usuário
for foaf in friend["friends"]] # pega cada _their_friends
Quando chamamos
users[0]
(Hero), ele produz:
[0, 2, 3, 0, 1, 3]
Isso inclui o usuário 0 (duas vezes), uma vez que Hero é, de fato, amigo de
ambos os seus amigos. Inclui os usuários 1 e 2, apesar de eles já serem amigos
do Hero. E inclui o usuário 3 duas vezes, já que Chi é alcançável por meio de
dois amigos diferentes:
print [friend["id"] for friend in users[0]["friends"]] # [1, 2]
print [friend["id"] for friend in users[1]["friends"]] # [0, 2, 3]
print [friend["id"] for friend in users[2]["friends"]] # [0, 1, 3]
Saber que as pessoas são amigas-de-amigas de diversas maneiras parece uma
informação interessante, então talvez nós devêssemos produzir uma contagem de
amigos em comum. Definitivamente, devemos usar uma função de ajuda para
excluir as pessoas que já são conhecidas do usuário:
from collections import Counter # não carregado por padrão
def not_the_same(user, other_user):
"""dois usuários não são os mesmos se possuem ids diferentes"""
return user["id"] != other_user["id"]
def not_friends(user, other_user):
"""other_user não é um amigo se não está em user[“friends”];
isso é, se é not_the_same com todas as pessoas em user[“friends”]"""
return all(not_the_same(friend, other_user)
for friend in user["friends"])
def friends_of_friend_ids(user):
return Counter(foaf["id"]
for friend in user["friends"] # para cada um dos meus amigos
for foaf in friend["friends"] # que contam *their* amigos
if not_the_same(user, foaf) # que não sejam eu
and not_friends(user, foaf)) # e que não são meus amigos
print friends_of_friend_ids(users[3]) # Counter({0: 2, 5: 1})


Isso diz sobre Chi (
id
3) que ela possui dois amigos em comum com Hero (
id
0)
mas somente um amigo em comum com Clive (
id
5).
Como um cientista de dados, você sabe que você pode gostar de encontrar
usuários com interesses similares (esse é um bom exemplo do aspecto
“competência significativa” de data science). Depois de perguntar por aí, você
consegue pôr as mãos nesse dado, como uma lista de pares
(user_id, interest)
:
interests = [
(0, "Hadoop"), (0, "Big Data"), (0, "HBase"), (0, "Java"),
(0, "Spark"), (0, "Storm"), (0, "Cassandra"),
(1, "NoSQL"), (1, "MongoDB"), (1, "Cassandra"), (1, "HBase"),
(1, "Postgres"), (2, "Python"), (2, "scikit-learn"), (2, "scipy"),
(2, "numpy"), (2, "statsmodels"), (2, "pandas"), (3, "R"), (3, "Python"),
(3, "statistics"), (3, "regression"), (3, "probability"),
(4, "machine learning"), (4, "regression"), (4, "decision trees"),
(4, "libsvm"), (5, "Python"), (5, "R"), (5, "Java"), (5, "C++"),
(5, "Haskell"), (5, "programming languages"), (6, "statistics"),
(6, "probability"), (6, "mathematics"), (6, "theory"),
(7, "machine learning"), (7, "scikit-learn"), (7, "Mahout"),
(7, "neural networks"), (8, "neural networks"), (8, "deep learning"),
(8, "Big Data"), (8, "artificial intelligence"), (9, "Hadoop"),
(9, "Java"), (9, "MapReduce"), (9, "Big Data")
]
Por exemplo, Thor (
id
4) não possui amigos em comum com Devin (
id
7), mas
compartilham do interesse em aprendizado de máquina.
É fácil construir uma função que encontre usuários com o mesmo interesse:

Baixar 5.26 Mb.

Compartilhe com seus amigos:
1   ...   8   9   10   11   12   13   14   15   ...   75




©historiapt.info 2022
enviar mensagem

    Página principal