2017-11-26 17:20:24 u014253445 阅读数 11716
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93944 人正在学习 去看看 唐宇迪

 python数据挖掘项目实战记录

取自《Python数据分析与挖掘实战》一书,整理各个项目中用到的数据处理方法:

  1. 数据预处理方法
  2. 建立模型方法
  3. 绘制图形

对于分类问题:用模型分类;混淆矩阵及其绘图;观测其ROC曲线;
对于聚类问题:划分类目数;获取划分类目中心;平行坐标系描述


 (一)数据预处理的方法

在获取数据之后,会发现一些数据值错误
一、填补空值
二、观察数据分布
三、数据清洗,使数据值都合理存在
四、数据规约,提取重要属性
五、数据归一化,为了使用K-Means算法


 数据读取

#SVM,bayes,ANN,D_Tree,等需要操作的数据是矩阵,需要
data=data.as_matrix() #将series数据转为矩阵形式的训练集

from numpy.random import shuffle
shuffle(data) #随机打乱数据
x_train=data_train[:,2:]*30 #将特征放大

import pickle
pickle.dump(model, open('../tmp/svm.model''wb'))# 保存模型
model = pickle.load(open('../tmp/svm.model''rb'))# 读取模型

#将数据保存为固定文件格式
pd.DataFrame(cm_train, index=range(5),columns=range(5)).to_excel(outputfile1)

 一、拉格朗日插值法

from scipy.interpolate import lagrange
# 取数,两个列表尾接
y = s[list(range(n - k, n)) + list(range(n + 1, n + 1 + k))]
y = y[y.notnull()]
res=lagrange(y.index, list(y))(n)   #输入索引,和该列数据 n为空值下标

 二、series的内置插值法

df = pd.DataFrame(data, columns=[012])
df.interpolate()

 三、电量趋势描述

绘制折线图,观测电量下降趋势。

 四、数据探索describe(include=’all).T

通过数据探索,发现异常值,不合逻辑的错误值,如果数据集很大就可以丢弃,否则可以填充

explore = data.describe(include='all').T
explore['null'] = len(data) - explore['count']
explore = explore[['null''max''min''std']]# count,unique,top,freq,mean,std,min,50%,max等选取几个属性

#计算相关系数矩阵,data必须是n*n矩阵
print(np.round(data.corr(method='pearson'), 2))

 五、数据清洗

类似集合的操作,对于不合逻辑的错误值,设置索引,排除。

data = data[data['SUM_YR_1'].notnull() & data['SUM_YR_2'].notnull()]
index1 = data['SUM_YR_1'] != 0
index2 = data['SUM_YR_2'] != 0
index3 = (data['SEG_KM_SUM'] == 0) & (data['avg_discount'] == 0)
data = data[index1 | index2 | index3]

 六、属性转换

数据的规约就是选取有用的数据属性,可以通过excel删除对应列即可实现。


# 选取某列
data=data[data['TARGET_ID']==184].copy()  #获取该条件下的数据的副本
data_group=data.groupby('COLLECTTIME')  #以时间分组

def attr_trans(x):  # 定义属性变换函数
    #创建新的series
    result=pd.Series(index=['SYS_NAME''CWXT_DB:184:C:\\''CWXT_DB:184:D:\\''COLLECTTIME'])  #设置列标
    result['SYS_NAME'] = x['SYS_NAME'].iloc[0#获取该属性值,唯一
    result['COLLECTTIME'] = x['COLLECTTIME'].iloc[0#获取该属性值,唯一
    result['CWXT_DB:184:C:\\'] = x['VALUE'].iloc[0#获取属性值A
    result['CWXT_DB:184:D:\\'] = x['VALUE'].iloc[1#获取属性值B,等等
    return result

data_processed = data_group.apply(attr_trans)  # 逐组处理

 七、数据归一化和标准化

使用正态分布的标准正态分布标准化:x-u/σ

data = (data - data.mean(axis=0)) / data.std(axis=0)  # 按列选取均值和标准差。矩阵操作

当发现数值范围对结果影响太大,不方便运算时,将数据标准化

data=(data-data.min())/(data.max()-data.min())
data=data.reset_index()

 八、数据离散化

应用在发掘频繁项时,需要把连续数据转变为离散数据。

    for i in range(len(keys)):
        # 调用k-means算法,进行聚类离散化
        r1 = pd.DataFrame(kmodel.cluster_centers_, columns=[typelabel[keys[i]]])  # 聚类中心,A
        r2 = pd.Series(kmodel.labels_).value_counts()  # 分类统计
        r2 = pd.DataFrame(r2, columns=[typelabel[keys[i]] + 'n'])  #统计量, An

        r = pd.DataFrame(pd.concat([r1, r2], axis=1))  #聚类中心与类别数目匹配连接
        r = r.sort_values(typelabel[keys[i]])
        r.index = [1234]

        r[typelabel[keys[i]]] = pd.rolling_mean(r[typelabel[keys[i]]], 2)  # rolling_mean()用来计算相邻2列的均值,以此作为边界点。
        r[typelabel[keys[i]]][1] = 0.0  # 这两句代码将原来的聚类中心改为边界点。
        result = result.append(r.T) #转置添加

    result = result.sort_index()  # 以Index(A,B,C,D,E,F)顺序排序,保存
    result.to_excel(processedfile)

 九、图像切割和颜色矩阵提取

1. 一阶颜色矩:采用一阶原点矩,反应图像的整体明暗程度
Ei=1/N * ∑(j:1-N) Pij
2. 二阶颜色矩:反应图像颜色的分布范围
σi=(1/N *∑j:1-N (Pij-Ei)^2) ^1/2
3. 三阶颜色矩:反应图像颜色分布的对称性

 十、时间序列算法

利用时间序列算法模型的流程,根据历史数据,来预测未来的数据情况
采用时间序列算法对模型输入数据进行模型拟合、检验与检测。依据误差公式,计算预测值与验证数据之间的误差,分析其是否属于业务接受的范围内。
模型识别AR,MA,ARMA
平稳性检验,白噪声检验,模型识别,模型检验,模型预测,模型评价,模型应用

 十一、行为分析与服务推荐

连接数据库
系统过滤算法为主,其他为辅。

 推荐

物品相似度:夹角余弦;杰卡德相似系数;相关系数
熟悉基于物品的协同过滤算法使用

# 基于物品的协同过滤算法
def Jaccard(a, b):
    return 1.0 * (a * b).sum() / (a + b - a * b).sum()
class Recommender():
    sim = None
    def similarity(self, x, distance):
        y = np.ones((len(x), len(x)))
        for i in range(len(x)):
            for j in range(len(x)):
                y[i, j] = distance(x[i], x[j])
        return y
    def fit(self, x, distance=Jaccard):  #x传入的是矩阵(行:物品,列:用户)
        self.sim = self.similarity(x, distance) #计算相似度
    def recommend(self, a): #传入预测用户的购买记录的矩阵.T = n * 1
        return np.dot(self.sim, a) * (1 - a)

 十二、变量选择与灰色预测

使用Lasso函数对与处理数据变量选择
灰色预测得到关键影响因素的预测值
使用神经网络对财政收入进行预测

 十三、文本预处理

#数据去重
l1 = len(data)
data = pd.DataFrame(data[0].unique()) #选取数据列进行unique()
l2 = len(data)
data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8')
print(u'删除了%s条评论。' %(l1 - l2))

#机械压缩去词,去除连续重复语料,和短句子删除过滤较多垃圾信息

#文本评论分词
mycut = lambda s: ' '.join(jieba.cut(s)) #自定义简单分词函数
data1 = data1[0].apply(mycut)#对于读入的数据执行分词函数
data2 = data2[0].apply(mycut)#通过“广播”形式分词,加快速度。

#先将文本正负面评价分开,然后再进行LDA主题分析。COSTCM6中的情感分析做及其分类,生成正面情感和负面情感

# 正面主题分析
from gensim import corpora, models
pos_dict = corpora.Dictionary(pos[2])
pos_corpus = [pos_dict.doc2bow(i) for i in pos[2]]
pos_lda = models.LdaModel(pos_corpus, num_topics=3, id2word=pos_dict)
for i in range(3):
    neg_lda.print_topic(i)  # 输出每个主题

 (二)、模型方法

一、神经网络
二、决策树
三、K-Means


 一、LM神经网络

API:
add(); compile(); fit(); save_weights(); predict_classrs()

from keras.models import Sequential
from keras.layers import Dense, Activation
net = Sequential()
net.add(Dense(input_dim=3, activation='relu', units=10))
net.compile(loss='binary_crossentropy', optimizer='adam',  metrics=['accuracy'])
net.fit(train[:, :3], train[:, 3], epochs=1000, batch_size=1)#传入的是矩阵,读取excel需要把数据.as_matrix()
net.save_weights(netfile)
predict_result = net.predict_classes(train[:, :3]).reshape(len(train))

 二、CART决策树

API:
fit(); predict();

# 构建CART决策树模型
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier()
tree.fit(train[:, :3], train[:, 3])
plt = cm_plot(test[:, 3], tree.predict(test[:, :3]))#获取结果
plt.show()

 三、K-Means K聚类算法

from sklearn.cluster import KMeans
import pandas as pd
inputFile = '../data/zscoreddata.xls'
data = pd.read_excel(inputFile)
kmodel = KMeans(n_clusters=5, n_jobs=4)
kmodel.fit(data)
print(kmodel.cluster_centers_)

 四、SVM支持向量机

from sklearn import svm
smodel=svm.SVC()  #建立模型
smodel.fit(x_train,y_train)  #训练模型
res=smodel.predict(x_test)  #预测测试集

 (三)、绘制图形

模型建立后,需要可视化分析数据挖掘的合理性,准确性等
混淆矩阵:正确与错误分类的情况
ROC曲线:分类方法的性能
聚类群图:使数据值聚成n类,分析n类群体特征


 混淆矩阵

预测准确度:RMSE;MAE
分类准确度:precesion=TP/TP+FP :表示用户对推荐产品感兴趣的可能性
recall=TP/(TP+FN) :表示推荐的产品,占用户喜欢产品的概率

from sklearn.metrics import confusion_matrix  # 导入混淆矩阵函数
cm = confusion_matrix(y, yp)  # 混淆矩阵如下
# CM [[TP,FP],[FN,TN]]
#例如['TP', 'FP', 'FN', 'TN'] == [46, 2, 7, 4]

cm_train = confusion_matrix(train_label, smodel.predict(trainSet))
cm_test = confusion_matrix(test_label, smodel.predict(testSet))
pd.DataFrame(cm_train).to_excel(outFile1)
pd.DataFrame(cm_test).to_excel(outFile2)

 ROC曲线

from sklearn.metrics import roc_curve  # 导入ROC曲线函数
fpr, tpr, thresholds = roc_curve(test[:, 3], tree.predict_proba(test[:, :3])[:, 1], pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of CART', color='green')  # 作出ROC曲线

 聚类群图

import matplotlib.pyplot as plt
centers = kmodel.cluster_centers_
for i in range(5):
    plt.plot([246810], centers[i], label='group' + str(i),marker='o')  #设置横轴纵轴分别对应5个点
plt.ylabel('values')
plt.xlabel('index: L R F M C')
plt.show()

 层次聚类谱图

import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import linkage,dendrogram
#这里使用scipy的层次聚类函数

Z = linkage(data_udf, method = 'ward', metric = 'euclidean'#谱系聚类图
P = dendrogram(Z, 0#画谱系聚类图
plt.show()
2019-09-25 14:54:16 S1998F 阅读数 377
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93944 人正在学习 去看看 唐宇迪

最近我写了一个 Python 练手小项目,它是一个 PC 桌面版的便签程序,很简陋。写这个小项目是为了熟悉一下用 Python 进行一个完整的项目开发,进一步熟练 Python 的使用。

 

界面是这样的:

11.jpg

 

这个小项目所用到的技术有:
1.前端图形化界面(GUI):wxPython + wxFromBuilder

2.后端MySQL数据库 + Python

 

开发这个便签小项目从构思到架构再到最终的成品都是由我一个人完成的,虽然很简陋,但从中收获了很多。

 

我觉得其中最重要的是遇到不会的问题,学会求助 Google 与相应的开发文档。遇到技术问题,不要第一时间去问别人,而是要自己先思考,学会去搜索答案。你遇到 99% 的问题网上都有人遇到过,学会用好 Google 会解决很多棘手的问题。

 

这次写一个完整的项目,相比较原来写短短几十行的脚本相比,更能将学到的知识融会贯通。我觉得,想要掌握一个技术,并不需要先去把这个技术从头到尾学一遍,各种细节都去了解。直接动手做就完了,遇到不会的问题直接 Google,这样可以快速掌握一门技术,同时完成一个小项目还会有极大的成就感。可是用这样的方法也会遇到很大的问题,就是有时候要看官方文档,由于官方文档都是英文的,看的时候很难受,但是硬着头皮看下来之后会觉得有很大的收获。

 

在写这个程序期间,是一个不断学习的过程,不断去探索未知的领域,将学到的知识运用到项目中去,不断地修改项目,自身获得持续地成长。

 

我已经将这个小项目上传到 Github 了,如果对这个小项目感兴趣的话,可以查看下面的链接:

https://github.com/supfeng/mynote

 

 

ps.如果想要打开新世界的大门,可以扫描下方的二维码,关注微信公众号「SuperFeng」。

请关注公众号.PNG

 

2019-04-15 20:49:58 weixin_44230339 阅读数 65
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93944 人正在学习 去看看 唐宇迪

Python学习for数据可视化项目(一)

图片后续添加

1 绘制简单的折线图

使用matplotlib绘制简单的折线图,再对其进行定制,以实现信息更丰富的数据可视化。

注:matplotlib库可通过安装在anaconda3,然后在pycharm中切换annconda编辑器调用。

import matplotlib.pyplot as plt
#导入matplotlib中的pyplt模块,并指定别名plt
squares=[1,4,9,16,25]
#用pyplt模块中的plot方法对列表进行处理
plt.plot(squares)
#打开matplotlib查看器,显示绘制图像
plt.show()

显示图为

图1.1

2.绘制折线图与散点图

2.1 修改标签文字和线条粗细

可以通过一些定制来改变显示图形的样式,提高可读性。

plot():可以用**linewidth**指定线条的粗细。

title():第一个参数为图表标题内容,可用**fontsize**指定文字大小。

xlabel():第一个参数为x轴标题,可用**fontsize**指定文字大小。

ylabel():设置y轴,同上。

tick_params():设置刻度的样式,如**axis选‘x’,’y’,‘both’来指定轴,labelsize**指定刻度数字大小。

import matplotlib.pyplot as plt

squares=[1,4,9,16,25]

plt.plot(squares,linewidth=5)
plt.title('Square Numbers',fontsize=24)
plt.xlabel('Value',fontsize=14)
plt.ylabel('Square of Value',fontsize=14)
plt.tick_params(axis='x',labelsize=14)
plt.show()

图片2

2.3 校正图形

当向**plot()**提供一系列数字时,其默认第一个数据点对应的x坐标值为0。

对照上例,0对应到了1,而4对应到了25,可通过为**plot()**同时提供输入值和输出值来解决。

import matplotlib.pyplot as plt

input_value=[1,2,3,4,5]
squares=[1,4,9,16,25]

plt.plot(input_value,squares,linewidth=5)
plt.title('Square Numbers',fontsize=24)
plt.xlabel('Value',fontsize=14)
plt.ylabel('Square of Value',fontsize=14)
plt.tick_params(axis='x',labelsize=14)
plt.show()

此时图表变为下图

图片3

2.3 使用scatter()绘制散点图并设置其样式

绘制单个点,可使用函数**scatter(),向其传递一对x,y坐标,将在指定位置绘制一个点,实参s**设置绘制图形时使用点的尺寸:

import matplotlib.pyplot as plt

plt.scatter(2,4,s=200)
plt.title('Square Numbers',fontsize=24)
plt.xlabel('Value',fontsize=14)
plt.ylabel('Square of Value',fontsize=14)
plt.tick_params(axis='both',which='major',labelsize=14)
plt.show()

图片2.3.1

2.4 使用scatter()绘制一系列点

向**scatter()**传递两个分别包含x值和y值的列表即可。

import matplotlib.pyplot as plt

x_value=[1,2,3,4,5]
y_value=[1,4,9,16,25]

plt.scatter(x_value,y_value,s=200)
plt.title('Square Numbers',fontsize=24)
plt.xlabel('Value',fontsize=14)
plt.ylabel('Square of Value',fontsize=14)
plt.tick_params(axis='both',which='major',labelsize=14)
plt.show()

对应图为

图2.4.1

2.5 自动计算数据

使用循环来生成点的坐标即可。

import matplotlib.pyplot as plt
x_value=list(range(1,1001))
y_value=[x**2 for x in x_value]

plt.scatter(x_value,y_value,s=20)
plt.title('Square Numbers',fontsize=24)
plt.xlabel('Value',fontsize=14)
plt.ylabel('Square of Value',fontsize=14)
plt.tick_params(axis='both',which='major',labelsize=14)

plt.axis([0,1100,0,1100000])#设置每个坐标轴的取值范围
plt.show()

其中**axis()**方法要求提供四个值:x和y轴的最小值和最大值。

此时图标为

图2.5.1

2.6 删除数据点的轮廓

matplotlib默认散点图为蓝色点和黑色轮廓。

可在scatter()方法中传递实参**edgecolor=‘color’**来消除轮廓。

plt.scatter(x_value,y_value,edgecolors='none',s=20)

2.7 自定义颜色

在**scatter()中传递参数c**,来设置使用的颜色,如:

plt.scatter(x_value,y_value,c='red',edgecolor='none',s=20)

c参数也可以用RGB颜色模式来自定义颜色。向其传递一个有3个元素的元组。元素值在0~1之间,分别表示红色、绿色、蓝色的分量,值越接近0颜色越深,反之越浅。

plt.scatter(x_value,y_value,c=(0,0,0.8),edgecolor='none',s=20)

2.8 使用颜色映射

**颜色映射(colormap)**是一系列颜色,它们从其实颜色渐变到结束颜色。在可视化中,颜色映射用于突出数据的规律。如可以用较浅的颜色来显示较小的值,用较深的颜色来显示较大的值。

模块pyplot内置了一组颜色映射。下面演示如何根据每个y的值来设置其颜色。

#将c设置成一个y值列表,参数cmap设置映射的颜色
plt.scatter(x_values,y_value,c=y_value,cmap=plt.cm.Blues,edgecolor='none',s=20)

将此行代码替换2.5小节中的相应代码,图标变化为:

图片2.8.1

注:可访问此处,单机Examples,向下滚动到Color Examples,选择colormaps_reference来了解所有颜色映射。

2.9 自动保存图标

使用**plt.savefig()来替代plt.show()**,即可让程序自动将图表保存到文件中。

plt.savefig('squares_plt.png',bbox_inches='tight')

第一个参数为图表的文件名,第二个实参指定将图表的空白部分裁剪,若不需要可省略。

注意:若依然要使用**plt.show()**程序显示图表,必须将_show()_放在_savefig()_语句之后。反之,保存的图片将会是一张空图片。

3 随机漫步

本节中,先生成随机漫步数据,再使用matplotlib将这些数据呈现出来。在自然界、物理、生物、化学和经济领域,随机漫步都有实际用途。

3.1 创建RandomWalk()类

在此先创建一个名为RandomWalk的类,用于生成随机漫步数据。这个类将有三个属性:随机漫步的次数,每次随机漫步的x和y坐标;还将有两个方法:__init__fill_walk(),后者用于计算随机漫步经过的所有点。

from random import choice

class RandomWalk():
    '''一个生成随机漫步数据的类'''
    def __init__(self,num_points=5000):
        '''初始化属性'''
        self.num_points=num_points
        
        #所有随机漫步都始于(0,0)
        self.x_values=[0]
        self.y_values=[0]

3.2 选择方向

在此为类设计**fill_walk()**方法来随机生成漫步的点,需要生成:漫步的方向(上下左右),每次沿生成方向走多远。

    def fill_walk(self):    
        '''计算生成随机漫步的点'''
        #不断生成数据直到达到指定的长度
        while len(self.x_values)<self.num_points:
            #漫步方向,距离,实际步长
            x_direction=choice([1,-1])
            x_distance=choice([0,1,2,3,4])
            x_step=x_direction*x_distance
            
            y_direction=choice([1,-1])
            y_distance=choice([0,1,2,3,4])
            y_step=y_direction*y_distance
            #若原地踏步则重新生成
            if x_step==0 and y_step==0:
                continue
               #下一步将从上一步出发,所以将步长加上列表的最后一个值 
            next_x=self.x_values[-1]+x_step
            next_y=self.y_values[-1]+y_step
            #将下一步的坐标加入列表
            self.x_values.append(next_x)
            self.y_values.append(next_y)

3.3 绘制随机漫步图

下面使用这个类,并绘制所有点。

import matplotlib.pyplot as plt
from random_walk import RandomWalk

rw=RandomWalk()
rw.fill_walk()
plt.scatter(rw.x_values,rw.y_values,s=15)
plt.show()

随机漫步图

3.4 模拟多次随机漫步

设计一个while循环使程序可以多次运行即可。

import matplotlib.pyplot as plt
from random_walk import RandomWalk

while True:
    rw=RandomWalk()
    rw.fill_walk()
    plt.scatter(rw.x_values,rw.y_values,s=15)
    plt.show()

    keep_running=input('Make another walk?(y/n):')
    if keep_running=='n':
        break

3.5 给点着色

使用颜色映射来支出漫步中点的先后顺序:传递参数**c**设置其为一个包含点顺序的列表。

并删除每个点的黑色轮廓:同前文,参数**edgecolor=‘none’**。

import matplotlib.pyplot as plt
from random_walk import RandomWalk

while True:
    rw=RandomWalk()
    rw.fill_walk()
    #使用list生成一个与点总数相同的列表
    point_numbers=list(range(rw.num_points))
    plt.scatter(rw.x_values,rw.y_values,c=point_numbers,
                cmap=plt.cm.Blues,edgecolors='none',s=15)
    plt.show()

    keep_running=input('Make another walk?(y/n):')
    if keep_running=='n':
        break

着色后生成的随机漫步图

3.6 重新绘制起点和终点

在这里,我们另外使用两个**scatter()**方法来重新绘制起点和终点,并将其设置得更大,显示不同颜色,以突出它们。

--sinp--
#突出起点和重点
plt.scatter(0,0,c='green',edgecolor='none',s=100)
plt.scatter(rw.x_value[-1],rw.y_value[-1],c='red',edgecolor='none',s=100)
--sinp--

3.7 隐藏坐标轴

可使用**axes()**中的来设置坐标轴的可见性,具体代码如下:

	#隐藏坐标轴
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)

再将原程序加上3.7小节中的代码,此时图表为:

隐藏坐标轴和突出起始点

3.8 增加点数

在创建RandomWalk实例时增大num_points的值即可。

此时应该根据增加的数量来调整每个点的大小,使图表更加清晰。

--sinp--
#设置50000个点
rw=RandomWalk(50000)
--Sinp--
#每个点大小调整为1
plt.scatter(rw.x_value,rw.y_value,c=points_numbers,
           cmap=plt.cm.Blues,edgecolor='none',s=1)
--sinp--

此时图表如下,说实话有点酷。

50000个随机漫步点

3.9 调整尺寸以适合屏幕

**figure()用于指定图表的宽度、高度、分辨率和背景色。可为其形参figsize**指定一个元组,来设定绘图窗口的大小,单位为英寸。

plt.figure(figsize=(10,6))

默认屏幕分辨率为80像素/英寸。可使用形参**dpi**传递分辨率。

plt.figure(dpi=28,figsize=(10,6))

4 使用Pygal模拟掷骰子

可视化包Pygal可以生成可缩放的矢量图形文件,以方便在尺寸不同的屏幕上显示。

特别是以在线方式使用图表,可考虑用Pygal来生成,以满足在任何设备上的显示。

注:anaconda3,Python3.7版本的环境没找到这个包,切换pycharm的Python3.6编译器,安装即可。

4.1 创建Die类

一个用于模拟掷骰子的类。

from random import randint

class Die():
    #将骰子默认设为6面
    def __init__(self,num_sides=6):
        self.num_sides=num_sides
    #模拟掷骰子,随机生成1~6中的数	
    def roll(self):
        return  randint(1,self.num_sides)

4.2 掷骰子

用上小节的类创建一个6面的实例,将结果显示,并检查结果是否合理。

from die import Die

D6=Die()
results=[]
for roll_num in range(100):
    result=D6.roll()
    results.append(result)
    
print(results)

结果为

[1, 5, 4, 4, 6, 3, 6, 5, 2, 1, 1, 3, 1, 3, 2, 6, 5, 2, 3, 2, 1, 5, 3, 5, 4, 4, 4, 1, 3, 4, 1, 4, 3, 4, 6, 3, 6, 1, 1, 2, 4, 5, 3, 3, 3, 5, 3, 5, 1, 1, 5, 6, 5, 2, 5, 4, 2, 2, 1, 1, 6, 5, 1, 4, 5, 3, 6, 5, 5, 5, 5, 4, 3, 1, 1, 3, 6, 5, 4, 4, 6, 6, 1, 2, 3, 6, 6, 2, 4, 5, 6, 2, 2, 5, 3, 6, 5, 3, 6, 2]

结果中未出现1~6以外的数,无明显规律,合理。

4.3 分析结果

计算每个点数出现的次数。

#此部分与上相同,可将掷骰子次数提升到1000
#这里的die是骰子类的模块名,后文不表
from die import Die

D6=Die()
results=[]
for roll_num in range(1000):
    result=D6.roll()
    results.append(result)
print(results)
#创建一个列表来统计1~6出现的次数
frequencies=[]
for value in range(1,D6.num_sides+1):
    frequencie=results.count(value)
    frequencies.append(frequencie)

print(frequencies)

4.4 绘制直方图

用直方图来将掷骰子的结果可视化。

这里使用到pygal模块中的**Bar()**类。

import pygal

--接上小节代码--

hist=pygal.Bar()
#指定直方图标题
hist.title='Results of rolling one D6 1000 times.'
#指定直方图x轴标签
hist.x_labels=['1','2','3','4','5','6']
#指定直方图x方向标题
hist.x_title='Results'
#指定直方图y方向标题
hist.y_title='Frequency of Result'

#指定直方图的数据名称,和数据组成的列表
hist.add('D6',frequencies)
#保存直方图文件,并以参数的字符串命名
hist.render_to_file('die_visual.svg')

掷骰子直方图

4.5 同时掷两个骰子

创建两个D6骰子实例,每次掷两个骰子,并将点数相加,存在列表results中。

import pygal
from die import Die
#创建两个骰子实例
d6_1=Die()
d6_2=Die()
results=[]
for roll_num in range(1000):
    #点数相加
    result=d6_1.roll()+d6_2.roll()
    results.append(result)

print(results)

frequencies=[]
max_result=d6_1.num_sides+d6_2.num_sides
#修改总点数范围
for value in range(2,max_result+1):
    frequencie=results.count(value)
    frequencies.append(frequencie)

print(frequencies)

hist=pygal.Bar()
hist.title='Results of rolling one D6 1000 times.'
#修改直方图横坐标标签
hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12']
hist.x_title='Results'
hist.y_title='Frequency of Result'
#修改直方图数据名称
hist.add('D6+D6',frequencies)
#修改直方图文件保存名称,否则会覆盖原图
hist.render_to_file('dice_visual.svg')

两个骰子的点数分布

4.6 同时掷两个面数不同的骰子

创建一个6面骰子实例和一个10面的骰子实例,然后同时掷50000次。

import pygal
from die import Die

d6_1=Die()
#将第二个骰子面数设为10
d10=Die(10)
results=[]
#掷50000次
for roll_num in range(50000):
    result=d6_1.roll()+d10.roll()
    results.append(result)

print(results)

frequencies=[]
max_result=d6_1.num_sides+d10.num_sides
for value in range(2,max_result+1):
    frequencie=results.count(value)
    frequencies.append(frequencie)

print(frequencies)
#在以下代码中做出相应修改
hist=pygal.Bar()
hist.title='Results of rolling one D6 and one D10 50000 times.'
hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12','13','14','15','16']
hist.x_title='Results'
hist.y_title='Frequency of Result'

hist.add('D6+D10',frequencies)
hist.render_to_file('different_dice.svg')

掷50000次6面骰子和10面骰子的分布直方图

2019-06-11 18:48:28 qq_39394264 阅读数 285
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93944 人正在学习 去看看 唐宇迪

Python小项目:爬虫



一、环境搭建

  1. 浏览器:FireFox_v66.0.5_x64.zip(火狐浏览器) 提取码:2zk0

  2. 三方库selenium:selenium-3.141.0.tar.gz 提取码:anq9

  3. 与浏览器版本对应的webdriver:geckodriver-v0.23.0-win64.zip 提取码:z02m
    在这里插入图片描述

  4. 安装方式:
    a. 在线安装:pip install packageName
    b. 离线安装:
    c. 卸载:pip uninstall packageName
    d. 查看三方库的安装情况:pip list


二、离线安装selenium

  1. 解压安装包

  2. 目录切换到解压文件夹

    cd D:\selenium-3.141.0

  3. 安装
    python setup.py install


三、配置webdriver

  1. 解压
    geckodriver.exe

  2. 移动到指定文件夹下
    D:\Anaconda3\Scripts

  3. 代码

     # 从selenium库中导入浏览器驱动模块
     from selenium import webdriver
     # 实例化浏览器驱动模块下对应的浏览器
     # browser = webdriver.Firefox()
     browser = webdriver.PhantomJS
     # 最大化窗口
     browser.maximize_window()
     # 打开浏览器
     browser.get('http://www.baidu.com')
     
     # 进行页面操作
     # 方法一:在浏览器中找到搜索框对应的id属性,并发送数值
     #browser.find_element_by_id('kw').send_keys('Python')
     
     # 方法二:name属性
     #browser.find_element_by_name('wd').send_keys('Python')
     
     # 方法三:class属性
     #browser.find_element_by_class_name('s_ipt').send_keys('Python')
     
     # 方法四:xpath
     browser.find_element_by_xpath('//*[@id="kw"]').send_keys('Python')
    

##在页面上进行操作:

		# 1.发送数据send_keys(),
		# 2.清空数据clear(),
		browser.find_element_by_xpath('//*[@id="kw"]').clear()
		# 3.点击
		browser.find_element_by_xpath('//*[@id="kw"]').click()
		# 4.打印页面文本信息text
		#page_source:页面源码
		print(browser.page_source)
		# 退出浏览器
		#browser.quit()

四、练习

网站:http://www.xicidaili.com/nn

  1. 从中找到:IP端口号 协议类型

  2. 验证ip和端口号是否可用,并且把是否可用的结果进行记录

  3. 20组数据

     from selenium import webdriver
     from telnetlib import Telnet
     from openpyxl import Workbook
     
     browser = webdriver.Firefox()
     url = 'http://www.xicidaili.com/nn'
     browser.get(url)
     
     wb = Workbook()
     active = wb.active
     active.title = 'ip信息'
     active.append(['IP', 'Port', 'Pro', 'Connection'])
     for t in range(2,102):
         xcIP_1 = browser.find_element_by_xpath('/html/body/div[1]/div[2]/table/tbody/tr[%s]/td[2]'%t).text
         xcPort_1 = browser.find_element_by_xpath('/html/body/div[1]/div[2]/table/tbody/tr[%s]/td[3]'%t).text
         xcPro_1 = browser.find_element_by_xpath('/html/body/div[1]/div[2]/table/tbody/tr[%s]/td[6]'%t).text
         # print(xcIP_1,xcPort_1,xcPro_1)
     
         try:
             Telnet(xcIP_1,xcPort_1,timeout=0.5)
             Connection = 'Success'
         except:
             Connection = 'Failed'
     
         active.cell(row=t, column=1, value=xcIP_1)
         active.cell(row=t, column=2, value=xcPort_1)
         active.cell(row=t, column=3, value=xcPro_1)
         active.cell(row = t,column = 4,value = Connection)
     	 wb.save('./ip1.xlsx')
    

--->有问题请联系QQ1436281495^_^

2019-11-20 17:16:05 u014639984 阅读数 12
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93944 人正在学习 去看看 唐宇迪

Python项目小结

阅读数 470

没有更多推荐了,返回首页