Scipy入门

标题中的英文首字母大写比较规范,但在python实际使用中均为小写。
建议读者安装anaconda,这个集成开发环境自带了很多包。
作者推荐到2018年8月2日仍为最新版本的anaconda下载链接: https://pan.baidu.com/s/1pbzVbr1ZJ-iQqJzy1wKs0A 密码: g6ex
下面代码的开发环境为jupyter notebook,使用在jupyter notebook中的截图表示运行结果。

1.简介

Scipy是世界上著名的Python开源科学计算库,建立在Numpy上,它增加的功能包括数值积分、最优化、统计和一些专用函数。
Scipy函数库在Numpy库的基础上增加了众多的数学、科学以及工程计算中常用的库函数。例如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等等。
官网:https://www.scipy.org/
Scipy模块列表:

模块名功能
scipy.cluster向量量化
scipy.constants数学常量
scipy.ffpack快速傅里叶变换
scipy.integrate积分
scipy.interpolate插值
scipy.io数据输入输出
scipy.linalg线性代数
scipy.ndimageN维图像
scipy.odr正交距离回归
scipy.optimize优化算法
scipy.signal信号处理
scipy.sparse稀疏矩阵
scipy.spatial空间数据结构和算法
scipy.special特殊数学函数
scipy/stats统计函数

2.jupyter简介

Jupyter notebook 有两种键盘输入模式。编辑模式,允许你往单元格中键入代码或者文本,这时的单元框线是绿色的。命令模式,键盘输入运行程序命令,这时的单元框是蓝色的。

命令作用
shift + Enter运行本单元格,然后选中下个单元格
ctrl + Enter运行本单元格
Alt + Enter运行本单元格,在其下插入新单元格
Y单元格转入Code状态
M单元格转入Markdown状态
A在上方插入新单元
B在下方插入新单元
X剪切选中的单元格
Shift + V在上方粘贴单元

3.保存和读取文件

from scipy import io
import numpy as np
a = np.arange(9).reshape(3,3)
io.savemat("a.mat",{'array':a})
data = io.loadmat('a.mat')
data,type(data)

上面一段代码的运行结果如下图所示:

10345471-59a1cd8167adafb4.png
image.png

从上面的结果可以看出,io.loadmat方法的返回值是字典dict。

练习

获取昨日排行第一的电影信息包含(电影名称、累计票房及上映天数),显示该电影自放映到昨日的所有累计票房线性趋势。提示:ts.day_boxoffice(‘日期’)方法获取单日电影票房数据

import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
import datetime
from scipy import signal
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

def getDayList(day_number):
    day_list = []
    now_time = datetime.datetime.now()
    for i in range(-int(day_number),0):
        day = now_time + datetime.timedelta(days=i)
        dayStr = day.strftime("%Y-%m-%d")
        day_list.append(dayStr)
    return day_list

def getMovieRecord(movieName):
    df = ts.day_boxoffice()
    day_number = df[df['MovieName']==movieName].MovieDay.values[0]
    day_list = getDayList(day_number)
    record_list = []
    for day in day_list:
        try:
            movie_all = ts.day_boxoffice(day)
            record = movie_all[movie_all['MovieName'] == movieName].copy()
            record['date'] = day
            record_list.append(record)
        except Exception as e:
            print(str(e))
    return pd.concat(record_list).reset_index(drop=True)

def drawTrend(movieRecord):
    x_ticks = [k[5:] for k in movieRecord['date'].values]
    x = range(len(x_ticks))
    y = movieRecord['BoxOffice'].values.astype('int')
    plt.xticks(x, x_ticks)
    plt.plot(x,y,label='走势图')
    plt.scatter(x,y, color='r')
    y2 = y - signal.detrend(y)
    plt.plot(x,y2,label='潜在趋势图')
    plt.ylim(0,50000)
    movieName = movieRecord['MovieName'].values[0]
    plt.title("《%s》电影上映后票房走势图" %movieName)
    plt.xlabel('日期')
    plt.ylabel('单日票房')
    plt.legend()
    plt.show()
    
if __name__ == "__main__":
    movieName = ts.day_boxoffice().iloc[0]['MovieName']
    movieRecord = getMovieRecord(movieName)
    drawTrend(movieRecord)

运行结果如下图所示:


10345471-6cd9a79c21597909.png
票房走势图.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值