欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据可视化

程序员文章站 2024-02-12 17:59:10
...

离散变量的可视化

# 1、饼图
# 使用matplotlib模块
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 显示正负号
plt.style.use('ggplot')
%matplotlib inline

edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他']

# 绘制饼图
plt.pie(x=edu,labels=labels,autopct='%.1f%%')
plt.legend()
plt.title('饼图')

# 美化饼图
explode = [0,0.1,0,0,0] # 指定突出部分
plt.axes(aspect='equal') # 使显示的是圆而不是椭圆
plt.pie(x=edu, labels=labels, autopct='%.2f%%', explode=explode, wedgeprops={'edgecolor':'black'})
plt.legend(loc='upper right',bbox_to_anchor=(1.2,1.2))  # 既可以显示图列,也可以控制图列的位置
plt.title('饼图')


# 用pandas绘制饼图
import pandas as pd

data = pd.Series({'中专':0.2515,'大专':0.3724,'本科':0.3336,'硕士':0.0368,'其他':0.0057})
# 将序列名称设置为空字符
data.name=''
# 控制饼图为正圆
plt.axes(aspect='equal')
# 用pandas自带的plot绘制饼图
data.plot(kind='pie',autopct='%.2f%%',title='pandas饼图',wedgeprops={'edgecolor':'black'})
plt.legend(loc='upper right',bbox_to_anchor=(1.2,1.2))

# 2、条形图
# 使用matplotlib模块
data = pd.read_excel('./Province GDP 2017.xlsx')

plt.bar(left=range(data.shape[0]),height=data.GDP,tick_label=data.Province,color='steelblue')
# plt.legend()
plt.ylabel('GDP/万亿')
plt.xlabel('地区')
plt.title('条形图')

# 用pandas模块
data.GDP.plot(kind='bar',color='steelblue',title='pandas绘制条形图')
plt.ylabel('GDP')
plt.xlabel('地区')
# 添加x轴刻度
plt.xticks(range(len(data.Province)),data.Province)
plt.title('pandas条形图')

# 用seaborn模块绘制条形图
import seaborn as sns 

sns.barplot(x=data.Province,y=data.GDP,data=data,color='steelblue')
plt.xlabel('省份')
plt.title('seaborn模块绘制条形图')

连续型数据可视化

# 3、直方图
# 使用matplotlib模块
data = pd.read_csv('./titanic_train.csv')

data.Age.isnull().sum()/data.shape[0]

data.dropna(subset=['Age'],inplace=True)

# 绘制直方图
plt.hist(x=data.Age,bins=30,color='steelblue',edgecolor='black')
plt.xlabel('年龄')
plt.ylabel('频数')
plt.title('乘客年龄分布')

# 使用pandas模块
data.Age.plot(kind='hist',bins=20,color='steelblue',edgecolor='black',normed=True,label='直方图')
data.Age.plot(kind='kde',color='red',label='核密度图')
plt.xlabel('年龄')
plt.ylabel('和密度值')
plt.title('乘客年龄分布图')
plt.legend()

# 通过seaborn绘制直方图
data_man = data.Age[data.Sex=='male']
data_woman = data.Age[data.Sex=='female']

sns.distplot(data_man,bins=20,kde=False,label='man')
sns.distplot(data_woman,bins=20,kde=False,hist_kws={'color':'steelblue'},label='woman')
plt.legend()
plt.title('男女乘客的直方图')

# 男女核密度图
sns.distplot(data_man,hist=False,label='man')
sns.distplot(data_woman,hist=False,kde_kws={'color':'black','linestyle':'--'},label='woman')
plt.legend()
plt.title('男女乘客核密度图')


# 箱型图
# matplotlib模块
data = pd.read_excel('./sec_buildings.xlsx')

plt.boxplot(x=data.price_unit)
plt.title('二手房单价分布箱型图')

# 二手房在各个区域的平均单价
group_region = data.groupby('region')
import numpy as np
avg_price = group_region.agg({'price_unit':np.mean}).sort_values('price_unit',ascending=False)

region_price = []
for region in avg_price.index:
    region_price.append(data.price_unit[data.region==region])
plt.boxplot(x=region_price)
plt.title('不同行政区二手房单价')


# 使用seaborn模块
sns.boxplot(x='region',y='price_unit',data=data,order=avg_price.index)

# 小提琴图
sns.violinplot(x='day',y='total_bill',hue='sex',data=data,split=True,palette='RdBu')
plt.title('小提琴图')

# 折线图
data = pd.read_excel('./wechat.xlsx')

plt.plot(data.Date,data.Counts,linestyle='-',linewidth=2,color='steelblue',marker='o',markersize=5)
plt.plot(data.Date,data.Times,linestyle='--')

# 使用pandas模块
data = pd.read_excel('./weather.xlsx')

# 统计每月最高气温
data = data.pivot_table(index='month',columns='year',values='high')
data.plot(kind='line',style = ['-','--',':'])
plt.xlabel('月份')
plt.ylabel('气温')
plt.title('每月平均最高气温波动折线图')

# 散点图
data = pd.read_csv('./iris.csv')
plt.scatter(x=data.Petal_Width,y=data.Petal_Length,color='steelblue',edgecolor='black')
plt.xlabel('花瓣宽度')
plt.ylabel('花瓣长度')
plt.title('关系散点图')

# 使用pandas模块
data.plot(x='Petal_Width',y='Petal_Length',kind='scatter',title='关系散点图',edgecolor='black')

# 使用seaborn模块
sns.lmplot(x='Petal_Width',y='Petal_Length',hue='Species',data=data,legend_out=False,truncate=True)
plt.title('散点关系图')