在Kaggle的Notebook上处理找到的数据集并下载

出走十年,归来仍是小白。如感弱智,轻喷轻喷。。。

最近在找数据集,看kaggle上数据集好多,搜索也方便,就在上面找了些数据集。但其实我看中了好多数据集,想用但只想用一部分,下载下来再处理又很慢。就想着先用kaggle的notebook先处理了,下载下来的数据集能直接用就好了。摸索好,结果在此记录下。

一、上网找数据集

Kaggle: Your Machine Learning and Data Science Community

kaggle官网链接。里面数据集好多呀,爽歪歪。我个人有个数据集“鄙视链”,总感觉大数据集记录东西更细,分析起来更带劲儿。当然,所有数据集的生产者都辛苦啦!不论大小数据集总是天生其才必有用哒!

我看中了“Daily Temperature of Major Cities” Daily Temperature of Major Cities | Kaggle,它这个是世界各地的主要城市19950101-20200513日平均温度的记录表。总共超过2.5m的词条,我的小破电脑估计得处理一天。关键我也不想要全世界的,只要美国的;也不想要1995-2020的,只想要2018-2020的。

二、处理数据并下载

基本思路就是在原表的基础上缝缝补补,如有需要建个新表,然后下载结果。

打开相关数据集链接的notebook后,系统自动把input和output的目录都准备好了,input目录里面自动储备相关数据集。系统还很贴心地准备了一些代码,运行完了环境也配好了。也有其他高级设置,但我就简单处理个数据集,也用不到,就在此并不做赘述。

df = pd.read_csv("../input/daily-temperature-of-major-cities/city_temperature.csv",low_memory = False)
is_us = df.Country == 'US'
df = df[is_us]
df = df.set_index('State')
df = df.drop(['Alaska','Hawaii'])
df['State'] = df.index

这一段就是加载数据,只留表格中Country项为US的部分。因为只需要美国本土大陆连通的部分,所以顺便把State项为Alaska和Hawaii的部分也给删了。多说一句,这里面删行的时候,用到了pandas的drop,但drop只能作用于dataframe的index,所以就先把State项标记为index项。但有个问题,就是State项被标记为index了之后,你用df.info()就看不到State列的相关内容了,所以为保证表格完整性,我又复制了一个State列加了回去。

df = df.set_index('Year')
df = df.drop(range(1995,2018))
df['Year'] = df.index

这一段是去掉1995-2017的数据,只留下2018-2020的数据。注意range的右端点是不包在range里的。这里用的手法跟之前一样,就是先把Year列设置成index列,同时复制Year列以保证信息不丢失。

df['Date'] = df['Year']*10000 + df['Month']*100 + df['Day']
df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d')
df.drop(['Region','Country','Month','Day','Year'], axis=1, inplace=True)

这两行是精简原表中的Year,Month,Day列为一列Date,并去掉不用的Region和Country列。我的情况是正好Year,Month,Day都是int64类型的,所以可以直接用int64转化为datetime类型。记得format用对就好。How to Convert Integers to Datetime in Pandas DataFrame – Data to Fish 这一篇文章就写得很详细了,需要时可以供查找不同format表达方式的参数。至于删除列,记得axis设置成1就好,inplace主要是想省点空间,虽然这次没啥影响。

dtem = pd.DataFrame(columns=df.City.unique())
dtem['Date'] = pd.date_range(start='1/1/2018', end='5/13/2020')
dtem = dtem.set_index('Date')
for data in df.itertuples():
    dtem.loc[data.Date,data.City] = data.AvgTemperature

这段是我想把数据集一条条的精简到一个矩阵里面,横轴表示不同城市,纵轴表示不同日期,表格内容就是日平均气温。不过这段产生的还是个表格哈,我是为了之后用matlab生成矩阵方便做的这个表。运行结束,新表格生成。

os.chdir(r'/kaggle/working')
dtem.to_csv(r'daily_temperature_20180101_20200513.csv')
from IPython.display import FileLink
FileLink(r'daily_temperature_20180101_20200513.csv')

这段是用来下载保存做好的表格。注意要先换当前目录,系统提供的output的那个working目录才是可以保存东西的,一般够用。运行完会生成一个链接,点开就能下载啦~

三、感受

我只懂点C和C++,没正经学过python,更别提pandas,但也觉得在网上输输关键字也能把东西找的差不多。哈哈,缝合怪是我本人啦,搬搬砖嘛。不过用kaggle的notebook处理是真的快啊,一会儿就好了(捂脸)。

你可能感兴趣的:(python)