def _get_hour_starts(dt_ranges: Sequence[DateTimeRange]) -> Iterator[datetime]: min_starts_at = _find_earliest_start(dt_ranges) max_ends_at = _find_latest_end(dt_ranges) hour_starts_arrow = Arrow.range('hour', min_starts_at, max_ends_at) return _to_datetimes_without_tzinfo(hour_starts_arrow)
def view(party_id): """List orga presence and task time slots for that party.""" party = Party.query.get_or_404(party_id) presences = Presence.query \ .for_party(party) \ .options(db.joinedload('orga')) \ .all() tasks = Task.query.for_party(party).all() time_slots = [party] + tasks min_starts_at = find_earliest_time_slot_start(time_slots) max_ends_at = find_latest_time_slot_end(time_slots) hour_starts_arrow = Arrow.range('hour', min_starts_at, max_ends_at) hour_starts = [hour_start.datetime.replace(tzinfo=None) for hour_start in hour_starts_arrow] hour_ranges = list(map(DateTimeRange._make, pairwise(hour_starts))) days = [(day, len(list(hour_starts))) for day, hour_starts in groupby(hour_starts, key=lambda hour: hour.date())] return { 'party': party, 'days': days, 'hour_ranges': hour_ranges, 'presences': presences, 'tasks': tasks, }
def _get_hour_starts(dt_ranges): min_starts_at = _find_earliest_start(dt_ranges) max_ends_at = _find_latest_end(dt_ranges) hour_starts_arrow = Arrow.range('hour', min_starts_at, max_ends_at) return _to_datetimes_without_tzinfo(hour_starts_arrow)
def create_array_with_zeroes(data_frame: DataFrame, beg: Arrow, end: Arrow) -> List[float]: arr = [] for day in Arrow.range('day', beg, end): try: value = data_frame.loc[day.date()].values[0] except KeyError: value = 0.0 arr.append(value) return arr
def run(self, task_define): Arrow.now().date() start_dt = arrow.get(task_define['last_crawl_day']) # .strftime('%Y%m%d') end_dt = arrow.get(task_define['cur_dt']) for r_dt in Arrow.range('day', start_dt, end_dt): logger.info('Start to crawl data of task: %s, dt: %s' % (self.__class__.__name__, r_dt)) t_dt = r_dt.strftime('%Y%m%d') daily_records = self.ts_client.query(API_NAME, trade_date=t_dt) self.write_db_with_df('stock_daily_basic', daily_records)
def get_mean_forecast(data_frame: DataFrame, now: Arrow, for_date: Arrow) -> Series: tomorrow = now.shift(days=1) beg = now.shift(days=-6) arr = [] for day in Arrow.range('day', beg, now): try: value = data_frame.loc[day.date()].values[0] except KeyError: value = 0.0 arr.append([day.date(), value]) init_df = create_df_indexed_by_date(create_df(arr)) df = create_df_with_zeroes(init_df, beg, for_date) for day in Arrow.range('day', tomorrow, for_date): yesterday = day.shift(days=-1) past_week = df[yesterday.shift(days=-6).date():yesterday.date()] df.loc[day.date()] = past_week.mean() return df['quantity'][tomorrow.date():for_date.date()]
def timeloop(start=datetime.now() + timedelta(days=-1), end=datetime.now() + timedelta(days=0)): "生成一个字符串格式为YYYY-MM-DD形式的数组." if (type(start) is str) or (type(end) is str): start = start if type( start) is datetime else datetime.strptime(start, '%Y-%m-%d') end = datetime.now() # TODO:检查时间是否为字符串,如果是则转换为时间。 rond = [] for r_time in Arrow.range('day', start, end): rond.append(r_time.format('YYYY-MM-DD')) return rond
def create_df_with_zeroes(data_frame: DataFrame, beg: Arrow, end: Arrow, date_selector: Union[Callable, None] = None ) -> DataFrame: arr = [] for day in Arrow.range('day', beg, end): dt = date_selector(day) if date_selector else day try: value = data_frame.loc[dt.date()].values[0] except KeyError: value = 0.0 arr.append([day.date(), value]) return create_df_indexed_by_date(create_df(arr))
def export_hourly2day(self, target_day: arrow.Arrow): """ 将一天拆成小时查询并合并 :param vins: 需要查询的vin :param target_day: 需要查询的精确到天的时间 :return: 查询的vin的目标日的数据 """ day_hours = list( target_day.range('hour', target_day, target_day.shift(days=1))) target_time_bucket = [] for i in range(len(day_hours) - 1): target_time_bucket.append((day_hours[i], day_hours[i + 1])) # 查询数据 df = pandas.DataFrame() for t_t, d_t in target_time_bucket: dd, err_list = self.export(t_t, d_t) df = df.append(dd) if len(err_list) > 0: self.record_err(t_t.format('YYY-MM-DD_HH')) return df
def export_daily2month(self, vins: list, target_month: arrow.Arrow): """ 将目标vin号的一个月拆分为单天查询后组合返回 :param vins: 需要查询的vin :param target_month: 需要查询的精确到月的时间 :return: 查询的vin的目标月的数据 """ # 拼装一个月的单日时间范围 month_days = list( target_month.range('day', target_month, target_month.shift(months=1))) target_time_bucket = [] for i in range(len(month_days) - 1): target_time_bucket.append((month_days[i], month_days[i + 1])) # 查询数据 df = pandas.DataFrame() for t_t, d_t in target_time_bucket: dd, err_list = self.export(vins, [(t_t, d_t)]) df = df.append(dd) if len(err_list) > 0: df = df.append(self.export_hourly2day(err_list, t_t)) return df
def modify_df(beg: Arrow, end: Arrow, modifier: Callable): arr = [] for day in Arrow.range('day', beg, end): arr.append([day.date(), modifier(day)]) return create_df_indexed_by_date(create_df(arr))
def _calendar_tasks(tdb: TaskDB, date: Arrow, period) -> List[Tuple[Arrow, TaskDB]]: start, end = _calendar_range(date, period) tasks = [] # type: List[Tuple[Arrow, TaskDB]] for date in Arrow.range("day", start, end): tasks.append((date, tdb.filter(lambda t: filters.due_on(t, date)))) return tasks