技术标签: # 机器学习
整个过程就是看别人代码,https://blog.csdn.net/snoopy_yuan
然后弄懂每个步骤及相关方法;在此记录。
附一个关于DataFrame的基础操作的网址:https://www.cnblogs.com/zuizui1204/p/6423069.html
Part 1 读取数据中的问题:
1. 关于pandas中的dataframe和series:
Series:https://www.cnblogs.com/linux-wangkun/p/5903380.html
DataFrame:https://www.cnblogs.com/linux-wangkun/p/5903945.html
总结:Series只能有一列,多行;DataFrame相当于数据库中的表,多列多行;
基础知识:
python中的字典:
http://www.runoob.com/python/python-variable-types.html
2. os.path.split('path')[1]:
首先,os.path.split('path'),是获得路径为path的文件的位置,并切分split;输出结果是一个数组,第一个为路径,第二个为文件名;
参考:https://blog.csdn.net/sxingming/article/details/51475382
os.path.split(__file__)[1]:
参考:http://blog.chinaunix.net/uid-21961132-id-159389.html
__file__获得当前.py文件的完整路径;之后操作同上。
3. print函数:
pritn(''ran for %.2f m" % ((endtime-starttime)/60.)) ;m是后面的字符;跟格式化输出没关系;
%f,打印浮点数;%6.2f,小数点后打印两位;6,表示指定占位符宽度,即打印出来的这个数占几个字符的宽度;
参考:https://blog.csdn.net/qq_37482544/article/details/63720726
及 https://www.cnblogs.com/plwang1990/p/3757549.html
Part 2 数据预分析中的问题
1. pandas中的get_chunk:
get_chunk可用于处理大批量数据,每次读取一部分;
使用:
data_user=pd.read_csv('path')
chunkSize=100
chunk=data_user.get_chunk(chunkSize)#即每次读取100条数据;
另外,read_csv方法也可设置chunkSize,如:data_user=pd.read_csv('path',chunkSize=100000)
适用于,有的csv文件巨大,读文件时出现异常;可使用上述两种方法;
参考:https://blog.csdn.net/zm714981790/article/details/51375475
https://blog.csdn.net/github_33934628/article/details/69938788
2. pd.value_counts():
该方法是个计数方法,输入参数为series类型数据,输出参数为series;其中索引为series中出现过的所有值,其值为频率。
且默认按值排序,默认升序;
参考:https://ask.csdn.net/questions/450194?sort=id
https://www.cnblogs.com/sunbigdata/p/7907674.html
如,df=DataFrame({'Q1':[1,3,4,3,4],
'Q2':[2,3,1,2,3],
'Q3':[1,5,2,4,4]})
count=df['Q2'].value_counts()
count为:
值 出现频率
1 1
2 2
3 2
4. pd.read_csv()方法的一些参数:
这里是为了将用户的每天的商品操作总次数进行可视化表示;
dateparse=lambda dates: pd.datetime.strptime(dates,'%Y%M%D %H')#设置日期格式
pd.read_csv('path',parse_dates=['times'],date_parser=dateparser,index_col=['times'],chunkSize=100000)
各参数含义:
parse_dates,将指定列解析为日期格式;
date_parser,用于解析日期的函数;
index_col,将指定列作为索引;
参考:https://www.jianshu.com/p/366aa5daaba9
https://www.cnblogs.com/datablog/p/6127000.html
https://blog.csdn.net/qq_18433441/article/details/56664505
5. DataFrame.shape:
df=pd.read_csv('path',chunkSize=100000)#读取数据,这里不重复写上面的了,假装已经设日期times列为索引;
rowCount=df[date].shape[0]
解释:
df[date],获得指定date的行数,形成一个临时的DataFrame;
df[date].shape,获得DateFrame的行数和列数,输出为(a,b)形式,a是行数,b是列数;(问:这个形式是叫元祖么?)
df[date].shape[0],就是获得第一个元素;
参考:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.shape.html
6. import 与 from xx import xx:
import,导入模块,可出现在任何位置;
from module import name,从模块a中导入b函数;
from module import *,从模块a中导入所有函数;
则之后可以直接使用相应的函数;
7. Series.plot:
功能是作图;通过matplotlib.pyplot.show(),展示;
8. 导入自定义模块:
参考:https://blog.csdn.net/devil_2009/article/details/15816237
三种不同位置的导入方式:
1)需要引用的文件和当前文件在同一个文件夹下:
---folder
------data_analysis.py
------dict_csv.py
在data_analysis中引入dicti_csv中的row_dict2csv方法,可直接写作:import dict_csv 或 from dict_csv import *
或 from dict_csv import row_dict2csv
(但其实我的文件结构就是这样的,但不知道为啥显示导入不了= =)
注意:一个项目是两个.py文件都在主项目下,就是项目下直接创建了两个.py文件,如上import,成功;
另一个项目是两个.py文件在主项目下的一个文件夹内,如上import,失败。
莫名成功:
from data_preanalysis.dict_csv import * #该种导入方式成功,其中data_preanalysis是两个.py文件所在的文件夹;
另外创建了__init__.py文件,不知道是不是也有影响。
2)两个文件不能放在同一个目录下:
---folder
------dict_csv.py
------otherfile.py
---data_preanalysis.py
方法:在folder下创建__init__.py文件,此时folder成为一个package而不是文件夹;
---folder
------dict_csv.py
------otherfile.py
------__init__.py
---data_preanalysis.py
导入方式:from folder.dict_csv import * 或 import folder.dict_csv 都可以;
3)两个文件不在同一个目录下,而是如下结构:
---folderA
------dict_csv.py
------otherfile.py
---folderB
------data_preanalysis.py
方法:同2)的处理方法;(未试验)
导入方式:同2)
9. pandas的merge方法:
实现将两个DataFrame的连接,功能相当于SQL中的各种连接;
使用:df1=DataFrame({'userId':[1,2,3,4],'classId':[5,6,7,8]})
df2=DataFrame({'userId':[1,2,3,4],'userName':['adam','bob','cindy','david']})
df3=pd.merge(df1,df2,on='userId',how='inner')
参数解释:on:表示以两个DataFram的哪个属性进行连接;当两个DataFrame的列名不同时,可使用left_on,right_on;
how:连接方式;默认值为inner,即内连接。(可复习数据库中的内连接,左连接,右连接的含义)
参考:https://blog.csdn.net/zhouwenyuan1015/article/details/77334889
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html
Part 3 基于规则的预测
1. DataFrame.isin(values)方法:
该方法实现比较dataframe中的数据是否在values中出现;若出现,则为true;否则为false。
针对values是不同的数据类型,比较方式有所不同,分为以下三种情况;
1)values是list类型:
则判断dataFrame中的数据是否有在values中出现过(不考虑出现位置);出现过,则为true。
举例:
a=pd.DataFrame({'A':[1,2,3],'B':['a','b','c']})
a.isin([1,3,'b'])
输出结果是:
A B
0 true false
1 false false
2 true true
2)values是dictionary类型:
则判断DataFrame在对应的列是否出现过;
举例:
a=pd.DataFrame({'A':[1,2,3],'B':['a','b','c']})
b={'A':[2,4],'B':['a','b','d']}
a.isin(b)
输出结果是:
A B
0 false true
1 true true
2 false false
3)values是Series或DataFrame类型:
则判断DataFrame的元素是否在values中对应的位置(对应的行,对应的列)出现过;
举例:
a=pd.DataFrame({'A':[1,2,3],'B':['a','b','c']})
b=pd.DataFrame({'A':[1,4],'B':['a','b','d']})
a.isin(b)
输出结果是:
A B
0 true true
1 false true
2 false false
参考:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.isin.html
利用isin方法,可对数据实现筛选;isin后结果为true、false组成的数据列;
如:df_34=df[df['behavior_type'].isin([3,4])],则得到结果为true的对应行;
参考:https://blog.csdn.net/qq_34264472/article/details/53195940
2. DataFrame.to_csv()方法:
把DataFrame文件写入到逗号分隔的csv文件中;一些参数说明:
path:即保存csv的位置;
columns:保留DataFrame的哪些列;
header:是否保留列名,默认为true;
index:是否保留索引,默认为true;
mode:写入方式,默认为'w';'a'表示append,即追加写入;
参考:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html
https://blog.csdn.net/toshibahuai/article/details/79034829
3. DataFrame.drop_duplicates()方法:
删除重复项;可指定列,意思是,这些列的值如果都一样,则删除;
参数:
keep:删除数据的方式,默认是first,表示保留第一个出现的,其后出现的都删除;
参考:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html
4. 这里写一个小问题,总是忘;
a=pd.DataFrame({'userId':[1,2],'userName':['alice','bob'],'userSex':['male','female']})
b=a['userId','userName']#表示保留指定列;
5. DataFrame.dropna()方法:
删除重复数据;
axis:取0或'index',1或'columns',表示如果是空数据,是删除行还是删除列;
how:取all或any,默认为any;any:表示数据中有一个为空,则删除;
http协议Python版Http协议介绍什么是http协议什么是HTTPSHTTP请求内容HTTP响应内容什么是URL协议版本请求数据1. application/json代码实现2. application/x-www-form-urlencoded代码实现3. multipart/from-data代码实现方法1:方法2:4. text/xml代码实现Http协议介绍在做接口测试的过程中,都会遇到一些http协议,什么是http协议?什么是http协议HTTP协议是Hyper Text Tra
在eclipse环境下使用@Slf4j注解时,出现了log cannot be resolved这个异常。经过排查发现是缺少lombok插件的问题。解决方式当然是在eclipse中安装lombok插件啦。elcipse 安装lombok插件解决 @Slf4j 等找不到log变量问题由于最近在弄elastic-job ,在下载源码后会报一些错误,变量log 找不到,没有gette...
标志着这家LiDAR制造商在汽车固态传感器生产领域到达了重要的里程碑 加州桑尼维尔--(美国商业资讯)--设计和开发固态LiDAR传感器和智能传感解决方案的全球领导者Quanergy Systems, Inc.今天宣布,其固态LiDAR传感器生产线已通过IATF 16949认证。 国际汽车工作组(IATF) 16949认证代表了对汽车业内组织的质量管理体系要求。为了符合认证要求,Q...
tigerVNC的简单使用教程(CentOS的远程桌面连接) 1、环境和软件准备(1) CentOS 6.3下[[email protected] ~]$ rpm –q tigervnc tigervnc-servertigervnc-1.0.90-0.17.20110314svn4359.el6.i686tigervnc-server-1.0.90-0.17.20110314svn
降维、特征提取与流形学习为了实现数据变换的那些目的,最常用的算法就是主成分分析。以及另外两种算法:用于特征提取的非负矩阵分解 NMF、用于二位散点图可视化的 t-SNE1.主成分分析主成分分析(principal component analysis, PCA)是一种旋转数据集的方法,旋转后的特征在统计上不相关。通常是根据特征对解释数据的重要性来选择它的一个子集。mglearn....
也许有些小伙伴看了上一篇文章之后,发觉Python是真的很简单。但是不知道学了到底有什么用,其实应用非常的广,像是网络的前端后端、机器学习、计算机视觉,甚至你需要去批量抓取一些数据等等,都是Python的主战场,甚至有很多公司开始把用Matlab写的算法改为用Python来实现。如果你下定决心来学习Python,那么这个系列的文章就可以带你从零走向Python的巅峰。既然要学Python,那么我...
解决方法1、pip uninstall pytest-allure-adaptor2、pip install allure-pytest3、搞定,快点去学习吧
一、Mybatis的Dao层实现1.1 传统开发方式1.1.1编写UserDao接口public interface UserDao { List<User> findAll() throws IOException;}1.1.2.编写UserDaoImpl实现public class UserDaoImpl implements UserDao { pu...
前言高尔基曾说过,“书籍使我变成了一个幸福的人,使我的生活变成轻松而舒适的诗。”自从毕业后,来到真正的社会上,才体验到生活的酸甜苦辣,并不是小时候那样想的那么美好。自己也是跟其他人一样,在大城市奋斗着,为了自己能过的好点。 也不清楚自己是什么时候开始喜欢上读书的,之前在上学时也爱读书,只不过是读一些网络小说。以前很难坚持去看完一部名著之类的书,总感觉那书对我吸引力不大。可能是身...
什么是 Hexo?Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。安装前提安装 Hexo 相当简单。然而在安装前,您必须检查电脑中是否已安装下列应用程序:Node.jsGit如果您的电脑...
。classpath很重要,遇到了个问题,lib下其他目录的jar包不加载,导致项目报错,这样只会加载lib目录下的jar包,手动修改webroot这个是别人的,我自己弄得是直接忘记怎么修改了,不是这样改的导入一个web项目,但项目的webroot目录叫WebContent,而myeclipse默认
到入工程后,所有的@Override都报如下错误:Multiple markers at this line - The method getCount() of type new BaseAdapter(){} must override a superclass method百度中的结果的是:很多时候导入android项目在eclipse中会报@Override错误,这