In [56]:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from include.feature_lists import L0_stations, L1_stations, L2_stations, L3_stations
from include.dataset_fnames import train_numeric_fname

%matplotlib inline

In [2]:
df = pd.read_csv("item_station_date.csv", index_col=['Id'])


d:\Anaconda\envs\Deep2\lib\site-packages\numpy\lib\arraysetops.py:395: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  mask |= (ar1 == a)

In [145]:
df.info()


<class 'pandas.core.frame.DataFrame'>
Int64Index: 2367495 entries, 510783 to 2353348
Data columns (total 70 columns):
L0S00             float64
L0S01             float64
L0S02             float64
L0S03             float64
L0S04             float64
L0S05             float64
L0S06             float64
L0S07             float64
L0S08             float64
L0S09             float64
L0S10             float64
L0S11             float64
L0S12             float64
L0S13             float64
L0S14             float64
L0S15             float64
L0S16             float64
L0S17             float64
L0S18             float64
L0S19             float64
L0S20             float64
L0S21             float64
L0S22             float64
L0S23             float64
L1S24             float64
L1S25             float64
L2S26             float64
L2S27             float64
L2S28             float64
L3S29             float64
L3S30             float64
L3S31             float64
L3S32             float64
L3S33             float64
L3S34             float64
L3S35             float64
L3S36             float64
L3S37             float64
L3S38             float64
L3S39             float64
L3S40             float64
L3S41             float64
L3S42             float64
L3S43             float64
L3S44             float64
L3S45             float64
L3S46             float64
L3S47             float64
L3S48             float64
L3S49             float64
L3S50             float64
L3S51             float64
Minimum           float64
Maximum           float64
Total_Duration    float64
L0_Minimum        float64
L0_Maximum        float64
L0_Duration       float64
L1_Minimum        float64
L1_Maximum        float64
L1_Duration       float64
L2_Minimum        float64
L2_Maximum        float64
L2_Duration       float64
L3_Minimum        float64
L3_Maximum        float64
L3_Duration       float64
Duration_Sum      float64
Duration_Lag      float64
Next              float64
dtypes: float64(70)
memory usage: 1.3 GB

In [62]:
%time response_df = pd.read_csv(train_numeric_fname, usecols=['Id', 'Response'], index_col=['Id'], dtype=int)
response_df.head()


Wall time: 15.8 s
Out[62]:
Response
Id
4 0
6 0
7 0
9 0
11 0

In [63]:
full_df = df.join(response_df)

In [70]:
train_df = full_df[full_df['Response'].isnull() == False]

In [71]:
train_df.head()


Out[71]:
L0S00 L0S01 L0S02 L0S03 L0S04 L0S05 L0S06 L0S07 L0S08 L0S09 ... L2_Minimum L2_Maximum L2_Duration L3_Minimum L3_Maximum L3_Duration Duration_Sum Duration_Lag Next Response
Id
651542 0.00 0.01 NaN 0.01 NaN 0.23 NaN 0.23 0.23 NaN ... NaN NaN 0.0 1.49 1.53 0.04 0.27 1.26 0.01 0.0
108193 0.01 0.01 0.01 NaN NaN 0.08 0.08 NaN 0.08 0.44 ... NaN NaN 0.0 1.59 1.61 0.02 0.45 1.15 0.01 0.0
521262 0.01 0.01 NaN 0.06 0.23 NaN NaN 0.23 0.23 NaN ... NaN NaN 0.0 1.49 1.53 0.04 0.26 1.26 0.01 0.0
587799 0.01 0.01 NaN 0.01 0.08 NaN 0.23 NaN 0.23 0.23 ... NaN NaN 0.0 1.49 1.52 0.03 0.25 1.26 NaN 0.0
596800 0.01 0.01 NaN 0.06 0.22 NaN NaN 0.23 0.23 0.23 ... NaN NaN 0.0 1.49 1.52 0.03 0.25 1.26 NaN 0.0

5 rows × 71 columns


In [157]:
sample_df = train_df.head(1000000)
sample_df['idx'] = range(len(sample_df))
p_df = sample_df[sample_df['Response'] > 0]
n_df = sample_df.drop(p_df.index)

# X = range(1000)
# y = train_df.head(1000)['Minimum']
# c = ['red' if train_df.loc[idx, 'Response'] > 0 else 'blue' for idx in train_df.head(1000).index]
# m = ['x' if train_df.loc[idx, 'Response'] > 0 else '.' for idx in train_df.head(1000).index]


d:\Anaconda\envs\Deep2\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  

In [158]:
p_df['Response'].sum()


Out[158]:
6184.0

In [ ]:


In [167]:
plt.figure(figsize=(20,20))
#plt.scatter(n_df['idx'], n_df['Minimum'], c='blue', marker='.')
plt.scatter(n_df['idx'], n_df['L0_Minimum'], c='black', marker='.')
plt.scatter(n_df['idx'], n_df['L1_Minimum'], c='yellow', marker='.')
plt.scatter(n_df['idx'], n_df['L2_Minimum'], c='green', marker='.')
plt.scatter(n_df['idx'], n_df['L3_Minimum'], c='cyan', marker='.')
#plt.scatter(p_df['idx'], p_df['Minimum'], c='red', marker='x')
plt.scatter(p_df['idx'], p_df['L0_Minimum'], c='red', marker='x')
plt.scatter(p_df['idx'], p_df['L1_Minimum'], c='red', marker='x')
plt.scatter(p_df['idx'], p_df['L2_Minimum'], c='red', marker='x')
plt.scatter(p_df['idx'], p_df['L3_Minimum'], c='red', marker='x')
# plt.xlim(800,1000)
# plt.ylim(0,10)
plt.plot()


Out[167]:
[]

In [160]:
plt.figure(figsize=(20,20))
plt.scatter(n_df['idx'], n_df['Total_Duration'], c='blue', marker='.')
plt.scatter(p_df['idx'], p_df['Total_Duration'], c='red', marker='x')
#plt.xlim(800,1000)
# plt.ylim(0,10)
plt.plot()


Out[160]:
[]

In [159]:
p_df['Total_Duration'].max()


Out[159]:
373.99688720699999

In [166]:
a=plt.hist(sample_df['Total_Duration'], bins=100, log=True)



In [138]:



Out[138]:
5.2199997901900002

In [ ]:


In [33]:
df['Next'] = -1
del df['Next']

In [35]:
for i, id in enumerate(df.head(10).index):
    next_min = df.iloc[i+1]['Minimum']
    df.loc[id, 'Next'] = next_min

In [45]:
df.head()


Out[45]:
L0S00 L0S01 L0S02 L0S03 L0S04 L0S05 L0S06 L0S07 L0S08 L0S09 ... L1_Duration L2_Minimum L2_Maximum L2_Duration L3_Minimum L3_Maximum L3_Duration Duration_Sum Duration_Lag Next
Id
510783 0.00 0.01 NaN 0.01 NaN 0.07 0.08 NaN 0.08 0.47 ... 0.0 NaN NaN 0.0 1.58 1.61 0.03 0.50 1.11 0.00
651542 0.00 0.01 NaN 0.01 NaN 0.23 NaN 0.23 0.23 NaN ... 0.0 NaN NaN 0.0 1.49 1.53 0.04 0.27 1.26 0.01
108193 0.01 0.01 0.01 NaN NaN 0.08 0.08 NaN 0.08 0.44 ... 0.0 NaN NaN 0.0 1.59 1.61 0.02 0.45 1.15 0.01
430412 0.01 0.01 NaN 0.06 0.23 NaN NaN 0.23 0.23 0.23 ... 0.0 NaN NaN 0.0 1.50 1.53 0.03 0.25 1.27 0.01
443497 0.01 0.01 0.01 NaN 0.08 NaN 0.11 NaN 0.11 NaN ... 0.0 NaN NaN 0.0 1.49 1.53 0.04 0.14 1.38 0.01

5 rows × 70 columns


In [46]:
L0_df = df[L0_stations + ['L0_Minimum', 'L0_Maximum', 'L0_Duration']]
L1_df = df[L1_stations + ['L1_Minimum', 'L1_Maximum', 'L1_Duration']]
L2_df = df[L2_stations + ['L2_Minimum', 'L2_Maximum', 'L2_Duration']]
L3_df = df[L3_stations + ['L3_Minimum', 'L3_Maximum', 'L3_Duration']]

In [49]:
n = df[df['L0_Minimum'] != df['Minimum']]

In [53]:
n[['L0_Minimum', 'L1_Minimum', 'L2_Minimum', 'L3_Minimum', 'Minimum']]


Out[53]:
L0_Minimum L1_Minimum L2_Minimum L3_Minimum Minimum
Id
340159 NaN NaN NaN 0.38 0.38
412433 NaN NaN NaN 0.38 0.38
492065 NaN NaN NaN 0.38 0.38
555356 NaN NaN NaN 0.38 0.38
555357 NaN NaN NaN 0.38 0.38
562823 NaN NaN NaN 0.38 0.38
2336275 NaN NaN NaN 0.38 0.38
134185 NaN NaN NaN 0.39 0.39
194663 NaN NaN NaN 0.39 0.39
221018 NaN NaN NaN 0.39 0.39
261463 NaN NaN NaN 0.39 0.39
264804 NaN NaN NaN 0.39 0.39
268381 NaN NaN NaN 0.39 0.39
342398 NaN NaN NaN 0.39 0.39
359252 NaN NaN NaN 0.39 0.39
400142 NaN NaN NaN 0.39 0.39
403667 NaN NaN NaN 0.39 0.39
404236 NaN NaN NaN 0.39 0.39
404237 NaN NaN NaN 0.39 0.39
407384 NaN NaN NaN 0.39 0.39
413969 NaN NaN NaN 0.39 0.39
440077 NaN NaN NaN 0.39 0.39
471681 NaN NaN NaN 0.39 0.39
471682 NaN NaN NaN 0.39 0.39
475808 NaN NaN NaN 0.39 0.39
476673 NaN NaN NaN 0.39 0.39
481783 NaN NaN NaN 0.39 0.39
483640 NaN NaN NaN 0.39 0.39
487614 NaN NaN NaN 0.39 0.39
489517 NaN NaN NaN 0.39 0.39
... ... ... ... ... ...
2234852 NaN NaN NaN NaN NaN
2236319 NaN NaN NaN NaN NaN
2236342 NaN NaN NaN NaN NaN
2255773 NaN NaN NaN NaN NaN
2259704 NaN NaN NaN NaN NaN
2270538 NaN NaN NaN NaN NaN
2271488 NaN NaN NaN NaN NaN
2271489 NaN NaN NaN NaN NaN
2271490 NaN NaN NaN NaN NaN
2271491 NaN NaN NaN NaN NaN
2273571 NaN NaN NaN NaN NaN
2285506 NaN NaN NaN NaN NaN
2286301 NaN NaN NaN NaN NaN
2292304 NaN NaN NaN NaN NaN
2293692 NaN NaN NaN NaN NaN
2299958 NaN NaN NaN NaN NaN
2302381 NaN NaN NaN NaN NaN
2304232 NaN NaN NaN NaN NaN
2306237 NaN NaN NaN NaN NaN
2307606 NaN NaN NaN NaN NaN
2308719 NaN NaN NaN NaN NaN
2310819 NaN NaN NaN NaN NaN
2317065 NaN NaN NaN NaN NaN
2319357 NaN NaN NaN NaN NaN
2319644 NaN NaN NaN NaN NaN
2322627 NaN NaN NaN NaN NaN
2323432 NaN NaN NaN NaN NaN
2324729 NaN NaN NaN NaN NaN
2331450 NaN NaN NaN NaN NaN
2353348 NaN NaN NaN NaN NaN

534393 rows × 5 columns


In [54]:
df.loc[340159]


Out[54]:
L0S00              NaN
L0S01              NaN
L0S02              NaN
L0S03              NaN
L0S04              NaN
L0S05              NaN
L0S06              NaN
L0S07              NaN
L0S08              NaN
L0S09              NaN
L0S10              NaN
L0S11              NaN
L0S12              NaN
L0S13              NaN
L0S14              NaN
L0S15              NaN
L0S16              NaN
L0S17              NaN
L0S18              NaN
L0S19              NaN
L0S20              NaN
L0S21              NaN
L0S22              NaN
L0S23              NaN
L1S24              NaN
L1S25              NaN
L2S26              NaN
L2S27              NaN
L2S28              NaN
L3S29             0.38
                  ... 
L3S40              NaN
L3S41              NaN
L3S42              NaN
L3S43              NaN
L3S44              NaN
L3S45              NaN
L3S46              NaN
L3S47              NaN
L3S48              NaN
L3S49              NaN
L3S50              NaN
L3S51              NaN
Minimum           0.38
Maximum           0.49
Total_Duration    0.11
L0_Minimum         NaN
L0_Maximum         NaN
L0_Duration       0.00
L1_Minimum         NaN
L1_Maximum         NaN
L1_Duration       0.00
L2_Minimum         NaN
L2_Maximum         NaN
L2_Duration       0.00
L3_Minimum        0.38
L3_Maximum        0.49
L3_Duration       0.11
Duration_Sum      0.11
Duration_Lag      0.00
Next               NaN
Name: 340159, Length: 70, dtype: float64

In [ ]:
L0_df_corr = L0_df.corr()

In [ ]:
plt.figure(figsize=(20,20))
sns.heatmap(L0_df_corr, annot=True)
plt.show()

In [ ]:
L1_df_corr = L1_df.corr()

In [ ]:
plt.figure(figsize=(20,20))
sns.heatmap(L1_df_corr, annot=True)
plt.show()

In [ ]:


In [ ]:
L2_df_corr = L2_df.corr()

In [ ]:
plt.figure(figsize=(20,20))
sns.heatmap(L2_df_corr, annot=True)
plt.show()

In [ ]:


In [ ]:
L3_df_corr = L3_df.corr()

In [ ]:
plt.figure(figsize=(20,20))
sns.heatmap(L3_df_corr, annot=True)
plt.show()

In [ ]:
L3_df.head(10)

In [130]:
time_df = df[['L0_Minimum', 'L0_Maximum', 'L0_Duration', 'L1_Minimum', 'L1_Maximum', 'L1_Duration', 'L2_Minimum', 'L2_Maximum', 'L2_Duration', 'L3_Minimum', 'L3_Maximum', 'L3_Duration', 'Minimum', 'Maximum', 'Total_Duration', 'Duration_Sum', 'Duration_Lag']]

In [107]:
time_df = df[['L0_Duration', 'L1_Duration', 'L2_Duration', 'L3_Duration', 'Duration_Sum', 'Total_Duration']]

In [ ]:
time_df.corr()

In [132]:
time_df_corr = time_df.corr()

In [133]:
plt.figure(figsize=(10,10))
sns.heatmap(time_df_corr, annot=True)
plt.show()



In [131]:
time_df.head(10)


Out[131]:
L0_Minimum L0_Maximum L0_Duration L1_Minimum L1_Maximum L1_Duration L2_Minimum L2_Maximum L2_Duration L3_Minimum L3_Maximum L3_Duration Minimum Maximum Total_Duration Duration_Sum Duration_Lag
Id
510783 0.00 0.47 0.47 NaN NaN 0.0 NaN NaN 0.0 1.58 1.61 0.03 0.00 1.61 1.61 0.50 1.11
651542 0.00 0.23 0.23 NaN NaN 0.0 NaN NaN 0.0 1.49 1.53 0.04 0.00 1.53 1.53 0.27 1.26
108193 0.01 0.44 0.43 NaN NaN 0.0 NaN NaN 0.0 1.59 1.61 0.02 0.01 1.61 1.60 0.45 1.15
430412 0.01 0.23 0.22 NaN NaN 0.0 NaN NaN 0.0 1.50 1.53 0.03 0.01 1.53 1.52 0.25 1.27
443497 0.01 0.11 0.10 NaN NaN 0.0 NaN NaN 0.0 1.49 1.53 0.04 0.01 1.53 1.52 0.14 1.38
513365 0.01 0.23 0.22 NaN NaN 0.0 NaN NaN 0.0 1.49 1.53 0.04 0.01 1.53 1.52 0.26 1.26
517076 0.01 0.23 0.22 NaN NaN 0.0 NaN NaN 0.0 1.49 1.53 0.04 0.01 1.53 1.52 0.26 1.26
520216 0.01 0.23 0.22 NaN NaN 0.0 NaN NaN 0.0 1.49 1.52 0.03 0.01 1.52 1.51 0.25 1.26
521262 0.01 0.23 0.22 NaN NaN 0.0 NaN NaN 0.0 1.49 1.53 0.04 0.01 1.53 1.52 0.26 1.26
574529 0.01 0.23 0.22 NaN NaN 0.0 NaN NaN 0.0 1.49 1.52 0.03 0.01 1.52 1.51 0.25 1.26

In [33]:
df = df.sort_values(L0_stations + L1_stations + L2_stations + L3_stations)

In [34]:
df_flow = df[L0_stations + L1_stations + L2_stations + L3_stations]

In [35]:
df_flow.shape[0] / 4000


Out[35]:
591

In [36]:
df_flow[df_flow.notnull()] = 1
df_flow[df_flow.isnull()] = 0


d:\Anaconda\envs\Deep2\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  """Entry point for launching an IPython kernel.
d:\Anaconda\envs\Deep2\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  

In [14]:
img = [df_flow.loc[idx] if (idx % 4000 == 0) else for idx in df_flow.index]


  File "<ipython-input-14-082fa3c1ed29>", line 1
    img = [df_flow.loc[idx] if (idx % 4000 == 0) for idx in df_flow.idx]
                                                   ^
SyntaxError: invalid syntax

In [37]:
df_flow = df_flow.reset_index()
del df_flow['Id']

In [38]:
img = df_flow[df_flow.index % 4000 == 0]

In [39]:
plt.figure(figsize=(20,20))
plt.imshow(img.values)


Out[39]:
<matplotlib.image.AxesImage at 0x4dbcfef0>

In [ ]: