# 專題:成功大學Dcard板塊的社群互動與心理健康相關性研究 Dcard是台灣最大的匿名社交平台之一,其中「成功大學」板塊作為該校學生和校友的主要交流平台,提供了豐富的資料來源。這些資料不僅反映了學生的日常生活、學術問題,還涉及到更為複雜的心理健康問題。 #### 研究目的 本研究旨在探討「成功大學」Dcard板塊中的社群互動與心理健康的相關性。透過對大量文章和回應的分析,我們希望能夠: 瞭解成功大學學生在Dcard上的主要關注點和行為模式。 探究社群互動與心理健康狀態之間的相關性。 為學校提供改善學生心理健康的具體建議。 #### 研究方法 - 資料收集:使用Selenium和Pandas進行網頁爬蟲和資料清洗。 - 資料分析:使用自然語言處理(NLP)技術和機器學習模型進行文本分析。 - 結果評估:透過統計分析和質性研究,評估研究假設的有效性。 #### 預期成果 研究將揭示成功大學Dcard板塊中最常見的主題和問題。 提供一個量化的模型,用於評估社群互動與心理健康之間的相關性。 為學校和相關機構提供實用的建議,以改善學生的心理健康狀態。 #### 關鍵詞 Dcard, 成功大學, 社群互動, 心理健康 補充資源: - [Dcard資料搜集](https://drive.google.com/file/d/1NgbQJ5LMlmcN-WF1G6AZeGsQgs1mkqdh/view?usp=share_link) - [Selenium使用](https://drive.google.com/file/d/1NNnYzAu3MXF-ldLjeNxWEYrWc6vFZb6v/view?usp=share_link) ## 資料處理流程 在這個部分,我們將詳細解釋資料清洗和處理的流程,並提供相應的程式碼示例。 ### 1. 資料收集 首先,我們使用Selenium來爬取「成功大學」Dcard板塊的文章和回應。 ```python from selenium import webdriver # 初始化webdriver browser = webdriver.Chrome() # 訪問Dcard成功大學板塊 browser.get('https://www.dcard.tw/f/ncku') ``` 考慮到我們的研究目標和方法,我們可以使用Selenium來模擬瀏覽器操作,進行自動化的文章查詢和篩選。具體來說,我們可以: 進入成功大學的Dcard校板:成功大學校板 使用Selenium的find_element_by_css_selector或find_element_by_xpath方法來定位文章標題、文本、點閱數、愛心數、留言數、留言內容和標籤等。 使用click()方法來模擬點擊操作,如翻頁或進入文章。 ```python from selenium import webdriver # 啟動瀏覽器並訪問網站 browser = webdriver.Chrome() browser.get('https://www.dcard.tw/f/ncku') # 定位元素並操作 article_title = browser.find_element_by_css_selector('.ArticleTitle_selector') article_title.click() ``` ### 2. 資料分類與儲存 蒐集到的資料可以存儲在一個或多個CSV或JSON文件中,以便後續分析。我們可以按照以下方式進行分類和儲存: 標題、文本、點閱數、愛心數、留言數可以存儲在一個主CSV文件中。 留言內容可以存儲在一個獨立的CSV文件中。 標籤可以作為主CSV文件的一個欄位,或存儲在一個獨立的CSV文件中。 ### 3. 資料清洗 使用Pandas庫,我們可以進行以下資料清洗步驟: 去除空值:使用dropna()方法去除含有空值的行或列。 去除重複值:使用drop_duplicates()方法去除重複的行。 轉換數據類型:使用astype()方法轉換數據類型,如將點閱數和愛心數轉換為整數。 文本清洗:使用正則表達式或自定義函數去除或替換不需要的字符。 ```python import pandas as pd df = pd.read_csv('data.csv') df.dropna(inplace=True) df.drop_duplicates(inplace=True) df['views'] = df['views'].astype(int) df['text'] = df['text'].str.replace('[^a-zA-Z0-9]', ' ') ``` 這樣的資料清洗流程可以有效地將原始數據轉換為適合分析的格式。 #### 3.1 NLP資料清洗 在進行自然語言處理(NLP)之前,資料清洗是一個關鍵步驟。這通常包括以下幾個方面: 文本正規化 將文本轉換為一個標準格式。例如,將所有字母轉換為小寫,去除標點符號等。 ```py # 文本正規化 normalized_text = raw_text.lower().replace('.', '').replace(',', '') ``` > 斷詞(Tokenization): > 將文本分解為更小的片段或「詞」 #### 3.2 Dcard文本分析流程 由於我們的研究對象是Dcard上的「成功大學」板塊,這個板塊有其特殊性,包括主要使用中文、豐富的顏文字和表情符號,以及動態的社交互動指標(如愛心數、留言和點閱率)。以下是一個更詳細的文本分析流程,包括對應的程式碼。 **1. 中文斷詞** 首先,我們使用jieba進行中文斷詞。 ```python import jieba # 斷詞 seg_list = jieba.cut('你的文本', cut_all=False) words = ' '.join(seg_list) ``` **2. 顏文字和表情符號** 這些符號在Dcard上非常常見,並且可能對某些分析(如情感分析)有重要意義。 ```python import re # 去除或保留顏文字和表情符號 emoji_pattern = re.compile('['u'\U0001F600-\U0001F64F'u'\U0001F300-\U0001F5FF'u'\U0001F680-\U0001F6FF'u'\U0001F700-\U0001F77F'u'\U0001F780-\U0001F7FF'u'\U0001F800-\U0001F8FF'u'\U0001F900-\U0001F9FF'u'\U0001FA00-\U0001FA6F'u'\U0001FA70-\U0001FAFF'u'\U00002702-\U000027B0'u'\U00002600-\U000026FF']+') filtered_text = emoji_pattern.sub(r'', text) ``` **3. 社交互動指標** 愛心數、留言和點閱率是文章受歡迎程度的重要指標。 ```python # 假設這些數據已經被爬取並存儲在DataFrame中 import pandas as pd df = pd.DataFrame({'title': titles, 'hearts': hearts, 'comments': comments, 'views': views}) ``` **4. 情感分析** 使用中文情感分析工具,如SnowNLP。 ```python from snownlp import SnowNLP # 情感分析 s = SnowNLP(text) s.sentiments ``` **5. 主題模型** 使用LDA來找出成功大學板塊中最常出現的主題。 ```py from sklearn.decomposition import LatentDirichletAllocation as LDA # 執行LDA模型 lda = LDA(n_components=5) lda.fit_transform(X) from nltk.tokenize import word_tokenize tokens = word_tokenize(normalized_text) ``` **6. 停用詞去除** 去除常見但對分析沒有太多意義的詞,如 'the', 'is', 'in' 等。 ```python from nltk.corpus import stopwords stop_words = set(stopwords.words('english')) filtered_tokens = [w for w in tokens if not w in stop_words] ``` **7. 詞幹提取(Stemming)** 將詞的不同形式還原為其詞幹。例如,'running' -> 'run'。 ```python from nltk.stem import PorterStemmer ps = PorterStemmer() stemmed_tokens = [ps.stem(w) for w in filtered_tokens] ``` 這些步驟將為後續的NLP分析提供一個乾淨、結構化的資料集。 ```python from sklearn.feature_extraction.text import CountVectorizer cv = CountVectorizer() X = cv.fit_transform(df['text']) ``` ### 4. 統計分析 進行統計分析以評估研究假設的有效性,以下以t-test作範例: ```python from scipy import stats # t-test stats.ttest_ind(group1, group2) ```