numpy

1. 什么是numpy

  • numpy是一个在python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础库,多用于大型,多维数组上执行数值运算。

2. numpy基础

  1. 创建数组,得到ndarray的类型
    • a = np.array([1,2,3,4,5])
    • b = np.array(range(1,6))
    • c = np.arange(1,6)
    • arange相当于array(range())
  2. numpy中的数据类型
    • 创建数组时,指定数据类型:a = np.array(range(1,4), dtype="int32")
    • 查看数据类型:a.dtype
    • 修改数据类型:a.astype("bool") or a.astype(np.bool)
  3. numpy中的小数
    • a = np.array([random.random() for i in range(10)])
    • 保留固定位位小数:b = np.round(a, 2),保留两位小数
  4. 数组的形状
    • 查看数组的形状:a.shape
    • 修改数组的形状:a.reshape(3,4)
    • 注意:修改后的形状的元素个数要与修改前相等,否则无法修改。比如a数组的形状为一行12列,总元素个数为12个。修改后的形状为3行4列,总元素个数还是12个。
    • 把数组转化为1维数据
      • a.reshape(a.shape[0]*a.shape[1])
      • a.flatten()
  5. 数组的计算
    1. 数组和数的运算
      • 广播机制,跟数组中的每个元素进行运算
    2. 数组和数组的计算
      • 形状相同,对应的位置作运算
      • 某一维度上的形状相同,可以进行计算
      • 形状完全不同,不可以进行计算
    • 在numpy中可以理解为方向,使用0,1,2...数字来表示。对于一个一维数组,只有一个0轴,对于2维数组,有0轴和1轴,对于三维数组,有0,1,2轴

3. numpy常用方法

  1. numpy读取数据
  • CSV:Comma-Separated Value,逗号分隔值文件
    • 显示:表格状态
    • 源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录
    • 由于CSV便于展示,读取和写入,所以很多地方也是用CSV的格式存储和传输中小型的数据。
  • np.loadtxt(fname, dtype=np.float, delimiter=None, skiprows=(),usecols=None,unpack=Flse)
    参数 解释
    frame 文件路径
    dtype 数据类型,CSV的字符串以什么数据类型读入数组中,默认np.float
    delimiter 分隔字符串,默认是空格,改为逗号
    skiprows 跳过前X行,一般跳过第一行表头
    usecols 读取指定的列,索引,元祖类型
    unpack 如果是True,相当于矩阵转置,默认为False
    • 什么是转置?

      • 转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方便的去处理数据。
      • t.transpose()
      • t.T
      • t.swapaxes()
      • 以上三种方法都可以实现矩阵转置。
    • 现在这里有一个英国和美国各自youtube1000多个视频的点击,喜欢,不喜欢,评论数量(["views","likes","dislikes","comment_total"])的csv,运用刚刚所学习的只是,我们尝试来对其进行操作

      import numpy as np
      
      us_path = "./youtube_video_data/US_video_data_numbers.csv"
      gb_path = "./youtube_video_data/GB_video_data_numbers.csv"
      us = np.loadtxt(us_path, delimiter=",", dtype=np.int)
      gb = np.loadtxt(gb_path, delimiter=",", dtype=np.int)
      print(us)
      print(gb)
      
  1. numpy索引和切片

    • 取一行:a[1]
    • 取连续多行:a[2:4]
    • 取不连续多行:a[[2,4]]
    • 取一列:a[:,1]
    • 取连续多列:a[:,2:4]
    • 取不连续多列:a[:,[2,4]]
    • 取多个不相邻的点:a[[0,2],[0,1]]
  2. numpy中数值的修改

    • 取到要修改的行和列后,赋新值:a[:,2:4] = 0(第3列和第4列赋值为0)
  3. numpy中的布尔索引 & 三元运算符 & clip(裁剪)

    • t[t<10] = 0(把值小于10的,替换为0)
    • np.where(t<10,0,10)(小于10的替换为0,其他为10)
    • t.clip(10,18)(小于10替换为10,大于18替换为18)
  4. numpy中的nan和inf

    • nan():not a number不是一个数字
    • 什么时候会出现nan?
      • 当我们读取本地文件为float的时候,如果有缺失,就会出现nan。
      • 当做了一个不合适的计算的时候(比如无穷大减去无穷大)
    • inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷。
    • 什么时候会出现inf?
      • 比如一个数字除以0,(python中会直接报错,numpy中是一个inf或者-inf)
    • 注意点:
      • 两个nan是不相等的
      • np.nan != np.nan是True
      • 利用以上特性可以判断数组中nan的个数
        • np.count_nonzero(t !=t)
        • t[np.isnan(t)]=0
      • nan和任何值计算都为nan
      • 那么,在一组数据中单纯的把nan替换为0,合适吗?会带来什么样的影响?
        • 全部替换为0后,替换之前的平均值如果大于0,替换之后的平均值肯定会变小,所以一般的方式是把缺失的数值替换为均值或中值或者是直接删除有缺失的一行。

4. numpy常用统计方法

  • 求和:t.sum(axis=None)
  • 均值:t.mean(a, axis=None)
  • 中值:np.median(t,axis=None)
  • 最大值:t.max(axis=None)
  • 最小值:t.min(axis=None)
  • 极值:np.ptp(t,axis=None)
  • 标准差:t.std(axis=None)
    • 标准差是一组数据平均值分散程度的一种度量,一个较大的平均差,代表大部分数值和其平均值之间的差异较大。

ndarray缺失值的填充

数组中存在nan值,如何操作把其中的nan填充为每一列的均值

import numpy as np
 
 
def fill_ndarray(t1):
    for i in range(t1.shape[1]):
        # 取到当前这一列
        temp_col = t1[:,i]
        # 判断当前这一列有没有nan
        nan_num = np.count_nonzero(temp_col != temp_col)
        if nan_num != 0:
            temp_not_nan = temp_col[temp_col == temp_col]
            temp_col[np.isnan(temp_col)] = temp_not_nan.mean()

    return t1

t1 = np.arange(24).reshape(4,6).astype("float")

t1[1,2:] = np.nan
print(t1)
print("*"*50)
fill_ndarray(t1)
print(t1)
[[ 0.  1.  2.  3.  4.  5.]
 [ 6.  7. nan nan nan nan]
 [12. 13. 14. 15. 16. 17.]
 [18. 19. 20. 21. 22. 23.]]
**************************************************
[[ 0.  1.  2.  3.  4.  5.]
 [ 6.  7. 12. 13. 14. 15.]
 [12. 13. 14. 15. 16. 17.]
 [18. 19. 20. 21. 22. 23.]]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • numpy.random.randint Return random integers fromlow(inclu...
    onepedalo阅读 1,170评论 0 1
  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,110评论 0 18
  • 自学整理记录,大神见笑 为什么学习numpy 快速 方便 科学计算的基础库 什么是numpy 一个在Python中...
    岑洋阅读 2,614评论 0 0
  • 来源:NumPy Tutorial - TutorialsPoint 译者:飞龙 协议:CC BY-NC-SA 4...
    布客飞龙阅读 32,684评论 6 96
  • 今年辽宁地区海参养殖遭遇百年不遇的严重自然灾害,损失惨重,池塘里空圈的不在少数,而进入九月份最为关键的就是放苗,那...
    七喜_Lucky阅读 461评论 0 0