第十章 時序數據

來源:http://inter.joyfulpandas.datawhale.club/build/html/%E7%9B%AE%E5%BD%95/ch10.html

一阅束、時序中的基本對象

概念 單元素類型 數組類型 pandas數據類型
Date times Timestamp DatetimeIndex datetime64[ns]
Time deltas Timedelta TimedeltaIndex timedelta64[ns]
Time spans Period PeriodIndex period[freq]
Date offsets DateOffset None None

二、時間戳

1. Timestamp的構造與屬性pd.Timestamp

單個時間戳的生成: 一般的時間格式都支持

ts = pd.Timestamp('2020-1-1 08:10:30')
ts = pd.Timestamp('2020/1/1')
#通過 year, month, day, hour, min, second 可以獲取具體的數值
In [7]: ts.year
Out[7]: 2020
In [8]: ts.month
Out[8]: 1
In [9]: ts.day
Out[9]: 1
In [10]: ts.hour
Out[10]: 8
In [11]: ts.minute
Out[11]: 10
In [12]: ts.second
Out[12]: 30
#通過 pd.Timestamp.max 和 pd.Timestamp.min 可以獲取時間戳表示的范圍
In [13]: pd.Timestamp.max
Out[13]: Timestamp('2262-04-11 23:47:16.854775807')
In [14]: pd.Timestamp.min
Out[14]: Timestamp('1677-09-21 00:12:43.145225')
In [15]: pd.Timestamp.max.year - pd.Timestamp.min.year
Out[15]: 585

2. Datetime序列的生成to_datetime和date_range

to_datetime :

能夠把一列時間戳格式的對象轉換成為 datetime64[ns] 類型的時間序列

1)傳入列表:生成 DatetimeIndex 序列

temp = pd.to_datetime(['2020-1-1', '2020-1-3', '2020-1-6'])

如果想要轉為 datetime64[ns] 的序列顶吮,需要顯式用 Series 轉化:

pd.Series(temp).head()

2)傳入series:生成datetime64類型的序列

s = pd.to_datetime(df.Test_Date)

當時間戳格式不滿足轉換時,可以強制使用format進行匹配:

temp = pd.to_datetime(['2020\\1\\1','2020\\1\\3'],format='%Y\\%m\\%d')
'''
DatetimeIndex(['2020-01-01', '2020-01-03'], dtype='datetime64[ns]', freq=None)
'''

3)把一個表的多列時間屬性拼接轉為時間序列挚躯,此時列名必須和以下給定的時間關鍵詞列名一致:

df_date_cols = pd.DataFrame({'year':[2020,2020],
                            'month':[1,1],
                            'day':[1,2],
                            'hour':[10,20],
                            'minute':[30,50],
                            'second':[20.40]})
pd.to_datetime(df_date_cols)
'''
0   2020-01-01 10:30:20
1   2020-01-02 20:50:40
dtype: datetime64[ns]
'''

date_range

是一種生成連續(xù)間隔時間的一種方法赐劣,4個參數:start,end,freq,periods倡怎,分別表示開始時間趟薄,結束時間,時間間隔魄藕,時間戳個數内列。同樣只要決定三個參數即可確定。這里要注意背率,開始或結束日期如果作為端點則它會被包含:

In [25]: pd.date_range('2020-1-1','2020-1-21', freq='10D') # 包含
Out[25]: DatetimeIndex(['2020-01-01', '2020-01-11', '2020-01-21'], dtype='datetime64[ns]', freq='10D')

In [26]: pd.date_range('2020-1-1','2020-2-28', freq='10D')
Out[26]: 
DatetimeIndex(['2020-01-01', '2020-01-11', '2020-01-21', '2020-01-31',
               '2020-02-10', '2020-02-20'],
              dtype='datetime64[ns]', freq='10D')

In [27]: pd.date_range('2020-1-1',
                       '2020-2-28', periods=6) # 由于結束日期無法取到话瞧,freq不為10天 
Out[27]: 
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-12 14:24:00',
               '2020-01-24 04:48:00', '2020-02-04 19:12:00',
               '2020-02-16 09:36:00', '2020-02-28 00:00:00'],
              dtype='datetime64[ns]', freq=None)

3.改變時間序列的index(asfreq)

能夠根據給定的 freq 對序列進行類似于 reindex 的操作:

#原序列:
s = pd.Series(np.random.rand(5), index=pd.to_datetime(['2020-1-%d'%i for i in range(1,10,2)]))
s.head()
'''
2020-01-01    0.393911
2020-01-03    0.703650
2020-01-05    0.650046
2020-01-07    0.726203
2020-01-09    0.126783
dtype: float64
'''
#按天數index
s.asfreq('D').head()
'''
2020-01-01    0.836578
2020-01-02         NaN
2020-01-03    0.678419
2020-01-04         NaN
2020-01-05    0.711897
Freq: D, dtype: float64
'''
#每12小時index一次
s.asfreq('12H').head()
'''
2020-01-01 00:00:00    0.836578
2020-01-01 12:00:00         NaN
2020-01-02 00:00:00         NaN
2020-01-02 12:00:00         NaN
2020-01-03 00:00:00    0.678419
Freq: 12H, dtype: float64
'''

練一練

Timestamp 上定義了一個 value 屬性,其返回的整數值代表了從1970年1月1日零點到給定時間戳相差的納秒數寝姿,請利用這個屬性構造一個隨機生成給定日期區(qū)間內日期序列的函數交排。

import random
def randomDateTimeSeries(time1str, time2str, n):
    time1 = pd.Timestamp(time1str)
    time2 = pd.Timestamp(time2str)
    return pd.Series(pd.to_datetime([pd.Timestamp(random.randrange(time1.value,time2.value)) for i in range(n)]))
randomDateTimeSeries('2019-1-2', '2019-2-3',3)
'''
0   2019-02-01 11:57:10.618481694
1   2019-01-20 01:09:36.476473128
2   2019-01-27 07:59:37.138227967
dtype: datetime64[ns]
'''

4. dt對象

三類操作:

  1. 取出時間相關的屬性,date, time, year, month, day, hour, minute, second,microsecond, nanosecond, dayofweek, dayofyear, weekofyear, daysinmonth, quarter 饵筑,其中 daysinmonth, quarter 分別表示月中的第幾天和季度埃篓, month_name(), day_name() 返回英文的月名和星期名

  2. 判斷時間戳是否滿足條件,主要用于測試是否為月/季/年的第一天或者最后一天: s.dt.is_year_start, s.dt.is_year_end, is_quarter/month_start, is_quarter/month_end

  3. 取整操作包含 round, ceil, floor 翻翩,它們的公共參數為 freq 都许,常用的包括 H, min, S (小時稻薇、分鐘嫂冻、秒)

#原列表
In [42]: s = pd.Series(pd.date_range('2020-1-1 20:35:00',
   ....:                             '2020-1-1 22:35:00',
   ....:                             freq='45min'))
   ....: 

In [43]: s
Out[43]: 
0   2020-01-01 20:35:00
1   2020-01-01 21:20:00
2   2020-01-01 22:05:00
dtype: datetime64[ns]
#四舍五入
In [44]: s.dt.round('1H')
Out[44]: 
0   2020-01-01 21:00:00
1   2020-01-01 21:00:00
2   2020-01-01 22:00:00
dtype: datetime64[ns]
#向上取整
In [45]: s.dt.ceil('1H')
Out[45]: 
0   2020-01-01 21:00:00
1   2020-01-01 22:00:00
2   2020-01-01 23:00:00
dtype: datetime64[ns]
#向下取整
In [46]: s.dt.floor('1H')
Out[46]: 
0   2020-01-01 20:00:00
1   2020-01-01 21:00:00
2   2020-01-01 22:00:00
dtype: datetime64[ns]

5. 時間戳的切片與索引

一般而言,時間戳序列作為索引使用塞椎。如果想要選出某個子時間戳序列桨仿,第一類方法是利用dt對象和布爾條件聯合使用,另一種方式是利用切片案狠,后者常用于連續(xù)時間戳服傍。下面,舉一些例子說明:

#原時間序列
s = pd.Series(np.random.randint(2,size=366), index=pd.date_range('2020-01-01','2020-12-31'))
idx = pd.Series(s.index).dt
s.head()
'''
2020-01-01    1
2020-01-02    1
2020-01-03    0
2020-01-04    1
2020-01-05    0
Freq: D, dtype: int32
'''

第一類方法:利用dt對象和布爾條件

#Example1:每月的第一天或者最后一天
s[(idx.is_month_start|idx.is_month_end).values].head()
'''
2020-01-01    1
2020-01-31    0
2020-02-01    1
2020-02-29    1
2020-03-01    0
dtype: int32
'''
#Example2:雙休日
s[idx.dayofweek.isin([5,6]).values].head()
'''
2020-01-04    1
2020-01-05    0
2020-01-11    0
2020-01-12    1
2020-01-18    1
dtype: int32
'''

第二類:切片骂铁,常用于連續(xù)時間戳

#Example3:取出單日值
s['2020-01-01']
'''
1
'''
#Example4:取出七月
s['2020-07'].head()
'''
2020-07-01    0
2020-07-02    1
2020-07-03    0
2020-07-04    0
2020-07-05    0
Freq: D, dtype: int32
'''
#Example5:取出5月初至7月15日
In [55]: s['2020-05':'2020-7-15'].head()
Out[55]: 
2020-05-01    0
2020-05-02    1
2020-05-03    0
2020-05-04    1
2020-05-05    1
Freq: D, dtype: int32

In [56]: s['2020-05':'2020-7-15'].tail()
Out[56]: 
2020-07-11    0
2020-07-12    0
2020-07-13    1
2020-07-14    0
2020-07-15    1
Freq: D, dtype: int32

三吹零、時間差

1. Timedelta的生成

3種方法生成時間差:

  • pd.Timestamp('\color{#1A944A}20200102\ 08:00:00')-pd.Timestamp('\color{#1A944A}20200101\ 07:35:00')
  • pd.Timedelta(days=1, minutes=25) # 需要注意加s
  • pd.Timedelta('\color{#1A944A}{1\ days\ 25\ minutes}') # 字符串生成

生成時間差序列,類型是timedelta64[ns]:

  • pd.\color{#1A944A}to\_timedelta(df.Time_Record)
  • pd.\color{#1A944A}timedelta\_range('0s', '1000s', freq='6min')拉庵,類似date_range

時間差序列灿椅,也有dt對象,屬性有:

  • s.dt.days
  • s.dt.seconds钞支,對天數取余后的秒數
  • s.dt.microseconds
  • s.dt.total_seconds
  • s.dt.nanoseconds

也可以在dt對象上繼續(xù)使用取整函數:

pd.to_timedelta(df.Time_Recond).dt.round('min')

2. Timedelta的運算

1) 與標量的乘法運算

td1 = pd.Timedelta(days=1)
td2 = pd.Timedelta(days=3)
ts = pd.Timestamp('20200101')
td1 * 2

2) 與時間戳的加減法運算

ts + td1
ts - td1

3) 與時間差的加減法與除法運算

td2 - td1

這些運算都可以移植到時間差的序列上:

td1 = pd.timedelta_range(start='1 days', periods=5)
td2 = pd.timedelta_range(start='12 hours', freq='2H', periods=5)
#時間戳序列
ts = pd.date_range('20200101', '20200105')
td1 * 5
td1 * pd.Series(list(range(5))) # 逐個相乘
'''
0    0 days
1    2 days
2    6 days
3   12 days
4   20 days
dtype: timedelta64[ns]
'''
td1 - td2
'''
TimedeltaIndex(['0 days 12:00:00', '1 days 10:00:00', '2 days 08:00:00',
                '3 days 06:00:00', '4 days 04:00:00'],
               dtype='timedelta64[ns]', freq=None)
'''
td1 + pd.Timestamp('20200101')
'''
DatetimeIndex(['2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05',
               '2020-01-06'],
              dtype='datetime64[ns]', freq='D')
'''
td1 + ts # 逐個相加
'''
DatetimeIndex(['2020-01-02', '2020-01-04', '2020-01-06', '2020-01-08',
               '2020-01-10'],
              dtype='datetime64[ns]', freq=None)
'''

四茫蛹、日期偏置

1. Offset對象

是一種和日歷相關的特殊時間差

#求2020年9月第一個周一的日期:
pd.Timestamp('20200831') + pd.offsets.WeekOfMonth(week=0,weekday=0)
'''
Timestamp('2020-09-07 00:00:00')
'''
#求2020年9月7日后的第30個工作日是哪一天。
pd.Timestamp('20200907') + pd.offsets.BDay(30)
'''
Timestamp('2020-10-19 00:00:00')
'''
#使用-時烁挟,獲取向前的日期
pd.Timestamp('20200831') - pd.offsets.WeekOfMonth(week=0,weekday=0)
'''
Timestamp('2020-08-03 00:00:00')
'''
pd.Timestamp('20200907') - pd.offsets.BDay(30)
'''
Timestamp('2020-07-27 00:00:00')
'''
pd.Timestamp('20200907') + pd.offsets.MonthEnd()
'''
Timestamp('2020-09-30 00:00:00')
'''

特殊的Offset對象CDay婴洼,參數:

  • holiday: 跳過這個日期往后找符合的星期
  • weekmask: 保留字符串中出現的星期
  • n: 往后加幾天
my_filter= pd.offsets.CDay(n=1, weekmask='Wed Fri', holidays=['20200109'])
dr = pd.date_range('20200108', '20200111')
dr.to_series().dt.dayofweek
'''
my_filter = pd.offsets.CDay(n=1,weekmask='Wed Fri',holidays=['20200109'])
dr = pd.date_range('20200108', '20200111')
dr.to_series().dt.dayofweek
2020-01-08    2
2020-01-09    3
2020-01-10    4
2020-01-11    5
Freq: D, dtype: int64
'''
[i + my_filter for i in dr]
'''
[Timestamp('2020-01-10 00:00:00'), 1-8后一天是1-9,跳過撼嗓,后一天是1-10柬采,是周五欢唾,所以改為1-10
 Timestamp('2020-01-10 00:00:00'),1-9后一天是1-10周五,保留
 Timestamp('2020-01-15 00:00:00'),1-10后一天是1-11向后找粉捻,1-15是周三
 Timestamp('2020-01-15 00:00:00')]同上
'''

2. 偏置字符串

date_range的freq取值可用Offset對象匈辱,同時也可以用Offset對應的字符串替代:

pd.date_range('20200101', '20200331', freq='MS') #月初
pd.date_range('20200101','20200331', freq=pd.offsets.MonthBegin()) #效果同上
'''
DatetimeIndex(['2020-01-01', '2020-02-01', '2020-03-01'], dtype='datetime64[ns]', freq='MS')
'''

類似的還有:

’M' pd.offsets.MonthEnd() 月末
'B' pd.offsets.BDay() 工作日
'W-MON' pd.offsets.CDay() 周一
'WOM-1MON' pd.offsets.WeekOfMonth(week, weekday=0) 每月第一個周一

五、時序中的滑窗與分組

1. 滑動窗口

時序的滑窗函數杀迹,即把滑動窗口用freq關鍵詞代替亡脸。

r = s.rolling('30D')

s.shift(freq = '50D')

my_series.diff(1).head() 獲得時間間隔序列

2. 重采樣

類似groupby的用法,針對時間序列進行分組計算树酪。

#計算每10天的均值:
s.resample('10D').mean()
'''
2020-01-01   -2.000000
2020-01-11   -3.166667
2020-01-21   -3.625000
2020-01-31   -4.000000
2020-02-10   -0.375000
Freq: 10D, dtype: float64
'''
#apply
s.resample('10D').apply(lambda x:x.max()-x.min()).head() # 極差
'''
2020-01-01    3
2020-01-11    4
2020-01-21    4
2020-01-31    2
2020-02-10    4
Freq: 10D, dtype: int32
'''

resample的邊界情況:

  1. 默認

是從最小時間戳對應日期的午夜00:00:00開始增加freq浅碾,直到不超過該最小時間戳的最大時間戳。

例如某時間序列的第一個時間戳是2020-01-01 8:26:35续语,resample('7min')垂谢,那么會從該天的00:00:00開始增加7min*n,且7min*n小于等于8:26:35疮茄,即得到8:24

  1. 指定origin

從序列的最小時間戳開始依次增加freq進行分組滥朱,可以指定origin=start

s.resample('7min', origin='start').mean()

  1. 在返回值中,要注意索引一般是取組的第一個時間戳力试,但M, A, Q, BM, BA, BQ, W這七個是取對應區(qū)間的最后一個時間戳:
s = pd.Series(np.random.randint(2,size=366), index=pd.date_range('2020-01-01', '2020-12-31'))
s.resample('M').mean().head()
'''
2020-01-31    0.451613 月末為索引
2020-02-29    0.448276
2020-03-31    0.516129
2020-04-30    0.566667
2020-05-31    0.451613
Freq: M, dtype: float64
'''
s.resample('MS').mean().head() # 結果一樣徙邻,但索引不同
'''
2020-01-01    0.451613 月初為索引
2020-02-01    0.448276
2020-03-01    0.516129
2020-04-01    0.566667
2020-05-01    0.451613
Freq: MS, dtype: float64
'''

六、練習

Ex1:太陽輻射數據集

現有一份關于太陽輻射的數據集:

1.將Datetime, Time合并為一個時間列Datetime畸裳,同時把它作為索引后排序缰犁。

df['Datetime'] = pd.to_datetime(df.Data.str.split(' ').str[0] + " " + df.Time)
df = df.drop(columns=['Data', 'Time'])
df.set_index('Datetime').sort_index()
'''
            Radiation   Temperature
Datetime        
2016-09-01 00:00:08 2.58    51
2016-09-01 00:05:10 2.83    51
2016-09-01 00:20:06 2.16    51
2016-09-01 00:25:05 2.21    51
2016-09-01 00:30:09 2.25    51
'''
  1. 每條記錄時間的間隔顯然并不一致,請解決如下問題:
  • 找出間隔時間的前三個最大值所對應的三組時間戳怖糊。
  • 是否存在一個大致的范圍帅容,使得絕大多數的間隔時間都落在這個區(qū)間中?如果存在伍伤,請對此范圍內的樣本間隔秒數畫出柱狀圖并徘,設置bins=50
#找出間隔時間的前三個最大值所對應的三組時間戳扰魂。
#1.求diff并轉成total_seconds模式
s = df.index.to_series().reset_index(drop=True).diff().dt.total_seconds()
#2.選出前3個最大值麦乞,并獲取它們的index列表(Int64Index類型)
max_3 = s.nlargest(3).index
#3.聯合這個index的前一個index,并獲取值
df.index[max_3.union(max_3-1)]
#是否存在一個大致的范圍阅爽,使得絕大多數的間隔時間都落在這個區(qū)間中路幸?如果存在,請對此范圍內的樣本間隔秒數畫出柱狀圖付翁,設置`bins=50`简肴。
#把分位數大于0.99的和分位數小于0.01的都設置為NaN,然后畫圖
res = s.mask((s>s.quantile(0.99))|(s<s.quantile(0.01)))
_ = plt.hist(res, bins=50)
  1. 求如下指標對應的Series
  • 溫度與輻射量的6小時滑動相關系數
  • 以三點、九點百侧、十五點砰识、二十一點為分割能扒,該觀測所在時間區(qū)間的溫度均值序列
  • 每個觀測6小時前的輻射量(一般而言不會恰好取到,此時取最近時間戳對應的輻射量)
#1.溫度與輻射量的6小時滑動相關系數
#注意:使用rolling時辫狼,設置一個dateTime列為index初斑,然后指明另一個列為rolling對象
df = df.set_index('Datetime').sort_index()
df.Radiation.rolling('6H').corr(df.Temperature)
#2. 分割時區(qū),選擇resample
res = df.Temperature.resample('6H', origin='03:00:00').mean()
#3. 滑動窗口或日期偏置膨处,get_loc见秤,method='nearest'
my_dt = df.index.shift(freq='-6H') #或者: df.index-pd.offsets.Hour(6)
int_loc = [df.index.get_loc(i, method='nearest') for i in my_dt]
res = df.Radiation.iloc[int_loc]

Ex2:水果銷量數據集

現有一份2019年每日水果銷量記錄表:

    Date       Fruit    Sale
0   2019-04-18  Peach   15
1   2019-12-29  Peach   15
2   2019-06-05  Peach   19
  1. 統(tǒng)計如下指標:
  • 每月上半月(15號及之前)與下半月葡萄銷量的比值

    可以通過自定義的方式進行分組,并命名np.where(df_grape.Date.dt.day<=15,'First', 'Second')

    df.Date = pd.to_datetime(df.Date)
    df_grape = df.query("Fruit == 'Grape'")
    #可以通過自定義的方式進行分組真椿,并命名np.where(df_grape.Date.dt.day<=15,'First', 'Second')
    res = df_grape.groupby([np.where(df_grape.Date.dt.day<=15,'First', 'Second'),df_grape.Date.dt.month])['Sale'].mean().to_frame().unstack(0).droplevel(0,axis=1)
    res = (res.First/res.Second).rename_axis('Month')
    
  • 每月最后一天的生梨銷量總和

獲取月最后一天可以直接使用[df.Date.dt.is_month_end]索引鹃答,不需要定義索引

df.query('Fruit == "Pear"')[df.Date.dt.is_month_end].groupby('Date').sum()
  • 每月最后一天工作日的生梨銷量總和

    BM: 工作日最后一天

    構造一個date序列,查看它是否在這個序列里

df[df.Date.isin(pd.date_range('20190101', '20191231',freq='BM'))].query("Fruit == 'Pear'").groupby('Date').Sale.mean().head()
  • 每月最后五天的蘋果銷量均值

groupby后可以跟nlargest(5) 選出每個組前5大的索引

#篩選出所有月最后五天的日期
target_dt = df.drop_duplicates().groupby(df.Date.drop_duplicates().dt.month)['Date'].nlargest(5).reset_index(drop=True)
#根據日期找到相關的記錄
res = df.set_index('Date').loc[target_dt].reset_index().query("Fruit == 'Apple'")
#按月份計算均值
res = res.groupby(res.Date.dt.month)['Sale'].mean().rename_axis('Month')
res.head()
  1. 按月計算周一至周日各品種水果的平均記錄條數突硝,行索引外層為水果名稱测摔,內層為月份,列索引為星期解恰。

復習:groupby里的分類標準是字符串列表或者序列锋八,可以直接自己定義;category可以快速自定義順序并排序

month_order = ['January','February','March','April','May','June','July','August','September','October','November','December']
week_order = ['Mon','Tue','Wed','Thu','Fri','Sat','Sum']
group1 = df.Date.dt.month_name().astype('category').cat.reorder_categories(month_order, ordered=True)
group2 = df.Fruit
group3 = df.Date.dt.dayofweek.replace(dict(zip(range(7),week_order))).astype('category').cat.reorder_categories(week_order, ordered=True)
res = df.groupby([group1, group2,group3])['Sale'].count().to_frame().unstack(0).droplevel(0,axis=1)
res.head()
  1. 按天計算向前10個工作日窗口的蘋果銷量均值序列护盈,非工作日的值用上一個工作日的結果填充挟纱。
#獲取蘋果工作日的銷量記錄
df_apple = df[(df.Fruit=='Apple')&(~df.Date.dt.dayofweek.isin([5,6]))]
#構造一個序列,填充蘋果工作日的銷量記錄黄琼,設置index為date樊销,按Date分組,并計算組和
s = pd.Series(df_apple.Sale.values,index=df_apple.Date).groupby('Date').sum()
#重新設置index
res = s.rolling('10D').mean().reindex(pd.date_range('20190101','20191231')).fillna(method='ffill')
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末脏款,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子裤园,更是在濱河造成了極大的恐慌撤师,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拧揽,死亡現場離奇詭異剃盾,居然都是意外死亡,警方通過查閱死者的電腦和手機淤袜,發(fā)現死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門痒谴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铡羡,你說我怎么就攤上這事积蔚。” “怎么了烦周?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵尽爆,是天一觀的道長怎顾。 經常有香客問我,道長漱贱,這世上最難降的妖魔是什么槐雾? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮幅狮,結果婚禮上募强,老公的妹妹穿的比我還像新娘。我一直安慰自己崇摄,他們只是感情好钻注,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著配猫,像睡著了一般幅恋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泵肄,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天捆交,我揣著相機與錄音,去河邊找鬼腐巢。 笑死品追,一個胖子當著我的面吹牛,可吹牛的內容都是我干的冯丙。 我是一名探鬼主播肉瓦,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胃惜!你這毒婦竟也來了泞莉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤船殉,失蹤者是張志新(化名)和其女友劉穎鲫趁,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體利虫,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡挨厚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了糠惫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疫剃。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖硼讽,靈堂內的尸體忽然破棺而出巢价,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布蹄溉,位于F島的核電站咨油,受9級特大地震影響,放射性物質發(fā)生泄漏柒爵。R本人自食惡果不足惜役电,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棉胀。 院中可真熱鬧法瑟,春花似錦、人聲如沸唁奢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麻掸。三九已至酥夭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脊奋,已是汗流浹背熬北。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诚隙,地道東北人讶隐。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像久又,于是被迫代替她去往敵國和親巫延。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容