第2次小考
Python数据分析与可视化实战——班级学生信息微信好友数据全流程分析一、项目背景与需求分析在大数据时代数据已经成为重要的生产要素。本次项目以班级学生信息数据和微信好友数据为分析对象使用Python完成从数据读取、清洗、统计分析到可视化展示的全流程。通过饼图、柱状图、地图、词云、关系图、散点图等多种图表直观展示数据分布规律并基于分析结果给出合理结论与建议实现从原始数据到有价值信息的转化。本次项目不仅锻炼了Python数据处理能力也加深了对数据分析业务逻辑的理解为后续更复杂的数据挖掘、用户画像、可视化大屏开发打下基础。二、技术栈与环境准备• 开发语言Python 3.x• 数据处理pandas、xlrd• 可视化库pyecharts、matplotlib、wordcloud• 情感分析snownlp• 关系网络networkx• 图片处理pillow、cv2• 安装命令pip install pandas xlrd pyecharts wordcloud snownlp networkx pillow matplotlib三、案例一班级学生信息数据分析与可视化3.1 数据读取与预处理使用pandas读取Excel学生信息表对缺失值、异常值进行清洗保证后续分析准确可靠。import pandas as pddef read_student_data(filepath):df pd.read_excel(filepath)df df.dropna(subset[姓名,性别,省份,城市,签名,成绩,宿舍,生日])return df3.2 性别分布饼图统计班级男女比例使用饼图直观展示性别构成。from pyecharts.charts import Piefrom pyecharts import options as optsdef gender_pie(df):gender_cnt df[性别].value_counts()pie (Pie().add(, list(zip(gender_cnt.index, gender_cnt.values))).set_global_opts(title_optsopts.TitleOpts(title班级性别分布)).set_series_opts(label_optsopts.LabelOpts(formatter{b}: {c}人 {d}%)))pie.render(班级性别饼图.html)3.3 省份分布中国地图将学生来源地在地图上展示清晰看出生源集中区域。from pyecharts.charts import Mapdef province_map(df):prov_cnt df[省份].value_counts()c (Map().add(学生人数, list(zip(prov_cnt.index, prov_cnt.values)), china).set_global_opts(visualmap_optsopts.VisualMapOpts()))c.render(班级省份地图.html)3.4 城市分布柱状图展示学生来源城市TOP10便于分析地域集中度。from pyecharts.charts import Bardef city_bar(df):city_cnt df[城市].value_counts().head(10)bar (Bar().add_xaxis(city_cnt.index.tolist()).add_yaxis(人数, city_cnt.values.tolist()))bar.render(班级城市柱状图.html)3.5 签名词云与情感分析对学生个性签名生成词云并使用snownlp进行情感极性判断。from wordcloud import WordCloudfrom snownlp import SnowNLPimport matplotlib.pyplot as pltdef signature_analysis(df):text .join(df[签名].dropna().astype(str))wc WordCloud(font_pathsimhei.ttf, background_colorwhite)wc.generate(text)plt.axis(off)plt.imshow(wc)plt.savefig(签名词云.png, dpi300, bbox_inchestight)df[score] df[签名].apply(lambda x: SnowNLP(str(x)).sentiments)3.6 成绩分布折线图按分数段统计人数观察整体学习情况。def score_line(df):bins [0,60,70,80,90,100]labels [60,60-70,70-80,80-90,90-100]df[score_part] pd.cut(df[成绩], binsbins, labelslabels)cnt df[score_part].value_counts().sort_index()from pyecharts.charts import Lineline Line().add_xaxis(cnt.index.tolist()).add_yaxis(人数, cnt.values.tolist())line.render(成绩折线图.html)3.7 宿舍关系网络图使用关系图展示学生与宿舍的归属关系结构清晰直观。from pyecharts.charts import Graphdef dorm_graph(df):nodes []links []dorm_cnt df[宿舍].value_counts()for d in dorm_cnt.index:nodes.append({name: d, symbolSize: dorm_cnt[d]*10})for _, row in df.iterrows():nodes.append({name: row[姓名], symbolSize:10})links.append({source: row[姓名], target: row[宿舍]})g Graph().add(, nodes, links, repulsion800)g.render(宿舍关系图.html)3.8 生日散点图以月份和日期为坐标轴展示全班同学生日分布。from pyecharts.charts import Scatterdef birthday_scatter(df):df[month] pd.to_datetime(df[生日]).dt.monthdf[day] pd.to_datetime(df[生日]).dt.days (Scatter().add_xaxis(df[month].tolist()).add_yaxis(生日, df[day].tolist()))s.render(生日散点图.html)3.9 案例一结论1. 班级男女比例存在明显差异可用于活动组织、管理安排参考。2. 学生来源省份高度集中说明招生具有明显地域特征。3. 签名情感偏积极向上班级整体心态良好。4. 成绩主要集中在中高分段学习氛围较好。5. 可进一步扩展兴趣、社团、竞赛等数据完善学生画像。四、案例二微信好友数据分析与可视化4.1 数据读取读取微信导出的好友数据文件进行清洗。def read_wechat_data(filepath):df pd.read_csv(filepath, encodingutf-8)df df.dropna(subset[昵称,性别,省份,城市,签名])return df4.2 好友性别分布统计微信好友男女比例了解社交圈性别结构。def wechat_gender_pie(df):gender_map {1:男,2:女,0:未知}df[gender_cn] df[性别].map(gender_map)cnt df[gender_cn].value_counts()pie Pie().add(, list(zip(cnt.index, cnt.values)))pie.render(微信性别饼图.html)4.3 好友省份地图展示好友地域分布判断社交圈主要集中地区。def wechat_province_map(df):cnt df[省份].value_counts()m Map().add(好友数, list(zip(cnt.index, cnt.values)), china)m.render(微信省份地图.html)4.4 城市地理分布图使用Geo图展示好友城市分布直观清晰。from pyecharts.charts import Geodef wechat_city_geo(df):cnt df[城市].value_counts().head(15)g Geo().add_schema(maptypechina)g.add(好友数, list(zip(cnt.index, cnt.values)))g.render(微信城市分布图.html)4.5 签名情感与词云分析好友签名内容生成词云并判断情感倾向。def wechat_signature_cloud(df):text .join(df[签名].dropna().astype(str))wc WordCloud(font_pathsimhei.ttf, background_colorwhite)wc.generate(text)plt.axis(off)plt.imshow(wc)plt.savefig(微信签名词云.png,dpi300)4.6 广告昵称检测统计昵称中含广告关键词的比例了解社交圈商业化程度。def wechat_ad_rate(df):keys [代购,招商,代理,推广,兼职]cnt sum(1 for n in df[昵称] if any(k in str(n) for k in keys))rate cnt / len(df)from pyecharts.charts import Liquidliq Liquid().add(广告占比,[rate])liq.render(微信广告水滴图.html)4.7 案例二结论1. 微信好友地域高度集中可推断主要生活与工作城市。2. 性别比例相对均衡社交圈结构健康。3. 签名整体积极以生活、学习、励志内容为主。4. 广告类昵称占比较低社交质量较高。5. 可进一步拓展好友年龄、职业、行业等维度构建完整社交画像。五、项目设计思想1. 模块化设计每个功能独立封装为函数便于维护、复用与扩展。2. 全流程闭环数据读取→清洗→统计→可视化→结论输出。3. 多图表结合饼图、柱状图、地图、词云、网络图、散点图互补展示。4. 业务导向可视化服务于分析分析服务于决策。5. 通用性强数据集可替换代码可直接用于其他类似数据分析场景。六、项目总结与未来展望6.1 项目总结本次项目成功完成了班级学生信息与微信好友两套数据的全流程分析与可视化实现了多种图表展示完成了数据清洗、统计、绘图、结论输出等任务。代码结构清晰、注释完整、可直接运行具备良好的工程实践价值。6.2 未来展望1. 接入机器学习实现成绩预测、好友推荐等功能。2. 搭建交互式可视化大屏实现动态展示。3. 对接数据库实现实时数据读取与更新。4. 扩展多源数据构建更全面的用户画像系统。