35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
import pandas as pd
|
|
|
|
# Auxiliary functions (unchanged)
|
|
def aggregate_data(data, interval):
|
|
all_minutes = pd.DataFrame({'interval_group': range(0, 1440, interval)})
|
|
result = []
|
|
for date in data['date'].unique():
|
|
day_data = data[data['date'] == date].copy()
|
|
day_data['interval_group'] = (day_data['minute_of_day'] // interval) * interval
|
|
agg = day_data.groupby('interval_group').size().reset_index(name='tweet_count')
|
|
complete_data = all_minutes.merge(agg, on='interval_group', how='left').fillna({'tweet_count': 0})
|
|
complete_data['date'] = date
|
|
result.append(complete_data)
|
|
return pd.concat(result, ignore_index=True)
|
|
|
|
|
|
def generate_xticks(interval):
|
|
if interval <= 5:
|
|
tick_step = 60
|
|
elif interval <= 10:
|
|
tick_step = 60
|
|
elif interval <= 30:
|
|
tick_step = 120
|
|
else:
|
|
tick_step = 240
|
|
ticks = list(range(0, 1440, tick_step))
|
|
tick_labels = [f"{m // 60:02d}:{m % 60:02d}" for m in ticks]
|
|
return ticks, tick_labels
|
|
|
|
|
|
def minutes_to_time(minutes):
|
|
hours = minutes // 60
|
|
mins = minutes % 60
|
|
return f"{hours:02d}:{mins:02d}"
|