【数据可视化】猫猫数据可视化分析

110 阅读5分钟

🧑 博主简介:曾任某智慧城市类企业算法总监,CSDN / 稀土掘金 等平台人工智能领域优质创作者。

目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。

一、引言

在本文中,我们将使用Pyecharts库对一份包含1000只猫的详细信息的数据集进行可视化分析。这份数据集涵盖了猫的品种、年龄、体重、颜色和性别等多个属性。通过可视化分析,我们可以更直观地了解不同品种和个体之间的差异。

二、数据集说明

  • Breed: 每只猫的品种,如暹罗猫、缅因猫、波斯猫、孟加拉猫等。
  • Age (Years): 猫的年龄(以岁为单位)。
  • Weight (kg): 猫的体重(以公斤为单位)。
  • Color: 猫的毛色,包括纯色和图案等。
  • Gender: 猫的性别,分为Male或Female。

三、环境准备

首先,我们需要安装Pyecharts,seaborn,matplotlib库。如果你还没有安装,可以使用以下命令进行安装:

pip install pyecharts,seaborn,matplotlib

四、数据读取与预处理

假设我们的数据集是一个CSV文件,名为cat_info.csv。我们可以使用Pandas库来读取数据:

import pandas as pd

# 读取数据
data = pd.read_csv('cat_info.csv')

查看数据维度; 查看数据缺失值情况;

五、可视化分析

接下来,我们将使用Pyecharts进行可视化分析。

5.1 品种分布

首先,我们来看不同品种的猫的数量分布:

# 品种分析
temp = data['Breed'].value_counts().reset_index()
temp.columns = ['品种','数量']
data_pair = [(row['品种'], row['数量']) for _, row in temp.iterrows()]
top_city = sorted(data_pair, key=lambda x: x[1], reverse=True)[::-1]

bar = (Bar(init_opts=opts.InitOpts(theme='dark',width='1000px', height='600px'))
            .add_xaxis([x[0] for x in top_city])
            .add_yaxis("数量", [x[1] for x in top_city])
            .set_series_opts(label_opts=opts.LabelOpts(is_show=False),
                             )

            .set_global_opts(
                title_opts=opts.TitleOpts(title="不同品种的猫猫的数据分析",
                                         subtitle="""--公众号:NLP随手记  CSDN:云天徽上--""",
                                          pos_left="center"),
                xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),  #
                legend_opts=opts.LegendOpts(is_show=True),
                visualmap_opts=opts.VisualMapOpts(
                    is_show=False,
                    pos_top='60%',
                    pos_left='40%',
                    range_color=["green", "yellow", "red", "pink", "orange", "purple"]
            )
            )
            .reversal_axis()
            
        )
bar.render_notebook()

从图中可以发现,在该数据集中品种最多的猫是Ragdoll;

5.2 毛色分布

接下来,我们来看猫的毛色分布:

# 颜色分布
color_counts = data['Color'].value_counts()
# 生成饼图数据
color_data = [(color, count) for color, count in color_counts.items()]

# 定义颜色映射字典
color_mapping = {
    'Tricolor': '#ff9999',
    'Gray': '#707070',
    'Pointed': '#99ff99',
    'Bicolor': '#ffcc99',
    'Sable': '#c2c2f0',
    'Cream': '#ffb3e6',
    'Black': '#000000', 
    'Red': '#ff6666',
    'Tortoiseshell': '#ffcc66',
    'Orange': '#ff9966',
    'Calico': '#b3b3b3',
    'Tabby': '#ffb3b3',
    'Brown': '#cc9966',
    'Blue': '#66b3ff',
    'White': '#ffffff'
}


# 提取颜色列表
colors = [color_mapping[color] for color, _ in color_data]

# 创建饼图
pie_chart = (
    Pie()
    .add("", color_data)
    .set_colors(colors)  # 使用颜色映射列表
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='不同品种的猫猫的数据分析',
            subtitle="""--公众号:NLP随手记  CSDN:云天徽上--""",
            pos_top='0%',
            pos_left="center",
            title_textstyle_opts=opts.TextStyleOpts(color='#228be6',font_size=15)
        ),
        # visualmap_opts=opts.VisualMapOpts(
        #     is_show=False,
        #     max_=600,
        #     pos_top='70%',
        #     pos_left='20%',
        #     range_color=["green", "yellow", "red", "pink", "orange"]
        # ),
        legend_opts=opts.LegendOpts(is_show=True, pos_right="5%", pos_top="20%",orient="vertical"),
    )
)
pie_chart.render("pie_set_color.html")
# 渲染图形
pie_chart.render_notebook()

从上面的饼状图中,我们可以发现该数据集中一个存在15种颜色的猫,且各种颜色的猫的数量相差无几; 我们还可以对体重、猫的性别等单一维度进行分析,这里不再重复介绍,下面将进行多维度的分析;

5.3 不同颜色猫的年龄分布

然后,我们来看不同颜色猫的年龄分布:

age_data = [data[data['Color'] == color]['Age (Years)'].values for color in data['Color'].unique()]

# 创建箱线图
boxplot_age = (
    Boxplot()
    .add_xaxis(data['Color'].unique().tolist())
    .add_yaxis("", [list(pd.Series(data).describe().values)[3:8] for data in age_data])
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='不同颜色猫的年龄分布箱线图',
            subtitle="""--公众号:NLP随手记  CSDN:云天徽上--""",
            pos_top='0%',
            pos_left="center",
            title_textstyle_opts=opts.TextStyleOpts(color='#228be6',font_size=15)
        ),

)
)
boxplot_age.render("age.html")

5.4 不同颜色猫的体重分布

最后,我们来看不同颜色猫的体重分布:

weight_data = [data[data['Color'] == color]['Weight (kg)'].values for color in data['Color'].unique()]

boxplot_weight = (
    Boxplot()
    .add_xaxis(data['Color'].unique().tolist())
    .add_yaxis("", [list(pd.Series(data).describe().values)[3:8] for data in weight_data])
    
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='不同颜色猫的体重分布箱线图',
            subtitle="""--公众号:NLP随手记  CSDN:云天徽上--""",
            pos_top='0%',
            pos_left="center",
            title_textstyle_opts=opts.TextStyleOpts(color='#228be6',font_size=15)
        )
)
)
boxplot_weight.render('boxplot_weight.html')

5.5 不同类别猫的体重分布

接下来,我们来看不同类别猫的体重分布:

import matplotlib.pyplot as plt
import seaborn as sns

plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码

plt.figure(figsize=(15, 8))
sns.boxplot(data=data, x='Weight (kg)', y='Breed')
plt.title('类别与体重的关系\n--公众号:NLP随手记  CSDN:云天徽上--')
plt.xlabel('体重(/kg)')
plt.ylabel('类别')
plt.show()

5.6 不同类别猫的年龄分布

最后,我们来看不同类别猫的年龄分布:

plt.figure(figsize=(15, 8))
sns.violinplot(data=data, x='Breed', y='Age (Years)')
plt.title('各个类别的年龄分布区间\n--公众号:NLP随手记  CSDN:云天徽上--')
plt.xlabel('类别')
plt.ylabel('年龄(/Years)')
plt.xticks(rotation=45)
plt.show()

结论

通过以上的可视化分析,我们可以更直观地了解不同品种、年龄、体重、毛色和性别的猫的数量分布。这些可视化结果有助于我们更好地理解猫科动物的多样性和个体差异。


如果您在人工智能领域遇到技术难题,或是需要专业支持,无论是技术咨询、项目开发还是个性化解决方案,我都可以为您提供专业服务,如有需要可站内私信或VX(ID:xf982831907)联系;

期待与您一起交流,共同探索AI的更多可能!