R, 7777 75 bytes
Edit: -2 bytes thanks to Giuseppe
f <-function(c)sum(unlistc==unlist(gregexprstrsplit(c,capture.output(dump("f","")),f=T""))>0)/7775
Uses R dump(,"") function to output own source code*, capturing output (normally to the console) using capture.output(). Then finds the indicesnumber of all matching characters with gregexpr(,fixed=TRUE) ('fixed' option [abbreviated in golf codematches to 'f'] prevents characters such as '(' from being interpreted as part of a regular-expression), and report the sum() of matching positionsfunction argument >0c (non-matching positions are output as -1), divided by the source code length (7775 bytes).
*Note that the TIO interface gives slightly differently-formatted output from the dump() function to running directly in R, so counts of whitespace characters are inaccurate in TIO (but correct in R).
R (without reading own source code), 106 bytes
'->p;sum(gregexpr(scan(,""),sQuote(p),f=T)[[1]]>0)/53'->p;sum(gregexpr(scan(,""),sQuote(p),f=T)[[1]]>0)/53
SameSame Similar approach asto above, but including quoted string instead of reading the source code itself.