数据可视化–Matplotlib

在解决机器学习问题时,常常用Matplotlib可视化分析数据结果,它是是用于可视化的最受欢迎的Python库通常仅仅依靠数据很难得出结论性的东西,通过可视化就数据以图表形式呈现,能够直观的进行数据对比,容易得出结论,方便与分析问题.折线图|ax.plot(x,y)它有助于根据给定范围的定义参数表示一系列数据点。 真正的好处是在单个图中绘制多个折线图,以比较和跟踪变化。

应用介绍

解决机器学习问题时,常常用Matplotlib可视化分析数据结果,它是是用于可视化的最受欢迎的Python通常仅仅依靠数据很难得出结论性的东西,通过可视化就数据以图表形式呈现,能够直观的进行数据对比,容易得出结论,方便与分析问题.

折线图|ax.plot(x,y)

它有助于根据给定范围的定义参数表示一系列数据点。 真正的好处是在单个图中绘制多个折线图,以比较和跟踪变化。

import numpy as np
import matplotlib.pyplot as plt
 
x = np.arange(0, 1, 0.05)
y1 = x**2
y2 = x**3
 
plt.plot(x, y1,
    linewidth=0.5,
    linestyle='--',
    color='b',
    marker='o',
    markersize=10,
    markerfacecolor='red')
 
plt.plot(x, y2,
    linewidth=0.5,
    linestyle='dotted',
    color='g',
    marker='^',
    markersize=10,
    markerfacecolor='yellow')
 
plt.title('x Vs f(x)')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend(['f(x)=x^2', 'f(x)=x^3'])
plt.xticks(np.arange(0, 1.1,0.2),
    ['0','0.2','0.4','0.6','0.8','1.0'])
 
plt.grid(True)
plt.show()

图片1.png

真实的例子

我们将使用通过整理从此处下载的几只股票的历史数据而创建的数据集。

import pandas as pd
import matplotlib.pyplot as plt
 
stocksdf1 = pd.read_csv('data-files/stock-INTU.csv') 
stocksdf2 = pd.read_csv('data-files/stock-AAPL.csv') 
stocksdf3 = pd.read_csv('data-files/stock-ADBE.csv') 
 
stocksdf = pd.DataFrame()
stocksdf['date'] = pd.to_datetime(stocksdf1['Date'])
stocksdf['INTU'] = stocksdf1['Open']
stocksdf['AAPL'] = stocksdf2['Open']
stocksdf['ADBE'] = stocksdf3['Open']
 
plt.plot(stocksdf['date'], stocksdf['INTU'])
plt.plot(stocksdf['date'], stocksdf['AAPL'])
plt.plot(stocksdf['date'], stocksdf['ADBE'])
 
plt.legend(labels=['INTU','AAPL','ADBE'])
plt.grid(True)
 
plt.show()

图片1.png

通过以上内容,我们可以进行一些快速评估:

问:去年某只股票表现如何?

答:到20202月,股票大致在上涨,然后在4月下跌,此后又回升。

 

问:三只股票在同一时期表现如何?

答:同一时期,ADBE的股价更敏感,而AAPL的股价最不敏感。

直方图| ax.hist(data, n_bins)

它有助于显示变量的分布,在其中绘制定量数据并按范围将数据范围分组。

引用:

如果数据范围跨越几个数量级,我们可以使用对数刻度。

import numpy as np
import matplotlib.pyplot as plt
 
mean = [0, 0]
cov = [[2,4], [5, 9]]
xn, yn = np.random.multivariate_normal(
                                mean, cov, 100).T
 
plt.hist(xn,bins=25,label="Distribution on x-axis"); 
 
plt.xlabel('x')
plt.ylabel('frequency')
plt.grid(True)
plt.legend()

图片1.png

真实的例子

我们将处理从此处下载的印度人口普查数据的数据集。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
populationdf = pd.read_csv(
    "./data-files/census-population.csv")
 
mask1 = populationdf['Level']=='STATE'
mask2 = populationdf['TRU']=='Total'
df = populationdf[mask1 & mask2]
 
plt.hist(df['TOT_P'], label='Distribution')
 
plt.xlabel('Total Population')
plt.ylabel('State Count')
plt.yticks(np.arange(0,20,2))
 
plt.grid(True)
plt.legend()

图片1.png

通过以上内容,可以对印度各州的人口进行一些快速评估:

问:印度各州的总体人口分布是什么?

答:超过50%的州人口不到2亿(2000万)

 

问:有多少州的人口超过1亿(1亿)?

答:只有3个州的人口众多。

条形图| ax.bar(x_pos, heights)

通过显示与分类数据关联的值,它有助于比较两个或多个变量。

 

引用:

媒体中最常用的绘图,在围绕显示每个数据样本的调查共享数据

import numpy as np
import matplotlib.pyplot as plt
 
data = [[60, 45, 65, 35],
        [35, 25, 55, 40]]
 
x_pos = np.arange(4)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.set_xticks(x_pos)
 
ax.bar(x_pos - 0.1, data[0], color='b', width=0.2)
ax.bar(x_pos + 0.1, data[1], color='g', width=0.2)
 
ax.yaxis.grid(True)


image.png

真实的例子

我们将处理从此处下载的印度人口普查数据的数据集。

import pandas as pd
import matplotlib.pyplot as plt
 
populationdf = pd.read_csv(
    "./data-files/census-population.csv")
 
mask1 = populationdf['Level']=='STATE'
mask2 = populationdf['TRU']=='Total'
statesdf = populationdf.loc[mask1].loc[mask2]
statesdf = statesdf.sort_values('TOT_P')
 
plt.figure(figsize=(10,8))
plt.barh(range(len(statesdf)), 
    statesdf['TOT_P'], tick_label=statesdf['Name'])
plt.grid(True)
plt.title('Total Population')
plt.show()

image.png

通过以上内容,可以对印度各州的人口进行一些快速评估:

北方邦的总人口最多,而拉克沙迪普的总人口最少

北方邦各州的相对人口密度几乎是第二高人口州的两倍

饼形图| ax.pie(sizes, labels=[labels])

它有助于显示类别在特定时间点的百分比(或比例)分布。 通常,如果仅限一位数类别,则效果很好。

引用:

圆形统计图形,其中每个切片的弧长与其表示的量成比例。

import numpy as np
import matplotlib.pyplot as plt
 
# Slices will be ordered n plotted counter-clockwise
labels = ['Audi','BMW','LandRover','Tesla','Ferrari']
sizes = [90, 70, 35, 20, 25]
 
fig, ax = plt.subplots()
ax.pie(sizes,labels=labels, autopct='%1.1f%%')
ax.set_title('Car Sales')
plt.show()


图片1.png

真实的例子

我们将处理从此处下载的酒精消耗数据集。

import panda as pd
import matplotlib.pyplot as plt
 
drinksdf = pd.read_csv('data-files/drinks.csv', 
    skiprows=1, 
    names = ['country', 'beer', 'spirit', 
             'wine', 'alcohol', 'continent']) 
 
labels = ['Beer', 'Spirit', 'Wine']
sizes = [drinksdf['beer'].sum(), 
         drinksdf['spirit'].sum(), 
         drinksdf['wine'].sum()]
 
fig, ax = plt.subplots()
explode = [0.05,0.05,0.2]
ax.pie(sizes,explode=explode,
    labels=labels, autopct='%1.1f%%')
 
ax.set_title('Alcohol Consumption')
plt.show()

image.png

通过以上内容,我们可以快速评估酒精的消费量是否总体分布。 如果我们数量较少,此视图会有所帮助。

3-D绘图

如果需要,我们也可以使用交互式3-D图,尽管对于大型数据集而言可能会很慢。

import numpy as np
import matplotlib.pyplot as plt
 
def randrange(n, vmin, vmax):
     return (vmax-vmin)*np.random.rand(n) + vmin
 
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111, projection='3d')
n = 200
for c, m, zl in [('g', 'o', +1), ('r', '^', -1)]:
    xs = randrange(n, 0, 50)
    ys = randrange(n, 0, 100)
    zs = xs+zl*ys  
    ax.scatter(xs, ys, zs, c=c, marker=m)
 
ax.set_xlabel('X data')
ax.set_ylabel('Y data')
ax.set_zlabel('Z data')
plt.show()

图片1.png

文件列表(部分)

名称 大小 修改日期
data-visualization0.00 KB2020-10-18
data-files0.00 KB2020-10-48
accident-data.csv2.50 KB2020-10-48
BabyGroot.jpg29.42 KB2020-10-48
census-population.csv352.97 KB2020-10-48
drinks.csv5.78 KB2020-10-48
mall-customers.csv3.69 KB2020-10-48
prog-languages.csv0.47 KB2020-10-48
stock-AAPL.csv17.76 KB2020-10-48
stock-ADBE.csv18.40 KB2020-10-48
stock-INTU.csv18.33 KB2020-10-48
tips.csv9.50 KB2020-10-48
matplotlib-additionalusage.ipynb475.64 KB2020-10-48
matplotlib-basic.ipynb2,690.08 KB2020-10-48
matplotlib-examples.ipynb972.10 KB2020-10-48
matplotlib-presentation.ipynb332.47 KB2020-10-48
probability-distribution.ipynb233.12 KB2020-10-48

立即下载

相关下载

[数据可视化–Matplotlib] 在解决机器学习问题时,常常用Matplotlib可视化分析数据结果,它是是用于可视化的最受欢迎的Python库通常仅仅依靠数据很难得出结论性的东西,通过可视化就数据以图表形式呈现,能够直观的进行数据对比,容易得出结论,方便与分析问题.折线图|ax.plot(x,y)它有助于根据给定范围的定义参数表示一系列数据点。 真正的好处是在单个图中绘制多个折线图,以比较和跟踪变化。

评论列表 共有 0 条评论

暂无评论

微信捐赠

微信扫一扫体验

立即
上传
发表
评论
返回
顶部