京公网安备 11010802034615号
经营许可证编号:京B2-20210330
用R语言统计用户登录信息
#设置统计时间段 格式: yyyy-mm-dd-hh-mm-ss
#如: 2013-09-10-00-00-00
start.time = "2013-09-01-00-00-00"
stop.time = "2013-10-13-00-00-00"
#伪装用户名
fake = T
library(lattice)
file = "login.log"
lines = readLines(con=file)
data = NULL
in.time = NULL
ch2d = function(x=NULL)
{
if(x=="Jan") return(1)
if(x=="Feb") return(2)
if(x=="Mar") return(3)
if(x=="Apr") return(4)
if(x=="May") return(5)
if(x=="Jun") return(6)
if(x=="Jul") return(7)
if(x=="Aug") return(8)
if(x=="Sep") return(9)
if(x=="Oct") return(10)
if(x=="Nov") return(11)
if(x=="Dec") return(12)
}
for( i in lines)
{
if( grepl(pattern="still",x=i)
| grepl(pattern="reboot",x=i)
| grepl(pattern="tty",x=i)
| grepl(pattern="wtmp",x=i)
| grepl(pattern="crash",x=i)
| grepl(pattern="down",x=i)
| i=="")
next
tmp = unlist(strsplit(x=i,split=" "))
tmp = tmp[tmp!=""]
tmp[10] = gsub(pattern="\\(",replacement="",x=tmp[10])
tmp[10] = gsub(pattern="\\)",replacement="",x=tmp[10])
tmp = c(tmp,unlist(strsplit(x=tmp[7],split=":")),unlist(strsplit(x=tmp[9],split=":")))
if(length(unlist(strsplit(x=tmp[10],split="\\+")))==2)
{ http://cda.pinggu.org/view/4496.html
day = unlist(strsplit(x=tmp[10],split="\\+"))[1]
tmp[10] = unlist(strsplit(x=tmp[10],split="\\+"))[2]
} else day = 0
hour = unlist(strsplit(x=tmp[10],split=":"))[1]
min = unlist(strsplit(x=tmp[10],split=":"))[2]
time = as.numeric(day) * 24 * 60 + as.numeric(hour) * 60 + as.numeric(min)
in.time = c(in.time,time)
rm(time)
data = rbind(data,tmp)
}
login.time = ISOdatetime(year=2013,month=lapply(X=data[,5],FUN=ch2d),day=data[,6],hour=data[,11],min=data[,12],sec=0)
rownames(data) = 1:nrow(data)
data = data.frame(data[,c(1,3:6,11,12)],in.time)
colnames(data) = c("user","IP","week","month","day","hour","min","time")
# 筛选统计时间段
start.time = as.numeric(unlist(strsplit(x=start.time,split="-")))
stop.time = as.numeric(unlist(strsplit(x=stop.time,split="-")))
start.time = ISOdatetime(year=start.time[1],month=start.time[2],
day=start.time[3],hour=start.time[4],
min=start.time[5],sec=start.time[6])
stop.time = ISOdatetime(year=stop.time[1],month=stop.time[2],
day=stop.time[3],hour=stop.time[4],
min=stop.time[5],sec=stop.time[6])
data = data[login.time>=start.time&login.time<=stop.time,]
print(paste(nrow(data),"records after filter."),quote=F)
#伪装用户名
if( fake == T )
{
# fake.name = matrix(sample(100:120,length(levels(data$user))*9,replace=T),ncol=9)
# fake.name = apply(fake.name,1,function(x)paste(intToChar(x),collapse=""))
fake.name = rep("",length=nrow(data))
for( i in unique(data$user))
{
fake.name[data$user==i] = paste(intToChar(sample(100:120,9)),collapse="")
}
data = cbind(data,fake.name)
data = data[,c(9,2:8)]
}
colnames(data) = c("user","IP","week","month","day","hour","min","time")
#统计每个用户登录时间数
time.per.user = data.frame(user=character(),time=numeric())
for( i in unique(data$user))
{
time.per.user = rbind(time.per.user,data.frame(user=i,time=sum(in.time[data$user==i])))
}
time.per.user = time.per.user[order(time.per.user$time),]
tp1 = barchart(time~user,time.per.user,scale=list(x=list(rot=90)),ylab="Time(minutes)")
#统计局域网外的ip登录数
IP.info = data$IP
IP.info = IP.info[!grepl(pattern="^10",x=IP.info)]
IP.info = IP.info[!grepl(pattern="^192",x=IP.info)]
IP.info = IP.info[!grepl(pattern="cu",x=IP.info)]
IP.info = IP.info[!grepl(pattern="io",x=IP.info)]
IP.info = IP.info[!grepl(pattern=":",x=IP.info)]
print(paste(" IP counts :",length(unique(IP.info))),quote=F)
#统计不同用户使用不同ip登录次数
tp2 = histogram(IP~user,data,scales=list(x=list(rot=90)))
plot(tp1,split=c(1,1,1,2))
plot(tp2,split=c(1,2,1,2),new=F)
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 题目1 一家餐厅统计顾客的性别、年龄、消费金额等信息,在进行数据分析时,发现性别这一变量在 ...
2026-10-16核心资源推荐 CDA教材(2025):https://edu.cda.cn/goods/show/3151CDA模拟题(2025):https://edu.cda.cn/goods/show/2845CD ...
2026-10-16核心资源推荐 CDA教材(2025):https://edu.cda.cn/goods/show/3151CDA模拟题(2025):https://edu.cda.cn/goods/show/2845CD ...
2026-10-16一、为什么要区分这两种分布 在数据分析和统计学中,拿到一组数据后第一件事通常就是看它的分布形态。分布形态决定了你能用什么 ...
2026-10-15一、问题现象 在实际使用 Excel 透视表做数据分析时,经常会遇到这样的情况:数据源表格里明明新增了一行或一列金额数据,数据源 ...
2026-10-15核心资源推荐 CDA教材(2025):https://edu.cda.cn/goods/show/3151CDA模拟题(2025):https://edu.cda.cn/goods/show/2845CD ...
2026-10-15一、什么是预测式发货 预测式发货(Anticipatory Shipping)是亚马逊于2013年12月获得授权的一项美国专利(专利号 US 8,615,473 ...
2026-10-14一、SQL在金融量化体系中的定位 量化投资的本质是用数据驱动决策,而数据处理贯穿量化研究的全生命周期。从原始行情数据清洗、因 ...
2026-10-14核心资源推荐 CDA教材(2025):https://edu.cda.cn/goods/show/3151CDA模拟题(2025):https://edu.cda.cn/goods/show/2845CD ...
2026-10-14CDA数据分析师 出品 作者:李诗怡 四层结构 · 零件与房子 · 六大易错点 一、什么是指标体系 定义:指标体系是整套完整框架 ...
2026-10-13写在开头 先还原一个你大概率见过的场面。 立项会上有人说:我们得做用户画像。 于是团队关进会议室,白板写满便利贴,两小时后 ...
2026-10-13 很多数据分析师每天都在计算指标、制作报表,但当被问到“什么叫指标数据元”“指标数据标准包含哪些核心维度”“指标数据质 ...
2026-10-13在统计学与数据分析研究中,相关性分析分为数值变量分析与分类变量分析两大类。针对身高、销量、分数等连续数值变量,通常采用皮 ...
2026-10-12在Power BI可视化分析体系中,常规表格仅能展示枯燥的数值数据,存在数据对比不直观、强弱规律不突出、维度交叉分析低效等问题。 ...
2026-10-12 很多数据分析师能熟练写SQL、做透视表,但当被问到“数据是从哪里来的?经过哪些加工才进入数据仓库?ETL具体做了什么?”时 ...
2026-10-12在传统零售行业同质化竞争激烈、大众营销转化率持续走低的背景下,依托经验与直觉的粗放式营销逐渐失效。美国塔吉特百货(Target ...
2026-10-10随着智能客服、数字化服务、用户精细化运营的快速普及,传统零散、非标准化的客户服务数据与业务体系逐渐难以支撑高效服务治理。 ...
2026-10-10 很多数据分析师能熟练地写SQL、做透视表、算描述性统计,但当被问到“如何预测用户流失概率”“如何归因销量下滑的关键因素 ...
2026-10-10CDA数据分析师 出品 作者:李诗怡 定义区别 · 场景举例 · 指标分类 · 计算方法 知识体系总览 模块 包含内容 一、核 ...
2026-10-09在数据分析工作流中,业务数据大多存储在各类关系型数据库内,例如MySQL、PostgreSQL、SQLite等。Pandas是Python生态中主流的数 ...
2026-10-09