Browse Source

Improve bias algorithm by reducing each currency metric the lower the influence

new-api
Luke Childs 6 years ago
parent
commit
16d77dd238
  1. 59
      src/content.js

59
src/content.js

@ -35,6 +35,50 @@ const preloadTweetData = () => {
const escapeHtml = string => string.replace(/["'&<>]/g, '');
const calculateBias = data => {
const SUPPORTED_CURRENCIES = ['BTC', 'ETH', 'XRP', 'BCH'];
const BIAS_REDUCER = 0.5;
const BIAS_MIN_THRESHOLD = 10;
let currencies = data.clusters
.map(currency => ({
symbol: currency.abbr,
name: currency.display,
influence: currency.score
}))
.filter(currency => SUPPORTED_CURRENCIES.includes(currency.symbol))
.sort((a, b) => {
if (a.influence > b.influence) {
return -1;
}
if (a.influence < b.influence) {
return 1;
}
return 0;
})
.map((currency, index) => {
const multiplier = Math.pow(BIAS_REDUCER, index);
const bias = currency.influence * multiplier;
return {...currency, bias};
});
const totalBiasSum = currencies
.map(currency => currency.bias)
.reduce((a, b) => a + b);
currencies = currencies
.map(currency => {
let bias = (currency.bias / totalBiasSum) * 100;
bias = (bias < BIAS_MIN_THRESHOLD) ? 0 : bias;
return {...currency, bias};
});
return SUPPORTED_CURRENCIES
.map(symbol => currencies.find(currency => currency.symbol === symbol));
}
const injectChart = async () => {
const profileHoverContainer = document.querySelector('#profile-hover-container');
const profileCard = profileHoverContainer.querySelector('.profile-card');
@ -82,24 +126,15 @@ const injectChart = async () => {
const biases = container.children[0];
if (data) {
const currencies = data.clusters
.filter(currency => ['BTC', 'ETH', 'XRP', 'BCH'].includes(currency.abbr));
const totalScore = currencies
.map(currency => Number(currency.score))
.reduce((a, b) => a + b);
const currencies = calculateBias(data);
currencies.forEach(currency => {
const biasThreshold = 5;
let bias = (Number(currency.score) / totalScore) * 100;
bias = (bias < biasThreshold) ? 0 : bias;
const container = document.createElement('div');
container.innerHTML = `
<div class="bias">
<span class="ProfileCardStats-statLabel u-block">${escapeHtml(currency.display)}</span>
<span class="ProfileCardStats-statLabel u-block">${escapeHtml(currency.name)}</span>
<div class="bias-amount-container">
<div class="bias-amount u-bgUserColor" style="width: ${bias}%;"></div>
<div class="bias-amount u-bgUserColor" style="width: ${Number(currency.bias)}%;"></div>
</div>
</div>`;
biases.appendChild(container.children[0]);

Loading…
Cancel
Save