r - 是否可以按设备类型自动对用户代理进行分类?
问题描述
我从数据集中提取了一些用户代理指标,但我想知道是否有办法对这些指标进行分类。
具体来说,我想知道有多少用户正在使用:
- 移动的
- 桌面
- 药片
我当然可以手动检查其中一个指标 - 例如os.family
- 并以这种方式对它们进行分类,但它效率不高,我想自动执行此操作。
除此之外,似乎没有办法确定设备是否是平板电脑(据我所知,没有特定于平板电脑的操作系统);如果这不可能,那么我很乐意将其tablet
归入该mobile
类别,因为平板电脑确实是定义上的移动设备。
目前我正在使用这个uaparserjs
包,因为它似乎做得比较好,除了缺乏分类。
有没有办法做到这一点?
如果它们被证明是我目前使用的更好的解决方案,我也愿意接受其他建议或建议。
以下是提取的用户代理数据的前 20 行:
ua <- structure(list(userAgent = c("Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) GSA/23.1.148956103 Mobile/14D27 Safari/600.1.4",
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1",
"Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
"Mozilla/5.0 (X11; CrOS x86_64 9000.82.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.1.2; Nexus 5X Build/N2G47Z) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F89 Safari/602.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 Mobile/14G60 Safari/602.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F89 Safari/602.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 Mobile/14G60 Safari/602.1",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36",
"Mozilla/5.0 (Linux; Android 4.2.2; GT-I9195 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 Mobile/14G60 Safari/602.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 Mobile/14G60 Safari/602.1",
"Mozilla/5.0 (Linux; Android 5.1.1; SM-J320F Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36"
), ua.family = c("Mobile Safari", "Chrome", "Mobile Safari",
"IE", "Chrome", "Chrome", "IE", "Mobile Safari", "Chrome", "Chrome Mobile",
"Mobile Safari", "Mobile Safari", "Mobile Safari", "Mobile Safari",
"Chrome", "Chrome Mobile", "Mobile Safari", "Mobile Safari",
"Chrome Mobile", "Chrome"), ua.major = c("10", "56", "10", "11",
"58", "56", "11", "10", "59", "59", "10", "10", "10", "10", "60",
"50", "10", "10", "60", "61"), ua.minor = c("2", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0"), ua.patch = c("1", "2924", NA, NA, "3029", "2924",
NA, NA, "3071", "3071", NA, NA, NA, NA, "3112", "2661", NA, NA,
"3112", "3163"), os.family = c("iOS", "Windows 8.1", "iOS", "Windows 8.1",
"Windows 7", "Chrome OS", "Windows 7", "iOS", "Windows 10", "Android",
"iOS", "iOS", "iOS", "iOS", "Windows 8", "Android", "iOS", "iOS",
"Android", "Windows 10"), os.major = c("10", NA, "10", NA, NA,
"9000", NA, "10", NA, "7", "10", "10", "10", "10", NA, "4", "10",
"10", "5", NA), os.minor = c("2", NA, "2", NA, NA, "82", NA,
"0", NA, "1", "3", "3", "3", "3", NA, "2", "3", "3", "1", NA),
os.patch = c("1", NA, "1", NA, NA, "0", NA, "1", NA, "2",
"2", "3", "2", "3", NA, "2", "3", "3", "1", NA), device.family = c("iPhone",
"Other", "iPhone", "Other", "Other", "Other", "Other", "iPhone",
"Other", "Nexus 5X", "iPhone", "iPhone", "iPhone", "iPhone",
"Other", "Samsung GT-I9195", "iPhone", "iPhone", "Samsung SM-J320F",
"Other"), device.brand = c("Apple", NA, "Apple", NA, NA,
NA, NA, "Apple", NA, "LG", "Apple", "Apple", "Apple", "Apple",
NA, "Samsung", "Apple", "Apple", "Samsung", NA), device.model = c("iPhone",
NA, "iPhone", NA, NA, NA, NA, "iPhone", NA, "Nexus 5X", "iPhone",
"iPhone", "iPhone", "iPhone", NA, "GT-I9195", "iPhone", "iPhone",
"SM-J320F", NA)), row.names = c(NA, -20L), class = c("tbl_df",
"tbl", "data.frame"))
解决方案
推荐阅读
- c++11 - 将参数从“const_Ty”转换为 const 自定义结构时出错
- c++ - 与类相关以及为什么代码会出错
- sql-server-2008 - 无法使用电子将数据表单插入到 sql server
- mysql - 如何将 XML 中某些属性的值相加?
- reactjs - 无法解析链接中的对象 ID
- regex - 使用 Regex 组合分隔数据
- mysql - 我的触发器语句有问题吗?
- pivot - 如何在 TD15 Pivot 功能中包含“partition by”?
- javascript - 如何使用waves-transaction JS库签署和发送转账交易?
- scala - 在 Scala 中正确实现 2 类型参数 Functor