第1关:NBA球员国籍可视化
编程要求
读取 MySQL 中 result.nba_country表内球员数量大于5的数据,用来绘制 NBA 国籍分布图,最终将绘制的图片保存到指定路径中。
具体要求如下:
设置饼图的figsize为(15, 10);
标签名称为读取的国籍名;
主标题设置为:NBA 国籍分布图;
设置占比最高的科目离心点距离为:0.2,其余的设为0.7;
添加数值,精确到小数点后两位,如:20.52%;
文件保存路径为/data/workspace/myshixun/step1/image/user.png。
nba_country 表结构如下:
字段类型含义countryvarchar(50)国籍countint(5)球员数量MySQL 数据库连接信息
账号: root 密码:123123 地址:127.0.0.1 端口:3306
from matplotlib import pyplot as plt
import pymysql
def work():
##################### Begin #####################
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置图片大小
plt.figure(figsize=(15,10))
# 获取 mysql 中的数据
conn = pymysql.connect(host='127.0.0.1',
user='root',
password='123123',
port=3306,
database='result') # 建立连接
cursor = conn.cursor()
# 获取数据
cursor.execute("select * from nba_country where count>5")
list_res = cursor.fetchall()
# 关闭连接
conn.close()
cursor.close()
# 定义存放数据的列表
list_name = [] # 国籍
list_data = [] # 数值
# 添加数据
for data in list_res:
list_name.append(data[0])
list_data.append(data[1])
# 设置离心点,找出最大的占比下标
maxNum = max(list_data) # 找出最大值
index = [] # 记录下标
# 需要循环寻找最大值坐标,因为可能有多个最大值
for i in range(0, len(list_data)):
if list_data[i] == maxNum:
index.append(i)
# 设置所有的离心点距离
explode = [0.7 for _ in range(0, len(list_data))]
# 设置最大值的离心点距离
for i in range(0, len(index)):
explode[index[i]] = 0.2
# 添加标题
plt.title("NBA 国籍分布图")
# 绘制饼图
plt.pie(list_data,labels=list_name,autopct='%1.2f%%',explode=explode)
# 保存图片
plt.savefig('/data/workspace/myshixun/step1/image/user.png')
##################### End #####################
work()
第2关:NBA球员得分可视化
编程要求
读取 MySQL 中 result.nba_pts表内所有得分数据,用来绘制频率分布图,最终将绘制的图片保存到指定路径中。
具体要求如下:
设置制频率分布图的figsize为(15, 10);
竖轴标签为;"得分";
图形颜色为:#f0a1a8;
主标题设置为:球员得分频率分布图;
设置网格,透明度为:0.3,线条类型为::;
文件保存路径为/data/workspace/myshixun/step2/image/user.png。
nba_pts 表结构如下:
字段类型含义player_namevarchar(50)球员idptsdouble场均得分countryvarchar(20)国籍MySQL 数据库连接信息
账号: root 密码:123123 地址:127.0.0.1 端口:3306
from matplotlib import pyplot as plt
import pymysql
def work():
##################### Begin #####################
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置图片大小
plt.figure(figsize=(15,10))
# 获取 mysql 中的数据
conn = pymysql.connect(host='127.0.0.1',user='root',password='123123',port=3306,database='result') # 建立连接
cursor = conn.cursor()
# 获取数据
cursor.execute("select pts from nba_pts")
list_data = cursor.fetchall()
# 关闭连接
conn.close()
cursor.close()
# 定义存放数据的列表
list_score = [] # 球员得分
# 添加数据
for data in list_data:
list_score.append(data[0])
# 绘制频率直方图
plt.hist(list_score, color='#f0a1a8', bins=20)
# 设置网格
plt.grid(alpha=0.3, linestyle=':')
# 竖轴标签
plt.ylabel("得分")
# 添加标题
plt.title("球员得分频率分布图")
# 设置保存路径
plt.savefig("/data/workspace/myshixun/step2/image/user.png")
##################### End #####################
work()
第3关:NBA球员胜率可视化
编程要求
读取 MySQL 中 result.nba_ws表内所有工作年份在 19 年或以上的数据,用来绘制条形图,最终将绘制的图片保存到指定路径中。
具体要求如下:
设置条形图的figsize为(15, 10);
竖轴标签为;"胜率";
条形图颜色为:#ed556a,宽度为:0.4;
主标题设置为:NBA 球员胜率图;
设置网格,透明度为:0.3,线条类型为:-,线条宽度为:0.2,颜色为:gray;
设置横轴标签倾斜度为:-30;
将球员姓名作为横轴数据,胜率作为竖轴数据;
文件保存路径为/data/workspace/myshixun/step3/image/user.png。
result.nba_ws 表结构如下:
字段类型含义player_namevarchar(50)球员idwsdouble场均得分work_yearvarchar(20)经验/工作年份MySQL 数据库连接信息
账号: root 密码:123123 地址:127.0.0.1 端口:3306
from matplotlib import pyplot as plt
import pymysql
def work():
##################### Begin #####################
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置图片大小
plt.figure(figsize=(15,10))
# 获取 mysql 中的数据
conn = pymysql.connect(host='127.0.0.1',user='root',password='123123',port=3306,database='result') # 建立连接
cursor = conn.cursor()
# 获取数据
cursor.execute("select player_name,ws from nba_ws where work_year>='19'")
list_data = cursor.fetchall()
# 关闭连接
conn.close()
cursor.close()
# 存放数据
list_ws = [] # 球员胜率
list_name = [] # 球员姓名
# 添加数据
for data in list_data:
list_name.append(data[0])
list_ws.append(data[1])
# 数值排序
sorted_indices = sorted(range(len(list_ws)), key=lambda k: list_ws[k])
# 绘制条形图
plt.bar(range(len(list_ws)), [list_ws[i] for i in sorted_indices], color='#ed556a', width=0.4)
# 添加标签
plt.xticks(range(len(list_ws)), [list_name[i] for i in sorted_indices])
# 添加竖轴标签
plt.ylabel("胜率")
# 设置横轴标签倾斜度
plt.xticks(rotation=-30, ha='left')
# 设置网格线
plt.grid(alpha=0.3, linestyle='-', linewidth=0.2, color='gray')
# 保存图片
plt.savefig("/data/workspace/myshixun/step3/image/user.png")
##################### End #####################
work()
第4关:NBA球员球队可视化
编程要求
读取 MySQL 中 result.nba_cs表内所有数据,用来绘制散点图,最终将绘制的图片保存到指定路径中。
具体要求如下:
设置制散点图的figsize为(10, 8);
先将数据根据综合实力进行倒序排列,取综合实力前 25 的数据设置为散点图数据一(以下称为:图一),将综合实力后 25 的数据设置为散点图数据二(以下称为:图二)。
竖轴标签为;"综合实力";
图一的颜色为: red,图形设为三角形,大小设置为:60,标签设置为:Top25;
图二的颜色为: blue,图形设为圆形,大小设置为:60,标签设置为:Top50;
主标题设置为:NBA 球队胜率 Top50;
设置网格,透明度为:0.3,线条类型为::,线条宽度为:0.2,颜色为:gray;
设置图例,位置为:best;
文件保存路径为/data/workspace/myshixun/step4/image/user.png。
result.nba_cs 表结构如下:
字段类型含义team_namevarchar(50)球队名称csdouble综合实力MySQL 数据库连接信息
账号: root 密码:123123 地址:127.0.0.1 端口:3306
from matplotlib import pyplot as plt
import pymysql
def work():
##################### Begin #####################
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置图片大小
plt.figure(figsize=(10,8))
# 获取 mysql 中的数据
conn = pymysql.connect(host='127.0.0.1',user='root',password='123123',port=3306,database='result') # 建立连接
cursor = conn.cursor()
# 获取数据
cursor.execute("select team_name,cs from nba_cs order by cs desc")
list_data = cursor.fetchall()
# 关闭连接
conn.close()
cursor.close()
# 存放数据
list_cs = [] # 综合实力
list_teamName = [] # 球队名称
# 添加数据
for data in list_data:
list_teamName.append(data[0])
list_cs.append(data[1])
# 绘制图一
plt.scatter(list_teamName[:25], list_cs[:25], color='red', marker='^', s=60, label='Top25')
# 绘制图二
plt.scatter(list_teamName[-25:], list_cs[-25:], color='blue', marker='o', s=60, label='Top50')
# 设置网格线
plt.grid(alpha=0.3, linestyle=':', linewidth=0.2, color='gray')
# 设置竖轴标签
plt.ylabel("综合实力")
# 设置主标题
plt.title("NBA 球队胜率 Top50")
# 设置图例
plt.legend(loc='best')
# 保存图片
plt.savefig("/data/workspace/myshixun/step4/image/user.png")
##################### End #####################
work()
第5关:NBA球员趋势可视化
编程要求
读取 MySQL 中 result.nba_year表内所有数据,用来绘制折线图,最终将绘制的图片保存到指定路径中。
具体要求如下:
设置制散点图的figsize为(15,15);
按照年份升序排列绘制。
竖轴标签为;"人数";
主标题设置为:NBA 球员趋势图;
折线图颜色为:#2775b6,线条样式为:--;
设置横轴跨度为:2,标签倾斜度为:-45;
设置网格,透明度为:0.3,线条类型为::,线条宽度为:0.2,颜色为:red;
文件保存路径为/data/workspace/myshixun/step5/image/user.png。
result.nba_year 表结构如下:
字段类型含义yearint(5)年份countint(5)数量MySQL 数据库连接信息
账号: root 密码:123123 地址:127.0.0.1 端口:3306
from matplotlib import pyplot as plt
import pymysql
def work():
##################### Begin #####################
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置图片大小
plt.figure(figsize=(15,15))
# 获取 mysql 中的数据
conn = pymysql.connect(host='127.0.0.1',user='root',password='123123',port=3306,database='result') # 建立连接
cursor = conn.cursor()
# 获取数据
cursor.execute("select year,count from nba_year order by year desc")
list_data = cursor.fetchall()
# 关闭连接
conn.close()
cursor.close()
# 定义存放数据的列表
list_year = [] # 年份
list_count = [] # 球员数量
# 添加数据
for data in list_data:
list_year.append(data[0])
list_count.append(data[1])
# 绘制折线图
plt.plot(list_year, list_count, color='#2775b6', linestyle='--')
# 设置网格线
plt.grid(alpha=0.3, linestyle=':', linewidth=0.2, color='red')
# 设置竖轴
plt.ylabel("人数")
# 设置主标题
plt.title("NBA 球员趋势图")
# 设置横轴跨度和标签倾斜度
plt.xticks(range(len(list_year)), list_year, rotation=-45)
# 保存图片
plt.savefig("/data/workspace/myshixun/step5/image/user.png")
##################### End #####################
work()