2022年大数据网络赛&可视化部分

第一题

1、学校学生使用频次最多的前30所学校(5分)
提示:按照学校分组,对学生人数做累加求得每个学校学生使用的频次,最后对频次进行降序排名并将最终结果通过横向柱状图展示。

要求:
1)各学校使用频次(1分)
t1.csv
2)学校学生使用频次最多的前30所学校(1分)

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.read_csv("../pandas_use/data.csv")
# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

plt.figure(figsize=(30,10))
# 按学校分组,求各个学校学生人数总和
df1 = df.groupby(["学校"]).agg({'学生人数':'sum'}).sort_values("学生人数",ascending=False).head(30)
df2 = df.groupby(["学校"]).agg({'学生人数':'sum'}).sort_values("学生人数",ascending=False)
plt.barh(df1.index,df1["学生人数"])
plt.xticks(rotation=50)  #可以让x轴文字逆时针转动50°
plt.show()
print(df1)
df2.to_csv("t1.csv")

结果截图(2分):
使用频次最多的前三十学校&条形图结论:(1分)
香港中文大学的学生最喜欢使用快手APP,南方沿海城市的学生使用频次最高,福建,山东,安徽等地的生源最喜欢使用快手APP

第二题

2、使用频次前五学校学生中男女使用比例 (5分)
基于题目1中统计得到的各学校学生使用频次取出排名前5的学校,按照学校、性别分组,对学生人数进行sum累加求得各性别人数,将最终结果通过饼图展示(即展示前5所学校中每所学校男生女生的人数,需要在一张画布上展示5个图形,学校名作为每个图形的标题)。
要求:
1)取出学校学生使用频次排名前5的学校 (1分)
2)求得前5所学校中男生女生的使用频次(1分)

在这里插入图片描述

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv("../pandas_use/data.csv")
df1 = df.groupby(['学校']).agg({'学生人数':'sum'}).sort_values(by = '学生人数',ascending=False).head(5)
df2 = df.loc[df["学校"].isin(df1.index)]

# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

df3 = df2.groupby(["学校","性别"]).agg({'学生人数':'sum'})
# print(df3)
# print(df3.loc[["汉口学院"]].values)

plt.figure(figsize=(10,10))
for index,i in enumerate(df1.index):
    plt.subplot(2,3,index + 1)
    print(i)
    x = [df3.loc[(i,"男")].values[0] , df3.loc[(i,"女")].values[0]]
    plt.pie(x, labels=["男","女"])
    plt.title(i)
plt.show()

结果截图(2分):
在这里插入图片描述

结论:(1分)
男生使用频次高于女生

第三题

3、按省份统计使用快手APP数量 (5分)
按照学校省份进行分组,对学生人数进行累加求和得到每个省份的学生使用频次,最终将结果通过地图展示

要求:
1)各省份学生的使用频次(1分)

# 导入所需模块
import pandas as pd
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
import matplotlib.pyplot as plt
from pyecharts.charts import Map
import os

data = pd.read_csv("../pandas_use/data.csv")
# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

## 安装地图数据包
# pip install echarts-countries-pypkg
# pip install echarts-china-provinces-pypkg
# pip install echarts-china-cities-pypkg
# pip install echarts-china-counties-pypkg
# pip install echarts-china-misc-pypkg
# pip install echarts-united-kingdom-pypkg


# os.system("pip install echarts-countries-pypkg")
# os.system("pip install echarts-china-provinces-pypkg")
# os.system("pip install echarts-china-cities-pypkg")
# os.system("pip install echarts-china-counties-pypkg")
# os.system("pip install echarts-china-misc-pypkg")
# os.system("pip install echarts-united-kingdom-pypkg")


province_data = data.loc[:,['学生省份','学生人数']].groupby('学生省份').count().reset_index()

province_data = province_data.replace('省','',regex=True).replace('自治区','',regex=True).replace('特别行政区','',regex=True)\
.replace('壮族','',regex=True).replace('维吾尔','',regex=True).replace('回族','',regex=True).replace('市','',regex=True)

province_name = province_data['学生省份'].tolist()
province_num = province_data['学生人数'].tolist()


(
    Map()
    .add("人数",
         [list(z) for z in zip(province_name, province_num)],
         maptype="china"
        )
    .set_series_opts(
        label_opts=opts.LabelOpts(
            is_show=True,
            color='black',
            position='bottom',
            font_size=10,
            formatter=JsCode(
                '''function(params) {
                    if (isNaN(params.value)){
                        return params.name;
                    }else{return params.name+'\\n'+params.value;}
                }'''
            ),
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="各省份使用人数"),
        visualmap_opts=opts.VisualMapOpts(max_=1500),
    )
    .render("map_china_cities.html")
)

结果截图(3分):
在这里插入图片描述

结论:(1分)
从各省份生源数量分布来看:东部沿海地区使用快手APP的学生数量要明显高于中部和西部地区
文章第三题代码来自:这篇

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值