Python数据科学库-小测验

简介: 考察内容包括numpy、pandas、matplotlib这3个库的内容1、请写出numpy中创建数组的方式答:np.arange、np.array、np.

考察内容包括numpy、pandas、matplotlib这3个库的内容

1、请写出numpy中创建数组的方式

答:np.arange、np.array、np.ones、np.zeros、np.full

2、numpy常规操作题:

(1)用numpy中的随机函数np.random.rand(5,5),生成一个5x5的数组,并使用numpy中的切片、索引以及索引搜等方法,将数据根据第二列的数据大小进行重新排序(图中数据仅作为演示用)


img_3b08a3e15ffb16a20621a4f31c64c969.png
image.png
a = np.random.rand(5,5)
print("排序前:")
print(a)
a_sorted = a[np.argsort(a[:,1])]
print('按照第二列的值排序后:')
print(a_sorted)

运行结果如下图所示:


img_24479dcde0640756f1634e2e266a423f.png
题2-1运行结果.png

(2) 用numpy至少两种方法生成如下所示的数组


img_15e9bfc7be8ce323668267c54495aab2.png
image.png

第一种解法:

import numpy as np
m = np.ones((10,10))
m[1:-1,1:-1] = 0
print(m)

第二种解法:

import numpy as np
m = np.ones((10,10))
m[1:-1,1:-1] = np.zeros((8,8))
print(m)

第三种解法:

import numpy as np
m = np.zeros((10,10))
m[0] = 1
m[:,0] = 1
m[-1] = 1
m[:,-1] = 1
print(m)

(3)编写代码,判断第数组一中的每个元素在数组二中是否存在
数组一:[ 0 10 20 40 60]
数组二:[0, 40]
结果:[ True False False True False]

import numpy as np
m1 = np.array([0,10,20,40,60])
m2 = np.array([0, 40])
r1 = m1==m2[0] 
r2 = m1==m2[1]
print(r1 | r2)

(4)编写代码,实现查找出两个numpy数组中相同的元素
数组一: [ 0 10 20 40 60]
数组二:[10, 30, 40]
结果:[10 40]

import numpy as np
m1 = np.array([0,10,20,40,60])
m2 = np.array([10,30,40])
print([k for k in m1 if k in m2])

(5)编写代码,实现查找出给定数组中比10大的数,返回新的数组values,同时给出比10大的数在原数组中的索引
给定数组:[[ 0 10 20] [20 30 40]]
求如下数组:
Values: [20 20 30 40]
索引数组: (array([0, 1, 1, 1]), array([2, 0, 1, 2]))

import numpy as np
a = np.array([[0,10,20],[20,30,40]])
pos = a > 10
Values = a[pos].ravel()
print(Values)
indexList = []
for i in range(2):
    for j in range(3):
        if pos[i][j]:
            indexList.append([i,j])
indexArray = np.array(indexList).T
print(indexArray)

3、实时电影票房数据集

请使用tushare模块提供的api并结合numpy、scipy等模块,获取前一天电影排行数据中上映天数大于7中日平均票价最高的电影,分析该电影近一个星期的票房及电影票价的走势,要求分别绘制出票房走势和平均票价走势。
getDay7Movies函数的作用是获取上映时间超过7天的电影,返回值的数据类型为DataFrame
getDayList函数的作用是获取日期列表,列表中元素的数据类型为字符串str,如下图所示:

img_46bbad1f1f1d800b1c28af817cdc80ae.png
getDayList函数.png

getMovieWeekRecord函数的作用是得到 电影最近一周的票房信息,需要一个参数,参数数据类型为字符串str,函数返回值的数据类型为DataFrame
drawBoxOffice函数的作用是画出 票房趋势图
drawAvgPrice函数的作用是画出 平均票价趋势图
解答代码如下,复制到py文件中可以直接运行,运行前安装tushare库命令: pip install tushare

import tushare as ts
import datetime
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl 
mpl.rcParams['font.sans-serif'] = ['SimHei']

def getDay7Movies():
    movie_df = ts.day_boxoffice()
    selected_df = movie_df[\
        movie_df['MovieDay'].values.astype('int') > 7]
    sorted_df = selected_df.sort_values(by='AvgPrice',ascending=False)
    return sorted_df.reset_index(drop=True)

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

def getMovieWeekRecord(movieName):
    day_list = getDayList()
    record_list = []
    for day in day_list:
        try:
            movie_all = ts.day_boxoffice(day)
            record = movie_all[\
                movie_all['MovieName'].values == 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 drawBoxOffice(movieWeekRecord):
    x_ticks = [k[5:] for k in movieWeekRecord['date'].values]
    x = range(len(x_ticks))
    y = list(movieWeekRecord['BoxOffice'].values.astype("f"))
    movieName = movieWeekRecord['MovieName'].iloc[0]
    plt.title("《%s》电影最近一周票房走势图" %movieName)
    plt.xlabel('日期')
    plt.ylabel('单日票房')
    plt.xticks(x,x_ticks)
    plt.plot(x,y)
    plt.show()
    
def drawAvgPrice(movieWeekRecord):
    x_ticks = [k[5:] for k in movieWeekRecord['date'].values]
    x = range(len(x_ticks))
    y = list(movieWeekRecord['AvgPrice'].values.astype('int'))
    movieName = movieWeekRecord['MovieName'].iloc[0]
    plt.title("《%s》电影最近一周平均票价走势图" %movieName)
    plt.xlabel('日期')
    plt.ylabel('平均票价')
    plt.xticks(x,x_ticks)
    plt.ylim(min(y)-5,max(y)+5)
    plt.plot(x,y)
    plt.show()
    
if __name__ == "__main__":
    day7Movies = getDay7Movies()
    movieName = day7Movies.iloc[0]['MovieName']
    print("上映天数大于7中日平均票价最高的电影为:",movieName)
    movieWeekRecord = getMovieWeekRecord(movieName)
    drawBoxOffice(movieWeekRecord)
    drawAvgPrice(movieWeekRecord)

运行结果如下图所示:


img_e5237f67bdb23228c43d396bc7f3a081.png
题3运行结果.png

4、订单交易记录数据集

题目数据集csv文件下载链接: https://pan.baidu.com/s/1-pO92xn2NxGCSO5R3j1XTQ 密码: e1b4
文件中一部分数据如下图所示,其中包含:
order_id: 订单id号
account_id:消费账户id
bank_to:银行代码
account_to:消费账号
amoount:消费金额
k_symbol:备注

img_b4a7f8765da0241f7bef4af38dabb76b.png
题4部分数据.png

(1)根据bank_to字段,用numpy统计出每不同bank_to字段下所有消费记录的均值、最大值、最小值、并求和。

import pandas as pd 
import numpy as np
df = pd.read_csv('order.csv',encoding='gbk')
df_sorted = df.groupby('bank_to').groups
df_sorted_keys = df_sorted.keys()
result_list = []
for key in df_sorted_keys:
    group = {}
    group['bank_to'] = key
    amoutNdarray = df.values[df_sorted[key].values][:,4]
    group['mean'] = np.mean(amoutNdarray)
    group['max'] = np.max(amoutNdarray)
    group['min'] = np.min(amoutNdarray)
    result_list.append(group)
df_group = pd.DataFrame(result_list)
matrix = df_group.values
print(np.sum(matrix[:,1]),np.sum(matrix[:,2]),np.sum(matrix[:,3]))

(2) 然后将每个字段分类下的所有消费记录写入到一个新的csv文件中,
输出文件中包含:CD.csv IJ.csv QR.csv AB.csv ……….

import pandas as pd 
df = pd.read_csv('order.csv',encoding='gbk')
df_sorted = df.groupby('bank_to')
for key,group in df_sorted:
    print(key)
    csvName = "%s.csv" %key
    print(group.keys())
group.to_csv(csvName,columns=group.keys())

5、正态分布数据集

编写python代码,用随机函数生成一个有100个样本点的正态分布数据集,并根据数据集完成如下需求:
(1)求数据样本的偏度和分度,根据偏度和峰度值判断数据样本是正偏还是负偏,是高峡峰还是低阔峰。
(2)使用matplotlib库绘制出数据样本的分度直方图、
(3)编写代码说明在数据集中有多少个样本比1大,有多少个数据样本比1小。
答:(1)

import numpy as np
import pandas as pd
data = np.random.randn(100)
df = pd.DataFrame(data)
skew = df.skew()[0]
kurt = df.kurt()[0]
print("偏度为",skew)
print("峰度为",kurt)
print("样本是正偏" if skew > 0 else "样本是负偏")
print("样本是高峡峰" if kurt > 0 else "样本是低阔峰")

(2)(3)答案代码如下:

from matplotlib import pyplot as plt
import numpy as np
a = np.random.randn(100)
print("比1大的样本数量",np.sum(a>1))
print("比1小的样本数量",np.sum(a<1))
plt.hist(a)
plt.show()
目录
相关文章
|
19天前
|
存储 人工智能 测试技术
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
本文介绍如何使用LangChain结合DeepSeek实现多轮对话,测开人员可借此自动生成测试用例,提升自动化测试效率。
217 125
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
|
12天前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
59 0
|
1月前
|
机器学习/深度学习 新能源 调度
电力系统短期负荷预测(Python代码+数据+详细文章讲解)
电力系统短期负荷预测(Python代码+数据+详细文章讲解)
181 1
|
1月前
|
缓存 API 网络架构
淘宝item_search_similar - 搜索相似的商品API接口,用python返回数据
淘宝联盟开放平台中,可通过“物料优选接口”(taobao.tbk.dg.optimus.material)实现“搜索相似商品”功能。该接口支持根据商品 ID 获取相似推荐商品,并返回商品信息、价格、优惠等数据,适用于商品推荐、比价等场景。本文提供基于 Python 的实现示例,包含接口调用、数据解析及结果展示。使用时需配置淘宝联盟的 appkey、appsecret 和 adzone_id,并注意接口调用频率限制和使用规范。
|
26天前
|
存储 监控 API
Python实战:跨平台电商数据聚合系统的技术实现
本文介绍如何通过标准化API调用协议,实现淘宝、京东、拼多多等电商平台的商品数据自动化采集、清洗与存储。内容涵盖技术架构设计、Python代码示例及高阶应用(如价格监控系统),提供可直接落地的技术方案,帮助开发者解决多平台数据同步难题。
|
29天前
|
存储 JSON 算法
Python集合:高效处理无序唯一数据的利器
Python集合是一种高效的数据结构,具备自动去重、快速成员检测和无序性等特点,适用于数据去重、集合运算和性能优化等场景。本文通过实例详解其用法与技巧。
86 0
|
2月前
|
存储 Web App开发 前端开发
Python + Requests库爬取动态Ajax分页数据
Python + Requests库爬取动态Ajax分页数据
|
11天前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
13天前
|
数据采集 数据可视化 关系型数据库
基于python大数据的电影数据可视化分析系统
电影分析与可视化平台顺应电影产业数字化趋势,整合大数据处理、人工智能与Web技术,实现电影数据的采集、分析与可视化展示。平台支持票房、评分、观众行为等多维度分析,助力行业洞察与决策,同时提供互动界面,增强观众对电影文化的理解。技术上依托Python、MySQL、Flask、HTML等构建,融合数据采集与AI分析,提升电影行业的数据应用能力。
|
1月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
110 18

推荐镜像

更多