一、环境准备先装依赖二、案例1班级学生信息表数据分析与可视化1. 完整可运行代码# 导入库import pandas as pdimport matplotlib.pyplot as pltfrom pyecharts.charts import Pie, Map, Bar, Scatter, Graphfrom pyecharts import options as optsfrom wordcloud import WordCloudimport jiebaimport snownlp# -------------- 1. 读取数据 -------------# 读取学生信息表xls/xlsx格式df pd.read_excel(学生信息表.xls, sheet_name0)# 查看数据print(数据预览)print(df.head())# --------- 2. 同学性别饼状图可视化 -----------sex_count df[性别].value_counts()pie_sex (Pie().add(, list(zip(sex_count.index, sex_count.values))).set_colors([#1f77b4, #ff7f0e]).set_global_opts(title_optsopts.TitleOpts(title班级学生性别分布)).set_series_opts(label_optsopts.LabelOpts(formatter{b}: {c}人 ({d}%))))pie_sex.render(性别饼状图.html)print(✅ 性别饼状图已生成)# ------- 3. 同学所在省份中国地图可视化 -------province_count df[省份].value_counts()map_province (Map().add(学生人数, list(zip(province_count.index, province_count.values)), china).set_global_opts(title_optsopts.TitleOpts(title班级学生省份分布),visualmap_optsopts.VisualMapOpts(max_max(province_count.values))))map_province.render(省份中国地图.html)print(✅ 省份中国地图已生成)# ------- 4. 所在城市柱状图可视化 ------city_count df[城市].value_counts().head(10) # 取前10个城市bar_city (Bar().add_xaxis(city_count.index.tolist()).add_yaxis(学生人数, city_count.values.tolist()).set_global_opts(title_optsopts.TitleOpts(title班级学生城市分布TOP10),xaxis_optsopts.AxisOpts(axislabel_optsopts.LabelOpts(rotate30))))bar_city.render(城市柱状图.html)print(✅ 城市柱状图已生成)# ---------------------- 5. 签名词云化 ----------------------# 合并所有签名signature_text .join(df[签名].dropna().tolist())# 分词word_list jieba.lcut(signature_text)word_str .join(word_list)# 生成词云wc WordCloud(font_pathmsyh.ttc, # 微软雅黑字体Windows自带mac需替换width800, height600,background_colorwhite).generate(word_str)# 保存词云plt.figure(figsize(10, 8))plt.imshow(wc)plt.axis(off)plt.savefig(签名词云.png, dpi300, bbox_inchestight)plt.close()print(✅ 签名词云已生成)# ---------------------- 6. 成绩分布折线图可视化 ----------------------# 假设成绩列名为成绩如果是多科目可修改score_col 成绩score_count df[score_col].value_counts().sort_index()line_score (pyecharts.charts.Line().add_xaxis(score_count.index.tolist()).add_yaxis(人数, score_count.values.tolist()).set_global_opts(title_optsopts.TitleOpts(title班级学生成绩分布),xaxis_optsopts.AxisOpts(name分数),yaxis_optsopts.AxisOpts(name人数)))line_score.render(成绩折线图.html)print(✅ 成绩折线图已生成)# ---------------------- 7. 宿舍分布关系图 ----------------------# 统计每个宿舍的人数dorm_count df[宿舍号].value_counts()# 构建关系图节点和连线nodes []links []# 宿舍节点for dorm in dorm_count.index:nodes.append({name: dorm, symbolSize: 30})# 学生节点for idx, row in df.iterrows():student_name row[姓名]dorm row[宿舍号]nodes.append({name: student_name, symbolSize: 10})links.append({source: dorm, target: student_name})graph_dorm (Graph().add(,nodes,links,repulsion800,layoutforce,label_optsopts.LabelOpts(is_showFalse)).set_global_opts(title_optsopts.TitleOpts(title班级宿舍分布关系图)))graph_dorm.render(宿舍关系图.html)print(✅ 宿舍关系图已生成)# ---------------------- 8. 生日散点图可视化 ----------------------# 提取生日月份和日期df[生日_month] pd.to_datetime(df[生日]).dt.monthdf[生日_day] pd.to_datetime(df[生日]).dt.dayscatter_birth (Scatter().add_xaxis(df[生日_month].tolist()).add_yaxis(生日, df[生日_day].tolist()).set_global_opts(title_optsopts.TitleOpts(title班级学生生日分布),xaxis_optsopts.AxisOpts(name月份),yaxis_optsopts.AxisOpts(name日期)))scatter_birth.render(生日散点图.html)print(✅ 生日散点图已生成)# ---------------------- 9. 签名情感分析 ----------------------def analyze_sentiment(text):s snownlp.SnowNLP(text)return s.sentiments # 0-1越接近1越积极df[情感极性] df[签名].dropna().apply(analyze_sentiment)print(\n签名情感分析结果)print(f平均情感极性{df[情感极性].mean():.2f})print(f积极签名占比{(df[情感极性] 0.5).sum() / len(df[情感极性].dropna()) * 100:.1f}%)2. 数据深度分析1核心结论1. 生源分布班级学生主要来自XX省根据实际数据填写说明学校在该省份招生影响力较强建议招生部门◦ 继续深耕该省份的生源市场维持招生规模◦ 针对生源较少的省份加大宣传力度拓展招生渠道优化生源地域结构。2. 签名情感分析班级学生签名的平均情感极性为XX整体偏积极/中性说明学生心态乐观对生活充满热情少数消极签名可关注学生心理状态。3. 成绩分布成绩呈XX分布正态/偏态大部分学生集中在XX分数段少数学生成绩偏低建议针对性帮扶。4. 生日分布学生生日集中在XX月份可用于班级活动策划如集体生日会。三、案例2微信好友数据分析与可视化1. 完整可运行代码import pandas as pdimport matplotlib.pyplot as pltfrom pyecharts.charts import Pie, Map, Geo, Liquidfrom pyecharts import options as optsfrom wordcloud import WordCloudimport jiebaimport snownlp# ---------------------- 1. 读取微信好友CSV数据 ----------------------df pd.read_csv(微信好友.csv)print(微信好友数据预览)print(df.head())# ---------------------- 2. 好友性别饼状图 ----------------------sex_map {0: 未知, 1: 男, 2: 女}df[性别] df[sex].map(sex_map)sex_count df[性别].value_counts()pie_sex (Pie().add(, list(zip(sex_count.index, sex_count.values))).set_colors([#1f77b4, #ff7f0e, #2ca02c]).set_global_opts(title_optsopts.TitleOpts(title微信好友性别分布)).set_series_opts(label_optsopts.LabelOpts(formatter{b}: {c}人 ({d}%))))pie_sex.render(好友性别饼状图.html)print(✅ 好友性别饼状图已生成)# ------ 3. 好友所在省份中国地图 --------province_count df[province].value_counts()map_province (Map().add(好友人数, list(zip(province_count.index, province_count.values)), china).set_global_opts(title_optsopts.TitleOpts(title微信好友省份分布),visualmap_optsopts.VisualMapOpts(max_max(province_count.values))))map_province.render(好友省份地图.html)print(✅ 好友省份地图已生成)# ----- 4. 所在城市地理信息图Geo --------city_count df[city].value_counts().head(15)geo_city (Geo().add_schema(maptypechina).add(好友人数, list(zip(city_count.index, city_count.values)), type_scatter).set_global_opts(title_optsopts.TitleOpts(title微信好友城市地理分布),visualmap_optsopts.VisualMapOpts(max_max(city_count.values))))geo_city.render(好友城市Geo图.html)print(✅ 好友城市地理图已...
考试作业1
发布时间:2026/6/20 3:51:28
一、环境准备先装依赖二、案例1班级学生信息表数据分析与可视化1. 完整可运行代码# 导入库import pandas as pdimport matplotlib.pyplot as pltfrom pyecharts.charts import Pie, Map, Bar, Scatter, Graphfrom pyecharts import options as optsfrom wordcloud import WordCloudimport jiebaimport snownlp# -------------- 1. 读取数据 -------------# 读取学生信息表xls/xlsx格式df pd.read_excel(学生信息表.xls, sheet_name0)# 查看数据print(数据预览)print(df.head())# --------- 2. 同学性别饼状图可视化 -----------sex_count df[性别].value_counts()pie_sex (Pie().add(, list(zip(sex_count.index, sex_count.values))).set_colors([#1f77b4, #ff7f0e]).set_global_opts(title_optsopts.TitleOpts(title班级学生性别分布)).set_series_opts(label_optsopts.LabelOpts(formatter{b}: {c}人 ({d}%))))pie_sex.render(性别饼状图.html)print(✅ 性别饼状图已生成)# ------- 3. 同学所在省份中国地图可视化 -------province_count df[省份].value_counts()map_province (Map().add(学生人数, list(zip(province_count.index, province_count.values)), china).set_global_opts(title_optsopts.TitleOpts(title班级学生省份分布),visualmap_optsopts.VisualMapOpts(max_max(province_count.values))))map_province.render(省份中国地图.html)print(✅ 省份中国地图已生成)# ------- 4. 所在城市柱状图可视化 ------city_count df[城市].value_counts().head(10) # 取前10个城市bar_city (Bar().add_xaxis(city_count.index.tolist()).add_yaxis(学生人数, city_count.values.tolist()).set_global_opts(title_optsopts.TitleOpts(title班级学生城市分布TOP10),xaxis_optsopts.AxisOpts(axislabel_optsopts.LabelOpts(rotate30))))bar_city.render(城市柱状图.html)print(✅ 城市柱状图已生成)# ---------------------- 5. 签名词云化 ----------------------# 合并所有签名signature_text .join(df[签名].dropna().tolist())# 分词word_list jieba.lcut(signature_text)word_str .join(word_list)# 生成词云wc WordCloud(font_pathmsyh.ttc, # 微软雅黑字体Windows自带mac需替换width800, height600,background_colorwhite).generate(word_str)# 保存词云plt.figure(figsize(10, 8))plt.imshow(wc)plt.axis(off)plt.savefig(签名词云.png, dpi300, bbox_inchestight)plt.close()print(✅ 签名词云已生成)# ---------------------- 6. 成绩分布折线图可视化 ----------------------# 假设成绩列名为成绩如果是多科目可修改score_col 成绩score_count df[score_col].value_counts().sort_index()line_score (pyecharts.charts.Line().add_xaxis(score_count.index.tolist()).add_yaxis(人数, score_count.values.tolist()).set_global_opts(title_optsopts.TitleOpts(title班级学生成绩分布),xaxis_optsopts.AxisOpts(name分数),yaxis_optsopts.AxisOpts(name人数)))line_score.render(成绩折线图.html)print(✅ 成绩折线图已生成)# ---------------------- 7. 宿舍分布关系图 ----------------------# 统计每个宿舍的人数dorm_count df[宿舍号].value_counts()# 构建关系图节点和连线nodes []links []# 宿舍节点for dorm in dorm_count.index:nodes.append({name: dorm, symbolSize: 30})# 学生节点for idx, row in df.iterrows():student_name row[姓名]dorm row[宿舍号]nodes.append({name: student_name, symbolSize: 10})links.append({source: dorm, target: student_name})graph_dorm (Graph().add(,nodes,links,repulsion800,layoutforce,label_optsopts.LabelOpts(is_showFalse)).set_global_opts(title_optsopts.TitleOpts(title班级宿舍分布关系图)))graph_dorm.render(宿舍关系图.html)print(✅ 宿舍关系图已生成)# ---------------------- 8. 生日散点图可视化 ----------------------# 提取生日月份和日期df[生日_month] pd.to_datetime(df[生日]).dt.monthdf[生日_day] pd.to_datetime(df[生日]).dt.dayscatter_birth (Scatter().add_xaxis(df[生日_month].tolist()).add_yaxis(生日, df[生日_day].tolist()).set_global_opts(title_optsopts.TitleOpts(title班级学生生日分布),xaxis_optsopts.AxisOpts(name月份),yaxis_optsopts.AxisOpts(name日期)))scatter_birth.render(生日散点图.html)print(✅ 生日散点图已生成)# ---------------------- 9. 签名情感分析 ----------------------def analyze_sentiment(text):s snownlp.SnowNLP(text)return s.sentiments # 0-1越接近1越积极df[情感极性] df[签名].dropna().apply(analyze_sentiment)print(\n签名情感分析结果)print(f平均情感极性{df[情感极性].mean():.2f})print(f积极签名占比{(df[情感极性] 0.5).sum() / len(df[情感极性].dropna()) * 100:.1f}%)2. 数据深度分析1核心结论1. 生源分布班级学生主要来自XX省根据实际数据填写说明学校在该省份招生影响力较强建议招生部门◦ 继续深耕该省份的生源市场维持招生规模◦ 针对生源较少的省份加大宣传力度拓展招生渠道优化生源地域结构。2. 签名情感分析班级学生签名的平均情感极性为XX整体偏积极/中性说明学生心态乐观对生活充满热情少数消极签名可关注学生心理状态。3. 成绩分布成绩呈XX分布正态/偏态大部分学生集中在XX分数段少数学生成绩偏低建议针对性帮扶。4. 生日分布学生生日集中在XX月份可用于班级活动策划如集体生日会。三、案例2微信好友数据分析与可视化1. 完整可运行代码import pandas as pdimport matplotlib.pyplot as pltfrom pyecharts.charts import Pie, Map, Geo, Liquidfrom pyecharts import options as optsfrom wordcloud import WordCloudimport jiebaimport snownlp# ---------------------- 1. 读取微信好友CSV数据 ----------------------df pd.read_csv(微信好友.csv)print(微信好友数据预览)print(df.head())# ---------------------- 2. 好友性别饼状图 ----------------------sex_map {0: 未知, 1: 男, 2: 女}df[性别] df[sex].map(sex_map)sex_count df[性别].value_counts()pie_sex (Pie().add(, list(zip(sex_count.index, sex_count.values))).set_colors([#1f77b4, #ff7f0e, #2ca02c]).set_global_opts(title_optsopts.TitleOpts(title微信好友性别分布)).set_series_opts(label_optsopts.LabelOpts(formatter{b}: {c}人 ({d}%))))pie_sex.render(好友性别饼状图.html)print(✅ 好友性别饼状图已生成)# ------ 3. 好友所在省份中国地图 --------province_count df[province].value_counts()map_province (Map().add(好友人数, list(zip(province_count.index, province_count.values)), china).set_global_opts(title_optsopts.TitleOpts(title微信好友省份分布),visualmap_optsopts.VisualMapOpts(max_max(province_count.values))))map_province.render(好友省份地图.html)print(✅ 好友省份地图已生成)# ----- 4. 所在城市地理信息图Geo --------city_count df[city].value_counts().head(15)geo_city (Geo().add_schema(maptypechina).add(好友人数, list(zip(city_count.index, city_count.values)), type_scatter).set_global_opts(title_optsopts.TitleOpts(title微信好友城市地理分布),visualmap_optsopts.VisualMapOpts(max_max(city_count.values))))geo_city.render(好友城市Geo图.html)print(✅ 好友城市地理图已...