display pdf in asp net c# : How to rotate one page in a pdf file SDK application project wpf azure asp.net UWP DataScienceBook1_110-part1682

> poisson.test(73,500)$conf.int
[1] 0.1144407 0.1835731
attr(,"conf.level")
[1] 0.95
The sum() function, above, calculates that only 73 out of Oprah’s 
sample of 500 tweets arrive in an interval of 31 or less. We use 31, 
the mean of the Lady Gaga sample, because we need to have a com-
mon basis of comparison. So for Oprah, the proportion of events 
that occur in the 31 second timeframe is, 73/500 = 0.146, or about 
14.6%. That’s a lot lower than the 66.6% of Lady Gaga tweets, for 
sure, but we need to look at the confidence interval around that 
value. So the poisson.test() function just above for Oprah reports 
that the 95% confidence interval runs from about 11.4% to 18.4%. 
Note that this confidence interval does not overlap at all with the 
confidence interval for Lady Gaga, so we have a very strong sense 
that these two rates are statistically quite distinctive - in other 
words, this is a difference that was not caused by the random influ-
ences that sampling always creates. We can make a bar graph to 
summarize these differences. We’ll use the barplot2() function, 
which is in a package called gplots(). If you created the EnsurePack-
age() function a couple of chapters ago, you can use that. Other-
wise make sure to load gplots manually:
> EnsurePackage("gplots")
> barplot2(c(0.666,0.146), + 

 
 
ci.l=c(0.596,0.114), + 

 
 
ci.u=c(0.742,0.184), +

 
 
plot.ci=TRUE, +

 
 
names.arg=c("Gaga","Oprah"))
This is not a particularly efficient way to use the barplots() func-
tion, because we are supplying our data by typing it in, using the 
c() function to create short vectors of values on the command line. 
On the first line,, we supply a list of the means from the two sam-
ples, expressed as proportions. On the next two lines we first pro-
vide the lower limits of the confidence intervals and then the up-
per limits. The plot.ci=TRUE parameter asks barplot2() to put confi-
dence interval whiskers on each bar. The final line provides labels 
to put underneath the bars. Here’s what we get:
100
How to rotate one page in a pdf file - rotate PDF page permanently in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Users to Change the Rotation Angle of PDF File Page Using C#
rotate pages in pdf and save; rotate individual pdf pages reader
How to rotate one page in a pdf file - VB.NET PDF Page Rotate Library: rotate PDF page permanently in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
PDF Document Page Rotation in Visual Basic .NET Class Application
pdf rotate one page; reverse page order pdf online
This is not an especially attractive bar plot, but it does represent 
the information we wanted to display accurately. And with the as-
sistance of this plot, it is easy to see both the substantial difference 
between the two bars and the fact that the confidence intervals do 
not overlap. 
For one final confirmation of our results, we can ask the 
poisson.text() function to evaluate our two samples together. This 
code provides the same information to poisson.test() as before, but 
now provides the event counts as short lists describing the two 
samples, with 333 events (under 31 seconds) for Lady Gaga and 73 
events for Oprah, in both cases out of 500 events:
> poisson.test(c(333,73),c(500,500))
 
Comparison of Poisson rates
data:  c(333, 73) time base: c(500, 500) 
count1 = 333, expected count1 = 203, p-value < 
2.2e-16
alternative hypothesis: true rate ratio is not 
equal to 1 
95 percent confidence interval:
3.531401 5.960511 
sample estimates:
rate ratio 
4.561644 
Let’s walk through this output line by line. Right after the com-
mand, we get a brief confirmation from the function that we’re 
comparing two event rates in this test rather than just evaluating a 
single rate: “Comparison of Poisson rates.” The next line confirms 
the data we provided. The next line, that begins with “count1 = 
333” confirms the basis of of the comparison and then shows a 
“pooled” count that is the weighted average of 333 and 73. The p-
value on that same line represents the position of a probability tail 
for “false positives.” Together with the information on the next 
line, “alternative hypothesis,” this constitutes what statisticians 
call a “null hypothesis significance test.” Although this is widely 
used in academic research, it contains less useful information than 
confidence intervals and we will ignore it for now.
101
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
C# developers can easily merge and append one PDF document to document imaging toolkit, also offers other advanced PDF document page processing and
pdf expert rotate page; pdf rotate page and save
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
This guiding page will help you merge two or more PDF documents into a single one in a Visual Basic .NET imaging application.
pdf rotate page; rotate individual pages in pdf reader
The next line, “95% confidence interval,” is a label for the most im-
portant information, which is on the line that follows. The values 
of 3.53 and 5.96 represent the upper and lower limits of the 95% 
confidence interval around the observed rate ratio of 4.56 (reported on 
the final line). So, for 95% of samples that we might draw from twit-
ter, the ratio of the Gaga/Oprah rates might be as low as 3.53 and 
as high as 5.96. So we can be pretty sure (95% confidence) that 
Lady Gaga gets tweets at least 3.5 times as fast as Oprah. Because 
the confidence interval does not include 1, which would be the 
same thing as saying that the two rates are identical, we can be 
pretty certain that the observed rate ratio of 4.56 is not a statistical 
fluke. 
For this comparison, we chose two topics that had very distinctive 
event rates. As the bar chart on the previous page attests, there was 
a substantial difference between the two samples in the rates of arri-
val of new tweets. The statistical test confirmed this for us, and al-
though the ability to calculate and visualize the confidence inter-
vals was helpful, we probably could have guessed that such a large 
difference over a total of 1000 tweets was not a result due to sam-
pling error. 
With other topics and other comparisons, however, the results will 
not be as clear cut. After completing the chapter challenge on the 
next page, we compared the “#obama” hashtag to the “#romney” 
hashtag. Over samples of 250 tweets each, Obama had 159 events 
at or under the mean, while Romney had only 128, for a ratio of 
1.24 in Obama’s favor. The confidence interval told a different 
story, however: the lower bound of the confidence interval was 
0.978, very close to, but slightly below one. This signifies that we 
can’t rule out the possibility that the two rates are, in fact, equal 
and that the slightly higher rate (1.24 to 1) that we observed for 
Obama in this one sample might have come about due to sampling 
error. When a confidence interval overlaps the point where we con-
sider something to be a “null result” (in this case a ratio of 1:1) we 
have to take seriously the possibility that peculiarities of the sam-
ple(s) we drew created the observed difference, and that a new set 
of samples might show the opposite of what we found this time.
Chapter Challenge
Write a function that takes two search strings as arguments and 
that returns the results of a Poisson rate ratio test on the arrival 
rates of tweets on the two topics. Your function should first run the 
necessary Twitter searches, then sort the tweets by ascending time 
of arrival and calculate the two vectors of time differentials. Use 
the mean of one of these vectors as the basis for comparison and 
for each vector, count how many events are at or below the mean. 
Use this information and the numbers of tweets requested to run 
the poisson.test() rate comparison. 
Sources
Barplots
http://addictedtor.free.fr/graphiques/RGraphGallery.php?graph
=54
http://biostat.mc.vanderbilt.edu/twiki/pub/Main/StatGraphCo
urse/graphscourse.pdf
http://rgm2.lab.nig.ac.jp/RGM2/func.php?rd_id=gplots:barplot2
102
VB.NET PDF File Split Library: Split, seperate PDF into multiple
document splitter control provides VB.NET developers an easy to use solution that they can split target multi-page PDF document file to one-page PDF files or
rotate pdf pages on ipad; rotate all pages in pdf and save
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
a solution to conveniently delete one page from your PDF document, you can use this VB.NET PDF Library, which supports a variety of PDF file editing features
how to rotate all pages in pdf; rotate one page in pdf reader
Poisson Distribution
http://books.google.com/books?id=ZKswvkqhygYC&printsec=fr
ontcover
http://www.khanacademy.org/math/probability/v/poisson-proc
ess-1
http://www.khanacademy.org/math/probability/v/poisson-proc
ess-2
http://stat.ethz.ch/R-manual/R-patched/library/stats/html/Poi
sson.html
http://stat.ethz.ch/R-manual/R-patched/library/stats/html/poi
sson.test.html
http://stats.stackexchange.com/questions/10926/how-to-calculat
e-confidence-interval-for-count-data-in-r
http://www.computing.dcu.ie/~mbezbradica/teaching/CA266/
CA266_13_Poisson_Distribution.pdf
R Functions Used in this Chapter
as.integer() - Coerces another data type to integer if possible
barplot2() - Creates a bar graph
c() - Concatenates items to make a list
diff() - Calculates time difference on neighboring cases
EnsurePackage() - Custom function, install() and require() package
for() - Creates a loop, repeating execution of code
hist() - Creates a frequency histogram
mean() - Calculates the arithmetic mean
order() - Provides a list of indices reflecting a new sort order
plot() - Begins an X-Y plot
points() - Adds points to a plot started with plot()
poisson.test() - Confidence intervals for poisson events or ratios
ppois() - Returns a cumulative probability for particular threshold
qpois() - Does the inverse of ppois(): Probability into threshold
rpois() - Generates random numbers fitting a Poisson distribution
sum() - Adds together a list of numbers
TweetFrame() - Custom procedure yielding a dataset of tweets
var() - Calculates variance of a list of numbers
103
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
Extract PDF Pages, Copy Pages from One PDF File and Paste into Others in C#.NET Program. Free PDF document processing SDK supports PDF page extraction, copying
how to rotate a page in pdf and save it; rotate pdf pages by degrees
VB.NET PDF Annotate Library: Draw, edit PDF annotation, markups in
A PDFDocument object contains all information about source PDF document file. PDFPage: As for one page of PDFDocument instance, RasterEdge VB.NET PDF annotator
pdf reverse page order preview; rotate one page in pdf
R Script - Create Vector of Probabilities From Delay Times
# Like ArrivalProbability, but works with unsorted list
# of delay times
DelayProbability<-function(delays, increment, max)
{
# Initialize an empty vector
plist <- NULL
# Probability is defined over the size of this sample
# of arrival times
delayLen <- length(delays)
# May not be necessary, but checks for input mistake
if (increment>max) {return(NULL)}
for (i in seq(increment, max, by=increment))
{
# logical test <=i provides list of TRUEs and FALSEs
# of length = timeLen, then sum() counts the TRUEs
plist<-c(plist,(sum(delays<=i)/delayLen))
}
return(plist)
}
104
C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
unnecessary page from target existing PDF document file. Using RasterEdge Visual C# .NET PDF page deletion component, developers can easily select one or more
save pdf rotated pages; pdf rotate single page and save
C# PDF File Compress Library: Compress reduce PDF size in C#.net
document of 1000+ pages to smaller one in a Easy to compress & decompress PDF document file Remove bookmarks, annotations, watermark, page labels and article
how to rotate pdf pages and save; rotate pdf pages
Prior chapters focused on statistical analysis of tweet arrival times and built on earlier knowledge of 
samples and distributions. This chapter switches gears to focus on manipulating so-called 
“unstructured” data, which in most cases means natural language texts. Tweets are again a useful 
source of data for this because tweets are mainly a short (140 characters or less) character strings.
CHAPTER 12
105
String Theory
Yoiks, that last chapter was very challenging! Lots of numbers, lots 
of statistical concepts, lots of graphs. Let’s take a break from all 
that (temporarily) and focus on a different kind of data for a while. 
If you think about the Internet, and specifically about the World 
Wide Web for a while, you will realize: 1) That there are zillions of 
web pages; and 2) That most of the information on those web 
pages is “unstructured,” in the sense that it does not consist of nice 
rows and columns of numeric data with measurements of time or 
other attributes. Instead, most of the data spread out across the 
Internet is text, digital photographs, or digital videos. These last 
two categories are interesting, but we will have to postpone consid-
eration of them while we consider the question of text.
Text is, of course, one of the most common forms of human commu-
nication, hence the label that researchers use sometimes: natural 
language. When we say natural language text we mean words cre-
ated by humans and for humans. With our cool computer technol-
ogy, we have collectively built lots of ways of dealing with natural 
language text. At the most basic level, we have a great system for 
representing individual characters of text inside of computers 
called “Unicode.” Among other things Unicode provides for a bi-
nary representation of characters in most of the world’s written lan-
guages, over 110,000 characters in all. Unicode supersedes ASCII 
(the American Standard Code for Information Interchange), which 
was one of the most popular standards (especially in the U.S.) for 
representing characters from the dawn of the computer age.
With the help of Unicode, most computer operating systems, and 
most application programs that handle text have a core strategy for 
representing text as lists of binary codes. Such lists are commonly 
referred to as “character strings” or in most cases just “strings.” 
One of the most striking things about strings from a computer pro-
gramming perspective is that they seem to be changing their 
length all the time. You can’t perform the usual mathematical op-
erations on character strings the way you can with numbers - no 
multiplication or division - but it is very common to “split” strings 
into smaller strings, and to “add” strings together to form longer 
strings. So while we may start out with, “the quick brown fox,” we 
may end up with “the quick brown” in one string and “fox” in an-
other, or we may end up with something longer like, “the quick 
brown fox jumped over the lazy dog.”
Fortunately, R, like most other data handling applications, has a 
wide range of functions for manipulating, keeping track of, search-
ing, and even analyzing string data. In this chapter, we will use our 
budding skills working with tweet data to learn the essentials of 
working with unstructured text data. The learning goal here is sim-
ply to become comfortable with examining and manipulating text 
data. We need these basic skills before we can tackle a more inter-
esting problem.
Let’s begin by loading a new package, called “stringr”. Although R 
has quite a few string functions in its core, they tend to be a bit dis-
organized. So Hadley Wickham, a professor of statistics at Rice Uni-
versity, created this “stringr” package to make a set of string ma-
nipulation functions a bit easier to use and more comprehensive. 
You can install() and library() this package using the point and 
click features of R-Studio (look in the lower right hand pane under 
the Packages tab), or if you created the EnsurePackage() function 
from a couple of chapters back, you can use that:
EnsurePackage("stringr")
106
Now we can grab a new set of tweets with our custom function 
TweetFrame() from a couple of chapters ago (if you need the code, 
look in the chapter entitled “Tweet, Tweet”; we’ve also pasted the 
enhanced function, that sorts the tweets into arrival order, into the 
end of this chapter):
tweetDF <- TweetFrame("#solar",100)
This command should return a data frame containing about 100 
tweets, mainly having to do with solar energy. You can choose any 
topic you like - all of the string techniques we examine in this chap-
ter are widely applicable to any text strings. We should get ori-
ented by taking a look at what we retrieved. The head() function 
can return the first entries in any vector or list:
We provide a screen shot from R-Studio here just to preserve the 
formatting of this output. In the left hand margin, the number 97 
represents R’s indexing of the original order in which the tweet 
was received. The tweets were re-sorted into arrival order by our 
enhanced TweetFrame() function (see the end of the chapter for 
code). So this is the first element in our dataframe, but internally R 
has numbered it as 97 out of the 100 tweets we obtained. On the 
first line of the output, R has place the label “text” and this is the 
field name of the column in the dataframe that contains the texts of 
the tweets. Other dataframe fields that we will not be using in this 
chapter include: “favorited,” “replyToSN,” and “truncated.” You 
may also recognize the field name “created” which contains the PO-
SIX format time and date stamp that we used in previous chapters. 
Generally speaking, R has placed the example data 
(from tweet 97) that goes with the field name just under-
neath it, but the text justification can be confusing, and 
it makes this display very hard to read. For example, 
there is a really long number that starts with “1908” 
that is the unique numeric identifier (a kind of serial 
number) for this tweet. The field name “id” appears 
just above it, but is right justified (probably because the 
field is a number). The most important fact for us to 
note is that if we want to work with the text string that 
is the tweet itself, we need to use the field name “text.” 
Let’s see if we can get a somewhat better view if we use 
the head() function just on the text field. This command 
should provide just the first 2 entries in the “text” col-
umn of the dataframe:
head(tweetDF$text,2)
[1] "If your energy needs increase after you in-
stall a #solar system can you upgrade? Our ex-
perts have the answer! http://t.co/ims8gDWW
"                           
107
[2] "#green New solar farms in West Tennessee 
signal growth: Two new solar energy farms produc-
ing electricity ... http://t.co/37PKAF3N
#solar"                     
A couple of things which will probably seem obvious, but are none-
theless important to point out: The [1] and [2] are not part of the 
tweet, but are the typical line numbers that R uses in its output. 
The actual tweet text is between the double quotes. You can see the 
hashtag “#solar” appears in both tweets, which makes sense be-
cause this was our search term. There is also a second hashtag in 
the first tweet “#green” so we will have to be on the lookout for 
multiple hashtags. There is also a “shortened” URL in each of these 
tweets. If a Twitter user pastes in the URL of a website to which 
they want to refer people, the Twitter software automatically short-
ens the URL to something that begins with “http://t.co
/” in order 
to save space in the tweet. 
An even better way to look at these data, including the text and the 
other fields is to use the data browser that is built into R-Studio. If 
you look in the upper right hand pane of R-Studio, and make sure 
that the Workspace tab is clicked, you should see a list of available 
dataframes, under the heading “Data.” One of these should be 
“tweetDF.” If you click on tweetDF, the data browser will open in 
the upper left hand pane of R-Studio and you should be able to see 
the first field or two of the first dozen rows. Here’s a screen shot:
This screen shot confirms what we observed in the command line 
output, but gives us a much more appealing and convenient way 
of looking through our data. Before we start to manipulate our 
strings, let’s attach() tweetDF so that we don’t have to keep using 
the $ notation to access the text field. And before that, let’s check 
what is already attached with the search() function:
> search()
[1] ".GlobalEnv"         "sortweetDF"         "package:gplots"    
[4] "package:KernSmooth" "package:grid"       "package:caTools"
We’ve truncated this list to save space, but you can see on the first 
line “sortweetDF” left over from our work in a previous chapter. 
The other entries are all function packages that we want to keep ac-
tive. So let’s detach() sortweetDF and attach tweetDF:
> detach(sortweetDF)
> attach(tweetDF)
These commands should yield no additional output. If 
you get any messages about “The following object(s) 
are masked from...” you should run search() again and 
look for other dataframes that should be detached be-
fore proceeding. Once you can run attach(“tweetDF”) 
without any warnings, you can be sure that the fields 
in this dataframe are ready to use without interference.
108
The first and most basic thing to do with strings is to see how long 
they are. The stringr package gives us the str_length() function to 
accomplish this task:
> str_length(text)
[1] 130 136 136 128  98  75 131 139  85 157 107  49  75 139 136 136
[17] 136  72  73 136 157 123 160 142 142 122 122 122 122 134  82  87
[33]  89 118  94  74 103  91 136 136 151 136 139 135  70 122 122 136
[49] 123 111  83 136 137  85 154 114 117  98 125 138 107  92 140 119
[65]  92 125  84  81 107 107  73  73 138  63 137 139 131 136 120 124
[81] 124 114  78 118 138 138 116 112 101  94 153  79  79 125 125 102
[97] 102 139 138 153
There are all of the string lengths of the texts, reported to the com-
mand line. It is interesting to find that there are a few of them (like 
the very last one) that are longer than 140 characters:
> tail(text,1)
[1] "RT @SolarFred: Hey, #solar & wind people. 
Tell @SpeakerBoehner and @Reuters that YOU have a 
green job and proud to be providing energy Inde-
pendence to US"
As you can see, the tail() command works like the head() com-
mand except from the bottom up rather than the top down. So we 
have learned that under certain circumstances Twitter apparently 
does allow tweets longer than 140 characters. Perhaps the initial 
phrase “RT @SolarFred” does not count against the total. By the 
way “RT” stands for “retweet” and it indicates when the receiver 
of a tweet has passed along the same message to his or her follow-
ers.
We can glue the string lengths onto the respective rows in the data-
frame by creating a new field/column:
tweetDF$textlen <- str_length(text)
After running this line of text, you should use the data browser in 
R-studio to confirm that the tweetDF now has a new column of 
data labeled “textlen”. You will find the new column all the way on 
the rightmost side of the dataframe structure. One peculiarity of 
the way R treats attached data is that you will not be able to access 
the new field without the $ notation unless you detach() and then 
again attach() the data frame. One advantage of grafting this new 
field onto our existing dataframe is that we can use it to probe the 
dataframe structure:
> detach(tweetDF)
> attach(tweetDF)
> tweetDF[textlen>140, "text"]
[1] "RT @andyschonberger: Exciting (and tempting) 
to see #EVs all over the #GLS12 show. Combine EVs 
w #solar generation and we have a winner! 
http://t.co/NVsfq4G3
"
We’ve truncated the output to save space, but in the data we are us-
ing here, there were nine tweets with lengths greater than 140. Not 
all of them had “RT” in them, though, so the mystery remains. An 
important word about the final command line above, though: 
We’re using the square brackets notation to access the elements of 
tweetDF. In the first entry, “textlen>140”, we’re using a conditional 
expression to control which rows are reported. Only those rows 
where our new field “textlen” contains a quantity larger than 140 
109
Documents you may be interested
Documents you may be interested