Phân tích tâm lý (Sentiment Analysis) Twitter (P1) – Thu thập dữ liệu

Sentiment Analysis

Sentiment Analysis

Ngày nay, Twitter trở thành một công cụ mới để thực hiện các phép đo tâm lý xã hội. Có hàng triệu người bày tỏ ý kiến của mình trên mọi lĩnh vực đời sống. Nguồn dữ liệu này vô cùng quý giá cho cả nghiên cứu lẫn kinh doanh.

Ví dụ, các nhà nghiên cứu đã chỉ ra rằng “tâm trạng” truyền thông trên twitter phản ánh nhịp điệu sinh học và thậm chí được sử dụng để dự đoán thị trường chứng khoán. Một sinh viên tại UW sử dụng tweets geocoded để vẽ bản đồ các địa điểm nơi có “sấm sét” vào mùa hè năm 2012.

Trong phần một, ta sẽ thu thập dữ liệu từ Twitter bằng ngôn ngữ lập trình python qua API mà twitter cung cấp.

Tạo một ứng dụng trên Twitter

Để có thể truy cập dữ liệu từ twitter, bạn cần cài đặt thư viện OAuth2 để có thể xác thực. Nếu bạn đã cài đặt package manager của python (pip), ta có thể dùng lệnh sau để cài đặt.

pip install oauth2

Đầu tiên, bạn cần tạo một tài khoản trên Twitter. Sau đó, truy cập vào https://dev.twitter.com/apps và đăng nhập với các thông tin cá nhân vừa tạo.

Create New App

Create New App

Click vào nút “Create New App” để tiến hành tạo ứng dụng mới.

Create an application form

Create an application form

Điền đầy đủ các thông tin cần thiết cho ứng dụng mới. Lưu ý mục thông tin Website, bạn có thể đặt một đường link giả vào. Ở đây, tôi sử dụng link của blog này.

Developer agreement

Developer agreement

Chấp nhận các điều khoản dành cho developer sau đó click “Create your Twitter application”. Ở trang này, ta click chọn tab “Keys and Access Tokens”.

Keys and Access Tokens

Keys and Access Tokens

Tiếp theo, kéo xuống phần “Your Access Token”. Sau đó, click vào “Create my access token” để tạo access token của ứng dụng.

Create access Token

Create access Token

Sau khi, hoàn tất bạn sẽ có danh sách các access token để truy cập vào ứng dụng.

Access Token

Access Token

Thu tập dữ liệu Twitter

Ta tạo file get_twitter_data.py với mã lệnh sau đây. Lưu ý, phần api_key, api_secret, access_token_key, và access_token_secret là thông tin access token ta vừa tạo bên trên.

import oauth2 as oauth
import urllib2 as urllib

api_key = "JeuEwD5RJiBbxiw9jTMBYBEmU"
api_secret = "xRcmv8AMnSSMwq875HiP1SKFfGw51M97BvVH341yckPY3iilCu"
access_token_key = "47319754-NL1AIh9PBomIVsJe5HXB9vjE5y1rjwZFYUQx0odzo"
access_token_secret = "kcq7ER8UZSykDomPn9lYdh5DAafndvp73PzSfykTq0Kp7"

_debug = 0

oauth_token    = oauth.Token(key=access_token_key, secret=access_token_secret)
oauth_consumer = oauth.Consumer(key=api_key, secret=api_secret)

signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()

http_method = "GET"

http_handler  = urllib.HTTPHandler(debuglevel=_debug)
https_handler = urllib.HTTPSHandler(debuglevel=_debug)

Viết hàm thực hiện request đến twitter.

'''
Construct, sign, and open a twitter request
using the hard-coded credentials above.
'''
def twitterreq(url, method, parameters):
  req = oauth.Request.from_consumer_and_token(oauth_consumer,
                                             token=oauth_token,
                                             http_method=http_method,
                                             http_url=url,
                                             parameters=parameters)

  req.sign_request(signature_method_hmac_sha1, oauth_consumer, oauth_token)

  headers = req.to_header()

  if http_method == "POST":
    encoded_post_data = req.to_postdata()
  else:
    encoded_post_data = None
    url = req.to_url()

  opener = urllib.OpenerDirector()
  opener.add_handler(http_handler)
  opener.add_handler(https_handler)

  response = opener.open(url, encoded_post_data)

  return response

Viết hàm chạy chương trình thu thập dữ liệu twitter. Do xử lý trên ngôn ngữ tiếng Anh, ta cần lọc ra các tweet là English.

def fetchsamples():
  url = "https://stream.twitter.com/1/statuses/sample.json?language=en"
  parameters = []
  response = twitterreq(url, "GET", parameters)
  for line in response:
    print line.strip()

if __name__ == '__main__':
  fetchsamples()

Ta vào cửa sổ dòng lệnh, tại thư mục có chứa tập tin get_twitter_data.py ta chạy chương trình bằng dòng lệnh sau.

python get_twitter_data.py

Khi thực hiện dòng lệnh thành công, ta sẽ có kết quả như hình bên dưới.

Download stream

Download stream

Để lưu dữ liệu vào một file mới, ta thực hiện dòng lệnh sau (chạy dòng lệnh trong vòng 3 phút để thu thập dữ liệu).

python get_twitter_data.py > output.json

Để copy 20 dòng đầu tiên ra file mới để quan sát, ta có thể dùng lệnh sau.

head -n 20 output.txt > view_first_20.json
Advertisements

2 thoughts on “Phân tích tâm lý (Sentiment Analysis) Twitter (P1) – Thu thập dữ liệu

  1. Cho em hỏi, muốn ghi dữ liệu ra json file trực tiếp trong python file thì nên làm như thế nào ạ?
    Em làm theo cách ghi dữ liệu ở trên thì file json chỉ có 1 line.
    Em có tham khảo cách viết bằng json.dump(), nhưng dữ liệu trả về báo lỗi

    raise TypeError(repr(o) + ” is not JSON serializable”. Đây là đoạn code em đang làm ạ.
    ——
    def fetch():
    url = “https://api.twitter.com/1.1/users/search.json?q=Katie&page=45&count=20&include_entities=false”
    parameters=[]
    response= twitterreq(url,”GET”,parameters)

    file = open(‘KatieUser.json’,’w’)
    print(“Writing List of User into JSON file…”)
    json.dump (response,file,sort_keys= True, indent = 4)

    print (“Done”)
    file.close()

    Số lượt thích

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s