python案例如何分析更衣室团结程度?

wen python案例 2

用Python分析更衣室团结程度

这是一个有趣的数据分析问题,以下是几种可落地的分析思路和代码案例。

python案例如何分析更衣室团结程度?

分析思路

"更衣室团结程度"本质是团队内部人际关系网络的紧密程度,可以从以下维度量化:

维度 数据来源 指标
互动频率 训练/比赛中的传球、配合 传球网络密度
社交关系 球员间的ins点赞/评论、聚餐 社交图聚类系数
小团体 分组训练、座位、更衣位 社群检测(社区数、模块度)
情绪一致性 采访、社媒文本情感 情感方差、一致性
派系对立 冲突事件、互不传球 网络割边、负向边

核心方案:社交网络分析

构建球员关系网络

import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 模拟数据:球员间的互动次数(传球、聚餐、社媒互动)
interactions = [
    ("球员A", "球员B", 15), ("球员A", "球员C", 3),
    ("球员B", "球员C", 12), ("球员B", "球员D", 2),
    ("球员C", "球员D", 14), ("球员D", "球员E", 13),
    ("球员E", "球员F", 16), ("球员E", "球员A", 2),
    ("球员F", "球员A", 1), ("球员F", "球员B", 3),
]
G = nx.Graph()
for u, v, w in interactions:
    G.add_edge(u, v, weight=w)
# ===== 关键指标 =====
print("网络密度:", round(nx.density(G), 3))          # 越接近1越团结
print("平均聚类系数:", round(nx.average_clustering(G), 3))  # 高=抱团
print("连通分量数:", nx.number_connected_components(G))    # >1说明存在孤立小团体
# 社群检测:识别派系
import community as community_louvain  # pip install python-louvain
partition = community_louvain.best_partition(G, weight="weight")
modularity = community_louvain.modularity(partition, G)
print("社群划分:", partition)
print("模块度(越大派系越明显,>0.3警惕):", round(modularity, 3))

可视化关系网络

pos = nx.spring_layout(G, seed=42, weight="weight")
node_colors = [partition[n] for n in G.nodes()]
plt.figure(figsize=(8, 6))
nx.draw_networkx_nodes(G, pos, node_color=node_colors, cmap="Set1", node_size=800)
nx.draw_networkx_labels(G, pos)
nx.draw_networkx_edges(G, pos, width=[G[u][v]["weight"]/3 for u,v in G.edges()])"更衣室球员互动网络")
plt.axis("off")
plt.show()

解读方式:

  • 图呈"一团" → 团结
  • 分成 2~3 个明显色块且块间连线稀疏 → 存在派系,需警惕
  • 有孤立节点 → 边缘球员

识别"桥梁球员"和"边缘球员"

# 中介中心性高 = 派系间的桥梁,是团结的关键人物
betweenness = nx.betweenness_centrality(G, weight="weight")
# 度中心性低 = 边缘人
degree = dict(G.degree(weight="weight"))
df = pd.DataFrame({"中介中心性": betweenness, "加权度数": degree})
df["类型"] = np.where(df["加权度数"] < df["加权度数"].mean(), "边缘", "核心")
print(df.sort_values("加权度数"))

洞察:

  • 高中介 + 低度 = 派系和解的关键中间人
  • 低度 = 可能被孤立的球员,需重点关怀

进阶分析

情感一致性分析(社媒/采访文本)

from snownlp import SnowNLP  # 中文情感分析
tweets = {
    "球员A": ["今天团队配合太棒了", "输球很沮丧但我们会团结"],
    "球员B": ["更衣室氛围有点怪", "我们之间需要更多沟通"],
}
for player, texts in tweets.items():
    scores = [SnowNLP(t).sentiments for t in texts]
    print(f"{player}: 平均情感={np.mean(scores):.2f}, 方差={np.var(scores):.3f}")
  • 组内方差大 → 情绪不稳定/有矛盾
  • 球员间均值差异大 → 存在不满派系

小团体检测(更衣位、聚餐分组)

from sklearn.cluster import AgglomerativeClustering
# 球员特征:社媒互动频次、聚餐同桌次数、训练分组
features = np.array([[15,12,8],[3,2,1],[12,14,10],[2,3,1],[13,15,9],[16,13,11]])
clustering = AgglomerativeClustering(n_clusters=2).fit(features)
print("小团体标签:", clustering.labels_)  # 划分明显→需要团建

综合团结指数

把各指标归一化后加权成一个"团结指数":

def team_cohesion(G, partition, sentiment_var):
    density = nx.density(G)
    clustering = nx.average_clustering(G)
    mod = community_louvain.modularity(partition, G)
    # 归一化:模块度和情感方差越高越不团结
    score = (density * 40 
             + clustering * 30 
             + (1 - min(mod, 1)) * 20 
             + (1 - min(sentiment_var, 1)) * 10)
    return round(score, 1)
print("团结指数(0-100):", team_cohesion(G, partition, 0.4))
分数 判断
>75 团结良好
50~75 基本正常,局部需关注
<50 存在明显派系,建议干预

实践建议

  1. 数据获取是关键:真实场景要用训练GPS传球数据、更衣室座位、队内问卷("你愿意和谁搭档")等
  2. 多维度交叉验证:网络指标 + 情感分析 + 问卷,单看一项易误判
  3. 追踪趋势:按周计算指标,看团结度是否下滑(比单次快照更有意义)
  4. 保护隐私:涉及球员社交数据需合规授权

如果需要针对具体场景(如足球队传球数据、篮球队配合数据),我可以给出更贴合的字段设计和完整代码。

抱歉,评论功能暂时关闭!