In [1]:
import pandas as pd

In [3]:
pd.read_csv("surveys.csv")


Out[3]:
record_id month day year plot_id species_id sex hindfoot_length weight
0 1 7 16 1977 2 NL M 32.0 NaN
1 2 7 16 1977 3 NL M 33.0 NaN
2 3 7 16 1977 2 DM F 37.0 NaN
3 4 7 16 1977 7 DM M 36.0 NaN
4 5 7 16 1977 3 DM M 35.0 NaN
5 6 7 16 1977 1 PF M 14.0 NaN
6 7 7 16 1977 2 PE F NaN NaN
7 8 7 16 1977 1 DM M 37.0 NaN
8 9 7 16 1977 1 DM F 34.0 NaN
9 10 7 16 1977 6 PF F 20.0 NaN
10 11 7 16 1977 5 DS F 53.0 NaN
11 12 7 16 1977 7 DM M 38.0 NaN
12 13 7 16 1977 3 DM M 35.0 NaN
13 14 7 16 1977 8 DM NaN NaN NaN
14 15 7 16 1977 6 DM F 36.0 NaN
15 16 7 16 1977 4 DM F 36.0 NaN
16 17 7 16 1977 3 DS F 48.0 NaN
17 18 7 16 1977 2 PP M 22.0 NaN
18 19 7 16 1977 4 PF NaN NaN NaN
19 20 7 17 1977 11 DS F 48.0 NaN
20 21 7 17 1977 14 DM F 34.0 NaN
21 22 7 17 1977 15 NL F 31.0 NaN
22 23 7 17 1977 13 DM M 36.0 NaN
23 24 7 17 1977 13 SH M 21.0 NaN
24 25 7 17 1977 9 DM M 35.0 NaN
25 26 7 17 1977 15 DM M 31.0 NaN
26 27 7 17 1977 15 DM M 36.0 NaN
27 28 7 17 1977 11 DM M 38.0 NaN
28 29 7 17 1977 11 PP M NaN NaN
29 30 7 17 1977 10 DS F 52.0 NaN
... ... ... ... ... ... ... ... ... ...
35519 35520 12 31 2002 9 SF NaN 24.0 36.0
35520 35521 12 31 2002 9 DM M 37.0 48.0
35521 35522 12 31 2002 9 DM F 35.0 45.0
35522 35523 12 31 2002 9 DM F 36.0 44.0
35523 35524 12 31 2002 9 PB F 25.0 27.0
35524 35525 12 31 2002 9 OL M 21.0 26.0
35525 35526 12 31 2002 8 OT F 20.0 24.0
35526 35527 12 31 2002 13 DO F 33.0 43.0
35527 35528 12 31 2002 13 US NaN NaN NaN
35528 35529 12 31 2002 13 PB F 25.0 25.0
35529 35530 12 31 2002 13 OT F 20.0 NaN
35530 35531 12 31 2002 13 PB F 27.0 NaN
35531 35532 12 31 2002 14 DM F 34.0 43.0
35532 35533 12 31 2002 14 DM F 36.0 48.0
35533 35534 12 31 2002 14 DM M 37.0 56.0
35534 35535 12 31 2002 14 DM M 37.0 53.0
35535 35536 12 31 2002 14 DM F 35.0 42.0
35536 35537 12 31 2002 14 DM F 36.0 46.0
35537 35538 12 31 2002 15 PB F 26.0 31.0
35538 35539 12 31 2002 15 SF M 26.0 68.0
35539 35540 12 31 2002 15 PB F 26.0 23.0
35540 35541 12 31 2002 15 PB F 24.0 31.0
35541 35542 12 31 2002 15 PB F 26.0 29.0
35542 35543 12 31 2002 15 PB F 27.0 34.0
35543 35544 12 31 2002 15 US NaN NaN NaN
35544 35545 12 31 2002 15 AH NaN NaN NaN
35545 35546 12 31 2002 15 AH NaN NaN NaN
35546 35547 12 31 2002 10 RM F 15.0 14.0
35547 35548 12 31 2002 7 DO M 36.0 51.0
35548 35549 12 31 2002 5 NaN NaN NaN NaN

35549 rows × 9 columns


In [5]:
surveys_df = pd.read_csv("surveys.csv")

In [6]:
surveys_df


Out[6]:
record_id month day year plot_id species_id sex hindfoot_length weight
0 1 7 16 1977 2 NL M 32.0 NaN
1 2 7 16 1977 3 NL M 33.0 NaN
2 3 7 16 1977 2 DM F 37.0 NaN
3 4 7 16 1977 7 DM M 36.0 NaN
4 5 7 16 1977 3 DM M 35.0 NaN
5 6 7 16 1977 1 PF M 14.0 NaN
6 7 7 16 1977 2 PE F NaN NaN
7 8 7 16 1977 1 DM M 37.0 NaN
8 9 7 16 1977 1 DM F 34.0 NaN
9 10 7 16 1977 6 PF F 20.0 NaN
10 11 7 16 1977 5 DS F 53.0 NaN
11 12 7 16 1977 7 DM M 38.0 NaN
12 13 7 16 1977 3 DM M 35.0 NaN
13 14 7 16 1977 8 DM NaN NaN NaN
14 15 7 16 1977 6 DM F 36.0 NaN
15 16 7 16 1977 4 DM F 36.0 NaN
16 17 7 16 1977 3 DS F 48.0 NaN
17 18 7 16 1977 2 PP M 22.0 NaN
18 19 7 16 1977 4 PF NaN NaN NaN
19 20 7 17 1977 11 DS F 48.0 NaN
20 21 7 17 1977 14 DM F 34.0 NaN
21 22 7 17 1977 15 NL F 31.0 NaN
22 23 7 17 1977 13 DM M 36.0 NaN
23 24 7 17 1977 13 SH M 21.0 NaN
24 25 7 17 1977 9 DM M 35.0 NaN
25 26 7 17 1977 15 DM M 31.0 NaN
26 27 7 17 1977 15 DM M 36.0 NaN
27 28 7 17 1977 11 DM M 38.0 NaN
28 29 7 17 1977 11 PP M NaN NaN
29 30 7 17 1977 10 DS F 52.0 NaN
... ... ... ... ... ... ... ... ... ...
35519 35520 12 31 2002 9 SF NaN 24.0 36.0
35520 35521 12 31 2002 9 DM M 37.0 48.0
35521 35522 12 31 2002 9 DM F 35.0 45.0
35522 35523 12 31 2002 9 DM F 36.0 44.0
35523 35524 12 31 2002 9 PB F 25.0 27.0
35524 35525 12 31 2002 9 OL M 21.0 26.0
35525 35526 12 31 2002 8 OT F 20.0 24.0
35526 35527 12 31 2002 13 DO F 33.0 43.0
35527 35528 12 31 2002 13 US NaN NaN NaN
35528 35529 12 31 2002 13 PB F 25.0 25.0
35529 35530 12 31 2002 13 OT F 20.0 NaN
35530 35531 12 31 2002 13 PB F 27.0 NaN
35531 35532 12 31 2002 14 DM F 34.0 43.0
35532 35533 12 31 2002 14 DM F 36.0 48.0
35533 35534 12 31 2002 14 DM M 37.0 56.0
35534 35535 12 31 2002 14 DM M 37.0 53.0
35535 35536 12 31 2002 14 DM F 35.0 42.0
35536 35537 12 31 2002 14 DM F 36.0 46.0
35537 35538 12 31 2002 15 PB F 26.0 31.0
35538 35539 12 31 2002 15 SF M 26.0 68.0
35539 35540 12 31 2002 15 PB F 26.0 23.0
35540 35541 12 31 2002 15 PB F 24.0 31.0
35541 35542 12 31 2002 15 PB F 26.0 29.0
35542 35543 12 31 2002 15 PB F 27.0 34.0
35543 35544 12 31 2002 15 US NaN NaN NaN
35544 35545 12 31 2002 15 AH NaN NaN NaN
35545 35546 12 31 2002 15 AH NaN NaN NaN
35546 35547 12 31 2002 10 RM F 15.0 14.0
35547 35548 12 31 2002 7 DO M 36.0 51.0
35548 35549 12 31 2002 5 NaN NaN NaN NaN

35549 rows × 9 columns


In [8]:
type(surveys_df)


Out[8]:
pandas.core.frame.DataFrame

In [9]:
surveys_df.dtypes


Out[9]:
record_id            int64
month                int64
day                  int64
year                 int64
plot_id              int64
species_id          object
sex                 object
hindfoot_length    float64
weight             float64
dtype: object

In [10]:
surveys_df.columns


Out[10]:
Index(['record_id', 'month', 'day', 'year', 'plot_id', 'species_id', 'sex',
       'hindfoot_length', 'weight'],
      dtype='object')

In [12]:
surveys_df.head()


Out[12]:
record_id month day year plot_id species_id sex hindfoot_length weight
0 1 7 16 1977 2 NL M 32.0 NaN
1 2 7 16 1977 3 NL M 33.0 NaN
2 3 7 16 1977 2 DM F 37.0 NaN
3 4 7 16 1977 7 DM M 36.0 NaN
4 5 7 16 1977 3 DM M 35.0 NaN

In [13]:
surveys_df.tail()


Out[13]:
record_id month day year plot_id species_id sex hindfoot_length weight
35544 35545 12 31 2002 15 AH NaN NaN NaN
35545 35546 12 31 2002 15 AH NaN NaN NaN
35546 35547 12 31 2002 10 RM F 15.0 14.0
35547 35548 12 31 2002 7 DO M 36.0 51.0
35548 35549 12 31 2002 5 NaN NaN NaN NaN

In [14]:
surveys_df.shape


Out[14]:
(35549, 9)

In [15]:
surveys_df['day']


Out[15]:
0        16
1        16
2        16
3        16
4        16
5        16
6        16
7        16
8        16
9        16
10       16
11       16
12       16
13       16
14       16
15       16
16       16
17       16
18       16
19       17
20       17
21       17
22       17
23       17
24       17
25       17
26       17
27       17
28       17
29       17
         ..
35519    31
35520    31
35521    31
35522    31
35523    31
35524    31
35525    31
35526    31
35527    31
35528    31
35529    31
35530    31
35531    31
35532    31
35533    31
35534    31
35535    31
35536    31
35537    31
35538    31
35539    31
35540    31
35541    31
35542    31
35543    31
35544    31
35545    31
35546    31
35547    31
35548    31
Name: day, dtype: int64

In [16]:
pd.unique(surveys_df['sex'])


Out[16]:
array(['M', 'F', nan], dtype=object)

In [18]:
pd.unique(surveys_df['species_id'])


Out[18]:
array(['NL', 'DM', 'PF', 'PE', 'DS', 'PP', 'SH', 'OT', 'DO', 'OX', 'SS',
       'OL', 'RM', nan, 'SA', 'PM', 'AH', 'DX', 'AB', 'CB', 'CM', 'CQ',
       'RF', 'PC', 'PG', 'PH', 'PU', 'CV', 'UR', 'UP', 'ZL', 'UL', 'CS',
       'SC', 'BA', 'SF', 'RO', 'AS', 'SO', 'PI', 'ST', 'CU', 'SU', 'RX',
       'PB', 'PL', 'PX', 'CT', 'US'], dtype=object)

In [19]:
pd.unique(surveys_df['plot_id'])


Out[19]:
array([ 2,  3,  7,  1,  6,  5,  8,  4, 11, 14, 15, 13,  9, 10, 17, 16, 20,
       23, 18, 21, 22, 19, 12, 24])

In [20]:
surveys_df['weight'].describe()


Out[20]:
count    32283.000000
mean        42.672428
std         36.631259
min          4.000000
25%         20.000000
50%         37.000000
75%         48.000000
max        280.000000
Name: weight, dtype: float64

In [21]:
surveys_df['weight'].count()


Out[21]:
32283

In [22]:
surveys_df['weight'].min()


Out[22]:
4.0

In [26]:
surveys_df['weight'].quantile(0.25)


Out[26]:
20.0

In [27]:
sorted = surveys_df.groupby('sex')

In [28]:
sorted.describe()


Out[28]:
day hindfoot_length month plot_id record_id weight year
sex
F count 15690.000000 14894.000000 15690.000000 15690.000000 15690.000000 15303.000000 15690.000000
mean 16.007138 28.836780 6.583047 11.440854 18036.412046 42.170555 1990.644997
std 8.271144 9.463789 3.367350 6.870684 10423.089000 36.847958 7.598725
min 1.000000 7.000000 1.000000 1.000000 3.000000 4.000000 1977.000000
25% 9.000000 21.000000 4.000000 5.000000 8917.500000 20.000000 1984.000000
50% 16.000000 27.000000 7.000000 12.000000 18075.500000 34.000000 1990.000000
75% 23.000000 36.000000 10.000000 17.000000 27250.000000 46.000000 1997.000000
max 31.000000 64.000000 12.000000 24.000000 35547.000000 274.000000 2002.000000
M count 17348.000000 16476.000000 17348.000000 17348.000000 17348.000000 16879.000000 17348.000000
mean 16.184286 29.709578 6.392668 11.098282 17754.835601 42.995379 1990.480401
std 8.199274 9.629246 3.420806 6.728713 10132.203323 36.184981 7.403655
min 1.000000 2.000000 1.000000 1.000000 1.000000 4.000000 1977.000000
25% 9.000000 21.000000 3.000000 5.000000 8969.750000 20.000000 1984.000000
50% 16.000000 34.000000 6.000000 11.000000 17727.500000 39.000000 1990.000000
75% 23.000000 36.000000 9.000000 17.000000 26454.250000 49.000000 1997.000000
max 31.000000 58.000000 12.000000 24.000000 35548.000000 280.000000 2002.000000

In [30]:
sorted['weight'].mean()


Out[30]:
sex
F    42.170555
M    42.995379
Name: weight, dtype: float64

In [31]:
sorted2 = surveys_df.groupby(['sex', 'plot_id'])

In [34]:
sorted2['weight'].mean()


Out[34]:
sex  plot_id
F    1          46.311138
     2          52.561845
     3          31.215349
     4          46.818824
     5          40.974806
     6          36.352288
     7          20.006135
     8          45.623011
     9          53.618469
     10         17.094203
     11         43.515075
     12         49.831731
     13         40.524590
     14         47.355491
     15         26.670236
     16         25.810427
     17         48.176201
     18         36.963514
     19         21.978599
     20         52.624406
     21         25.974832
     22         53.647059
     23         20.564417
     24         47.914405
M    1          55.950560
     2          51.391382
     3          34.163241
     4          48.888119
     5          40.708551
     6          36.867388
     7          21.194719
     8          49.641372
     9          49.519309
     10         19.971223
     11         43.366197
     12         48.909710
     13         40.097754
     14         45.159378
     15         27.523691
     16         23.811321
     17         47.558853
     18         43.546952
     19         20.306878
     20         44.197279
     21         22.772622
     22         54.572531
     23         18.941463
     24         39.321503
Name: weight, dtype: float64

In [38]:
sorted.count()


Out[38]:
record_id month day year plot_id species_id hindfoot_length weight
sex
F 15690 15690 15690 15690 15690 15690 14894 15303
M 17348 17348 17348 17348 17348 17348 16476 16879

In [39]:
species_counts = surveys_df.groupby('species_id').count()

In [40]:
species_counts


Out[40]:
record_id month day year plot_id sex hindfoot_length weight
species_id
AB 303 303 303 303 303 0 0 0
AH 437 437 437 437 437 1 2 0
AS 2 2 2 2 2 0 0 0
BA 46 46 46 46 46 45 45 45
CB 50 50 50 50 50 0 0 0
CM 13 13 13 13 13 0 0 0
CQ 16 16 16 16 16 0 0 0
CS 1 1 1 1 1 0 0 0
CT 1 1 1 1 1 0 0 0
CU 1 1 1 1 1 0 0 0
CV 1 1 1 1 1 0 0 0
DM 10596 10596 10596 10596 10596 10523 9972 10262
DO 3027 3027 3027 3027 3027 3015 2887 2904
DS 2504 2504 2504 2504 2504 2458 2132 2344
DX 40 40 40 40 40 0 0 0
NL 1252 1252 1252 1252 1252 1177 1074 1152
OL 1006 1006 1006 1006 1006 987 920 970
OT 2249 2249 2249 2249 2249 2213 2139 2160
OX 12 12 12 12 12 9 8 6
PB 2891 2891 2891 2891 2891 2862 2864 2810
PC 39 39 39 39 39 0 0 0
PE 1299 1299 1299 1299 1299 1277 1212 1260
PF 1597 1597 1597 1597 1597 1573 1493 1548
PG 8 8 8 8 8 0 0 0
PH 32 32 32 32 32 32 31 31
PI 9 9 9 9 9 8 9 8
PL 36 36 36 36 36 35 36 36
PM 899 899 899 899 899 883 847 876
PP 3123 3123 3123 3123 3123 3076 3027 3024
PU 5 5 5 5 5 0 0 0
PX 6 6 6 6 6 2 2 2
RF 75 75 75 75 75 75 73 75
RM 2609 2609 2609 2609 2609 2548 2442 2535
RO 8 8 8 8 8 8 8 8
RX 2 2 2 2 2 2 2 2
SA 75 75 75 75 75 0 0 0
SC 1 1 1 1 1 0 0 0
SF 43 43 43 43 43 40 41 41
SH 147 147 147 147 147 143 131 141
SO 43 43 43 43 43 43 41 41
SS 248 248 248 248 248 3 0 2
ST 1 1 1 1 1 0 0 0
SU 5 5 5 5 5 0 0 0
UL 4 4 4 4 4 0 0 0
UP 8 8 8 8 8 0 0 0
UR 10 10 10 10 10 0 0 0
US 4 4 4 4 4 0 0 0
ZL 2 2 2 2 2 0 0 0

In [41]:
surveys_df['weight']*5


Out[41]:
0          NaN
1          NaN
2          NaN
3          NaN
4          NaN
5          NaN
6          NaN
7          NaN
8          NaN
9          NaN
10         NaN
11         NaN
12         NaN
13         NaN
14         NaN
15         NaN
16         NaN
17         NaN
18         NaN
19         NaN
20         NaN
21         NaN
22         NaN
23         NaN
24         NaN
25         NaN
26         NaN
27         NaN
28         NaN
29         NaN
         ...  
35519    180.0
35520    240.0
35521    225.0
35522    220.0
35523    135.0
35524    130.0
35525    120.0
35526    215.0
35527      NaN
35528    125.0
35529      NaN
35530      NaN
35531    215.0
35532    240.0
35533    280.0
35534    265.0
35535    210.0
35536    230.0
35537    155.0
35538    340.0
35539    115.0
35540    155.0
35541    145.0
35542    170.0
35543      NaN
35544      NaN
35545      NaN
35546     70.0
35547    255.0
35548      NaN
Name: weight, dtype: float64

In [43]:
surveys_df['weight2'] = surveys_df['weight']*5

In [45]:
del surveys_df['weight2']

In [46]:
%matplotlib inline


/Users/lucymorris/anaconda/lib/python3.5/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
/Users/lucymorris/anaconda/lib/python3.5/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')

In [49]:
species_counts = surveys_df.groupby('species_id').count()
species_counts.plot(kind='bar')


Out[49]:
<matplotlib.axes._subplots.AxesSubplot at 0x115706978>

In [52]:
total_count = surveys_df['species_id'].groupby(surveys_df['plot_id']).nunique()

In [53]:
total_count


Out[53]:
plot_id
1     23
2     28
3     30
4     20
5     26
6     23
7     21
8     23
9     24
10    23
11    29
12    25
13    26
14    23
15    26
16    22
17    21
18    26
19    27
20    25
21    26
22    23
23    27
24    21
dtype: int64

In [54]:
total_count.plot(kind='bar')


Out[54]:
<matplotlib.axes._subplots.AxesSubplot at 0x113385a90>

In [2]:
surveys_df = pd.read_csv("surveys.csv")

In [3]:
surveys_df


Out[3]:
record_id month day year plot_id species_id sex hindfoot_length weight
0 1 7 16 1977 2 NL M 32.0 NaN
1 2 7 16 1977 3 NL M 33.0 NaN
2 3 7 16 1977 2 DM F 37.0 NaN
3 4 7 16 1977 7 DM M 36.0 NaN
4 5 7 16 1977 3 DM M 35.0 NaN
5 6 7 16 1977 1 PF M 14.0 NaN
6 7 7 16 1977 2 PE F NaN NaN
7 8 7 16 1977 1 DM M 37.0 NaN
8 9 7 16 1977 1 DM F 34.0 NaN
9 10 7 16 1977 6 PF F 20.0 NaN
10 11 7 16 1977 5 DS F 53.0 NaN
11 12 7 16 1977 7 DM M 38.0 NaN
12 13 7 16 1977 3 DM M 35.0 NaN
13 14 7 16 1977 8 DM NaN NaN NaN
14 15 7 16 1977 6 DM F 36.0 NaN
15 16 7 16 1977 4 DM F 36.0 NaN
16 17 7 16 1977 3 DS F 48.0 NaN
17 18 7 16 1977 2 PP M 22.0 NaN
18 19 7 16 1977 4 PF NaN NaN NaN
19 20 7 17 1977 11 DS F 48.0 NaN
20 21 7 17 1977 14 DM F 34.0 NaN
21 22 7 17 1977 15 NL F 31.0 NaN
22 23 7 17 1977 13 DM M 36.0 NaN
23 24 7 17 1977 13 SH M 21.0 NaN
24 25 7 17 1977 9 DM M 35.0 NaN
25 26 7 17 1977 15 DM M 31.0 NaN
26 27 7 17 1977 15 DM M 36.0 NaN
27 28 7 17 1977 11 DM M 38.0 NaN
28 29 7 17 1977 11 PP M NaN NaN
29 30 7 17 1977 10 DS F 52.0 NaN
... ... ... ... ... ... ... ... ... ...
35519 35520 12 31 2002 9 SF NaN 24.0 36.0
35520 35521 12 31 2002 9 DM M 37.0 48.0
35521 35522 12 31 2002 9 DM F 35.0 45.0
35522 35523 12 31 2002 9 DM F 36.0 44.0
35523 35524 12 31 2002 9 PB F 25.0 27.0
35524 35525 12 31 2002 9 OL M 21.0 26.0
35525 35526 12 31 2002 8 OT F 20.0 24.0
35526 35527 12 31 2002 13 DO F 33.0 43.0
35527 35528 12 31 2002 13 US NaN NaN NaN
35528 35529 12 31 2002 13 PB F 25.0 25.0
35529 35530 12 31 2002 13 OT F 20.0 NaN
35530 35531 12 31 2002 13 PB F 27.0 NaN
35531 35532 12 31 2002 14 DM F 34.0 43.0
35532 35533 12 31 2002 14 DM F 36.0 48.0
35533 35534 12 31 2002 14 DM M 37.0 56.0
35534 35535 12 31 2002 14 DM M 37.0 53.0
35535 35536 12 31 2002 14 DM F 35.0 42.0
35536 35537 12 31 2002 14 DM F 36.0 46.0
35537 35538 12 31 2002 15 PB F 26.0 31.0
35538 35539 12 31 2002 15 SF M 26.0 68.0
35539 35540 12 31 2002 15 PB F 26.0 23.0
35540 35541 12 31 2002 15 PB F 24.0 31.0
35541 35542 12 31 2002 15 PB F 26.0 29.0
35542 35543 12 31 2002 15 PB F 27.0 34.0
35543 35544 12 31 2002 15 US NaN NaN NaN
35544 35545 12 31 2002 15 AH NaN NaN NaN
35545 35546 12 31 2002 15 AH NaN NaN NaN
35546 35547 12 31 2002 10 RM F 15.0 14.0
35547 35548 12 31 2002 7 DO M 36.0 51.0
35548 35549 12 31 2002 5 NaN NaN NaN NaN

35549 rows × 9 columns


In [4]:
species_df = pd.read_csv("species.csv")

In [5]:
species_df


Out[5]:
species_id genus species taxa
0 AB Amphispiza bilineata Bird
1 AH Ammospermophilus harrisi Rodent
2 AS Ammodramus savannarum Bird
3 BA Baiomys taylori Rodent
4 CB Campylorhynchus brunneicapillus Bird
5 CM Calamospiza melanocorys Bird
6 CQ Callipepla squamata Bird
7 CS Crotalus scutalatus Reptile
8 CT Cnemidophorus tigris Reptile
9 CU Cnemidophorus uniparens Reptile
10 CV Crotalus viridis Reptile
11 DM Dipodomys merriami Rodent
12 DO Dipodomys ordii Rodent
13 DS Dipodomys spectabilis Rodent
14 DX Dipodomys sp. Rodent
15 EO Eumeces obsoletus Reptile
16 GS Gambelia silus Reptile
17 NL Neotoma albigula Rodent
18 NX Neotoma sp. Rodent
19 OL Onychomys leucogaster Rodent
20 OT Onychomys torridus Rodent
21 OX Onychomys sp. Rodent
22 PB Chaetodipus baileyi Rodent
23 PC Pipilo chlorurus Bird
24 PE Peromyscus eremicus Rodent
25 PF Perognathus flavus Rodent
26 PG Pooecetes gramineus Bird
27 PH Perognathus hispidus Rodent
28 PI Chaetodipus intermedius Rodent
29 PL Peromyscus leucopus Rodent
30 PM Peromyscus maniculatus Rodent
31 PP Chaetodipus penicillatus Rodent
32 PU Pipilo fuscus Bird
33 PX Chaetodipus sp. Rodent
34 RF Reithrodontomys fulvescens Rodent
35 RM Reithrodontomys megalotis Rodent
36 RO Reithrodontomys montanus Rodent
37 RX Reithrodontomys sp. Rodent
38 SA Sylvilagus audubonii Rabbit
39 SB Spizella breweri Bird
40 SC Sceloporus clarki Reptile
41 SF Sigmodon fulviventer Rodent
42 SH Sigmodon hispidus Rodent
43 SO Sigmodon ochrognathus Rodent
44 SS Spermophilus spilosoma Rodent
45 ST Spermophilus tereticaudus Rodent
46 SU Sceloporus undulatus Reptile
47 SX Sigmodon sp. Rodent
48 UL Lizard sp. Reptile
49 UP Pipilo sp. Bird
50 UR Rodent sp. Rodent
51 US Sparrow sp. Bird
52 ZL Zonotrichia leucophrys Bird
53 ZM Zenaida macroura Bird

In [6]:
surveySub = surveys_df.head(10)

In [7]:
surveySub


Out[7]:
record_id month day year plot_id species_id sex hindfoot_length weight
0 1 7 16 1977 2 NL M 32.0 NaN
1 2 7 16 1977 3 NL M 33.0 NaN
2 3 7 16 1977 2 DM F 37.0 NaN
3 4 7 16 1977 7 DM M 36.0 NaN
4 5 7 16 1977 3 DM M 35.0 NaN
5 6 7 16 1977 1 PF M 14.0 NaN
6 7 7 16 1977 2 PE F NaN NaN
7 8 7 16 1977 1 DM M 37.0 NaN
8 9 7 16 1977 1 DM F 34.0 NaN
9 10 7 16 1977 6 PF F 20.0 NaN

In [9]:
surveySubLast10 = surveys_df[-11:-1]

In [10]:
surveySubLast10


Out[10]:
record_id month day year plot_id species_id sex hindfoot_length weight
35538 35539 12 31 2002 15 SF M 26.0 68.0
35539 35540 12 31 2002 15 PB F 26.0 23.0
35540 35541 12 31 2002 15 PB F 24.0 31.0
35541 35542 12 31 2002 15 PB F 26.0 29.0
35542 35543 12 31 2002 15 PB F 27.0 34.0
35543 35544 12 31 2002 15 US NaN NaN NaN
35544 35545 12 31 2002 15 AH NaN NaN NaN
35545 35546 12 31 2002 15 AH NaN NaN NaN
35546 35547 12 31 2002 10 RM F 15.0 14.0
35547 35548 12 31 2002 7 DO M 36.0 51.0

In [14]:
surveySubLast10 = surveySubLast10.reset_index(drop=True)

In [17]:
vertical_stack = pd.concat([surveySub, surveySubLast10], axis = 0)
vertical_stack


Out[17]:
record_id month day year plot_id species_id sex hindfoot_length weight
0 1 7 16 1977 2 NL M 32.0 NaN
1 2 7 16 1977 3 NL M 33.0 NaN
2 3 7 16 1977 2 DM F 37.0 NaN
3 4 7 16 1977 7 DM M 36.0 NaN
4 5 7 16 1977 3 DM M 35.0 NaN
5 6 7 16 1977 1 PF M 14.0 NaN
6 7 7 16 1977 2 PE F NaN NaN
7 8 7 16 1977 1 DM M 37.0 NaN
8 9 7 16 1977 1 DM F 34.0 NaN
9 10 7 16 1977 6 PF F 20.0 NaN
0 35539 12 31 2002 15 SF M 26.0 68.0
1 35540 12 31 2002 15 PB F 26.0 23.0
2 35541 12 31 2002 15 PB F 24.0 31.0
3 35542 12 31 2002 15 PB F 26.0 29.0
4 35543 12 31 2002 15 PB F 27.0 34.0
5 35544 12 31 2002 15 US NaN NaN NaN
6 35545 12 31 2002 15 AH NaN NaN NaN
7 35546 12 31 2002 15 AH NaN NaN NaN
8 35547 12 31 2002 10 RM F 15.0 14.0
9 35548 12 31 2002 7 DO M 36.0 51.0

In [18]:
vertical_stack.to_csv('out.csv')

In [19]:
surveys_1980 = surveys_df[surveys_df.year == 1980]

In [20]:
surveys_1982 = surveys_df[surveys_df.year == 1982]

In [23]:
surveys_1980_1982 = pd.concat([surveys_1980, surveys_1982], axis = 0)
surveys_1980_1982 = surveys_1980_1982.reset_index(drop=True)
surveys_1980_1982


Out[23]:
record_id month day year plot_id species_id sex hindfoot_length weight
0 2271 1 15 1980 8 DO M 35.0 53.0
1 2272 1 15 1980 11 PF F 16.0 10.0
2 2273 1 15 1980 18 DM F 34.0 33.0
3 2274 1 15 1980 11 DM M 38.0 37.0
4 2275 1 15 1980 8 DO F 33.0 29.0
5 2276 1 15 1980 11 DS M 47.0 132.0
6 2277 1 15 1980 8 PF M 15.0 8.0
7 2278 1 15 1980 9 OT M 21.0 23.0
8 2279 1 15 1980 11 DM F 36.0 36.0
9 2280 1 15 1980 21 OT F 20.0 21.0
10 2281 1 15 1980 11 OL M 20.0 29.0
11 2282 1 15 1980 17 DM F 36.0 49.0
12 2283 1 15 1980 11 OL M 21.0 23.0
13 2284 1 15 1980 9 OL M 20.0 32.0
14 2285 1 15 1980 10 OL F 20.0 24.0
15 2286 1 15 1980 11 DM M 38.0 47.0
16 2287 1 15 1980 21 OT M 19.0 22.0
17 2288 1 15 1980 19 RM F 17.0 12.0
18 2289 1 15 1980 20 DS F 52.0 150.0
19 2290 1 15 1980 11 DM M 37.0 49.0
20 2291 1 15 1980 9 OL F 21.0 34.0
21 2292 1 15 1980 12 DM F 35.0 40.0
22 2293 1 15 1980 18 DS F 51.0 132.0
23 2294 1 15 1980 22 DM F 34.0 25.0
24 2295 1 15 1980 9 OL M 21.0 36.0
25 2296 1 15 1980 8 DO F 34.0 50.0
26 2297 1 15 1980 11 DM M 37.0 45.0
27 2298 1 15 1980 17 DM M 35.0 47.0
28 2299 1 15 1980 9 DM M 38.0 46.0
29 2300 1 15 1980 18 DM F 32.0 29.0
... ... ... ... ... ... ... ... ... ...
3363 7106 11 22 1982 9 DS F 50.0 132.0
3364 7107 11 22 1982 1 DO M 36.0 50.0
3365 7108 11 22 1982 12 PF F 16.0 7.0
3366 7109 11 22 1982 9 DS M 49.0 130.0
3367 7110 11 22 1982 11 PF M 16.0 6.0
3368 7111 11 22 1982 4 PF M 15.0 6.0
3369 7112 11 22 1982 1 DO F 34.0 49.0
3370 7113 11 22 1982 4 DS F 52.0 119.0
3371 7114 11 22 1982 11 DS F 51.0 111.0
3372 7115 11 22 1982 1 OL M 19.0 26.0
3373 7116 11 22 1982 2 DO F 35.0 45.0
3374 7117 11 22 1982 4 DM F 33.0 45.0
3375 7118 11 22 1982 1 OL M 21.0 39.0
3376 7119 11 22 1982 2 DO F 36.0 43.0
3377 7120 11 22 1982 5 DM M 37.0 46.0
3378 7121 11 22 1982 8 DS F 50.0 106.0
3379 7122 11 22 1982 8 PF M 15.0 6.0
3380 7123 11 22 1982 1 DM F 33.0 35.0
3381 7124 11 22 1982 3 PF M 15.0 6.0
3382 7125 11 22 1982 4 DS F 48.0 122.0
3383 7126 11 22 1982 5 DM M 35.0 41.0
3384 7127 11 22 1982 5 OL M 22.0 43.0
3385 7128 11 22 1982 9 DM F 33.0 36.0
3386 7129 11 22 1982 12 DS F 48.0 102.0
3387 7130 11 22 1982 1 DM M 37.0 48.0
3388 7131 11 22 1982 6 OT F 19.0 27.0
3389 7132 11 22 1982 11 DM M 36.0 45.0
3390 7133 11 22 1982 1 DM F 34.0 35.0
3391 7134 11 22 1982 6 OT M 21.0 24.0
3392 7135 11 22 1982 12 DM M 37.0 41.0

3393 rows × 9 columns


In [22]:
surveys_1980_1982.to_csv('year.csv')

In [25]:
surveySub = surveys_df.head(10)

In [26]:
surveySub.columns


Out[26]:
Index(['record_id', 'month', 'day', 'year', 'plot_id', 'species_id', 'sex',
       'hindfoot_length', 'weight'],
      dtype='object')

In [27]:
species_df.columns


Out[27]:
Index(['species_id', 'genus', 'species', 'taxa'], dtype='object')

In [35]:
merged_inner = pd.merge(left=species_df, left_on = 'species_id', right=surveys_df, right_on = 'species_id')
merged_inner


Out[35]:
species_id genus species taxa record_id month day year plot_id sex hindfoot_length weight
0 AB Amphispiza bilineata Bird 3126 7 21 1980 8 NaN NaN NaN
1 AB Amphispiza bilineata Bird 3146 7 21 1980 24 NaN NaN NaN
2 AB Amphispiza bilineata Bird 3152 7 21 1980 19 NaN NaN NaN
3 AB Amphispiza bilineata Bird 3153 7 21 1980 22 NaN NaN NaN
4 AB Amphispiza bilineata Bird 3586 12 15 1980 16 NaN NaN NaN
5 AB Amphispiza bilineata Bird 3702 1 11 1981 22 NaN NaN NaN
6 AB Amphispiza bilineata Bird 3705 1 11 1981 22 NaN NaN NaN
7 AB Amphispiza bilineata Bird 3706 1 11 1981 20 NaN NaN NaN
8 AB Amphispiza bilineata Bird 3775 1 12 1981 6 NaN NaN NaN
9 AB Amphispiza bilineata Bird 4499 6 4 1981 23 NaN NaN NaN
10 AB Amphispiza bilineata Bird 4543 6 4 1981 23 NaN NaN NaN
11 AB Amphispiza bilineata Bird 4606 7 7 1981 19 NaN NaN NaN
12 AB Amphispiza bilineata Bird 5203 1 24 1982 12 NaN NaN NaN
13 AB Amphispiza bilineata Bird 5204 1 24 1982 12 NaN NaN NaN
14 AB Amphispiza bilineata Bird 5220 1 24 1982 20 NaN NaN NaN
15 AB Amphispiza bilineata Bird 5222 1 24 1982 24 NaN NaN NaN
16 AB Amphispiza bilineata Bird 5229 1 24 1982 12 NaN NaN NaN
17 AB Amphispiza bilineata Bird 5244 1 24 1982 19 NaN NaN NaN
18 AB Amphispiza bilineata Bird 5256 1 24 1982 12 NaN NaN NaN
19 AB Amphispiza bilineata Bird 5267 1 24 1982 7 NaN NaN NaN
20 AB Amphispiza bilineata Bird 5302 1 25 1982 2 NaN NaN NaN
21 AB Amphispiza bilineata Bird 5310 1 25 1982 2 NaN NaN NaN
22 AB Amphispiza bilineata Bird 5313 1 25 1982 13 NaN NaN NaN
23 AB Amphispiza bilineata Bird 5387 2 23 1982 13 NaN NaN NaN
24 AB Amphispiza bilineata Bird 5488 2 24 1982 2 NaN NaN NaN
25 AB Amphispiza bilineata Bird 5496 2 24 1982 2 NaN NaN NaN
26 AB Amphispiza bilineata Bird 5535 3 29 1982 18 NaN NaN NaN
27 AB Amphispiza bilineata Bird 5643 3 30 1982 9 NaN NaN NaN
28 AB Amphispiza bilineata Bird 5687 4 28 1982 19 NaN NaN NaN
29 AB Amphispiza bilineata Bird 5741 4 28 1982 20 NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ...
34756 SU Sceloporus undulatus Reptile 22251 4 29 1995 20 NaN NaN NaN
34757 SU Sceloporus undulatus Reptile 22264 4 30 1995 11 NaN NaN NaN
34758 UL Lizard sp. Reptile 14466 5 14 1988 17 NaN NaN NaN
34759 UL Lizard sp. Reptile 19952 5 2 1992 2 NaN NaN NaN
34760 UL Lizard sp. Reptile 21594 5 19 1994 13 NaN NaN NaN
34761 UL Lizard sp. Reptile 21601 5 19 1994 8 NaN NaN NaN
34762 UP Pipilo sp. Bird 13688 11 21 1987 12 NaN NaN NaN
34763 UP Pipilo sp. Bird 13828 11 22 1987 2 NaN NaN NaN
34764 UP Pipilo sp. Bird 14075 2 21 1988 23 NaN NaN NaN
34765 UP Pipilo sp. Bird 14085 2 21 1988 23 NaN NaN NaN
34766 UP Pipilo sp. Bird 14368 4 17 1988 22 NaN NaN NaN
34767 UP Pipilo sp. Bird 15332 1 10 1989 1 NaN NaN NaN
34768 UP Pipilo sp. Bird 15504 2 4 1989 1 NaN NaN NaN
34769 UP Pipilo sp. Bird 17654 7 21 1990 1 NaN NaN NaN
34770 UR Rodent sp. Rodent 13564 10 25 1987 8 NaN NaN NaN
34771 UR Rodent sp. Rodent 13573 10 25 1987 11 NaN NaN NaN
34772 UR Rodent sp. Rodent 13644 10 25 1987 2 NaN NaN NaN
34773 UR Rodent sp. Rodent 13947 1 24 1988 11 NaN NaN NaN
34774 UR Rodent sp. Rodent 18610 4 21 1991 10 NaN NaN NaN
34775 UR Rodent sp. Rodent 19597 1 9 1992 11 NaN NaN NaN
34776 UR Rodent sp. Rodent 21556 5 18 1994 18 NaN NaN NaN
34777 UR Rodent sp. Rodent 32227 6 25 2001 7 NaN NaN NaN
34778 UR Rodent sp. Rodent 32377 8 25 2001 1 NaN NaN NaN
34779 UR Rodent sp. Rodent 34575 7 14 2002 6 NaN NaN NaN
34780 US Sparrow sp. Bird 35512 12 31 2002 11 NaN NaN NaN
34781 US Sparrow sp. Bird 35513 12 31 2002 11 NaN NaN NaN
34782 US Sparrow sp. Bird 35528 12 31 2002 13 NaN NaN NaN
34783 US Sparrow sp. Bird 35544 12 31 2002 15 NaN NaN NaN
34784 ZL Zonotrichia leucophrys Bird 14250 3 20 1988 18 NaN NaN NaN
34785 ZL Zonotrichia leucophrys Bird 14351 4 17 1988 23 NaN NaN NaN

34786 rows × 12 columns


In [33]:
merge_left = pd.merge(left=surveySub, right = species_df, how = 'right', left_on='species_id', right_on = 'species_id')

In [32]:
merge_left


Out[32]:
record_id month day year plot_id species_id sex hindfoot_length weight genus species taxa
0 1 7 16 1977 2 NL M 32.0 NaN Neotoma albigula Rodent
1 2 7 16 1977 3 NL M 33.0 NaN Neotoma albigula Rodent
2 3 7 16 1977 2 DM F 37.0 NaN Dipodomys merriami Rodent
3 4 7 16 1977 7 DM M 36.0 NaN Dipodomys merriami Rodent
4 5 7 16 1977 3 DM M 35.0 NaN Dipodomys merriami Rodent
5 6 7 16 1977 1 PF M 14.0 NaN Perognathus flavus Rodent
6 7 7 16 1977 2 PE F NaN NaN Peromyscus eremicus Rodent
7 8 7 16 1977 1 DM M 37.0 NaN Dipodomys merriami Rodent
8 9 7 16 1977 1 DM F 34.0 NaN Dipodomys merriami Rodent
9 10 7 16 1977 6 PF F 20.0 NaN Perognathus flavus Rodent

In [44]:
merged_inner.groupby('species_id')['genus'].count().plot(kind='bar')


Out[44]:
<matplotlib.axes._subplots.AxesSubplot at 0x1175b3470>

%matplotlib inline


In [43]:
%matplotlib inline

In [ ]: