The data is located on Kaggle.
The information given below is the one presented on the same web page.
The Meteoritical Society collects data on meteorites that have fallen to Earth from outer space. This dataset includes the location, mass, composition, and fall year for over 45,000 meteorites that have struck our planet.
Notes on missing or incorrect data points:
a few entries here contain date information that was incorrectly parsed into the NASA database. As a spot check: any date that is before 860 CE or after 2016 are incorrect; these should actually be BCE years. There may be other errors and we are looking for a way to identify them.
a few entries have latitude and longitude of 0N/0E (off the western coast of Africa, where it would be quite difficult to recover meteorites). Many of these were actually discovered in Antarctica, but exact coordinates were not given. 0N/0E locations should probably be treated as NA.
The starter kernel for this dataset has a quick way to filter out these observations using dplyr in R, provided here for convenience:
meteorites.geo %
filter(year>=860 & year% # filter out weird years
filter(reclong=-180 & (reclat!=0 | reclong!=0)) # filter out weird locations
Note that a few column names start with "rec" (e.g., recclass, reclat, reclon). These are the recommended values of these variables, according to The Meteoritical Society. In some cases, there were historical reclassification of a meteorite, or small changes in the data on where it was recovered; this dataset gives the currently recommended values.
The dataset contains the following variables:
name: the name of the meteorite (typically a location, often modified with a number, year, composition, etc)
id: a unique identifier for the meteorite
nametype: one of:
-- valid: a typical meteorite
-- relict: a meteorite that has been highly degraded by weather on Earth
recclass: the class of the meteorite; one of a large number of classes based on physical, chemical, and other characteristics (see the Wikipedia article on meteorite classification for a primer)
mass: the mass of the meteorite, in grams
fall: whether the meteorite was seen falling, or was discovered after its impact; one of:
-- Fell: the meteorite's fall was observed
-- Found: the meteorite's fall was not observed
year: the year the meteorite fell, or the year it was found (depending on the value of fell)
reclat: the latitude of the meteorite's landing
reclong: the longitude of the meteorite's landing
GeoLocation: a parentheses-enclose, comma-separated tuple that combines reclat and reclong
Here are a couple of thoughts on questions to ask and ways to look at this data:
how does the geographical distribution of observed falls differ from that of found meteorites? -- this would be great overlaid on a cartogram or alongside a high-resolution population density map
are there any geographical differences or differences over time in the class of meteorites that have fallen to Earth?
This dataset was downloaded from NASA's Data Portal, and is based on The Meteoritical Society's Meteoritical Bulletin Database (this latter database provides additional information such as meteorite images, links to primary sources, etc.).
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
# -- libreria para usar mapas
# https://matplotlib.org/basemap/api/basemap_api.html
os.environ["PROJ_LIB"] = "C:\\Utilities\\Python\\Anaconda\\Library\\share"; #fixr
from mpl_toolkits.basemap import Basemap
import seaborn as sns
data_met = pd.read_csv('../data-used/meteorite-landings.csv')
data_met
name | id | nametype | recclass | mass | fall | year | reclat | reclong | GeoLocation | |
---|---|---|---|---|---|---|---|---|---|---|
0 | Aachen | 1 | Valid | L5 | 21.0 | Fell | 1880.0 | 50.77500 | 6.08333 | (50.775000, 6.083330) |
1 | Aarhus | 2 | Valid | H6 | 720.0 | Fell | 1951.0 | 56.18333 | 10.23333 | (56.183330, 10.233330) |
2 | Abee | 6 | Valid | EH4 | 107000.0 | Fell | 1952.0 | 54.21667 | -113.00000 | (54.216670, -113.000000) |
3 | Acapulco | 10 | Valid | Acapulcoite | 1914.0 | Fell | 1976.0 | 16.88333 | -99.90000 | (16.883330, -99.900000) |
4 | Achiras | 370 | Valid | L6 | 780.0 | Fell | 1902.0 | -33.16667 | -64.95000 | (-33.166670, -64.950000) |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
45711 | Zillah 002 | 31356 | Valid | Eucrite | 172.0 | Found | 1990.0 | 29.03700 | 17.01850 | (29.037000, 17.018500) |
45712 | Zinder | 30409 | Valid | Pallasite, ungrouped | 46.0 | Found | 1999.0 | 13.78333 | 8.96667 | (13.783330, 8.966670) |
45713 | Zlin | 30410 | Valid | H4 | 3.3 | Found | 1939.0 | 49.25000 | 17.66667 | (49.250000, 17.666670) |
45714 | Zubkovsky | 31357 | Valid | L6 | 2167.0 | Found | 2003.0 | 49.78917 | 41.50460 | (49.789170, 41.504600) |
45715 | Zulu Queen | 30414 | Valid | L3.7 | 200.0 | Found | 1976.0 | 33.98333 | -115.68333 | (33.983330, -115.683330) |
45716 rows × 10 columns
data_met.iloc[45682]
name Yorktown (Texas) id 30371 nametype Valid recclass H5 mass 3500.0 fall Found year 1957.0 reclat 28.95 reclong -97.40278 GeoLocation (28.950000, -97.402780) Name: 45682, dtype: object
De acuerdo a la información dada arriba, es necesario filtrar la información por fechas. Datos antes de 860 y después del 2016 y los datos donde tanto la latitud como la longitud sean cero son datos incorrectos. También eliminar filas que tengan algun valor NaN
data_met = data_met[(data_met['year'] <= 2016) & (data_met['year'] >= 860)]
data_met = data_met[(data_met['reclong'] != 0) & (data_met['reclat'] != 0)]
data_met = data_met.reset_index(drop=True)
data_met = data_met.dropna()
data_met.sort_values(by = ['year'])
name | id | nametype | recclass | mass | fall | year | reclat | reclong | GeoLocation | |
---|---|---|---|---|---|---|---|---|---|---|
700 | Nogata | 16988 | Valid | L6 | 472.0 | Fell | 860.0 | 33.72500 | 130.75000 | (33.725000, 130.750000) |
277 | Elbogen | 7823 | Valid | Iron, IID | 107000.0 | Fell | 1399.0 | 50.18333 | 12.73333 | (50.183330, 12.733330) |
849 | Rivolta de Bassi | 22614 | Valid | Stone-uncl | 103.3 | Fell | 1490.0 | 45.48333 | 9.51667 | (45.483330, 9.516670) |
282 | Ensisheim | 10039 | Valid | LL6 | 127000.0 | Fell | 1491.0 | 47.86667 | 7.35000 | (47.866670, 7.350000) |
5277 | Campo del Cielo | 5247 | Valid | Iron, IAB-MG | 50000000.0 | Found | 1575.0 | -27.46667 | -60.58333 | (-27.466670, -60.583330) |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
962 | Sutter's Mill | 55529 | Valid | C | 992.5 | Fell | 2012.0 | 38.80389 | -120.90806 | (38.803890, -120.908060) |
26401 | Österplana 049 | 56148 | Relict | Relict OC | 0.0 | Found | 2012.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
32929 | Stewart Valley 012 | 55528 | Valid | H6 | 130.0 | Found | 2012.0 | 36.23500 | -116.18358 | (36.235000, -116.183580) |
31609 | Rosamond | 57434 | Valid | LL3 | 11.1 | Found | 2012.0 | 34.82793 | -118.14640 | (34.827930, -118.146400) |
193 | Chelyabinsk | 57165 | Valid | LL5 | 100000.0 | Fell | 2013.0 | 54.81667 | 61.11667 | (54.816670, 61.116670) |
31705 rows × 10 columns
data_met.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 31705 entries, 0 to 39014 Data columns (total 10 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 name 31705 non-null object 1 id 31705 non-null int64 2 nametype 31705 non-null object 3 recclass 31705 non-null object 4 mass 31705 non-null float64 5 fall 31705 non-null object 6 year 31705 non-null float64 7 reclat 31705 non-null float64 8 reclong 31705 non-null float64 9 GeoLocation 31705 non-null object dtypes: float64(4), int64(1), object(5) memory usage: 2.7+ MB
counts_nametype = np.unique(data_met['nametype'], return_counts=True)
print('Meteoritos intactos ({}): {}'.format(counts_nametype[0][1],counts_nametype[1][1] ))
print('Meteoritos degradados por el clima ({}): {}'.format(counts_nametype[0][0],counts_nametype[1][0] ))
Meteoritos intactos (Valid): 31684 Meteoritos degradados por el clima (Relict): 21
labels = counts_nametype[0][1], counts_nametype[0][0]
sizes = [counts_nametype[1][1], counts_nametype[1][0]]
explode = (0, 0) # only "explode" the 2nd slice (i.e. 'Hogs')
fig, ax = plt.subplots(figsize=[10,6])
cmap = plt.get_cmap('Pastel2_r',2)
colors = cmap(np.arange(2))
ax.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',colors=colors,
shadow=False, startangle=40)
ax.set_title('Meteoritos intáctos vs degradados por el clima')
ax.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()
data_met[data_met['nametype'] == 'Relict']
name | id | nametype | recclass | mass | fall | year | reclat | reclong | GeoLocation | |
---|---|---|---|---|---|---|---|---|---|---|
6754 | David Glacier 92308 | 6614 | Relict | Chondrite-fusion crust | 1.700 | Found | 1992.0 | -75.31667 | 162.00000 | (-75.316670, 162.000000) |
11851 | Gove | 52859 | Relict | Relict iron | 0.000 | Found | 1979.0 | -12.26333 | 136.83833 | (-12.263330, 136.838330) |
19565 | Lewis Cliff 87241 | 13702 | Relict | Chondrite-fusion crust | 0.500 | Found | 1987.0 | -84.34563 | 161.31058 | (-84.345630, 161.310580) |
21984 | Meteorite Hills 001139 | 45809 | Relict | Fusion crust | 0.013 | Found | 2000.0 | -79.68333 | 159.75000 | (-79.683330, 159.750000) |
26400 | Österplana 048 | 56147 | Relict | Relict OC | 0.000 | Found | 2004.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26401 | Österplana 049 | 56148 | Relict | Relict OC | 0.000 | Found | 2012.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26402 | Österplana 050 | 56149 | Relict | Relict OC | 0.000 | Found | 2003.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26403 | Österplana 051 | 56150 | Relict | Relict OC | 0.000 | Found | 2006.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26404 | Österplana 052 | 56151 | Relict | Relict OC | 0.000 | Found | 2006.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26405 | Österplana 053 | 56152 | Relict | Relict OC | 0.000 | Found | 2002.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26406 | Österplana 054 | 56153 | Relict | Relict OC | 0.000 | Found | 2005.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26407 | Österplana 055 | 56154 | Relict | Relict OC | 0.000 | Found | 2008.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26408 | Österplana 056 | 56155 | Relict | Relict OC | 0.000 | Found | 2008.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26409 | Österplana 057 | 56156 | Relict | Relict OC | 0.000 | Found | 2009.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26410 | Österplana 058 | 56157 | Relict | Relict OC | 0.000 | Found | 2009.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26411 | Österplana 059 | 56158 | Relict | Relict OC | 0.000 | Found | 2009.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26412 | Österplana 060 | 56159 | Relict | Relict OC | 0.000 | Found | 2009.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26413 | Österplana 061 | 56160 | Relict | Relict OC | 0.000 | Found | 2009.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26414 | Österplana 062 | 56161 | Relict | Relict OC | 0.000 | Found | 2010.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26415 | Österplana 063 | 56162 | Relict | Relict OC | 0.000 | Found | 2010.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26416 | Österplana 064 | 56163 | Relict | Relict OC | 0.000 | Found | 2011.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
counts_fall = np.unique(data_met['fall'], return_counts=True)
print('Meteoritos encontrados en tierra ({}): {}'.format(counts_fall[0][1],counts_fall[1][1]))
print('Meteoritos vistos caer ({}): {}'.format(counts_fall[0][0],counts_fall[1][0]))
Meteoritos encontrados en tierra (Found): 30642 Meteoritos vistos caer (Fell): 1063
labels = counts_fall[0][1], counts_fall[0][0]
sizes = [counts_fall[1][1], counts_fall[1][0]]
explode = (0, 0.2) # only "explode" the 2nd slice (i.e. 'Hogs')
fig, ax = plt.subplots(figsize=[10,6])
cmap = plt.get_cmap('Pastel1_r',2)
colors = cmap(np.arange(2))
ax.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',colors=colors,
shadow=False, startangle=120)
ax.set_title('Meteoritos vistos caer vs encontrados en tierra')
ax.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()
HN = len(data_met[data_met['reclat'] > 0])
print('Meteoritos en el hemisferio norte: {}'.format(HN))
HS = len(data_met[data_met['reclat'] <= 0])
print('Meteoritos en el hemisferio sur: {}'.format(HS))
Meteoritos en el hemisferio norte: 8319 Meteoritos en el hemisferio sur: 23386
HE = len(data_met[data_met['reclong'] > 0])
print('Meteoritos en el este: {}'.format(HE))
HO = len(data_met[data_met['reclong'] <= 0])
print('Meteoritos en el oeste: {}'.format(HO))
Meteoritos en el este: 27702 Meteoritos en el oeste: 4003
# -- definir la cantidad de meteoritos por cuadrante
NE = data_met[(data_met['reclat'] > 0) & (data_met['reclong'] > 0)]
NO = data_met[(data_met['reclat'] > 0) & (data_met['reclong'] <= 0)]
SE = data_met[(data_met['reclat'] <= 0) & (data_met['reclong'] > 0)]
SO = data_met[(data_met['reclat'] <= 0) & (data_met['reclong'] <= 0)]
# -- hacer un array 2x2 con los datos
con_mat = np.array([[len(NE),len(NO)],[len(SE),len(SO)]])
# -- normalizarlos el Norte es 100% y el sur es 100%
con_mat_norm = np.around(con_mat.astype('float') / con_mat.sum(axis=1)[:, np.newaxis], decimals=3)
# -- normalizar en totalidad, los cuatro cuadrantes son el 100%
con_mat_normfull = np.around(con_mat.astype('float') / con_mat.sum(), decimals=3)
# -- crear un dataframe para ver que este bien ordenado
con_mat_df = pd.DataFrame(con_mat_norm,
columns = ['E','O'],
index = ['N','S'])
# -- crear el texto para poner dentro de cada cuadrado del cuadrante
# -- el numero total y el porcentaje
labels = [f"{v1}\n{v2*100}%\n{v3*100}%" for v1, v2, v3 in
zip(con_mat.flatten(),con_mat_norm.flatten(),con_mat_normfull.flatten())]
labels = np.asarray(labels).reshape(2,2)
# -- definir los labels para eje x y eje y
categoriesy = ["Norte", "Sur"]
categoriesx = ["Este", "Oeste"]
fig, ax = plt.subplots(figsize=(4, 5))
# -- usar seaborn para crear el plot
ax = sns.heatmap(con_mat, annot=labels,cbar=False,fmt='',xticklabels=categoriesx,yticklabels=categoriesy,cmap='Pastel1_r')#plt.cm.Blues)
plt.tight_layout()
ax.set_ylabel('Ecuador'r'$\rightarrow$' ,rotation=360, labelpad=25, fontsize=15)
ax.set_xlabel(r'$\uparrow$''\n Greenwich ',rotation=360, fontsize=15)
ax.yaxis.set_label_coords(-0.21, 0.48)
ax.set_title('Distribución de los Meteoritos al dividir la Tierra en cuatro cuadrantes', fontsize = 15)
plt.show()
La gran mayoría de meteoritos se encuentra en el hemisferio este y en el hemisferio sur. Al comparar a ojo con los mapamundis mostrados mas abajo, pareciera que hubiera mas meteoritos en el hemisferio norte.
El $68$$\%$ de los meteoritos ha caido en el hemisferio sur este.
print(np.unique(NE['nametype'], return_counts=True))
print(np.unique(NO['nametype'], return_counts=True))
print(np.unique(SE['nametype'], return_counts=True))
print(np.unique(SO['nametype'], return_counts=True))
print(np.unique(NE['fall'], return_counts=True))
print(np.unique(NO['fall'], return_counts=True))
print(np.unique(SE['fall'], return_counts=True))
print(np.unique(SO['fall'], return_counts=True))
(array(['Relict', 'Valid'], dtype=object), array([ 17, 6112])) (array(['Valid'], dtype=object), array([2190])) (array(['Relict', 'Valid'], dtype=object), array([ 4, 21569])) (array(['Valid'], dtype=object), array([1813])) (array(['Fell', 'Found'], dtype=object), array([ 676, 5453])) (array(['Fell', 'Found'], dtype=object), array([ 260, 1930])) (array(['Fell', 'Found'], dtype=object), array([ 81, 21492])) (array(['Fell', 'Found'], dtype=object), array([ 46, 1767]))
Relict: meteoritos degrados por el ambiente
Valid: meteoritos intactos
# -- hacer un array 2x2 con los datos
con_mat = np.array([[np.unique(NE['nametype'], return_counts=True)[1][0],0],
[np.unique(SE['nametype'], return_counts=True)[1][0],0]])
con_mat1 = np.array([[np.unique(NE['nametype'], return_counts=True)[1][1],np.unique(NO['nametype'], return_counts=True)[1][0]],
[np.unique(SE['nametype'], return_counts=True)[1][1],np.unique(SO['nametype'], return_counts=True)[1][0]]])
# -- normalizar en totalidad, los cuatro cuadrantes son el 100%
con_mat_norm = np.round(con_mat.astype('float') / con_mat.sum(), 2)
con_mat_norm1 = np.round(con_mat1.astype('float') / con_mat1.sum(),5)
# -- crear un dataframe para ver que este bien ordenado
con_mat_df = pd.DataFrame(con_mat_norm,
columns = ['E','O'],
index = ['N','S'])
# -- crear el texto para poner dentro de cada cuadrado del cuadrante
# -- el numero total y el porcentaje
labels = [f"R :{v1}\nR :{v2*100}%\nV :{v3}\nV :{v4*100}%" for v1, v2, v3, v4 in
zip(con_mat.flatten(),con_mat_norm.flatten(),con_mat1.flatten(),con_mat_norm1.flatten())]
labels = np.asarray(labels).reshape(2,2)
# -- definir los labels para eje x y eje y
categoriesy = ["Norte", "Sur"]
categoriesx = ["Este", "Oeste"]
fig, ax = plt.subplots(figsize=(4, 5))
# -- usar seaborn para crear el plot
ax = sns.heatmap(con_mat, annot=labels,cbar=False,fmt='',xticklabels=categoriesx,yticklabels=categoriesy,cmap='Pastel1_r')#plt.cm.Blues)
plt.tight_layout()
ax.set_ylabel('Ecuador'r'$\rightarrow$' ,rotation=360, labelpad=25, fontsize=15)
ax.set_xlabel(r'$\uparrow$''\n Greenwich ',rotation=360, fontsize=15)
ax.yaxis.set_label_coords(-0.21, 0.48)
ax.set_title('Distribución de los Meteoritos al dividir la Tierra en cuatro cuadrantes,\nde acuerdo al nametype R: degradado, V: intacto', fontsize = 15)
plt.show()
No hay meteoritos degradados por el clima en el hemisferio oeste. El $81\%$ de los meteoritos clasificados como degradados se encuentran en el hemisferio norte.
El $68\%$ de los meteoritos intactos se encuentran en el hemisferio sur, coincidiendo con el conteo total de meteoritos.
Fell: visto caer
Found: encontrado en tierra
con_mat2 = np.array([[np.unique(NE['fall'], return_counts=True)[1][0],np.unique(NO['fall'], return_counts=True)[1][0]],
[np.unique(SE['fall'], return_counts=True)[1][0],np.unique(SO['fall'], return_counts=True)[1][0]]])
con_mat12 = np.array([[np.unique(NE['fall'], return_counts=True)[1][1],np.unique(NO['fall'], return_counts=True)[1][1]],
[np.unique(SE['fall'], return_counts=True)[1][1],np.unique(SO['fall'], return_counts=True)[1][1]]])
# -- normalizar en totalidad, los cuatro cuadrantes son el 100%
con_mat_norm2 = np.round(con_mat2.astype('float') / con_mat2.sum(), 4)
con_mat_norm12 = np.round(con_mat12.astype('float') / con_mat12.sum(),7)
labels1 = [f"Fe :{v1}\nFe :{v2*100}%\nFo :{v3}\nFo :{v4*100}%" for v1, v2, v3, v4 in
zip(con_mat2.flatten(),con_mat_norm2.flatten(),con_mat12.flatten(),con_mat_norm12.flatten())]
labels1 = np.asarray(labels1).reshape(2,2)
fig, ax = plt.subplots(figsize=(4, 5))
# -- usar seaborn para crear el plot
ax = sns.heatmap(con_mat, annot=labels1,cbar=False,fmt='',xticklabels=categoriesx,yticklabels=categoriesy,cmap='Pastel1_r')#plt.cm.Blues)
plt.tight_layout()
ax.set_ylabel('Ecuador'r'$\rightarrow$' ,rotation=360, labelpad=25, fontsize=15)
ax.set_xlabel(r'$\uparrow$''\n Greenwich ',rotation=360, fontsize=15)
ax.yaxis.set_label_coords(-0.21, 0.48)
ax.set_title('Distribución de los Meteoritos al dividir la Tierra en cuatro cuadrantes,\nde acuerdo al fall Fe: caido, Fo: encontrado', fontsize = 15)
plt.show()
El $64\%$ de los meteoritos vistos caer se encuentran en el hemisferio norte-este.
El $70\%$ de los meteoritos encontrados en tierra se encuentran en el hemisferio sur-este.
data_met[data_met['mass'] == data_met['mass'].max()]
name | id | nametype | recclass | mass | fall | year | reclat | reclong | GeoLocation | |
---|---|---|---|---|---|---|---|---|---|---|
15582 | Hoba | 11890 | Valid | Iron, IVB | 60000000.0 | Found | 1920.0 | -19.58333 | 17.91667 | (-19.583330, 17.916670) |
data_met[data_met['mass'] == data_met['mass'].min()]
name | id | nametype | recclass | mass | fall | year | reclat | reclong | GeoLocation | |
---|---|---|---|---|---|---|---|---|---|---|
11851 | Gove | 52859 | Relict | Relict iron | 0.0 | Found | 1979.0 | -12.26333 | 136.83833 | (-12.263330, 136.838330) |
26400 | Österplana 048 | 56147 | Relict | Relict OC | 0.0 | Found | 2004.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26401 | Österplana 049 | 56148 | Relict | Relict OC | 0.0 | Found | 2012.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26402 | Österplana 050 | 56149 | Relict | Relict OC | 0.0 | Found | 2003.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26403 | Österplana 051 | 56150 | Relict | Relict OC | 0.0 | Found | 2006.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26404 | Österplana 052 | 56151 | Relict | Relict OC | 0.0 | Found | 2006.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26405 | Österplana 053 | 56152 | Relict | Relict OC | 0.0 | Found | 2002.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26406 | Österplana 054 | 56153 | Relict | Relict OC | 0.0 | Found | 2005.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26407 | Österplana 055 | 56154 | Relict | Relict OC | 0.0 | Found | 2008.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26408 | Österplana 056 | 56155 | Relict | Relict OC | 0.0 | Found | 2008.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26409 | Österplana 057 | 56156 | Relict | Relict OC | 0.0 | Found | 2009.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26410 | Österplana 058 | 56157 | Relict | Relict OC | 0.0 | Found | 2009.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26411 | Österplana 059 | 56158 | Relict | Relict OC | 0.0 | Found | 2009.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26412 | Österplana 060 | 56159 | Relict | Relict OC | 0.0 | Found | 2009.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26413 | Österplana 061 | 56160 | Relict | Relict OC | 0.0 | Found | 2009.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26414 | Österplana 062 | 56161 | Relict | Relict OC | 0.0 | Found | 2010.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26415 | Österplana 063 | 56162 | Relict | Relict OC | 0.0 | Found | 2010.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
26416 | Österplana 064 | 56163 | Relict | Relict OC | 0.0 | Found | 2011.0 | 58.58333 | 13.43333 | (58.583330, 13.433330) |
# -- crear 100 grupos de años y hacer el conteo de cada grupo
data_test= data_met.copy()
data_test['strikebins'] = pd.cut(data_test['year'], bins=100)
data_test_count = data_test.groupby(['strikebins']).size().reset_index(name='counts')
data_test_count = data_test_count[data_test_count['counts']!=0]
#data_test_count
# -- graficar cada grupo por años
ax = data_test_count.plot.bar(x='strikebins', y='counts', figsize=[15,8],color='#165427')
ax.tick_params(axis='x', labelrotation=-90)
ax.set_xlabel('Años', fontsize=15)
ax.set_ylabel('Meteoritos detectados', fontsize=15)
ax.set_title('Conteo de meteoritos por años', fontsize=15)
ax.grid('on')
#plt.savefig('anos.png')
plt.show()
La mayoria de meteoritos se detectaron a apartir de los años 60, seguramente por el avance de la ciencia y los equipos. También la población no científica empezó a tener acceso a equipos como telescopios y binoculares.
Para graficar las coordenadas en un papa mundo se usa la libreria from mpl_toolkits.basemap import Basemap
. Para instalarla fue necesario crear un environment a través de conda e 'importar' ese env a jupyter. No fue posible hacerlo por medio de pip
.
Graficados encima de un mapa mundi
fig = plt.figure(figsize=(15, 8), edgecolor='w')
# --Equidistant Cylindrical Projection (cyl):
# -- The simplest projection, just displays the world in latitude/longitude coordinates.
mapa = Basemap(projection='cyl')
mapa.drawmapboundary(fill_color='w')
mapa.drawcoastlines(linewidth=0.5)
xv, yv = mapa(data_met[data_met['nametype'] == 'Valid']['reclong'],
data_met[data_met['nametype'] == 'Valid']['reclat'])
xr, yr = mapa(data_met[data_met['nametype'] == 'Relict']['reclong'],
data_met[data_met['nametype'] == 'Relict']['reclat'])
mapa.scatter(xv, yv, marker='.',alpha=0.25,c='green',edgecolor='None', label = 'Intactos')
mapa.scatter(xr, yr, marker='.',c='red',s=50,edgecolor='None', label = 'Degradados')
plt.title('Meteoritos intactos y degradados por el clima', fontsize = 15)
plt.legend()
<matplotlib.legend.Legend at 0x7f2fece05ed0>
fig = plt.figure(figsize=(15, 8), edgecolor='w')
mapa = Basemap(projection='cyl')
mapa.drawmapboundary(fill_color='w')
mapa.drawcoastlines(linewidth=0.5)
xv, yv = mapa(data_met[data_met['fall'] == 'Fell']['reclong'],data_met[data_met['fall'] == 'Fell']['reclat'])
xr, yr = mapa(data_met[data_met['fall'] == 'Found']['reclong'],data_met[data_met['fall'] == 'Found']['reclat'])
mapa.scatter(xv, yv, marker='.',alpha=0.25,c='green',edgecolor='None', label = 'Vistos caer')
mapa.scatter(xr, yr, marker='.',alpha=0.25,c='red',edgecolor='None', label = 'Encontrados')
plt.title('Meteoritos vistos caer y encontrados en tierra', fontsize = 15)
plt.legend()
<matplotlib.legend.Legend at 0x7f2fecc81ed0>
Por el mapamundi, se ve que en continente Europeo y el Asiático hay mayor cantidad de meteoritos vistos caer que encontrados ya en tierra, a diferencia del Norte de América. Veamos!!
NA = data_met[(data_met['reclat'] >= 14) & (data_met['reclat'] <= 68) &
(data_met['reclong'] >= -150) & (data_met['reclong'] <= -65)]
print(len(NA))
print(np.unique(NA['fall'], return_counts=True))
1801 (array(['Fell', 'Found'], dtype=object), array([ 179, 1622]))
fig = plt.figure(figsize=(15, 8), edgecolor='w')
mapa = Basemap(projection='cyl',llcrnrlat=14.0,urcrnrlat=68.0,llcrnrlon=-150,urcrnrlon=-65.0,resolution='i')
mapa.drawmapboundary(fill_color='w')
mapa.drawcoastlines(linewidth=0.6)
mapa.drawcountries()
xv, yv = mapa(data_met['reclong'],data_met['reclat'])
mapa.scatter(xv, yv, marker='.',c='#a10b38',edgecolor='None', label = 'Meteoritos')
plt.legend(loc='lower right')
plt.title('Norte América', fontsize = 15)
plt.show()
Delimitar Europa y mirar cuantos meteoritos hay en total y hacer el conteo por los vistos caer y los encontrados.
UE = data_met[(data_met['reclat'] >= 33) & (data_met['reclat'] <= 68) &
(data_met['reclong'] >= -15) & (data_met['reclong'] <= 30)]
print(len(UE))
print(np.unique(UE['fall'], return_counts=True))
419 (array(['Fell', 'Found'], dtype=object), array([302, 117]))
fig = plt.figure(figsize=(15, 8), edgecolor='w')
mapa = Basemap(projection='cyl',llcrnrlat=33.0,urcrnrlat=68.0,llcrnrlon=-15,urcrnrlon=30,resolution='i')
mapa.drawmapboundary(fill_color='w')
mapa.drawcoastlines(linewidth=0.6)
mapa.drawcountries()
xv, yv = mapa(data_met['reclong'],data_met['reclat'])
mapa.scatter(xv, yv, marker='.',c='#a10b38',edgecolor='None', label = 'Meteoritos')
#mapa.scatter(xr, yr, marker='.',c='orange',edgecolor='None', label = 'Encontrados')
plt.legend(loc='lower right')
plt.title('Europa', fontsize = 15)
plt.show()
A pesar de que en Norte América hay 1801 meteoritos y en Europa (en la porción que seleccione) sólo hay 419. En Europa hay 302 meteoritos vistos caer, en cambio en Norte América sólo hay 179. Además, de la porción tomada para Europa, son más los meteoritos vistos caer que los encontrados.
fig = plt.figure(figsize=(15, 8), edgecolor='w')
# -- resolution: i (intermediate)
# -- llcrnrlat y similares son los límites de latitud y longitud
mapa = Basemap(projection='cyl',llcrnrlat=30.0,urcrnrlat=46.0,llcrnrlon=128,urcrnrlon=150.0,resolution='i')
mapa.drawmapboundary(fill_color='w')
mapa.drawcoastlines(linewidth=0.6)
mapa.drawcountries()
xv, yv = mapa(data_met[data_met['nametype'] == 'Valid']['reclong'],
data_met[data_met['nametype'] == 'Valid']['reclat'])
xr, yr = mapa(data_met[data_met['nametype'] == 'Relict']['reclong'],
data_met[data_met['nametype'] == 'Relict']['reclat'])
mapa.scatter(xv, yv, marker='.',c='green',edgecolor='None', label = 'Intactos')
mapa.scatter(xr, yr, marker='.',c='red',s=50,edgecolor='None', label = 'Degradados')
plt.legend(loc='lower right')
plt.title('Japón', fontsize = 15)
plt.show()
fig = plt.figure(figsize=(15, 8), edgecolor='w')
mapa = Basemap(projection='cyl',llcrnrlat=23.0,urcrnrlat=56.0,llcrnrlon=-126,urcrnrlon=-65.0,resolution='i')
mapa.drawmapboundary(fill_color='w')
mapa.drawcoastlines(linewidth=0.6)
mapa.drawcountries()
# xv, yv = mapa(data_met[data_met['nametype'] == 'Valid']['reclong'],
# data_met[data_met['nametype'] == 'Valid']['reclat'])
# xr, yr = mapa(data_met[data_met['nametype'] == 'Relict']['reclong'],
# data_met[data_met['nametype'] == 'Relict']['reclat'])
xv, yv = mapa(data_met[data_met['fall'] == 'Fell']['reclong'],data_met[data_met['fall'] == 'Fell']['reclat'])
xr, yr = mapa(data_met[data_met['fall'] == 'Found']['reclong'],data_met[data_met['fall'] == 'Found']['reclat'])
mapa.scatter(xv, yv, marker='.',c='green',edgecolor='None', label = 'Vistos caer')
mapa.scatter(xr, yr, marker='.',c='orange',edgecolor='None', label = 'Encontrados')
plt.legend(loc='lower right')
plt.title('Estados Unidos', fontsize = 15)
plt.show()
fig = plt.figure(figsize=(15, 8), edgecolor='w')
mapa = Basemap(projection='cyl',llcrnrlat=-6.0,urcrnrlat=13.0,llcrnrlon=-80,urcrnrlon=-65.0,resolution='i')
mapa.drawmapboundary(fill_color='w')
mapa.drawcoastlines(linewidth=0.6)
mapa.drawcountries()
xv, yv = mapa(data_met[data_met['fall'] == 'Fell']['reclong'],data_met[data_met['fall'] == 'Fell']['reclat'])
xr, yr = mapa(data_met[data_met['fall'] == 'Found']['reclong'],data_met[data_met['fall'] == 'Found']['reclat'])
mapa.scatter(xv, yv, marker='.',c='green',edgecolor='None', label = 'Vistos caer')
mapa.scatter(xr, yr, marker='.',c='orange',edgecolor='None', label = 'Encontrados')
plt.legend(loc='lower right')
plt.title('Colombia', fontsize = 15)
plt.show()
# -- veamos los datos de los que estan en Colombia
loc_col = data_met[(data_met['reclat'] >= -6) &(data_met['reclat'] <= 13)&
(data_met['reclong'] >= -80)&(data_met['reclong'] <= -65)]
loc_col
name | id | nametype | recclass | mass | fall | year | reclat | reclong | GeoLocation | |
---|---|---|---|---|---|---|---|---|---|---|
159 | Cali | 45976 | Valid | H/L4 | 478.0 | Fell | 2007.0 | 3.40500 | -76.51000 | (3.405000, -76.510000) |
227 | Daule | 51559 | Valid | L5 | 6580.0 | Fell | 2008.0 | -1.87089 | -79.95756 | (-1.870890, -79.957560) |
1017 | Ucera | 24097 | Valid | H5 | 4590.0 | Fell | 1970.0 | 11.05000 | -69.85000 | (11.050000, -69.850000) |
1038 | Valera | 24149 | Valid | L5 | 50000.0 | Fell | 1972.0 | 9.31667 | -70.62833 | (9.316670, -70.628330) |
32086 | Santa Rosa | 23167 | Valid | Iron, IC | 825000.0 | Found | 1810.0 | 5.91667 | -73.00000 | (5.916670, -73.000000) |
Por el mapa mostrado arriba, los dos meteoritos mostrados son el 159 con nombre "Cali" y el 32086 con nombre "Santa Rosa". Una parte del meteorito encontrado en Santa Rosa esta actualmente en el Museo Nacional de Colombia. :O