

# 如何檢查一條 Reddit 討論串是否主導你的研究結果

先以留言、帳戶、討論串和社群計算同一個主題，然後移除最大的討論串，再計算一次。每項計數都要配合你的顧客問題。留言計數不是顧客所佔比例，也不是產品排名。

主題是你在計數之前命名的那一個顧客想法。留言是帖文下一則公開回覆。帳戶是資料列上的公開名稱。帳戶不是已證實的人、買家或私人群組。討論串是一則來源帖文。社群是該帖文所屬的 Reddit 群組。你要從已知的帖文地址補上社群。收集程式不會回傳社群。

一條很長的討論串可以令主題看起來很普遍。少數帳戶可能寫下大部分標為有的留言。這四項計數顯示這個分別。移除最大的討論串，可以顯示第二條討論串是否仍然有這個主題。

人們在公開場合詢問顧客研究做法。一條[產品營銷討論串](https://www.reddit.com/r/ProductMarketing/comments/1liklfb/best_tactics_for_customer_research/)詢問做法。一條[SaaS 討論串](https://www.reddit.com/r/SaaS/comments/1tb26ri/customer_research_on_reddit/)顯示，在 Reddit 上做研究很難。這些討論串顯示有這個需要。它們沒有指出這個計數單位。它們沒有證明這項檢查。它們沒有量度一個市場。

## 計數之前先讀資料列

Actor 是一個託管的數據收集程式。這個方法使用 [Reddit Comments Actor](https://apify.com/chronometrica/reddit-comments-scraper)，公開 build 1.0.7。Task 是已儲存的輸入預設。[顧客語言研究 Task](https://apify.com/chronometrica/reddit-comments-scraper/examples/reddit-customer-language-research)只是起點。它不是計數會自行發生的證明。Actor 儲存來源資料列。這個方法裡的每項計數都由你做。

Actor 接受 `postUrls`，用來指定已知的公開討論串。你可以傳送 1 至 50 個帖文 URL。`maxCommentsPerPost` 是單一帖文的上限。上限是你要求 Actor 從該帖文儲存的最多留言數。上限可以是 1 至 500。預設上限是 100。已儲存的 Task 使用 250。第一次檢查時，只用一則帖文，並把上限選為 3。稍後才加入更多帖文。每個上限都要留在相同限制之內。

已儲存的 Task 指向一條樣本討論串。用你自己已知的公開 URL 取代該樣本。

```json
{
  "postUrls": [
    "https://www.reddit.com/r/LocalLLaMA/comments/1ui241x/the_number_1_public_enemy_of_opensource/"
  ],
  "maxCommentsPerPost": 250
}
```

計數之前先讀資料列

一列已儲存資料是來源帖文下的一則公開留言。你需要 `postId`、`canonicalPostUrl`、`commentId`、`authorName`、`body`、`status` 和 `observedAt`。`canonicalPostUrl` 是來源帖文的標準公開地址。body 是留言文字。`observedAt` 是該列被看見的時間。資料集裡的留言狀態只有 ok、deleted 或 removed。執行結果 partial 或 failed 不是留言狀態。

body 和 `authorName` 可以是空白，或是代用文字。文字 [deleted] 是代用文字。它不是所有缺失名稱共用的一個帳戶。只有在 `authorName` 不是空白，而且不是 [deleted] 時，才把它用作帳戶鍵。

對一條已知 AskMarketing 討論串所做的現行單一已知討論串對照，回傳了 3 個不同、而且符合來源帖文的留言 ID。這 3 則的 body 都有文字。另一次讀取找到 3 個不同、而且不是空白的公開作者名稱。這些名稱不保留在這裡。全部 3 列的 `parentId` 和 depth 都是 null。`hiddenBranchesRemaining` 是 null。這個方法不需要回覆樹。null 的父項不是回覆連結。不要編造連結。缺失的父項也不會告訴你某人是誰。

OUTPUT 區塊可以包括 `commentsSaved`、`duplicatesSkipped`、`hiddenBranchesRemaining`、`completionReason`、`status`、`isComplete` 和 `inputResults`。每項輸入也可以顯示 `commentsFound`、`commentsSaved`、`status` 和 `reason`。在這次 3 列的執行中，`isComplete` 是 true，但 status 是 partial。`isComplete` 表示已儲存的工作已完成。partial 表示 Actor 沒有儲存完整討論串。一次已完成的執行不是帖文上的每一則留言。這次執行設了上限。它沒有量度很多討論串。它沒有量度一個主題。輸出沒有不重複作者計數器。帳戶要由你自己計數。

這個 Actor 不會回傳 `requestedSubreddit` 或 `matchedSubreddit`。另一個 Actor 會回傳這些欄位。如果你加入社群欄，請從已知的 `canonicalPostUrl`，或從你已核對的來源欄位複製。寫下它來自哪裡。該欄是你的筆記。Actor 不會加入主題標籤。它不會為產品排名。它不會為你建立均衡樣本。

## 做這八項行動

1. 為一個主題命名，並寫下你會使用的討論串。寫下哪些文字屬於這個主題。寫下哪些文字不屬於它。在計數之前做這件事。每一列已儲存資料是一則已記錄的留言。同一個帳戶可以寫很多留言。很多留言可以在同一條討論串裡。

一條有很多回覆的討論串可以看起來像一個很大的顧客群組。它可能只是一場很長的談話。你的納入規則和排除規則，可以阻止你在看見最大討論串之後改動主題。

1. 先收集一條已知討論串。閱讀每個留言 ID、body、status、作者欄位和 OUTPUT 區塊。可編碼的留言有你可以閱讀和判斷的 body 文字。把 deleted、removed 和缺失文字留在主題計數之外。仍然要報告你看見多少這些資料列。缺失的 body 不表示主題不存在。它表示你不能為該列編碼。選擇一個固定上限。保留來源的每個停止原因。上限是你選擇的限制。它不是完整對話。

先在一個 URL 上把 `maxCommentsPerPost` 設為 3。如果 OUTPUT 的 status 是 partial，要如實說明。不要把已完成的執行稱為完整母體。這裡的母體是帖文上的每一則留言。如果稍後加入帖文，`postUrls` 要保持在 50 或以下。每個上限保持在 1 至 500。

1. 把每個留言 ID 與其來源帖文和 `observedAt` 時間一起保留。如果兩列用字相同但 ID 不同，不要合併它們。如果同一個 ID 在不同列之間有衝突，要檢視兩列。不要只憑用字挑選一列。把你無法解決的缺失 ID 另計一組。已知帳戶鍵必須是不是空白、而且不是 [deleted] 的 `authorName`。把未知名稱和代用文字留在已知帳戶集合之外。不要把所有這些資料列當成一個共用帳戶。
2. 在可編碼文字上[人手為主題編碼](/zh-Hant/articles/%E5%85%A9%E5%90%8D-reddit%E7%95%99%E8%A8%80%E7%B7%A8%E7%A2%BC%E5%93%A1-%E4%B8%80%E8%87%B4%E6%80%A7/)。儲存編碼、編碼者名稱、一個版本和一則短情境筆記。對每則可編碼留言使用 yes 或 no。yes 表示主題存在。no 表示文字可讀，而且主題不存在。在這個方法裡，positive 表示 yes。它不表示寫作者高興。negative 表示 no。它不表示寫作者憤怒。不要使用自動情感工具。這裡的情感是工具對感受的猜測。Actor 不會為主題編碼。如果你需要回覆情境，打開公開討論串並閱讀。null 的 `parentId` 不是情境。
3. 從標為有的資料列建立四個集合。留言集合把每個有主題的留言 ID 收錄一次。帳戶集合收錄每個至少有一則有主題留言的已知帳戶。討論串集合收錄每條至少有一則有主題留言的討論串。社群集合收錄每個至少有一條有主題討論串的社群。在各自的集合裡，每個值只計一次。同一個帳戶的三則留言是一個帳戶。在這個方法裡，一條討論串屬於一個社群。這四個集合回答四個問題。它們不估計買家。它們不計算沉默的讀者。
4. 為每個集合寫下分子和分母。分子是有這個主題的單位數量。分母是你用來相除的組別。留言分母是你所選樣本裡的可編碼留言。帳戶分母是在你的規則下至少有一則可編碼留言的已知帳戶。它不是每一個已註冊用戶。在該分數旁邊報告未知帳戶的資料列。報告你使用的上限。討論串分母是你所選的已知討論串。社群分母是你所選的已知社群。兩個分母都不是整個 Reddit。把每個計劃來源計數，與每個可用的已觀察計數分開保留。計劃計數是你選擇閱讀的討論串或社群數量。可用的已觀察計數是其中你已取回而且能夠編碼的數量。如果你不把這些計數分開，就把每個所選分母標為已觀察到有主題的覆蓋，並顯示每個未知項。已觀察到有主題的覆蓋只計你能夠閱讀和編碼的單位。失敗的討論串是未解決覆蓋。未能取得的討論串是未解決覆蓋。完全不能編碼的討論串是未解決覆蓋。失敗的社群是未解決覆蓋。未能取得的社群是未解決覆蓋。完全不能編碼的社群是未解決覆蓋。未解決覆蓋不是真陰性。真陰性表示你看見了該單位，而且主題不存在。一條收集不完整的討論串可以漏掉一些文字。如果已取回的文字沒有主題，表示在已取回的樣本裡沒有觀察到主題。這個結果不表示主題不存在。

很高的留言分數可以來自一個發了很多次帖的帳戶。帳戶分數可以看起來較小，因為該名稱只計一次。很高的討論串分數仍可以落在一個社群之內。把四個分數放在一起讀。

1. 按各所選討論串持有多少則有主題留言來排列。只移除最頂的討論串，然後再次計算全部四個單位。這是留一條討論串在外的檢查。它顯示你的結論是否依賴該一條討論串。它不是顯著性檢定。顯著性檢定問的是，單靠隨機變異會不會造成這個已觀察到的差距。這項檢查不做這件事。它不表示被移除的討論串是劣質數據。把該討論串放回最終收集。加上一則短的影響筆記，說明改變了甚麼。

各自比較每個單位。當一條討論串持有大部分有主題資料列時，留言佔比可以大幅下降。帳戶佔比可以有不同變化，因為重複發帖已經算作一個帳戶。討論串佔比在分子和分母都失去該討論串。當該社群裡另一條所選討論串仍然有主題時，社群佔比可以保持不變。

1. 發布一張證據分佈表和一則短結論。證據分佈是四個分數並列。說明有多少留言、帳戶、討論串和社群帶有這個主題。說明移除最頂討論串之後剩下甚麼。只存在於一條討論串的主題，仍然可以從用字教你東西。那是質性證據。它的廣度弱。廣度是有多少個分開的來源一致。用這個結果計劃更多研究。不要聲稱市場規模。不要聲稱顧客多數。[不要用這些分數為功能排名](/zh-Hant/articles/facebook%E5%8A%9F%E8%83%BD%E8%AB%8B%E6%B1%82%E8%BD%89%E6%88%90%E7%94%A2%E5%93%81%E5%84%AA%E5%85%88%E6%AC%A1%E5%BA%8F/)。

## 一份虛構的九則留言帳目

下面的表格是原創虛構。它們用來教算術。它們不是 Actor 結果。它們不是那 3 列樣本。該樣本沒有主題編碼。這些留言 ID 是虛構標籤。這份帳目不顯示 Actor 上限。在真實執行時，要報告你的上限和任何 partial 停止。

這份虛構有九則可編碼留言。它們來自三條已知討論串：T1、T2 和 T3。T1 和 T2 在社群 Q1。T3 在社群 Q2。有表示主題存在。無表示在你可以閱讀的文字上，主題不存在。

| 列 | 留言 ID | 討論串 | 社群 | 帳戶 | body 狀態 | 主題 |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | C1 | T1 | Q1 | A | 可編碼 | 有 |
| 2 | C2 | T1 | Q1 | A | 可編碼 | 有 |
| 3 | C3 | T1 | Q1 | A | 可編碼 | 有 |
| 4 | C4 | T1 | Q1 | B | 可編碼 | 有 |
| 5 | C5 | T1 | Q1 | C | 可編碼 | 有 |
| 6 | C6 | T2 | Q1 | A | 可編碼 | 有 |
| 7 | C7 | T2 | Q1 | D | 可編碼 | 無 |
| 8 | C8 | T3 | Q2 | E | 可編碼 | 無 |
| 9 | C9 | T3 | Q2 | F | 可編碼 | 無 |

還有一列只記可得性。它在九則可編碼留言之外。

| 列 | 留言 ID | 討論串 | 社群 | 帳戶 | body 狀態 | 主題 |
| --- | --- | --- | --- | --- | --- | --- |
| 10 | R1 | 不在集合內 | 不在集合內 | 未知 | 已移除 | 未編碼 |

R1 不是第十則可編碼留言。它不是無。未知作者不是第七個已知帳戶。不要把 [deleted] 當作共用鍵。這份虛構沒有把 R1 放在 T1、T2 或 T3。缺失的 body 不表示主題不存在。報告一列 body 已移除、帳戶未知的資料。只把它留在可得性計數。

已知帳戶名稱空間只有 A、B、C、D、E 和 F。這裡的名稱空間是准許進入帳戶計數的名稱集合。A 重複出現仍然是一個名稱。R1 不加入名稱。

完整留言集合：C1、C2、C3、C4、C5、C6。留言分母是 C1 至 C9。

可編碼留言中，6／9 = 66.7% 為有。

完整帳戶集合：A、B、C。A 寫了四則可編碼留言。三則在 T1。一則在 T2。A 仍然是一個帳戶。帳戶分母是 A、B、C、D、E 和 F。

已知可編碼帳戶中，3／6 = 50% 為有。

R1 留在這個分母之外。

完整討論串集合：T1、T2。討論串分母是 T1、T2 和 T3。

所選討論串中，2／3 = 66.7% 為有。

完整社群集合：Q1。T3 在 Q2，而且 Q2 的兩則留言都是無。社群分母是 Q1 和 Q2。

所選社群中，1／2 = 50% 為有。

這四個分數只描述所選樣本。它們不是母體盛行率。盛行率是指全體顧客之中的佔比。你沒有選取全體顧客。

T1 持有六則有主題留言中的五則。這五則是 C1、C2、C3、C4 和 C5。

5／6 = 83.3%。

T1 是主導討論串。主導表示它持有最多標為有的留言。

現在移除 T1，再計算一次。餘下的可編碼留言是 C6、C7、C8 和 C9。唯一餘下的有主題留言是 C6。帳戶 A 在 T2 寫下它。

餘下留言集合：C6。分母是 C6、C7、C8 和 C9。

餘下可編碼留言中，1／4 = 25% 為有。

餘下的已知帳戶是 A、D、E 和 F。B 和 C 離開這個分母。他們唯一的可編碼留言在 T1。不要在這項檢查保留 B 或 C。不要加入 R1 的未知作者。A 是唯一餘下的有主題帳戶。A 仍然只計一次。

餘下帳戶集合：A。分母是 A、D、E 和 F。

餘下已知帳戶中，1／4 = 25% 為有。

餘下討論串是 T2 和 T3。T2 仍然為有。T3 不是。

餘下討論串集合：T2。分母是 T2 和 T3。

餘下討論串中，1／2 = 50% 為有。

餘下社群仍然是 Q1 和 Q2。Q1 保持為有，因為 T2 在 Q1。Q2 保持為無。

餘下社群集合：Q1。分母是 Q1 和 Q2。

餘下社群中，1／2 = 50% 為有。

| 單位 | 完整樣本 | 移除 T1 |
| --- | --- | --- |
| 有主題的留言 | 6／9 = 66.7% | 1／4 = 25% |
| 有主題的已知帳戶 | 3／6 = 50% | 1／4 = 25% |
| 有主題的討論串 | 2／3 = 66.7% | 1／2 = 50% |
| 有主題的社群 | 1／2 = 50% | 1／2 = 50% |

每個單位因不同原因而變動。留言分數由 66.7% 降至 25%。T1 持有五則有主題留言。T2 上仍餘下一則有主題留言。帳戶分數由 50% 降至 25%。B 和 C 隨 T1 離開。A 餘下一次。A 在 T1 的三則帖文不是三個帳戶。討論串分數由 66.7% 降至 50%。你從兩邊移除 T1。T2 仍然符合。社群分數維持 50%。Q1 仍然有 T2。移除 T1 不會移除 Q1。

主題仍然出現在第二條討論串。它的留言頻次由 T1 主導。把 T1 留在最終收集。影響筆記應該說明兩項事實。T1 提供了 6 則有主題留言中的 5 則。主題仍然在 T2 出現一次。

R1 在兩次計數裡都是可得性筆記。它從不變成一票「無」。它從不變成一個帳戶。

這份虛構的有限結論範圍很窄。在這些所選討論串裡，留言比率看起來高，主要是因為 T1。主題存在於 6 個已知帳戶中的 3 個。它存在於 3 條討論串中的 2 條。它存在於 2 個社群中的 1 個。移除 T1 之後，它餘下 1 個帳戶、1 條討論串和 1 個社群。那是進一步研究的線索。它不是顧客的多數。它不是功能排名。

## 下一步行動

在你自己已知的公開討論串上計算一個主題。建立四個單位集合。在你就顧客作出聲稱之前，先為主導討論串儲存一則筆記。用 [Reddit Comments Actor](https://apify.com/chronometrica/reddit-comments-scraper) 收集資料列。從[顧客語言研究 Task](https://apify.com/chronometrica/reddit-comments-scraper/examples/reddit-customer-language-research)開始，然後取代樣本 URL，並把第一次上限選為 3。

## 來源與延伸閱讀

- [Reddit Comments Actor](https://apify.com/chronometrica/reddit-comments-scraper)
- [顧客語言研究 Task](https://apify.com/chronometrica/reddit-comments-scraper/examples/reddit-customer-language-research)
- [顧客研究的最佳做法](https://www.reddit.com/r/ProductMarketing/comments/1liklfb/best_tactics_for_customer_research/)
- [在 Reddit 上做顧客研究](https://www.reddit.com/r/SaaS/comments/1tb26ri/customer_research_on_reddit/)