python 数据处理

matplotlib

绘制折线图

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([17, 24, 15, 33, 44, 26, 37, 28])

plt.plot(x, y, c='green', alpha=0.5, label='图例')  # 数组数据传给plot,设置界面参数
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 设置中文编码
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题/让负号正常显示
plt.title('标 题', fontsize=18)
plt.xlabel('x 轴', fontsize=12)
plt.ylabel('y 轴', fontsize=12)
x_major_locator = MultipleLocator(2)  # MultipleLocator()函数设置了x轴相邻显示点的间隔
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.ylim(y.min() * 0.9, y.max() * 1.1)
plt.legend()  # 显示图例
plt.grid()  # 网格
# plt.gcf().autofmt_xdate()  # 自动旋转日期标记
plt.tick_params(labelsize=10)  # 刻度值大小
plt.show()  # 显示图形

在这里插入图片描述

def pic(data_x, data_y ,title):
    plt.plot(data_x, data_y, c='b', alpha=0.7, label='图例', linewidth=0.8)  # 数组数据传给plot,设置界面参数
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 设置中文编码
    plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题/让负号正常显示
    plt.title(title, fontsize=18)
    plt.xlabel('x 轴', fontsize=12)
    plt.ylabel('y 轴', fontsize=12)
    x_major_locator = MultipleLocator(len(data_x)/10)  # MultipleLocator()函数设置了x轴相邻显示点的间隔
    ax = plt.gca()
    ax.xaxis.set_major_locator(x_major_locator)
    plt.ylim(data_y.min() * 0, data_y.max() * 1.1)
    plt.legend()  # 显示图例
    plt.grid()  # 网格
    # plt.gcf().autofmt_xdate()  # 自动旋转日期标记
    plt.tick_params(labelsize=10)  # 刻度值大小
    plt.show()  # 显示图形

设置坐标范围

import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize=(8, 5), dpi=80)
plt.subplot(111)

X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
S = np.sin(X)
C = np.cos(X)

plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")

plt.xlim(X.min() * 1.1, X.max() * 1.1)
plt.ylim(C.min() * 1.5, C.max() * 1.5)

plt.show()

在这里插入图片描述

Matplotlib.pyplot中subplot

plt.subplot作用是把一个绘图区域(可以理解成画布)分成多个小区域,用来绘制多个子图。

nrows和ncols表示将画布分成(nrows*ncols)个小区域,每个小区域可以单独绘制图形;plot_number表示将图绘制在第plot_number个子区域。

subplot(nrows, ncols, plot_number)
from matplotlib import pyplot
import pandas as pd
df = pd.DataFrame({'$a': [1, 12, 13, 14, 15],
                   '$b': [12, 1, 14, 15, 16],
                   '$c': [13, 14, 1, 16, 17],
                   '$d': [13, 14, 15, 1, 17],
                   '$e': [14, 15, 16, 17, 1]})
values = df.values
groups = [0, 1, 2, 3, 4]
i = 1
# plot each column
pyplot.figure()
for group in groups:
	pyplot.subplot(len(groups), 1, i)
	pyplot.plot(values[:, group])
	pyplot.title(df.columns[group], y=0.5, loc='right')
	i += 1
pyplot.show()

在这里插入图片描述

subplot绘制子图的排布和极坐标图绘制

import numpy as np
import matplotlib.pylab as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
import math
pi = math.pi
x = np.linspace(0, 2*pi, 1000)
y = np.abs(np.cos(x))
xmajorLocator   = MultipleLocator(pi/4) #将x主刻度标签设置为pi/4的倍数
xmajorFormatter = FormatStrFormatter('%1.1f') #设置x轴标签文本的格式
xminorLocator   = MultipleLocator(pi/8) #将x轴次刻度标签设置为pi/8的倍数

ymajorLocator   = MultipleLocator(0.2) #将y轴主刻度标签设置为0.2的倍数
ymajorFormatter = FormatStrFormatter('%1.1f') #设置y轴标签文本的格式
yminorLocator   = MultipleLocator(0.1) #将此y轴次刻度标签设置为0.1的倍数
ax1 = plt.subplot(121)#1代表行,2代表列,所以一共有2个图,1代表此时绘制第二个图。其中ax1是为了坐标轴主次刻度大小的设置
plt.plot(x, y) #绘制x-y直角坐标图
#设置主刻度标签的位置,标签文本的格式
ax1.xaxis.set_major_locator(xmajorLocator)
ax1.xaxis.set_major_formatter(xmajorFormatter)
ax1.yaxis.set_major_locator(ymajorLocator)
ax1.yaxis.set_major_formatter(ymajorFormatter)

#显示次刻度标签的位置,没有标签文本
ax1.xaxis.set_minor_locator(xminorLocator)
ax1.yaxis.set_minor_locator(yminorLocator)
ax1.xaxis.grid(True, which='major') #x坐标轴的网格使用主刻度
ax1.yaxis.grid(True, which='minor') #y坐标轴的网格使用次刻度
ax2 = plt.subplot(122, polar=True)#1代表行,2代表列,所以一共有2个图,2代表此时绘制第二个图。polar=True表示绘制极坐标图,其中ax2是为了坐标轴主次刻度大小的设置。
plt.plot(x,y) #x代表角度(弧度制表示),y代表与原点的距离(需为正)。
plt.show()

在这里插入图片描述

Numpy

生成随机浮点数

import numpy as np
a = np.random.uniform(10, 15, 20)
print(a)

合并数组

import numpy as np

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

Pandas

写入和读取csv文件

import pandas as pd

# 任意的多组列表
a = [1, 2, 3]
b = [4, 5, 6]

# 字典中的key值即为csv中列名
dataframe = pd.DataFrame({'a_name': a, 'b_name': b})

# 将DataFrame存储为csv,index表示是否显示行名,default=True
dataframe.to_csv('F:/pic3/' + "test.csv", index=False, sep=',')

# read
import pandas as pd
data = pd.read_csv('test.csv')

csv文件数据切片

import pandas as pd
import numpy as np
data = pd.read_csv(".csv")

data_1 = data.iloc[:,0]  # data.iloc[:,0:2]获取从0列开始的两列
data_1 =np.array(data_1)
print(data_1)

pandas内置set_option()在pycharm控制台打印完整结果

import pandas as pd
pd.set_option('display.max_columns', 1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth', 1000)

用columns修改列名

有一个DataFrame,列名为:[‘ a ′ , ′ a', ' a,b’, ‘ c ′ , ′ c', ' c,d’, ‘$e’]
现在要修改为[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

import pandas as pd
df = pd.DataFrame({'$a': [1, 2], '$b': [1, 2], '$c': [1, 2], '$d': [1, 2], '$e': [1, 2]})
print(df)
df.columns = ['a', 'b', 'c', 'd', 'e']
print(df)
=============================================================================================
   $a  $b  $c  $d  $e
0   1   1   1   1   1
1   2   2   2   2   2
   a  b  c  d  e
0  1  1  1  1  1
1  2  2  2  2  2

二维数组与三维数组切片

如果对象是二维数组,则切片应当是x[:]的形式,里面有一个冒号,冒号之前和之后分别表示对象的第0个维度和第1个维度;
如果对象是三维数组,则切片应当是x[::],里面有两个冒号,分割出三个间隔,三个间隔的前、中和后分别表示对象的第0、1、2个维度。

x[n,:]、x[:,n]、x[m:n,:]、x[:,m:n]
用 “:” 前后区分操作对应的维度,操作命令参数与冒号之间用逗号隔开。
(m:n)则表示对第m号到第n-1号元素操作,即左闭右开区间。
举例:

import numpy as np
a = np.array([[1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7],
              [2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7],
              [3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7]])
print(a.shape)
print('第0行', a[0, :], a[0, :].shape)
print('第1行', a[1, :], a[1, :].shape)
print('倒1行', a[-1, :], a[-1, :].shape)
print('倒2行', a[-2, :], a[-2, :].shape)
print('0-1行', a[0:2, :], a[0:2, :].shape)
print('第0列', a[:, 0], a[:, 0].shape)
print('第1列', a[:, 1], a[:, 1].shape)
print('倒1列', a[:, -1], a[:, -1].shape)
print('0-1列', a[:, 0:2], a[:, 0:2].shape)
=============================================================================================
(3, 7)0[1.1 1.2 1.3 1.4 1.5 1.6 1.7] (7,)1[2.1 2.2 2.3 2.4 2.5 2.6 2.7] (7,)1[3.1 3.2 3.3 3.4 3.5 3.6 3.7] (7,)2[2.1 2.2 2.3 2.4 2.5 2.6 2.7] (7,)
0-1[[1.1 1.2 1.3 1.4 1.5 1.6 1.7]
       [2.1 2.2 2.3 2.4 2.5 2.6 2.7]] (2, 7)0[1.1 2.1 3.1] (3,)1[1.2 2.2 3.2] (3,)1[1.7 2.7 3.7] (3,)
0-1[[1.1 1.2]
       [2.1 2.2]
       [3.1 3.2]] (3, 2)

x[n,::]、x[:,n:]、x[::,n]、x[:,:,n]、x[m:n,::]、x[:,m:n:]、x[::,m:n]、x[:,:,m:n]

import numpy as np
b = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]],
              [[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]],
              [[25, 26, 27, 28], [29, 30, 31, 32], [33, 34, 35, 36]],
              ])
print(b.shape)
print(b[0, ::], b[0, ::].shape, 'b[0, ::]')
print(b[1, ::], b[1, ::].shape, 'b[1, ::]')
print(b[-1, ::], b[-1, ::].shape, 'b[-1, ::]')
print(b[0:2, ::], b[0:2, ::].shape, 'b[0:2, ::]')
print('============================================')
print(b[:, 0:], b[:, 0:].shape, 'b[:, 0:]')
print(b[:, 1:], b[:, 1:].shape, 'b[:, 1:]')
print(b[:, -1:], b[:, -1:].shape, 'b[:, -1:]')
print(b[:, 0:2:], b[:, 0:2:].shape, 'b[:, 0:2:]')
print('============================================')
print(b[::, 0], b[::, 0].shape, 'b[::, 0]')
print(b[::, 1], b[::, 1].shape, 'b[::, 1]')
print(b[::, -1], b[::, -1].shape, 'b[::, -1]')
print(b[::, 0:2:], b[::, 0:2].shape, 'b[::, 0:2:]')
print('============================================')
print(b[:, :, 0], b[:, :, 0].shape, 'b[:, :, 0]')
print(b[:, :, 1], b[:, :, 1].shape, 'b[:, :, 1]')
print(b[:, :, -1], b[:, :, -1].shape, 'b[:, :, -1]')
print(b[:, :, 0:2:], b[:, :, 0:2].shape, 'b[:, :, 0:2:]')
=============================================================================================
(3, 3, 4)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]] (3, 4) b[0, ::]
[[13 14 15 16]
 [17 18 19 20]
 [21 22 23 24]] (3, 4) b[1, ::]
[[25 26 27 28]
 [29 30 31 32]
 [33 34 35 36]] (3, 4) b[-1, ::]
[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]
 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]] (2, 3, 4) b[0:2, ::]
============================================
[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]
 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]
 [[25 26 27 28]
  [29 30 31 32]
  [33 34 35 36]]] (3, 3, 4) b[:, 0:]
[[[ 5  6  7  8]
  [ 9 10 11 12]]
 [[17 18 19 20]
  [21 22 23 24]]
 [[29 30 31 32]
  [33 34 35 36]]] (3, 2, 4) b[:, 1:]
[[[ 9 10 11 12]]
 [[21 22 23 24]]
 [[33 34 35 36]]] (3, 1, 4) b[:, -1:]
[[[ 1  2  3  4]
  [ 5  6  7  8]]
 [[13 14 15 16]
  [17 18 19 20]]
 [[25 26 27 28]
  [29 30 31 32]]] (3, 2, 4) b[:, 0:2:]
============================================
[[ 1  2  3  4]
 [13 14 15 16]
 [25 26 27 28]] (3, 4) b[::, 0]
[[ 5  6  7  8]
 [17 18 19 20]
 [29 30 31 32]] (3, 4) b[::, 1]
[[ 9 10 11 12]
 [21 22 23 24]
 [33 34 35 36]] (3, 4) b[::, -1]
[[[ 1  2  3  4]
  [ 5  6  7  8]]
 [[13 14 15 16]
  [17 18 19 20]]
 [[25 26 27 28]
  [29 30 31 32]]] (3, 2, 4) b[::, 0:2:]
============================================
[[ 1  5  9]
 [13 17 21]
 [25 29 33]] (3, 3) b[:, :, 0]
[[ 2  6 10]
 [14 18 22]
 [26 30 34]] (3, 3) b[:, :, 1]
[[ 4  8 12]
 [16 20 24]
 [28 32 36]] (3, 3) b[:, :, -1]
[[[ 1  2]
  [ 5  6]
  [ 9 10]]
 [[13 14]
  [17 18]
  [21 22]]
 [[25 26]
  [29 30]
  [33 34]]] (3, 3, 2) b[:, :, 0:2:]

Scipy

插值

# 三角函数插值
import numpy as np
from scipy import interpolate
import pylab as pl

x = np.linspace(0, 10, 11)
y = np.sin(x)

xnew = np.linspace(0, 10, 101)

pl.plot(x, y, 'ro')
list1 = ['linear', 'nearest', 'zero', 'slinear', 'quadratic', 'cubic']  # zero, slinear, quadratic, cubic(0123次样条插值)
list2 = [0, 1, 2, 3]
for kind in list1:
    print(kind)
    f = interpolate.interp1d(x, y, kind=kind)
    # f是一个函数,用这个函数就可以找插值点的函数值了:
    ynew = f(xnew)
    pl.plot(xnew, ynew, label=kind)

pl.legend(loc='lower right')
pl.show()

在这里插入图片描述

datetime

时间标签转换与修改

from datetime import datetime
now = datetime.now()
print(now.strftime('%a, %b %d %H:%M'))

cday = datetime.strptime('2017-8-1 18:20:20', '%Y-%m-%d %H:%M:%S')
print(cday)
# %%
from datetime import datetime, timedelta
now = datetime.now()
print(now, '现在时间')

now = now + timedelta(hours=10)
print(now, '+ 10 hours')

now = now - timedelta(days=1)
print(now, '- 1 day')

now = now + timedelta(days=2, hours=12)
print(now, '+ 2 day, + 12 hours')

print(datetime(2017, 5, 18, 16, 57, 3, 540997))

program

读取文件夹中所有csv并分别绘图

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
import pandas as pd
import os

'''
    按文件夹下csv文件名依次读取数据,各自作图以判断数据整体状态特点
'''

file_dir = "F:/"
files = []
root = ''
for root, dirs, files in os.walk(file_dir, topdown=False):
    print(root)     # 当前目录路径
    print(dirs)     # 当前目录下所有子目录
    print(files)        # 当前路径下所有非目录子文件(文件名)
print(files.__len__())      # 子文件数目
print(files[0])


def pic(a, b, n):  # 根据 a(列数据) 、n(序号)和 b(标签名) 显示图像
    plt.plot(n, a, c='b', alpha=0.5, label='', linewidth=0.2)  # 数组数据传给plot,设置界面参数
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 设置中文编码
    plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题/让负号正常显示
    plt.title(b, fontsize=18)
    plt.xlabel('', fontsize=12)
    plt.ylabel('', fontsize=12)
    x_major_locator = MultipleLocator(len(n)/20)  # MultipleLocator()函数设置了x轴相邻显示点的间隔
    ax = plt.gca()
    ax.xaxis.set_major_locator(x_major_locator)
    plt.grid()  # 网格
    plt.gcf().autofmt_xdate()  # 自动旋转日期标记
    plt.tick_params(labelsize=6)  # 刻度值大小
    plt.savefig('F:/'+header1+'.jpg')
    plt.show()  # 显示图形


for i in range(files.__len__()):  #
    data = pd.read_csv(root+'/'+files[i], encoding='GB18030', index_col=False)  # encoding='GB18030'识别汉字表头;index_col=False 使得pandas不用第一列做索引(行名)
    column_headers = list(data.columns.values)
    data1 = data['值']
    data1 = np.array(data1)
    header1 = os.path.splitext(files[i])[0]
    print(data1)
    print(header1)
    length = data1.__len__()
    num = np.arange(1, length+1)
    pic(data1, header1, num)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值