三剑问鼎python数据分析"/>
Numpy,pandas,Matplotlib三剑问鼎python数据分析
python之如此强大,是因为他的很多工具包,例如数据分析中就涉及三个主要的包,NumPy和pandas和Matplotlib库,其中NumPy和pandas主要就是处理一维以及二维数据,Matplotlib则是数据可视化的利器。
一 , NumPy库和数组
import numpy as np
a = [1,2,3,4] #创建列表a
b = np.array([1,2,3,4])#创建数组
print(a)
print(b)
print(type(a))#打印出数据类型
print(type(b))
运行结果:
a = [1,2,3,4] #创建列表a
b = np.array([1,2,3,4])#创建数组
print(a[1])
print(b[1])
print(a[0:2])#列表a切片的结果,注意列表切片是“左闭右开”
print(b[0:2])#数组b的切片结果,数组切片是左闭右开
运行结果:
2.数据分析为什么要用数组而不用列表,是因为 NumPy是专门用于处理数据处理的库,能更好的支持一些数学运算,而用列表进行数学运算比较麻烦;
a = [1,2,3,4] #创建列表a
b = np.array([1,2,3,4])#创建数组c = a * 2#列表是把元素重复一遍
d = b * 2#数组是对每个元素进行乘法
print(c)
print(d)
运行结果
e = [[1,2],[3,4],[5,6]]
f = np.array([[1,2],[3,4],[5,6]])
print("列表输出结果:",e)
print("数组输出结果:",f)
运行结果:
3.创建数组的几种方式
#创建一维数组
b = np.array([1,2,3,4])
#创建二维数组
f = np.array([[1,2],[3,4],[5,6]])
print(b)
print(f)
运行结果:
import numpy as np
x = np.arange(5)
y = np.arange(5,10)
z = np.arange(5,10,0.5)
print(x)
print(y)
print(z)
运行结果:
4,random产生随机数
a = np.random.randn(3) #创建一维数组,其中包含服从标准正态分布(均值为0,标准值为1的分布)的3个随机数
print(a)
运行结果:
a = np.random.rand(3) #生成0~1之间的3个随机数
print(a)
运行结果:
a = np.arange(12).reshape(3,4)
print(a)
运行结果:
a = np.random.randint(0,10,(4,4)) #创建随机整数
print(a)
运行结果:
二 , pandas库
1.pandas库介绍
pandas库:基于NumPy的开源python库,广泛应用完成数据快速分析,数据清洗和准备工作;
pandas更加擅长处理二维数据;
pandas库主要有Series和DataFrame的两种数据结构。
series类似于NumPy库创建的一维数组,不同的是Series对象不仅包含数值,还包含一组索引(用于定位);
import pandas as pd
s1 = pd.Series(['张三','李四','王五'])
print(s1)
print(type(s1))
运行结果:
注意:
Series单独使用较少,我们学习pandas库主要是为了使用它提供DataFrame数据结构。
2,DataFrame
(1)DataFrame是一种二维表格数据结构,可以将其看成Excel表格。
import pandas as pd
a = pd.DataFrame([[1,2],[3,4],[5,6]])
print(a)
print(type(a))
运行结果:
a = pd.DataFrame([[1,2],[3,4],[5,6]],columns = ['date','score'],index = ['A','B','C'])
print(a)
print(type(a))
运行结果:
(2)通过列表创建DataFrame,注意保证date列表和score列表长度一致,否则会报错。
a = pd.DataFrame() #创建一个空DataFrame
date = [1,3,5]
score = [2,4,6]
a['date'] = date
a['score'] = score
print(a)
运行结果:
(3)通过字段创建DataFrame
import pandas as pd
b = pd.DataFrame({'a':[1,3,5],'b':[2,4,6]},index = ['x','y','z'])
print(b)
运行结果:
(4)想让字典键变成索引,可以使用from_dict()函数将字典转换为DataFrame,并同时设置orient参数为index;
import pandas as pd
c = pd.DataFrame.from_dict({'a':[1,3,5],'b':[2,4,6]},orient = "index")
print(c)
运行结果:
(5)通过DataFrame的T属性对DataFrame进行转置;
import pandas as pd
f = pd.DataFrame({'a':[1,3,5],'b':[2,4,6]})
print(f)
#输出转置后的DataFrame
print(f.T)
运行结果:
3.创建DataFrame
(1)通过二维数组创建DataFrame
import numpy as np,pandas as pd
d = pd.DataFrame(np.arange(12).reshape(3,4),index = ['x','y','z'],columns = ['A','B','C','D'])
print(d)
运行结果:
(2)修改行索引或者列索引名称
a = pd.DataFrame([[1,2],[3,4]],columns = ['date','score'],index = ['A','B'])
print(a)
运行结果:
a.rename(index = {'A':'阿里','B':'腾讯'},columns = {'date':'日期','score':'分数'},inplace = True)
print(a)
运行结果:
a.index.values
运行结果:
a = a.reset_index() #列索引变成数字
print(a)
运行结果:
三.Matplotlib库
1.基本图表绘制
2.绘图之前我们引入matplotlib库。
plt.plot()绘制折线图;
plt.bar()绘制柱形图;
plt.pie()绘制饼图;
import matplotlib.pyplot as plt
x = [1,2,3]
y = [2,4,6]
plt.plot(x,y)#绘制折线图
plt.show()#展现折线图
运行结果:
3.利用NumPy生成一维数组;
import numpy as np
import matplotlib.pyplot as plt
x1 = np.array([1,2,3])
y1 = x1 + 1
plt.plot(x1,y1)
y2 = x1 * 2
plt.plot(x1,y2,color = 'red',linewidth = 3,linestyle = '--')
plt.show()
运行结果:
4.绘制柱形图
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [5,4,3,2,1]
plt.bar(x,y,color = 'blue')
plt.show()
运行结果:
5.绘制散点图
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(20)
y = np.random.rand(20)
plt.scatter(x,y)
plt.show()
运行结果:
6.绘制直方图
import matplotlib.pyplot as plt
import numpy as np
#随机生成1000个服从正态分布的数据
data = np.random.randn(1000)
plt.hist(data,bins = 40,edgecolor = 'yellow')
plt.show()
运行结果:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(1000)
df = pd.DataFrame(data)
df.hist(bins = 40,edgecolor = 'black')
运行结果:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(1000)
df = pd.DataFrame(data)
df.plot(kind = 'hist')
运行结果:
7.创建一个二维表格格式
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame([[8000,6000],[7000,5000],[6500,4000]],columns = ['人均收入','人均支出'],index = ['北京','上海','广州'])
df.head()
#同时绘制折线图和柱形图
#from matplotlib import font_manager as fm, rcParams
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False #解决负号“-”显示为方块的问题
df['人均收入'].plot(kind = 'line')
df['人均收入'].plot(kind = 'bar')
```
运行结果:
df['人均收入'].plot(kind = 'pie')
运行结果:
df['人均收入'].plot(kind = 'box')
运行结果:
df['人均收入'].plot(kind = 'area')
运行结果:
8.数据分析可视化的常用技巧
(1).添加文字说明
plt.title()函数给图表添加标题;
plt.xlabel()和plt.ylabel()函数分别给x轴和y轴添加标签;
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8,9]
y = [2,3,4,5,7,8,9,5,9]
plt.plot(x,y)
plt.title('title')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
运行结果:
(2).添加图例
plt.legend()函数给图表添加图例,添加前需设置好label标签的参数
import numpy as np
import matplotlib.pyplot as plt
x1 = np.array([1,2,3])
y1 = x1 + 1
plt.plot(x1,y1,label = 'y = x + 1')
y2 = x1 * x1
plt.plot(x1,y2,color = 'red',linestyle = '--',label = 'y = x1 * x1')
plt.legend(loc = 'lower right')
plt.show()
运行结果:
(3).设置双坐标轴
一张图表上面绘制两条线,但是如果两条线取值范围差距相差较大,那么绘图出的图表效果会不美观,此时就需要双坐标轴来呈现图表;
import numpy as np
import matplotlib.pyplot as plt
x1 = np.array([10,20,30])
y1 = x1
plt.plot(x1,y1,color = 'red',linestyle = '--',label = 'y = x')
plt.legend(loc = 'upper left')#设置图表图例在左上角
plt.twinx() #设置双坐标轴
y2 = x1 * x1
plt.plot(x1,y2,color = 'blue',label = 'y = x * x')
plt.legend(loc = 'lower right')#设置图表图例在右下角
#plt.rcParams['figure.figsize'] = (8,6)设图表大小
#第一个元素代表长,第二个元素代表宽,这里的数字8和6 分别代表800像素和600像素
plt.show()
运行结果:
(4).绘制多图
有时候需要在一张画布上面绘制多个图表
利用matplotlib库的当前图形(figure)和当前轴(axes)概念来实现;
绘制多图通常采用subplot()和subplots()函数;
subplot(221)表示绘制2行2列的子图,当前绘制的是第1张子图;
import matplotlib.pyplot as plt
#绘制第一张子图:折线图
ax1 = plt.subplot(221)
plt.plot([1,2,3],[2,5,6],color = 'blue')
#绘制第二张子图:柱形图
ax2 = plt.subplot(222)
plt.bar([1,2,3,5,6],[3,5,7,7,8],color = 'blue')
#绘制第三张子图:散点图
ax3 = plt.subplot(223)
plt.scatter([1,3,5,5,6,6,7,7,7],[2,4,6,5,5,7,8,3,4])
#绘制第四张子图:直方图
ax4 = plt.subplot(224)
plt.hist([2,3,4,5,6,7,8,9])
运行结果:
4
import matplotlib.pyplot as plt
fig,axes = plt.subplots(2,2,figsize = (10,8))
ax1,ax2,ax3,ax4 = axes.flatten()
ax1.plot([1,2,3],[4,6,7])
ax2.bar([1,2,3],[4,6,7])
ax3.scatter([1,2,3],[4,6,7])
ax4.hist([1,2,3,4,6,7])
运行结果:
本篇主要介绍python数据分析三剑客的基本内容,也就是Numpy库,pandas库,Matplotlib库,以后我会持续更新这方面案例应用,欢迎大家一起互相学习,互相进步,可能很多方面写的不是很好,欢迎各路大神指导!
更多推荐
Numpy,pandas,Matplotlib三剑问鼎python数据分析
发布评论