1.numpy

1.numpy基础概念
什么numpy?
快速、方便的科学计算基础库(主要是对数值的计算,多维数组的运算);
Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))
2.数组的操作
list ====== 特殊的数组
数组和列表的区别:
- 数组: 存储的时同一种数据类型;
- list:容器, 可以存储任意数据类型;

# 一维数组和数组的计算
a = [1, 2, 3, 4]
b = [2, 3, 4, 5]
add = lambda x: x[0] + x[1]
# [(1,2), (2,3), (3,4), (4,5)]
print([add(item) for item in zip(a, b)])mul = lambda x: x[0] * x[1]
# [(1,2), (2,3), (3,4), (4,5)]
print([mul(item) for item in zip(a, b)])# 二维数组和数组的计算c = [[1, 2, 3, 4],[1, 2, 3, 4]]
d = [[2, 3, 4, 5],[2, 3, 4, 5]]
#
# print(c*d)
print(c+d)
[3, 5, 7, 9]
[2, 6, 12, 20]
[[1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4, 5], [2, 3, 4, 5]]

3.numpy操作
1)numpy中如何创建数组(矩阵)?

import numpy as np
# 方法1:
a = np.array([1,2,3,4,5])
b = np.array([1,2,3,4,5])
c1 = np.array(range(1,6))
print(a+b)
print(c1)# 方法2:
c2 = np.arange(1,6)
print(c2)# 数组的类名: numpy.ndarray
print(type(c1))# 查看数据元素的类型
print(c1.dtype)
[ 2  4  6  8 10]
[1 2 3 4 5]
[1 2 3 4 5]
<class 'numpy.ndarray'>
int64

2)修改数组的数据类型

print(c1.astype('float'))
print(c1.astype('bool'))
print(c1.astype('?'))  # ?是bool类型的代号;
# 创建的时候指定数据类型
print(np.array([1,2,3,4], dtype=np.float))
[1. 2. 3. 4. 5.]
[ True  True  True  True  True]
[ True  True  True  True  True]
[1. 2. 3. 4.]

3)修改浮点数的小数位数

c3 = np.array([1.234556, 3.45464456, 5.645657567])
print(np.round(c3, 2))
.
[1.23 3.45 5.65]

4.numpy读取数据
读取eg6-a-student-data.txt 文件中的性别信息和体重信息
eg6-a-student-data.txt 文件内容:

Subject Sex    DOB      Height  Weight       BP     VO2max
(ID)    M/F  dd/mm/yy     m       kg        mmHg  mL.kg-1.min-1
JW-1     M    19/12/95    1.82     92.4    119/76   39.3
JW-2     M    11/1/96     1.77     80.9    114/73   35.5
JW-3     F    2/10/95     1.68     69.7    124/79   29.1
JW-6     M    6/7/95      1.72     75.5    110/60   45.5
# JW-7    F    28/3/96     1.66     72.4    101/68   -
JW-9     F    11/12/95    1.78     82.1    115/75   32.3
JW-10    F    7/4/96      1.60     -       -/-      30.1
JW-11    M    22/8/95     1.72     77.2    97/63    48.8
JW-12    M    23/5/96     1.83     88.9    105/70   37.7
JW-14    F    12/1/96     1.56     56.3    108/72   26.0
JW-15    F    1/6/96      1.64     65.0    99/67    35.7
JW-16    M    10/9/95     1.63     73.0    131/84   29.9
JW-17    M    17/2/96     1.67     89.8    101/76   40.2
JW-18    M    31/7/96     1.66     75.1    -/-      -
JW-19    F    30/10/95    1.59     67.3    103/69   33.5
JW-22    F    9/3/96      1.70     -       119/80   30.9
JW-23    M    15/5/95     1.97     89.2    124/82   -
JW-24    F    1/12/95     1.66     63.8    100/78   -
JW-25    F    25/10/95    1.63     64.4    -/-      28.0
JW-26    M    17/4/96     1.69     -       121/82   39.
import numpy as npfname = "doc/eg6-a-student-data.txt"
dtype = np.dtype([('gender', '|S1'), ('height', 'f2')])
# fname: 文件的名称, 可以是文件名, 也可以是ugz或者bz2的压缩文件;
# dtype: 数据类型, 可选, 默认是float;
# delimiter: 分隔符字符串, 默认情况是任何的空格,
# skiprows: 跳过前xx行, 一般情况跳过第一行;
# usecols: 读取指定的列, 可以是元组;
# unpack: 如果为True, 对返回的数组对象转置;
data = np.loadtxt(fname=fname, dtype=dtype, skiprows=9, usecols=(1, 3), unpack=True)
print(data)
[array([b'M', b'M', b'F', b'M', b'F', b'F', b'M', b'M', b'F', b'F', b'M',b'M', b'M', b'F', b'F', b'M', b'F', b'F', b'M'], dtype='|S1'), array([1.82, 1.77, 1.68, 1.72, 1.78, 1.6 , 1.72, 1.83, 1.56, 1.64, 1.63,1.67, 1.66, 1.59, 1.7 , 1.97, 1.66, 1.63, 1.69], dtype=float16)]

5.numpy数组的转置

import numpy as np# 将一维数组转换为3行4列的二维数组
data = np.arange(12).reshape((3, 4))
print(data)# 1).
print(data.transpose())# 2). 0轴 , 1 轴
print(data.swapaxes(1, 0))# 3).
print(data.T)
[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
[[ 0  4  8][ 1  5  9][ 2  6 10][ 3  7 11]]
[[ 0  4  8][ 1  5  9][ 2  6 10][ 3  7 11]]
[[ 0  4  8][ 1  5  9][ 2  6 10][ 3  7 11]]

6.numpy数组的索引和切片

import numpy as np# 将一维数组转换为3行4列的二维数组
data = np.arange(12).reshape((3, 4))
print(data)# 取第一行的数据
print(data[0])#  取第一列的数据
print(data.T[0])
print(data[:, 1])# 获取多行
print(data[:2])# 获取多行列
print(data.T[:2])
print(data[:, :2])# 获取指定行的前几列;
print(data)
print(data[[0,2], :2])
print(data[:2, [0,2]])
[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
[0 1 2 3]
[0 4 8]
[1 5 9]
[[0 1 2 3][4 5 6 7]]
[[0 4 8][1 5 9]]
[[0 1][4 5][8 9]]
[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
[[0 1][8 9]]
[[0 2][4 6]]

7)numpy中数值的修改

import numpy as np# 将一维数组转换为3行4列的二维数组
data = np.arange(12).reshape((3, 4))
print(data)# # 取第一行的数据
data[0] = 0
print(data)# # 获取多行列
data.T[:2] = 0
print(data)# # 布尔索引: 复杂的条件: data中所有大于8的数字都替换为0;
# # 返回一个三行四列的数组, 存储的是Bool值
print(data>8)
data[data>8] = 0
print(data)# 复杂的条件: data中所有大于8的数字都替换为0, 否则替换为1; a>b?a:b
print(data)
data[data<=8] = 1
data[data>8] = 0
print(data)
print(np.where(data <= 8, 1, 0))# 裁剪: 如果data<=8, 替换称8, 如果data>=10, 替换为10;
print(data)
print(data.clip(8, 10))
[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
[[ 0  0  0  0][ 4  5  6  7][ 8  9 10 11]]
[[ 0  0  0  0][ 0  0  6  7][ 0  0 10 11]]
[[False False False False][False False False False][False False  True  True]]
[[0 0 0 0][0 0 6 7][0 0 0 0]]
[[0 0 0 0][0 0 6 7][0 0 0 0]]
[[1 1 1 1][1 1 1 1][1 1 1 1]]
[[1 1 1 1][1 1 1 1][1 1 1 1]]
[[1 1 1 1][1 1 1 1][1 1 1 1]]
[[8 8 8 8][8 8 8 8][8 8 8 8]]

8.numpy中数组的拼接

import numpy as np
# 数组的拼接
t1 = np.arange(12).reshape(2, 6)
t2 = np.arange(12).reshape(2, 6)
t3 = np.arange(12).reshape(2, 6)# 竖直拼接(vertically)
print(np.vstack((t1, t2, t3)))
# 水平拼接(horizontally)
print(np.hstack((t1, t2, t3)))# *************************************************
# 数组的行列交换
t4 = np.arange(12).reshape(2, 6)
# 行交换(第一行和第二行进行交换)
print("原数据:\n", t4)
t4[[0, 1], :] = t4[[1, 0], :]
print("替换后的数据:\n", t4)# 列交换(第3列和第5列进行交换)
print("原数据:\n", t4)
t4[:, [2, 4]] = t4[:, [4, 2]]
print("替换后的数据:\n", t4)

9.numpy常用的方法

import numpy as np# 将一维数组转换为3行4列的二维数组
data = np.arange(12).reshape((3, 4))
data[0, 0] = 80
print(data)# 1. 获取最大值和最小值的位置;
# 获取当前数组里面最大值的索引;
max_item1 = np.argmax(data)
print(max_item1)# 获取每一列的最大值对应的索引;
print(np.argmax(data, axis=0))
# 获取每一行的最大值对应的索引;
print(np.argmax(data, axis=1))# 2. 创建一个全为0的数组;
print(np.zeros((3, 3), dtype=np.int))# 3. 创建一个全为1的数组;
print(np.ones((3, 4)))# 4. 创建一个对角线全为1的正方形数组(方阵)
print(np.eye(3))
[[80  1  2  3][ 4  5  6  7][ 8  9 10 11]]
0
[0 2 2 2]
[0 3 3]
[[0 0 0][0 0 0][0 0 0]]
[[1. 1. 1. 1.][1. 1. 1. 1.][1. 1. 1. 1.]]
[[1. 0. 0.][0. 1. 0.][0. 0. 1.]]

10.numpy中的深拷贝和浅拷贝

  • 列表的深拷贝和浅拷贝

    • 浅拷贝: a= b[::] a = copy.copy(b)
    • 深拷贝: a = copy.deepcopy(b)
  • numpy中的拷贝

    • data1 = data: 完全不复制, 两个变量相互影响, 指向同一块内存空间;
    • data2 = data[::], 会创建新的对象data2,但是data的数据完全由data2保管, 两个的数据变化是一致的;
    • data3 = data.copy(), 深拷贝, 两个变量不湖影响;

11.numpy中的nan和inf

nan(not a number):表示不是一个数字,代表的是数据缺失

nan的特殊属性:

  • nan是float类型

  • 两个nan的值是不相等的:

      ```>>> import numpy as np>>> data = np.arange(12,dtype=np.float).reshape(3,4)>>> data[:2,2] = np.nan>>> dataarray([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.]])data[:2, 2] = np.nandataarray([[ 0.,  1., nan,  3.],[ 4.,  5., nan,  7.],[ 8.,  9., 10., 11.]])>>> np.nan == np.nanFalse>>> np.nan != np.nanTrue```
    
  • 判断data里面的缺失值

      ```>>> data!=dataarray([[False, False,  True, False],[False, False,  True, False],[False, False, False, False]])>>> np.isnan(data)array([[False, False,  True, False],[False, False,  True, False],[False, False, False, False]])>>> dataarray([[ 0.,  1., nan,  3.],[ 4.,  5., nan,  7.],[ 8.,  9., 10., 11.]])```
    
  • 判断有多少个缺失值:

      >>> np.count_nonzero(data!=data)2       >>> np.count_nonzero(np.isnan(data))2
    

inf(infinity):inf代表正无穷,-inf代表负无穷

import numpy as npprint(np.nan)
print(np.inf)
print(-np.inf)
nan
inf
-inf

12.numpy常用的统计方法

1)求和

import numpy as np
data = np.arange(12, dtype=np.float).reshape(3, 4)
print(data.sum())
# 每一列数据的和;
print(data.sum(axis=0))
# 每一行数据的和;
print(data.sum(axis=1))
66.0
[12. 15. 18. 21.]
[ 6. 22. 38.]

2)均值

print(data.mean())
print(data.mean(axis=0))
print(data.mean(axis=1))
5.5
[4. 5. 6. 7.]
[1.5 5.5 9.5]

3)中值

print(data)
print(np.median(data))
print(np.median(data, axis=0))
print(np.median(data, axis=1))
[[ 0.  1.  2.  3.][ 4.  5.  6.  7.][ 8.  9. 10. 11.]]
5.5
[4. 5. 6. 7.]
[1.5 5.5 9.5]

4)最大值
5)最小值

print(data.max())
print(data.max(axis=0))
print(data.max(axis=1))
11.0
[ 8.  9. 10. 11.]
[ 3.  7. 11.]

6)极差

print(np.ptp(data))
print(np.ptp(data, axis=0))
print(np.ptp(data, axis=1))
11.0
[8. 8. 8. 8.]
[3. 3. 3.]

7)标准差
代表的是数据的波动稳定情况, 数字越大, 越不稳定;

print(data.std())
print(data.std(axis=0))
print(data.std(axis=1))
3.452052529534663
[3.26598632 3.26598632 3.26598632 3.26598632]
[1.11803399 1.11803399 1.11803399]

13.案例_学生身高体重统计分析

获取eg6-a-student-data.txt 文件中的身高体重信息

Subject Sex    DOB      Height  Weight       BP     VO2max
(ID)    M/F  dd/mm/yy     m       kg        mmHg  mL.kg-1.min-1
JW-1     M    19/12/95    1.82     92.4    119/76   39.3
JW-2     M    11/1/96     1.77     80.9    114/73   35.5
JW-3     F    2/10/95     1.68     69.7    124/79   29.1
JW-6     M    6/7/95      1.72     75.5    110/60   45.5
# JW-7    F    28/3/96     1.66     72.4    101/68   -
JW-9     F    11/12/95    1.78     82.1    115/75   32.3
JW-10    F    7/4/96      1.60     -       -/-      30.1
JW-11    M    22/8/95     1.72     77.2    97/63    48.8
JW-12    M    23/5/96     1.83     88.9    105/70   37.7
JW-14    F    12/1/96     1.56     56.3    108/72   26.0
JW-15    F    1/6/96      1.64     65.0    99/67    35.7
JW-16    M    10/9/95     1.63     73.0    131/84   29.9
JW-17    M    17/2/96     1.67     89.8    101/76   40.2
JW-18    M    31/7/96     1.66     75.1    -/-      -
JW-19    F    30/10/95    1.59     67.3    103/69   33.5
JW-22    F    9/3/96      1.70     -       119/80   30.9
JW-23    M    15/5/95     1.97     89.2    124/82   -
JW-24    F    1/12/95     1.66     63.8    100/78   -
JW-25    F    25/10/95    1.63     64.4    -/-      28.0
JW-26    M    17/4/96     1.69     -       121/82   39.

需求1:
获取所有男生的身高,求平均值;
获取所有女生的身高,求平均值;
并绘制柱状图显示。

import numpy as np
from pyecharts import Barfilename = 'doc/eg6-a-student-data.txt'
datatype = np.dtype([('gender', '|S1'), ('height', 'f4')])
data = np.loadtxt(fname=filename, dtype=datatype, skiprows=9, usecols=(1, 3))# 判断性别是否为男性
isMale = data['gender'] == b'M'
male_avg_height = data['height'][isMale].mean()
female_avg_height = data['height'][~isMale].mean()
np.round(male_avg_height,2)
np.round(female_avg_height,2)bar = Bar(title="不同性别身高的平均值")
bar.add("", ["男", '女'], [male_avg_height, female_avg_height])
bar.render()

需求2:
获取所有男生的身高体重,求平均值;
获取所有女生的身高体重,求平均值;
并绘制柱状图显示。

import numpy as np
from pyecharts import Bardef parser_weight(weight):# 对于体重数据的处理, 如果不能转换为浮点数据类型, 则返回缺失值;try:return float(weight)except ValueError as e:return np.nanfilename = 'doc/eg6-a-student-data.txt'
datatype = np.dtype([('gender', '|S1'), ('height', 'f4'), ('weight', 'f4')])
data = np.loadtxt(fname=filename, dtype=datatype, skiprows=9, usecols=(1, 3, 4),converters={4:parser_weight})# 判断性别是否为男性
isMale = data['gender'] == b'M'
male_avg_height = data['height'][isMale].mean()
female_avg_height = data['height'][~isMale].mean()
np.round(male_avg_height,2)
np.round(female_avg_height,2)# 判断是否性别为男的平均体重
is_weight_vaild = data['weight'] == data['weight']
male_avg_weight = data['weight'][isMale & is_weight_vaild].mean()
female_avg_weight = data['weight'][~isMale & is_weight_vaild].mean()
np.round(male_avg_weight,2)
np.round(female_avg_weight,2)bar = Bar(title="不同性别身高体重的平均值")
bar.add("身高", ["男", '女'], [male_avg_height, female_avg_height])
bar.add("体重", ["男", '女'], [male_avg_weight, female_avg_weight])bar.render()


14.基于numpy的股价统计分析应用
data.csv文件中存储了股票的信息, 其中第4-8列,即EXCEL表格中的D-H列,
分别为股票的开盘价,最高价,最低价,收盘价,成交量。
分析角度:
1. 计算成交量加权平均价格
概念:成交量加权平均价格,英文名VWAP(Volume-Weighted Average Price,成交量加权平均价格)是一个非常重要的经
济学量,代表着金融资产的“平均”价格。
某个价格的成交量越大,该价格所占的权重就越大。VWAP就是以成交量为权重计算出来的加权平均值。
2. 计算最大值和最小值: 计算股价近期最高价的最大值和最低价的最小值
3. 计算股价近期最高价的最大值和最小值的差值;----(极差)
计算股价近期最低价的最大值和最小值的差值
4. 计算收盘价的中位数
5. 计算收盘价的方差
6. 计算对数收益率, 股票收益率、年波动率及月波动率
***收盘价的分析常常是基于股票收益率的。
股票收益率又可以分为简单收益率和对数收益率。
简单收益率:是指相邻两个价格之间的变化率。
对数收益率:是指所有价格取对数后两两之间的差值。
# [1, 2,3 4] ======>[-1, ]
***使用的方法: NumPy中的diff函数可以返回一个由相邻数组元素的差值构成的数组。
不过需要注意的是,diff返回的数组比收盘价数组少一个元素。
***在投资学中,波动率是对价格变动的一种度量,历史波动率可以根据历史价格数据计算得出。计算历史波动率时,需要用
到对数收益率。
年波动率等于对数收益率的标准差除以其均值,再乘以交易日的平方根,通常交易日取252天。
月波动率等于对数收益率的标准差除以其均值,再乘以交易月的平方根。通常交易月取12月
7. 获取该时间范围内交易日周一、周二、周三、周四、周五分别对应的平均收盘价
8. 平均收盘价最低,最高分别为星期几

#data.csv

AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
AAPL,31-01-2011, ,335.8,340.04,334.3,339.32,13473000
AAPL,01-02-2011, ,341.3,345.65,340.98,345.03,15236800
AAPL,02-02-2011, ,344.45,345.25,343.55,344.32,9242600
AAPL,03-02-2011, ,343.8,344.24,338.55,343.44,14064100
AAPL,04-02-2011, ,343.61,346.7,343.51,346.5,11494200
AAPL,07-02-2011, ,347.89,353.25,347.64,351.88,17322100
AAPL,08-02-2011, ,353.68,355.52,352.15,355.2,13608500
AAPL,09-02-2011, ,355.19,359,354.87,358.16,17240800
AAPL,10-02-2011, ,357.39,360,348,354.54,33162400
AAPL,11-02-2011, ,354.75,357.8,353.54,356.85,13127500
AAPL,14-02-2011, ,356.79,359.48,356.71,359.18,11086200
AAPL,15-02-2011, ,359.19,359.97,357.55,359.9,10149000
AAPL,16-02-2011, ,360.8,364.9,360.5,363.13,17184100
AAPL,17-02-2011, ,357.1,360.27,356.52,358.3,18949000
AAPL,18-02-2011, ,358.21,359.5,349.52,350.56,29144500
AAPL,22-02-2011, ,342.05,345.4,337.72,338.61,31162200
AAPL,23-02-2011, ,338.77,344.64,338.61,342.62,23994700
AAPL,24-02-2011, ,344.02,345.15,338.37,342.88,17853500
AAPL,25-02-2011, ,345.29,348.43,344.8,348.16,13572000
AAPL,28-02-2011, ,351.21,355.05,351.12,353.21,14395400
AAPL,01-03-2011, ,355.47,355.72,347.68,349.31,16290300
AAPL,02-03-2011, ,349.96,354.35,348.4,352.12,21521000
AAPL,03-03-2011, ,357.2,359.79,355.92,359.56,17885200
AAPL,04-03-2011, ,360.07,360.29,357.75,360,16188000
AAPL,07-03-2011, ,361.11,361.67,351.31,355.36,19504300
AAPL,08-03-2011, ,354.91,357.4,352.25,355.76,12718000
AAPL,09-03-2011, ,354.69,354.76,350.6,352.47,16192700
AAPL,10-03-2011, ,349.69,349.77,344.9,346.67,18138800
AAPL,11-03-2011, ,345.4,352.32,345,351.99,16824200
import numpy as npprint("**********************************************")params1 = dict(fname="doc/data.csv",delimiter=",",usecols=(6, 7),unpack=True)
# 收盘价,成交量
endPrice, countNum = np.loadtxt(**params1)
# print(endPrice, countNum)
VWAP = np.average(endPrice, weights=countNum)
print("1. 计算成交量加权平均价格:", VWAP)print("**********************************************")
params2 = dict(fname="doc/data.csv",delimiter=",",usecols=(4, 5),unpack=True)
# 最高价和最低价
highPrice, lowPrice = np.loadtxt(**params2)# 最高价的最大值和最低价的最小值
print("2.最高价的最大值: ", highPrice.max())
print("2.最低价的最小值: ", lowPrice.min())print("**********************************************")
# 计算股价近期最高价的最大值和最小值的差值;----(极差)
#     计算股价近期最低价的最大值和最小值的差值print("3. 近期最高价的极差: ", np.ptp(highPrice))
print("3. 近期最低价的极差: ", np.ptp(lowPrice))print("**********************************************")
# 计算收盘价的中位数
print("4. 计算收盘价的中位数:", np.median(countNum))print("**********************************************")
# 计算收盘价的方差
print("5. 计算收盘价的方差:", np.var(endPrice))print("**********************************************")
def get_week(date):"""根据传入的日期28-01-2011获取星期数, 0-星期一"""from datetime import datetime# 默认传入的不是字符串, 是bytes类型;date = date.decode('utf-8')return datetime.strptime(date, "%d-%m-%Y").weekday()
params3 = dict(fname="doc/data.csv",delimiter=",",usecols=(1, 6),converters={1: get_week},unpack=True)
# 星期数和收盘价
week, endPrice = np.loadtxt(**params3)
allAvg = []
for weekday in range(5):average = endPrice[week == weekday].mean()allAvg.append(average)print("7. 星期%s的平均收盘价:%s" % (weekday + 1, average))print("**********************************************")
# [12, 23, 34, 45, 56]
print("8.平均收盘价最低是星期", np.argmin(allAvg) + 1)
print("8. 平均收盘价最高是星期", np.argmax(allAvg) + 1)print("***********************************************************")
# 简单收益率
simpleReturn = np.diff(endPrice)
print(simpleReturn)
# 对数收益率: 所有价格取对数后两两之间的差值。
logReturn = np.diff(np.log(endPrice))
print("6. 对数收益率:", logReturn)
# 年波动率等于对数收益率的标准差除以其均值,再乘以交易日的平方根,通常交易日取252天。
annual_vol = logReturn.std()/logReturn.mean()*np.sqrt(252)
print("6. 年波动率:",  annual_vol)
#  月波动率等于对数收益率的标准差除以其均值,再乘以交易月的平方根。通常交易月取12月。
month_vol = logReturn.std()/logReturn.mean()*np.sqrt(12)
print("6. 月波动率:", month_vol)
**********************************************
1. 计算成交量加权平均价格: 350.5895493532009
**********************************************
2.最高价的最大值:  364.9
2.最低价的最小值:  333.53
**********************************************
3. 近期最高价的极差:  24.859999999999957
3. 近期最低价的极差:  26.970000000000027
**********************************************
4. 计算收盘价的中位数: 16557250.0
**********************************************
5. 计算收盘价的方差: 50.126517888888884
**********************************************
7. 星期1的平均收盘价:351.7900000000001
7. 星期2的平均收盘价:350.63500000000005
7. 星期3的平均收盘价:352.1366666666666
7. 星期4的平均收盘价:350.8983333333333
7. 星期5的平均收盘价:350.0228571428571
**********************************************
8.平均收盘价最低是星期 5
8. 平均收盘价最高是星期 3
***********************************************************
[  3.22   5.71  -0.71  -0.88   3.06   5.38   3.32   2.96  -3.62   2.312.33   0.72   3.23  -4.83  -7.74 -11.95   4.01   0.26   5.28   5.05-3.9    2.81   7.44   0.44  -4.64   0.4   -3.29  -5.8    5.32]
6. 对数收益率: [ 0.00953488  0.01668775 -0.00205991 -0.00255903  0.00887039  0.015407390.0093908   0.0082988  -0.01015864  0.00649435  0.00650813  0.002002560.00893468 -0.01339027 -0.02183875 -0.03468287  0.01177296  0.000758570.01528161  0.01440064 -0.011103    0.00801225  0.02090904  0.00122297-0.01297267  0.00112499 -0.00929083 -0.01659219  0.01522945]
6. 年波动率: 129.27478991115134
6. 月波动率: 28.210071915112593

15.练习题目

  1. 创建一个 5x5 的二维数组,其中边界值为1,其余值为0;

    • np.zeros()
    • 切片和索引的赋值
import numpy as np
data = np.zeros((5, 5), dtype=np.int)
data[[0,4],:] = 1
data.T[[0,4],:] = 1
print(data)
[[1 1 1 1 1][1 0 0 0 1][1 0 0 0 1][1 0 0 0 1][1 1 1 1 1]]
  1. 使用数字 0 将一个全为 1 的 5x5 二维数组包围, 效果如下:
    array([[0., 0., 0., 0., 0., 0., 0.],
    [0., 1., 1., 1., 1., 1., 0.],
    [0., 1., 1., 1., 1., 1., 0.],
    [0., 1., 1., 1., 1., 1., 0.],
    [0., 1., 1., 1., 1., 1., 0.],
    [0., 1., 1., 1., 1., 1., 0.],
    [0., 0., 0., 0., 0., 0., 0.]])
import numpy as np
data = np.ones((7, 7))
data[[0,6],:] = 0
data[:,[0,6]] = 0print(data)
[[0. 0. 0. 0. 0. 0. 0.][0. 1. 1. 1. 1. 1. 0.][0. 1. 1. 1. 1. 1. 0.][0. 1. 1. 1. 1. 1. 0.][0. 1. 1. 1. 1. 1. 0.][0. 1. 1. 1. 1. 1. 0.][0. 0. 0. 0. 0. 0. 0.]]
  1. 创建一个 10x10 的二维数组,并使得 1 和 0 沿对角线间隔放置, 效果如下:
    array([[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
    [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
    [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
    [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
    [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
    [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
    [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
    [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
    [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
    [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]])
import numpy as np
data = np.zeros((2,2),dtype=int)
data[0][1] = 1
data[1][0] = 1data = np.hstack((data,data,data,data,data))
data = np.vstack((data,data,data,data,data))print(data)
[[0 1 0 1 0 1 0 1 0 1][1 0 1 0 1 0 1 0 1 0][0 1 0 1 0 1 0 1 0 1][1 0 1 0 1 0 1 0 1 0][0 1 0 1 0 1 0 1 0 1][1 0 1 0 1 0 1 0 1 0][0 1 0 1 0 1 0 1 0 1][1 0 1 0 1 0 1 0 1 0][0 1 0 1 0 1 0 1 0 1][1 0 1 0 1 0 1 0 1 0]]
  1. 创建一个 0-10 的一维数组,并将 (1, 9] 之间的数全部反转成负数, 效果如下:
    array([ 0, 1, -2, -3, -4, -5, -6, -7, -8, -9, 10])
import numpy as npdef minus(data):for i in range(len(data)):if 1 < data[i] < 10:data[i] = -data[i]return datadata = np.arange(11)
data = minus(data)print(data)
[ 0  1 -2 -3 -4 -5 -6 -7 -8 -9 10]
  1. 创建一个 5x5 的矩阵,其中每行的数值范围从 1 到 5, 效果如下:
    array([[1., 2., 3., 4., 5.],
    [1., 2., 3., 4., 5.],
    [1., 2., 3., 4., 5.],
    [1., 2., 3., 4., 5.],
    [1., 2., 3., 4., 5.]])

方法一:

import numpy as npdata = np.ones((5, 5), dtype=int)
print(len(data))
for i in range(len(data)):data[:,[i]]=i+1
print(data)

方法二:

import numpy as npdef parser(data):for i in range(len(data)):data[i] = i + 1data = data.Treturn datadata = np.ones((5, 5), dtype=int)
data = parser(data)
print(data)
[[1 2 3 4 5][1 2 3 4 5][1 2 3 4 5][1 2 3 4 5][1 2 3 4 5]]
  1. 创建一个长度为 5 的一维数组,并将其中最大值替换成 0
import numpy as np
data = np.arange(5)
data[np.argmax(data)] = 0
print(data)
[0 1 2 3 0]
  1. 将二维数组的前两行进行顺序交换, 效果如下:
  • 交换前
    [[ 0 1 2 3 4]
    [ 5 6 7 8 9]
    [10 11 12 13 14]
    [15 16 17 18 19]
    [20 21 22 23 24]]

  • 交换后
    [[ 5 6 7 8 9]
    [ 0 1 2 3 4]
    [10 11 12 13 14]
    [15 16 17 18 19]
    [20 21 22 23 24]]

import numpy as np
data = np.arange(25).reshape((5,5))print('交换前:\n',data)
data[[0,1],:] = data[[1,0],:]
print('交换后:\n',data)
交换前:[[ 0  1  2  3  4][ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19][20 21 22 23 24]]
交换后:[[ 5  6  7  8  9][ 0  1  2  3  4][10 11 12 13 14][15 16 17 18 19][20 21 22 23 24]]
  1. 找出给定一维数组中非 0 元素的位置索引
import numpy as npdata = np.arange(10)
index = np.argwhere(data > 0)
print(index)
[[1][2][3][4][5][6][7][8][9]]

9.找出数组中缺失值的总数及所在位置, 案例如下:
array([[0.8 , 0.25, 0.74, 0.05, 0.24, 0.16, 0.63, 0.62, 0.89, 0.85],
[0.61, 0.76, 0.26, 0.3 , 0.82, 0.74, 0.96, 0.64, 0.58, 0.06],
[0.78, 0.38, 0.19, 0.68, 0.75, 0.91, 0.13, 0.24, 0.98, 0.21],
[0.47, 0.12, 0.34, 0.06, 0.46, 0.69, 0.1 , nan, 0.27, 0.92],
[0.83, 0.01, 0.63, 0.15, 0.52, 0.52, 0.02, 0. , 0.74, 0.59],
[0.56, 0.66, 0.15, nan, 0.26, 0.88, 0.15, 0.57, 0.61, 0.35],
[0.33, 0.58, 0.06, 0.94, 0.58, 0.53, 0.97, 0.02, 0.32, nan],
[0.84, 0.71, 0.65, 0.42, 0.44, 0.96, 0.37, 0.65, 0.6 , 0.17],
[0.04, 0.94, 0.92, nan, 0.7 , 0.38, 0.28, 0.45, 0.35, 0.93],
[0.38, 0.69, 0.43, 0.01, 0.67, 0.46, 0.73, 0.99, 0.94, 0.45]])
缺失值总数:
4
缺失值索引:
(array([3, 5, 6, 8]), array([7, 3, 9, 3]))

import numpy as npdata = np.array([[0.8, 0.25, 0.74, 0.05, 0.24, 0.16, 0.63, 0.62, 0.89, 0.85],[0.61, 0.76, 0.26, 0.3, 0.82, 0.74, 0.96, 0.64, 0.58, 0.06],[0.78, 0.38, 0.19, 0.68, 0.75, 0.91, 0.13, 0.24, 0.98, 0.21],[0.47, 0.12, 0.34, 0.06, 0.46, 0.69, 0.1, np.nan, 0.27, 0.92],[0.83, 0.01, 0.63, 0.15, 0.52, 0.52, 0.02, 0., 0.74, 0.59],[0.56, 0.66, 0.15, np.nan, 0.26, 0.88, 0.15, 0.57, 0.61, 0.35],[0.33, 0.58, 0.06, 0.94, 0.58, 0.53, 0.97, 0.02, 0.32, np.nan],[0.84, 0.71, 0.65, 0.42, 0.44, 0.96, 0.37, 0.65, 0.6, 0.17],[0.04, 0.94, 0.92, np.nan, 0.7, 0.38, 0.28, 0.45, 0.35, 0.93],[0.38, 0.69, 0.43, 0.01, 0.67, 0.46, 0.73, 0.99, 0.94, 0.45]])count = np.count_nonzero(np.isnan(data))
print('缺失值总数:\n',count)
index = np.where(data != data)
print('缺失值索引:\n',index)
缺失值总数:4
缺失值索引:(array([3, 5, 6, 8]), array([7, 3, 9, 3]))

2.pandas

常见的数据类型:
- 一维: Series
- 二维: DataFrame
- 三维: Panel …
- 四维: Panel4D …
- N维: PanelND …

1.pandas创建Series数据类型

import pandas as pd
import numpy as np
import  string# 查看pandas版本信息
print(pd.__version__)# ********************创建Series对象#  1). 通过列表创建Series对象
array = ["粉条", "粉丝", "粉带"]
# 如果不指定索引, 默认从0开始;
s1 = pd.Series(data=array)
print(s1)
# 如果不指定索引, 默认从0开始;
ss1 = pd.Series(data=array, index=['A', 'B', 'C'])
print(ss1)# 2). 通过numpy的对象Ndarray创建Series;
n = np.random.randn(5)   # 随机创建一个ndarray对象;
s2 = pd.Series(data=n)
print(s2)
# 修改元素的数据类型;
ss2 = s2.astype(np.int)
print(ss2)# 3). 通过字典创建Series对象;
dict = {string.ascii_lowercase[i]:i for i in range(10)}
s3 = pd.Series(dict)
print(s3)
0.24.1
0    粉条
1    粉丝
2    粉带
dtype: object
A    粉条
B    粉丝
C    粉带
dtype: object
0    1.424676
1    0.365305
2    0.359734
3   -0.540239
4    0.346369
dtype: float64
0    1
1    0
2    0
3    0
4    0
dtype: int64
a    0
b    1
c    2
d    3
e    4
f    5
g    6
h    7
i    8
j    9
dtype: int64

2.Series基本操作

import pandas as pd
import numpy as np
import  stringarray = ["粉条", "粉丝", "粉带"]
s1 = pd.Series(data=array)
print(s1)# 1). 修改Series索引
print(s1.index)
s1.index = ['A', 'B', 'C']
print(s1)# 2). Series纵向拼接;
array = ["粉条", "粉丝", "粉带"]
# 如果不指定索引, 默认从0开始;
s2 = pd.Series(data=array)
s3 = s1.append(s2)
print(s3)# 3). 删除指定索引对应的元素;
s3 = s3.drop('C')  # 删除索引为‘C’对应的值;
print(s3)# 4). 根据指定的索引查找元素
print(s3['B'])
s3['B'] = np.nan
print(s3)# 5). 切片操作  --- 同列表
print(s3[:2])
print(s3[::-1])
print(s3[-2:])  # 显示最后两个元素
0    粉条
1    粉丝
2    粉带
dtype: object
RangeIndex(start=0, stop=3, step=1)
A    粉条
B    粉丝
C    粉带
dtype: object
A    粉条
B    粉丝
C    粉带
0    粉条
1    粉丝
2    粉带
dtype: object
A    粉条
B    粉丝
0    粉条
1    粉丝
2    粉带
dtype: object
粉丝
A     粉条
B    NaN
0     粉条
1     粉丝
2     粉带
dtype: object
A     粉条
B    NaN
dtype: object
2     粉带
1     粉丝
0     粉条
B    NaN
A     粉条
dtype: object
1    粉丝
2    粉带
dtype: object

3.Series运算

import pandas as pd
import numpy as np
import  strings1  = pd.Series(np.arange(5), index=list(string.ascii_lowercase[:5]))
s2  = pd.Series(np.arange(2, 8), index=list(string.ascii_lowercase[2:8]))print(s1)
print(s2)
a    0
b    1
c    2
d    3
e    4
dtype: int64
c    2
d    3
e    4
f    5
g    6
h    7
dtype: int64

1)加法

print(s1 + s2)
print(s1.add(s2))
a    NaN
b    NaN
c    4.0
d    6.0
e    8.0
f    NaN
g    NaN
h    NaN
dtype: float64
a    NaN
b    NaN
c    4.0
d    6.0
e    8.0
f    NaN
g    NaN
h    NaN
dtype: float64

2)减法

print(s1 - s2)
print(s1.sub(s2))
a    NaN
b    NaN
c    0.0
d    0.0
e    0.0
f    NaN
g    NaN
h    NaN
dtype: float64
a    NaN
b    NaN
c    0.0
d    0.0
e    0.0
f    NaN
g    NaN
h    NaN
dtype: float64

3)乘法

print(s1 * s2)
print(s1.mul(s2))
a     NaN
b     NaN
c     4.0
d     9.0
e    16.0
f     NaN
g     NaN
h     NaN
dtype: float64
a     NaN
b     NaN
c     4.0
d     9.0
e    16.0
f     NaN
g     NaN
h     NaN
dtype: float64

4)除法

print(s1 / s2)
print(s1.div(s2))
a    NaN
b    NaN
c    1.0
d    1.0
e    1.0
f    NaN
g    NaN
h    NaN
dtype: float64
a    NaN
b    NaN
c    1.0
d    1.0
e    1.0
f    NaN
g    NaN
h    NaN
dtype: float64

5)求中位数

print(s1)
print(s1.median())
a    0
b    1
c    2
d    3
e    4
dtype: int64
2.0

6)求和

print(s1.sum())
10

7)max

print(s1.max())
4

8)min

print(s1.min())
0

4.特殊的where方法

import pandas as pd
import numpy as np
import string# &**********series中的where方法运行结果和numpy中完全不同;
s1 = pd.Series(np.arange(5), index=list(string.ascii_lowercase[:5]))
print(s1.where(s1 > 3))# 对象中不大于3的元素赋值为10;
print(s1.where(s1 > 3, 10))# 对象中大于3的元素赋值为10;
print(s1.mask(s1 > 3, 10))
a    NaN
b    NaN
c    NaN
d    NaN
e    4.0
dtype: float64
a    10
b    10
c    10
d    10
e     4
dtype: int64
a     0
b     1
c     2
d     3
e    10
dtype: int64

5创建DataFrame数据类型

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt# 方法1: 通过列表创建
li = [[1, 2, 3, 4],[2, 3, 4, 5]
]# DataFRame对象里面包含两个索引, 行索引(0轴, axis=0), 列索引(1轴, axis=1)
d1 = pd.DataFrame(data=li, index=['A', 'B'], columns=['views', 'loves', 'comments', 'tranfers'])
# print(d1)# 方法2: 通过numpy对象创建
narr = np.arange(8).reshape(2, 4)
# DataFRame对象里面包含两个索引, 行索引(0轴, axis=0), 列索引(1轴, axis=1)
d2 = pd.DataFrame(data=narr, index=['A', 'B'], columns=['views', 'loves', 'comments', 'tranfers'])
# print(d2)# 方法三: 通过字典的方式创建;
dict = {'views': [1, 2, ],'loves': [2, 3, ],'comments': [3, 4, ]}
d3 = pd.DataFrame(data=dict, index=['粉条', "粉丝"])
print(d3)# 日期操作的特例:
# pd.date_range()
# dates = pd.date_range(start='1/1/2018', end='1/08/2018')
# print(dates)# 行索引
dates = pd.date_range(start='today', periods=6)
# 数据
data_arr = np.random.randn(6, 4)
# 列索引
columns = ['A', 'B', 'C', 'D']
d4 = pd.DataFrame(data_arr, index=dates, columns=columns)
print(d4)# 一维对象: 建立一个以2019年每一天作为索引, 值为随机数;
dates = pd.date_range(start='1/1/2019', end='12/31/2019', freq='D')
datas = np.random.randn(len(dates))
s1 = pd.Series(datas, index=dates)
print(s1[:3])
    views  loves  comments
粉条      1      2         3
粉丝      2      3         4A         B         C         D
2019-02-27 11:14:57.037817  0.843130 -1.155545  0.665584  0.316461
2019-02-28 11:14:57.037817  0.507164  1.304527 -0.117024  0.350452
2019-03-01 11:14:57.037817  1.172328  0.756972  0.188346 -1.080601
2019-03-02 11:14:57.037817  0.000679  0.059395  0.486970  0.534071
2019-03-03 11:14:57.037817 -0.045484  0.153341  2.228968  0.963075
2019-03-04 11:14:57.037817  0.851579 -1.003794 -0.039785 -2.320291
2019-01-01    0.578469
2019-01-02    0.281758
2019-01-03   -2.117394
Freq: D, dtype: float64

6.DataFrame的基本操作
1)查看基础属性

import pandas as pd
import numpy as np
from matplotlib import pyplot as pltnarr = np.arange(8).reshape(2, 4)
# DataFRame对象里面包含两个索引, 行索引(0轴, axis=0), 列索引(1轴, axis=1)
d2 = pd.DataFrame(data=narr, index=['A', 'B'], columns=['views', 'loves', 'comments', 'tranfers'])
print(d2)# **********************1). 查看基础属性***********************
print(d2.shape)  # 获取行数和列数;
print(d2.dtypes)  # 列数据类型
print(d2.ndim)  # 获取数据的维度
print(d2.index) # 行索引
print(d2.columns) # 列索引
print(d2.values, type(d2.values))   # 对象的值, 二维ndarray数组;
   views  loves  comments  tranfers
A      0      1         2         3
B      4      5         6         7
(2, 4)
views       int64
loves       int64
comments    int64
tranfers    int64
dtype: object
2
Index(['A', 'B'], dtype='object')
Index(['views', 'loves', 'comments', 'tranfers'], dtype='object')
[[0 1 2 3][4 5 6 7]] <class 'numpy.ndarray'>views  loves  comments  tranfers
A      0      1         2         3
B      4      5         6         7
views       0
loves       1
comments    2
tranfers    3
Name: A, dtype: int64views  loves  comments  tranfers
B      4      5         6         7views  loves  comments  tranfers
A      0      1         2         3
B      4      5         6         7
views       0
loves       1
comments    2
tranfers    3
Name: A, dtype: int64views  loves  comments  tranfers
A    NaN    NaN       NaN       NaN
B    4.0    5.0       6.0       7.0

2)数据整体状况的查询

# ******************************2). 数据整体状况的查询*************
print(d2.head(1))  # 显示头部的几行, 默认5行
print(d2.tail(1))  # 显示头部的尾行, 默认5行print("*"*10)
# 相关信息的预览: 行数, 列数, 列类型, 内存占用
print("info:", d2.info())print("统计".center(50, '*'))
# 快速综合用计结果: 计数, 均值, 标准差, 最小值, 1/4位数, 中位数, 3/4位数, 最大值;
print(d2.describe())
   views  loves  comments  tranfers
A      0      1         2         3views  loves  comments  tranfers
B      4      5         6         7
**********
<class 'pandas.core.frame.DataFrame'>
Index: 2 entries, A to B
Data columns (total 4 columns):
views       2 non-null int64
loves       2 non-null int64
comments    2 non-null int64
tranfers    2 non-null int64
dtypes: int64(4)
memory usage: 80.0+ bytes
info: None
************************统计************************views     loves  comments  tranfers
count  2.000000  2.000000  2.000000  2.000000
mean   2.000000  3.000000  4.000000  5.000000
std    2.828427  2.828427  2.828427  2.828427
min    0.000000  1.000000  2.000000  3.000000
25%    1.000000  2.000000  3.000000  4.000000
50%    2.000000  3.000000  4.000000  5.000000
75%    3.000000  4.000000  5.000000  6.000000
max    4.000000  5.000000  6.000000  7.000000views  loves  comments  tranfers
A      0      1         2         3
B      4      5         6         7
views       0
loves       1
comments    2
tranfers    3
Name: A, dtype: int64views  loves  comments  tranfers
B      4      5         6         7views  loves  comments  tranfers
A      0      1         2         3
B      4      5         6         7
views       0
loves       1
comments    2
tranfers    3
Name: A, dtype: int64views  loves  comments  tranfers
A    NaN    NaN       NaN       NaN
B    4.0    5.0       6.0       7.0

3)转置操作

print(d2.T)
          A  B
views     0  4
loves     1  5
comments  2  6
tranfers  3  7

4)按列进行排序

print(d2)
# 按照指定列进行排序, 默认是升序, 如果需要降序显示,设置ascending=False;
print(d2.sort_values(by="views", ascending=False))
   views  loves  comments  tranfers
A      0      1         2         3
B      4      5         6         7views  loves  comments  tranfers
B      4      5         6         7
A      0      1         2         3

5)切片及查询

print(d2[:1])   # 可以实现切片, 但是不能索引;
print('1:\n', d2['views'])   # 通过标签查询, 获取单列信息
print('2:\n', d2.views)   # 和上面是等价的;
print(d2[['views', 'comments']])  # 通过标签查询多列信息
   views  loves  comments  tranfers
A      0      1         2         3
1:A    0
B    4
Name: views, dtype: int64
2:A    0
B    4
Name: views, dtype: int64views  comments
A      0         2
B      4         6

6)通过类似索引的方式查询

#       - iloc(通过位置进行行数据的获取),
#        - loc(t通过标签索引行数据)
# print(d2[0])   # 报错
print(d2)
print(d2.iloc[0])
print(d2.iloc[-1:])
   views  loves  comments  tranfers
A      0      1         2         3
B      4      5         6         7
views       0
loves       1
comments    2
tranfers    3
Name: A, dtype: int64views  loves  comments  tranfers
B      4      5         6         7views  loves  comments  tranfers
A      0      1         2         3
B      4      5         6         7
views       0
loves       1
comments    2
tranfers    3
Name: A, dtype: int64

7)更改pandas的值

d2.loc['A'] = np.nan
print(d2)print(d2.info())
   views  loves  comments  tranfers
A    NaN    NaN       NaN       NaN
B    4.0    5.0       6.0       7.0
<class 'pandas.core.frame.DataFrame'>
Index: 2 entries, A to B
Data columns (total 4 columns):
views       1 non-null float64
loves       1 non-null float64
comments    1 non-null float64
tranfers    1 non-null float64
dtypes: float64(4)
memory usage: 160.0+ bytes
None

7.从文件中读取数据

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt# csv, excel, json........
# 1). csv文件的写入df = pd.DataFrame({'province': ['陕西', '陕西', '四川', '四川', '陕西'],'city': ['咸阳', '宝鸡', '成都', '成都', '宝鸡'],'count1': [1, 2, 3, 4, 5],'count2': [1, 2, 33, 4, 5]}
)df.to_csv('doc/csvFile.csv')
print("csv文件保存成功")# 2). csv文件的读取
df2 = pd.read_csv('doc/csvFile.csv')
print(df2)# 3). excel文件的写入
df2.to_excel("doc/excelFile.xlsx", sheet_name="省份统计")
print("excel文件保存成功")
csv文件保存成功Unnamed: 0 province city  count1  count2
0           0       陕西   咸阳       1       1
1           1       陕西   宝鸡       2       2
2           2       四川   成都       3      33
3           3       四川   成都       4       4
4           4       陕西   宝鸡       5       5
excel文件保存成功

8.分组与聚合操作之group_by

import pandas as pd
import numpy as np
from matplotlib import pyplot as pltdf = pd.DataFrame({'province': ['陕西', '陕西', '四川', '四川', '陕西'],'city': ['咸阳', '宝鸡', '成都', '成都', '宝鸡'],'count1': [1, 2, 3, 4, 5],'count2': [1, 2, 33, 4, 5]}
)# 陕西      咸阳    1
#          宝鸡     1print(df)
# 根据某一列的key值进行统计分析;
grouped = df['count1'].groupby(df['province'])
print(grouped.describe())
print(grouped.median())# 根据城市统计分析cpunt1的信息;
grouped = df['count1'].groupby(df['city'])
print(grouped.max())# 指定多个key值进行分类聚合;
grouped = df['count1'].groupby([df['province'], df['city']])
print(grouped)
print(grouped.max())
print(grouped.sum())
print(grouped.count())#  通过unstack方法, 实现层次化的索引;
print(grouped.max().unstack())
  province city  count1  count2
0       陕西   咸阳       1       1
1       陕西   宝鸡       2       2
2       四川   成都       3      33
3       四川   成都       4       4
4       陕西   宝鸡       5       5count      mean       std  min   25%  50%   75%  max
province
四川          2.0  3.500000  0.707107  3.0  3.25  3.5  3.75  4.0
陕西          3.0  2.666667  2.081666  1.0  1.50  2.0  3.50  5.0
province
四川    3.5
陕西    2.0
Name: count1, dtype: float64
city
咸阳    1
宝鸡    5
成都    4
Name: count1, dtype: int64
<pandas.core.groupby.generic.SeriesGroupBy object at 0x7f3acb326198>
province  city
四川        成都      4
陕西        咸阳      1宝鸡      5
Name: count1, dtype: int64
province  city
四川        成都      7
陕西        咸阳      1宝鸡      7
Name: count1, dtype: int64
province  city
四川        成都      2
陕西        咸阳      1宝鸡      2
Name: count1, dtype: int64
city       咸阳   宝鸡   成都
province
四川        NaN  NaN  4.0
陕西        1.0  5.0  NaN

9.字符串操作

import pandas as pd
import numpy as np
from matplotlib import pyplot as pltseries1= pd.Series(['$A:1', '$B:2', '$C:3', np.nan, '$cat:3'])
print(series1)# 将所有的字母转换为小写字母, 除了缺失值
print(series1.str.lower())# 将所有的字母转换为大写字母, 除了缺失值
print(series1.str.upper())# 分离
print(series1.str.split(":"))# 去掉左右两端的某个字符
print(series1.str.strip('$'))
0      $A:1
1      $B:2
2      $C:3
3       NaN
4    $cat:3
dtype: object
0      $a:1
1      $b:2
2      $c:3
3       NaN
4    $cat:3
dtype: object
0      $A:1
1      $B:2
2      $C:3
3       NaN
4    $CAT:3
dtype: object
0      [$A, 1]
1      [$B, 2]
2      [$C, 3]
3          NaN
4    [$cat, 3]
dtype: object
0      A:1
1      B:2
2      C:3
3      NaN
4    cat:3
dtype: object

10.案例
1)商品数据分析
#doc/chipo.csv

,order_id,quantity,item_name,choice_description,item_price
0,1,1,Chips and Fresh Tomato Salsa,,$2.39
1,1,1,Izze,[Clementine],$3.39
2,1,1,Nantucket Nectar,[Apple],$3.39
3,1,1,Chips and Tomatillo-Green Chili Salsa,,$2.39
4,2,2,Chicken Bowl,"[Tomatillo-Red Chili Salsa (Hot), [Black Beans, Rice, Cheese, Sour Cream]]",$16.98
5,3,1,Chicken Bowl,"[Fresh Tomato Salsa (Mild), [Rice, Cheese, Sour Cream, Guacamole, Lettuce]]",$10.98
6,3,1,Side of Chips,,$1.69
7,4,1,Steak Burrito,"[Tomatillo Red Chili Salsa, [Fajita Vegetables, Black Beans, Pinto Beans, Cheese, Sour Cream, Guacamole, Lettuce]]",$11.75
8,4,1,Steak Soft Tacos,"[Tomatillo Green Chili Salsa, [Pinto Beans, Cheese, Sour Cream, Lettuce]]",$9.25
9,5,1,Steak Burrito,"[Fresh Tomato Salsa, [Rice, Black Beans, Pinto Beans, Cheese, Sour Cream, Lettuce]]",$9.25

需求1:
1). 从文件中读取所有的数据;
2). 获取数据中所有的商品名称;

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt#
# 需求1:
#     1). 从文件中读取所有的数据;
#     2). 获取数据中所有的商品名称;
goodsInfo = pd.read_csv('doc/chipo.csv')
# print(goodsInfo.head())
# print(goodsInfo.tail())
print(goodsInfo.info())
# print(goodsInfo.describe())
print("商品名称显示: \n", goodsInfo['item_name'].head())
print("商品名称显示: \n", goodsInfo.item_name.head())
#
#
# #
# 需求1:
#
#     3). 跟据商品的价格进行排序, 降序,
#     将价格最高的20件产品信息写入mosthighPrice.xlsx文件中;
# 重新赋值;
goodsInfo.item_price = goodsInfo.item_price.str.strip('$').astype(np.float)
highPriceData = goodsInfo.sort_values('item_price', ascending=False)
print(highPriceData.head(5))
filename = '/tmp/mostHighPrice.xlsx'
highPriceData.to_excel(filename)
print("保存成功.......")
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4622 entries, 0 to 4621
Data columns (total 6 columns):
Unnamed: 0            4622 non-null int64
order_id              4622 non-null int64
quantity              4622 non-null int64
item_name             4622 non-null object
choice_description    3376 non-null object
item_price            4622 non-null object
dtypes: int64(3), object(3)
memory usage: 216.7+ KB
None
商品名称显示: 0             Chips and Fresh Tomato Salsa
1                                     Izze
2                         Nantucket Nectar
3    Chips and Tomatillo-Green Chili Salsa
4                             Chicken Bowl
Name: item_name, dtype: object
商品名称显示: 0             Chips and Fresh Tomato Salsa
1                                     Izze
2                         Nantucket Nectar
3    Chips and Tomatillo-Green Chili Salsa
4                             Chicken Bowl
Name: item_name, dtype: objectUnnamed: 0  ...  item_price
3598        3598  ...       44.25
3480        3480  ...       35.25
1254        1254  ...       35.00
3602        3602  ...       35.00
3601        3601  ...       33.75[5 rows x 6 columns]
保存成功.......
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4622 entries, 0 to 4621
Data columns (total 6 columns):
Unnamed: 0            4622 non-null int64
order_id              4622 non-null int64
quantity              4622 non-null int64
item_name             4622 non-null object
choice_description    3376 non-null object
item_price            4622 non-null object
dtypes: int64(3), object(3)
memory usage: 216.7+ KB
None
商品名称显示: 0             Chips and Fresh Tomato Salsa
1                                     Izze
2                         Nantucket Nectar
3    Chips and Tomatillo-Green Chili Salsa
4                             Chicken Bowl
Name: item_name, dtype: object
商品名称显示: 0             Chips and Fresh Tomato Salsa
1                                     Izze
2                         Nantucket Nectar
3    Chips and Tomatillo-Green Chili Salsa
4                             Chicken Bowl
Name: item_name, dtype: objectUnnamed: 0  ...  item_price
3598        3598  ...       44.25
3480        3480  ...       35.25
1254        1254  ...       35.00
3602        3602  ...       35.00
3601        3601  ...       33.75[5 rows x 6 columns]
保存成功.......


需求2:
1). 统计列[item_name]中每种商品出现的频率,绘制柱状图
(购买次数最多的商品排名-绘制前5条记录)

# 需求2:
#     1). 统计列[item_name]中每种商品出现的频率,绘制柱状图
#             (购买次数最多的商品排名-绘制前5条记录)
goodsInfo = pd.read_csv('doc/chipo.csv')
# new_info会统计每个商品名出现的次数;其中 Unnamed: 0就是我们需要获取的商品出现频率;
newInfo = goodsInfo.groupby('item_name').count()
mostRaiseGoods = newInfo.sort_values('Unnamed: 0', ascending=False)['Unnamed: 0'].head(5)
# print(mostRaiseGoods, type(mostRaiseGoods))   # series对象;# 获取对象中的商品名称;
x = mostRaiseGoods.index
# 获取商品出现的次数;
y = mostRaiseGoods.valuesfrom  pyecharts import  Barbar = Bar("购买次数最多的商品排名")
bar.add("", x, y)
bar.render()


2). 根据列 [odrder_id] 分组,求出每个订单花费的总金额======订单数量(quantity), 订单总价(item_price)。
3). 根据每笔订单的总金额和其商品的总数量画出散点图。

# 需求2:
#     2). 根据列 [odrder_id] 分组,求出每个订单花费的总金额======订单数量(quantity), 订单总价(item_price)。
#     3). 根据每笔订单的总金额和其商品的总数量画出散点图。goodsInfo = pd.read_csv('doc/chipo.csv')
# 获取订单数量
quantity = goodsInfo.quantity
# 获取订单总价
item_price = goodsInfo.item_price \= goodsInfo.item_price.str.strip('$').astype(np.float)# 根据列 [odrder_id] 分组
order_group = goodsInfo.groupby("order_id")
# 每笔订单的总金额
x = order_group.item_price.sum()
# 商品的总数量
y = order_group.quantity.sum()from pyecharts import  EffectScatter
scatter = EffectScatter("每笔订单的总金额和其商品的总数量关系散点图")
scatter.add("", x, y)
scatter.render()


2)消费金额和小费之间的关联与性别和吸烟与否的关系
#doc/tips.csv

,total_bill,tip,sex,smoker,day,time,size
0,16.99,1.01,Female,No,Sun,Dinner,2
1,10.34,1.66,Male,No,Sun,Dinner,3
2,21.01,3.5,Male,No,Sun,Dinner,3
3,23.68,3.31,Male,No,Sun,Dinner,2
4,24.59,3.61,Female,No,Sun,Dinner,4
5,25.29,4.71,Male,No,Sun,Dinner,4
6,8.77,2.0,Male,No,Sun,Dinner,2
7,26.88,3.12,Male,No,Sun,Dinner,4
8,15.04,1.96,Male,No,Sun,Dinner,2
9,14.78,3.23,Male,No,Sun,Dinner,2
10,10.27,1.71,Male,No,Sun,Dinner,2

1.实现吸烟顾客消费金额与小费之间的散点图

import pandas as pd
import numpy as np
from matplotlib import pyplot as pltfilename = 'doc/tips.csv'
data = pd.read_csv(filename)
# print(data.head())
# print(data.info())# 实现吸烟顾客消费金额与小费之间的散点图
smoker = data[data['smoker'] == 'Yes']
# print(smoker.head())
x_total_bill = smoker['total_bill']
y_tip = smoker['tip']from pyecharts import  Scatter
scatter = Scatter("吸烟顾客消费金额与小费之间的散点图")
scatter.add("", x_total_bill, y_tip)
scatter.render()


2.实现不吸烟顾客消费金额与小费之间的散点图

# 实现不吸烟顾客消费金额与小费之间的散点图
no_smoker = data[data['smoker'] != 'Yes']
# print(smoker.head())
x_total_bill = no_smoker['total_bill']
y_tip = no_smoker['tip']from pyecharts import  Scatter
scatter = Scatter("不吸烟顾客消费金额与小费之间的散点图")
scatter.add("", x_total_bill, y_tip)
scatter.render()


3.女性中吸烟与不吸烟顾客的消费金额与小费之间的散点图关系

# 女性中吸烟与不吸烟顾客的消费金额与小费之间的散点图关系;
# 1). 获取所有吸烟的用户信息
smoker = data[data['smoker'] == 'Yes']
# 2).从所有的吸烟用户中找出性别为女的用户信息;
female_smoker = smoker[smoker['sex']=='Female']# 1). 获取所有不吸烟的用户信息
no_smoker = data[data['smoker'] != 'Yes']
# 2).从所有的吸烟用户中找出性别为女的用户信息;
female_no_smoker = no_smoker[no_smoker['sex']=='Female']
# 3). 绘制散点图
from pyecharts import  Scatter
scatter = Scatter("消费金额与小费之间的散点图")
scatter.add("吸烟女顾客", female_smoker['total_bill'], female_smoker['tip'])
scatter.add("不吸烟女顾客", female_no_smoker['total_bill'], female_no_smoker['tip'])scatter.render()


3)电影top250数据分析统计
#doc/special_top250.csv

,num,title,init_year,area,genre,rating_num,comment_num,language,director,cast,movie_duration,tags
0,1,肖申克的救赎,1994,美国,犯罪 剧情,9.6,964842,英语,弗兰克·德拉邦特 Frank Darabont,"蒂姆·罗宾斯 Tim Robbins', '摩根·弗里曼 Morgan Freeman', '鲍勃·冈顿 Bob Gunton', '威廉姆·赛德勒 William Sadler', '克兰西·布朗 Clancy Brown', '吉尔·贝罗斯 Gil Bellows', '马克·罗斯顿 Mark Rolston', '詹姆斯·惠特摩 James Whitmore', '杰弗里·德曼 Jeffrey DeMunn', '拉里·布兰登伯格 Larry Brandenburg', '尼尔·吉恩托利 Neil Giuntoli', '布赖恩·利比 Brian Libby', '大卫·普罗瓦尔 David Proval', '约瑟夫·劳格诺 Joseph Ragno', '祖德·塞克利拉 Jude Ciccolella",142,"[{'count': 197742, 'name': '经典'}, {'count': 168278, 'name': '励志'}, {'count': 150816, 'name': '信念'}, {'count': 136433, 'name': '自由'}, {'count': 100023, 'name': '美国'}, {'count': 97065, 'name': '人性'}, {'count': 75735, 'name': '人生'}, {'count': 62038, 'name': '剧情'}]"
1,2,霸王别姬,1993,中国大陆 香港,剧情 爱情 同性,9.5,699930,汉语普通话,陈凯歌 Kaige Chen,"张国荣 Leslie Cheung', '张丰毅 Fengyi Zhang', '巩俐 Li Gong', '葛优 You Ge', '英达 Da Ying', '蒋雯丽 Wenli Jiang', '吴大维 David Wu', '吕齐 Qi Lü', '雷汉 Han Lei', '尹治 Zhi Yin', '马明威 Mingwei Ma', '费振翔 Zhenxiang Fei', '智一桐 Yitong Zhi', '李春 Chun Li', '赵海龙 Hailong Zhao', '李丹 Dan Li', '童弟 Di Tong', '沈慧芬 Huifen Shen', '黄斐 Fei Huang",171,"[{'count': 124150, 'name': '经典'}, {'count': 63691, 'name': '中国电影'}, {'count': 60284, 'name': '爱情'}, {'count': 58677, 'name': '文艺'}, {'count': 56385, 'name': '人性'}, {'count': 49648, 'name': '同志'}, {'count': 45309, 'name': '人生'}, {'count': 34298, 'name': '剧情'}]"
2,3,这个杀手不太冷,1994,法国,剧情 动作 犯罪,9.4,912435,"英语', '意大利语', '法语",吕克·贝松 Luc Besson,"让·雷诺 Jean Reno', '娜塔莉·波特曼 Natalie Portman', '加里·奥德曼 Gary Oldman', '丹尼·爱罗 Danny Aiello', '彼得·阿佩尔 Peter Appel', '迈克尔·巴达鲁科 Michael Badalucco', '艾伦·格里尼 Ellen Greene', '伊丽莎白·瑞根 Elizabeth Regen', '卡尔·马图斯维奇 Carl J. Matusovich', '弗兰克·赛格 Frank Senger', '麦温 Maïwenn', '乔治·马丁 George Martin', '罗伯特·拉萨多 Robert LaSardo', '亚当·布斯奇 Adam Busch', '马里奥·托迪斯科 Mario Todisco', '萨米·纳塞利 Samy Naceri",110,"[{'count': 150097, 'name': '经典'}, {'count': 85994, 'name': '爱情'}, {'count': 85000, 'name': '温情'}, {'count': 59611, 'name': '人性'}, {'count': 53425, 'name': '剧情'}, {'count': 41229, 'name': '动作'}, {'count': 37171, 'name': '犯罪'}, {'count': 23234, 'name': '1994'}]"
3,4,阿甘正传,1994,美国,剧情 爱情,9.4,775889,英语,Robert Zemeckis,"Tom Hanks', 'Robin Wright Penn', 'Gary Sinise', 'Mykelti Williamson', 'Sally Field', 'Michael Conner Humphreys', 'Haley Joel Osment",142,"[{'count': 179046, 'name': '励志'}, {'count': 134124, 'name': '经典'}, {'count': 101061, 'name': '美国'}, {'count': 92361, 'name': '人生'}, {'count': 69678, 'name': '信念'}, {'count': 68910, 'name': '成长'}, {'count': 38545, 'name': '剧情'}, {'count': 29198, 'name': '人性'}]"
4,5,美丽人生,1997,意大利,剧情 喜剧 爱情 战争,9.5,453651,"意大利语', '德语', '英语",罗伯托·贝尼尼 Roberto Benigni,"罗伯托·贝尼尼 Roberto Benigni', '尼可莱塔·布拉斯基 Nicoletta Braschi', '乔治·坎塔里尼 Giorgio Cantarini', '朱斯蒂诺·杜拉诺 Giustino Durano', '塞尔吉奥·比尼·布斯特里克 Sergio Bini Bustric', '玛丽莎·佩雷德斯 Marisa Paredes', '豪斯特·巴奇霍兹 Horst Buchholz', '利迪娅·阿方西 Lidia Alfonsi', '朱利亚娜·洛约迪切 Giuliana Lojodice', '亚美利哥·丰塔尼 Amerigo Fontani', '彼得·德·席尔瓦 Pietro De Silva', '弗朗西斯·古佐 Francesco Guzzo', '拉法埃拉·莱博罗尼 Raffaella Lebboroni', '克劳迪奥·阿方西 Claudio Alfonsi', '吉尔·巴罗尼 Gil Baroni', '马西莫·比安奇 Massimo Bianchi', '恩尼奥·孔萨尔维 Ennio Consalvi', '吉安卡尔洛·科森蒂诺 Giancarlo Cosentino', '阿伦·克雷格 Aaron Craig",116,"[{'count': 70710, 'name': '意大利'}, {'count': 67057, 'name': '二战'}, {'count': 66974, 'name': '经典'}, {'count': 65271, 'name': '亲情'}, {'count': 41626, 'name': '战争'}, {'count': 27446, 'name': '温情'}, {'count': 23931, 'name': '爱情'}, {'count': 23904, 'name': '人性'}]"
5,6,千与千寻,2001,日本,剧情 动画 奇幻,9.2,725483,日语,宫崎骏 Hayao Miyazaki,"柊瑠美 Rumi Hîragi', '入野自由 Miyu Irino', '夏木真理 Mari Natsuki', '菅原文太 Bunta Sugawara', '中村彰男 Akio Nakamura', '玉井夕海 Yumi Tamai', '神木隆之介 Ryûnosuke Kamiki', '内藤刚志 Takashi Naitô', '泽口靖子 Yasuko Sawaguchi', '我修院达也 Tatsuya Gashûin', '大泉洋 Yô Ôizumi', '小林郁夫 Koba Hayashi', '上条恒彦 Tsunehiko Kamijô', '小野武彦 Takehiko Ono",125,"[{'count': 110085, 'name': '日本'}, {'count': 105157, 'name': '动画'}, {'count': 63536, 'name': '动漫'}, {'count': 56736, 'name': '经典'}, {'count': 55098, 'name': '成长'}, {'count': 50378, 'name': '温情'}, {'count': 32297, 'name': '吉卜力'}, {'count': 31081, 'name': '人性'}]"
6,7,泰坦尼克号,1997,美国,剧情 爱情 灾难,9.2,716225,"英语', '意大利语', '德语', '俄语",詹姆斯·卡梅隆 James Cameron,"莱昂纳多·迪卡普里奥 Leonardo DiCaprio', '凯特·温丝莱特 Kate Winslet', '比利·赞恩 Billy Zane', '凯西·贝茨 Kathy Bates', '弗兰西丝·费舍 Frances Fisher', '格劳瑞亚·斯图尔特 Gloria Stuart', '比尔·帕克斯顿 Bill Paxton', '伯纳德·希尔 Bernard Hill', '大卫·沃纳 David Warner', '维克多·加博 Victor Garber', '乔纳森·海德 Jonathan Hyde', '苏茜·爱米斯 Suzy Amis', '刘易斯·阿伯内西 Lewis Abernathy', '尼古拉斯·卡斯柯恩 Nicholas Cascone', '阿那托利·萨加洛维奇 Anatoly M. Sagalevitch', '丹尼·努齐 Danny Nucci', '杰森·贝瑞 Jason Barry', '伊万·斯图尔特 Ewan Stewart', '艾恩·格拉法德 Ioan Gruffudd', '乔纳森·菲利普斯 Jonathan Phillips', '马克·林赛·查普曼 Mark Lindsay Chapman', '理查德·格拉翰 Richard Graham', '保罗·布赖特威尔 Paul Brightwell', '艾瑞克·布里登 Eric Braeden', '夏洛特·查顿 Charlotte Chatton', '博纳德·福克斯 Bernard Fox', '迈克尔·英塞恩 Michael Ensign', '法妮·布雷特 Fannie Brett', '马丁·贾维斯 Martin Jarvis', '罗莎琳·艾尔斯 Rosalind Ayres', '罗切尔·罗斯 Rochelle Rose', '乔纳森·伊万斯-琼斯 Jonathan Evans-Jones', '西蒙·克雷恩 Simon Crane', '爱德华德·弗莱彻 Edward Fletcher', '斯科特·安德森 Scott Anderson', '马丁·伊斯特 Martin East', '克雷格·凯利 Craig Kelly', '格雷戈里·库克 Gregory Cooke', '利亚姆·图伊 Liam Tuohy', '詹姆斯·兰开斯特 James Lancaster', '艾尔莎·瑞雯 Elsa Raven', '卢·帕尔特 Lew Palter', '泰瑞·佛瑞斯塔 Terry Forrestal', '凯文·德·拉·诺伊 Kevin De La Noy",194,"[{'count': 168433, 'name': '爱情'}, {'count': 135286, 'name': '经典'}, {'count': 78330, 'name': '美国'}, {'count': 74346, 'name': '灾难'}, {'count': 54676, 'name': '浪漫'}, {'count': 47472, 'name': '感动'}, {'count': 39308, 'name': '奥斯卡'}, {'count': 26662, 'name': '1997'}]"
7,8,辛德勒的名单,1993,美国,剧情 历史 战争,9.4,414323,"英语', '希伯来语', '德语', '波兰语",史蒂文·斯皮尔伯格 Steven Spielberg,"连姆·尼森 Liam Neeson', '本·金斯利 Ben Kingsley', '拉尔夫·费因斯 Ralph Fiennes', '卡罗琳·古多尔 Caroline Goodall', '乔纳森·萨加尔 Jonathan Sagall', '艾伯丝·戴维兹 Embeth Davidtz', 'Malgoscha Gebel', '马克·伊瓦涅 Mark Ivanir', 'Béatrice Macola', '安德烈·瑟韦林 Andrzej Seweryn', 'Friedrich von Thun', 'Krzysztof Luft', 'Norbert Weisser",195,"[{'count': 71537, 'name': '人性'}, {'count': 68306, 'name': '二战'}, {'count': 59593, 'name': '斯皮尔伯格'}, {'count': 59068, 'name': '经典'}, {'count': 49554, 'name': '战争'}, {'count': 44535, 'name': '辛德勒的名单'}, {'count': 31515, 'name': '美国'}, {'count': 20974, 'name': '剧情'}]"
8,9,盗梦空间,2010,美国 英国,剧情 动作 科幻 悬疑 冒险,9.3,819985,"英语', '日语', '法语",克里斯托弗·诺兰 Christopher Nolan,"莱昂纳多·迪卡普里奥 Leonardo DiCaprio', '约瑟夫·高登-莱维特 Joseph Gordon-Levitt', '艾伦·佩吉 Ellen Page', '汤姆·哈迪 Tom Hardy', '渡边谦 Ken Watanabe (I)', '迪利普·劳 Dileep Rao', '希里安·墨菲 Cillian Murphy', '汤姆·贝伦杰 Tom Berenger', '玛丽昂·歌迪亚 Marion Cotillard', '皮特·波斯尔思韦特 Pete Postlethwaite', '迈克尔·凯恩 Michael Caine (I)', '卢卡斯·哈斯 Lukas Haas', '李太力 Tai-Li Lee', '克莱尔·吉尔蕾 Claire Geare', '马格努斯·诺兰 Magnus Nolan', '泰勒·吉蕾 Taylor Geare', '乔纳森·吉尔 Johnathan Geare', '水源士郎 Tohoru Masamune', '冈本玉二 Yuji Okumoto', '厄尔·卡梅伦 Earl Cameron', '瑞恩·海沃德 Ryan Hayward', '米兰达·诺兰 Miranda Nolan', '拉什·费加 Russ Fega', '蒂姆·科勒赫 Tim Kelleher', '妲露拉·莱莉 Talulah Riley",148,"[{'count': 149220, 'name': '科幻'}, {'count': 114009, 'name': '悬疑'}, {'count': 112852, 'name': '美国'}, {'count': 101764, 'name': '心理'}, {'count': 58945, 'name': '剧情'}, {'count': 49529, 'name': '经典'}, {'count': 35740, 'name': '哲学'}, {'count': 34614, 'name': '2010'}]"
9,10,机器人总动员,2008,美国,喜剧 科幻 动画,9.3,537492,英语,安德鲁·斯坦顿 Andrew Stanton,"本·贝尔特 Ben Burtt', '艾丽莎·奈特 Elissa Knight', '杰夫·格尔林 Jeff Garlin', '佛莱德·威拉特 Fred Willard",98,"[{'count': 110795, 'name': '动画'}, {'count': 62841, 'name': '科幻'}, {'count': 59040, 'name': '美国'}, {'count': 48512, 'name': '皮克斯'}, {'count': 45710, 'name': '感人'}, {'count': 44918, 'name': '爱情'}, {'count': 25246, 'name': '环保'}, {'count': 17041, 'name': '2008'}]"
import pandas as pd
import numpy as np
from matplotlib import pyplot as pltfilename = 'doc/special_top250.csv'
data = pd.read_csv(filename)
print(data.head())
# 获取电影时长
x_series = data.movie_duration
# 获取电影排名
y_series = data.numfrom pyecharts import  Scatter
scatter = Scatter("散点图")
scatter.add("", x_series, y_series)
scatter.render()
   Unnamed: 0  ...                                               tags
0           0  ...  [{'count': 197742, 'name': '经典'}, {'count': 16...
1           1  ...  [{'count': 124150, 'name': '经典'}, {'count': 63...
2           2  ...  [{'count': 150097, 'name': '经典'}, {'count': 85...
3           3  ...  [{'count': 179046, 'name': '励志'}, {'count': 13...
4           4  ...  [{'count': 70710, 'name': '意大利'}, {'count': 67...[5 rows x 13 columns]

python15(数值计算扩展numpy和数据分析pandas)相关推荐

  1. python基础知识及数据分析工具安装及简单使用(Numpy/Scipy/Matplotlib/Pandas/StatsModels/Scikit-Learn/Keras/Gensim))

    Python介绍. Unix & Linux & Window & Mac 平台安装更新 Python3 及VSCode下Python环境配置配置 python基础知识及数据分 ...

  2. [转载] python中的numpy模块和pandas模块的区别_numpy 模块和 pandas 模块

    参考链接: Python中的numpy.radians和deg2rad 一.numpy模块 1.1 numpy 简介 numpy是python的一种开源的数值计算扩展库,这种库可用来存储和处理大型nu ...

  3. pandas pivot 计算占比_数据分析Pandas 基础(二)

    推荐阅读:数据分析--Pandas 基础(一) 上一节课介绍了 Pandas 的基本用法,这一章节我们通过对 "泰坦尼克号" 幸存者进行数据分析,来进一步的学习 pandas. t ...

  4. Python数据分析pandas之数据拼接与连接

    Python数据分析pandas之数据拼接与连接 数据拼接处理 数据拼接处理指的是numpy.pandas里对数据的拼接.连接.合并等多种方法的概称.有时我们处理的数据会分很多步骤,而中间或者最终的结 ...

  5. Python数据分析pandas之dataframe初识

    Python数据分析pandas之dataframe初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上 ...

  6. Python数据分析pandas之series初识

    Python数据分析pandas之series初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上,它通 ...

  7. python彩票结果分析_即将放弃Python 2.7的不止有Numpy,还有pandas和这些工具

    原标题:即将放弃Python 2.7的不止有Numpy,还有pandas和这些工具 机器之心报道 参与:黄小天.路雪.李泽南 最近,Numpy 团队的一份声明引发了数据科学社区的关注:这一科学计算库即 ...

  8. 关于在Ubuntu下安装配置numpy,scipy,matplotlibm,pandas 以及sklearn

    最近在用Python学习机器学习,正好需要配置相关组件.也在网上查了一些,汇总了一下.顺便分享给大家,若有不对之处,请指出,谢谢. 关于Windows环境下配置及相应安装包 链接  推荐可以去看一看. ...

  9. python数据分析df_Python数据分析pandas入门!(附数据分析资料)

    Python数据分析pandas入门!(附数据分析资料) 1.pandas数据结构之DataFrame+ 这是小编准备的python数据分析资料!进群:700341555即可获取! Python数据分 ...

最新文章

  1. [日常] Go语言圣经-基于select的多路复用习题
  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(50)-Easyui 扁平化皮肤
  3. 如何格式化电脑_移动硬盘提示格式化如何解决?数据恢复软件解决问题
  4. 华为海思Hi1620芯片发布在即 7nm制程ARM架构最高可达3.0GHz
  5. Linux 查看进程之PS命令
  6. lzg_ad:EWF RAM Reg模式原理介绍
  7. 互联网扫描器 ZMap 完全手册
  8. ArrayList的retainAll()方法使用
  9. oracle当天是这个月的第几周,oracle_oracle查看当前日期是第几个星期的方法,系统当前时间是多少周,就是 - phpStudy...
  10. 概率论——Jordan公式
  11. 计算机专业群名有内涵,有内涵高大上的群名
  12. Python:实现fuzzy operations模糊运算算法(附完整源码)
  13. 全球海温数据NOAA Extended Reconstructed Sea Surface Temperature (SST) V5的时间解释
  14. Java ScriptEngineManager
  15. iOS获取文件夹下所有的文件
  16. HTML5绘制国际象棋,如何用纯CSS实现一副国际象棋
  17. 启用数据空间:让VirtualBox虚拟机中的Ubuntu10.10和XP主机互通有无
  18. 新书《Linux就是这个范儿》预售
  19. 【ARM指令】LDRD与STRD
  20. 借助OA系统实现企业人事管理的精细化落地

热门文章

  1. 海淀育新学校2021高考成绩查询,首师附育新“加工能力”不容小觑!海淀7000名以内可“签约”实验班...
  2. 【程序源代码】开源在线教育系统
  3. 郑清oj1191:数星星(结构体专题)
  4. 阿里云域名备案与实名认证注意问题
  5. minitab的鱼骨图的制作
  6. 28岁,怒放的生命,我想为自己活一次——未婚未育IT女成长记
  7. IT软件外包行业深入分析:现状、前途、趋势、待遇 什么是软件外包 外包公司是怎么工作的 软件外包公司的面试 软件外包公司需要什么样的人...
  8. 不用软件直接查询QQ好友的IP地址
  9. 使用Deal.II过程
  10. 盐雾试验箱的耐腐蚀ph酸碱度的三种配置方法