shiny自动更新数据的例子

通常,我们用shiny做的可视化界面,数据在一开始读入后,即使数据源的数据有变动,也往往需要手动进行刷新操作。若希望数据能定时自动刷新,则可以通过在实时表达式中添加invalidateLater()来实现。

invalidateLater函数是使对象在指定时间后无效化并重新执行,如invalidateLater(20000)可实现每2秒钟自动刷新数据。

invalidateLater(millis, session = getDefaultReactiveDomain())

下面的例子是展示每秒自动更新的实时时间。可以运行试试

library(shiny)

# ui ------------------------------------------
ui <- shinyUI(fluidPage(
textOutput("currentTime")
))

# server ----------------------------------------
server <- shinyServer(function(input, output) {

t <- reactive({
invalidateLater(1000)  #1000毫秒之后重新执行
paste("当前时间是:", Sys.time())
})

output$currentTime <- renderText({
t()
})
})

# Run the application
shinyApp(ui = ui, server = server)

贝叶斯算法进行负面微博识别的python实现

负面微博的识别,实际上可以理解为是文本分类的问题,正面还是负面微博?贝叶斯是文本分类的常用算法,对于中文文本来说,分词也是必不可少的步骤。python可以非常方便的实现,以下是具体过程及代码。

# -*- coding: utf-8 -*-
from __future__ import division
from __future__ import unicode_literals
import pandas as pd
import numpy as np
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.cross_validation import cross_val_predict
from sklearn.metrics import classification_report
from sklearn.pipeline import Pipeline
from random import shuffle
from sklearn.externals import joblib

# 读取标记数据-----------
# 微博文本在weibo.xlsx文件中,一行一条微博。
# 字段content为微博内容文本,
# 字段isaction为微博标识,1为负面微博,否则为0
s1 = pd.read_excel('weibo.xlsx')
s1['isaction'] = s1['isaction'].fillna(0)

# 分类数量
# 查看微博类别分布,发现数据不平衡,负面微博占比不到1/10
print(s1.groupby('isaction').size())

# 不平衡数据过采样处理----------
# 处理不平衡数据,以提升模型质量
s1_1 = s1[s1['isaction'] == 1]
# 将正类复制扩大至4份,不宜过大,否则容易过拟合
for n in range(0, 3):
s1 = pd.concat([s1, s1_1], ignore_index=True)

# 打乱数据-------------
r = np.arange(0, s1.shape[0])
shuffle(r)
s1 = s1.iloc[r, :]

#分词,使用jieba分词----------
s1['class'] = s1['content'].apply(lambda x: " ".join(jieba.cut(x)))

#词袋-----------------------
# 首先统计词频,再进行Tf-idf转换,TfidfVectorizer()封装了这两步
vectorizer = TfidfVectorizer()
vec = vectorizer.fit(s1['class'])
t1 = vec.transform(s1['class'])

# 算法-------------------
# 朴素贝叶斯常见的有高斯贝叶斯、多项式贝叶斯、伯努利贝叶斯,这里显然多项式贝叶斯更合适
nb = MultinomialNB()

# 训练及评估------------
# 这里简化处理,仅通过5折交叉验证。
# 在数据量足够的情况下,还是建议将数据集分为训练集、验证集和测试集,仅在最后检验时使用测试集
# 调节算法的alpha值,并通过循环自动评估
for n in np.arange(0.1, 1.1, 0.1):
pre = cross_val_predict(
nb.set_params(alpha=n), t1.toarray(), s1['isaction'], cv=5, n_jobs=-1)
print(nb.alpha)
print(classification_report(s1['isaction'], pre))

# 生成最终模型管道-----------
# 经过验证,alpha=0.6时效果最好,用这个参数对全部数据进行训练,生成最终模型
nb = MultinomialNB(alpha=0.6)
nb.fit(t1.toarray(), s1['isaction'])
vec_nb = Pipeline([('vec', vec), ('nb', nb)])

# 保存模型管道,下次可以直接载入使用-------
joblib.dump(vec_nb, 'vec_nb.pkl')

如何开始设计微博舆情监控系统

舆情监控对于企业来说,至少有如下三个作用:
1、了解用户的关注点;
2、了解行业热点及竞品动态;
3、快速呈现企业的负面消息,并了解原因,以便快速处理;

大体来说,舆情系统构建的流程包括:数据收集、数据处理、舆情分析、结果呈现。下面以微博信息挖掘为例,快速说明一下舆情系统的构建步骤,每一个步骤内容都有很多学问,这里仅抛砖引玉。

首先,定义问题。微博上时常有对其公司的负面消息,需要对其进行有效地回复以处理。但是,之前人工在网上逐条排查的方式,不仅较消耗人力,而且时而完成处理的时间较晚,造成负面的进一步传播。于是,我们希望能将负面微博自动识别,并将结果第一时间提供给运营或客服团队。

继续阅读“如何开始设计微博舆情监控系统”

R语言包的操作与管理

R包是由一系列函数、帮助文档和数据文件组成的文件束,R包提供了大量的功能:绘图、统计、机器学习、数据处理等。丰富多彩的R包是R语言最具魅力的地方。就像哆啦A梦的口袋,应有尽有。

使用R包之前,你首先得把它安装到本地的库中,并在使用之前加载它。以使用决策树算法C5.0的R包C50为例:
首先安装R包:install.packages("C50") ,如需同时安装多个包这样写:install.packages(c("C50","pmml"));
使用前,需先加载R包:libraray(C50),如需加载指定路径的包可通过lib.loc参数,如library("C50", lib.loc="~/R/x86_64-pc-linux-gnu-library/3.2");
关闭R包:detach("package:C50", unload=TRUE),这并不会删除这个包,只是退出加载状态而已;
卸载R包:remove.packages("C50"),当然这里也可以通过参数lib来指定包的路径。

继续阅读“R语言包的操作与管理”

R语言实现随机森林建模的实例

问题,用户注册七天内,通过用户的浏览行为判断用户是否会付费?

输入变量:
pv(浏览量)、hotdays(活跃天数)、time(活跃时长)、aciton(关键动作数)

目标:
ispay(是否付费)

R程序过程:

# 读取数据
a <- read.delim("~/rwork/data")

# 数据详情如下
str(a)

221003shttxxq5hzh55gtx

 

# 随机森林建模
tree<-randomForest(as.factor(ispay)~.,data=a)

pr<-predict(tree, newdata=a)

table(a$ispay,pr,
dnn=c("Actual", "Predicted"))

继续阅读“R语言实现随机森林建模的实例”

流量来源和会话记录方案(Google analytics版)

Google analytics 记录会话来源cookie的有效期为180天,至少需要记录5个值:
utmcsr:即utm_source,一般记录会话的来源站点,如baidu.com,sina.com等。直接来源计为:utmcsr=(direct);
utmccn:即utm_campaign,记录来源活动,如CPC的广告计划、edm的任务id等。无来源活动的会话可记为:utmccn=(referral)|utmccn=(direct)|utmccn=(organic) 等来源信息;
utmcmd:即utm_medium,记录通过何种媒介访问网站,如cpc、cps、referral、organic。我们也可以标识一些重要媒介:edm、cctalk、weixin等。无来源媒介记为:utmcmd=(none);
utmctr:即utm_term,记录搜索关键词。非搜索来源的会话,此处不做记录;
utmcct:即utm_content,记录来源的具体内容,如cpc广告的广告词、referer的引荐路径等。若无来源具体内容,则此处不做记录。

会话的划分主要有两个因素决定:时间和来源。

继续阅读“流量来源和会话记录方案(Google analytics版)”