2019-02-03

R4DS

wj

2019,2,2

library(tidyverse)library(nycflights13)library(forcats)library(lubridate)library(modelr)

前言

(1)导入R(readr)

实际上就是读取保存文件、数据库或web Api中的数据,再加载到R的数据框中。

(2)整理(tibble)

就是将数据保存为一致的形式,以满足其所在数据集在语义上的要求。 简而言之,如果数据是整洁的,那么每列都是一个变量,每行都是一个观测值。

(3)转换(dplyr)

包括选取感兴趣的观测(如居住在某个城市里的所有人,或者去年的所有数据)、使用现有变量创建新变量、以及计算一些摘要统计量(如均值或计数) 数据整理和数据转化统称为数据处理。

(4)可视化

本质上是人类活动。对数据提出新的问题。 ###(5)模型 如果将问题定义得足够清晰,那么你就可以使用一个模型来回答问题。 模型本质上是一种数学工具或计算工具。 每个模型都有前提假设,而且模型本身不会对自己的前提假设提出疑问。

(6)沟通

(7)编程

假设验证

数据分析可以分为两类:假设生成和假设验证(有时成为验证性分析)。 无需掩饰,本书的重点就在于假设生成,或者说是数据探索。 经常有人认为建模是用来进行假设验证的工具,而可视化是用来进行假设生成的工具。这种简单的二分法是错误的:模型经常用于数据探索;只需稍作处理,可视化也可以用来进行假设验证。核心区别在于你使用每个观测的频率:如果只用一次,那么就是假设验证;如果多于一次,那么就是数据探索。

第一部分探索

第一章使用ggplot2进行数据可视化

画图函数:

geom_point() 散点图

facet_wrap() 单个变量分面

facet_grid() 多个变量分面

geom_smooth()直线图

geom_bar()条形图

geom_boxplot()箱线图

coord_flip()交换x轴和y轴

coord_polar()设置极坐标

图形属性:

color=class在mpg数据集中按照class进行描绘颜色

alpha=class

shape

linetype线段形状

se=FALSE平滑曲线上下无条状带

..prop..百分比

fill填充色

mpg数据框

mpg

## # A

tibble: 234 x 11##    manufacturer model displ  year  cyl trans drv     cty   hwy fl   class##            ##  1 audi        a4      1.8  1999    4 auto~ f        18    29 p    comp~##  2 audi        a4      1.8  1999    4 manu~ f        21    29 p    comp~##  3 audi        a4      2    2008    4 manu~ f        20    31 p    comp~##  4 audi        a4      2    2008    4 auto~ f        21    30 p    comp~##  5 audi        a4      2.8  1999    6 auto~ f        16    26 p    comp~##  6 audi        a4      2.8  1999    6 manu~ f        18    26 p    comp~##  7 audi        a4      3.1  2008    6 auto~ f        18    27 p    comp~##  8 audi        a4 q~   1.8  1999     4 manu~ 4        18   26 p     comp~##  9 audi        a4 q~   1.8  1999    4 auto~ 4        16    25 p    comp~## 10audi         a4 q~   2   2008     4 manu~ 4        20   28 p     comp~## # ...

with 224 more rows

displ:引擎大小,单位为升。

hwy:汽车在高速公路上行驶时的燃油效率,单位为英里/加仑。

创建ggplot图形

绘制mpg的图形,运行一下代码将displ放在x轴,hwy放在y轴。

ggplot(data=mpg)+  geom_point(mapping=aes(x=displ,y=hwy))

[if !vml]

[endif]

绘图模板

ggplot(data=)+ (mapping=aes())

图形属性映射

图形属性是图中对象的可视化属性,其中包括数据点的大小、形状和颜色。

(1)颜色映射为class

ggplot(data=mpg)+  geom_point(mapping=aes(x=displ,y=hwy,color=class))

[if !vml]

[endif]

分面

ggplot(data=mpg)+  geom_point(mapping=aes(x=displ,y=hwy))+  facet_wrap(~class,nrow=2)

[if !vml]

[endif]

ggplot(data=mpg)+  geom_smooth(mapping=aes(x=displ,y=hwy))

##

`geom_smooth()` using method = 'loess' and formula 'y ~ x'

[if !vml]

[endif]

叠块色

这种堆叠是由position参数设定的位置调整自动完成。如果不想生成堆叠式条形图,还可以使用一下3项之一:

position=identity

ggplot(  data=diamonds,  mapping=aes(x=cut,fill=clarity))+  geom_bar(alpha=1/5,position="identity")

[if !vml]

[endif]

ggplot(  data=diamonds,  mapping=aes(x=cut,color=clarity))+  geom_bar(fill=NA,position="identity")

[if !vml]

[endif]

position=“fill”的效果与堆叠相似,但每组堆叠条形具有同样高度,因此这种条形图可以非常轻松地比较各组间的比例:

ggplot(data=diamonds)+  geom_bar(    mapping=aes(x=cut,fill=clarity),    position="fill"  )

[if !vml]

[endif]

position=“dodge”将每组的条形依次并列放置

ggplot(data=diamonds)+  geom_bar(    mapping=aes(x=cut,fill=clarity),    position="dodge"  )

[if !vml]

[endif]

有些点会聚在一起,此时需要一个抖动,可以避免网格化排列。

ggplot(data=mpg)+  geom_point(    mapping=aes(x=displ,y=hwy),    position="jitter"  )

[if !vml]

[endif]

极坐标coord_polar()

bar <- ggplot(data=diamonds)+  geom_bar(    mapping=aes(x=cut,fill=cut),    show.legend=FALSE,    width=1    )+  theme(aspect.ratio=1)+  labs(x=NULL,y=NULL)bar+coord_flip()

[if !vml]

[endif]

bar+coord_flip()

[if !vml]

[endif]

图形分层语法

ggplot(data=)+

(

 mapping=aes(), stat=, position=

)+

+

 你可以将任何图形精确第描述为数据集、几何对象、 映射集合、统计变换、位置调整、坐标系和分面模式 的一个组合

第二章工作流:基础

函数

function_name(arg1=val1,arg2=val2,…)

seq()函数,可以生成规则的数值排列

x%in%y 选取出x是y中一个值时的所有行

is.na()判断是否为缺失值

year:day选择在year到day中的所有列

-(year:day)选择不在year到day之间的所有列(不包括“year”和“day”)

starts_with(“abc”):匹配以“abc”开头的名称。

ends_with(“xyz”)匹配以xyz结尾的名称

cotains(“ijk”)匹配包含ijk的名称

matches(“(.)\1”)选择匹配正则表达式的那些变量。这个正则表达式会匹配名称中有重复字符的变量。

num_range(“x”,1:3)匹配x1,x2和x3

na.rm=TRUE为除去缺失值(sum(AB,na.rm=TRUE))

常用摘要函数 mean(x)求x平均

median(x)求x的中位数

sd(x)均方误差(又称标准误差,standard

deviation,sd)是分散程度的标准度量方式。

IQR(x)四分位距

mad(x)绝对中位差

秩的度量

min(x)

quantile(x,0.25)找出x中按从小到大顺序大于前25%而小于75%的值

max(x)

first(x)=x[1]

nth(x,2)=x[2]

last(x)=x[length(x)]

sum(!is.na(x))计算非缺失值的数量

n_distinct(x)计算出唯一值的数量

wt=distance按照distance进行加权赋值

快捷键

ALT+-:代码的快速输入

tab:选定需要的函数后再按一次Tab键,Rstudio可以自动添加括号()

ctrl+shift创建脚本

ctrl+enter运行该段代码

变量类型

int整型

dbl双精度浮点数型变量,或称实数

chr表示字符向量,或称字符串

dttm表示日期时间(日期+时间)型变量

lgl逻辑型

fctr表示因子,R是用来表示具有固定数目的值的分类变量

date表示日期型变量

运算符

向量化,使用所谓的“循环法则”

%/%整数除法

%%求余

log()、log2()、log10()

lead()和lag()函数可以返回一个序列的领先值和滞后值

dplyr基础

5个dplyr核心函数

filter()按值筛选观测(选择行,有逻辑表达式在后面)

arrange()对行进行重新排序

mutate()使用现有变量的函数创建新变量

summarize()将多个值总结为一个摘要统计量

select()选择列

cumsum()累加和

cumprod()累加积

commin()累加最小值

cummax()累加最大值

cummean()累加均值

filter()筛选行

filter(flights,month==1,day==1)

## # A

tibble: 842 x 19##     year month   day dep_time sched_dep_time dep_delayarr_time##                           ##  1 2013     1     1     517            515         2     830##  2 2013     1     1     533            529         4     850##  3 2013     1     1     542            540         2     923##  4 2013     1     1     544            545        -1    1004##  5 2013     1     1     554            600        -6     812##  6 2013     1     1     554            558        -4     740##  7 2013     1     1     555            600        -5     913##  8 2013     1     1     557            600        -3     709##  9 2013     1     1     557            600       -3     838## 10  2013    1     1      558            600        -2     753## # ...

with 832 more rows, and 12 more variables: sched_arr_time <int>,## #   arr_delay , carrier ,flight , tailnum ,## #   origin , dest ,air_time , distance , hour ,## #   minute , time_hour

%in%

(nov_dec

<- filter(flights,month%in%c(11,12)))

## # A

tibble: 55,403 x 19##     year month   day dep_time sched_dep_time dep_delayarr_time##                           ##  1 2013    11     1       5           2359         6     352##  2 2013    11     1      35           2250       105     123##  3 2013    11     1     455            500        -5     641##  4  2013    11    1      539            545        -6     856##  5 2013    11     1     542            545        -3     831##  6 2013    11     1     549            600       -11     912##  7 2013    11     1     550            600       -10     705##  8 2013    11     1     554            600        -6     659##  9 2013    11     1     554            600        -6     826## 10  2013   11     1      554            600        -6     749## # ...

with 55,393 more rows, and 12 more variables: sched_arr_time <int>,## #   arr_delay , carrier ,flight , tailnum ,## #   origin , dest ,air_time , distance , hour ,## #   minute , time_hour

filter()只能筛选出条件为TRUE的行;他会排除那些条件为FALSE和NA的行。

df <- tibble(x=c(1,NA,3))filter(df,x>1)

## # A

tibble: 1 x 1##       x##   ## 1     3

filter(df,is.na(x)|x>1)

## # A

tibble: 2 x 1##       x##   ## 1    NA## 2     3

arrange()排列行

arrange(flights,year,month,day)

## # A

tibble: 336,776 x 19##     year month   day dep_time sched_dep_time dep_delayarr_time##                           ##  1 2013     1     1     517            515         2     830##  2 2013     1     1     533            529         4     850##  3 2013     1     1     542            540         2     923##  4 2013     1     1     544            545        -1    1004##  5 2013     1     1     554            600        -6     812##  6 2013     1     1     554            558       -4      740##  7 2013     1     1     555            600        -5     913##  8 2013     1     1     557            600        -3     709##  9 2013     1     1     557            600        -3     838## 10  2013    1     1      558            600        -2     753## # ...

with 336,766 more rows, and 12 more variables: sched_arr_time <int>,## #   arr_delay , carrier ,flight , tailnum ,## #   origin , dest ,air_time , distance , hour ,## #   minute , time_hour

注意: filter是默认升序排列

使用desc()可以按列进行降序排序:

arrange(flights,desc(arr_delay))

## # A

tibble: 336,776 x 19##     year month   day dep_time sched_dep_time dep_delayarr_time##                           ##  1 2013     1     9     641            900      1301    1242##  2 2013     6    15    1432           1935      1137    1607##  3 2013     1    10    1121           1635      1126    1239##  4 2013     9    20    1139           1845     1014     1457##  5 2013     7    22     845           1600      1005    1044##  6 2013     4    10    1100           1900       960    1342##  7 2013     3    17    2321            810       911     135##  8 2013     7    22     2257            759       898     121##  9 2013    12     5     756           1700       896    1058## 10  2013    5     3     1133           2055       878    1250## # ...

with 336,766 more rows, and 12 more variables: sched_arr_time <int>,## #   arr_delay , carrier ,flight , tailnum ,## #   origin , dest ,air_time , distance , hour ,## #   minute , time_hour

缺失值总是排在最后

df <- tibble(x=c(5,2,NA))arrange(df,x)

## # A

tibble: 3 x 1##       x##   ## 1     2## 2     5## 3    NA

arrange(df,desc(x))

## # A

tibble: 3 x 1##       x##   ## 1     5## 2     2## 3    NA

使用select()选择列

select(flights,year,month,day)

## # A

tibble: 336,776 x 3##     year month   day##    ##  1 2013     1     1##  2 2013     1     1##  3 2013     1     1##  4 2013     1     1##  5 2013     1     1##  6 2013     1     1##  7 2013     1     1##  8 2013     1     1##  9 2013     1     1## 10  2013    1     1## # ...

with 336,766 more rows

select(flights,year:day)

## # A

tibble: 336,776 x 3##     year month   day##    ##  1 2013     1     1##  2 2013     1     1##  3 2013     1     1##  4 2013     1     1##  5 2013     1     1##  6 2013     1     1##  7 2013     1     1##  8 2013     1     1##  9 2013     1     1## 10  2013    1     1## # ...

with 336,766 more rows

选择不再year到day之间的所有列(不包括year和day)

select(flights,-(year:day))

## # A

tibble: 336,776 x 16##    dep_time sched_dep_time dep_delay arr_timesched_arr_time arr_delay##                                         ##  1     517            515         2     830            819        11##  2     533            529         4     850            830        20##  3     542            540         2     923            850        33##  4     544            545        -1    1004           1022       -18##  5     554            600        -6     812            837       -25##  6      554           558        -4      740            728        12##  7     555            600        -5     913            854        19##  8     557            600        -3     709            723       -14##  9     557            600        -3     838            846        -8## 10      558            600        -2     753            745         8## # ...

with 336,766 more rows, and 10 more variables: carrier <chr>,## #   flight , tailnum ,origin , dest , air_time ,## #   distance , hour ,minute , time_hour

将几个变量移到数据框开头

select(flights,time_hour,air_time,everything())

## # A

tibble: 336,776 x 19##    time_hour           air_time  year month  day dep_time sched_dep_time##                                    ##  1 2013-01-01 05:00:00      227 2013     1     1     517            515##  2 2013-01-01 05:00:00      227 2013     1     1     533            529##  3 2013-01-01 05:00:00      160 2013     1     1     542            540##  4 2013-01-01 05:00:00      183 2013     1     1     544            545##  5 2013-01-01 06:00:00      116 2013     1     1     554            600##  6 2013-01-01 05:00:00      150 2013     1     1     554            558##  7 2013-01-01 06:00:00      158 2013     1     1     555            600##  8 2013-01-01 06:00:00       53 2013     1     1     557            600##  9 2013-01-01 06:00:00      140 2013     1     1     557            600## 102013-01-01 06:00:00      138  2013    1     1      558            600## # ...

with 336,766 more rows, and 12 more variables: dep_delay <dbl>,## #   arr_time , sched_arr_time, arr_delay , carrier ,## #   flight , tailnum ,origin , dest , distance ,## #   hour , minute

使用mutate()添加新变量

flights_sml

<- select(flights,  year:day,  ends_with("delay"),  distance,  air_time  )mutate(flights_sml,  gain=arr_delay-dep_delay,  speed=distance/air_time*60  )

## # A

tibble: 336,776 x 9##     year month   day dep_delay arr_delay distanceair_time  gain speed##                      ##  1 2013     1     1        2        11     1400     227     9  370.##  2 2013     1     1        4        20     1416     227    16  374.##  3 2013     1     1        2        33     1089     160    31  408.##  4 2013     1     1       -1       -18     1576     183   -17  517.##  5 2013     1     1       -6       -25     762      116   -19 394.##  6 2013     1     1       -4        12      719     150    16  288.##  7 2013     1     1       -5        19     1065     158    24  404.##  8 2013     1     1       -3       -14      229      53   -11  259.##  9 2013     1     1       -3        -8      944     140    -5  405.## 10  2013    1     1        -2         8     733      138    10 319.## # ...

with 336,766 more rows

一旦创建,新列就可以立即使用:

mutate(flights_sml,  gain=arr_delay-dep_delay,  hours=air_time/60,  gain_per_hour=gain/hours  )

## # A

tibble: 336,776 x 10##     year month   day dep_delay arr_delay distanceair_time  gain hours##                      ##  1 2013     1     1        2        11    1400      227     9 3.78##  2 2013     1     1        4        20     1416     227    16 3.78##  3 2013     1     1        2        33     1089     160    31 2.67##  4 2013     1     1       -1       -18     1576     183   -17 3.05##  5 2013     1     1       -6       -25      762     116   -19 1.93##  6 2013     1     1       -4        12      719     150    16 2.5  ##  7 2013     1     1       -5        19     1065     158    24 2.63##  8 2013     1     1       -3       -14      229      53   -11 0.883##  9 2013     1     1       -3        -8      944     140    -5 2.33## 10  2013    1     1        -2         8     733      138    10 2.3 ## # ...

with 336,766 more rows, and 1 more variable: gain_per_hour <dbl>

如果只想保留新变量,可以使用transmute()函数

transmute(flights,  gain=arr_delay-dep_delay,  hours=air_time/60,  gain_per_hour=gain/hours)

## # A

tibble: 336,776 x 3##     gain hours gain_per_hour##             ##  1     93.78           2.38##  2    163.78           4.23##  3    312.67          11.6##  4   -173.05          -5.57##  5   -191.93          -9.83##  6    162.5            6.4##  7    242.63           9.11##  8   -110.883        -12.5##  9    -52.33          -2.14## 10    10 2.3            4.35## # ...

with 336,766 more rows

lead()和lag()函数可以返回一个序列的领先值和滞后值

(x <- 1:10)

##  [1] 1  2  3 4  5  6 7  8  9 10

lag(x)

##  [1] NA 1  2  3 4  5  6 7  8  9

lead(x)

##  [1]  2 3  4  5  6  7 8  9 10NA

使用summarize()进行分组摘要 可以将数据框折叠成一行:

summarize(flights,delay=mean(dep_delay,na.rm=TRUE))

## # A

tibble: 1 x 1##   delay##   ## 1  12.6

group_by()可以将分析单位从整个数据集更改为单个分组。接下来,在 分组后的数据框中使用dplyr函数时,会自动地应用到每个分组。

by_day = group_by(flights,year,month,day)summarize(by_day,delay=mean(dep_delay,na.rm=TRUE))

## # A

tibble: 365 x 4## #Groups:   year, month [?]##     year month   day delay##    ##  1 2013     1     1 11.5##  2 2013     1     2 13.9##  3 2013    1     3 11.0##  4 2013     1     4 8.95##  5 2013     1     5 5.73##  6 2013     1     6 7.15##  7 2013     1     7 5.42##  8 2013     1     8 2.55##  9 2013     1     9 2.28## 10  2013    1    10  2.84## # ...

with 355 more rows

管道%>%

%>%管道最好读作“然后”

x%>%f(y)会转换为f(x,y)

x%>%f(y)%>%g(z)会转换为g(f(x,y),z)

缺失值

flights%>%  group_by(year,month,day)%>%  summarize(mean=mean(dep_delay))

## # A

tibble: 365 x 4## #Groups:   year, month [?]##     year month   day  mean##    ##  1 2013     1     1   NA##  2 2013     1     2   NA##  3 2013     1     3   NA##  4 2013     1     4   NA##  5 2013     1     5   NA##  6 2013     1     6   NA##  7 2013     1     7   NA##  8  2013     1    8    NA##  9 2013     1     9   NA## 10  2013    1    10    NA## # ...

with 355 more rows

这样会得到很多缺失值,这是因为聚合函数遵循缺失值的一般规则:如果输入中有确实值,那么输出也会是缺失值。

flights%>%  group_by(year,month,day)%>%  summarize(mean=mean(dep_delay,na.rm = TRUE))

## # A tibble:

365 x 4## #Groups:   year, month [?]##     year month   day mean##    ##  1 2013     1     1 11.5##  2 2013     1     2 13.9##  3 2013     1     3 11.0##  4 2013     1     4 8.95##  5 2013     1     5 5.73##  6 2013     1     6 7.15##  7 2013     1     7 5.42##  8 2013     1     8 2.55##  9 2013     1     9 2.28## 10  2013    1    10  2.84## # ...

with 355 more rows

缺失值表示取消的航班,我们也可以通过先去除取消的航班来解决缺失值问题。

not_cancelled

<- flights%>%  filter(!is.na(dep_delay),!is.na(arr_delay))#关键一步not_cancelled%>%  group_by(year,month,day)%>%  summarize(mean=mean(dep_delay))

## # A

tibble: 365 x 4## #Groups:   year, month [?]##     year month   day mean##    ##  1 2013     1     1 11.4##  2 2013     1     2 13.7##  3 2013     1     3 10.9##  4 2013     1     4 8.97##  5 2013     1     5 5.73##  6 2013     1     6 7.15##  7 2013     1     7 5.42##  8 2013     1     8 2.56##  9 2013     1     9 2.30## 10  2013    1    10  2.84## # ...

with 355 more rows

位置度量

not_cancelled%>%  group_by(year,month,day)%>%  summarize(    avg_delay1=mean(arr_delay),    avg_delay2=mean(arr_delay[arr_delay>0])#[arr_delay>0]arr_delay向量中变量中的arr_delay大于0的元素。  )

## # A

tibble: 365 x 5## #Groups:   year, month [?]##     year month   day avg_delay1 avg_delay2##                ##  1 2013     1     1    12.7         32.5##  2 2013     1     2    12.7         32.0##  3 2013     1    3     5.73        27.7##  4 2013     1     4    -1.93        28.3##  5 2013     1     5    -1.53        22.6##  6 2013     1     6     4.24        24.4##  7 2013     1     7    -4.95        27.8##  8 2013     1     8    -3.23        20.8##  9 2013     1     9    -0.264       25.6## 10  2013    1    10     -5.90        27.3## # ...

with 355 more rows

not_cancelled%>%  count(tailnum,wt=distance)

## # A

tibble: 4,037 x 2##    tailnum     n##        ##  1 D942DN   3418##  2 N0EGMQ 239143##  3 N10156 109664##  4 N102UW  25722##  5 N103US  24619##  6 N104UW  24616##  7 N10575 139903##  8 N105UW  23618##  9 N107US  21677## 10N108UW   32070## # ...

with 4,027 more rows

逻辑计数和比例

sum(x>10)

true=1,false=0

not_cancelled%>%  group_by(year,month,day)%>%  summarize(n_early=sum(dep_time<500))

## # A

tibble: 365 x 4## #Groups:   year, month [?]##     year month   day n_early##       ##  1 2013     1     1      0##  2 2013     1     2      3##  3 2013     1     3      4##  4 2013     1     4      3##  5 2013     1     5      3##  6 2013     1     6      2##  7 2013     1     7      2##  8 2013     1     8      1##  9 2013     1     9      3## 10  2013    1    10      3## # ...

with 355 more rows

第五章探索性数据分析

如何使用可视化和数据转换来系统化地探索数据,统计学家将这项任务称为探索性数据分析(EDA)。EDA是一个可迭代的循环过程。

EDA工具:可视化,数据转换和建模。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容