在R语言中处理hms格式数据:转时分/按分钟取整及直方图绘制
嘿,我来帮你搞定这个按分钟区间统计前置时间频次的需求!你需要把hms格式的时间数据(比如1min10sec、1min47sec这类)统一归到对应的整数分钟区间,然后绘制直方图对吧?下面用两种常用工具(Python和R)给你具体实现方案:
Python实现方案(Pandas + Matplotlib)
步骤1:数据转换,把hms字符串转成整数分钟
首先我们要把带"min"和"sec"的字符串转换成只保留整数部分的分钟数,这样所有1分多的时间都会被归到1分钟区间:
import pandas as pd import matplotlib.pyplot as plt # 替换成你的实际数据 lead_times = pd.Series([ '1min 10sec', '1min 10sec', '1min 10sec', '1min 10sec', '1min 10sec', '1min 10sec', '1min 10sec', '1min 10sec', '1min 10sec', '1min 10sec', '1min 47sec', '1min 47sec', '1min 47sec' ]) # 定义转换函数:提取分钟数,忽略秒数 def hms_to_int_min(hms_str): # 拆分出分钟部分并转成整数 return int(hms_str.split('min')[0]) # 生成整数分钟列 lead_times_df = pd.DataFrame({ 'raw_time': lead_times, 'lead_time_min': lead_times.apply(hms_to_int_min) })
步骤2:统计频次并绘制直方图
接下来统计每个分钟区间的事件数,然后用直方图展示:
# 统计各分钟区间的频次,按分钟排序 frequency_stats = lead_times_df['lead_time_min'].value_counts().sort_index() # 绘制直方图(用bar图更直观展示离散的分钟区间) plt.figure(figsize=(8, 5)) plt.bar(frequency_stats.index, frequency_stats.values, width=0.8, color='#2ecc71') plt.xlabel('前置时间(分钟)') plt.ylabel('事件频次') plt.title('前置时间事件频次分布') plt.xticks(frequency_stats.index) # 确保x轴显示所有存在的分钟区间 plt.grid(axis='y', alpha=0.3) plt.show()
如果你的数据已经是Pandas的Timedelta类型,那转换更简单:
# 假设lead_times是Timedelta类型 lead_times_df['lead_time_min'] = lead_times.dt.total_seconds() // 60 # 总秒数取整为分钟
R语言实现方案(dplyr + ggplot2)
如果你习惯用R,也可以这样处理:
library(dplyr) library(ggplot2) library(stringr) # 模拟你的数据,替换成实际数据 lead_times_df <- data.frame( raw_time = c(rep("1min 10sec", 10), rep("1min 47sec", 3)) ) # 提取整数分钟 lead_times_df <- lead_times_df %>% mutate(lead_time_min = as.integer(str_extract(raw_time, "\\d+(?=min)"))) # 绘制直方图 ggplot(lead_times_df, aes(x = lead_time_min)) + geom_histogram(binwidth = 1, stat = "count", fill = "#3498db", color="white") + labs( x = "前置时间(分钟)", y = "事件频次", title = "前置时间事件频次分布" ) + theme_minimal()
这样处理后,所有1分0秒到1分59秒的事件都会被归到1分钟区间,完美符合你的需求!
内容的提问来源于stack exchange,提问作者Juan Carlos Joaquin
相关产品推荐
相关产品推荐

