文章目录
0. 数据下载1. 项目描述2. 数据集描述3. 项目任务4. 项目实现4.1 单变量分析4.2 变量间关系分析
5. 项目总结
0. 数据下载
算法学习、4对1辅导、论文辅导、核心期刊 项目的代码和数据下载可以通过公众号滴滴我
1. 项目描述
精灵宝可梦系列是一套由日本任天堂株式会社于1996年推出的一款游戏。独特的游戏系统广受大众的欢迎,年度产品销量近千万。
精灵宝可梦作品包括游戏、动画、漫画、卡片游戏及相关产品。宝可梦同时也是宝可梦世界所有虚构出来的物种所拥有的共同的名字。截至2017年10月,全系列的宝可梦共有805种。
基于此,我们可以对Pokémon的数据/变量进行统计分析,并从中发掘他们之间的关系,用可视化的方式进行直观的查看。
2. 数据集描述
字段名称字段描述数据类型NumberPokédex中的Pokémon ID整型NamePokémon名称字符串Type_1主要类别字符串Type_2副类别字符串Total基本统计值的和整型1. HP生命值整型2. Attack攻击值整型3. Defense防御值整型4. Sp_Atk特殊攻击值整型5. Sp_Def特殊防御值整型6. Speed速度值整型Generation属于第几代Pokémon整型isLegendary是否为传说中的Pokémon布尔值ColorPokémon颜色字符串hasGender是否有性别布尔值Pr_male可能为男性的概率浮点型Egg_Group_1蛋群分组1字符串Egg_Group_2蛋群分组2(如果有的话)字符串hasMegaEvolution是否拥有Mega进化的能力布尔值Height_mPokémon的高度(单位为m)浮点型Weight_kgPokémon的重量(单位为kg)浮点型Catch_Rate捕获率整型Body_Style身体形状字符串
3. 项目任务
单变量分析变量间关系分析
4. 项目实现
# 引入必要的包
import csv
import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
pokemon_data = pd.read_csv('pokemon.csv')
pokemon_data.head()
4.1 单变量分析
plt.figure(figsize=(10, 5))
# Type_1 的数量统计图
ax1 = plt.subplot(1, 2, 1)
sns.countplot(x='Type_1', data=pokemon_data)
plt.title('主要类别的数量统计')
plt.xticks(rotation='vertical')
plt.xlabel('主要类别')
plt.ylabel('数量')
# Type_2 的数量统计图
plt.subplot(1, 2, 2, sharey=ax1)
sns.countplot(x='Type_2', data=pokemon_data)
plt.title('副类别的数量统计')
plt.xticks(rotation='vertical')
plt.xlabel('副类别')
plt.ylabel('数量')
plt.tight_layout()
plt.figure(figsize=(10, 5))
# Egg_Group_1 的数量统计图
ax1 = plt.subplot(1, 2, 1)
sns.countplot(x='Egg_Group_1', data=pokemon_data)
plt.title('蛋群分组1的数量统计')
plt.xticks(rotation=60)
plt.xlabel('蛋群分组1')
plt.ylabel('数量')
# Egg_Group_2 的数量统计图
plt.subplot(1, 2, 2, sharey=ax1)
sns.countplot(x='Egg_Group_2', data=pokemon_data)
plt.title('蛋群分组2的数量统计')
plt.xticks(rotation=60)
plt.xlabel('蛋群分组2')
plt.ylabel('数量')
plt.tight_layout()
# 其余单变量数量统计
plt.figure(figsize=(10, 5))
# isLegendary 的数量统计图
ax1 = plt.subplot(2, 3, 1)
sns.countplot(x='isLegendary', data=pokemon_data)
plt.title('是否为传说类型的数量统计')
plt.xlabel('是否为“传说”')
plt.ylabel('数量')
# hasGender 的数量统计图
plt.subplot(2, 3, 2, sharey=ax1)
sns.countplot(x='hasGender', data=pokemon_data)
plt.title('是否有性别的数量统计')
plt.xlabel('是否有性别')
plt.ylabel('数量')
# hasMegaEvolution 的数量统计图
plt.subplot(2, 3, 3, sharey=ax1)
sns.countplot(x='hasMegaEvolution', data=pokemon_data)
plt.title('是否有Mega进化的数量统计')
plt.xlabel('是否有Mega进化')
plt.ylabel('数量')
# 颜色 的数量统计图
plt.subplot(2, 3, 4)
sns.countplot(x='Color', data=pokemon_data)
plt.xticks(rotation=60)
plt.title('颜色的数量统计')
plt.xlabel('颜色')
plt.ylabel('数量')
# 身形 的数量统计图
plt.subplot(2, 3, 5)
sns.countplot(x='Body_Style', data=pokemon_data)
plt.xticks(rotation=90)
plt.title('身形的数量统计')
plt.xlabel('身形')
plt.ylabel('数量')
# 第n代 的数量统计图
plt.subplot(2, 3, 6)
sns.countplot(x='Generation', data=pokemon_data)
plt.title('第n代的数量统计')
plt.xlabel('第n代')
plt.ylabel('数量')
plt.tight_layout()
# 数值型数据分布统计
plt.figure(figsize=(10, 5))
numeric_cols = ['Total', 'HP', 'Attack', 'Defense', 'Sp_Atk', 'Sp_Def', 'Speed', 'Pr_Male', 'Height_m', 'Weight_kg', 'Catch_Rate']
for i in range(len(numeric_cols)):
plt.subplot(4, 3, i + 1)
sns.distplot(pokemon_data[numeric_cols[i]].dropna())
plt.xlabel(numeric_cols[i])
plt.tight_layout()
4.2 变量间关系分析
plt.figure()
sns.pairplot(pokemon_data.dropna(), vars=numeric_cols, size=1)
corr_df = pokemon_data[numeric_cols].corr()
corr_df
plt.figure()
# 关闭格子线 (grid line)
ax = plt.gca()
ax.grid(False)
plt.imshow(corr_df, cmap='jet')
plt.xticks(range(len(numeric_cols)), numeric_cols, rotation='vertical')
plt.yticks(range(len(numeric_cols)), numeric_cols)
plt.colorbar()
plt.tight_layout()
5. 项目总结
该项目通过分析Pokemon数据,实践了Python数据分析常用的可视化操作,包括:
单变量数据可视化变量间关系可视化