来源:15 Python Snippets to Optimize your Data Science Pipeline

翻译:RankFan

15种Python片段去优化你的数据科学管道

为什么片段对于数据科学是重要的

在我的日常中,我经常处理许多同样的状况,主要是从加载 csv 文件到数据可视化。因此,为了流水线这个过程,我有兴趣去储存一些 code 片段, 在不同的情形下,加载csv文件到数据可视化是非常有帮助的。

在这篇短文中,我将分享15个Python片段去简化你不同的数据分析管道。

1. 通过 GLob 和 List 加载多个文件

  1. import glob
  2. import pandas as pd
  3. csv_files = glob.glob("path/to/folder/with/csvs/*.csv")
  4. dfs = [pd.read_csv(filename) for filename in csv_flies]

2. 得到列中的唯一值

  1. import pandas as pd
  2. df = pd.read_csv("path/to/csv/file.csv")
  3. df = ["Item_Identifier"].unique()
  4. array['FDA15', 'DRC01', 'FDN15', ..., 'NCF55', 'NCW30', 'NCW05'],dtype = object]

3. 并排展示Pandas Dataframe

  1. from IPython.display import display_html
  2. from itertools import chain, cycle
  3. def display_side_by_side(*arg, title = cycle([''])):
  4. html_str = ""
  5. for df, title in zip(args, chain(title, cycle(['</br>']))):
  6. html_str += '< the style = " text-align : center "> < td style = "vertical-align : top">'
  7. html_str += "<br>"
  8. html_str += f'<h2>{title}</h2>'
  9. html_str += df.to_html().replace('table', tabel style="display:inline")
  10. html_str += '</td></th>'
  11. display_html(html_str, raw = True)
  12. df1 = pd.csv_read("file_csv")
  13. df2 = pd.csv_read("file2")
  14. dispaly_side_by_side(df1.head(), df2.head(), titles=[Sales, Advertising])

4. 移除Pandas DataFrame中的缺失值

  1. df = pd.DataFrame(dict(a = [1, 2, 3, None]))
  2. df
  3. df.dropna(inplace = True)
  4. df

5. 显示缺失值的个数

  1. def FindNanCol(df):
  2. for col in df:
  3. print(f"Column : {col}")
  4. num_Nans = df[col].isnull().sum()
  5. print(f"Number of Nans : {num_Nans}")
  6. df = pd.DataFrame(dict(a = [1, 2, 3, None], b = [None, None, 5, 6]))
  7. FindNanCol(df)

6. 使用.apply 函数和 lambda 函数 转变列

  1. df = pd.DataFrame(dict(a = [10, 20 ,30, 40, 50]))
  2. square = lambda x: x**2
  3. df["a"] = df["a"].apply(square)
  4. df

7. 将两个DataFrame列转化为字典

  1. df = pd.DataFrame(dict(a = ["a", "b", "c"], b = [1, 2, 3]))
  2. df_dictionary = dict(zip(df["a"], df["b"]))
  3. df_dictionary

8. 绘制列的网格分布

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import seaborns as sns
  4. import pandas as pd
  5. sns.set()
  6. df = pd.DataFrame(dict(a = np.random.randint(0, 100, 100), b = np.arange(0, 100, 1)))
  7. plt.figure(figsize = (15,7))
  8. plt.subplot(1, 2, 1)
  9. df["b"][df["a"]>50].hist(color='green', label="bigger than 50")
  10. plt.legend()
  11. plt.subplot(1, 2, 1)
  12. df["b"][df["a"]<50].hist(color='orange', label="small than 50")
  13. plt.legend()
  14. plt.show

9. 在pandas中对不同的列进行t检验

  1. from scipy.stats import ttest_rel
  2. data = np.arange(0, 1000, 1)
  3. data_plus_noise = np.arange(0, 1000, 1) + np.random.normal(0, 1, 1000)
  4. df = pd.DataFrame(dict(data = data, data_plus_noise = data_plus_noise))
  5. print(ttest_rel(df["data"], df["data_plus_noise"]))

10. 合并数据

  1. df1 = pd.DataFrame(dict(a = [1, 2, 3], b=[10, 20, 30], col_to_merge= ["a", "b", "c"]))
  2. df2 = pd.DataFrame(dict(d = [10, 20, 30], col_to_merge=["a", "b", "c"]))
  3. df_merged = df1.merge(df2, on='col_to_merge')

11. 用sklearn进行标准化

  1. from sklearn.preprocessing import MinMaxScaler
  2. scaler = MinMaxScaler()
  3. scores = scaler.fit_transform(df["a"].values.reshape(-1, 1))

12. 丢弃特定列的缺失值

  1. df.dropna(subset = ["col_to_remove_NaNs_from"], inplace = True)

13. 有条件的选择dataframe的子集

  1. df = pd.Dataframe(dict(result = ["pass", "Fail", "pass", "Fail", "Distinction", "Distinction"]))
  2. pass_index = (df["result"] == "pass") | (df["result"] == "Distinction")
  3. df_pass = df['pass_index']
  4. df_pass

14. 饼图

  1. import matplotlib.pyplot as plt
  2. df = pd.DataFrame(dict(a = [10, 20, 50, 10, 10], b=["A", "B", "C", "D", "E"]))
  3. labels = df["b"]
  4. sizes = df["a"]
  5. plt.pie(sizes, labels = labels, autopct = '%1.1f%%', shadow = True, startangle=140)
  6. plt.axis('equal')
  7. plt.show

15. 将百分数字符串转化为数值

  1. def change_to_numerical(x):
  2. try:
  3. x = int(x.strip("%")[:2])
  4. except:
  5. x = int(x.strip("%")[:1])
  6. return x
  7. df = pd.DataFrame(dict(a =["A", "B" ,"C"], col_with_percentage = ["10%", "20%", "70%"]))
  8. df["col_with_percentage"] = df["col_with_percentage"].apply(change_to_numerical)
  9. df

结论

我认为代码片段是非常有用,重新写是浪费时间的,因此,有一个完整的工具包可以对数据分析进行流水线处理,这是非常有帮助的。

15种Python片段去优化你的数据科学管道的更多相关文章

  1. 探讨2018年最受欢迎的15顶级Python库!

    近日,数据科学网站 KDnuggets 评选出了顶级 Python 库 Top15,领域横跨数据科学.数据可视化.深度学习和机器学习.如果本文有哪些遗漏,你可以在评论区补充. 图 1:根据 GitHu ...

  2. 数据处理一条龙!这15个Python库不可不知

    如果你是一名数据科学家或数据分析师,或者只是对这一行业感兴趣,那下文中这些广受欢迎且非常实用的Python库你一定得知道. 从数据收集.清理转化,到数据可视化.图像识别和网页相关,这15个Python ...

  3. 干货!小白入门Python数据科学全教程

    前言 本文讲解了从零开始学习Python数据科学的全过程,涵盖各种工具和方法 你将会学习到如何使用python做基本的数据分析 你还可以了解机器学习算法的原理和使用 说明 先说一段题外话.我是一名数据 ...

  4. 为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字)

    为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字) 在PyData Seattle 2017中,Jake Vanderplas介绍了Python的发展历程以及最新动态.在这里我们把 ...

  5. 3 个用于数据科学的顶级 Python 库

    使用这些库把 Python 变成一个科学数据分析和建模工具. Python 的许多特性,比如开发效率.代码可读性.速度等使之成为了数据科学爱好者的首选编程语言.对于想要升级应用程序功能的数据科学家和机 ...

  6. Python 代码性能优化技巧(转)

    原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...

  7. 小测几种python web server的性能

    http://blog.csdn.net/raptor/article/details/8038476 因为换了nginx就不再使用mod_wsgi来跑web.py应用了,现在用的是gevent-ws ...

  8. 斐波那契数列的5种python实现写法

    斐波那契数列的5种python写法       斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖 ...

  9. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等

    Java 中15种锁的介绍 Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等,在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类 ...

随机推荐

  1. LeetCoded第2题题解--两数相加

    2.两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...

  2. 服务器程序动态加载自定义jar包的过程

    需求: 用过hive的都知道,可以自定义hive的一个udf jar,然后将这个jar add到hive服务端,就会加载这个jar实现用户自定义逻辑.现在的需求就是实现这么一个服务端所做的事情! 场景 ...

  3. mzy git学习,git推送到远程库(八)

    git在同步到远程库 关于git中多个用户切换的事情: 完全使用账户密码策略连接远程库: 之前一直尝试在本地切换多个用户,发现一直不行,很奇怪?后面发现必须要去win10的凭据管理器删除当前git的凭 ...

  4. linux shell 脚本输入参数解析

    文件名: test.sh #!/bin/bash para="para: "; while [ $# -ge 2 ] ; do case "$1" in --a ...

  5. Linux centos7 find 命令

    2021-08-13 1. 命令简介 find 命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子 ...

  6. Tomcat 端口配置及原理详解

    1. tomcat 文件配置详细说明 tomcat服务器需配置三个端口才能启动,安装时默认启用了这三个端口,当要运行多个tomcat服务时需要修改这三个端口,不能相同.端口配置路径为tomcat\ c ...

  7. centos7 wget安装jdk

    2021-07-151. 环境介绍 操作系统:centos7 jdk版本:jdk1.8.0.211 2. 下载 进入 https://www.oracle.com/java/technologies/ ...

  8. 云原生学习筑基 ~ 组网必备知识点 ~ DNS服务

    @ 目录 一.为啥写这篇文章? 二.DNS的作用 三.域 四.DNS工作原理 五.搭建DNS服务器 5.1.Bind 5.2.系统环境准备 5.3.安装 5.4.查看bind的相关文件 5.5.查看b ...

  9. APT组织跟踪与溯源

    前言 在攻防演练中,高质量的蓝队报告往往需要溯源到攻击团队.国内黑产犯罪团伙.国外APT攻击. 红队现阶段对自己的信息保护的往往较好,根据以往溯源成功案例来看还是通过前端js获取用户ID信息.mysq ...

  10. JQ动画

    /* //基本 show([s,[e],[fn]]) 显示元素 hide([s,[e],[fn]]) 隐藏元素 //滑动 slideDown([s],[e],[fn]) 向下滑动 slideUp([s ...