Bootstrap

基于 Python 实现问卷数据分析的详细示例

以下是一个基于 Python 实现问卷数据分析的详细示例,涵盖词云图、情感分析、描述性统计分析、聚类分析(K-Means)、回归分析(简单线性回归作为示例)等内容。

1. 安装必要的库

首先,确保你已经安装了以下必要的 Python 库:

pip install pandas numpy matplotlib seaborn wordcloud nltk scikit-learn statsmodels

2. 示例代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from wordcloud import WordCloud
import nltk
from nltk.sentiment.vader import SentimentIntensityAnalyzer
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import statsmodels.api as sm

# 下载必要的 NLTK 数据
nltk.download('vader_lexicon')

# 假设我们有一个 CSV 文件,包含问卷数据
# 读取数据
data = pd.read_csv('survey_data.csv')

# 词云图
# 假设问卷中有一个文本列 'comments'
text = ' '.join(data['comments'].dropna())
wordcloud = WordCloud(width=800, height=400, background_color='white').generate(text)
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('Word Cloud of Comments')
plt.show()

# 情感分析
sia = SentimentIntensityAnalyzer()
data['sentiment_score'] = data['comments'].apply(lambda x: sia.polarity_scores(x)['compound'] if isinstance(x, str) else np.nan)
plt.figure(figsize=(10, 5))
sns.histplot(data['sentiment_score'].dropna(), kde=True)
plt.title('Sentiment Score Distribution')
plt.xlabel('Sentiment Score')
plt.ylabel('Frequency')
plt.show()

# 描述性统计分析
# 假设问卷中有一些数值列,如 'age', 'income'
numeric_columns = ['age', 'income']
description = data[numeric_columns].describe()
print(description)

# 用好看的图展现问卷结果
# 箱线图
plt.figure(figsize=(10, 5))
sns.boxplot(data=data[numeric_columns])
plt.title('Box Plot of Numeric Variables')
plt.show()

# 聚类分析(K-Means)
# 假设我们使用 'age' 和 'income' 进行聚类
X = data[numeric_columns].dropna()
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
kmeans = KMeans(n_clusters=3, random_state=42)
data['cluster'] = kmeans.fit_predict(X_scaled)
plt.figure(figsize=(10, 5))
sns.scatterplot(data=data, x='age', y='income', hue='cluster', palette='viridis')
plt.title('K-Means Clustering of Consumers')
plt.xlabel('Age')
plt.ylabel('Income')
plt.show()

# 回归分析(简单线性回归)
# 假设我们想分析 'age' 对 'income' 的影响
X = data['age'].dropna()
y = data['income'].dropna()
X = sm.add_constant(X)
model = sm.OLS(y, X).fit()
print(model.summary())

3. 代码说明

  1. 数据读取:使用 pandas 读取 CSV 文件中的问卷数据。
  2. 词云图:将问卷中的文本列合并成一个字符串,使用 WordCloud 生成词云图。
  3. 情感分析:使用 NLTK 的 SentimentIntensityAnalyzer 对问卷中的文本进行情感分析,计算情感得分并绘制直方图。
  4. 描述性统计分析:使用 describe() 方法对问卷中的数值列进行描述性统计分析,并打印结果。
  5. 可视化:使用 seaborn 库绘制箱线图,展示数值变量的分布情况。
  6. 聚类分析:使用 KMeans 算法对问卷中的数值列进行聚类分析,并绘制散点图展示聚类结果。
  7. 回归分析:使用 statsmodels 库进行简单线性回归分析,分析一个变量对另一个变量的影响,并打印回归结果。

4. 注意事项

  • 请将 'survey_data.csv' 替换为你实际的问卷数据文件路径。
  • 代码中的列名 'comments', 'age', 'income' 可以根据你的实际数据进行调整。
  • 对于结构方程模型,Python 中可以使用 semopy 库,但实现相对复杂,需要根据具体的研究问题进行建模。

通过以上步骤,你可以对问卷数据进行全面的分析,并使用可视化工具展示分析结果。

;