Jupyter Notebook
使用jupyter notebook时,我们时常会发现文件会自动生成一个.ipynb_checkpoints的文件夹,相当于对jupyter操作的备份,这里保存了jupyter notebook的检查点,以以备在不时之需恢复数据
Anaconda
这个软件下载之后可以不用下载python,里面有numpy、pandas、matplotlib等库函数
Numpy
- 创建2个包含10个元素的正态分布一维数组
- 请按照要求创建数组ar,再将ar[:2,:2]的值改成[0,1)的随机数
使用randn才能产生随机数,用rand不行
-
按照要求创建数组,通过索引,其ar[4],ar[:2,3:],ar[3][2]分别是多少
-
按照要求创建数组,筛选出元素值大于5的值并生成新的数组
np.ones(shape, dtype, order = 'C')
1. shape表示几行几列,值默认为1
2. dtype指定数值类型,默认时float64
3. 'C'行有先排列,'F'列优先排列
np.zeros()与上面的函数类似
import numpy as np
array = np.ones(3)
array
array([1.,1.,1.])
import numpy as np
array = np.ones((2,3))
array
array([[1.,1.,1.],
[1.,1.,1.]])
import numpy as np
array = np.ones((2,3),dtype = int)
array
array([[1,1,1],
[1,1,1]])
import numpy as np
array = np.ones((2,3),dtype = [('x','int'),('y','float')])
array
array([[(1,1.),(1,1.),(1,1.)],
[(1,1.),(1,1.),(1,1.)]], dtype=[('x', '<i4'),('y','<f8')])
更多切片索引的内容,参照Python列表操作小技巧——索引、切片、增添、删除、修改和其他用法
Pandas
- 创建(写入)和读取csv文件,index=True
>>> df.to_csv('myDataFrame.csv', index=1)
>>> pd.read_csv('myDataFrame.csv', nrows=5)
Unnamed: 0 Country Capital Population
0 Country Belgium Brussels 11190846
1 Capital India New Delhi 1303171035
2 Population Brazil Brasília 207847528
>>> df.to_csv('myDataFrame.csv', index=True)
>>> pd.read_csv('myDataFrame.csv', nrows=5)
Unnamed: 0 Country Capital Population
0 Country Belgium Brussels 11190846
1 Capital India New Delhi 1303171035
2 Population Brazil Brasília 207847528
2. 写入和读取csv文件,index=False
>>> df.to_csv('myDataFrame.csv', index=0)
>>> pd.read_csv('myDataFrame.csv', nrows=5)
Country Capital Population
0 Belgium Brussels 11190846
1 India New Delhi 1303171035
2 Brazil Brasília 207847528
3. loc()和iloc()、at()的区别
- iat按位置取值
- at按标签取值
- iloc()按位置取值
- loc()按标签取值
>>> df.loc[2] #选择某行
Country Brazil
Capital Brasília
Population 207847528
Name: 2, dtype: object
>>> df.loc[:, 'Capital'] #选择某列
0 Brussels
1 New Delhi
2 Brasília
Name: Capital, dtype: object
>>> df.loc[1, 'Capital'] #按行列取值
'New Delhi'
4. 排序和排名
按照数据帧排序
>>> df.rank()
5. 查询信息与计算
应用函数
通过apply函数应用变换
f = lambda x: x*2 #应用匿名函数lambda
df.apply(f) # 应用函数
df.applymap(f) #对每个单元格应用函数
使用 Fill 方法运算
还可以使用 Fill 方法补齐缺失后再运算:
s.add(s3, fill_value=0)
s.sub(s3, fill_value=2)
s.div(s3, fill_value=4)
s.mul(s3, fill_value=3)
matplotlib.pyplot
plt.figure();
df.iloc[5].plot.bar();
plt.axhline(0, color="k") # 分界线的颜色,如果是'r'则为红色
其他的用法详细看网址pandas的可视化教程
鸢尾花数据集特征提取
# 导入各种包
# sklearn自带的训练数据集
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
data = load_iris()
# 鸢尾花数据集简介
print(data.DESCR)
# 鸢尾花数据集特征列表
# feature_names为特征名词
print(u't'.join(data.feature_names))
# 鸢尾花数据集数据
print(u'%stlabel' % (u't'.join(data.feature_names)))
# 鸢尾花数据集数据 每个类别取5条数据
for sample_data, sample_label in zip(data.data, data.target):
sample_data_str = u't'.join([str(w) for w in sample_data])
sample_label_str = data.target_names[sample_label]
print("%st%s"% (sample_data_str, sample_label_str))
colors = ['red', 'dodgerblue','lime']
attr_index1 = 0
atrr_index2 = 2
print(u'%stlabel' % (u't'.join((data.feature_names[attr_index1], data.feature_names[atrr_index2]))))
for label_ser, label_name in enumerate(data.target_names):
category_data = data.data[data.target==label_ser][:][:,(attr_index1, atrr_index2)]
for sample_data in category_data:
sample_data_str = u't'.join([str(w) for w in sample_data])
#print("%st%s" % (sample_data_str, label_name))
plt.scatter(category_data[:,0], category_data[:,1], c=colors[label_ser], marker='x')
plt.xlabel(data.feature_names[attr_index1])
plt.ylabel(data.feature_names[atrr_index2])
plt.title("iris data")
plt.show()
下面来具体分析一下:
# 鸢尾花数据集特征列表
print(u't'.join(data.feature_names))
结果:
sepal length (cm)tsepal width (cm)tpetal length (cm)tpetal width (cm)
如果不加上u't',出来的是一个集合。
# 鸢尾花数据集特征列表
print(data.feature_names)
结果:
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
结果:
sepal length (cm)tsepal width (cm)tpetal length (cm)tpetal width (cm)tlabel
# 多了一个tlabel
u是用来解决乱码问题而加上的,但是为什么会是多了个"t"+其他字符串的形式呢?还没搞懂哈哈哈