Last active
April 26, 2020 01:28
-
-
Save JupyterJones/c2fa42e8f78b943b64f7d7a4e4721c58 to your computer and use it in GitHub Desktop.
Draw-Covid-19-plot - state by state from current data Using https://github.com/CSSEGISandData/COVID-19 data
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import random | |
from random import randint | |
import time | |
import markovify | |
import os | |
import sys | |
import sys | |
sys.path.insert(1, "/home/jack/hidden") | |
import Key | |
import twython | |
from twython import Twython | |
from PIL import Image, ImageChops, ImageDraw, ImageFont, ImageFilter | |
import warnings | |
warnings.filterwarnings("ignore") | |
from mpl_toolkits.basemap import Basemap | |
import matplotlib.pyplot as plt | |
from matplotlib.pyplot import text | |
from matplotlib import pyplot as plt | |
import numpy as np | |
from matplotlib.font_manager import FontProperties | |
""" | |
When I tried to draw counties, I got error: basemap 'utf-8' codec can't decode byte 0xf1 in position | |
Answered on https://stackoverflow.com/questions/45660904/matplotlib-basemap-drawcounties-having-issues | |
Budi said, for me, i change return v.decode(encoding, encodingErrors) to return v.decode('latin-1') and it's works,, – Budi Mulyo May 27 '19 at 8:12 | |
My file looked different than you described: so I opened /miniconda3/lib/python3.7/site-packages/shapefile.py and replaced all instances of 'utf-8' with 'latin-1' Itt works fine now. | |
Thank you very much. – JackNorthrup 3 mins ago | |
""" | |
def RndState(): | |
TX=["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"] | |
x=randint(1,49) | |
return TX[x] | |
LASTFILE="csse_covid_19_data/csse_covid_19_daily_reports/04-22-2020.csv" | |
#LASTFILE="csse_covid_19_data/csse_covid_19_daily_reports/03-30-2020.csv" | |
DataIn = open(LASTFILE).readlines() | |
LAT=[] | |
LONG=[] | |
STATES=[] | |
cases=[] | |
deaths =[] | |
longitude = "" | |
search = RndState() | |
for line in DataIn: | |
line=line.replace("\n","") | |
line = line.lstrip(",") | |
line = line.split(",") | |
if search in line[2] and "-" in (line[6]): | |
#print(line[2],line[1],line[3],line[4],line[5],line[6],line[7],line[8],line[9],line[10]) | |
STATES.append(text) | |
LAT.append(line[5]) | |
LONG.append(line[6]) | |
cases.append(line[7]) | |
deaths.append(line[8]) | |
longitude = longitude+line[6]+"," | |
print(len(STATES)) | |
LT = np.array(LAT,dtype=np.float) | |
LG = np.array(LONG,dtype=np.float) | |
fig = plt.figure(num=None, figsize=(10,8), dpi=80, facecolor='salmon') | |
urcrnrlat=max(LT)+.5 | |
llcrnrlat=min(LT)-.5 | |
urcrnrlon=max(LG)+.8 | |
llcrnrlon=min(LG)-.5 | |
lat_0 = (urcrnrlat+llcrnrlat)/2 | |
lon_0 =(urcrnrlon+llcrnrlon)/2 | |
# make up some data for scatter plot | |
lats = LT | |
lons = LG | |
fig = plt.gcf() | |
fig.set_size_inches(8, 6.5) | |
m = Basemap(llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat, | |
resolution='i', projection='tmerc', lat_0 = lat_0, lon_0 = lon_0) | |
m.readshapefile(r'/home/jack/Desktop/state-data/state_bounds/state_bounds', 'Neighborhoods') | |
m.drawmapboundary(fill_color='aqua') | |
m.fillcontinents(color='#ddaa66',lake_color='aqua') | |
m.drawcoastlines() | |
m.drawrivers() | |
#m.drawcounties(linewidth=0.1, linestyle='solid', color='k', antialiased=1, facecolor='none', ax=None, zorder=None, drawbounds=False) | |
m.drawcounties(zorder=20) | |
S=1 | |
Size=[] | |
for x in cases: | |
S=1+(float(x)*.5) | |
Size.append(int(S)) | |
#print(int(S)) | |
s = np.array(Size) | |
Sd=0 | |
Sized=[] | |
for xd in deaths: | |
Sd=0+(float(xd)) | |
Sized.append(int(Sd)) | |
#print(int(S)) | |
sd = np.array(Sized) | |
#print(Sized) | |
plt.text(max(LG-1.2),max(LT), search, color='white', fontsize=24) | |
x, y = m(lons, lats) # transform coordinates | |
plt.scatter(x, y, s=s, color="black", zorder=3) | |
plt.scatter(x, y, s=sd, color="red", zorder=6) | |
#plt.text(urcrnrlon,urcrnrlat, search, color='white', fontsize=24) | |
plt.savefig("BaseMap/"+search+"Counties__.png", dpi=120, facecolor='salmon', edgecolor='b', | |
orientation='portrait', papertype=None, format=None, | |
transparent=False, bbox_inches="tight", pad_inches=0.2, | |
frameon=None, metadata=None) | |
plt.show() | |
filename0 = "BaseMap/"+search+"Counties__.png" | |
def draw_blurred_back(img, position, text, font, col, halo_col): | |
halo = Image.new('RGBA', img.size, (0, 0, 0, 0)) | |
ImageDraw.Draw(halo).text(position, text, font = font, fill = halo_col) | |
blurred_halo = halo.filter(ImageFilter.BLUR) | |
ImageDraw.Draw(blurred_halo).text(position, text, font = font, fill = col) | |
return Image.composite(img, blurred_halo, ImageChops.invert(blurred_halo)) | |
if __name__ == '__main__': | |
basewidth = 720 | |
inp = Image.open(filename0) | |
wpercent = (basewidth / float(inp.size[0])) | |
hsize = int((float(inp.size[1]) * float(wpercent))) | |
inp = inp.resize((basewidth, hsize), Image.ANTIALIAS) | |
#img.save(resized_image.jpg') | |
#inp = inp.resize((640,640), Image.ANTIALIAS) | |
font = ImageFont.truetype("/home/jack/fonts/Exo-Black.ttf", 30) | |
text_title = (255, 255,230) # bright green | |
blur_title = (0, 0, 0) # black | |
i2 = draw_blurred_back(inp, (15, 4), "Plotting COVID-19 Data", font, text_title, blur_title) | |
font0 = ImageFont.truetype("/home/jack/fonts/Exo-Black.ttf", 20) | |
font1 = ImageFont.truetype("/home/jack/fonts/Exo-Black.ttf", 14) | |
i2 = draw_blurred_back(i2, (15, 40), "Python Basemap "+search, font0, text_title, blur_title) | |
TXT="https://gist.github.com/JupyterJones/c2fa42e8f78b943b64f7d7a4e4721c58" | |
draw = ImageDraw.Draw(i2) | |
draw.text((15, 65), TXT, font = font1, align ="left",fill="black") | |
#i2 = draw(i2, (15, 65),TXT, font1) | |
#txt = Image.new('RGBA', i.size, (255,255,255,0)) | |
# get a font | |
fnt = ImageFont.truetype("/home/jack/fonts/Exo-Black.ttf", 20) | |
# get a drawing context | |
signature_ = "@jacklnorthrup" | |
#get length in pixel of signature_ | |
sizeS,ln = fnt.getsize(signature_) | |
#add 15 pixels to right border | |
pt = sizeS+25 | |
width, height = inp.size | |
#marginx starting point of signature_ | |
marginx = pt | |
#bottom margin | |
marginy = 30 | |
x = width - marginx | |
y = height - marginy | |
text_sig = (255, 255,230) # bright green | |
blur_sig = (0, 0, 0) # black | |
txt=draw_blurred_back(i2,(x,y), signature_, fnt, text_sig, blur_sig) | |
out = Image.alpha_composite(i2, txt) | |
out.save("images/TEMP_POST.png") | |
PATH = "images/TEMP_POST.png" | |
CONSUMER_KEY = Key.twiter()[0] | |
CONSUMER_SECRET = Key.twiter()[1] | |
ACCESS_KEY = Key.twiter()[2] | |
ACCESS_SECRET = Key.twiter()[3] | |
twitter = Twython(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_SECRET) | |
STR = "#COVID-19 - #Python #"+search+" #Basemap Plot data using "+TXT+" #JupyterJones" | |
PATH = "images/TEMP_POST.png" | |
photo = open(PATH,'rb') | |
response = twitter.upload_media(media=photo) | |
twitter.update_status(status=STR, media_ids=[response['media_id']]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment