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