查看原文
其他

一行代码教你玩转emoji

爬虫俱乐部 Stata and Python数据分析 2022-12-31

本文作者:喻淑敏,中南财经政法大学统计与数学学院

本文编辑:冀思慧

技术总编:王子一

Stata&Python云端课程来啦!

      为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~


引言

     敲代码时,一些有趣操作的加入无疑可以使得兴趣 UP 好几个 LEVEL。你还记得曾经被滑稽刷屏的场景吗?

   在这个各种表情包横行的时代,emoji表情仍占据了一席之地!

   正好了解到 Python 支持 emoji 表情的输出,实现方式相当简单。这篇文章将带你了解一下,Python与emoji表情之间会有怎样的联系!


1、安装emoji库

初次使用emoji时,需要进行安装,安装命令如下:
pip install emoji d
emoji库的官方网址:https://pypi.org/project/emoji/
emoji库安装好后,想要输出库中所有emoji表情包可用如下代码:
import emoji[v for k,v in emoji.EMOJI_UNICODE['en'].items() ]
据悉,Python中的emoji库几乎支持所有 emoji 表情,对于想要了解更多emoji表情的友友,我们提供相关链接:

1、表情包的编码可以参考:https://www.webfx.com/tools/emoji-cheat-sheet/

主要提供的是emoji表情及其对应的表情字符串简码,下图为截取的部分表情及其对应字符:

2、查看表情的unicode编码:https://www.unicode.org/emoji/charts/full-emoji-list.html

     主要提供的是emoji表情及其对应的unicode转义字符。举例来说:\U0001f400是🐀的转义字符

     在此处,我们提供十二生肖emoji表情对应的unicode转义字符如下图所示:

2、内置函数

emoji库中包括五个函数,各函数功能如下表。

 其中,对于emoji表情的调用主要依靠于emojize()demojize(),具体使用见下文。

3、实践

首先,导入emoji库。
import emoji
接下来,以简要小例子介绍emojize()demojize()使用指南。友友们也可以自己动手试试哟~
# 默认的表情可以直接通过表情的字符实现print(emoji.emojize('Python is :thumbs_up:')) # 输出为 Python is 👍
# 有些特殊的表情需要指定 use_aliases=True 参数才可以实现print(emoji.emojize('Sleeping is :zzz:', use_aliases=True)) # 输出为 Sleeping is 💤
# 同时也支持反向操作print(emoji.demojize('脑阔疼 🙉')) # 输出为 脑阔疼 :hear-no-evil_monkey:

要快乐呀 露出你的笑容叭~

#要快乐 多笑笑呀print(emoji.emojize(":smile: :laughing: :smiley: :blush:", use_aliases=True))

送你几朵小红花呀~

#送你几朵小红花print(emoji.emojize(":rose: :rose: :rose: :rose:", use_aliases=True))

4、两个小游戏

对emoji表情的应用不想只是简单的放入字符串中,而是更好的把emoji表情用于日常Python的运用,于是我们想到把emoji表情包与可视化融在一起。因此,想到下面两种游戏:
游戏一

游戏要求:将十二生肖生成一幅散点图。

具体步骤如下:

1、生成散点图中的x、y取值

import randomx=np.arange(1,13)y=random.uniform(0,12)+xprint(x)print(y)

2、定义函数mark1,为生成标签变量做函数准备

def mark1(a): if a== 1: return emoji.emojize("\U0001f400") elif a==2: return emoji.emojize("\U0001f300") elif a==3: return emoji.emojize("\U0001f390") elif a==4: return emoji.emojize("\U0001f411") elif a==5: return emoji.emojize("\U0001f410") elif a==6: return emoji.emojize("\U0001f404") elif a==7: return emoji.emojize("\U0001f408") elif a==8: return emoji.emojize("\U0001f412") elif a==9: return emoji.emojize("\U0001f434") elif a==10: return emoji.emojize("\U0001f437") elif a==11: return emoji.emojize("\U0001f418") else: return emoji.emojize("\U0001f43a")for i in x: print(mark1(i))

3、生成新变量var作为散点图的点标签,其中变量的取值为十二生肖

#把mark1(x)生成一个变量var放入散点图当点标签呢var = [mark1(i) for i in range(1,13)]print(var)

4、绘制散点图

#绘制散点图import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
fig=plt.figure(figsize=(8,6)) #新建画布ax=plt.subplot(1,1,1) #子图初始化ax.scatter(x,y) #绘制散点图ax.set_title("动物emoji一览") #设置图例ax.set_xlabel("x")ax.set_ylabel("y")plt.xticks(np.arange(1,13))

5、给散点图加点标签

#给散点加emoji表情标签for i in range(len(x)): ax.text(x[i], y[i], var[i], fontsize=20, color = "blue", style = "italic", weight = "light", verticalalignment='center', horizontalalignment='center',rotation=0)
plt.show()

此时可看到我们预期的emoji点标签并没有显示出来,显示出来的是小方块,根据查阅相关资料,我们发现matplotlib是带有emoji语言的,这与中文标签plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文是一致的fontname='Segoe UI Emoji'
#给散点加emoji表情标签for i in range(len(x)): ax.text(x[i], y[i], var[i],fontname='Segoe UI Emoji', fontsize=20, color = "blue", style = "italic", weight = "light", verticalalignment='center', horizontalalignment='center',rotation=0)
plt.show()

在这里介绍plt.text(x,y,s),语法如下:

matplotlib.pyplot.text(x, y, s, fontdict=None, withdash=False, **kwargs)
  • x, y:表示坐标;

  • s:字符串文本;

  • fontdict:字典,可选;

  • kw:

    • fontsize:字体 (default=12)

    • horizontalalignment:文本信息的水平对齐方式(default=‘center’、简写为ha=’cener’)

    • verticalalignment:文本信息的垂直对其方式 (default=’center’、简写为va=’center’)

  • fig.text()(fig = plt.figure(…))

  • ax.text()(ax = plt.subplot(…))

最后附上游戏一完整代码

###游戏一完整代码###import randomx=np.arange(1,13)y=random.uniform(0,12)+xprint(x)print(y)#生成散点图标签def mark1(a): if a== 1: return emoji.emojize("\U0001f400") elif a==2: return emoji.emojize("\U0001f300") elif a==3: return emoji.emojize("\U0001f390") elif a==4: return emoji.emojize("\U0001f411") elif a==5: return emoji.emojize("\U0001f410") elif a==6: return emoji.emojize("\U0001f404") elif a==7: return emoji.emojize("\U0001f408") elif a==8: return emoji.emojize("\U0001f412") elif a==9: return emoji.emojize("\U0001f434") elif a==10: return emoji.emojize("\U0001f437") elif a==11: return emoji.emojize("\U0001f418") else: return emoji.emojize("\U0001f43a")for i in x: print(mark1(i))#把mark1(x)生成一个变量var放入散点图当点标签呢var = [mark1(i) for i in range(1,13)]print(var)#生成散点图、import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
fig=plt.figure(figsize=(8,6)) #新建画布ax=plt.subplot(1,1,1) #子图初始化ax.scatter(x,y) #绘制散点图ax.set_title("动物emoji一览") #设置图例ax.set_xlabel("x")ax.set_ylabel("y")plt.xticks(np.arange(1,13))#给散点加emoji表情标签for i in range(len(x)): ax.text(x[i], y[i], var[i],fontname='Segoe UI Emoji', fontsize=20, color = "blue", style = "italic", weight = "light", verticalalignment='center', horizontalalignment='center',rotation=0)
plt.show()
游戏二

游戏要求:想要绘制一个简单的emoji人物表情直方图,我们从emoji库中选出几个emoji表情,并对其绘制直方图

#绘制直方图import matplotlib.pyplot as plt
a = {'🧑': 10, '👩': 23, '👨': 13, '🙅': 10, '🧒': 13}
ax = plt.subplot(111)ax.bar(range(1,6), a.values())
for label, x, y in zip(a.keys(), range(1,6), a.values()): plt.annotate( label, xy=(x, y), xytext=(10,10), textcoords='offset points', ha='right', va='bottom', bbox=dict(boxstyle='round,pad=0.5', alpha=0), fontname='Segoe UI Emoji', fontsize=20) ax.spines['right'].set_visible(False)ax.spines['top'].set_visible(False)ax.set_xticks([])
plt.show()

绘图过程不再具体阐述,仅延申plt.annotate(xy,xytext),语法如下:
matplotlib.pyplot.annotate(**args*, ***kwargs*)
比plt.text复杂,需要两个坐标:
  • xy:被注释的地方

  • xytext:插入文本的地方

5、结语

通过上边的介绍,大家是不是初步了解了emoji表情在Python中的使用了呢?其实,游戏一的灵感来源于爬虫俱乐部的另一篇推文《用“emoji”秀出你的风采》,那篇推文用stata来实现了此游戏,有兴趣的朋友可以前往学习哟~
最后,敬请期待爬虫俱乐部给大家介绍更多好玩好用的命令哟~
END
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。



腾讯课堂课程二维码





            


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!














往期推文推荐

票房遇冷的春节档口碑冠军丨《狙击手》影评分析

 学习丰县,营造良好营商环境!

 大国丢娃图:从川渝到徐州!

 丰县“失火”,殃及徐州:股市超跌近30亿!

 Unicode转义字符——编码与解码

        徐州!徐州!

        B站弹幕爬虫——冬奥顶流冰墩墩&雪容融

        不会用Stata做描述性统计表?so easy!

        丰沛之地:备足姨妈巾

 过年啦,用Python绘制一幅属于你的春联吧!

       登上爬虫俱乐部“时光机” |上“机”出发 开启一段奇妙之旅

       【基础篇】查找并输出子字符串的定位

        Stata中的小清新命令——添加观测值

        PCA(主成分分析法)降维——Python实现

       超好用的事件研究法

        如何绘制任泽平《鼓励生育基金》的几幅图

        Python 第六天——字符串

        findname——想要什么找什么

        Python字符串之“分分合合”

        PDF转docx可批量操作?——wordconvert的小技巧

        考研之后,文科生需以“do”躬“do”!

       手绘五星兴家国——用Stata绘制五星红旗

        Seminar丨董事会的性别多样化和企业创新:来自国际的证据

       Python与数据库交互——窗口函数

        Stata之post命令——数据邮递 

        爬虫俱乐部成员的Stata学习经验分享来啦!

       Seminar丨2002年萨班斯·奥克斯利法案的经济后果

        我几乎画出了“隔壁三哥”家的国旗

        Python基础——三大数字类型,你都了解吗?
        如何用Stata绘制带指向性箭头标注的图像       
       Seminar丨荐仆贷款——19世纪中国的信任辅助贷款       【技能篇】多进程队列间通信

Seminar丨公司董事会的人才增长:来自中国的证据

正则表达式--懒惰模式

爬完独立董事的年薪,我的眼镜跌破了!

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存