欢迎关注 ,专注Python、数据分析、数据挖掘、好玩工具!

本文介绍一些我们可能很少听过,但是对于特定问题或者特定任务来说,却非常实用的工具包,文末提供技术交流群,欢迎大家一起学习讨论。

为了配合上述 Python 库的使用,我们先从 Kaggle 上下载一个数据 – Animal Care and Control Adopted Animals

https://www.kaggle.com/jinbonnie/animal-data

import pandas as pd
df = pd.read_csv('animal-data-1.csv')
print('Number of pets:', len(df))
print(df.head(3))

Number of pets: 10290

id           intakedate intakereason  istransfer sheltercode  \0  15801  2009-11-28 00:00:00       Moving           0   C091154631  15932  2009-12-08 00:00:00       Moving           0   D091255942  28859  2012-08-10 00:00:00    Abandoned           0   D12082309identichipnumber animalname                breedname basecolour speciesname  \0       0A115D7358     Jadzia      Domestic Short Hair     Tortie         Cat1       0A11675477      Gonzo  German Shepherd Dog/Mix        Tan         Dog2       0A13253C7B     Maggie  Shep Mix/Siberian Husky    Various         Dog...         movementdate movementtype istrial returndate returnedreason  \0  ...  2017-05-13 00:00:00     Adoption     0.0        NaN          Stray1  ...  2017-04-24 00:00:00     Adoption     0.0        NaN          Stray2  ...  2017-04-15 00:00:00     Adoption     0.0        NaN          Straydeceaseddate deceasedreason diedoffshelter puttosleep isdoa0           NaN   Died in care              0          0     01           NaN   Died in care              0          0     02           NaN   Died in care              0          0     0[3 rows x 23 columns]

下面我们就进入这些 Python 库的介绍

1. Missingno

Missingno 是用于在数据集当中显示缺失值的,这对于我们的数据分析来说是非常有用的。而且还能做成热力图或者条形图,来更加直观的观察缺失值

  • matrix - 类似于 seaborn 中的缺失值热图,可以最多展示数据集中50列的密度情况,也可以通过右侧的迷你图,来整体观测数据集的缺失情况

  • bar - 案列显示缺失值情况

  • heatmap - 展示缺失值之间的相关性,本质上,揭示了变量的存在与否对另一个变量的存在的影响程度。而对于没有缺失值的列或者全完没有值的列,则不会出现在这里

  • dendrogram - 树状图与热图类似,展示的是列之间缺失的相关性,而与热图不同的地方是通过一组列来揭示相关性

下面我们就来具体看看这些图表

import missingno as msnomsno.matrix(df)

msno.bar(df)

msno.heatmap(df)

msno.dendrogram(df)

对于 missingno 图表,我们还可以自定义一些参数

msno.matrix(df,figsize=(25,7),fontsize=30,sort='descending',color=(0.494, 0.184, 0.556),width_ratios=(10, 1))

最后我们还可以与 matplotlib 相结合,制作更加优美的图表

import matplotlib.pyplot as plt
msno.matrix(df,figsize=(25,7),fontsize=30,sort='descending',color=(0.494, 0.184, 0.556),width_ratios=(10, 1),inline=False)
plt.title('Missing Values Pet Dataset', fontsize=55)
plt.show()

2. Tabulate

这个库可以在 Python 中打印出漂亮的表格,允许智能和可定制的列对齐、数字和文本格式、小数点对齐,也是一个数据分析过程中的好用工具。支持的数据类型包括 dataframe, list of lists or dictionaries, dictionary, NumPy array

from tabulate import tabulate
df_pretty_printed = df.iloc[:5, [1,2,4,6]]
print(tabulate(df_pretty_printed))
-  -----------  -----------------------  ------  -----
0  Jadzia       Domestic Short Hair      Female  Stray
1  Gonzo        German Shepherd Dog/Mix  Male    Stray
2  Maggie       Shep Mix/Siberian Husky  Female  Stray
3  Pretty Girl  Domestic Short Hair      Female  Stray
4  Pretty Girl  Domestic Short Hair      Female  Stray
-  -----------  -----------------------  ------  -----

我们还可以自定义表格头,使用参数 headers

print(tabulate(df_pretty_printed,headers='keys',tablefmt='fancy_grid',stralign='center'))
│    │  animalname  │        breedname        │  sexname  │  returnedreason  │
╞════╪══════════════╪═════════════════════════╪═══════════╪══════════════════╡
│  0 │    Jadzia    │   Domestic Short Hair   │  Female   │      Stray       │
├────┼──────────────┼─────────────────────────┼───────────┼──────────────────┤
│  1 │    Gonzo     │ German Shepherd Dog/Mix │   Male    │      Stray       │
├────┼──────────────┼─────────────────────────┼───────────┼──────────────────┤
│  2 │    Maggie    │ Shep Mix/Siberian Husky │  Female   │      Stray       │
├────┼──────────────┼─────────────────────────┼───────────┼──────────────────┤
│  3 │ Pretty Girl  │   Domestic Short Hair   │  Female   │      Stray       │
├────┼──────────────┼─────────────────────────┼───────────┼──────────────────┤
│  4 │ Pretty Girl  │   Domestic Short Hair   │  Female   │      Stray       │
╘════╧══════════════╧═════════════════════════╧═══════════╧══════════════════╛

不过这个库打印出的表格数据在手机屏幕上会有一定的兼容性问题,只有在PC机上才能有最佳的显示效果

3. Wikipedia

维基百科库,可以方便的访问维基百科信息,以及获取数据

该库的几个主要功能如下:

  • 搜索维基百科 - search()

  • 获取文章摘要 - summary

  • 获取完整页面内容,包括图像、链接等 - page()

  • 选择语言 - set_lang()

我们以上面数据集当中的 Siberian Husky 为关键词,在维基百科中设置为俄语搜索一下,看看结果

import wikipedia
wikipedia.set_lang('ru')
print(wikipedia.search('Siberian Husky'))
['Сибирский хаски', 'Древние породы собак', 'Маккензи Ривер Хаски', 'Породы собак по классификации кинологических организаций', 'Ричардсон, Кевин Майкл']

我们获取第一个搜索结果当中的第一段话

print(wikipedia.summary('Сибирский хаски', sentences=1))
Сибирский хаски — заводская специализированная порода собак, выведенная чукчами северо-восточной части Сибири и зарегистрированная американскими кинологами в 1930-х годах как ездовая собака, полученная от аборигенных собак Дальнего Востока России, в основном из Анадыря, Колымы, Камчатки у местных оседлых приморских племён — юкагиров, кереков, азиатских эскимосов и приморских чукчей — анкальын (приморские, поморы — от анкы (море)).

下面我们再来获取图片信息

print(wikipedia.page('Сибирский хаски').images[0])

就可以拿到图片了

4. Wget

对于这个库,熟悉 Linux 的同学应该都知道,一个好用的 shell 命令也叫做 wget,是用来下载文件的,这个 Python 库也有着同样的功能

我们来试试下载上面哈士奇图片吧

import wget
wget.download('https://upload.wikimedia.org/wikipedia/commons/a/a3/Black-Magic-Big-Boy.jpg')
'Black-Magic-Big-Boy.jpg'

当然使用该库,我们还可以方便的下载 HTML 文件

wget.download('https://www.kaggle.com/jinbonnie/animal-data')
'animal-data'

下载好的文件内容类似:

<!DOCTYPE html>
<html lang="en">
<head><title>Animal Care and Control Adopted Animals | Kaggle</title><meta charset="utf-8" /><meta name="robots" content="index, follow" /><meta name="description" content="animal situation in Bloomington Animal Shelter from 2017-2020" /><meta name="turbolinks-cache-control" content="no-cache" />

5. Faker

这个库是用来生成假数据的,这个在我们平时的程序测试当中还是非常好用的。它可以生成包括名字、邮件地址、电话号码、工作、句子、颜色,货币等等众多假数据,同时还支持本地化,也就是可以将当前工作语言环境作为参数,生成当前语言的假数据,实在是太贴心了

from faker import Faker
fake = Faker()print('Fake color:', fake.color(), '\n''Fake job:',   fake.job(),   '\n''Fake email:', fake.email(), '\n')# Printing a list of fake Korean and Portuguese addresses
fake = Faker(['ko_KR', 'pt_BR'])
for _ in range(5):print(fake.unique.address())     # using the `.unique` propertyprint('\n')# Assigning a seed number to print always the same value / data set
fake = Faker()
Faker.seed(3920)
print('This English fake name is always the same:', fake.name())
Fake color: #212591
Fake job: Occupational therapist
Fake email: nancymoody@hotmail.comEstrada Lavínia da Luz, 62
Oeste
85775858 Moura / SE
Residencial de Moreira, 57
Morro Dos Macacos
75273529 Farias / TO
세종특별자치시 강남구 가락거리 (예원박김마을)
전라북도 광주시 백제고분길 (승민우리)
경상남도 당진시 가락53가This English fake name is always the same: Kim Lopez

我们再回到我们的动物数据集,我们发现有两个动物的名字不是特别好

df_bad_names = df[df['animalname'].str.contains('Stink|Pooh')]
print(df_bad_names)
identichipnumber animalname            breedname speciesname sexname  \
1692              NaN    Stinker  Domestic Short Hair         Cat    Male
3336  981020023417175       Pooh  German Shepherd Dog         Dog  Female
3337  981020023417175       Pooh  German Shepherd Dog         Dog  Femalereturndate                     returnedreason
1692                  NaN                              Stray
3336  2018-05-14 00:00:00  Incompatible with owner lifestyle
3337                  NaN                              Stray

下面我们分别为这两只猫狗重新命名一个好听的名字

# Defining a function to rename the unlucky pets
def rename_pets(name):if name == 'Stinker':fake = Faker()Faker.seed(162)name = fake.name()if name == 'Pooh':fake = Faker(['de_DE'])Faker.seed(20387)name = fake.name()return name# Renaming the pets
df['animalname'] = df['animalname'].apply(rename_pets)# Checking the results
print(df.iloc[df_bad_names.index.tolist(), :] )
identichipnumber            animalname            breedname speciesname  \
1692              NaN         Steven Harris  Domestic Short Hair         Cat
3336  981020023417175  Helena Fliegner-Karz  German Shepherd Dog         Dog
3337  981020023417175  Helena Fliegner-Karz  German Shepherd Dog         Dogsexname           returndate                     returnedreason
1692    Male                  NaN                              Stray
3336  Female  2018-05-14 00:00:00  Incompatible with owner lifestyle
3337  Female                  NaN                              Stray

怎么样,名字是不是好听多了

6. Numerizer

该库可以将自然语言转化为数字,我们来看看吧
我们先来获取名称中包含数据的动物的信息

df_numerized_names = df[['identichipnumber', 'animalname', 'speciesname']]\[df['animalname'].str.contains('Two|Seven|Fifty')]
df_numerized_names

下面我们就把名称中的数字转化成阿拉伯数字

from numerizer import numerize
df['animalname'] = df['animalname'].apply(lambda x: numerize(x))
df[['identichipnumber', 'animalname', 'speciesname']].iloc[df_numerized_names.index.tolist(), :]

7. Emoji

符号库,我们可以根据 Unicode Consortium 2 定义的表情符号代码将字符串转换为表情符号,emoji 库只有两个函数:emojize()demojize()

import emoji
print(emoji.emojize(':koala:'))
print(emoji.demojize(''))
print(emoji.emojize(':rana:', language='it'))
												

长知识了!这8个很少用但却很实用的 Python 库真棒!相关推荐

  1. excel内容少却文件很大_(excel内容很少,文件却很大,怎么解决)excel表格数据少但是过大怎么办...

    如何处理数据很少文件却很大的Excel表格 有时面某无用列单元格出现时,会计算.(假如在zz128单元格误打一空格,是很难发现的,如果实际数据只有两列或比较少的列就会因为这一个空格占了很大的空间.)可 ...

  2. Oracle数据库表,数据量很少,但是查询很慢

    Oracle数据库表,数据量很少,但是查询很慢 1.起因 1.1.原因排查 1.2.原因分析 2.解决方式 2.1.删表重建这张表(95%解决一切问题) 2.2.建索引(目前用的) 1.起因 一开始是 ...

  3. Excel表数据很少,内存占用很大

    问题描述 一个Excel表中只有很少的数据,但是占用了很大的空间. 打开该Excel表发现,横向滚动轴或纵向滚动轴很长,但是没有数据(滚动轴能滚到的区域基本是这个sheet占用的区域) 通过Ctrl+ ...

  4. 很少人知道但很有用的 Linux 命令

    Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.Linux命令和它们的转换对于Linux用户.Shell脚本程序员和管理员来说是最有 ...

  5. 很少人知道,但是非常实用的 Python 库

    Python 是一个很棒的语言.它是世界上发展最快的编程语言之一.它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性.整个 Python 及其库的生态系统使它成为全世界用户(初学者和 ...

  6. python 模糊匹配_很冷门,但非常实用的 Python 库

    Python 是一个很棒的语言.它是世界上发展最快的编程语言之一.它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性.整个 Python 及其库的生态系统使它成为全世界用户(初学者和 ...

  7. 很冷门,但非常实用的 Python 库

    Python是一种很棒的编程语言.事实上,它还是世界上发展最快的编程语言之一.它一次又一次证明了它在数据科学职位中的实用性.整个Python及其库的生态系统使其成为全世界用户(初学者和高级)的合适选择 ...

  8. 涨知识了!这9个鲜为人知的 Python 第三方库真棒!

    欢迎关注 ,专注 Python.数据分析.数据挖掘.好玩工具! Python 编程充满了机会.它简单明了,拥有许多很酷的库和特色功能,可以使任务变得简单得多.每个 Python 开发人员都必须与热门的 ...

  9. 为什么计算机学硕人那么少,考研分数看似不高,为什么考上的人相对很少?总结得很精辟...

    考研分数看着不高实则是因为总分不高 很多人把考研和高考相比较,高考550才能上一本线,而考研只要350就能上线了.可是不要忘记了高考满分是750分,而考研满分才500分. 考研分数有总分和单科分数的要 ...

最新文章

  1. 求数组中奇数偶数的个数
  2. MATLAB从入门到精通-如何用matlab来提取txt文本中的实验数据
  3. IDOC、ALE、EDI三者之间的区别与联系
  4. 人工智能 | 增强小目标检测(Augmentation for small object detection)
  5. 漫游Kafka入门篇之简单介绍
  6. 事务管理基础:排它锁和共享锁相关知识笔记
  7. mysql数据库教程全解_MySQL数据库基础教程详解
  8. c语言怎么运行出星星,C语言打印星星的问题
  9. tortoise svn 请求的名称有效,但是找不到请求的类型的数据
  10. Oracle 数据库基础学习 (二)
  11. VMware安装windows2003操作系统
  12. Java飞机大战项目实战
  13. 微信小程序如何快速累计独立访客(UV)不低于 1000
  14. MAHLE PIS 3097/2.2 bar
  15. DBCO-C6-NHS ester,1384870-47-6二苯基环辛炔-碳6-琥珀酰亚胺酯仅用于科研,不用于人体和生产
  16. 开始体验WinXp + VmWare Workstation + Fedora8
  17. 【量化金融】多因子选股策略
  18. DDD与TDD比较之——TDD
  19. Ubuntu apt卸载
  20. office english text 2

热门文章

  1. 细说iOS静态库与动态库
  2. pascal语言基础(二)
  3. 利用QGIS将shp数据导入postgresql空间数据库
  4. python并发处理同一个文件_python并发编程(并发与并行,同步和异步,阻塞与非阻塞)...
  5. 【ZYNQ Ultrascale+ MPSOC FPGA教程】第四章 PL的LED实验
  6. MPR VTK 三维重建(二)multi-planner reformation 定位线 十字线
  7. 多元线性回归模型检验方法
  8. Kafka的数据存储
  9. imx6ull使用mjpg_stream调用摄像头,用opencv在windos进行视频查看
  10. 2020长亭面试题D题 申请经费