资讯专栏INFORMATION COLUMN

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

AZmake / 3464人阅读

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

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

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

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

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

</>复制代码

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

Number of pets: 10290

</>复制代码

  1. id intakedate intakereason istransfer sheltercode / 0 15801 2009-11-28 00:00:00 Moving 0 C09115463 1 15932 2009-12-08 00:00:00 Moving 0 D09125594 2 28859 2012-08-10 00:00:00 Abandoned 0 D12082309 identichipnumber animalname breedname basecolour speciesname / 0 0A115D7358 Jadzia Domestic Short Hair Tortie Cat 1 0A11675477 Gonzo German Shepherd Dog/Mix Tan Dog 2 0A13253C7B Maggie Shep Mix/Siberian Husky Various Dog ... movementdate movementtype istrial returndate returnedreason / 0 ... 2017-05-13 00:00:00 Adoption 0.0 NaN Stray 1 ... 2017-04-24 00:00:00 Adoption 0.0 NaN Stray 2 ... 2017-04-15 00:00:00 Adoption 0.0 NaN Stray deceaseddate deceasedreason diedoffshelter puttosleep isdoa 0 NaN Died in care 0 0 0 1 NaN Died in care 0 0 0 2 NaN Died in care 0 0 0 [3 rows x 23 columns]

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

1. Missingno

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

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

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

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

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

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

</>复制代码

  1. import missingno as msnomsno.matrix(df)

</>复制代码

  1. msno.bar(df)

</>复制代码

  1. msno.heatmap(df)

</>复制代码

  1. msno.dendrogram(df)

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

</>复制代码

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

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

</>复制代码

  1. import matplotlib.pyplot as pltmsno.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

</>复制代码

  1. from tabulate import tabulatedf_pretty_printed = df.iloc[:5, [1,2,4,6]]print(tabulate(df_pretty_printed))

</>复制代码

  1. - ----------- ----------------------- ------ -----0 Jadzia Domestic Short Hair Female Stray1 Gonzo German Shepherd Dog/Mix Male Stray2 Maggie Shep Mix/Siberian Husky Female Stray3 Pretty Girl Domestic Short Hair Female Stray4 Pretty Girl Domestic Short Hair Female Stray- ----------- ----------------------- ------ -----

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

</>复制代码

  1. print(tabulate( df_pretty_printed, headers="keys", tablefmt="fancy_grid", stralign="center" ))

</>复制代码

  1. │ │ 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 为关键词,在维基百科中设置为俄语搜索一下,看看结果

</>复制代码

  1. import wikipediawikipedia.set_lang("ru")print(wikipedia.search("Siberian Husky"))

</>复制代码

  1. ["Сибирский хаски", "Древние породы собак", "Маккензи Ривер Хаски", "Породы собак по классификации кинологических организаций", "Ричардсон, Кевин Майкл"]

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

</>复制代码

  1. print(wikipedia.summary("Сибирский хаски", sentences=1))

</>复制代码

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

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

</>复制代码

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

就可以拿到图片了

4. Wget

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

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

</>复制代码

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

</>复制代码

  1. "Black-Magic-Big-Boy.jpg"

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

</>复制代码

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

</>复制代码

  1. "animal-data"

下载好的文件内容类似:

</>复制代码

  1. <!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

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

</>复制代码

  1. from faker import Fakerfake = 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 addressesfake = 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 setfake = Faker()Faker.seed(3920)print("This English fake name is always the same:", fake.name())

</>复制代码

  1. Fake color: #212591Fake job: Occupational therapistFake email: nancymoody@hotmail.comEstrada Lavínia da Luz, 62Oeste85775858 Moura / SEResidencial de Moreira, 57Morro Dos Macacos75273529 Farias / TO세종특별자치시 강남구 가락거리 (예원박김마을)전라북도 광주시 백제고분길 (승민우리)경상남도 당진시 가락53가This English fake name is always the same: Kim Lopez

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

</>复制代码

  1. df_bad_names = df[df["animalname"].str.contains("Stink|Pooh")]print(df_bad_names)

</>复制代码

  1. identichipnumber animalname breedname speciesname sexname /1692 NaN Stinker Domestic Short Hair Cat Male3336 981020023417175 Pooh German Shepherd Dog Dog Female3337 981020023417175 Pooh German Shepherd Dog Dog Female returndate returnedreason1692 NaN Stray3336 2018-05-14 00:00:00 Incompatible with owner lifestyle3337 NaN Stray

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

</>复制代码

  1. # Defining a function to rename the unlucky petsdef 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 petsdf["animalname"] = df["animalname"].apply(rename_pets)# Checking the resultsprint(df.iloc[df_bad_names.index.tolist(), :] )

</>复制代码

  1. identichipnumber animalname breedname speciesname /1692 NaN Steven Harris Domestic Short Hair Cat3336 981020023417175 Helena Fliegner-Karz German Shepherd Dog Dog3337 981020023417175 Helena Fliegner-Karz German Shepherd Dog Dog sexname returndate returnedreason1692 Male NaN Stray3336 Female 2018-05-14 00:00:00 Incompatible with owner lifestyle3337 Female NaN Stray

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

6. Numerizer

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

</>复制代码

  1. df_numerized_names = df[["identichipnumber", "animalname", "speciesname"]]/ [df["animalname"].str.contains("Two|Seven|Fifty")]df_numerized_names

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

</>复制代码

  1. from numerizer import numerizedf["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()

</>复制代码

  1. import emojiprint(emoji.emojize(":koala:"))print(emoji.demojize(""))print(emoji.emojize(":rana:", language="it"))

</>复制代码

  1. ?:koala:?

下面我们来符号化我们的动物吧

</>复制代码

  1. print(df["speciesname"].unique())

</>复制代码

  1. ["Cat" "Dog" "House Rabbit" "Rat" "Bird" "Opossum" "Chicken" "Wildlife" "Ferret" "Tortoise" "Pig" "Hamster" "Guinea Pig" "Gerbil" "Lizard""Hedgehog" "Chinchilla" "Goat" "Snake" "Squirrel" "Sugar Glider" "Turtle""Tarantula" "Mouse" "Raccoon" "Livestock" "Fish"]

我们要将字母全部转化为小写,然后在前后分别添加冒号

</>复制代码

  1. df["speciesname"] = df["speciesname"].apply(lambda x: emoji.emojize(f":{x.lower()}:", use_aliases=True))print(df["speciesname"].unique())

</>复制代码

  1. ["" "" ":house rabbit:" "" "" ":opossum:" "" ":wildlife:" ":ferret:"":tortoise:" "" "" ":guinea pig:" ":gerbil:" "" "" ":chinchilla:" """" ":squirrel:" ":sugar glider:" "" ":tarantula:" "" "" ":livestock:"""]

再进行名称同义词转化

</>复制代码

  1. df["speciesname"] = df["speciesname"].str.replace(":house rabbit:", ":rabbit:")/ .replace(":tortoise:", ":turtle:")/ .replace(":squirrel:", ":chipmunk:")df["speciesname"] = df["speciesname"].apply(lambda x: emoji.emojize(x, variant="emoji_type"))print(df["speciesname"].unique())

</>复制代码

  1. ["" "" "️" "" "" ":opossum:️" "" ":wildlife:️" ":ferret:️" "️" """" ":guinea pig:" ":gerbil:️" "" "" ":chinchilla:️" "" "" """:sugar glider:" "" ":tarantula:️" "" "" ":livestock:️" ""]

对于剩下的这些没有对应动物名称的数据,我们再转化会原来的数据形式

</>复制代码

  1. df["speciesname"] = df["speciesname"].str.replace(":", "").apply(lambda x: x.title())print(df["speciesname"].unique())df[["animalname", "speciesname", "breedname"]].head(3)

</>复制代码

  1. ["" "" "️" "" "" "Opossum️" "" "Wildlife️" "Ferret️" "️" "" """Guinea Pig" "Gerbil️" "" "" "Chinchilla️" "" "" "" "Sugar Glider""" "Tarantula️" "" "" "Livestock️" ""]

这样,我们就完成了符号化动物名称了

8. PyAztro

这个库的创造可能仅仅是为了娱乐吧,该库可以预测每一天不同星座的幸运数字、幸运时间、幸运颜色等等,感兴趣的朋友可以玩一玩

</>复制代码

  1. import pyaztropyaztro.Aztro(sign="taurus").description

</>复制代码

  1. "You need to make a radical change in some aspect of your life - probably related to your home. It could be time to buy or sell or just to move on to some more promising location."

我们再来看看我们的数据集,在我们的数据集中,有一只猫和一只狗叫 Aries(白羊座)

</>复制代码

  1. df[["animalname", "speciesname"]][(df["animalname"] == "Aries")]

还有很多动物叫做 Leo (狮子座)

</>复制代码

  1. print("Leo:", df["animalname"][(df["animalname"] == "Leo")].count())

</>复制代码

  1. Leo: 18

我们假设这就是动物们的星座,然后来使用该库预测他们的运势吧

</>复制代码

  1. aries = pyaztro.Aztro(sign="aries")leo = pyaztro.Aztro(sign="leo")print("ARIES: /n", "Sign:", aries.sign, "/n", "Current date:", aries.current_date, "/n", "Date range:", aries.date_range, "/n", "Sign description:", aries.description, "/n", "Mood:", aries.mood, "/n", "Compatibility:", aries.compatibility, "/n", "Lucky number:", aries.lucky_number, "/n", "Lucky time:", aries.lucky_time, "/n", "Lucky color:", aries.color,
  2. GPU云服务器
  3. 云服务器
  4. 致命的8个问题
  5. js输出8个不同的数
  6. 支持8个gpu的服务器
  7. 用python这脚本

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/120917.html

相关文章

  • Vue中你不知道但却很实用黑科技

    摘要:最近数月一直投身于的开源工作中,完成了大大小小多个组件,在组件化开发中积累了不少经验。在开发全局提示组件通知提醒组件对话框组件时,内部都是使用来渲染,但却是来隐式地创建这些实例,这样我们就可以像标题这样使用,但其内部还是通过来管理。 最近数月一直投身于 iView 的开源工作中,完成了大大小小 30 多个 UI 组件,在 Vue 组件化开发中积累了不少经验。其中也有很多带有技巧性和黑科...

    Heier 评论0 收藏0
  • Vue中你不知道但却很实用黑科技

    摘要:最近数月一直投身于的开源工作中,完成了大大小小多个组件,在组件化开发中积累了不少经验。在开发全局提示组件通知提醒组件对话框组件时,内部都是使用来渲染,但却是来隐式地创建这些实例,这样我们就可以像标题这样使用,但其内部还是通过来管理。 最近数月一直投身于 iView 的开源工作中,完成了大大小小 30 多个 UI 组件,在 Vue 组件化开发中积累了不少经验。其中也有很多带有技巧性和黑科...

    NicolasHe 评论0 收藏0
  • 大学四年学计算机最值得看技术书,要读就读最好书,程序员精品书单!

    摘要:其他语言数据结构跟算法一样是在开始写代码的时候用得很少,都有着包装好的现成东西供你使用,但同样是面试和岗位上升会用得到,我就不说数据结构对代码有多少好处,请记住一句话能够实现个功能和能够最优地实现个功能,是完全不同级别的要求。 ...

    liangzai_cool 评论0 收藏0
  • Python 基础起步 (六) List实用技巧大全

    摘要:如果还有不明白的小白朋友们可以百度一下哈,嗖的一下百家号补习班就出来啦,哈哈,你啥都没查到开个小玩笑。 ## List初步进阶 ## hello,大家好,经过上篇笔记的介绍,我们已经对List这种数据类型有了初步的理解,今天我要趁热打铁,为大家介绍一些实用的List技巧,希望能帮助到各位大家~ extend合并列表() first_lst = [I,am,noob] s...

    shevy 评论0 收藏0
  • 数据中心运维祖训“没有折腾,就没有故障”

    摘要:数据中心运维也喜静不喜动,少动慎动,这能最大程度减少故障发生。不过,的确是应该最大限度地去主动降低数据中心操作频率,尽量少动,这样可极大降低故障发生概率。作为数据中心的运维人,要时刻牢记祖训。没有折腾,就没有故障这句话虽糙,但却很有道理,尤其在运维上。据有关咨询机构统计,数据中心的故障中有百分之七十是人为故障,也就是与人的活动强相关,可见人对于数据中心来说是多么可怕。人为故障其中也可以分为有...

    FleyX 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<