Giter VIP home page Giter VIP logo

heterocat-blog's Introduction

heterocat-blog's People

Contributors

heterocat avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

to-be-architect

heterocat-blog's Issues

My first blog

Hello,World!I try to write bolgs on the GitHub.Let us start!!!

数据分析之数据模型的测试和评估

概述

在这一节中,我们用到了数据模型对我们的数据进行训练,有两个模型:线性模型和决策树模型(也叫随机森林)怎么训练的呢?调参。然后我们还要对模型进行评估,用到三种方法:交叉验证,混淆矩阵和ROC曲线。下面就来看看具体内容吧。

内容

训练模型

  • 线性模型
    • LogisticRegression().fit(X_train, y_train)
    • 中间这个括号就是放参数,比如C=100,class_weight = 'balanced'等等
    • 得分:print('训练集得分:{:.3f}'.format(lr.score(X_train, y_train)))
      print('测试集得分:{:.3f}'.format(lr.score(X_test, y_test)))
  • 随机森林
    • RandomForestClassifier().fit(X_train, y_train)
    • 中间可以放的参数,比如n_estimators=1000,max_depth=5,bootstrap = False,oob_score = True等等
    • 得分:print('训练集得分:{:.3f}'.format(rf.score(X_train, y_train)))
      print('测试集得分:{:.3f}'.format(rf.score(X_test, y_test)))
  • 问题:为什么线性模型可以进行分类任务,背后是怎么的数学关系?\
    • 因为线可以划分区块
      对于多分类问题,线性模型是怎么进行分类的?\
    • 一个一个分,(圆圈和非圆圈,三角和非三角等等)
  • 训练模型的预测结果:predict(X_train)或者按百分比预测结果predict_proba(X_train)

模型评估

模型评估:模型评估是为了知道模型的泛化能力。

  • 交叉验证(cross-validation):是一种评估泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。在交叉验证中,数据被多次划分,并且需要训练多个模型。最常用的交叉验证是 k 折交叉验证(k-fold cross-validation),其中 k 是由用户指定的数字,通常取 5 或 10。

    • cross_val_score(lr, X_train, y_train, cv=10):cv表示几折-
  • 混淆矩阵:准确(precision)度量的是被预测为正例的样本中有多少是真正的正例。召回率(recall)度量的是正类样本中有多少被预测为正类。 f-分数是准确率与召回率的调和平均值。

    • 首先我们来介绍一下混淆矩阵还有这几个概念是什么,看下图
    • confusion_matrix(y_train, pred):计算混淆矩阵
    • classification_report(y_train, pred):计算精确率、召回率以及f1-score

image.png

image.png

image.png

image.png

image.png

  • ROC曲线:接受者操作特性曲线(receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以虚惊概率为横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线
    • fpr, tpr, thresholds = roc_curve(y_test, lr.decision_function(X_test)):计算fpr,tpr,thresholds
    • plt.plot(fpr, tpr, label="ROC Curve"):绘制ROC曲线
    • close_zero = np.argmin(np.abs(thresholds)) :abs加绝对值,argmin找最靠近0的数
    • plt.plot(fpr[close_zero], tpr[close_zero], 'o'):画出这个点

image.png

总结

说实话,这部分对我来说有点难点,所以我学了两遍看了两遍视频,现在来看就比较明朗了,当然这里是神奇的,是计算机带来的震撼,是算法带来的震撼,是无数数据科学家大展身手的地方。这个项目的学习也到此结束了,感谢自己,继续努力。一路走来,学到的东西很多,我还想再多学一些所以期待下一个项目,期待下一次进化。

数据可视化进阶之seaborn

概述

怎么说呢,seaborn离我心目中的理想的数据可视化更近一步了,也是我会推荐别人去学习的一个可视化库。在前一篇文章我提到matplotlib是基础,seaborn是进阶,我觉得更形象一点的描述应该可以这样认为matplotlib可以让你实现数据可视化,seaborn可以让你体会到一些数据之美。而且seaborn的语法比matplotlib更加简洁,短短的几行就可以画出很amazing的可视化图像。Let's go to see somethings in seaborn.

内容

一些seaborn图

就不装什么神秘的了,先放一些图给大家感受感受seaborn的魅力,我们再上具体的内容。GOGOGO!!!
image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

seaborn基础图表

记得先导入包import seaborn as sns,下面我只介绍基本的绘制是怎么实现的,其他的参数调节我就不讲了因为跟上一节的matplotlib差不多,毕竟seaborn是基于matplotlib的包装优化,当然也有不同具体可以去官网查每个参数的用法。

  • 相关性图表:主要是散点图和折线图
    • 散点:sns.relplot(kind = 'scatter')
    • 折线:sns.relplot(kind = 'line')

image.png

  • 分布型图表:主要包含的图表有直方图,核密度分布图和累积概率密度图
    • 直方:sns.displot(kind = 'his')
    • 核密度:sns.displot(kind = 'kde')
    • 累积概率密度:sns.displot(kind = 'ecdf')

image.png

  • 分类型图表:seaborn中用于展示分类型数据的图表比较多,我们按照seaborn官方的划分成三个类型点类型,分布类型,预估类型。
    • 点:sns.catplot(kind = 'strip'或者kind='swarm')
    • 分布:sns.catplot(kind = 'box'或者kind='violin'或者kind='boxen')
    • 预估:sns.catplot(kind = 'point'或者kind='bar'或者kind='count')

image.png

  • 回归模型图表:seaborn帮助你做回归分析,主要有两个图表来进行支持:regplot和lmplot
    • sns.regplot()
    • sns.lmplot()

image.png

  • 其他图表之热力图:并不归类于以上的四种类型,但在实际使用中,使用频率也叫较高的。
    • sns.heatmap()

image.png

一点点进阶:组合图表

JointGrid:创建的多图是一张主图,然后在上方和右侧边缘区域添加图表用于展示单变量的分布情况

  • 我们可以通过g.plot_joint() 、g.plot_marginals()去分别绘制中心区域和边缘区域图表;

image.png

总结

总的来说,seaborn不再木讷,不再学术风,更贴近商业图表,更好看。但是他还是什么呢,他还是静止的,静态图片,静态图片你再好看比得过动态图表甚至是视频吗?很显然不行,所以未来我将进一步探究pyecharts甚至更高端的可视化方式。

最后的最后呢,有个问题:R语言的可视化实现真的很好吗?我没学过R但是我看了一下R画的一些图感觉也就跟seaborn差不多,我不太清楚想请教一些大家,如果你知道的话欢迎发评论与我交流。

数据分析的开始--Pandas基础

概述

今天把《hands-on-data-analysis》这个项目的第一部分完成了,主要就是教一些pandas库的基础,我们用的是kaggle上泰坦尼克号的数据,这一部分我们完成了数据的导入,数据的保存,数据的筛选,以及一些简单的数据运算等等,还没到我所期待的数据可视化的过程。当我回看这些内容我才发现原来通过今天的努力其实学到的东西并不多,OK,那下面我们来看看今天到底学了哪些东西。

编程语言部分

写在前面:你需要用到jupyter noteboook,还有numpy,pandas库

  • 数据的导入: pd.read_csv('你的数据链接')
  • 数据的保存: df.to_csv('名字.csv')
    当然这里的导入和保存都是CSV文件,你如果想弄别的格式也可以比如读Excel表,那么就是read_excel。
  • 数据的分块:chunksize=number
  • 数据的基础信息:df.info()
  • 数据的空值判断:df.isnull()
  • 数据的删除:del或者drop
  • 数据的筛选:df[df["Age"]<10]
  • 数据的运算:a+b,c-d
  • 数据的排序:
    • 让行索引升序排序frame.sort_index()
    • 让列索引升序排序frame.sort_index(axis=1)
    • 让行索引降序排序frame.sort_index(ascending=False)
    • 让列索引降序排序frame.sort_index(axis=1, ascending=False)
    • 让任选两列数据同时降序排序frame.sort_values(by=['a','c'], ascending=False)
  • 数据的描写性统计信息:df.describe()

总结

总的来说,可能花的时间有点多了,应该可以快一点完成的。不过我是边看视频边完成代码的,可能是学习的方式问题,这点可能后面要改进一下,不过亲手敲还是有比较大的收获的,毕竟自己写的才是自己的。好吧,今天的笔记就是这样了,附上我的代码里面可能编程语言的部分更详细一点。

HeteroCat-blog/hands-on-data-analysis at main · HeteroCat/HeteroCat-blog (github.com)

数据可视化基础之matplotlib

概述

众所周知matplotlib是最大的,最老的,也是最强大的Python可视化库。所以是我们做Python可视化不可忽略的一个库。这里给大家一个学Python可视化的学习路径推荐,我觉得是这样的比较好:首先matplotlib其次seaborn,接着才是boken,pyecharts这些。理由就是matplotlib是基础,seaborn是进阶,pyecharts是出山大概就是这样。OKOK,接下来我们看看matplotlib的具体内容吧,欢迎走进数据之美--数据可视化的magic。

内容

准备工作

allright,allright。所有的操作开始之前你要记得先学好numpy和pandas再来哦。然后导入我们的matplotlib库。

  • 通过Jupyter的魔法命令%matplotlib inline 可以直接在jupyter notebook中展示图表,不需要每个图表都是用plt.show()来展现来~
  • import matplotlib.pyplot as plt
    做完这两步就可以开始我们的画图了。

基础图表

通过plt.subplot()命令来创建FigureAxesaxes是我们绘图的坐标系,figure是我们绘图的窗口,这也是在Matplotlib非常重要的两个概念;

  • Figure:顶层级,所有图表的容器,我们可以理解为窗口(Pyecharm等IDE中是弹出的窗口,Jypyter中为内嵌的窗口),一个Figure中可以包含多个Axes;
  • Axes:坐标系,也就是对应我们画的每一个图表,在Axes我们可以对图表的坐标轴(axis),刻度值(Tick)等进行操作;
  • figure, axes = plt.subplots() # 创建一个包含一个axes的figure
  • 柱形图plt.bar()
  • 条形图plt.barh()
  • 折线图plt.plot()
  • 面积图plt.stackplot()
  • 饼图plt.pie()
  • 散点图plt.scatter()

image.png
大概就是这样子,同时我们要注意如果你用axes做一个坐标系时,plt.bar()就是axes.bar()。当然这些是基础图表没什么好看的,我们可以通过一些参数来调整我们的图表使他好看或者更清楚的表达,参数有很多这里就给大家探索了,所以我们来看点好看的,let’s GO.

image.png

image.png

image.png

南丁格玫瑰图.jpg

历史病毒流行图.jpg

图表元素

  • 修改画布尺寸plt.figure(figsize=(8, 6))
  • 修改中文字体:Matplotlib中遇到中文显示方块的问题,可以通过plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'解决,我们还可以设置的中为字体有SimSun(宋体),SimHei(黑体),Kaiti(楷体)等。
  • 添加图表标题:通过plt.title可以在Matplotlib设置标题,字体样式可以通过fontdict进行设置;通过loc参数可以设置标题显示位置,支持的参数有center(居中),left(靠左),right(靠右)显示。
    • plt.title("销售趋势图", fontdict={'family':'Microsoft YaHei', 'color': 'k', 'size': 15}, loc='left')
  • 添加坐标轴标题:通过plt.xlabel和plt.ylabel可以分别添加x轴和y轴的标题,同样可以通过fontdict进行字体样式的配置,labelpad可以设置坐标轴与标题之间的距离。
    • plt.xlabel("月份", fontdict={'family':'Microsoft YaHei', 'color': 'k', 'size': 12}, labelpad=10)
  • 添加图例:通过plt.legend可以给图表添加图例,图例通常用来说明图表中数据每个系列的数据的;通过plt.plot()绘制折线的时候,需要通过label参数设置该系列数据的名称,后续才能通过plt.legend添加。
  • 添加数据标签:可以通过plt.text对图表添加文本,但是一次只能添加一个点,所以如果要给每个数据项都添加标签的话,我们需要通过for循环来进行。plt.text 有三个重要的参数:x、y 、s,通过x和y确定显示位置,s为需要显示的文本,另外还有va和ha两个参数设置文本的显示位置(靠左、靠右、居中等);
    • for a,b in zip(x, y1):
      plt.text(a, b, b, va='bottom', fontdict={"size":14})
  • 添加网格线:通过可以添加网格线可以方便用户容易看出数据项的大致值,通过上述展示所有数据标签时,可能会让整个图表比较杂乱,我们可以选择使用网格线来展示数据项大致数据值;参数b为True时展示网格线,axis支持x、y、both三个值,分别表示展示纵向网格线,横向网格线和纵向横向都展示。
    • plt.grid(b=True, axis='y', linestyle='--', linewidth=1, color='grey')
  • 坐标轴范围:可以通过plt.ylim和plt.xlim分别对y轴和x轴的坐标范围进行配置。
    • plt.ylim(50, 300)
  • 图表风格:Matplotlib中也预制了很多图表的样式风格,可以通过plt.style.use('default')来设置图表的风格,Matplotlib支持的风格包含26种,不过说实话,我觉得都不咋行挺丑的。

复杂图表

  • 多图plt.subplot(2, 2, 1)或者axes[0][0].bar(x, y),像上面基础图表的第一张图就是我现画的一张多图。

  • 不均匀子图:我们可以通过.add_gridspec()将整个画布划分成不均匀的区域。

    • spec = fig.add_gridspec(nrows=2, ncols=2, width_ratios=[1, 3], height_ratios=[1,2]) 表示将整个画布裁剪为2行2列的区域,width_ratios=[1, 3]表示横向将两列的宽度按照1:3进行裁剪,同理height_ratios=[1,2]表示纵向按照1:2进行裁剪。
    • spec还支持切片的方式,譬如我们将第二行展示为整个条形图;adjust可以调整各区域之间的距离。
    • 添加元素:ax子图同样可以通过set_title、set_xlable等方法添加子图标题,坐标轴标题等,如果需要添加大标题可以通过fig.suptitle()来完成;
  • 双Y轴:当我们多个系列的数据值量级差别太大时,依赖同一个坐标轴来展示通常效果很差,比如需要将销售额和利润同时展示出来;这时候我们可以通过plt.twix()添加次坐标轴。另外需要注意一点,twinx或者twiny方法会返回一个共享x轴或者y轴的新的axes,如果我们通过plt.subplots生成ax后,再绘制第二个折线图时,需要在这个新生成的ax1上绘图。

  • 添加阴影 path_effects=[path_effects.SimpleLineShadow(),path_effects.Normal()]

  • 添加标记:如果我们想给图表某部分内容添加一些注释,我们可以通过plt.annotate()进行添加,其中几个主要参数:

    • xy:需要我们传入数组,如xy=(1,2),用于定位要标记的位置;

    • xycoords:设置xy是通过何种方式去进行定位,比如data表示使用坐标轴刻度值去进行定位;

    • xytext:提示文本要展示的位置;

    • textcoords:同xycoords,设置xytext通过何种何种方式去进行定位

  • colormap 色表:Matplotlib中内置很多配色方法,可以通过代码matplotlib.cm.get_cmap使用;其实Matplotlib中的配色方案我们还可以轻松应用到其他第三方模块中;支持的配色方案可以点击https://matplotlib.org/2.0.2/examples/color/colormaps_reference.html 进行查看

image.png

image.png

image.png

image.png

总结

总的来说,matplotlib很全面很丰富还有很多我没有探究的,值得继续学习,数据可视化之路才刚刚开始,遥看未来我的眼中是斑斓的美,更加绚丽的画,还有蕴含其中的数据之美。

数据分析之数据预处理和可视化

概述

这一章就是数据分析的核心部分了,因为我们知道数据预处理占到整个数据分析工作的百分之七十左右,总的来说,在这里我们学会了pandas,matplotlib库的基本用法,让我们对数据的分析有了一些基本的方法步骤。下面就让我们一起从数据清洗,数据重构,数据可视化这三个方面看看具体的内容吧。

内容

数据清洗

  • 空值
    • isnull()这个函数是判断空值的函数。
    • fillna(0)这个函数是填入空值的函数,括号里面是填入的值。
    • dropna()这个是删除数据的行。
  • 重复值:drop_duplicates()删除重复数据,有重复的数据,用这个运行一下就好了。
  • 特征处理
    • image.png
    • 数据分箱:df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])
    • 按百分数分箱df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])
    • 文本数据的种类查看:unique()或value_counts()
    • 文本数据转化:replace(),map(),使用sklearn.preprocessing的LabelEncoder,one-hot编码
    • 文本数据提取:str.extract('([A-Za-z]+).')括号里面是正则表达式

数据重构

  • 数据的合并
    • concat():左右合并axis=1,上下合并axis=0
    • 左右合并还可以用join(),上下合并还可以用append()
    • merge()也能合并
    • stack()这个函数可以将DataFrame数据转换为Series类型的数据
  • 数据的聚合运算
    • 数据聚合我们用的是Groupby机制,我们看一张图看看这是一个怎么样的机制

image.png

  • 具体的应用像这样子:
    • text.groupby(['Pclass','Age'])['Fare'].mean()表示统计在不同等级的票中的不同年龄的船票花费的平均值
    • text['Fare'].groupby(text['Sex']).mean()表示计算泰坦尼克号男性与女性的平均票价

数据可视化

  • 这里我们用到matplotlib库
    • plot.bar()画直方图
    • plot.kde()画折线图
    • plt.title()标题
    • plt.ylabel()纵坐标
    • plt.xlabel()横坐标
  • 一些图

image.png

image.png

image.png

总结

这些东西只能说是一些基础,你能通过这些东西进行简单的数据分析,但是还远远不够。我们要走的路还有很长,加油吧少年。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.