# Importez les modules nécessaires. import pandas as pd import geopandas as gp import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.axes_grid1 import make_axes_locatable from koala import Koala # Importez les bases de données. uvv = pd.read_excel("https://gis.cancer.gov/tools/uv-exposure/uv-county.xlsx") all_mela = pd.read_csv("melanome.csv", skiprows=2) white_mela = pd.read_csv("melanome_blanc.csv", skiprows=2) # La base geojson des états d'amérique usa = gp.read_file("usastates.geojson") # Modification de la base UV (DataFrame `uvv`) uv = pd.DataFrame({"state":(), "uvrate":()}) state = uvv.STATENAME.drop_duplicates() for i in state: x = uvv[uvv.STATENAME == i] m = x.mean() r = pd.DataFrame([(i, m[1])], columns=("state", "uvrate")) uv = uv.append(r) uv.index = range(49) # Modification des bases mélanome # Pour la base toutes ethnies cc = all_mela.drop([49, 50, 51, 52, 53]) cc = cc.sort_values(by=['United States']) cc.index = range(49) cc = cc.loc[:, ['United States', 'Crude Rate', 'Age-adjusted Rate']] cc.columns = ['state', 'Crude Rate', 'Age-adjusted Rate'] # Pour la base blancs non hispaniques ccw = white_mela.drop([49, 50, 51, 52]) ccw = ccw.sort_values(by=['United States']) ccw.index = range(49) ccw = ccw.loc[:, ['United States', 'Crude Rate', 'Age-adjusted Rate']] ccw.columns = ['state', 'Crude Rate W', 'Age-adjusted Rate W'] # Assemblage des 3 bases ccuv = cc.join(uv.set_index('state'), on='state') ccuv = ccuv.join(ccw.set_index('state'), on='state') # Modification du GeoDataFrame usa states x = list(usa.columns) x[6] = 'state' usa.columns = x x.remove('state') x.remove('geometry') usa = usa.drop(columns=x) ccuvusa = usa.join(ccuv.set_index('state'), on='state') ccuvusa = ccuvusa.drop([7, 17, 34]) ccuvusa = ccuvusa.drop([10, 14, 46]) ccuvusa.to_file("baseUV.geojson", driver='GeoJSON') # Affichage graphique. # Carte UV: plt.close() fig, ax = plt.subplots(1, 1) divider = make_axes_locatable(ax) cax = divider.append_axes("right", size="5%", pad=0.1) ccuvusa.plot(column='uvrate', ax=ax, legend=True, cax=cax) plt.title('UV Wh/m2', fontsize=6) plt.savefig("uvrate.png") # Carte mélanome toutes ethnies: plt.close() fig, ax = plt.subplots(1, 1) divider = make_axes_locatable(ax) cax = divider.append_axes("right", size="5%", pad=0.1) ccuvusa.plot(column='Crude Rate', ax=ax, legend=True, cax=cax) plt.title("Melanoma per 100000", fontsize=6) plt.savefig("cancer.png") # Carte mélanome blancs non hispaniques: plt.close() fig, ax = plt.subplots(1, 1) divider = make_axes_locatable(ax) cax = divider.append_axes("right", size="5%", pad=0.1) ccuvusa.plot(column='Crude Rate W', ax=ax, legend=True, cax=cax) plt.title("Melanoma per 100000 White", fontsize=5) plt.savefig("cancerW.png") # Régressions avec Koala plt.close() k = Koala(ccuvusa) rall = k.reg("uvrate", "Crude Rate") rall.fig.savefig("canceruvall.png") rwhite = k.reg("uvrate", "Crude Rate W") rwhite.fig.savefig("canceruvwhite.png") print("Corrélation pour toutes ethnies (linéaire, exponentielle, puissance):") print(rall.lin.r) print(rall.exp.r) print(rall.pwr.r) print("Corrélation pour blancs non hispaniques (linéaire, exponentielle, puissance):") print(rwhite.lin.r) print(rwhite.exp.r) print(rwhite.pwr.r) # Superposition des couches graphiques UV et mélanome white plt.close() fig, ax = plt.subplots(1, 1) divider = make_axes_locatable(ax) cax = divider.append_axes("right", size="5%", pad=0.1) base = ccuvusa.plot(column='Crude Rate W', ax=ax, legend=True, cax=cax) plt.title("Melanoma per 100000 White", fontsize=5) pt = ccuvusa pt['center'] = pt.geometry.centroid pt = pt.loc[:, ['center', 'uvrate']] pt.columns = ['geometry', 'uvrate'] ms = np.exp(pt.uvrate / 1000) / 2 pt.plot(ax=ax, color='red', marker='o', legend=True, markersize=ms) plt.savefig("uvcancerW.png")