Hướng dẫn neo4j python - trăn neo4j

Hướng dẫn neo4j python - trăn neo4j

Đã đăng vào thg 8 21, 2020 3:58 SA 2 phút đọc 2 phút đọc

Tiếp nối 2 bài viết về Neo4j trong quá khứ Bài 1, Bài 2, bài viết này sẽ dùng Neo4j để xem dữ liệu cá nhân tài khoản Twitter của mình.

Graph Your Network app là công cụ để giúp mình có thể xem được Twitter data của cá nhân. Theo như cách mô tả của họ thì họ có setup Neo4j Docker container cho mỗi một user, container này thì chạy trên ECS.

Khi người dùng visits địa chỉ trang web được public thì users được điểu hướng sang một trong các con instances neo4j-twitter-head để login tài khoản Twitter. Sau đó sẽ là bước login thành công và ủy quyền cho phép ứng dụng truy cập vào Twitter data.

Kế tiếp họ sẽ tạo một new instance dùng để chạy neo4j-twitter docker image, con này làm nhiệm vụ start Neo4j và chạy Python script để bắt đẩu đổ data từ Twitter vào trong Neo4j. Sau khi Neo4j đã đc khởi chạy thì credentials cũng sẽ được reset và một URL, username kèm password sẽ được đưa đến cho users. Các queries lấy data của mình thì sẽ được đảm nhiệm bởi con neo4j-twitter-head dùng thư viện của python py2neo.

Tổng quan về hệ thống:

Hướng dẫn neo4j python - trăn neo4j

Mình sẽ truy cập con Neo4j sử dụng url, username và password mà họ cung cấp cho mình, con instance mà họ tạo cho mình chỉ tồn tại được trong vài ngày mà thôi, hình phía dưới là giao diện của Neo4j

Hướng dẫn neo4j python - trăn neo4j

Cuối cùng sẽ là phần show mine personal Twitter account, trước khi đi vào chi tiết thì dưới đây là hình minh họa data model.

Hướng dẫn neo4j python - trăn neo4j

Các hình tròn sẽ biểu diễn cho các Nodes, các hình mũi tên sẽ biểu diễn cho các Relationships giữa các nodes với nhau. Mình sẽ loading data Tweets từ Twitter API và sau đó bắt đầu truy vấn data....

  1. Mình đang follow ai trên Twitter ?
MATCH(u:User)-[me_follows:FOLLOWS]->(followers:User)
RETURN followers

Kết quả:

Hướng dẫn neo4j python - trăn neo4j

  1. 10 hashtags mà mình đã dùng, với mỗi hashtags hãy đếm số lần nó xuất hiện ?
MATCH(h:Hashtag)<-[:TAGS]-(t:Tweet)<-[:POSTS]-(u:User:Me)
WITH h, COUNT(h) AS Hashtags
ORDER BY Hashtags DESC
LIMIT 10
RETURN h.name, Hashtags

Kết quả:

Hướng dẫn neo4j python - trăn neo4j

  1. 10 hashtags mà mình đã dùng, với mỗi hashtags hãy đếm số lần nó xuất hiện ?
MATCH(u:Me:User)-[p:POSTS]->(t:Tweet)-[:MENTIONS]->(m:User)
WITH u,p,t,m, COUNT(m.screen_name) AS count
ORDER BY count DESC
RETURN u,p,t,m
LIMIT 10

Kết quả:

Hướng dẫn neo4j python - trăn neo4j

  1. 10 hashtags mà mình đã dùng, với mỗi hashtags hãy đếm số lần nó xuất hiện ?
MATCH(t:Tweet)
WHERE t.text is not Null
RETURN t.text
ORDER By t.created_at ASC
LIMIT 10

Kết quả:

Hướng dẫn neo4j python - trăn neo4j

  1. 10 hashtags mà mình đã dùng, với mỗi hashtags hãy đếm số lần nó xuất hiện ?
MATCH(retw:Tweet)<-[:RETWEETS]-(t:Tweet)
RETURN t.text

Kết quả:

Hướng dẫn neo4j python - trăn neo4j

  1. 10 hashtags mà mình đã dùng, với mỗi hashtags hãy đếm số lần nó xuất hiện ?
MATCH (me:User:Me)-[:FOLLOWS]->(f)
WITH me, f, size((f)-[:FOLLOWS]->(me)) as doesFollowBack
RETURN SUM(doesFollowBack) / toFloat(COUNT(f))  AS followBackRate

Hướng dẫn neo4j python - trăn neo4j

Top 10 Mine mentions ?

  1. Top 10 tw với thời gian tạo tăng dần

Hướng dẫn neo4j python - trăn neo4j

Những text mà mình đã retweet

Tỉ lệ Followback (tỉ lệ người ta follow lại mình khi mình follow người ta)