Giter VIP home page Giter VIP logo

twitter-trend-analyzer's Introduction

Twitter Trend Analyzer

The trend analysis engine for a specific keyword of Twitter by using a graphical chart and geographical chart.

Demo

Slides

https://www.slideshare.net/izie00/twitter-trend-analyzer

Description

  • Twitter is one of popular social networking tools to share our think or news, and it will rapidly spread across the worlds.
  • This project is a web application to collect the Twitter's feeds related to the specific word, and then provide the user a daily trend by using a real-time linear chart and geographical chart.

Data Flows

Data Flows

In this project, we basically implemented both backend and frontend. We used the Twitter’s Stream API in order to track of public user’s twits. The streaming data from Twitter is coming simultaneously when user write down some twits. Once our backend received the tweet, we then call the web socket’s handler in the backend. Since the WebSocket handler is connected between frontend and backend, frontend also can recognize and receive when the streamed tweet is arrived.

In the frontend aspect, it consists of four parts:

  1. Search Bar: user can input his/her own interested keyword such as “Samsung” or “Apple
  2. Real-time Tweets: Once user start the program with keyword, the streamed tweets are appeared in this layer.
  3. Linear Chart: The responsive chart will also start by using the streamed data so that user can easily understand what’s going on in the real-time
  4. Geographical Chart: Similar as linear chart, geographical chart will show the location of user who did post related of the keyword.

Specifications

Specification

Backend Framework: Node.js with Express.js Dependencies Management: Bower, NPM Bootstrapping: Yeoman WebSocket library: Socket.io Testing: Jasmin/Karma Task Management: Grunt

Data Handling

index.js

// Twitter Stream API

app.get('/streamTweets', function(request, response){
  var keyword = request.param('keyword');
  response.set('Content-Type', 'application/javascript');
  client.stream('statuses/filter', {track: keyword}, function(stream) {
    stream.on('data', function(event) {
      //console.log(event && event.text);
      response.send(JSON.stringify(event));
    });

    stream.on('error', function(error) {
      //console.log(error);
    });
  });

});

In this project, we implemented a hashmap global_datas to handle the collected data. While the key value is the date of the collected data, the value is the number of tweets related to our keyword. We also have two other arrays which contain the key global_categories and the value global_series.

If we cannot find the key in the hashmap, we will create a new pair of key-value. Otherwise, we will increase the corresponding value by one when we find the key in the hashmap. In additions, the values of keys and values stored in hashmap will be use for x-axis and y-axis of our charts.

public/js/script.js

...
chart: {
          ...
          events:{
            load: function () {
              var self = this;

              socket.on('tweets', (tweets) =>{
                  // DOM appending
                  if(is_started === 1){

                    const { created_at } = $.parseJSON(tweets);

                    const date = moment(created_at, 'dd MMM DD HH:mm:ss ZZ YYYY', 'en').format("YYYYMMDDhmmss");

                    if(global_datas[date] === null || global_datas[date] === undefined)  global_datas[date] = 1;
                    else {
                      global_datas[date]++;
                    }

                    var date2 = moment(created_at).toDate();
                    self.series[0].addPoint([moment(created_at, 'dd MMM DD HH:mm:ss ZZ YYYY', 'en').toDate().getTime(), global_datas[date]],true,false);//add to last
                  }
              });
                }
          }
      },

Chart Libraries

1) HighCharts: http://highchart.com

The Usage of HighCharts For the real-time chart, we used the javascript library of HighCharts’s linear chart. In order to draw the graph like above, you need to use jquery called Highcharts, but the corporation has to license it. The usage is as follows:

  • Http://www.highcharts.com/ Enter the site and go to the first download. (The current version is 3.0.9.)
  • After downloading the module, extract it to a specific directory.
  • Enter the following script in the HTML file:
  • <Script src = "directory/highcharts.js">
  • <Script src = "directory/highcharts-more.js">
  • <Script src = "directory/modules/exporting.js">
  • Then draw the graph in JavaScript. Please refer to the following reference or demo site for how to draw the graph.
  • API reference site: http://api.highcharts.com/highcharts
  • Demo site: Http://www.highcharts.com/demo/ Highcharts span up to 1000 on Internet Explorer. Perhaps the memory limit is there. The graph type can be selected from the demo site. The high chart has a different shape of the json arrangement of the X and Y axes. The data corresponding to the X axis must be made like this. This is the array type of json. You can assign the x-axis data to the x-axis of the high chart and draw the series by assigning the y-axis value.

Twitter's location appears in the Google Map We used the Google Map API in order to the geographical chart and the geocoding. The geocoding means we can convert from actual user’s address to coordinates like latitude and longitude. Since twitter API provide us just user’s location character, we need to convert from it to the actual geo coordinates in order to show into our geographic chart.

How to Run

[Prerequisite]

[Installation]

  1. Clone the repository: git clone https://www.github.com/IkwhanChang/twitter-trend-analyzer.git
  2. Go to twitter-trend-analyzer folder
  3. Install dependencies: npm i or npm install (make sure you already installed the node)
  4. Go to index.js file and replace Twitter keys for yours
// Twitter Settings

var client = new Twitter({
  consumer_key: '[YOUR_CONSUMER_KEY]',
  consumer_secret: '[YOUR_CONSUMER_SECRET]',
  access_token_key: '[YOUR_ACCESS_TOKEN_KEY]',
  access_token_secret: '[YOUR_ACCESS_TOKEN_SECRET]'
});
  1. Go to /public/js/script.js file and replace Google Map API key for yours
  const google_api_key = "[YOUR_GOOGLE_API_KEY]";
  1. Run the command: node index.js
  2. Open the browser and connect: http://localhost:5000/

How to use

  • Usage is very simple. Just write down the keyword that you want to find, click the [Start] Button, then see the result via Charts and list of result in right sidebar. The data will be automatically updated. If you want to stop, then click the [Stop] button.
  • In the linear charts, you can see the result of streamed Twitter data. The x-axis is time and y-axis is number of twits. Also, you can see the geographical charts that has Twitter icon of user's location.
  • If you wish to download of the result, simply click the [Download] button. Then you can get the CSV file and use of it whatever you wants.

License

MIT © Matthew Chang

twitter-trend-analyzer's People

Contributors

zeke avatar jonmountjoy avatar izie avatar hunterloftis avatar mattthewdechang avatar raul avatar samccone avatar ikwhanchang avatar theneva avatar friism avatar r0mdau avatar

Watchers

James Cloos avatar Tristan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.