深度解析數(shù)據(jù)挖掘中的數(shù)據(jù)理解和預處理

很多人說山宾,數(shù)據(jù)準備工作真是個“體力活”至扰,耗時耗力不說,還異常的枯燥無味塌碌。建模之前的數(shù)據(jù)處理確實是平淡的渊胸,它往往不需要多高的智商旬盯,多牛的編程技巧台妆,多么高大上的統(tǒng)計模型。但是胖翰,它卻能時時觸發(fā)你的興奮點接剩,因為它需要足夠的耐心和細心,稍不留神就前功盡棄萨咳。在這次的內(nèi)容里懊缺,我首先會從“數(shù)據(jù)理解”、“變量類型”和“質(zhì)量檢查”三個方面進行闡述培他,然后會以一個自己做過的實際數(shù)據(jù)為例進行展示鹃两。

一、數(shù)據(jù)理解

拿到數(shù)據(jù)后要做的第一步就是理解數(shù)據(jù)舀凛。什么是理解數(shù)據(jù)呢?不是簡單看下有多少Excel表俊扳,有多少行,多少列猛遍,而是要結合自己的分析目標馋记,帶著具體的業(yè)務需求去看。

首先懊烤,我們需要明確數(shù)據(jù)記錄的詳細程度梯醒,比方說某個網(wǎng)站的訪問量數(shù)據(jù)是以每小時為單位還是每天為單位;一份銷售數(shù)據(jù)記錄的是每家門店的銷售額還是每個地區(qū)的總銷售額。

其次腌紧,我們需要確定研究群體茸习。研究群體的確定一定和業(yè)務目標是密切相關的。比方說壁肋,如果我們想研究用戶對產(chǎn)品的滿意度與哪些因素有關号胚,就應該把購買該產(chǎn)品的所有客戶作為研究群體;如果我們想研究用戶的購買行為受哪些因素影響,就應該同時考察購買人群和非購買人群墩划,在兩類人群的對比中尋找關鍵因素涕刚。

研究群體的確定有時也和數(shù)據(jù)的詳細程度有關。比如我們想研究“觀眾影評”對“電影票房”的影響乙帮,我們既可以把“每部電影”看成一個個體杜漠,研究“影評總數(shù)”對“電影總票房”的影響,也可以把“每部電影每天的票房”看成一個個體,研究“每天的影評數(shù)”對“每天的電影票房”的影響驾茴。具體選擇哪一種取決于我們手上有什么樣的數(shù)據(jù)盼樟,如果只有總票房和總影評數(shù)的數(shù)據(jù),那我們只能選擇第一種;如果有更詳細的數(shù)據(jù)锈至,那就可以考慮第二種方案晨缴。

需要注意的是,這兩種方案還會影響我們對于模型的選擇峡捡。例如击碗,如果研究“每天的影評數(shù)”對“每天電影票房”的影響,那每部電影又被細分為很多天们拙,同一部電影不同時間的票房會有較高的相似性稍途,這就形成了一種層次結構,可以考慮使用層次模型(hierarchical model)進行分析砚婆。

最后械拍,當我們確定了研究目標和研究群體后,我們需要逐一理解每個變量的含義装盯。有些變量和業(yè)務目標明顯無關坷虑,可以直接從研究中剔除。有些變量雖然有意義埂奈,但是在全部樣本上取值都一樣迄损,這樣的變量就是冗余變量,也需要從研究中剔除挥转。還有一些變量具有重復的含義海蔽,如“省份名稱”和“省份簡稱”,這時只需要保留一個就可以了绑谣。

二党窜、變量類型

所有變量按其測量尺度可以分成兩大類,一類是“分類變量”借宵,一類是“數(shù)值變量”幌衣。不同類型的變量在處理方法和后期的模型選擇上會有顯著差別。

【分類變量】

分類變量又稱屬性變量或離散變量壤玫,它的取值往往用有限的幾個類別名稱就可以表示了豁护,例如“性別”,“教育程度”欲间,“收入水平”楚里,“星期幾”等。細分的話猎贴,分類變量又可分為兩類班缎,一類是“名義變量”蝴光,即各個類別間沒有順序和程度的差別,就像“手機系統(tǒng)”中ios和安卓并沒有明顯的好壞差別达址,“電影類型”中“動作片”和“科幻片”也都是一樣的蔑祟,說不上哪個更好或更差。另外一類是定序變量沉唠,即不同類別之間存在有意義的排序疆虚,如“空氣污染程度”可以用“差、良满葛、優(yōu)”來表示径簿、“教育程度”可以用“小學、初中纱扭、高中牍帚、大學”來表示儡遮。

當研究的因變量是分類變量時乳蛾,往往對應特定的分析方法,我們在后面的章節(jié)會陸續(xù)講到鄙币,這里暫且不談肃叶。當研究中的自變量是分類變量時,也會限制模型選擇的范圍十嘿。有些數(shù)據(jù)挖掘模型可以直接處理分類自變量因惭,如決策樹模型;但很多數(shù)據(jù)挖掘模型不能直接處理分類自變量,如線性回歸绩衷、神經(jīng)網(wǎng)絡等蹦魔,因此需要將分類變量轉換成數(shù)值變量。

對于定序自變量咳燕,最常用的轉換方法就是按照類別程度將其直接轉換成數(shù)值自變量勿决,例如將空氣污染程度 “差、良招盲、優(yōu)”轉換為“1,2,3”低缩。

對于名義自變量,最常用的轉換方法就是構造0-1型啞變量曹货。例如咆繁,對于“性別”,可以定義“1=男顶籽,0=女”玩般。當某個名義變量有K個類別取值時,則需要構造K-1個啞變量礼饱。例如教育程度“小學坏为,初中设拟,高中,大學及以上”久脯,可以構造三個啞變量分別為:x1:1=小學纳胧,0=其它;x2:1=初中,0=其它;x3:1=高中帘撰,0=其它跑慕。當x1,x2摧找,x3三個啞變量取值都為0時核行,則對應著“大學及以上”。

需要注意的是蹬耘,有時候名義變量的取值太多芝雪,會生成太多的啞變量,這很容易造成模型的過度擬合综苔。這時可以考慮只把觀測比較多的幾個類別單獨拿出來惩系,而把剩下所有的類別都歸為“其它”。例如如筛,中國一共包含56個民族堡牡,如果每個民族都生成一個啞變量就會有55個,這時我們可以只考慮設置“是否為漢族”這一個0-1啞變量杨刨。歡迎加入大數(shù)據(jù)學習交流分享群: 658558542? ?一起吹水交流學習(?點擊即可加入群聊

【數(shù)值變量】

我們再來看看數(shù)值變量晤柄。數(shù)值變量就是用數(shù)值描述,并且可以直接進行代數(shù)運算的變量妖胀,如“銷售收入”芥颈、“固定資本”、“評論總數(shù)”赚抡、“訪問量”爬坑、“學生成績”等等都是數(shù)值變量。

需要注意的是怕品,用數(shù)值表示的變量不一定就是數(shù)值型變量妇垢,只有在代數(shù)運算下有意義的變量才是數(shù)值型變量。例如財務報表的年份肉康,上市時間等闯估,雖然也是用數(shù)值表示的,但我們通常不將它們按照數(shù)值型變量來處理吼和。

上面我們講到涨薪,分類變量通常要轉換成數(shù)值型變量,其實有些時候炫乓,數(shù)值型變量也需要轉換成分類變量刚夺,這就用到了“數(shù)據(jù)分箱”的方法献丑。為什么要進行數(shù)據(jù)分箱呢?通常有以下幾個原因:

1. 數(shù)據(jù)的測量可能存在一定誤差,沒有那么準確侠姑,因此按照取值范圍轉換成不同類別是一個有效的平滑方法;

2.有些算法创橄,如決策樹模型,雖然可以處理數(shù)值型變量莽红,但是當該變量有大量不重復的取值時妥畏,使用大于、小于安吁、等于這些運算符時會考慮很多的情況醉蚁,因此效率會很低,數(shù)據(jù)分箱的方法能很好的提高算法效率;

3.有些模型算法只能處理分類型自變量(如關聯(lián)規(guī)則)鬼店,因此也需要將數(shù)值變量進行分箱處理网棍。

數(shù)據(jù)分箱后,可以使用每個分箱內(nèi)的均值妇智、中位數(shù)滥玷、臨界值等作為這個類別的代表值,也可以直接將不同取值范圍定義成不同的類別俘陷,如:將污染程度劃分后定義為“低罗捎、中、高”等拉盾。

那如何進行數(shù)據(jù)分箱呢?常用的數(shù)據(jù)分箱的方法有:等寬分箱(將變量的取值范圍劃分成等寬的幾個區(qū)間)、等頻分箱(按照變量取值的分位數(shù)進行劃分)豁状、基于k均值聚類的分箱(將所有數(shù)據(jù)進行k均值聚類捉偏,所得的不同類別即為不同的分箱),還有一些有監(jiān)督分箱方法泻红,如:使分箱后的結果達到最小熵或最小描述長度等夭禽。這里不詳細介紹了,有興趣的童鞋可以自行百度谊路。

三讹躯、質(zhì)量檢查

對數(shù)據(jù)中的各個變量有了初步了解后,我們還需要對數(shù)據(jù)進行嚴格的質(zhì)量檢查缠劝,如果數(shù)據(jù)質(zhì)量不過關潮梯,還需要進行數(shù)據(jù)的清洗或修補工作。一般來說惨恭,質(zhì)量檢查包括檢查每個變量的缺失程度以及取值范圍的合理性秉馏。

【缺失檢查】

原始數(shù)據(jù)中經(jīng)常會存在各種各樣的缺失現(xiàn)象。有些指標的缺失是合理的脱羡,例如顧客只有使用過某個產(chǎn)品才能對這個產(chǎn)品的滿意度進行評價萝究,一筆貸款的抵押物中只有存在房地產(chǎn)免都,才會記錄相應的房地產(chǎn)的價值情況等。像這種允許缺失的變量是最難搞的帆竹,因為我們很難判斷它的缺失是合理的绕娘,還是由于漏報造成的。

但無論哪種情況栽连,如果變量的缺失率過高业舍,都會影響數(shù)據(jù)的整體質(zhì)量,因為數(shù)據(jù)所反映的信息實在太少升酣,很難從中挖掘到有用的東西舷暮。

對于不允許缺失的變量來說,如果存在缺失情況噩茄,就必須進行相應的處理下面。如果一個變量的缺失程度非常大,比方說達到了70%绩聘,那就考慮直接踢掉吧沥割,估計沒救了。如果缺失比例還可以接受的話凿菩,可以嘗試用缺失值插補的方法進行補救机杜。

插補的目的是使插補值能最大可能的接近其真實的取值,所以如果可以從其他途徑得到變量的真實值衅谷,那一定優(yōu)先選擇這種方法椒拗。比如某個公司的財務信息中缺失了“最終控制人類型”和“是否國家控股”這兩個取值,這些可以通過網(wǎng)上的公開信息得到真實值;再比如缺失了“凈利潤率”這個指標的取值获黔,但是卻有“凈利潤”和“總收入”的取值蚀苛,那就可以通過變量間的關系得到相應的缺失值,即凈利潤率=凈利潤/總收入玷氏。

當然堵未,更多的時候,我們無法得到缺失值的真實信息盏触,這時就只能借用已有的數(shù)據(jù)來進行插補了渗蟹。對數(shù)值變量來說,可以用已觀測值的均值赞辩、中位數(shù)來插補缺失值;對分類型變量來說雌芽,可以用已觀測數(shù)據(jù)中出現(xiàn)比例最高的類別取值來進行插補。這些方法操作起來非常簡單诗宣,但它們都是對所有缺失值賦予了相同的取值膘怕,所以當缺失比例較大時,可能會扭曲被插補變量與其余變量的關系召庞。

更復雜一點的岛心,我們可以選擇模型插補方法来破,即針對被插補變量和其它自變量之間的關系建立統(tǒng)計模型(如回歸、決策樹等)忘古,將模型預測值作為插補值徘禁。

如何處理缺失值是一個很大的研究課題,我們這里只是介紹了最簡單可行的方法髓堪,有興趣的讀者可以參閱Little和Rubin 2002年的專著“Statistical Analysis with Missing Data”送朱。歡迎加入大數(shù)據(jù)學習交流分享群: 658558542? ?一起吹水交流學習(?點擊即可加入群聊

【變量取值合理性檢查】

除了缺失外,我們還要考察每個變量的取值合理性干旁。每個變量都會有自己的取值范圍驶沼,比如“用戶訪問量”、“下載次數(shù)”一定是非負的争群,“投資收益率”一定在0~1之間回怜。通過判斷變量的取值是否超出它應有的取值范圍,可以簡單的對異常值進行甄別换薄。

除了根據(jù)變量的取值范圍來檢查變量質(zhì)量外玉雾,還可以根據(jù)變量之間的相互關系進行判斷。例如一家公司的“凈利潤率”不應該大于“總利潤率”等轻要。只有通過了各個方面檢測的數(shù)據(jù)才是一份高質(zhì)量的數(shù)據(jù)复旬,才有可能帶來有價值的模型結果。

四冲泥、實例分析——電影票房分析

最后驹碍,我們給出一個實例分析。在這個例子中柏蘑,我們的目標是研究電影哪些方面的特征對電影票房有影響幸冻。

我們有兩方面的數(shù)據(jù),一是描述電影特征的數(shù)據(jù)咳焚,二是描述電影票房的數(shù)據(jù)。由于我們關注的是北美的票房市場庞溜,所以描述電影特征的數(shù)據(jù)可以從IMDB網(wǎng)站得到革半,它是一個關于演員、電影流码、電視節(jié)目又官、電視明星和電影制作的在線數(shù)據(jù)庫,里面可以找到每部上映電影的眾多信息;電影每天的票房數(shù)據(jù)可以從美國權威的票房網(wǎng)站Box Office Mojo得到漫试,上面記錄了每部電影上映期間內(nèi)每天的票房數(shù)據(jù)六敬。

我們將從IMDB得到的數(shù)據(jù)放到“movieinfor.csv”文件中,將從Box Office Mojo中得到的數(shù)據(jù)放到“boxoffice.csv”文件中驾荣。這里外构,我們以2012年北美票房市場最高的前100部電影為例進行講解普泡。下表給出了這兩個數(shù)據(jù)集中包含的所有變量以及相應的解釋。

兩個數(shù)據(jù)集中包含的所有變量以及相應的解釋

在這兩個數(shù)據(jù)中审编,movieinfor.csv數(shù)據(jù)的記錄是精確到每部電影的撼班,而boxoffice.csv數(shù)據(jù)精確到了每部電影中每天的票房數(shù)據(jù),是精確到天的垒酬。上表中給出的變量中砰嘁,除了電影名稱和ID外,“電影類型”“MPAA評級”(美國電影協(xié)會對電影的評級)和“星期幾”是分類型變量;“放映時長”勘究、“制作預算”矮湘、“電影每天的票房”和“每天放映的影院數(shù)”是數(shù)值型變量。兩份數(shù)據(jù)都不存在缺失值口糕。

我們首先對兩個數(shù)據(jù)集分別進行變量預處理缅阳,然后再根據(jù)電影ID將兩個數(shù)據(jù)整合到一起。下面給出了每個變量的處理方法:

【電影類型】

電影類型是一個分類變量走净。在這個變量中我們發(fā)現(xiàn)每部電影都不止一個類型券时,例如“The Dark Knight Rises”這部電影就有“Action”、“Crime”和“Thriller”三個類型伏伯,并且它們以“|”為分隔符寫在了一起橘洞。同時,不同電影之間可能有相同的類型说搅,也可能有不同的類型炸枣,例如票房排名第二的電影“Skyfall”,它的類型是“Action |Adventure |Thriller”弄唧。因此适肠,我們首先需要做的是把每部電影所屬的類型逐一取出來,然后將所有出現(xiàn)過的類型分別形成一個0-1啞變量候引,如果這部電影在某個類型上出現(xiàn)了侯养,則相應變量的取值就是1,否則是0.

通過上面一步澄干,我們知道這個數(shù)據(jù)集中出現(xiàn)過的所有電影類型一共有11個逛揩。那是不是按照之前所講的,應該把它轉換為10個啞變量呢?這里需要注意的是麸俘,所有的電影類型之間并不是互斥的(即有了action辩稽,就不能有其他的類型),所以我們無需因為共線性的原因去掉其中一個从媚。也就是說逞泄,如果把每一個電影類型單獨作為一個獨立的變量,可以衍生出11個新的0-1變量,這完全沒有問題喷众。但11個變量未免有點過多各谚,所以我們根據(jù)不同電影類型的頻數(shù)分布情況,只把出現(xiàn)次數(shù)明顯較多的類型單獨拿出來侮腹,最終生成了6個0-1型變量嘲碧,分別為Adventure,F(xiàn)antasy父阻,Comedy愈涩,Action,Animation加矛,Others履婉。

【MPAA評級】

對于這個分類型變量,我們首先可以看一下數(shù)據(jù)中它所包含的全部取值斟览,發(fā)現(xiàn)一共有“PG”毁腿,“PG-13”和“R”三個。和上面的電影類型(Genre)不同苛茂,對于一部電影而言已烤,它只能有一個MPAA取值。因此妓羊,在MPAA變量中胯究,我們需要選擇一個作為基準,將另外兩個構造成啞變量躁绸。例如裕循,我們以“PG”為基準,構造的兩個啞變量分別為PG13和R净刮,如果這兩個啞變量的取值同時為0剥哑,那就相當于電影的MPAA評級是PG。

【放映當天是星期幾】

這個變量同MPAA評級一樣淹父,每部電影只能有一個取值株婴。如果它在星期一到星期日上都有取值的話,我們可以衍生出6個0-1型啞變量暑认。因為這里我們更關注周末和非周末對電影票房的影響旺坠,而并不關注具體是哪一天玫恳,所以我們將其進一步概括成一個變量,即“是否是周末”薄嫡。

【放映時長和制作預算】

放映時長和制作預算這兩個變量都是取值大于0的數(shù)值型變量饥努,我們可以分別檢查它們的取值是否在合理的范圍內(nèi)捡鱼,然后直接保留它們的數(shù)值信息。同時酷愧,對“制作預算”而言驾诈,假設我們這里關心的不是制作預算的具體數(shù)值缠诅,而是“小成本電影”和“大成本電影”的票房差異,那我們就可以將這個數(shù)值型變量進行分箱處理乍迄,轉換為一個0-1型的分類變量管引,即 “是否為小成本電影”。在決定按照什么標準來劃分是否為小成本電影時闯两,我們根據(jù)之前文獻里的研究結果褥伴,將制作預算在100 million以下的電影看成是小成本電影。

上述所有變量的處理過程都可以使用R中最基本的語句(table漾狼,rep重慢,which等)完成,由于篇幅限制逊躁,小編這里就不列出詳細的code了似踱,大家感興趣的話,可以閱讀狗熊會的“R語千尋”系列(戳這里)稽煤,相信會在R語言的學習上受到更多啟發(fā)核芽。最后,我們將所有新生成的變量按照電影ID整合到一起酵熙,就大功告成啦轧简。

五、總結

最后總結一下绿店,小編在這次內(nèi)容中向大家介紹了拿到數(shù)據(jù)后的數(shù)據(jù)理解和預處理工作吉懊,內(nèi)容雖然不難,但同樣需要我們認真對待假勿。就好像生活一樣借嗽,只有踏踏實實走好前面的路,才有可能迎接后面的高潮迭起!

結語

感謝您的觀看转培,如有不足之處恶导,歡迎批評指正。

如果有對大數(shù)據(jù)感興趣的小伙伴或者是從事大數(shù)據(jù)的老司機可以加群:

658558542? ? (?點擊即可加入群聊

里面整理了一大份學習資料浸须,全都是些干貨惨寿,包括大數(shù)據(jù)技術入門,海量數(shù)據(jù)高級分析語言删窒,海量數(shù)據(jù)存儲分布式存儲裂垦,以及海量數(shù)據(jù)分析分布式計算等部分,送給每一位大數(shù)據(jù)小伙伴肌索,這里不止是小白聚集地蕉拢,還有大牛在線解答!歡迎初學和進階中的小伙伴一起進群學習交流,共同進步晕换!

最后祝福所有遇到瓶頸的大數(shù)據(jù)程序員們突破自己午乓,祝福大家在往后的工作與面試中一切順利。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闸准,一起剝皮案震驚了整個濱河市益愈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夷家,老刑警劉巖蒸其,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘾英,居然都是意外死亡枣接,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門缺谴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來但惶,“玉大人,你說我怎么就攤上這事湿蛔“蛟” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵阳啥,是天一觀的道長添谊。 經(jīng)常有香客問我,道長察迟,這世上最難降的妖魔是什么斩狱? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮扎瓶,結果婚禮上所踊,老公的妹妹穿的比我還像新娘。我一直安慰自己概荷,他們只是感情好秕岛,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著误证,像睡著了一般继薛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愈捅,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天遏考,我揣著相機與錄音,去河邊找鬼蓝谨。 笑死诈皿,一個胖子當著我的面吹牛林束,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稽亏,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缕题!你這毒婦竟也來了截歉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤烟零,失蹤者是張志新(化名)和其女友劉穎瘪松,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锨阿,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡宵睦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了墅诡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壳嚎。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖末早,靈堂內(nèi)的尸體忽然破棺而出烟馅,到底是詐尸還是另有隱情,我是刑警寧澤然磷,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布郑趁,位于F島的核電站,受9級特大地震影響姿搜,放射性物質(zhì)發(fā)生泄漏寡润。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一舅柜、第九天 我趴在偏房一處隱蔽的房頂上張望梭纹。 院中可真熱鬧,春花似錦业踢、人聲如沸栗柒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞬沦。三九已至,卻和暖如春雇锡,著一層夾襖步出監(jiān)牢的瞬間逛钻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工锰提, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留曙痘,地道東北人芳悲。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像边坤,于是被迫代替她去往敵國和親名扛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容