第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 表结构如下:
字段 | 类型 | 含义 |
---|---|---|
country | varchar(50) | 国籍 |
count | int(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_name | varchar(50) | 球员id |
pts | double | 场均得分 |
country | varchar(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_name | varchar(50) | 球员id |
ws | double | 场均得分 |
work_year | varchar(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_name | varchar(50) | 球队名称 |
cs | double | 综合实力 |
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 表结构如下:
字段 | 类型 | 含义 |
---|---|---|
year | int(5) | 年份 |
count | int(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()