Matplotlib: 数据可视化利器

Matplotlib: 数据可视化利器

!git clone https://github.com/kb22/Visualization-using-Matplotlib

!tree Visualization-using-Matplotlib

在这里插入图片描述

0 导入相关库

# 基础
import numpy as np # 处理数组
import pandas as pd # 读取数据&&DataFrame
import matplotlib.pyplot as plt # 制图
from matplotlib import rcParams # 定义参数
from matplotlib.cm import rainbow # 配置颜色

%matplotlib inline 
import warnings
warnings.filterwarnings('ignore') # 忽略警告信息

1 数据预处理

dataset = pd.read_csv('Visualization-using-Matplotlib/dataset.csv', skiprows=[0, 1, 2, 3])
dataset.head()

在这里插入图片描述
dataset.columns
在这里插入图片描述
删除数据

Country Code列
1960 & 2016 & Unnamed列 (NaN)
Indicator Name & Indicator Code列

dataset.drop(['Country Code', '1960', '2016', 'Unnamed: 61', 'Indicator Name', 'Indicator Code'], axis=1, inplace=True)

dataset.dropna(how='any', axis=0, inplace=True) # 删除有可能缺失值的行

dataset.isnull().sum() # 检查所有列是否有缺失值

在这里插入图片描述

2 可视化

2.1 曲线图

分析Aruba国家1961-2015年人口密度变化

dataset.columns[1:] # 年份 X轴

在这里插入图片描述

dataset.iloc[0][1:] # 人口密度变化 Y轴

在这里插入图片描述

plt.rcParams['figure.figsize'] = 20, 16 # (16, 12)
plt.rcParams['font.size'] = 20 # '20'

plt.title("Population density of + 'Aruba' + over the years")
plt.xlabel('Years')
plt.ylabel('Population density')
plt.xticks(rotation='90') # 文本旋转90°
plt.plot(dataset.columns[1:], dataset.iloc[0][1:]) # Aruba 

在这里插入图片描述

从从20世纪80年代开始,Aruba国家人口密度一直在稳步上升;从20世纪90年代……
多个国家

x = dataset.columns[1:]
cololrs = rainbow(np.linspace(0, 1, 5))

for index in range(5):
    y = dataset.iloc[index][1:]
    plt.plot(x, y, c=cololrs[index], label=dataset.iloc[index][0], linewidth=4)
    plt.title("Comparing population density of various conutries")
    plt.xlabel('Years')
    plt.ylabel('Population density')
    plt.xticks(rotation='90') # 文本旋转90°
    plt.legend(prop={'size':24}) # 图例字体

在这里插入图片描述
help(plt.annotate)

阿鲁巴的人口密度高于其他4个国家(安道尔、阿富汗、安哥拉、阿尔巴尼亚)

2.2 柱形图

绘制2015年所有国家和地区的人口密度图

countries = dataset['Country Name']
populationDensity2015 = dataset['2015']
plt.xticks(rotation='90')
colors = rainbow(np.linspace(0, 1, len(countries)))
plt.bar(countries, populationDensity2015, color=colors)

在这里插入图片描述
中国

countries[countries == 'China']

top10

top10 = dataset.sort_values('2015', ascending=False).head(10)

top10

在这里插入图片描述

plt.xticks(rotation='45')
colors = rainbow(np.linspace(0, 1, len(top10)))
plt.title("Population Density of 10 most densely populated countries for the year 2015")
plt.xlabel('Countires')
plt.ylabel('Population Density')
plt.bar(top10['Country Name'], top10['2015'], color=colors)

在这里插入图片描述

2015 澳门特区和摩纳哥是全球人口密度最高的

2.3 散点图
selected_data = dataset[dataset.sum(axis=1).apply(lambda x: x/total_colums) <= 10]

consolidataed_data = selected_data.sum(axis=1).apply(lambda x: x/total_colums)

countries = selected_data['Country Name']

plt.title("Average Population density for various countries")
plt.xlabel('Years')
plt.ylabel('Average Population Density')
plt.xticks(rotation='90') # 文本旋转90°
cololrs = rainbow(np.linspace(0, 1,len(countries)))
plt.scatter(countries, consolidataed_data, s=consolidataed_data*20, c=cololrs)

在这里插入图片描述

plt.title("Average Population density for various countries")
plt.ylabel('Countries')
plt.xlabel('Average Population Density')
cololrs = rainbow(np.linspace(0, 1,len(countries)))
plt.scatter(consolidataed_data, countries, s=consolidataed_data*20, c=cololrs) # 将数据点放大20倍

在这里插入图片描述

格兰岛是所有国家/地区平均人口密度最低的

3 深入分析

3.1 描述性分析

观察世界上人口最大和最小密度值是都有关联

dataset.loc[:, dataset.columns != 'Country Name'].min()

minimum = dataset.loc[:, dataset.columns != 'Country Name'].min() 
maximum = dataset.loc[:, dataset.columns != 'Country Name'].max()

diff = maximum - minimum
minOfMax = maximum.min() # 确保把所有的数值分别与最小值的年份进行比较
plt.title('Range of Population Density for years 1961-2015')
plt.xlabel('Years')
plt.ylabel('Population Density')
plt.xticks(rotation='90') # 文本旋转90°
colors = rainbow(np.linspace(0, 1, dataset.shape[1]))
plt.bar(dataset.columns[1:], diff, color=cololrs)

在这里插入图片描述
diff = maximum - minimum
minOfMax = maximum.min() # 确保把所有的数值分别与最小值的年份进行比较
plt.title(‘Range of Population Density for years 1961-2015’)
plt.xlabel(‘Years’)
plt.ylabel(‘Population Density’)
plt.xticks(rotation=‘90’) # 文本旋转90°
colors = rainbow(np.linspace(0, 1, dataset.shape[1]))
plt.bar(dataset.columns[1:], diff.apply(lambda x: x-minOfMax), color=cololrs)
在这里插入图片描述

2000年-2001年人口密度最稠密国家/地区和人口密度最稀少的国家/地区之间的差距骤降。

3.2 人口数量和人口密度

发布了50 篇原创文章 · 获赞 51 · 访问量 2495

猜你喜欢

转载自blog.csdn.net/hezuijiudexiaobai/article/details/104436221
今日推荐