数据科学学习笔记2||python进行数据运算和读取写入

目录

一、运用Python进行向量、矩阵运算

1.导入相应的库

2. 举例:计算矩阵内积XY

3.创建特殊矩阵

4. 矩阵的转置、逆矩阵和特征值

二、Python介绍

1. 数值表示

2. 文件编码类型

3. 数据的读取和保存  


一、运用Python进行向量、矩阵运算

1.导入相应的库

import numpy as np
# numpy: 科学计算基本库;提供高效的N维数组和向量运算。
# Numerical Python的简写。

2. 举例:计算矩阵内积XY

    matrix是array的分支,很多时候是通用的,但官方建议是选择array更好,因为array更灵活,速度更快。matrix的优势是相对简单的运算符号。比如两个矩阵相乘,就是用符号*,但是array相乘不能这么用,得使用.dot()

# np.dot(X, Y),矩阵内积: XY   
A = np.array([[1., 2., 3.], [4., 5., 6.]])
B = np.matrix([[1., 2., 3.], [4., 5., 6.]])

# array创建数组最简单的办法
# 每个数组都有1个shape(1个表示各维度大小的元组)和
# 1个dtype(1个用于说明数组数据类型的对象)

A.dtype      # 返回:dtype('float64')
A.shape      # 返回:(2, 3)

print('A = ', A)
B = np.array([[6., 23.], [-1., 7.], [8., 9.]])
print('B = ', B)

A.dot(B) #等价于 np.dot(A, B)
A@B #特殊符号@也可以用于矩阵的内积
    # 返回: array([[  28.,   64.],[  67.,  181.]])

#--------------------------------------------------

np.dot(A, np.ones(3))   # np.ones(3) 返回 array([ 1.,  1.,  1.])
A@np.ones(3)

#特殊符号*表示矩阵的逐元素乘积 A*B,矩阵A、B的维数应一致
A*A

3.创建特殊矩阵

np.zeros([3, 2]) # 全零矩阵
#返回:array([[ 0.,  0.],
#       [ 0.,  0.],
#       [ 0.,  0.]])

np.identity(3) # 单位阵
#返回:array([[ 1.,  0.,  0.],
#       [ 0.,  1.,  0.],
#       [ 0.,  0.,  1.]])

np.diag([1, 2, 3]) # 对角阵
#返回:array([[1, 0, 0],
#       [0, 2, 0],
#       [0, 0, 3]])

4. 矩阵的转置、逆矩阵和特征值

    numpy.linalg拥有一个矩阵分解的标准函数集。

  • A.T:返回A的转置
  • inv(A):返回A的逆矩阵
  • eig(A):返回A的特征值和特征向量
from numpy.linalg  import inv, eig
#矩阵的逆矩阵 inv
#矩阵的转置 A.T 
A = np.array([[1., 2., 3.], [4., 5., 6.]])

A.T        # 返回:array([[ 1.,  4.],[ 2.,  5.],[ 3.,  6.]])
A.dot(A.T) # 返回:array([[ 14.,  32.],[ 32.,  77.]])

C = inv(A.dot(A.T)) # 返回:array([[ 1.42592593, -0.59259259],[-0.59259259,  0.25925926]])
C.dot(A.dot(A.T))   # 返回:array([[ 1.,  0.],[ 0.,  1.]])

#矩阵特征值和特征向量
eigvalues, eigvectors = eig(C) 
# eigvalues返回:array([ 1.67412357,  0.01106162])
# eigvectors返回:array([[ 0.92236578,  0.3863177 ],[-0.3863177 ,  0.92236578]])

二、Python介绍

1. 数值表示

# 标量
x = 1
y = 1.

print('Type of x', type(x))  #返回:Type of x <class 'int'>
print('Type of y', type(y))  #返回:Type of y <class 'float'>

# 当在Python中创建变量(或名字),你就在等号右边创建了一个对这个变量的引用。
# 考虑一个整数列表:
a = [1, 2, 3]

# 假设将a赋值给新变量b,c:
b = a

# 假设将a赋值给新变量b,c:
c = b

# a, b, c指向同一个对象

a.append(4) 

print('a = ', a)
print('b = ', b)
print('c = ', c)
# 返回:a =  [1, 2, 3, 4]
#       b =  [1, 2, 3, 4]
#       c =  [1, 2, 3, 4]

2. 文件编码类型

     PY文件当中是不支持中文的,即使你输入的注释是中文也不行。为了解决这个问题,就需要把文件编码类型改为UTF-8的类型:  

     文件开头加上“# -*- coding: UTF-8 -*-”

3. 数据的读取和保存  

     数据输入路径,可以是文件路径,也可以是 URL(网络地址),或者实现 read 方法的任意对象。

# 数据的读取和保存

import pandas as pd
# pandas: 数据结构和数据分析库。
# 来源于panel data;也是Python Data Analysis的简写短语。

# read_csv: 从文件、URL或文件型对象读取分隔好的数据,逗号是默认分隔符; 
# 数据类型:DataFrame
# DataFrame表示的是矩阵的数据表,既有行索引,也有列索引

URL = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
Iris_data = pd.read_csv(URL)
print(Iris_data)

# 函数帮助
help(pd.read_csv)

    header: 设置导入 DataFrame 的列名称,默认为 'infer',注意它与下面介绍的 names 参数的微妙关系。

    names:当names没被赋值时,header会变成0,即选取数据文件的第一行作为列名。当 names 被赋值,header 没被赋值时,那么header会变成None。如果都赋值,就会实现两个参数的组合功能。

path = "E:\\Work at STU\\Data\\lecture1.csv"
df = pd.read_csv(path, encoding = 'gbk')
print('df =', df)
#返回:df =   name    age  gender
#    0     王二    18      男
#    1     张三    17      女
#    2     李四    16      男

df1 = pd.read_csv(path, header = 0, encoding = 'gbk')
print('df1 =', df1)
#返回:df1 =   name    age  gender
#    0     王二    18      男
#    1     张三    17      女
#    2     李四    16      男

df2 = pd.read_csv(path, header = None, encoding = 'gbk')
print('df2 =', df2)
#返回:df2 =         0     1       2
#    0  name    age   gender
#    1      王二    18       男
#    2      张三    17       女
#    3      李四    16       男

df3 = pd.read_csv(path, header = 0, names = ["姓名", "年龄", "性别"], encoding = 'gbk')
print('df3 =', df3)
#返回:df3 =    姓名  年龄 性别
#    0  王二  18  男
#    1  张三  17  女
#    2  李四  16  男

df4 = pd.read_csv(path, names = ["姓名", "年龄", "性别"], encoding = 'gbk')
print('df4 =', df4)
#返回:df4 =        姓名    年龄      性别
#    0  name    age   gender
#    1      王二    18       男
#    2      张三    17       女
#    3      李四    16       男

df5 = pd.read_csv(path, header = 1, names = ["姓名", "年龄", "性别"], encoding = 'gbk')
print('df5 =', df5)
#返回:df5 =    姓名  年龄 性别
#    0  张三  17  女
#    1  李四  16  男
"""
打印列名
"""
print(df.columns)  #返回: Index(['name  ', 'age ', 'gender'], dtype='object')  

print(df.index) #数据标签, 索引(index); 
                #返回:RangeIndex(start=0, stop=3, step=1)
"""
每个索引都具有集合逻辑的方法和属性;
交集(index1&index2, index1.intersection(index2))、
并集 (index1|index2, index1.union(index2))
差集 (index1-index2, index1.difference(index2))
"""
m, n = df.shape   #DataFrame的维数   
print('m =', m)   #返回:3
print('n =', n)   #返回:3

  保存数据写入文本格式,使用to_csv函数

  header:是否保留列名(True or False)

  index: 是否保留行索引(True or False)

# 将数据写入文本格式
path = "E:\\lecture1_2.csv"
df.to_csv(path, index = False, header = True)

⚪编程提示:

  • Python使用缩进(Tab或者空格键)来组织代码;四个空格键为默认缩进。
  • 一个冒号代表一个缩进代码块的开始,单个代码块中的所有代码必须保持相同的缩进,直到代码块结束。
  • Python语句不以分号结尾;分号可以用于在一行内将多条语句之间进行分割。
  • 但是不鼓励在Python中将多条语句写成一行,因为这样会使代码可读性下降。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值