大数据可视化技术

实验七:关系数据可视化

一、实验名称 

关系数据可视化

二、实验目的

通过该实验的实践,要求学生可以理解数据的关联性和分布性,掌握Matplotlib和pyecharts的使用过程,能够熟练绘制常见的适合展示关系数据的图表。

三、实验原理

关系数据主要包括数据关联性和数据分布性

多元变量之间的关系,可以使用散点图,散点矩阵图,或者平行坐标图呈现

数据的分布,可以使用直方图、箱线图呈现

四、实验步骤

1 打开终端Terminal,准备执行安装命令行

2 环境准备,安装所需的库

2.1 安装pyecharts、seaborn库

2.2 打开jupyter notebook,新建ipynb文件

3 散点图

输入以下代码:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#读取数据
crime=pd.read_csv("/home/ubuntu/crimeRatesByState2005.csv")
#去除掉state为United States的数据
crime2 = crime[crime.state != "United States"]
#去除掉state为District of Columbia的数据
crime2 = crime2[crime2.state != "District of Columbia"]
#删除state列
crime2=crime2.drop(['state'],axis=1)
#删除population列
crime2=crime2.drop(['population'],axis=1)
#绘制成对关系图
g = sns.pairplot(crime2, diag_kind="kde",kind="reg")
plt.show()#显示图表

输出结果:

大数据可视化js_数据

4 气泡图

输入以下代码:

import matplotlib.pyplot as plt
import pandas  as pd
import  numpy as np
#读取数据
crime=pd.read_csv("/home/ubuntu/crimeRatesByState2005.csv")
print (list(crime.murder))#转化成列表
#删除state为United States的数据
crime2 = crime[crime.state != "United States"]
#删除state为District of Columbia的数据
crime2 = crime2[crime2.state != "District of Columbia"]
z = list(crime2.population/10000)#取人口数据
colors = np.random.rand(len(list(crime2.murder)))#根据谋杀率随机去颜色
cm = plt.cm.get_cmap('RdYlBu')#使用色谱RdYlBu
plt.scatter(list(crime2.murder), list(crime2.burglary), s=z,c=z,cmap = cm, linewidth = 0.5, alpha     = 0.5)#绘制散点图
plt.xlabel("murder")
plt.ylabel("burglary")
plt.show()

输出结果:

大数据可视化js_数据可视化_02

5 气泡图2

输入以下代码:

"""
功能:气泡图
"""
import matplotlib.pyplot as plt
import pandas  as pd
import  numpy as np

# plt.rcParams['font.sans-serif'] = ['WenQuanYi Mico Hei'] # 解决中文不能正常显示的问题
crime=pd.read_csv("/home/ubuntu/crimeRatesByState2005.csv")

print (list(crime.murder)) # murder是列名
crime2 = crime[crime.state != "United States"] # 排除state为United States的这一行
crime2 = crime2[crime2.state != "District of Columbia"] # 排除state为District of Columbia这一行

z = list(crime2.population/10000)#取人口数作为气泡的大小的参考
colors = np.random.rand(len(list(crime2.murder)))#根据谋杀率取颜色
cm = plt.cm.get_cmap('RdYlBu')#使用色谱RdYlBu

fig,ax=plt.subplots(figsize=(10,5))#创建画布
ax.scatter(list(crime2.murder), list(crime2.burglary), s=z,c=z,cmap=cm, linewidth=0.5, alpha=0.5)#绘制气泡图
#ax.xlabel("murder")
#ax.ylabel("burglary")


# 图形不支持中文显示
ax.set(xlim=(0,11),ylim=(200,1300),\
       xlabel="Murder (per 10W population)",\
       ylabel="Burglary (per 10W population)",\
       title="Murder and burglary rates in the United States")#设置标签、标题的格式
"""
ax.set(xlim=(0,11),ylim=(200,1300),\
       xlabel="murder",\
       ylabel="burglary")
"""
# 特殊处理state,只显示部分地方
state_show = []
#遍历各州的数据
for sta in list(crime2.state):
    print(sta)
    if(sta == 'California'or
    sta == 'Florida' or
    sta == 'Texas' or
    sta == 'New York' or
    sta == 'Pennsylvania' or
    sta == 'Louisiana' or
    sta == 'Maryland'):
        state_show.append(sta)
    else:
        state_show.append('')

print(state_show)
# 显示所有气泡的state名称
#for i,j,k in zip(crime2.murder,crime2.burglary,crime2.state):
for i, j, k in zip(crime2.murder, crime2.burglary, state_show):
    plt.text(x=i-0.3,y=j-0.1,s=k,fontsize=7)
ax.spines["top"].set_visible(False)#不显示上边框
ax.spines["left"].set_visible(False)#不显示下边框
ax.spines["right"].set_visible(False)#不显示右边框

plt.show()#显示图表

输出结果:

大数据可视化js_ico_03

6 茎叶图

输入以下代码:

import  numpy as np
import math
from itertools import groupby
import pandas  as pd
#读取数据
birth=pd.read_csv("/home/ubuntu/birth-rate.csv")
#去除掉空值
birth.dropna(subset=[ '2008'], inplace= True)
dirt={}
data = list(round(birth ['2008'],1))#转换数据
rangenum = []
#先把数据排序,再根据值进行分布,进行取余取商运算
for k,g in groupby(sorted(data),key = lambda x: int(x)):
    lst = map(str,list(map(lambda y: divmod(int(y*10),10)[1],list(g))))
    dirt[k] = ' '.join(lst)
    rangenum.append(k)
num = list(range(rangenum[0],rangenum[-1],2))
for i in num:
    a =''
    for k in sorted(dirt.keys()):
        if 0<=k-i <=1:
            a = a +' ' + dirt[k]
        elif k-i > 1:
            break
    print(str(i).rjust(5), '|', a)

输出结果:

大数据可视化js_大数据可视化js_04

7 直方图

输入以下代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 解决中文不能正常显示的问题
# plt.rcParams[ 'font.sans-serif'] = [ 'WenQuanYi Mico Hei']
# plt.rcParams[ 'axes.unicode_minus'] = False
#plt.rcParams['font.sans-serif'] = ['SimHei'] 
#读取数据
titanic = pd.read_csv( '/home/ubuntu/birth-rate.csv')
#去除空值
titanic.dropna(subset=[ '2008'], inplace= True)
plt.style.use( 'ggplot')
#绘制直方图
plt.hist(titanic['2008'], bins = 10, color = 'steelblue', edgecolor = 'k', label = "histogram")
plt.tick_params(top= 'off', right= 'off')#右侧,顶侧不显示刻度
plt.legend()#显示图例
plt.show()#显示图表

输出结果:

大数据可视化js_大数据可视化js_05

8 密度图

输入以下代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
#解决中文乱码
# plt.rcParams[ 'font.sans-serif'] = [ 'WenQuanYi Mico Hei']
# plt.rcParams[ 'axes.unicode_minus'] = False
#读取数据
titanic = pd.read_csv( '/home/ubuntu/birth-rate.csv')
#去除空值
titanic.dropna(subset=[ '2008'], inplace= True)
#使用kde密度图
kde = mlab.GaussianKDE(titanic['2008'])
#取最大值和最小值之间1000个均匀分割的数
x2 = np.linspace(titanic['2008'].min(), titanic['2008'].max(), 1000)
line2 = plt.plot(x2,kde(x2), 'g-', linewidth = 2)#绘制折线图
plt.show()#显示图表

输出结果:

大数据可视化js_大数据可视化js_06

9 密度直方图

输入以下代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
# 解决中文不能正常显示的问题
# plt.rcParams[ 'font.sans-serif'] = [ 'WenQuanYi Mico Hei']
# plt.rcParams[ 'axes.unicode_minus'] = False
#plt.rcParams['font.sans-serif'] = ['SimHei'] 
#读取数据
titanic = pd.read_csv( '/home/ubuntu/birth-rate.csv')
#去除空值
titanic.dropna(subset=[ '2008'], inplace= True)
plt.style.use( 'ggplot')
#绘制直方图
plt.hist(titanic['2008'], bins =np.arange(titanic['2008'].min(),
titanic['2008'].max(), 3),density = True, color = 'steelblue', edgecolor = 'k')
plt.title( ' 2008 Birth Histogram and Density Chart')#设置标题
plt.xlabel( 'birthrate')
plt.ylabel( 'frequency')
kde = mlab.GaussianKDE(titanic['2008'])
#从最小值到最大值之前1000个均匀分布的数
x2 = np.linspace(titanic['2008'].min(), titanic['2008'].max(), 1000)
line2 = plt.plot(x2,kde(x2), 'g-', linewidth = 2)#绘制折线图
plt.tick_params(top= 'off', right= 'off')
plt.show()#显示图表

输出结果:

大数据可视化js_大数据_07

五、实验总结

在实验中,通过实践练习,提高学生使用Matplotlib和pyecharts进行关系数据可视化的熟练程度,总结适合展示关系数据的图表,能够解释数据的相关性和分布性。