【基础汇总】——python数据分析必备三大工具

目录

前言

之前写了那么多的关于金融数据分析的实战案例,我想是时候将这些例子中的使用到的python基础知识进行总结了……

想要学好数据分析,必须掌握的numpy、pandas、matplotlib三大数据分析相关库的知识, 收藏这一篇万字长文就足够了!!!

一、numpy

numpy为python提供了大量高效实现复杂数组和矩阵运算的函数

1、数组创建

import numpy as np

a = np.array([1,2,3])
print('a = ', a)
print('数组元素类型:', a.dtype)

Out:    a = [1 2 3]
        数组元素类型:int32

b = np.array([1.2, 2.3, 3.4])
print('b = ', b)
print('数组元素类型:', b.dtype)

Out:    b = [1.2 2.3 3.4]
        数组元素类型:float64

c = np.array([[1,2],[3,4]], dtype=np.complex64)
print('c = ', c)
print('数组元素类型:', c.dtype)

Out:    c =  [[1.+0.j 2.+0.j]
        [3.+0.j 4.+0.j]]
        数组元素类型:complex64

d = np.array([(1.2, 2.3),(3, 4)])
print('d = ', d)
print('数组元素类型:', d.dtype)

Out:    d =  [[1.2 2.3]
        [3.  4. ]]
        数组元素类型: float64

e = np.zeros((3,4))
print('e = ', e)
print('数组元素类型:', e.dtype)

e =  [[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
数组元素类型: float64

f = np.ones((2,3,4), dtype=np.int16)
print('f = ', f)
print('数组元素类型:', f.dtype)

f =  [[[1 1 1 1]
  [1 1 1 1]
  [1 1 1 1]]

 [[1 1 1 1]
  [1 1 1 1]
  [1 1 1 1]]]
数组元素类型: int16

h = np.arrange(0, 2, 0.3)
print('h = ', h)
print('数组元素类型:', h.dtype)

h =  [0.  0.3 0.6 0.9 1.2 1.5 1.8]
数组元素类型: float64

numpy使用ndarray类对象来处理多维数组,ndarray一些可以直接访问的属性:

属性名含义ndarray.ndim数组轴的个数ndarray.shape数组的形状ndarray.size数组中元素的总数ndarray.dtype数组中元素的数据类型ndarray.itemsize数组中每个元素的字节大小ndarray.data实际数组元素的缓冲区


x = np.arange(15).reshape(3,5)
print('x = ', x)
print('数组轴的个数:',x.ndim)
print('数组的形状:',x.shape)
print('数组中元素的总数:',x.size)
print('数组中元素的数据类型:',x.dtype)
print('数组中每个元素的字节大小:',x.itemsize)
print('实际数组元素的缓冲区:',x.data)

x =  [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
数组轴的个数: 2
数组的形状: (3, 5)
数组中元素的总数: 15
数组中元素的数据类型: int32
数组中每个元素的字节大小: 4
实际数组元素的缓冲区: <memory at 0x0000024C2033D708>

numpy数组输出基本规则:一维数组输出成行,二维数组输出为矩阵,三维数组输出为矩阵列表。

2、数组运算

a = np.array([20,30,40,50])
b = np.arange(4)
print('a = ',a)
print('b = ',b)

a =  [20 30 40 50]
b =  [0 1 2 3]

c = a - b
print('c = (a - b) = ',c)

c = (a - b) =  [20 29 38 47]

b_2 = b**2
print('b_2 = b * b = ',b_2)

b_2 = b * b =  [0 1 4 9]

a_sin = np.sin(a)
print('a_sin = sin(a) = ',a_sin)

a_sin = sin(a) =  [ 0.91294525 -0.98803162  0.74511316 -0.26237485]

a_cond = (a<35)
print('a_cond = (a,a_cond)

print('a数组中小于35的元素是:',a[a<35])

a_cond = (a<35) =  [ True  True False False]
a数组中小于35的元素是: [20 30]

f = np.ones((2,3),dtype=np.int)
g = np.random.random((2,3))
print('f = ',f)
print('g = ',g)
f*=3
g+=f
print('f = ',f)
print('g = ',g)

f =  [[1 1 1]
 [1 1 1]]
g =  [[0.48818655 0.14805382 0.24190023]
 [0.23753093 0.87251939 0.53028234]]
f =  [[3 3 3]
 [3 3 3]]
g =  [[3.48818655 3.14805382 3.24190023]
 [3.23753093 3.87251939 3.53028234]]

print('g.sum()=',g.sum())
print('g.min()=',g.min())
print('g.max()=',g.max())

g.sum()= 20.518473272469617
g.min()= 3.1480538249037986
g.max()= 3.872519388164515

print('axis=0,表示按列进行运算,g.max(axis=0)=',g.max(axis=0))
print('axis=1,表示按行进行运算,g.max(axis=1)=',g.max(axis=1))

axis=0,表示按列进行运算,g.max(axis=0)= [3.48818655 3.87251939 3.53028234]
axis=1,表示按行进行运算,g.max(axis=1)= [3.48818655 3.87251939]

h = np.random.random(15)
print('h = ',h)
print('排序后的h = ',np.sort(h))

h =  [0.05010685 0.16184821 0.59109447 0.98844731 0.68039122 0.13331593
 0.61283281 0.49090379 0.30930569 0.0817642  0.30148594 0.18140083
 0.03374513 0.75961934 0.990532  ]
排序后的h =  [0.03374513 0.05010685 0.0817642  0.13331593 0.16184821 0.18140083
 0.30148594 0.30930569 0.49090379 0.59109447 0.61283281 0.68039122
 0.75961934 0.98844731 0.990532  ]

numpy常见函数:

函数名功能np.array(X)或np.array(X, dtype)将数据转化为一个ndarray;数组中元素类型为dtypenp.asarray(array)cope一个新的数组np.ones(X)或np.ones(X, dtype)或np.ones_like(array)形成一个元素全为1的数组;数组中元素类型为dtype;形状与参数array相同np.zeros(X)或np.zeros(X, dtype)或np.zeros_like(array)形成一个元素全为0的数组;数组中元素类型为dtype;形状与参数array相同np.empty(X)或np.empty(X, dtype)或np.empty_like(array)形成一个未初始化的数组;数组中元素类型为dtype;形状与参数array相同np.eye(N)或np.identity(N)形成一个NN维的数组,对角线为1,其余为0np.arange(num)或np.arange(begin,end)或np.arange(begin,end,step)形成一个[0,num-1)的数组;形成一个[begin,end-1)的数组;步长为stepnp.mershgrid(ndarray,…)生成一个ndarrayndarray*…的多维ndarraynp.where(cond,ndarray1,ndarray2)根据条件cond,选取ndarray1或ndarray2np.in1d(ndarray,[a,b,…])检查ndarray中是否有元素等于[a,b,…],返回bool数组np.diag(ndarray)或np.diag([x,y…])以一维数组形式返回方阵的对角线;将一维数组转化为方阵np.dot(ndarray,ndarray)矩阵乘法np.trace(ndarray)对角线元素和np.sort(ndarray)或np.unique(ndarray)排序;排除重复元素再排序np.save(string.ndarray)将ndarray保存为string.npy的文件中np.savez(string,ndarray1,ndarray2…)将所有ndarray压缩保存为string.npy的文件中np.savetxt(string,ndarray,fmt,newline=’\n’)将ndarray保存到fmt格式的文件中np.load(string)读取文件转化为ndarray对象np.loadtxt(string,delimiter)读取文件,以delimiter为分隔符转化为ndarray对象

3、矩阵运算

矩阵式金融数据分析的重要数据结构之一。矩阵运算主要包括:生成矩阵、矩阵加减乘除,点积和内积运算、矩阵转置、矩阵特征值和特征向量,矩阵行列式值等等

a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print('a = ',a)
print('b = ',b)

print('元素乘法a*b:',a*b)

print('矩阵相乘:',np.dot(a,b))

a =  [[1 2]
 [3 4]]
b =  [[5 6]
 [7 8]]
元素乘法a*b: [[ 5 12]
 [21 32]]
矩阵相乘: [[19 22]
 [43 50]]
a = np.array([[1,2],[3,4]])
b = np.linalg.det(a)
print('矩阵a对应的行列式的值:',b)
c = np.linalg.inv(a)
print('矩阵a的逆矩阵:',c)
d = np.linalg.eig(a)
print('矩阵a的特征值',d[0])
print('矩阵a的特征向量',d[1])

矩阵a对应的行列式的值: -2.0000000000000004
矩阵a的逆矩阵: [[-2.   1. ]
 [ 1.5 -0.5]]
矩阵a的特征值 [-0.37228132  5.37228132]
矩阵a的特征向量 [[-0.82456484 -0.41597356]
 [ 0.56576746 -0.90937671]]

 1. 3x + y - 2z = 5
 2. x - y + 4z = -2
 3. 2x + 3z = 2.5
from scipy.linalg import solve
a = np.array([[3,1,-2],[1,-1,4],[2,0,3]])
b = np.array([5,-2,2.5])
print('方程形如Ax=b,其中A={},\nb={}'.format(a,b))
x = solve(a,b)
print('方程的解为:',x)

方程形如Ax=b,其中A=[[ 3  1 -2]
 [ 1 -1  4]
 [ 2  0  3]],
b=[ 5.  -2.   2.5]
方程的解为: [0.5 4.5 0.5]

二、pandas

pandas是以numpy为基础的python程序包,具备丰富的表格型数据操作功能

1、数据结构

Series:一维数组,类似list数据类型,用下标索引方式访问数据元素
Time-Series:时间序列,采用时间索引方式访问数据元素
DataFrame:二维表格型数据结构
Panel:三维数据,可装载多个DataFrame


import pandas as pd

s1 = pd.Series([100,'gd','gz'])
print(s1)
print('s1.shape=',s1.shape)
print('s1.index=',s1.index)
print('s1.values=',s1.values)

0    100
1     gd
2     gz
dtype: object
s1.shape= (3,)
s1.index= RangeIndex(start=0, stop=3, step=1)
s1.values= [100 'gd' 'gz']

s2 = pd.Series([100,'gd','gz'], index=['mark','university','city'])
print(s1)
print('s2.shape=',s2.shape)
print('s2.index=',s2.index)
print('s2.values=',s2.values)
print('s2["mark"]=',s2['mark'])

0    100
1     gd
2     gz
dtype: object
s2.shape= (3,)
s2.index= Index(['mark', 'university', 'city'], dtype='object')
s2.values= [100 'gd' 'gz']
s2["mark"]= 100

data = {'name':['python','java','c++'],'score':[95,90,99],'year':[2020,2021,2022]}
print('字典data:',data)
s3 = pd.DataFrame(data)
print('DataFrame s3:\n',s3)
print('s3.shape=',s3.shape)
print('s3.index=',s3.index)
print('s3.values=',s3.values)

字典data: {'name': ['python', 'java', 'c++'], 'score': [95, 90, 99], 'year': [2020, 2021, 2022]}
DataFrame s3:
      name  score  year
0  python     95  2020
1    java     90  2021
2     c++     99  2022
s3.shape= (3, 3)
s3.index= RangeIndex(start=0, stop=3, step=1)
s3.values= [['python' 95 2020]
 ['java' 90 2021]
 ['c++' 99 2022]]

2、数据处理

2.1、数据结构与描述性统计

dates = pd.date_range('20220401',periods=6)
df = pd.DataFrame(np.random.randn(6,3),index=dates,columns=['a','b','c'])
print('df:\n',df)

df:
                    a         b         c
2022-04-01  1.157682  1.248710  0.252461
2022-04-02  1.890162 -0.460040 -0.952669
2022-04-03 -0.089896  1.124548  0.842600
2022-04-04  1.088276  0.359554  1.005010
2022-04-05 -0.087399  0.242903  0.389513
2022-04-06  1.431301  1.716398  0.374692
df_1 = pd.DataFrame({'a':1.,
                    'b':pd.Timestamp('20220401'),
                    'c':pd.Series(1,index=list(range(4)),dtype='float32'),
                    'd':np.array([3]*4,dtype='int32'),
                    'e':pd.Categorical(["test","train","test","train"]),
                    'f':'foo'})
print('df_1:\n',df_1)
print('各列数据类型:\n',df_1.dtypes)

df_1:
      a          b    c  d      e    f
0  1.0 2022-04-01  1.0  3   test  foo
1  1.0 2022-04-01  1.0  3  train  foo
2  1.0 2022-04-01  1.0  3   test  foo
3  1.0 2022-04-01  1.0  3  train  foo
各列数据类型:
 a           float64
b    datetime64[ns]
c           float32
d             int32
e          category
f            object
dtype: object

print('df_1数据描述:\n',df_1.describe())

df_1数据描述:
          a    c    d
count  4.0  4.0  4.0
mean   1.0  1.0  3.0
std    0.0  0.0  0.0
min    1.0  1.0  3.0
25%    1.0  1.0  3.0
50%    1.0  1.0  3.0
75%    1.0  1.0  3.0
max    1.0  1.0  3.0

print('按e列的值进行排序:\n',df_1.sort_values(by='e'))

按e列的值进行排序:
      a          b    c  d      e    f
0  1.0 2022-04-01  1.0  3   test  foo
2  1.0 2022-04-01  1.0  3   test  foo
1  1.0 2022-04-01  1.0  3  train  foo
3  1.0 2022-04-01  1.0  3  train  foo

2.2、切片访问与缺失处理

print('访问b、c列:\n',df[['b','c']])

访问b、c列:
                    b         c
2022-04-01  0.057102 -0.183773
2022-04-02 -0.487013  0.513329
2022-04-03  0.184821  0.509904
2022-04-04 -0.392358  1.952551
2022-04-05 -0.740828  0.595205
2022-04-06  1.425204  0.604636
print('访问前2行:\n',df[0:2])

访问前2行:
                    a         b         c
2022-04-01  0.400813  0.057102 -0.183773
2022-04-02  1.652287 -0.487013  0.513329

print('利用loc:\n',df.loc['20220402',['a','b']])

print('利用iloc:\n',df.iloc[3:5,0:2])

利用loc:
a    1.652287
b   -0.487013
Name: 2022-04-02 00:00:00, dtype: float64
利用iloc:
                    a         b
2022-04-04  0.915201 -0.392358
2022-04-05  1.037104 -0.740828
print('df中b列大于0的数据:\n',df[df.b>0])

df中b列大于0的数据:
                    a         b         c
2022-04-01  0.400813  0.057102 -0.183773
2022-04-03  1.124814  0.184821  0.509904
2022-04-06  0.733508  1.425204  0.604636

df['d'] = pd.Series([1,2,3,4,5,6],index=pd.date_range('20220402',periods=6))
print(df)

a         b         c    d
2022-04-01  0.400813  0.057102 -0.183773  NaN
2022-04-02  1.652287 -0.487013  0.513329  1.0
2022-04-03  1.124814  0.184821  0.509904  2.0
2022-04-04  0.915201 -0.392358  1.952551  3.0
2022-04-05  1.037104 -0.740828  0.595205  4.0
2022-04-06  0.733508  1.425204  0.604636  5.0

df1 = df.dropna(axis=0,how='any')
print(df1)

  a         b         c    d
2022-04-02  1.652287 -0.487013  0.513329  1.0
2022-04-03  1.124814  0.184821  0.509904  2.0
2022-04-04  0.915201 -0.392358  1.952551  3.0
2022-04-05  1.037104 -0.740828  0.595205  4.0
2022-04-06  0.733508  1.425204  0.604636  5.0

df2 = df.fillna(value=0)
print(df2)

a         b         c    d
2022-04-01  0.400813  0.057102 -0.183773  0.0
2022-04-02  1.652287 -0.487013  0.513329  1.0
2022-04-03  1.124814  0.184821  0.509904  2.0
2022-04-04  0.915201 -0.392358  1.952551  3.0
2022-04-05  1.037104 -0.740828  0.595205  4.0
2022-04-06  0.733508  1.425204  0.604636  5.0

2.3、多表合并

df3 = pd.DataFrame({'id':[1001,1002,1003,1004,1005,1006],
                   'date':pd.date_range('20220401',periods=6),
                   'city':['beijing','shanghai','guanzhou','shenzhen','tianjin','xian'],
                   'age':[23,44,54,32,34,32],
                   'category':['100a','100b','110a','110c','210a','130f'],
                   'price':[1200,np.nan,2133,5433,np.nan,4432]})
print('df3:\n',df3)

df3:
      id       date      city  age category   price
0  1001 2022-04-01   beijing   23     100a  1200.0
1  1002 2022-04-02  shanghai   44     100b     NaN
2  1003 2022-04-03  guanzhou   54     110a  2133.0
3  1004 2022-04-04  shenzhen   32     110c  5433.0
4  1005 2022-04-05   tianjin   34     210a     NaN
5  1006 2022-04-06      xian   32     130f  4432.0
df4 = pd.DataFrame({'id':[1001,1002,1003,1004,1005,1006,1007,1008],
                   'gender':['male','female','male','female','male','male','female','female'],
                   'pay':['y','n','n','y','n','n','y','y'],
                   'point':[10,12,20,40,40,40,30,20]})
print('df4:\n',df4)

df4:
      id  gender pay  point
0  1001    male   y     10
1  1002  female   n     12
2  1003    male   n     20
3  1004  female   y     40
4  1005    male   n     40
5  1006    male   n     40
6  1007  female   y     30
7  1008  female   y     20

print('df3、df4的交集:\n',pd.merge(df3,df4,how='inner'))

df3、df4的交集:
      id       date      city  age category   price  gender pay  point
0  1001 2022-04-01   beijing   23     100a  1200.0    male   y     10
1  1002 2022-04-02  shanghai   44     100b     NaN  female   n     12
2  1003 2022-04-03  guanzhou   54     110a  2133.0    male   n     20
3  1004 2022-04-04  shenzhen   32     110c  5433.0  female   y     40
4  1005 2022-04-05   tianjin   34     210a     NaN    male   n     40
5  1006 2022-04-06      xian   32     130f  4432.0    male   n     40

print('df3_df4_right:\n',pd.merge(df3,df4,how='outer'))

df3_df4_right:
      id       date      city   age category   price  gender pay  point
0  1001 2022-04-01   beijing  23.0     100a  1200.0    male   y     10
1  1002 2022-04-02  shanghai  44.0     100b     NaN  female   n     12
2  1003 2022-04-03  guanzhou  54.0     110a  2133.0    male   n     20
3  1004 2022-04-04  shenzhen  32.0     110c  5433.0  female   y     40
4  1005 2022-04-05   tianjin  34.0     210a     NaN    male   n     40
5  1006 2022-04-06      xian  32.0     130f  4432.0    male   n     40
6  1007        NaT       NaN   NaN      NaN     NaN  female   y     30
7  1008        NaT       NaN   NaN      NaN     NaN  female   y     20

pandas文件读取

函数功能pd.read_csv(‘file.csv’)读取csv文件pd.read_json(‘file.json’)读取json文件pd.read_excel(‘file.xls’,sheetname=[0,1…])读取excel文件多个sheet页,返回多个df的字典

pandas数据预处理函数

函数功能df.duplicated()或df.drop_duplicated()返回各行是否是上一行的重复行;删除重复行df.fillna(0)用0填充nandf.dropna(axis,how)axis=0:按行,axis=1:按列;how=’any’:有nan就删,how=’all’:全是nan才删del df([‘col’,…],axis)删除行列df.column=col_name指定列名

pandas数据筛选函数

函数名功能df.columns列名df.index索引名df.shape行x列df.head(n=N)前几行df.tail(n=N)后几行df.valuesnp对象的二维数组df.reindex(index=[‘row1’…],columns=[‘col1’…]重新排序df[n:m]切片,n~m-1

pandas数学运算和描述性统计函数

函数名功能df.T转置df1+df2合并,空值nandf1.add(df2,fill_value=0)合并,空值0df.sort_index(axis=0)按行索引升序df.sort_index(by=[‘col1’…])按特定值排序df.rank()计算排名rank值df.describe()描述性统计df.count()计算非nan值df.max/min/sum/mean/median/var/std()最大值最小值…df.cumsum()累计和df.cov()协方差df.groupby(‘col1’)按列分组

三、matplotlib

1、matplotlib图形绘制

绘图区域有figure表示,一个figure表示一个图形窗口

import matplotlib.pyplot as plt

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

x = np.arange(100,201)
y = 2*x + 1

plt.figure(figsize=(10,6))

plt.xlim(100,201)
plt.plot(x,y)
plt.xlabel('X值',fontsize=16)
plt.ylabel('Y值',fontsize=16)
plt.xticks(fontproperties='Time New Roman',size=14)
plt.yticks(fontproperties='Time New Roman',size=14)
plt.savefig('pic1.png',dpi=300,bbox_inches='tight')
plt.show()

【基础汇总】——python数据分析必备三大工具

1.1、绘制散点图


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

plt.figure(figsize=(10,6))

n = 20
plt.scatter(np.random.rand(n)*100,np.random.rand(n)*100,c='r',s=100,alpha=0.8)
plt.scatter(np.random.rand(n)*100,np.random.rand(n)*100,c='g',s=200,alpha=0.5)
plt.scatter(np.random.rand(n)*100,np.random.rand(n)*100,c='k',s=300,alpha=0.2)

plt.xlabel('X值',fontsize=16)
plt.ylabel('Y值',fontsize=16)
plt.xticks(fontproperties='Time New Roman',size=14)
plt.yticks(fontproperties='Time New Roman',size=14)

plt.show()

【基础汇总】——python数据分析必备三大工具

1.2、绘制柱状图


y2021 = [15600,12700,11300,4270,3620]
y2022 = [17400,14800,12000,5200,4020]
labels = ['bj','sh','hk','sz','gz']
bar_width=0.4
plt.figure(figsize=(10,6))
plt.bar(np.arange(5),y2021,label='2021',color='g',alpha=0.8,width=bar_width)
plt.bar(np.arange(5)+bar_width,y2022,label='2022',color='r',alpha=0.8,width=bar_width)
plt.xlabel('top5 city',fontproperties='Time New Roman',size=16)
plt.ylabel('family amount',fontproperties='Time New Roman',size=16)
plt.xticks(np.arange(5)+bar_width/2,labels)

plt.xticks(fontproperties='Time New Roman',size=14)
plt.yticks(fontproperties='Time New Roman',size=14)
plt.title('millions family amount top5 city distribution',fontproperties='Time New Roman',size=16)

for x1,y1 in enumerate(y2021):
    plt.text(x1-0.1,y1+150,y2021[x1])
for x2,y2 in enumerate(y2022):
    plt.text(x2+0.25,y2+150,y2022[x2])

plt.legend()
plt.show()

【基础汇总】——python数据分析必备三大工具

1.3、绘制饼状图


plt.figure(figsize=(10,6))
edu = [0.2515,0.0057,0.3724,0.3336,0.0368]
labels = ['highschool','others','junior college','bachelor','master']
exp = [0.1,0,0,0,0]
colors = ['r','g','y','purple','blue']
plt.axes(aspect='equal')
plt.xlim(0,4)
plt.ylim(0,4)
plt.pie(x = edu,
       explode = exp,
       labels = labels,
       colors = colors,
       autopct = '%.1f%%',
       pctdistance = 0.5,
       labeldistance = 0.8,
       startangle = 180,
       radius = 1.5,
       counterclock = False,
       wedgeprops = {'linewidth':1.5,'edgecolor':'white'},
       textprops = {'fontsize':15,'color':'k'},
       center = (2,2),
       frame = 1)
plt.xticks(())
plt.yticks(())
plt.title('xx客户分析')
plt.show()

【基础汇总】——python数据分析必备三大工具

1.4、绘制3D图


from mpl_toolkits.mplot3d import Axes3D
plt.figure(figsize=(10,6))
data = np.random.randint(0,255,size=[6,6,6])

x,y,z = data[0],data[1],data[2]
ax = plt.subplot(111,projection='3d')
ax.scatter(x[0:2],y[0:2],z[0:2],c='y',s=100)
ax.scatter(x[2:4],y[2:4],z[2:4],c='r',marker='*',s=100)
ax.scatter(x[4:6],y[4:6],z[4:6],c='g',marker='v',s=100)
ax.set_zlabel('Z')
ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.show()

【基础汇总】——python数据分析必备三大工具

2、seaborn图形绘制

seaborn是基于matplotlib的python数据可视化程序包,它简化了繁琐复杂的参数设置,有助于用户创建具有统计意义的图形

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(10,6))
x = [1,3,5,7,9,11,13,15,17,19]
y_bar = [3,4,6,8,9,10,9,11,7,8]
y_line = [2,3,5,7,8,9,8,10,6,7]
sns.set()
plt.bar(x,y_bar)
plt.plot(x,y_line,'-o',color='y')
plt.show

【基础汇总】——python数据分析必备三大工具

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

plt.figure(figsize=(10,6))
sns.set(palette="muted",color_codes=True)
rs = np.random.RandomState(10)
d = rs.normal(size=100)
sns.distplot(d,kde=False,color='b')
plt.show()

f,axes = plt.subplots(2,2,figsize=(7,7),sharex=True)
sns.distplot(d,kde=False,color='b',ax=axes[0,0])
sns.distplot(d,hist=False,rug=True,color='r',ax=axes[0,1])
sns.distplot(d,hist=False,color='g',kde_kws={"shade":True},ax=axes[1,0])
sns.distplot(d,color='m',ax=axes[1,1])
plt.show()

【基础汇总】——python数据分析必备三大工具
【基础汇总】——python数据分析必备三大工具

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from scipy import stats

mean,cov = [0,1],[(1,.5),(.5,1)]
data = np.random.multivariate_normal(mean,cov,1000)
df = pd.DataFrame(data,columns=['x','y'])

plt.figure(figsize=(10,6))
g = sns.jointplot(x='x',y='y',data=df,kind='hex',color='k')
g.set_axis_labels('X','Y',size=16)
g.annotate(stats.pearsonr,fontsize=12)
g.show()

【基础汇总】——python数据分析必备三大工具

x = np.arange(0,100)
y = 2*x+1
var = np.random.normal(0,50,100)
y = y + var
df1 = pd.DataFrame()
df1['x'] = x
df1['y'] = y
plt.figure(figsize=(10,6))
g1 = sns.jointplot(x='x',y='y',data=df1,kind='reg',color='k')
g1.set_axis_labels('X值','Y值',size=16)
g1.savefig('sea05.png',dpi=300,bbox_inches='tight')

【基础汇总】——python数据分析必备三大工具

3、实际案例

import akshare as ak
stock1 = ak.stock_zh_a_daily('sh000001','20201231','20211231')
stock2 = ak.stock_zh_a_daily('sz300750','20201231','20211231')
stock3 = ak.stock_zh_a_daily('sh603738','20201231','20211231')

df = pd.DataFrame()
df['sh000001'] = stock1['close'].pct_change()
df['sz300750'] = stock2['close'].pct_change()
df['sh603738'] = stock3['close'].pct_change()

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
sns.set_style("whitegrid",{'font.sans-serif':['simhei','Arial']})

sns.PairGrid(df).map(plt.scatter)
plt.figure(figsize=(10,8))
plt.title("三只股票相关系数矩阵",y=1.05,size=16)
sns.heatmap(df.corr(),linewidths=0.1,vmax=1.0,square=True,linecolor='white',
           annot=True,annot_kws={'size':20,'weight':'bold','color':'white'})
plt.savefig('相关矩阵.png',dpi=300,bbox_inches='tight')

【基础汇总】——python数据分析必备三大工具
【基础汇总】——python数据分析必备三大工具

结语

看完这些基础知识后再看以前写的实战案例文章栏目【金融数据分析】,或许会有新的收获~

大家也可以在评论区留言,一起交流学习吧!

Original: https://blog.csdn.net/weixin_47974364/article/details/123893669
Author: 貮叁
Title: 【基础汇总】——python数据分析必备三大工具

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/766369/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python 为什么如此设计?

    大概两年半前,我萌生了要创作一个新的系列文章的想法,也就是”Python为什么“,试图对 Python 的语法及特性提出”为什么”式…

    Python 2023年10月30日
    024
  • Java中的SPI原理浅谈

    在面向对象的程序设计中,模块之间交互采用接口编程,通常情况下调用方不需要知道被调用方的内部实现细节,因为一旦涉及到了具体实现,如果需要换一种实现就需要修改代码,这违反了程序设计的&…

    Python 2023年10月21日
    027
  • Python爬虫——Scrapy_redis快速上手(爬虫分布式改造)

    scrapy是python界出名的一个爬虫框架。Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中…

    Python 2023年10月1日
    033
  • 【MobileNetV3】MobileNetV3网络结构详解

    文章目录 1 MobileNetV3创新点 2 block变成了什么样 * 2.1 总体介绍 2.2 SE模块理解 2.3 ReLu6和hardswish激活函数理解 3 网络总体…

    Python 2023年8月1日
    055
  • 使用 ChatGPT 赚钱的 4 种简单方法

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月4日
    032
  • 简化scrapy爬虫

    scrapy爬虫基本指令要点 英语词汇 genspider:生成爬虫 itcast:传智播客 itcast.cn:传智播客的网址 deploy:部署 pipeline:管道 1.安…

    Python 2023年10月6日
    034
  • 飞机大战游戏—Pygame

    一、基础知识 pygame安装 pygame就是一个Python模块,专为店子游戏设计 安装pygame(Windows): pip install pygame 验证安装 pyt…

    Python 2023年9月19日
    039
  • 前端(echarts+百度地图api)后端(python+flask)完成绵阳餐饮消费数据可视化系统

    一、可视化要求 针对团购网站餐饮类消费数据的可视分析系统设计与开发大多数消费者在选择团购网站消费后会做出相应评价,从而产生海量的交易数据。这些数据包含了消费者对饮食比较全面的主观性…

    Python 2023年8月14日
    065
  • 测试之路 pytest接口自动化框架扩展-GUI窗口

    各位大佬好~上期内容梳理了下接口自动化脚本扩展思路,以及成果展示,本期开始就从代码角度出发。分享出源码后的同时将我的思路一并梳理出来。好了,废话不多,昊料开始~ 引言 本期先从数据…

    Python 2023年9月11日
    048
  • BUUCTF-PWN-第一页writep(32题)

    from pwn import * from LibcSearcher import * p = process("./pwn") data_addr = 0x…

    Python 2023年10月19日
    025
  • HTB-Late

    HTB-Late 信息收集 开机 提权 信息收集 nmapdirbustergobuster收集的信息有点少啊,是不是漏了什么。 有一个在线处理图片的网页,但是访问不了。手动添加d…

    Python 2023年8月9日
    086
  • windows下mysql的数据主主同步

    mysql主主备份: 保证各服务器上的数据库中的数据一致,因此需要开启数据库同步机制。由于是一整套系统,并且系统内含数据库。由于任何一台服务器都有可能被选中,因此要让所有的数据库上…

    Python 2023年10月20日
    036
  • anaconda及库安装

    1.安装anaconda(全英文文件夹下) 2.验证:输入下面命令出现版本信息即成功 conda –version 3.在Anaconda Prompt中分别运行如下两条命令:(…

    Python 2023年9月15日
    025
  • 【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)

    需要源码和相关资源请点赞关注收藏后评论区留下QQ~~~ 一、在线语音识别 云知声的语音识别同样采用WebSocket接口,待识别的音频流支持MP3和PCM两种格式,对于在线语音识别…

    Python 2023年9月30日
    060
  • @Transactional注解真的有必要声明rollbackFor属性吗?

    @Transactional注解真的有必要声明rollbackFor属性吗? ​ 今天在看spring的事务底层源码时,想到一个问题,@Transactional注解真的有必要声明…

    Python 2023年10月19日
    041
  • YOLO系列算法

    目录 YOLO系列算法 * yolo算法 – Yolo算法思想 Yolo的网络结构 + 网络输入 网络输出 * 7X7网格 30维向量 Yolo模型的训练 + 训练样本…

    Python 2023年9月17日
    027
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球