天池离线赛——移动推荐算法学习笔记1_数据预处理_date_df.shape[0]_Chestnutttttt的博客-程序员秘密

技术标签: # 机器学习  

整个过程就是看别人代码,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:表示数据中有一个为空,则删除;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shelly_Chestnut/article/details/80555479

智能推荐

http协议Python版_http python_Orchestrator_me的博客-程序员秘密

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报错:log cannot be resolved_eclipse log报错_毛公鼎的博客-程序员秘密

在eclipse环境下使用@Slf4j注解时,出现了log cannot be resolved这个异常。经过排查发现是缺少lombok插件的问题。解决方式当然是在eclipse中安装lombok插件啦。elcipse 安装lombok插件解决 @Slf4j 等找不到log变量问题由于最近在弄elastic-job ,在下载源码后会报一些错误,变量log 找不到,没有gette...

Quanergy获得IATF 16949汽车生产认证_sinat_41698914的博客-程序员秘密

标志着这家LiDAR制造商在汽车固态传感器生产领域到达了重要的里程碑 加州桑尼维尔--(美国商业资讯)--设计和开发固态LiDAR传感器和智能传感解决方案的全球领导者Quanergy Systems, Inc.今天宣布,其固态LiDAR传感器生产线已通过IATF 16949认证。 国际汽车工作组(IATF) 16949认证代表了对汽车业内组织的质量管理体系要求。为了符合认证要求,Q...

tigerVNC的简单使用教程(CentOS的远程桌面连接)_DayDreamingBoy的博客-程序员秘密

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

Python无监督学习2_mglearn.plots.plot_pca_illustration()_泽野的博客-程序员秘密

降维、特征提取与流形学习为了实现数据变换的那些目的,最常用的算法就是主成分分析。以及另外两种算法:用于特征提取的非负矩阵分解 NMF、用于二位散点图可视化的 t-SNE1.主成分分析主成分分析(principal component analysis, PCA)是一种旋转数据集的方法,旋转后的特征在统计上不相关。通常是根据特征对解释数据的重要性来选择它的一个子集。mglearn....

Python入门--搭建你的开发环境_普通网友的博客-程序员秘密

也许有些小伙伴看了上一篇文章之后,发觉Python是真的很简单。但是不知道学了到底有什么用,其实应用非常的广,像是网络的前端后端、机器学习、计算机视觉,甚至你需要去批量抓取一些数据等等,都是Python的主战场,甚至有很多公司开始把用Matlab写的算法改为用Python来实现。如果你下定决心来学习Python,那么这个系列的文章就可以带你从零走向Python的巅峰。既然要学Python,那么我...

随便推点

pytest执行报错AttributeError: module ‘allure‘ has no attribute ‘severity_level‘_Vans1986的博客-程序员秘密

解决方法1、pip uninstall pytest-allure-adaptor2、pip install allure-pytest3、搞定,快点去学习吧

Mybatis 之二 深入了解映射文件和核心配置文件(包含动态sql和分页插件)_家乡的落日的博客-程序员秘密

一、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...

读书而引发的思考_读书心得引发的思考_SimpleSmile_5177的博客-程序员秘密

前言高尔基曾说过,“书籍使我变成了一个幸福的人,使我的生活变成轻松而舒适的诗。”自从毕业后,来到真正的社会上,才体验到生活的酸甜苦辣,并不是小时候那样想的那么美好。自己也是跟其他人一样,在大城市奋斗着,为了自己能过的好点。   也不清楚自己是什么时候开始喜欢上读书的,之前在上学时也爱读书,只不过是读一些网络小说。以前很难坚持去看完一部名著之类的书,总感觉那书对我吸引力不大。可能是身...

使用 Hexo 快速搭建博客_LaravelCode的博客-程序员秘密

什么是 Hexo?Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。安装前提安装 Hexo 相当简单。然而在安装前,您必须检查电脑中是否已安装下列应用程序:Node.jsGit如果您的电脑...

myeclipse---项目_bluss-yang的博客-程序员秘密

。classpath很重要,遇到了个问题,lib下其他目录的jar包不加载,导致项目报错,这样只会加载lib目录下的jar包,手动修改webroot这个是别人的,我自己弄得是直接忘记怎么修改了,不是这样改的导入一个web项目,但项目的webroot目录叫WebContent,而myeclipse默认

在eclipse中导入工程后@Override报错_xxg3053的博客-程序员秘密

到入工程后,所有的@Override都报如下错误:Multiple markers at this line - The method getCount() of type new BaseAdapter(){} must override a superclass   method百度中的结果的是:很多时候导入android项目在eclipse中会报@Override错误,这

推荐文章

热门文章

相关标签