基于教材的多元数据可视化¶
这里列举的是教材第三章中的示例内容,是基于Pandas的直接可视化操作,并未涉及到专门的可视化工具包。这里的示例是在Pandas包之上就可以实现,但其中部分设置隐含了Matplotlib的内容。
3.1 多元数据可视化准备¶
3.1.1 多元数据的收集方式¶
3.1.2 多元数据的读取方法¶
In [5]:
Copied!
import pandas as pd
pd.set_option('display.max_rows',8) #显示最大行数
print(pd.read_excel('mvsData.xlsx','d31')) #读Excel数据表
#pd.read_excel('mvsData.xlsx')
import pandas as pd
pd.set_option('display.max_rows',8) #显示最大行数
print(pd.read_excel('mvsData.xlsx','d31')) #读Excel数据表
#pd.read_excel('mvsData.xlsx')
地区 食品 衣着 设备 医疗 交通 教育 居住 杂项 0 北京 8488.5 2229.5 2387.3 3739.7 4979.0 4310.9 15751.4 1151.9 1 天津 8983.7 1999.5 1956.7 2991.9 4236.4 3584.4 6946.1 1154.9 2 河北 4675.7 1304.8 1170.4 1699.0 2415.7 1984.1 4301.6 435.8 3 山西 3997.2 1289.9 910.7 1820.7 1979.7 2136.2 3331.6 396.5 .. .. ... ... ... ... ... ... ... ... 27 甘肃 4574.0 1125.3 945.3 1619.3 1972.7 1843.5 3440.4 358.6 28 青海 5130.9 1359.8 953.2 1995.6 2587.6 1731.8 3304.0 481.8 29 宁夏 4605.2 1476.6 1144.5 1929.3 3018.1 2352.4 3245.1 525.5 30 新疆 5042.7 1472.1 1159.5 1725.4 2408.1 1876.1 3270.9 441.7 [31 rows x 9 columns]
如果将代码直接拷贝,会因为数据没有本地存储,出现异常。因此,当你试图在本地实现代码内容,可以使用下面代码:
In [ ]:
Copied!
path = 'https://www.getwage.xyz/courses/multi_variance/visual/mvsData.xlsx'
pd.read_excel(path,'d31') #从网络读取Excel数据表
path = 'https://www.getwage.xyz/courses/multi_variance/visual/mvsData.xlsx'
pd.read_excel(path,'d31') #从网络读取Excel数据表
In [ ]:
Copied!
d31=pd.read_excel('mvsData.xlsx','d31',index_col=0) #将第一列设置为索引标记
print(d31) #将第一列设置为行标记
d31=pd.read_excel('mvsData.xlsx','d31',index_col=0) #将第一列设置为索引标记
print(d31) #将第一列设置为行标记
食品 衣着 设备 医疗 交通 教育 居住 杂项 地区 北京 8488.5 2229.5 2387.3 3739.7 4979.0 4310.9 15751.4 1151.9 天津 8983.7 1999.5 1956.7 2991.9 4236.4 3584.4 6946.1 1154.9 河北 4675.7 1304.8 1170.4 1699.0 2415.7 1984.1 4301.6 435.8 山西 3997.2 1289.9 910.7 1820.7 1979.7 2136.2 3331.6 396.5 .. ... ... ... ... ... ... ... ... 甘肃 4574.0 1125.3 945.3 1619.3 1972.7 1843.5 3440.4 358.6 青海 5130.9 1359.8 953.2 1995.6 2587.6 1731.8 3304.0 481.8 宁夏 4605.2 1476.6 1144.5 1929.3 3018.1 2352.4 3245.1 525.5 新疆 5042.7 1472.1 1159.5 1725.4 2408.1 1876.1 3270.9 441.7 [31 rows x 8 columns]
In [9]:
Copied!
#dat=pd.read_clipboard(index_col=0);dat #读取粘贴板数据
#dat=pd.read_clipboard(index_col=0);dat #读取粘贴板数据
3.1.3 多元统计量与绘图函数¶
- 多元数据基本统计量
In [13]:
Copied!
d31.mean() #均值向量
d31.mean() #均值向量
Out[13]:
食品 6021.254839 衣着 1379.064516 设备 1255.632258 医疗 1932.835484 交通 2867.716129 教育 2492.990323 居住 5059.958065 杂项 551.874194 dtype: float64
In [15]:
Copied!
pd.set_option('display.precision',4) #设置pandas输出精度
pd.set_option('display.width', 160) #设置pandas输出宽度
print(d31.cov()) #协方差矩阵
pd.set_option('display.precision',4) #设置pandas输出精度
pd.set_option('display.width', 160) #设置pandas输出宽度
print(d31.cov()) #协方差矩阵
食品 衣着 设备 医疗 交通 教育 居住 杂项 食品 3.1859e+06 349943.7493 5.4983e+05 5.8170e+05 1.3828e+06 1.2776e+06 4.5541e+06 381181.6715 衣着 3.4994e+05 129237.3604 1.0527e+05 1.6506e+05 2.3643e+05 2.0552e+05 7.5072e+05 77244.9784 设备 5.4983e+05 105269.4482 1.4240e+05 1.7800e+05 3.0353e+05 2.8308e+05 1.0552e+06 85398.4345 医疗 5.8170e+05 165058.6870 1.7800e+05 3.7119e+05 3.9708e+05 4.3441e+05 1.3833e+06 128981.0263 交通 1.3828e+06 236432.7339 3.0353e+05 3.9708e+05 7.8831e+05 6.9771e+05 2.4886e+06 210725.2624 教育 1.2776e+06 205515.3553 2.8308e+05 4.3441e+05 6.9771e+05 7.6951e+05 2.4373e+06 200446.6811 居住 4.5541e+06 750724.0011 1.0552e+06 1.3833e+06 2.4886e+06 2.4373e+06 9.7783e+06 700751.2685 杂项 3.8118e+05 77244.9784 8.5398e+04 1.2898e+05 2.1073e+05 2.0045e+05 7.0075e+05 66632.3326
In [17]:
Copied!
d31.corr() #相关系数矩阵
d31.corr() #相关系数矩阵
Out[17]:
| 食品 | 衣着 | 设备 | 医疗 | 交通 | 教育 | 居住 | 杂项 | |
|---|---|---|---|---|---|---|---|---|
| 食品 | 1.0000 | 0.5454 | 0.8163 | 0.5349 | 0.8726 | 0.8159 | 0.8159 | 0.8273 |
| 衣着 | 0.5454 | 1.0000 | 0.7760 | 0.7536 | 0.7407 | 0.6517 | 0.6678 | 0.8324 |
| 设备 | 0.8163 | 0.7760 | 1.0000 | 0.7742 | 0.9059 | 0.8552 | 0.8942 | 0.8767 |
| 医疗 | 0.5349 | 0.7536 | 0.7742 | 1.0000 | 0.7341 | 0.8128 | 0.7261 | 0.8201 |
| 交通 | 0.8726 | 0.7407 | 0.9059 | 0.7341 | 1.0000 | 0.8958 | 0.8964 | 0.9194 |
| 教育 | 0.8159 | 0.6517 | 0.8552 | 0.8128 | 0.8958 | 1.0000 | 0.8885 | 0.8852 |
| 居住 | 0.8159 | 0.6678 | 0.8942 | 0.7261 | 0.8964 | 0.8885 | 1.0000 | 0.8681 |
| 杂项 | 0.8273 | 0.8324 | 0.8767 | 0.8201 | 0.9194 | 0.8852 | 0.8681 | 1.0000 |
3.2 条图或柱图¶
3.2.1 原始数据的条图¶
In [21]:
Copied!
import matplotlib.pyplot as plt #加载基本绘图包
plt.rcParams['font.sans-serif']=['SimHei']; #设置中文字体为黑体
import matplotlib.pyplot as plt #加载基本绘图包
plt.rcParams['font.sans-serif']=['SimHei']; #设置中文字体为黑体
In [27]:
Copied!
d31.plot()
d31.plot()
Out[27]:
<Axes: xlabel='地区'>
In [29]:
Copied!
d31['食品'].plot(kind='bar',figsize=(10,5));
d31['食品'].plot(kind='bar',figsize=(10,5));
In [31]:
Copied!
d31.plot(kind='bar',figsize=(10,5));
d31.plot(kind='bar',figsize=(10,5));
In [33]:
Copied!
d31.plot(kind='bar',subplots=True,figsize=(10,15));
d31.plot(kind='bar',subplots=True,figsize=(10,15));
In [34]:
Copied!
d31.plot(kind='barh',subplots=True,layout=(3,3),figsize=(12,18),xlabel='',legend=False);
d31.plot(kind='barh',subplots=True,layout=(3,3),figsize=(12,18),xlabel='',legend=False);
In [36]:
Copied!
d31.loc[['北京']].plot(kind='bar',xlabel='');
d31.loc[['北京']].plot(kind='bar',xlabel='');
In [38]:
Copied!
d31.loc[['北京','上海','广东']].plot(kind='bar');
d31.loc[['北京','上海','广东']].plot(kind='bar');
3.2.2 统计量的条图¶
In [42]:
Copied!
print(d31.mean())
d31.mean().plot(kind='barh');
print(d31.mean())
d31.mean().plot(kind='barh');
食品 6021.2548 衣着 1379.0645 设备 1255.6323 医疗 1932.8355 交通 2867.7161 教育 2492.9903 居住 5059.9581 杂项 551.8742 dtype: float64
In [44]:
Copied!
print(d31.median().T)
d31.median().plot(kind='barh');
print(d31.median().T)
d31.median().plot(kind='barh');
食品 5416.8 衣着 1359.8 设备 1159.5 医疗 1925.4 交通 2576.4 教育 2352.4 居住 3943.7 杂项 453.7 dtype: float64
3.3 描述统计及箱尾图¶
3.3.1 描述性统计量¶
In [48]:
Copied!
print(d31.describe().round(1)) #描述统计量
print(d31.describe().round(1)) #描述统计量
食品 衣着 设备 医疗 交通 教育 居住 杂项 count 31.0 31.0 31.0 31.0 31.0 31.0 31.0 31.0 mean 6021.3 1379.1 1255.6 1932.8 2867.7 2493.0 5060.0 551.9 std 1784.9 359.5 377.4 609.3 887.9 877.2 3127.0 258.1 min 3997.2 648.0 847.7 519.2 1972.7 690.3 2320.6 294.2 25% 4675.5 1219.8 946.8 1617.6 2351.0 1995.6 3361.0 397.0 50% 5416.8 1359.8 1159.5 1925.4 2576.4 2352.4 3943.7 453.7 75% 6756.8 1484.2 1405.5 2144.6 3018.8 2719.2 4593.0 608.2 max 10952.6 2229.5 2387.3 3739.7 5355.7 5495.1 15751.4 1355.9
3.3.2 箱尾图的绘制¶
In [51]:
Copied!
d31.plot(kind='box'); #描述统计图
d31.plot(kind='box'); #描述统计图
In [53]:
Copied!
d31.plot.box(vert=False); #箱尾图中图形按水平放置
d31.plot.box(vert=False); #箱尾图中图形按水平放置
3.4 变量间的关系图¶
3.4.1 两变量散点图¶
In [57]:
Copied!
d31.plot(x='食品',y='衣着',kind='scatter');
d31.plot(x='食品',y='衣着',kind='scatter');
3.4.2 多变量矩阵散点图¶
In [60]:
Copied!
pd.plotting.scatter_matrix(d31,figsize=(9,8));
pd.plotting.scatter_matrix(d31,figsize=(9,8));
3.5 其他多元分析图¶
案例3 城市现代化水平的直观分析¶
In [ ]:
Copied!
#path = 'https://www.getwage.xyz/courses/multi_variance/visual/mvsCase.xlsx'
#Case3= pd.read_excel('mvsCase.xlsx','Case3',index_col=0)
Case3= pd.read_excel('mvsCase.xlsx','Case3',index_col=0)
Case3
#path = 'https://www.getwage.xyz/courses/multi_variance/visual/mvsCase.xlsx'
#Case3= pd.read_excel('mvsCase.xlsx','Case3',index_col=0)
Case3= pd.read_excel('mvsCase.xlsx','Case3',index_col=0)
Case3
Out[ ]:
| X1 | X2 | X3 | X4 | X5 | X6 | X7 | X8 | X9 | |
|---|---|---|---|---|---|---|---|---|---|
| 地区 | |||||||||
| 广州 | 57491 | 59.5390 | 91.51 | 76828.83 | 714.911 | 8.7661 | 13.1707 | 187.3963 | 388.1707 |
| 深圳 | 60801 | 46.6122 | 100.00 | 177506.73 | 4347.830 | 8.7913 | 102.8308 | 274.0615 | 638.6522 |
| 珠海 | 45284 | 43.5373 | 87.90 | 53668.53 | 993.304 | 18.5633 | 13.1585 | 42.4107 | 196.5402 |
| 汕头 | 13284 | 42.2196 | 72.34 | 15068.48 | 319.595 | 4.7689 | 0.9379 | 50.4039 | 103.1505 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 清远 | 15662 | 45.0777 | 38.50 | 19245.04 | 462.895 | 1.5165 | 3.0860 | 61.5356 | 168.9934 |
| 潮州 | 18670 | 48.4535 | 53.60 | 34263.68 | 523.865 | 0.8095 | 2.9104 | 81.4901 | 248.8359 |
| 揭阳 | 13989 | 42.5260 | 41.20 | 15754.39 | 471.401 | 0.4628 | 0.8407 | 42.0357 | 132.2624 |
| 云浮 | 17330 | 32.9093 | 37.30 | 16761.50 | 112.399 | 0.2479 | 3.0910 | 31.2610 | 198.1033 |
21 rows × 9 columns
In [66]:
Copied!
Case3.X1.plot(kind='bar',figsize=(9,5));
Case3.X1.plot(kind='bar',figsize=(9,5));
In [68]:
Copied!
Case3.plot(kind='bar',subplots=True,layout=(3,3),figsize=(12,10));
Case3.plot(kind='bar',subplots=True,layout=(3,3),figsize=(12,10));
In [69]:
Copied!
Case3.plot(kind='barh',stacked=True,figsize=(8,6));
Case3.plot(kind='barh',stacked=True,figsize=(8,6));
In [72]:
Copied!
Case3.loc[['广州','深圳','珠海']][['X1','X4']]\
.plot(kind='bar',figsize=(8,6));
Case3.loc[['广州','深圳','珠海']][['X1','X4']]\
.plot(kind='bar',figsize=(8,6));