您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页Python数据可视化笔记

Python数据可视化笔记

来源:爱玩科技网
Python数据可视化笔记

Python数据可视化笔记Python读取csv⽂件

什么是 csv ⽂件

csv ⽂件格式的本质是⼀种以⽂本存储的表格数据(使⽤ Excel ⼯具即可读写 csv ⽂件)。csv ⽂件的每⾏代表⼀⾏数据,每⾏数据中每个单元格内的数据以逗号隔开。读取 csv ⽂件

python 提供了 csv 模块来读写 csv ⽂件。⽰例:天⽓数据读取

⾸先,我们打开csv⽂件并且打印⽂件头

#导⼊csv模块import csv

#指定⽂件名,然后使⽤ with open() as 打开filename = 'sitka_weather_07-2014.csv'with open(filename) as f:

#创建⼀个阅读器:将f传给csv.reader reader = csv.reader(f)

#使⽤csv的next函数,将reader传给next,将返回⽂件的下⼀⾏ header_row = next(reader)

for index, column_header in enumerate(header_row): print(index, column_header)

通过阅读⽂件头可以了解⽂件包含的信息类型。

知道了⽂件头提供的信息,可以开始读取数据。先来读取最⾼⽓温(1 Max TemperatureF)

import csv

filename = 'sitka_weather_07-2014.csv'with open(filename) as f: reader = csv.reader(f) header_row = next(reader)

for index, column_header in enumerate(header_row): print(index, column_header)

#读取最⾼⽓温

#创建最⾼⽓温的列表 highs =[]

#遍历reader的余下的所有⾏(next读取了第⼀⾏,reader每次读取后将返回下⼀⾏) for row in reader:

highs.append(row[1]) print(highs)

从执⾏结果可以看出,我们已经成功获取了最⾼⽓温,但是最⾼⽓温的结果为字符串形式。为了让matplotlib能够读取,我们要把它转换成数字。

#将字符串转换成数字 high = int(row[1]) highs.append(high)

到这⾥,csv的数据基本提取完成。接下来,可以借助matplotlib进⾏可视化。

#导⼊csv模块import csv

from matplotlib import pyplot as plt

#指定⽂件名,然后使⽤ with open() as 打开filename = 'sitka_weather_07-2014.csv'with open(filename) as f:

#创建⼀个阅读器:将f传给csv.reader reader = csv.reader(f)

#使⽤csv的next函数,将reader传给next,将返回⽂件的下⼀⾏ header_row = next(reader)

for index, column_header in enumerate(header_row): print(index, column_header)

#读取最⾼⽓温

#创建最⾼⽓温的列表 highs =[]

#遍历reader的余下的所有⾏(next读取了第⼀⾏,reader每次读取后将返回下⼀⾏) for row in reader:

highs.append(row[1]) print(highs)

#绘制图形

fig = plt.figure(dpi=128, figsize=(10,6))plt.plot(highs,c='red')#设置图形的格式

plt.title(\"Daily high temperature, July 2014\plt.xlabel('',fontsize=16)

plt.ylabel(\"Temperature(F)\

plt.tick_params(axis='both', which=\"major\

plt.show()

matplotlib上⼿⼊门

⼀、图的构成

坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、⽹格线(grid)、图例(legend)、标题(title)......01 title设置

import matplotlib.pyplot as plt

plt.title(\"title\")#括号当中输⼊标题的名称plt.show()

如果title是中⽂,matplotlib会乱码,这时需要加上下⾯这段代码:

plt.rcParams['font.sans-serif']=['SimHei']

02 Figure对象

在matplotlib中,整个图像为⼀个Figure对象。在Figure对象中可以包含⼀个或者多个Axes对象。每个Axes(ax)对象都是⼀个拥有⾃⼰坐标系统的绘图区域。

plt.figure(figsize=(6, 3))plt.plot(6, 3)plt.plot(3, 3 * 2)plt.show()

03 坐标轴及标签

plt.xlim(0,6) #x轴坐标轴plt.ylim((0, 3)) #y轴坐标轴plt.xlabel('X') #x轴标签plt.ylabel('Y') #y轴标签plt.show()

如果需要将数字设为负数,也可能出现乱码的情况,这时候可以加下⾯的代码:

plt.rcParams['axes.unicode_minus']=False

04 设置label和legend

设置label和legend的⽬的是区分出每个数据对应的图形名称,legend的loc参数⽤于设置图例位置。

plt.plot(2, 3, label=\"123\")#第⼀个labelplt.plot(2, 3* 2, label=\"456\")#第⼆个labelplt.legend(loc='best')#图列位置,可选best,center等plt.show()

05 添加注释

有时候我们需要对特定的点进⾏标注,我们可以使⽤ plt.annotate 函数来实现:s: 注释信息内容

xy:箭头点所在的坐标位置xytext:注释内容的坐标位置arrowprops:设置指向箭头的参数

x=np.linspace(0,10,200)#从0到10之间等距产⽣200个值y=np.sin(x)plt.plot(x,y,linestyle=':',color='b')plt.annotate(s='标记点',xy=(3,np.sin(3)),xytext(4,-0.5),weight='bold',color='b',\\arrowprops=dict(arrowstyle='-|>',color='k'))plt.show()

05 使⽤⼦图

如果需要多张⼦图展⽰在⼀起,可以使⽤ subplot() 实现。即在调⽤ plot()函数之前需要先调 subplot() 函数。

该函数的第⼀个参数代表⼦图的总⾏数,第⼆个参数代表⼦图的总列数,第三个参数代表活跃区域。

ax1 = plt.subplot(2, 2, 1)plt.plot(x,np.sin(x), 'k')ax2 = plt.subplot(2, 2, 2, sharey=ax1) # 与 ax1 共享y轴plt.plot(x, np.cos(x), 'g')ax3 = plt.subplot(2, 2, 3)plt.plot(x,x, 'r')ax4 = plt.subplot(2, 2, 4, sharey=ax3) # 与 ax3 共享y轴plt.plot(x, 2*x, 'y')

⼆、matplotlib 绘图

matplotlib 画图可以总结为3个步骤:

获取数据 ——> 画出基本图形 ——> 设置细节。

获取的数据⼀般包括横坐标和纵坐标的数据,这个数据可以是读取的,也可以⾃⼰⽣成。本⽂为了⽅便演⽰,使⽤numpy和pandas⽣成随机数。

matplotlib所提供的图形⾮常丰富,除了基本的柱状图、饼图、散点图等,还提供了极坐标图、3D图等⾼级图形,并且你可以⾃由选择和组合。每个图形函数下都有许多参数可设置,matplotlib提供的不仅仅是图形,还有更为精细的图像表达,你可以通过细节的设置来丰富你的可视化。01 bar-柱状图

⽣成⼀个单系列的柱状图⽐较简单,只要确定x轴及y轴的数据,利⽤bar()函数就能⽣成:

x = np.arange(10)y = np.random.randint(0,20,10)plt.bar(x, y)plt.show()

除了单系列柱状图,matplotlib还提供了其它类型的柱状图,如多系列柱状图,堆叠图,⽔平向的条纹图等。plt.plot()适⽤于基本图表的绘制,kind可选类型有线形图、柱状图、密度图、堆叠图、⾯积图等,以横纵坐标两个维度为主。grid是显⽰⽹格,colormap是颜⾊展⽰,括号中可填颜⾊参数,如不填则会展⽰默认颜⾊。

# 多系列柱状图df = pd.DataFrame(np.random.rand(10, 3), columns = ['a', 'b', 'c'])df.plot(kind = 'bar', grid = True, colormap = 'summer_r')

想要实现堆叠效果,⼀定要加上stacked=true,否则输出图形就是⼀般的柱状图。

# 多系列堆叠图df.plot(kind = 'bar', grid = True, colormap = 'Blues_r', stacked = True)

⽔平向的条形图调⽤的是barh():

# ⽔平向df.plot.barh( grid = True, colormap = 'BuGn_r')

与垂直柱状图⼀样,如果想要柱状图实现堆叠效果,则加上:stacked=true

02 scatter-散点图

绘制散点图,主要⽤到plt.scatter()这个函数。x,y是必填参数;

c (颜⾊:b--blue, c--cyan,g--green,k--black,m--magenta,r--red,w--white,y--yellow);s:控制点的⼤⼩,默认为20);

marker:指定散点图点的形状,默认为圆形;alpha:指定对象的透明度;......

绘制简单的散点图:

x = np.random.rand(10)y = np.random.rand(10)plt.scatter(x,y)plt.show()

进⾏简单的⼀些参数设置:

x = np.random.rand(50)y = np.random.rand(50)colors = np.random.rand(50)s = (30 * np.random.rand(n))**2plt.scatter(x, y,s, c=colors, alpha=0.5)plt.show()

散点矩阵图scatter_matrix,diagonal = ''为每个指标的频率图,有kde及hist两个参数可选;range_padding 是图像在x轴,y轴原点附近的留⽩,值越⼤,图像离坐标原点的距离越⼤。

df = pd.DataFrame(np.random.randn(100, 4), columns = list('abcd'))pd.scatter_matrix(df, figsize = (8,6),marker = 'o',diagonal = 'kde', alpha = 0.4,range_padding = 0.05)

03 pie-饼图

# matplotlib中饼图的实现⽤的是pie()函数,必须输⼊的参数是饼图每个部分的值。x = np.random.randint(1, 10, 3)plt.pie(x)plt.show()

部分参数解释:

使⽤labels为饼图加标签;autopct 控制饼图内百分⽐设置

'%1.1f'指⼩数点前后位数(没有⽤空格补齐),shadow是在饼图下画⼀个阴影,False即不画

sizes = [2,5,12]labels = ['娱乐','育⼉','饮⾷']plt.pie(sizes,labels=labels,autopct='%1.1f%%',shadow=False,startangle=100)plt.show()

04 hist-直⽅图

直⽅图绘制为hist()函数,参数如下:data:必选参数,绘图数据

bins:直⽅图的长条形数⽬,可选项,默认为10

normed:是否将得到的直⽅图向量归⼀化,可选项,默认为0,代表不归⼀化,显⽰频数。normed=1,表⽰归⼀化,显⽰频率。

facecolor:长条形的颜⾊edgecolor:长条形边框的颜⾊alpha:透明度......

s = pd.Series(np.random.randn(1000))s.hist(bins = 20,histtype = 'bar',align = 'mid',orientation = 'vertical',alpha = 0.5,normed = True)

密度图,加上:s.plot(kind = 'kde', style = 'k--')

# 柱状图能够实现堆叠,直⽅图也能实现堆叠,重点语句同样是stacked = Truedf = pd.DataFrame({'a':np.random.randn(500) + 1, 'b':np.random.randn(500),'c':np.random.randn(500) - 1, 'd':np.random.randn(500)},columns = list('abcd'))df.plot.hist(stac

05 polar-极坐标图

matplotlib的pyplot⼦库提供了绘制极坐标图的⽅法。在调⽤subplot()创建⼦图时通过设置projection='polar',便可创建⼀个极坐标⼦图,然后调⽤plot()在极坐标⼦图中绘图。

ax1 = plt.subplot(121, projection='polar')

部分参数意义:theta:⾓度数据radii :极径数据

theta_direction⽅法⽤于设置极坐标的正⽅向

theta_zero_location⽅法⽤于设置极坐标0°位置,0°可设置在⼋个位置,分别为N, NW, W, SW, S, SE, E, NEthetagrids⽅法⽤于设置极坐标⾓度⽹格线显⽰theta_offset⽅法⽤于设置⾓度偏离......极区图:

N = 20theta = np.linspace(0, 2 * np.pi, N, endpoint = False)radii = 10 * np.random.rand(N)width = np.pi / 4 * np.random.rand(N)ax = plt.subplot(111, projection = 'polar')bars = ax.bar(theta, radii, width = width, bottom = 0.0)

极散点图:

theta = np.arange(0,2*np.pi, np.pi/4) # 数据⾓度r = np.arange(1,9,1) #数据极径area = 100*np.arange(1,9,1) # 数据散点⾯积colors = thetaax2 = plt.subplot(111,projection='polar')ax2.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha =0.75)

06 boxplot-箱型图

绘制箱线图,⽤plt.boxplot()这个函数。箱型图是利⽤数据中的五个统计量:最⼩值、第⼀四分位数、中位数、第三四分位数与最⼤值来描述数据的⼀种⽅法。它也可以粗略地看出数据是否具有有对称性,分布的分散程度等信息,特别可以⽤于对⼏个样本的⽐较。

部分参数:sym:异常值的形状 ;whis:⽤于调节上下垂直线的长度⽣成单个箱型图:

np.random.seed(100)#⽣成随机数data=np.random.normal(size=1000,loc=0,scale=1)plt.boxplot(data,sym='o',whis=1.5)plt.show()

多个箱型图:

np.random.seed(100)#⽣成随机数data=np.random.normal(size=(1000,4),loc=0,scale=1) #1000个值得4维数组lables = ['A','B','C','D']plt.boxplot(data,labels=lables)plt.show()

箱型图也可以是横向的,加上vert=False即可:

07 heatmap-热图

热图是数据分析的常⽤⽅法,通过⾊差、亮度来展⽰数据的差异、易于理解。matplotlib中⽣成热图是调⽤的函数imshow() 。

X = [[1,2],[3,4],[5,6]]plt.imshow(X)plt.show()

增加颜⾊类标的代码是plt.colorbar():

三、可视化控制

前⾯我们⽤matplotlib绘制了许多不同类型的图像,对于基本的数据分析已经完全掌握。但在⼀些细节的调节、颜⾊、美观度上我们没有做过多强调,matplotlib所提供的不仅仅是图形的基本绘制,它也提供了让图像展⽰更精细的⼯具。01 颜⾊表⽰

#⼋种内件颜⾊缩写:b:blueg:greenr:redc:cyanm:magentay:yellowk:blackw:white#先⽤numpy⽣成四条线,再对四条线的颜⾊进⾏设置:import numpy as npimport pandas as pdimport matplotlib.pyplot as plty=np.arange(1,5)

01 简单颜⾊展⽰

plt.plot(y,color='b')

02 灰⾊度

plt.plot(y+1,color='0.5') #灰⾊ 程度为0.5

03 ⼗六进制颜⾊表⽰

⼗六进制颜⾊代码可通过百度颜⾊代码(对照表查找)

plt.plot(y+2,color='#FFEC8B')

04 RGB 表⽰

此时注意要将R,G,B每个值除以255,使其属于0~1之间,如下为红⾊:

plt.plot(y+3,color=(1,0,0))

效果图:

02点、线样式(1) 四种线型

plt.plot(y,'-') #实线plt.plot(y+1,'--')#虚线plt.plot(y+2,'-.')#点划线plt.plot(y+3,':')#点线

(2) 点样式

plt.plot(y,'o')plt.plot(y+1,'D')plt.plot(y+2,'^')plt.plot(y+3,'p')

指定marker时,会画出线段:

plt.plot(y,marker='o')plt.plot(y+1,marker='D')

(3) 样式字符串

将颜⾊,点型,线型写成⼀个字符串,如:gx:,mo--等

plt.plot(y,'gx:')plt.plot(y+1,'mo--')plt.plot(y+2,'bp-')

四、保存图⽚

plt.savefig() # 保存

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务