数据可视化----常用图表样式

数据可视化----常用图表样式
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np


# 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']

# 解决负号无法正常显示的问题
plt.rcParams['axes.unicode_minus'] = False

'''
折线图
使用plot()函数
代码格式如下:
plt.plot(x, y, color, linestyle, linewidth, marker, markeredgecolor, markeredgwidth
            markerfacecolor, markersize, label)
    linestyle主要有solid(实线),dashed(虚线),dashdot(线点相接),dotted(虚电线)
    marker:折线图中每点的标记物的形状
    markeredgecolor:标记外边颜色
    markeredgwidth:标记外边线宽
    markerfacecolor:标记物实心颜色
    label:图例
'''

# x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# y = np.array([886, 2335, 5710, 6482, 6120, 1605, 3813, 4428, 4631])
#
# plt.plot(x, y, label='注册用户数量', color='k', linestyle='dashdot',
#          linewidth=1, marker='o', markersize=5)
# plt.title('XXX公司1-9月注册用户数量')
# plt.xlabel('月份')
# plt.ylabel('注册人数')
# plt.grid()
# plt.legend()
# # 添加数据标签
# for a, b in zip(x, y):
#     plt.text(a, b, b, ha='center', va='bottom', fontsize=10)
# plt.show()

'''
柱状图
使用bar()函数
代码格式如下:
plt.bar(x, height, width=0.8, bottom=None, align='center', color, edgecolor)
    x:在什么位置显示柱形图
    width:每根柱子宽度可以不同
    bottom:每根柱子的底部位置,可以不同
    aligh:柱子位置与x值得关系,center表示柱子位于x值得中心位置,edge表示柱子位于x值得边缘位置
'''
# 建立一个坐标系
# plt.subplot(1, 1, 1)
# x = np.array(['东区', '北区', '南区', '西区'])
# y = np.array([8566, 6482, 5335, 7310])
# plt.bar(x, y, width=0.5, label='任务量')
# plt.title('全国各区分区任务量')
# plt.xlabel('分区')
# plt.ylabel('任务量')
# for a, b in zip(x, y):
#     plt.text(a, b, b, ha='center', va='bottom', fontsize=12)
# plt.legend()
# plt.grid()
# plt.show()

'''
簇状柱形图
'''
# 建立一个坐标系
# plt.subplot(1, 1, 1)
# x = np.array([1, 2, 3, 4])
# y1 = np.array([8566, 6482, 5335, 7310])
# y2 = np.array([4286, 2667, 3655, 3241])
# plt.bar(x, y1, width=0.3, label='任务量')
# plt.bar(x + 0.3, y2, width=0.3, label='完成量')
# plt.title('全国各区分区任务量')
# plt.xlabel('分区')
# plt.ylabel('任务情况')
# for a, b in zip(x, y1):
#     plt.text(a, b, b, ha='center', va='bottom', fontsize=12)
# for a, b in zip(x + 0.3, y2):
#     plt.text(a, b, b, ha='center', va='bottom', fontsize=12)
# plt.legend()
# plt.grid()
# # 设置x轴刻度值
# plt.xticks(x + 0.15, ['东区', '南区', '西区', '北区'])
# plt.show()

'''
堆积柱状图
'''
# plt.subplot(1, 1, 1)
# x = np.array(['东区', '南区', '西区', '北区'])
# y1 = np.array([8566, 6482, 5335, 7310])
# y2 = np.array([4286, 2667, 3655, 3241])
# plt.bar(x, y1, width=0.5, label='任务量')
# plt.bar(x, y2, width=0.5, label='完成量')
# plt.title('全国各区分区任务量')
# plt.xlabel('分区')
# plt.ylabel('任务情况')
# for a, b in zip(x, y1):
#     plt.text(a, b, b, ha='center', va='bottom', fontsize=12)
# for a, b in zip(x, y2):
#     plt.text(a, b, b, ha='center', va='bottom', fontsize=12)
# plt.legend()
# plt.grid()
# plt.show()

'''
条形图
使用barh()方法
代码格式如下:
plt.barh(y, width, height, align, color, edgecolor)
    y:在什么位置显示柱子,即纵坐标
    width:横坐标
    height:柱子得宽度
'''
# plt.subplot(1, 1, 1)
# y = np.array([8566, 6482, 6335, 7310])
# x = np.array(['东区', '北区', '南区', '西区'])
# plt.barh(x, height=0.5, width=y, label='任务量')
# plt.xlabel('任务量')
# plt.ylabel('区域')
# plt.legend(loc='upper right')
# plt.grid()
# plt.title('全国各分区任务量')
# for a, b in zip(x, y):
#     plt.text(b, a, b, ha='center', va='center', fontsize=12)
# plt.show()

'''
散点图
散点图常用来发现个变量之间的关系
使用scatter()函数
代码格式如下:
plt.scatter(x, y, s, c, marker, linewidths, edgecolors)
    (x, y):散点位置
    s:散点的大小。如果只有一个值,则每个点的大小一致,可以呈现多个值,让每个点的大小不一致
    c:散点颜色,可以不同
    marker:每个点的标记
'''
# 绘制1-8月平均气温与啤酒销量关系的散点图
# # 气温
# x = np.array([5.5, 6.6, 8.1, 15.8, 19.5, 22.4, 28.3, 28.9])
# # 销量
# y = np.array([2.38, 3.85, 4.41, 5.67, 5.44, 6.03, 8.15, 6.87])
# plt.subplot(1, 1, 1)
# plt.xlabel('平均气温')
# plt.ylabel('啤酒销量')
# plt.title('1-8月平均气温与啤酒销量关系图')
# plt.scatter(x, y, marker='o', s=150)
# for a, b in zip(x, y):
#     plt.text(a, b, b, va='center', ha='center', fontsize=7)
# plt.show()

'''
气泡图
与散点图类似,但图中各点的大小不一致
同样使用scatter()函数
'''
# # 气温
# x = np.array([5.5, 6.6, 8.1, 15.8, 19.5, 22.4, 28.3, 28.9])
# # 销量
# y = np.array([2.38, 3.85, 4.41, 5.67, 5.44, 6.03, 8.15, 6.87])
# colors = y*10  # 根据y值得大小生成不同的颜色
# area = y*100  # 根据y值得大小生成大小不同的形状
# plt.subplot(1, 1, 1)
# plt.xlabel('平均气温')
# plt.ylabel('啤酒销量')
# plt.title('1-8月平均气温与啤酒销量关系图')
# plt.scatter(x, y, marker='o', s=area, c=colors)
# for a, b in zip(x, y):
#     plt.text(a, b, b, va='center', ha='center', fontsize=7, color='white')
# plt.show()

'''
面积图
使用stackplot()函数
代码格式如下:
plt.stackplot(x, y, labels, colors)
    (x, y):x/y坐标数值
    labels:不同系列图表的图例名
'''
# XXX公司1-9月注册与激活人数面积图
# plt.subplot(1, 1, 1)
# x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# y1 = np.array([866, 2335, 5710, 6482, 6120, 1605, 3813, 4428, 4631])
# y2 = np.array([433, 1167, 2855, 3241, 3060,  802, 1906, 2214, 2315])
# labels = ['注册人数', '激活人数']
# # 绘制面积图
# plt.stackplot(x, y1, y2, labels=labels)
# plt.xlabel('月份')
# plt.ylabel('注册与激活人数')
# plt.title('XXX公司1-9月注册与激活人数')
# plt.legend()
# plt.show()

'''
树地图
树地图常用来表示同一等级中不同类别的占比关系
代码格式如下:
squarify.plot(sizes, label, color, value, edgecolor, linewidth)
    sizes:待绘图数据
    value:不同类别的数据标签
'''

# 绘制菊粉星座分布的树地图
# import squarify
#
# # 指定树地图每一块的大小
# size = np.array([3.4, 0.693, 0.585, 0.570, 0.562, 0.531, 0.530, 0.524, 0.501, 0.478, 0.468, 0.436])
#
# # 指定树地图每一块的文字标签
# text = np.array(['未知', '魔羯座', '天枰座', '双鱼座', '天蝎座', '金牛座', '处女座', '双子座', '射手座', '狮子座', '水瓶座', '白羊座'])
#
# # 指定树地图每一块的数值标签
# rate = np.array(['34%', '6.93%', '5.85%', '5.70%', '5.62%', '5.31%',
#                  '5.30%', '5.24%', '5.01%', '4.78%', '4.68%', '4.36%'])
#
# # 指定树地图每一块的颜色
# colors = ['steelblue', '#9999ff', 'red', 'indianred', 'green', 'yellow', 'orange']
#
# # 绘图
# plot = squarify.plot(sizes=size, label=text, color=colors, value=rate, edgecolor='white', linewidth=3)
#
# # 去除坐标轴
# plt.axis('off')
# # 去除上边框和右边框的刻度
# plt.tick_params(top='off', right='off')
# plt.title('菊粉星座分布', fontdict={'fontsize': 12})
# plt.show()

'''
雷达图
雷达图常用来综合评价某一事物,可以直观地看出该事物得优势与不足
使用polar()函数,polar()函数是用来建坐标系的
代码格式如下:
plt.polar(theta, r, color, marker, linewidth)
    theta:每一点在极坐标系中的角度
    r:半径
    marker:每一点的标记物
'''
# XXX数据分析师的综合评级雷达图
# plt.subplot(1, 1, 1, polar=True)  # 参数polar=True表示建立一个极坐标系
# dataLenth = 5  # 将圆分为5份
# # np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)表示在指定的间隔内返回均匀间隔的数字
# # 在[start, stop]范围内计算,返回num个(默认为50)均匀间隔的样本
# # endpoint若为True,则stop为最后一个样本。否则,返回序列不包含stop。默认值为True
# angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
#
# labels = ['沟通能力', '业务理解能力', '逻辑思维能力', '快速学习能力', '工具使用能力']
# data = [2, 3.5, 4, 4.5, 5]
#
# # 闭合各点
# # np.concatenate()函数用于将具有相同结构的array序列结合成一个array
# data = np.concatenate((data, [data[0]]))
# angles = np.concatenate((angles, [angles[0]]))
# plt.polar(angles, data, color='r', marker='o')
# plt.xticks(angles, labels)
#
# plt.title('XXX数据分析师的综合评级')
# plt.show()

'''
箱型图
箱型图用来反映一组数据离散情况
使用boxplot()方法
代码格式如下:
plt.boxplot(x, vert, widths, labels)
    x:待绘图数据
    vert:箱型图方向,True为总像,False为横向,默认为True
'''
# plt.subplot(1, 1, 1)
# y1 = np.array([866, 2335, 5710, 6482, 6120, 1605, 3813, 4428, 4631])
# y2 = np.array([433, 1167, 2855, 3241, 3060, 802, 1906, 2214, 2315])
# x = [y1, y2]
#
# # 绘图
# labels = ['注册人数', '激活人数']
# plt.boxplot(x, labels=labels, widths=[0.2, 0.5])
# plt.title('XXX公司1-9月注册与激活人数')
# plt.show()

'''
饼图
使用pie()方法
代码格式如下:
plt.pie(x, explode, labels, colors, autopct, pctdistance, shadow, labeldistance, startangle, radius,
        counterclock, wedgeprops, textprops, center, frame)
        x:待绘图数据
        explods:饼图中每一块离圆心的距离
        labels:饼图中每一块的标签
        autopct:饼图中数值的百分比格式
        pctdistance:数据标签距中心的距离
        shadow:饼图是否有阴影,默认为False
        labeldistance:每一块索引距离中心的距离
        startangle:饼图的初始角度
        counterclock:是否让饼图逆时针显示,默认为True
        wedgeprops:饼图内外边界属性
        textprops:并途中文本相关属性
        center:饼图中心位置
        frame:是否显示饼图背后的图框,默认为False
'''
# plt.subplot(1, 1, 1)
# x = np.array([8566, 5335, 7310, 6482])
# labels = ['东区', '北区', '南区', '西区']
# explode = [0.05, 0, 0, 0]  # 让第一块远离圆心一点
# labeldistance = 1.1
# plt.pie(x, labels=labels, explode=explode, labeldistance=labeldistance, autopct='%.0f%%',
#         radius=1.0)
# plt.title('全国各区域任务量占比')
# plt.show()

'''
圆环图
表示同一层级不同类别的占比关系
使用pie方法,参数与饼图一致,只要在饼图的基础上调整wedgeprops参数即可实现圆环图
'''
# plt.subplot(1, 1, 1)
# # 任务量
# x1 = np.array([8566, 5335, 7310, 6482])
# # 完成量
# x2 = np.array([4283, 2667, 3655, 3241])
# labels = ['东区', '北区', '南区', '西区']
# plt.pie(x1, labels=labels, radius=1.0, wedgeprops=dict(width=0.3, edgecolor='w'))
# plt.pie(x2, radius=0.7, wedgeprops=dict(width=0.3, edgecolor='w'))
#
# # 添加注释
# plt.annotate('完成量', xy=(0.35, 0.35), xytext=(0.7, 0.45),
#              arrowprops=dict(facecolor='black', arrowstyle='->'))
# plt.annotate('任务量', xy=(0.75, 0.20), xytext=(1.1, 0.2),
#              arrowprops=dict(facecolor='black', arrowstyle='->'))
# plt.title('全国各区域任务量占比')
# plt.show()

'''
热力图
将某一事物的响应度反映在图标上,可以快速发现需要重点关注的区域
使用imshow()方法
代码格式如下:
plt.imshow(x, cmap)
    x:待绘图数据,需要时矩阵形式
    cmap:配色方案,表明图标渐变的主题色。cmap的所有可选值都封装在plt.cm中
'''
# import itertools
#
# # 定义一个变量,给变量赋值一个矩阵
# cm = np.array([[1, 0.082, 0.031, -0.0086],
#               [0.082, 1, -0.09, 0.062],
#               [0.031, -0.09, 1, 0.026],
#               [-0.0086, 0.062, 0.026, 1]])
#
# # 设置配色方案
# cmap = plt.cm.cool
# plt.imshow(cm, cmap=cmap)
# # 显示右边颜色条
# plt.colorbar()
#
# # 设置x,y轴坐标刻度值
# classes = ['负债率', '信贷数量', '年龄', '家属数量']
# tick_marks = np.arange(len(classes))
# plt.xticks(tick_marks, classes)
# plt.yticks(tick_marks, classes)
#
# # 将数值显示在指定位置
# # itertools.product(*iterables[, repeat])
# # 笛卡尔积
# # 创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数。
# # horizontalalignment:水平对齐方式
# for i, j in itertools.product(range(cm.shape[0]),
#                               range(cm.shape[1])):
#     plt.text(j, i, cm[i, j], horizontalalignment='center')
# plt.show()

'''
绘制水平线和垂直线
水平线和垂直休闲主要用来做对比参考
使用axhline()和axvline()方法
代码格式如下:
plt.axhline(y, xmin, xmax)
plt.axvline(x, ymin, ymax)
    y/x:画水平/垂直直线时的横/纵坐标
    xmin/xmax:水平线的起点和终点
    ymin/ymax:垂直线的起点和终点
'''
# plt.subplot(1, 2, 1)
# plt.axhline(y=2, xmax=0.6, xmin=0.2)
# plt.subplot(1, 2, 2),
# plt.axvline(x=2, ymax=0.6, ymin=0.2)
# plt.show()

'''
绘图样式设置
matplotlib模块支持你调用其他样式,使用plt.style.available即可查看matplotlib模块支持的所有样式
如果要使用某种样式,只要在程序的开头加上下面这行代码即可
plt.style.use(样式名)
一旦在程序开头指明了使用哪种样式,那么该程序接下来所有图标都会使用这种样式
'''

Read more

60个“特征工程”计算函数(Python代码)

60个“特征工程”计算函数(Python代码)

转自:coggle数据科学 近期一些朋友询问我关于如何做特征工程的问题,有没有什么适合初学者的有效操作。 特征工程的问题往往需要具体问题具体分析,当然也有一些暴力的策略,可以在竞赛初赛前期可以带来较大提升,而很多竞赛往往依赖这些信息就可以拿到非常好的效果,剩余的则需要结合业务逻辑以及很多其他的技巧,此处我们将平时用得最多的聚合操作罗列在下方。 最近刚好看到一篇文章汇总了非常多的聚合函数,就摘录在下方,供许多初入竞赛的朋友参考。 聚合特征汇总 pandas自带的聚合函数 * 其它重要聚合函数 其它重要聚合函数&分类分别如下。 def median(x):     return np.median(x) def variation_coefficient(x):     mean = np.mean(x)     if mean != 0:         return np.std(x) / mean     else:         return np.nan def variance(x):     return

By Ne0inhk
90w,确实可以封神了!

90w,确实可以封神了!

要说24年一定最热的技术,还得是AIGC! 前段时间阿里旗下的开源项目,登上GitHub热榜! AI大热,如今ChatGPT的优异表现,必然会出现各种细分场景应用的工具软件,和大量岗位项目! 山雨欲来风满楼,强人工智能的出现,所有科技公司已经开始巨量扩招此领域的人才。算法的岗位,近三个月已经增长68%!这件事在HR届也是相当震撼的。 目前各行各业都不景气的市场,人工智能岗位却一直保持常青!甚至同属AI边缘岗都比其他岗薪资高40%! 与此同时,AI算法岗上岸也不简单,竞争激烈,好公司核心岗位不用说,谁都想去。 所以事实就是,想要上岸,门槛也逐渐变高,项目经历、实习经历都很重要,越早明白这个道理就越能提前建立起自己的优势。 但我在b站逛知识区的时候,经常看到有些同学,因为一些客观原因导致无法参加实习,这种情况下,如果你想提升背景,增加项目经历的话,可以试试这个《CV/NLP 算法工程师培养计划》。 目前已经有上千位同学通过该计划拿到offer了,最新一期学员就业薪资最高能拿到78K!年薪94w! 优势就是有BAT大厂讲师带领,手把手带做AI真实企业项目(包含CV、NLP等

By Ne0inhk
再见nohup!试试这个神器,Python Supervisor!

再见nohup!试试这个神器,Python Supervisor!

👇我的小册 45章教程:() ,原价299,限时特价2杯咖啡,满100人涨10元。 作者丨Ais137 https://juejin.cn/post/7354406980784373798 1. 概述 Supervisor 是一个 C/S 架构的进程监控与管理工具,本文主要介绍其基本用法和部分高级特性,用于解决部署持久化进程的稳定性问题。 2. 问题场景 在实际的工作中,往往会有部署持久化进程的需求,比如接口服务进程,又或者是消费者进程等。这类进程通常是作为后台进程持久化运行的。 一般的部署方法是通过 nohup cmd & 命令来部署。但是这种方式有个弊端是在某些情况下无法保证目标进程的稳定性运行,有的时候 nohup 运行的后台任务会因为未知原因中断,从而导致服务或者消费中断,进而影响项目的正常运行。 为了解决上述问题,通过引入 Supervisor 来部署持久化进程,提高系统运行的稳定性。 3. Supervisor 简介 Supervisor is a client/

By Ne0inhk
第一本给程序员看的AI Agent图书上市了!

第一本给程序员看的AI Agent图书上市了!

AI Agent火爆到什么程度? OpenAI创始人奥特曼预测,未来各行各业,每一个人都可以拥有一个AI Agent;比尔·盖茨在2023年层预言:AI Agent将彻底改变人机交互方式,并颠覆整个软件行业;吴恩达教授在AI Ascent 2024演讲中高赞:AI Agent是一个令人兴奋的趋势,所有从事AI开发的人都应该关注。而国内的各科技巨头也纷纷布局AI Agent平台,如:钉钉的AI PaaS、百度智能云千帆大模型平台等等。 Agent 是未来最重要的智能化工具。对于程序员来说,是时候将目光转向大模型的应用开发了,率先抢占AI的下一个风口AI Agent。 小异带来一本新书《大模型应用开发 动手做 AI Agent》,这本书由《GPT图解》的作者黄佳老师创作,从0到1手把手教你做AI Agent。现在下单享受5折特惠! ▼点击下方,即可5折起购书 有这样一本秘籍在手,程序员们这下放心了吧,让我们先来揭开 Agent 的神秘面纱。 AI Agent 面面观

By Ne0inhk